aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.debianinstall/README.md7
-rw-r--r--.debianinstall/config.txt.template5
-rw-r--r--.debianinstall/debian-setup.sh10
-rw-r--r--.gitignore16
-rw-r--r--.gitlab-ci.yml1
-rw-r--r--.phpcs.xml4
-rw-r--r--CHANGELOG181
-rw-r--r--CHANGELOG.air48
-rw-r--r--SECURITY.md31
-rw-r--r--Zotlabs/ActivityStreams/ASObject.php776
-rw-r--r--Zotlabs/ActivityStreams/Activity.php122
-rw-r--r--Zotlabs/ActivityStreams/Actor.php428
-rw-r--r--Zotlabs/ActivityStreams/AssertionMethod.php87
-rw-r--r--Zotlabs/ActivityStreams/Collection.php124
-rw-r--r--Zotlabs/ActivityStreams/CollectionPage.php73
-rw-r--r--Zotlabs/ActivityStreams/IntransitiveActivity.php104
-rw-r--r--Zotlabs/ActivityStreams/Link.php183
-rw-r--r--Zotlabs/ActivityStreams/OrderedCollection.php8
-rw-r--r--Zotlabs/ActivityStreams/OrderedCollectionPage.php92
-rw-r--r--Zotlabs/ActivityStreams/Place.php125
-rw-r--r--Zotlabs/ActivityStreams/Profile.php29
-rw-r--r--Zotlabs/ActivityStreams/PublicKey.php68
-rw-r--r--Zotlabs/ActivityStreams/Question.php67
-rw-r--r--Zotlabs/ActivityStreams/Relationship.php67
-rw-r--r--Zotlabs/ActivityStreams/Signature.php65
-rw-r--r--Zotlabs/ActivityStreams/Tombstone.php48
-rw-r--r--Zotlabs/ActivityStreams/UnhandledElementException.php8
-rw-r--r--Zotlabs/Daemon/Channel_purge.php2
-rw-r--r--Zotlabs/Daemon/Content_importer.php12
-rw-r--r--Zotlabs/Daemon/Cron.php53
-rw-r--r--Zotlabs/Daemon/Expire.php4
-rw-r--r--Zotlabs/Daemon/File_importer.php8
-rw-r--r--Zotlabs/Daemon/Importdoc.php21
-rw-r--r--Zotlabs/Daemon/Notifier.php43
-rw-r--r--Zotlabs/Entity/Account.php352
-rw-r--r--Zotlabs/Entity/Channel.php714
-rw-r--r--Zotlabs/Entity/Item.php1498
-rw-r--r--Zotlabs/Lib/Activity.php622
-rw-r--r--Zotlabs/Lib/BaseObject.php80
-rw-r--r--Zotlabs/Lib/Chatroom.php2
-rw-r--r--Zotlabs/Lib/Connect.php8
-rw-r--r--Zotlabs/Lib/DB_Upgrade.php31
-rw-r--r--Zotlabs/Lib/Enotify.php36
-rw-r--r--Zotlabs/Lib/Libsync.php2
-rw-r--r--Zotlabs/Lib/Libzot.php166
-rw-r--r--Zotlabs/Lib/Mailer.php86
-rw-r--r--Zotlabs/Lib/SuperCurl.php127
-rw-r--r--Zotlabs/Lib/ThreadItem.php98
-rw-r--r--Zotlabs/Module/Achievements.php44
-rw-r--r--Zotlabs/Module/Activity.php4
-rw-r--r--Zotlabs/Module/Admin/Account_edit.php11
-rw-r--r--Zotlabs/Module/Admin/Accounts.php258
-rw-r--r--Zotlabs/Module/Admin/Addons.php285
-rw-r--r--Zotlabs/Module/Admin/Features.php5
-rw-r--r--Zotlabs/Module/Admin/Site.php3
-rw-r--r--Zotlabs/Module/Admin/Themes.php2
-rw-r--r--Zotlabs/Module/Api.php3
-rw-r--r--Zotlabs/Module/Apporder.php4
-rw-r--r--Zotlabs/Module/Apps.php4
-rw-r--r--Zotlabs/Module/Authorize.php9
-rw-r--r--Zotlabs/Module/Authtest.php4
-rw-r--r--Zotlabs/Module/Changeaddr.php40
-rw-r--r--Zotlabs/Module/Channel_calendar.php30
-rw-r--r--Zotlabs/Module/Chatsvc.php2
-rw-r--r--Zotlabs/Module/Cloud.php8
-rw-r--r--Zotlabs/Module/Conversation.php13
-rw-r--r--Zotlabs/Module/Cover_photo.php9
-rw-r--r--Zotlabs/Module/Dav.php1
-rw-r--r--Zotlabs/Module/Display.php7
-rw-r--r--Zotlabs/Module/Dreport.php8
-rw-r--r--Zotlabs/Module/Editpost.php1
-rw-r--r--Zotlabs/Module/Fbrowser.php2
-rw-r--r--Zotlabs/Module/Filer.php63
-rw-r--r--Zotlabs/Module/Go.php4
-rw-r--r--Zotlabs/Module/Home.php15
-rw-r--r--Zotlabs/Module/Hq.php1
-rw-r--r--Zotlabs/Module/Impel.php4
-rw-r--r--Zotlabs/Module/Import.php3
-rw-r--r--Zotlabs/Module/Import_progress.php20
-rw-r--r--Zotlabs/Module/Item.php548
-rw-r--r--Zotlabs/Module/Like.php18
-rw-r--r--Zotlabs/Module/Login.php11
-rw-r--r--Zotlabs/Module/Magic.php70
-rw-r--r--Zotlabs/Module/Mitem.php30
-rw-r--r--Zotlabs/Module/Moderate.php2
-rw-r--r--Zotlabs/Module/Network.php25
-rw-r--r--Zotlabs/Module/Notify.php4
-rw-r--r--Zotlabs/Module/OAuth2TestVehicle.php8
-rw-r--r--Zotlabs/Module/Oauth.php12
-rw-r--r--Zotlabs/Module/Oauth2.php12
-rw-r--r--Zotlabs/Module/Owa.php186
-rw-r--r--Zotlabs/Module/Page.php4
-rw-r--r--Zotlabs/Module/Pdledit.php2
-rw-r--r--Zotlabs/Module/Permcat.php4
-rw-r--r--Zotlabs/Module/Photos.php4
-rw-r--r--Zotlabs/Module/Profperm.php2
-rw-r--r--Zotlabs/Module/Pubstream.php8
-rw-r--r--Zotlabs/Module/React.php3
-rw-r--r--Zotlabs/Module/Removeaccount.php20
-rw-r--r--Zotlabs/Module/Removeme.php6
-rw-r--r--Zotlabs/Module/Rmagic.php4
-rw-r--r--Zotlabs/Module/Search_ac.php7
-rw-r--r--Zotlabs/Module/Settings/Account.php4
-rw-r--r--Zotlabs/Module/Settings/Calendar.php5
-rw-r--r--Zotlabs/Module/Settings/Channel_home.php5
-rw-r--r--Zotlabs/Module/Settings/Connections.php5
-rw-r--r--Zotlabs/Module/Settings/Conversation.php2
-rw-r--r--Zotlabs/Module/Settings/Directory.php5
-rw-r--r--Zotlabs/Module/Settings/Editor.php5
-rw-r--r--Zotlabs/Module/Settings/Events.php5
-rw-r--r--Zotlabs/Module/Settings/Features.php7
-rw-r--r--Zotlabs/Module/Settings/Manage.php5
-rw-r--r--Zotlabs/Module/Settings/Network.php5
-rw-r--r--Zotlabs/Module/Settings/Photos.php5
-rw-r--r--Zotlabs/Module/Settings/Profiles.php5
-rw-r--r--Zotlabs/Module/Setup.php5
-rw-r--r--Zotlabs/Module/Share.php6
-rw-r--r--Zotlabs/Module/Snap.php20
-rw-r--r--Zotlabs/Module/Sse.php3
-rw-r--r--Zotlabs/Module/Sse_bs.php26
-rw-r--r--Zotlabs/Module/Subthread.php2
-rw-r--r--Zotlabs/Module/Tagger.php6
-rw-r--r--Zotlabs/Module/Tagrm.php98
-rw-r--r--Zotlabs/Module/Thing.php46
-rw-r--r--Zotlabs/Module/Vote.php9
-rw-r--r--Zotlabs/Module/Webfinger.php14
-rw-r--r--Zotlabs/Module/Webpages.php5
-rw-r--r--Zotlabs/Module/Zot_probe.php8
-rw-r--r--Zotlabs/Render/SmartyInterface.php8
-rw-r--r--Zotlabs/Storage/Browser.php1
-rw-r--r--Zotlabs/Storage/GitRepo.php159
-rw-r--r--Zotlabs/Thumbs/Epubthumb.php183
-rw-r--r--Zotlabs/Update/_1007.php4
-rw-r--r--Zotlabs/Update/_1151.php4
-rw-r--r--Zotlabs/Web/HttpMeta.php13
-rw-r--r--Zotlabs/Web/WebServer.php2
-rw-r--r--Zotlabs/Widget/Activity.php2
-rw-r--r--Zotlabs/Widget/Album.php8
-rw-r--r--Zotlabs/Widget/Item.php2
-rw-r--r--Zotlabs/Widget/Messages.php61
-rw-r--r--Zotlabs/Widget/Pinned.php3
-rw-r--r--Zotlabs/Widget/Portfolio.php6
-rw-r--r--Zotlabs/Widget/Tagcloud.php3
-rw-r--r--Zotlabs/Widget/Tasklist.php2
-rw-r--r--Zotlabs/Zot6/Zot6Handler.php8
-rw-r--r--boot.php16
-rw-r--r--composer.json15
-rw-r--r--composer.lock1315
-rw-r--r--doc/en/context/ru/connections/help.html4
-rw-r--r--include/account.php94
-rw-r--r--include/attach.php79
-rw-r--r--include/bbcode.php16
-rw-r--r--include/channel.php14
-rw-r--r--include/config.php2
-rw-r--r--include/connections.php4
-rw-r--r--include/conversation.php3
-rw-r--r--include/datetime.php41
-rw-r--r--include/dba/dba_pdo.php112
-rw-r--r--include/event.php127
-rw-r--r--include/features.php10
-rw-r--r--include/feedutils.php59
-rw-r--r--include/help.php6
-rw-r--r--include/html2bbcode.php3
-rw-r--r--include/import.php8
-rw-r--r--include/items.php590
-rw-r--r--include/js_strings.php23
-rw-r--r--include/nav.php6
-rw-r--r--include/network.php126
-rw-r--r--include/oembed.php4
-rw-r--r--include/permissions.php4
-rw-r--r--include/photos.php61
-rw-r--r--include/plugin.php10
-rw-r--r--include/text.php18
-rw-r--r--include/xchan.php6
-rw-r--r--include/zid.php33
-rw-r--r--library/HTML5/Data.php120
-rw-r--r--library/HTML5/InputStream.php284
-rw-r--r--library/HTML5/Parser.php36
-rw-r--r--library/HTML5/Tokenizer.php2307
-rw-r--r--library/HTML5/TreeBuilder.php3721
-rw-r--r--library/HTML5/named-character-references.ser1
-rw-r--r--library/PHPGit.autoload.php7
-rw-r--r--library/composer/ClassLoader.php413
-rw-r--r--library/composer/autoload_classmap.php9
-rw-r--r--library/composer/autoload_namespaces.php11
-rw-r--r--library/composer/autoload_psr4.php11
-rw-r--r--library/composer/autoload_real.php50
-rw-r--r--library/composer/installed.json157
-rw-r--r--library/epub-meta/LICENSE19
-rw-r--r--library/epub-meta/README28
-rw-r--r--library/epub-meta/assets/css/cleditor/images/buttons.gifbin3064 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/cleditor/images/toolbar.gifbin68 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/cleditor/jquery.cleditor.css24
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.pngbin180 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.pngbin178 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.pngbin120 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.pngbin105 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_dadada_1x400.pngbin111 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.pngbin110 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.pngbin119 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin101 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-icons_222222_256x240.pngbin4369 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-icons_2e83ff_256x240.pngbin4369 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-icons_454545_256x240.pngbin4369 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-icons_888888_256x240.pngbin4369 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/images/ui-icons_cd0a0a_256x240.pngbin4369 -> 0 bytes
-rw-r--r--library/epub-meta/assets/css/smoothness/jquery-ui-1.8.18.custom.css565
-rw-r--r--library/epub-meta/assets/css/style.css180
-rw-r--r--library/epub-meta/assets/js/jquery-1.7.1.min.js4
-rw-r--r--library/epub-meta/assets/js/jquery-ui-1.8.18.custom.min.js356
-rw-r--r--library/epub-meta/assets/js/jquery.cleditor.min.js31
-rw-r--r--library/epub-meta/assets/js/script.js194
-rw-r--r--library/epub-meta/epub.php536
-rw-r--r--library/epub-meta/index.php214
-rw-r--r--library/epub-meta/test/test.epubbin768780 -> 0 bytes
-rw-r--r--library/epub-meta/test/test.jpgbin821 -> 0 bytes
-rw-r--r--library/epub-meta/test/test.phpunit.php190
-rw-r--r--library/epub-meta/util.php30
-rw-r--r--library/jquery.timeago.js232
-rw-r--r--library/kzykhys/git/.travis.yml20
-rw-r--r--library/kzykhys/git/README.md1347
-rw-r--r--library/kzykhys/git/phpunit.xml.dist28
-rw-r--r--library/kzykhys/git/src/PHPGit/Command.php123
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/AddCommand.php75
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/ArchiveCommand.php96
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/BranchCommand.php229
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/CatCommand.php91
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/CheckoutCommand.php145
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/CloneCommand.php71
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/CommitCommand.php87
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/ConfigCommand.php132
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/DescribeCommand.php90
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/FetchCommand.php112
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/InitCommand.php65
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/LogCommand.php105
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/MergeCommand.php110
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/MvCommand.php70
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/PullCommand.php59
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/PushCommand.php65
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/RebaseCommand.php129
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/Remote/SetBranchesCommand.php98
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/Remote/SetHeadCommand.php120
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/Remote/SetUrlCommand.php175
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/RemoteCommand.php278
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/ResetCommand.php199
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/RmCommand.php97
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/ShortlogCommand.php134
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/ShowCommand.php70
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/StashCommand.php309
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/StatusCommand.php147
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/TagCommand.php156
-rw-r--r--library/kzykhys/git/src/PHPGit/Command/TreeCommand.php70
-rw-r--r--library/kzykhys/git/src/PHPGit/Exception/GitException.php39
-rw-r--r--library/kzykhys/git/src/PHPGit/Git.php308
-rw-r--r--library/kzykhys/git/test/PHPGit/BaseTestCase.php33
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/AddCommandTest.php42
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/ArchiveCommandTest.php32
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/BranchCommandTest.php106
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/CatCommandTest.php65
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/CheckoutCommandTest.php65
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/CloneCommandTest.php28
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/CommitCommandTest.php26
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/ConfigCommandTest.php55
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/DescribeCommandTest.php36
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/FetchCommandTest.php36
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/MergeCommandTest.php101
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/MvCommandTest.php26
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/PullCommandTest.php22
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/PushCommandTest.php34
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/RebaseCommandTest.php154
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/Remote/SetBranchesCommandTest.php28
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/Remote/SetHeadCommandTest.php56
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/Remote/SetUrlCommandTest.php46
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/RemoteCommandTest.php100
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/ResetCommandTest.php128
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/RmCommandTest.php51
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/ShortlogCommandTest.php71
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/ShowCommandTest.php26
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/StashCommandTest.php204
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/StatusCommandTest.php76
-rw-r--r--library/kzykhys/git/test/PHPGit/Command/TagCommandTest.php58
-rw-r--r--library/kzykhys/git/test/PHPGit/Exception/GitExceptionTest.php23
-rw-r--r--library/kzykhys/git/test/PHPGit/GitTest.php33
-rw-r--r--library/sticky-kit/sticky-kit.js265
-rw-r--r--library/sticky-kit/sticky-kit.min.js10
-rw-r--r--library/symfony/options-resolver/CHANGELOG.md46
-rw-r--r--library/symfony/options-resolver/Exception/AccessException.php22
-rw-r--r--library/symfony/options-resolver/Exception/ExceptionInterface.php21
-rw-r--r--library/symfony/options-resolver/Exception/InvalidArgumentException.php21
-rw-r--r--library/symfony/options-resolver/Exception/InvalidOptionsException.php23
-rw-r--r--library/symfony/options-resolver/Exception/MissingOptionsException.php23
-rw-r--r--library/symfony/options-resolver/Exception/NoSuchOptionException.php26
-rw-r--r--library/symfony/options-resolver/Exception/OptionDefinitionException.php21
-rw-r--r--library/symfony/options-resolver/Exception/UndefinedOptionsException.php24
-rw-r--r--library/symfony/options-resolver/Options.php22
-rw-r--r--library/symfony/options-resolver/OptionsResolver.php1218
-rw-r--r--library/symfony/options-resolver/OptionsResolverInterface.php212
-rw-r--r--library/symfony/options-resolver/README.md20
-rw-r--r--library/symfony/options-resolver/Tests/LegacyOptionsResolverTest.php733
-rw-r--r--library/symfony/options-resolver/Tests/LegacyOptionsTest.php337
-rw-r--r--library/symfony/options-resolver/Tests/OptionsResolver2Dot6Test.php1550
-rw-r--r--library/symfony/options-resolver/phpunit.xml.dist29
-rw-r--r--library/symfony/process/CHANGELOG.md40
-rw-r--r--library/symfony/process/Exception/ExceptionInterface.php21
-rw-r--r--library/symfony/process/Exception/InvalidArgumentException.php21
-rw-r--r--library/symfony/process/Exception/LogicException.php21
-rw-r--r--library/symfony/process/Exception/ProcessFailedException.php54
-rw-r--r--library/symfony/process/Exception/ProcessTimedOutException.php69
-rw-r--r--library/symfony/process/Exception/RuntimeException.php21
-rw-r--r--library/symfony/process/ExecutableFinder.php90
-rw-r--r--library/symfony/process/PhpExecutableFinder.php90
-rw-r--r--library/symfony/process/PhpProcess.php72
-rw-r--r--library/symfony/process/Pipes/AbstractPipes.php74
-rw-r--r--library/symfony/process/Pipes/PipesInterface.php60
-rw-r--r--library/symfony/process/Pipes/UnixPipes.php214
-rw-r--r--library/symfony/process/Pipes/WindowsPipes.php253
-rw-r--r--library/symfony/process/Process.php1515
-rw-r--r--library/symfony/process/ProcessBuilder.php287
-rw-r--r--library/symfony/process/ProcessUtils.php115
-rw-r--r--library/symfony/process/README.md65
-rw-r--r--library/symfony/process/Tests/AbstractProcessTest.php1196
-rw-r--r--library/symfony/process/Tests/ExecutableFinderTest.php144
-rw-r--r--library/symfony/process/Tests/NonStopableProcess.php45
-rw-r--r--library/symfony/process/Tests/PhpExecutableFinderTest.php119
-rw-r--r--library/symfony/process/Tests/PhpProcessTest.php53
-rw-r--r--library/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php72
-rw-r--r--library/symfony/process/Tests/ProcessBuilderTest.php225
-rw-r--r--library/symfony/process/Tests/ProcessFailedExceptionTest.php146
-rw-r--r--library/symfony/process/Tests/ProcessInSigchildEnvironment.php22
-rw-r--r--library/symfony/process/Tests/ProcessUtilsTest.php48
-rw-r--r--library/symfony/process/Tests/SigchildDisabledProcessTest.php263
-rw-r--r--library/symfony/process/Tests/SigchildEnabledProcessTest.php148
-rw-r--r--library/symfony/process/Tests/SignalListener.php25
-rw-r--r--library/symfony/process/Tests/SimpleProcessTest.php216
-rw-r--r--library/symfony/process/phpunit.xml.dist28
-rw-r--r--library/tiptip/README30
-rw-r--r--library/tiptip/README.txt25
-rw-r--r--library/tiptip/jquery.tipTip.js191
-rw-r--r--library/tiptip/jquery.tipTip.minified.js21
-rw-r--r--library/tiptip/tipTip.css113
-rw-r--r--phpstan.neon.dist11
-rwxr-xr-xtests/create_test_db.sh13
-rw-r--r--tests/phpunit.xml2
-rw-r--r--tests/unit/CleanupBBCodeTest.php27
-rw-r--r--tests/unit/Lib/ActivityStreamsTest.php136
-rw-r--r--tests/unit/Lib/MailerTest.php62
-rw-r--r--tests/unit/Module/AdminAccountEditTest.php222
-rw-r--r--tests/unit/Module/AdminAccountsTest.php173
-rw-r--r--tests/unit/Module/ItemTest.php56
-rw-r--r--tests/unit/Module/MagicTest.php120
-rw-r--r--tests/unit/Module/OwaTest.php64
-rw-r--r--tests/unit/Module/TestCase.php62
-rw-r--r--tests/unit/Thumb/EpubthumbTest.php158
-rw-r--r--tests/unit/UnitTestCase.php10
-rw-r--r--tests/unit/Widget/HelpindexTest.php10
-rw-r--r--tests/unit/bootstrap.php9
-rw-r--r--tests/unit/includes/BBCodeTest.php8
-rw-r--r--tests/unit/includes/DatetimeTest.php53
-rw-r--r--tests/unit/includes/ItemsTest.php132
-rw-r--r--tests/unit/includes/MarkdownTest.php33
-rw-r--r--tests/unit/includes/NetworkTest.php58
-rw-r--r--tests/unit/includes/dba/DbaPdoTest.php140
-rw-r--r--tests/unit/includes/dba/_files/account.yml17
-rw-r--r--tests/unit/includes/dba/_files/register.yml20
-rw-r--r--util/hmessages.po16200
-rwxr-xr-xutil/precompile_smarty3.php50
-rwxr-xr-xvendor/bin/naturalselection2
-rwxr-xr-xvendor/bin/sabredav2
-rw-r--r--vendor/brick/math/CHANGELOG.md18
-rw-r--r--vendor/brick/math/composer.json13
-rw-r--r--vendor/brick/math/src/BigDecimal.php54
-rw-r--r--vendor/brick/math/src/BigInteger.php48
-rw-r--r--vendor/brick/math/src/BigNumber.php235
-rw-r--r--vendor/brick/math/src/BigRational.php46
-rw-r--r--vendor/brick/math/src/Exception/NumberFormatException.php10
-rw-r--r--vendor/brick/math/src/Internal/Calculator.php44
-rw-r--r--vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php10
-rw-r--r--vendor/brick/math/src/Internal/Calculator/NativeCalculator.php27
-rw-r--r--vendor/brick/math/src/RoundingMode.php31
-rw-r--r--vendor/chillerlan/php-qrcode/.github/FUNDING.yml2
-rw-r--r--vendor/chillerlan/php-qrcode/.github/workflows/tests.yml82
-rw-r--r--vendor/chillerlan/php-qrcode/.gitignore5
-rw-r--r--vendor/chillerlan/php-qrcode/.phan/config.php55
-rw-r--r--vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php6744
-rw-r--r--vendor/chillerlan/php-qrcode/.scrutinizer.yml16
-rw-r--r--vendor/chillerlan/php-qrcode/README.md239
-rw-r--r--vendor/chillerlan/php-qrcode/composer.json19
-rw-r--r--vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php38
-rw-r--r--vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php81
-rw-r--r--vendor/chillerlan/php-qrcode/examples/QRImageWithText.php100
-rw-r--r--vendor/chillerlan/php-qrcode/examples/custom_output.php38
-rw-r--r--vendor/chillerlan/php-qrcode/examples/example_image.pngbin2279 -> 0 bytes
-rw-r--r--vendor/chillerlan/php-qrcode/examples/example_svg.pngbin15925 -> 0 bytes
-rw-r--r--vendor/chillerlan/php-qrcode/examples/fpdf.php47
-rw-r--r--vendor/chillerlan/php-qrcode/examples/html.php102
-rw-r--r--vendor/chillerlan/php-qrcode/examples/image.php63
-rw-r--r--vendor/chillerlan/php-qrcode/examples/imageWithLogo.php45
-rw-r--r--vendor/chillerlan/php-qrcode/examples/imageWithText.php33
-rw-r--r--vendor/chillerlan/php-qrcode/examples/imagick.php59
-rw-r--r--vendor/chillerlan/php-qrcode/examples/octocat.pngbin2468 -> 0 bytes
-rw-r--r--vendor/chillerlan/php-qrcode/examples/svg.php78
-rw-r--r--vendor/chillerlan/php-qrcode/examples/text.php68
-rw-r--r--vendor/chillerlan/php-qrcode/phpdoc.xml20
-rw-r--r--vendor/chillerlan/php-qrcode/phpunit.xml26
-rw-r--r--vendor/chillerlan/php-qrcode/public/index.html163
-rw-r--r--vendor/chillerlan/php-qrcode/public/qrcode.php97
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php18
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php4
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php12
-rwxr-xr-xvendor/chillerlan/php-qrcode/src/Data/QRMatrix.php87
-rw-r--r--vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php8
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php2
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRImage.php2
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRImagick.php2
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php12
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php5
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php47
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRString.php4
-rwxr-xr-xvendor/chillerlan/php-qrcode/src/QRCode.php12
-rw-r--r--vendor/chillerlan/php-qrcode/src/QROptionsTrait.php4
-rw-r--r--vendor/chillerlan/php-settings-container/.github/FUNDING.yml2
-rw-r--r--vendor/chillerlan/php-settings-container/.github/workflows/tests.yml105
-rw-r--r--vendor/chillerlan/php-settings-container/.gitignore4
-rw-r--r--vendor/chillerlan/php-settings-container/.phan/config.php54
-rw-r--r--vendor/chillerlan/php-settings-container/.scrutinizer.yml14
-rw-r--r--vendor/chillerlan/php-settings-container/README.md99
-rw-r--r--vendor/chillerlan/php-settings-container/composer.json20
-rw-r--r--vendor/chillerlan/php-settings-container/docs/Readme.md13
-rw-r--r--vendor/chillerlan/php-settings-container/examples/advanced.php51
-rw-r--r--vendor/chillerlan/php-settings-container/examples/simple.php29
-rw-r--r--vendor/chillerlan/php-settings-container/phpdoc.xml20
-rw-r--r--vendor/chillerlan/php-settings-container/phpunit.xml26
-rw-r--r--vendor/chillerlan/php-settings-container/rules-magic-access.neon4
-rw-r--r--vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php114
-rw-r--r--vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php34
-rw-r--r--vendor/composer/InstalledVersions.php11
-rw-r--r--vendor/composer/autoload_classmap.php370
-rw-r--r--vendor/composer/autoload_files.php4
-rw-r--r--vendor/composer/autoload_psr4.php4
-rw-r--r--vendor/composer/autoload_static.php390
-rw-r--r--vendor/composer/installed.json610
-rw-r--r--vendor/composer/installed.php154
-rw-r--r--vendor/ezyang/htmlpurifier/VERSION2
-rw-r--r--vendor/ezyang/htmlpurifier/composer.json2
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php3
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier.php6
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php1
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php14
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php46
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php18
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php29
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php3
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php2
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema.ser2
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema/Core.RemoveBlanks.txt10
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php4
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php17
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php28
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php16
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php3
-rw-r--r--vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php2
-rw-r--r--vendor/paragonie/constant_time_encoding/README.md12
-rw-r--r--vendor/paragonie/constant_time_encoding/composer.json6
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base32.php56
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base64.php43
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Binary.php9
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Encoding.php108
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Hex.php13
-rw-r--r--vendor/paragonie/constant_time_encoding/src/RFC4648.php62
-rw-r--r--vendor/phpseclib/phpseclib/BACKERS.md4
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php1
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php11
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/File/X509.php7
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php11
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php21
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php275
-rw-r--r--vendor/psr/clock/CHANGELOG.md11
-rw-r--r--vendor/psr/clock/LICENSE (renamed from vendor/symfony/polyfill-php81/LICENSE)10
-rw-r--r--vendor/psr/clock/README.md61
-rw-r--r--vendor/psr/clock/composer.json21
-rw-r--r--vendor/psr/clock/src/ClockInterface.php13
-rw-r--r--vendor/psr/log/composer.json2
-rw-r--r--vendor/psr/log/src/LoggerAwareInterface.php6
-rw-r--r--vendor/psr/log/src/LoggerAwareTrait.php6
-rw-r--r--vendor/psr/log/src/LoggerInterface.php47
-rw-r--r--vendor/psr/log/src/LoggerTrait.php64
-rw-r--r--vendor/psr/log/src/NullLogger.php8
-rw-r--r--vendor/ramsey/collection/LICENSE2
-rw-r--r--vendor/ramsey/collection/README.md22
-rw-r--r--vendor/ramsey/collection/SECURITY.md70
-rw-r--r--vendor/ramsey/collection/composer.json117
-rw-r--r--vendor/ramsey/collection/conventional-commits.json22
-rw-r--r--vendor/ramsey/collection/src/AbstractArray.php60
-rw-r--r--vendor/ramsey/collection/src/AbstractCollection.php223
-rw-r--r--vendor/ramsey/collection/src/AbstractSet.php10
-rw-r--r--vendor/ramsey/collection/src/ArrayInterface.php4
-rw-r--r--vendor/ramsey/collection/src/Collection.php15
-rw-r--r--vendor/ramsey/collection/src/CollectionInterface.php112
-rw-r--r--vendor/ramsey/collection/src/DoubleEndedQueue.php129
-rw-r--r--vendor/ramsey/collection/src/DoubleEndedQueueInterface.php41
-rw-r--r--vendor/ramsey/collection/src/Exception/CollectionException.php (renamed from vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php)7
-rw-r--r--vendor/ramsey/collection/src/Exception/CollectionMismatchException.php4
-rw-r--r--vendor/ramsey/collection/src/Exception/InvalidArgumentException.php4
-rw-r--r--vendor/ramsey/collection/src/Exception/InvalidPropertyOrMethod.php (renamed from vendor/ramsey/collection/src/Exception/ValueExtractionException.php)8
-rw-r--r--vendor/ramsey/collection/src/Exception/NoSuchElementException.php4
-rw-r--r--vendor/ramsey/collection/src/Exception/OutOfBoundsException.php4
-rw-r--r--vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php4
-rw-r--r--vendor/ramsey/collection/src/Map/AbstractMap.php109
-rw-r--r--vendor/ramsey/collection/src/Map/AbstractTypedMap.php23
-rw-r--r--vendor/ramsey/collection/src/Map/AssociativeArrayMap.php3
-rw-r--r--vendor/ramsey/collection/src/Map/MapInterface.php57
-rw-r--r--vendor/ramsey/collection/src/Map/NamedParameterMap.php22
-rw-r--r--vendor/ramsey/collection/src/Map/TypedMap.php39
-rw-r--r--vendor/ramsey/collection/src/Map/TypedMapInterface.php3
-rw-r--r--vendor/ramsey/collection/src/Queue.php101
-rw-r--r--vendor/ramsey/collection/src/QueueInterface.php21
-rw-r--r--vendor/ramsey/collection/src/Set.php16
-rw-r--r--vendor/ramsey/collection/src/Sort.php31
-rw-r--r--vendor/ramsey/collection/src/Tool/TypeTrait.php48
-rw-r--r--vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php57
-rw-r--r--vendor/ramsey/collection/src/Tool/ValueToStringTrait.php13
-rw-r--r--vendor/ramsey/uuid/composer.json2
-rw-r--r--vendor/ramsey/uuid/src/Math/BrickMathCalculator.php6
-rwxr-xr-xvendor/sabre/dav/bin/googlecode_upload.py248
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Backend/BackendInterface.php2
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php2
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Backend/PDO.php4
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Calendar.php2
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Notifications/Node.php4
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Plugin.php4
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php15
-rw-r--r--vendor/sabre/dav/lib/CalDAV/SharingPlugin.php2
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarMultiGetReport.php2
-rw-r--r--vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarQueryReport.php2
-rw-r--r--vendor/sabre/dav/lib/CardDAV/Backend/BackendInterface.php4
-rw-r--r--vendor/sabre/dav/lib/CardDAV/Backend/PDO.php2
-rw-r--r--vendor/sabre/dav/lib/CardDAV/Plugin.php2
-rw-r--r--vendor/sabre/dav/lib/CardDAV/Xml/Property/SupportedAddressData.php2
-rw-r--r--vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Auth/Plugin.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Browser/Plugin.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Exception/InvalidSyncToken.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Exception/Locked.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Exception/TooManyMatches.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/INodeByPath.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Server.php6
-rw-r--r--vendor/sabre/dav/lib/DAV/Sharing/Plugin.php2
-rw-r--r--vendor/sabre/dav/lib/DAV/Tree.php14
-rw-r--r--vendor/sabre/dav/lib/DAV/Version.php2
-rw-r--r--vendor/sabre/dav/lib/DAVACL/Plugin.php2
-rw-r--r--vendor/sabre/dav/lib/DAVACL/PrincipalBackend/PDO.php2
-rw-r--r--vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php2
-rw-r--r--vendor/sabre/event/.github/workflows/ci.yml63
-rw-r--r--vendor/sabre/event/.php-cs-fixer.dist.php18
-rw-r--r--vendor/sabre/event/.php_cs.dist12
-rw-r--r--vendor/sabre/event/composer.json6
-rw-r--r--vendor/sabre/event/lib/EmitterInterface.php4
-rw-r--r--vendor/sabre/event/lib/EmitterTrait.php4
-rw-r--r--vendor/sabre/event/lib/Loop/Loop.php4
-rw-r--r--vendor/sabre/event/lib/Loop/functions.php2
-rw-r--r--vendor/sabre/event/lib/Promise.php26
-rw-r--r--vendor/sabre/event/lib/Promise/functions.php5
-rw-r--r--vendor/sabre/event/lib/Version.php2
-rw-r--r--vendor/sabre/event/lib/WildcardEmitterTrait.php4
-rw-r--r--vendor/sabre/event/lib/coroutine.php15
-rw-r--r--vendor/sabre/event/phpstan.neon2
-rw-r--r--vendor/sabre/http/.github/workflows/ci.yml17
-rw-r--r--vendor/sabre/http/.gitignore1
-rw-r--r--vendor/sabre/http/.php-cs-fixer.dist.php17
-rw-r--r--vendor/sabre/http/CHANGELOG.md31
-rw-r--r--vendor/sabre/http/composer.json6
-rw-r--r--vendor/sabre/http/lib/Auth/AWS.php16
-rw-r--r--vendor/sabre/http/lib/Auth/Digest.php6
-rw-r--r--vendor/sabre/http/lib/Client.php15
-rw-r--r--vendor/sabre/http/lib/Request.php1
-rw-r--r--vendor/sabre/http/lib/Response.php3
-rw-r--r--vendor/sabre/http/lib/Sapi.php24
-rw-r--r--vendor/sabre/http/lib/Version.php2
-rw-r--r--vendor/sabre/http/lib/functions.php17
-rw-r--r--vendor/sabre/uri/.php-cs-fixer.dist.php6
-rw-r--r--vendor/sabre/uri/composer.json14
-rw-r--r--vendor/sabre/uri/lib/Version.php2
-rw-r--r--vendor/sabre/uri/lib/functions.php95
-rw-r--r--vendor/sabre/vobject/composer.json4
-rw-r--r--vendor/sabre/vobject/lib/Component/VCalendar.php2
-rw-r--r--vendor/sabre/vobject/lib/DateTimeParser.php4
-rw-r--r--vendor/sabre/vobject/lib/Document.php8
-rw-r--r--vendor/sabre/vobject/lib/FreeBusyGenerator.php4
-rw-r--r--vendor/sabre/vobject/lib/ITip/Broker.php32
-rw-r--r--vendor/sabre/vobject/lib/Parser/MimeDir.php8
-rw-r--r--vendor/sabre/vobject/lib/Property.php24
-rw-r--r--vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php4
-rw-r--r--vendor/sabre/vobject/lib/Property/ICalendar/Recur.php10
-rw-r--r--vendor/sabre/vobject/lib/Recur/EventIterator.php2
-rw-r--r--vendor/sabre/vobject/lib/Recur/RRuleIterator.php89
-rw-r--r--vendor/sabre/vobject/lib/TimeZoneUtil.php4
-rw-r--r--vendor/sabre/vobject/lib/Version.php2
-rw-r--r--vendor/sabre/xml/.github/workflows/ci.yml18
-rw-r--r--vendor/sabre/xml/.php-cs-fixer.dist.php17
-rw-r--r--vendor/sabre/xml/composer.json6
-rw-r--r--vendor/sabre/xml/lib/Deserializer/functions.php11
-rw-r--r--vendor/sabre/xml/lib/Element/Base.php4
-rw-r--r--vendor/sabre/xml/lib/Element/Elements.php2
-rw-r--r--vendor/sabre/xml/lib/Element/KeyValue.php2
-rw-r--r--vendor/sabre/xml/lib/Element/Uri.php2
-rw-r--r--vendor/sabre/xml/lib/Element/XmlFragment.php2
-rw-r--r--vendor/sabre/xml/lib/LibXMLException.php6
-rw-r--r--vendor/sabre/xml/lib/ParseException.php2
-rw-r--r--vendor/sabre/xml/lib/Reader.php8
-rw-r--r--vendor/sabre/xml/lib/Serializer/functions.php7
-rw-r--r--vendor/sabre/xml/lib/Service.php38
-rw-r--r--vendor/sabre/xml/lib/Version.php2
-rw-r--r--vendor/sabre/xml/lib/Writer.php6
-rw-r--r--vendor/sabre/xml/lib/XmlDeserializable.php2
-rw-r--r--vendor/scssphp/scssphp/src/Block/DirectiveBlock.php3
-rw-r--r--vendor/scssphp/scssphp/src/Block/EachBlock.php3
-rw-r--r--vendor/scssphp/scssphp/src/Block/ElseifBlock.php3
-rw-r--r--vendor/scssphp/scssphp/src/Block/ForBlock.php5
-rw-r--r--vendor/scssphp/scssphp/src/Block/IfBlock.php3
-rw-r--r--vendor/scssphp/scssphp/src/Block/MediaBlock.php3
-rw-r--r--vendor/scssphp/scssphp/src/Compiler.php42
-rw-r--r--vendor/scssphp/scssphp/src/Parser.php98
-rw-r--r--vendor/scssphp/scssphp/src/Type.php3
-rw-r--r--vendor/scssphp/scssphp/src/Version.php2
-rw-r--r--vendor/simplepie/simplepie/.php-cs-fixer.dist.php2
-rw-r--r--vendor/simplepie/simplepie/CHANGELOG.md17
-rw-r--r--vendor/simplepie/simplepie/README.markdown16
-rw-r--r--vendor/simplepie/simplepie/autoloader.php2
-rw-r--r--vendor/simplepie/simplepie/composer.json1
-rwxr-xr-xvendor/simplepie/simplepie/library/SimplePie.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Author.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/File.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php1
-rwxr-xr-xvendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php2
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Caption.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Category.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Copyright.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Core.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Credit.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Enclosure.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Exception.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/File.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/IRI.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Item.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Locator.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Misc.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Parser.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Rating.php1
-rwxr-xr-xvendor/simplepie/simplepie/library/SimplePie/Registry.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Restriction.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Sanitize.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Source.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php1
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/gzdecode.php1
-rw-r--r--vendor/simplepie/simplepie/src/Author.php1
-rw-r--r--vendor/simplepie/simplepie/src/Cache.php1
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Base.php1
-rw-r--r--vendor/simplepie/simplepie/src/Cache/BaseDataCache.php5
-rw-r--r--vendor/simplepie/simplepie/src/Cache/DB.php9
-rw-r--r--vendor/simplepie/simplepie/src/Cache/DataCache.php1
-rw-r--r--vendor/simplepie/simplepie/src/Cache/File.php1
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Memcache.php1
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Memcached.php1
-rw-r--r--vendor/simplepie/simplepie/src/Cache/MySQL.php9
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Psr16.php3
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Redis.php1
-rw-r--r--vendor/simplepie/simplepie/src/Caption.php1
-rw-r--r--vendor/simplepie/simplepie/src/Category.php1
-rw-r--r--vendor/simplepie/simplepie/src/Content/Type/Sniffer.php1
-rw-r--r--vendor/simplepie/simplepie/src/Copyright.php1
-rw-r--r--vendor/simplepie/simplepie/src/Credit.php1
-rw-r--r--vendor/simplepie/simplepie/src/Enclosure.php17
-rw-r--r--vendor/simplepie/simplepie/src/Exception.php1
-rw-r--r--vendor/simplepie/simplepie/src/File.php1
-rw-r--r--vendor/simplepie/simplepie/src/Gzdecode.php3
-rw-r--r--vendor/simplepie/simplepie/src/HTTP/Parser.php1
-rw-r--r--vendor/simplepie/simplepie/src/IRI.php1
-rw-r--r--vendor/simplepie/simplepie/src/Item.php7
-rw-r--r--vendor/simplepie/simplepie/src/Locator.php1
-rw-r--r--vendor/simplepie/simplepie/src/Misc.php1
-rw-r--r--vendor/simplepie/simplepie/src/Net/IPv6.php1
-rw-r--r--vendor/simplepie/simplepie/src/Parse/Date.php1
-rw-r--r--vendor/simplepie/simplepie/src/Parser.php12
-rw-r--r--vendor/simplepie/simplepie/src/Rating.php1
-rw-r--r--vendor/simplepie/simplepie/src/Registry.php5
-rw-r--r--vendor/simplepie/simplepie/src/RegistryAware.php1
-rw-r--r--vendor/simplepie/simplepie/src/Restriction.php1
-rw-r--r--vendor/simplepie/simplepie/src/Sanitize.php17
-rw-r--r--vendor/simplepie/simplepie/src/SimplePie.php28
-rw-r--r--vendor/simplepie/simplepie/src/Source.php7
-rw-r--r--vendor/simplepie/simplepie/src/XML/Declaration/Parser.php1
-rw-r--r--vendor/smarty/smarty/CHANGELOG.md151
-rw-r--r--vendor/smarty/smarty/CONTRIBUTING.md119
-rw-r--r--vendor/smarty/smarty/Makefile19
-rw-r--r--vendor/smarty/smarty/README.md2
-rw-r--r--vendor/smarty/smarty/SECURITY.md6
-rw-r--r--vendor/smarty/smarty/TODO.txt32
-rw-r--r--vendor/smarty/smarty/composer.json14
-rw-r--r--vendor/smarty/smarty/demo/index.php8
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.apc.php85
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php99
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php183
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php346
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php42
-rw-r--r--vendor/smarty/smarty/demo/plugins/resource.extendsall.php62
-rw-r--r--vendor/smarty/smarty/demo/plugins/resource.mysql.php101
-rw-r--r--vendor/smarty/smarty/demo/plugins/resource.mysqls.php77
-rw-r--r--vendor/smarty/smarty/demo/templates/index.tpl2
-rw-r--r--vendor/smarty/smarty/docs/api/basics.md93
-rw-r--r--vendor/smarty/smarty/docs/api/caching/basics.md184
-rw-r--r--vendor/smarty/smarty/docs/api/caching/custom-storage-layers.md36
-rw-r--r--vendor/smarty/smarty/docs/api/caching/multiple-caches-per-template.md137
-rw-r--r--vendor/smarty/smarty/docs/api/configuring.md225
-rw-r--r--vendor/smarty/smarty/docs/api/extending/block-tags.md59
-rw-r--r--vendor/smarty/smarty/docs/api/extending/extensions.md101
-rw-r--r--vendor/smarty/smarty/docs/api/extending/introduction.md10
-rw-r--r--vendor/smarty/smarty/docs/api/extending/modifiers.md27
-rw-r--r--vendor/smarty/smarty/docs/api/extending/tags.md84
-rw-r--r--vendor/smarty/smarty/docs/api/filters/output-filters.md35
-rw-r--r--vendor/smarty/smarty/docs/api/filters/postfilters.md33
-rw-r--r--vendor/smarty/smarty/docs/api/filters/prefilters.md26
-rw-r--r--vendor/smarty/smarty/docs/api/inheritance.md130
-rw-r--r--vendor/smarty/smarty/docs/api/rendering.md86
-rw-r--r--vendor/smarty/smarty/docs/api/resources.md322
-rw-r--r--vendor/smarty/smarty/docs/api/security.md119
-rw-r--r--vendor/smarty/smarty/docs/api/variables/assigning.md139
-rw-r--r--vendor/smarty/smarty/docs/api/variables/config-files.md88
-rw-r--r--vendor/smarty/smarty/docs/api/variables/objects.md106
-rw-r--r--vendor/smarty/smarty/docs/api/variables/static-class-methods.md39
-rw-r--r--vendor/smarty/smarty/docs/api/variables/streams.md16
-rw-r--r--vendor/smarty/smarty/docs/appendixes/tips.md3
-rw-r--r--vendor/smarty/smarty/docs/designers/chapter-debugging-console.md3
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md8
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md9
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md28
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md88
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-tags.md (renamed from vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md)7
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md3
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions.md (renamed from vendor/sabre/event/bin/.empty)0
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md7
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md4
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md6
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md1
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md6
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md4
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md32
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md8
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md86
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md18
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md27
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/index.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md4
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md4
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/index.md138
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md21
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md26
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md4
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md9
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md11
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md26
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md27
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md9
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md32
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md8
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md35
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md32
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md14
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md9
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md25
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md2
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables/index.md4
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md4
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md7
-rw-r--r--vendor/smarty/smarty/docs/features.md37
-rw-r--r--vendor/smarty/smarty/docs/getting-started.md58
-rw-r--r--vendor/smarty/smarty/docs/img/smarty.svg22
-rw-r--r--vendor/smarty/smarty/docs/index.md35
-rw-r--r--vendor/smarty/smarty/docs/philosophy.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features.md14
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md99
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md43
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md144
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md27
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md15
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md128
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md32
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions.md64
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/add-extension.md0
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md49
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md49
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md46
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-append.md3
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md42
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md3
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-display.md4
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md23
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md23
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md4
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md5
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md5
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md4
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md3
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md4
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md32
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md32
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md47
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md46
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md59
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables.md63
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md18
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md21
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md3
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md10
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md30
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md3
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md4
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md4
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md13
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md2
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md28
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md10
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md49
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching.md24
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md176
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-custom.md296
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-groups.md60
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md87
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md153
-rw-r--r--vendor/smarty/smarty/docs/programmers/charset.md44
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins.md44
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md95
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md66
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md94
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md18
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md48
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md86
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md51
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md48
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md89
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md128
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources.md19
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-custom.md111
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-extends.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-file.md160
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-streams.md27
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-string.md73
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/template-resources.md130
-rw-r--r--vendor/smarty/smarty/docs/programmers/smarty-constants.md26
-rw-r--r--vendor/smarty/smarty/docs/upgrading.md129
-rw-r--r--vendor/smarty/smarty/libs/Autoloader.php111
-rw-r--r--vendor/smarty/smarty/libs/Smarty.class.php1443
-rw-r--r--vendor/smarty/smarty/libs/bootstrap.php16
-rw-r--r--vendor/smarty/smarty/libs/functions.php51
-rw-r--r--vendor/smarty/smarty/libs/plugins/block.textformat.php121
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.counter.php62
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.cycle.php92
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.fetch.php204
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php286
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_image.php158
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_options.php230
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_radios.php266
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_select_date.php395
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_select_time.php354
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_table.php164
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.mailto.php142
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.math.php142
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.capitalize.php147
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.count.php36
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.date_format.php86
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.debug_print_var.php103
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.escape.php189
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.explode.php25
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.implode.php15
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php71
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.number_format.php26
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php55
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.replace.php37
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.spacify.php26
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.truncate.php62
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php28
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php32
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php26
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php26
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php31
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php32
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php87
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.from_charset.php30
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php30
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.json_encode.php11
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php29
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.noprint.php20
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php24
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php30
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php28
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.substr.php12
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.to_charset.php30
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php52
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php28
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php39
-rw-r--r--vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php89
-rw-r--r--vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php26
-rw-r--r--vendor/smarty/smarty/libs/plugins/shared.literal_compiler_param.php35
-rw-r--r--vendor/smarty/smarty/libs/plugins/shared.make_timestamp.php49
-rw-r--r--vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php87
-rw-r--r--vendor/smarty/smarty/libs/plugins/shared.mb_unicode.php51
-rw-r--r--vendor/smarty/smarty/libs/plugins/variablefilter.htmlspecialchars.php19
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php219
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_data.php68
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php235
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php96
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php189
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php24
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php31
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php117
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php89
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php105
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php79
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php96
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php25
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php40
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php70
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php96
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php164
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php343
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php236
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php207
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php347
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php157
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php37
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php62
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php73
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php31
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php124
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php228
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php78
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php163
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php42
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php85
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php161
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php72
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php91
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php130
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php34
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php462
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php68
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php100
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php203
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php211
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php1046
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php272
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php197
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php53
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php42
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php74
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php49
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php36
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php44
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php36
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php41
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php43
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php50
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php131
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php41
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php36
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php130
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php182
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php44
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php37
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php34
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php58
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php35
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php35
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php47
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php44
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php50
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php63
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php119
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php100
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php77
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php111
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php50
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php42
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php46
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php42
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php43
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php88
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php87
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php84
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php58
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php39
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php72
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php41
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php38
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php43
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php40
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php43
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php40
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php41
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php40
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php51
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php50
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php180
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php116
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php78
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php108
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php68
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php139
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php174
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php103
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php69
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php162
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php181
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php251
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php54
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php177
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php183
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php115
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php91
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php184
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php741
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php401
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php1774
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php2929
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php605
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php67
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_resource.php260
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php104
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php94
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php49
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_security.php680
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_template_cached.php257
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php257
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_template_config.php100
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php152
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_template_source.php213
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php33
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_variable.php48
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php73
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smartyexception.php19
-rw-r--r--vendor/smarty/smarty/mkdocs.yml64
-rwxr-xr-xvendor/smarty/smarty/run-tests-for-all-php-versions.sh4
-rw-r--r--vendor/smarty/smarty/src/BlockHandler/Base.php19
-rw-r--r--vendor/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php10
-rw-r--r--vendor/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php19
-rw-r--r--vendor/smarty/smarty/src/BlockHandler/TextFormat.php110
-rw-r--r--vendor/smarty/smarty/src/Cacheresource/Base.php156
-rw-r--r--vendor/smarty/smarty/src/Cacheresource/Custom.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php)150
-rw-r--r--vendor/smarty/smarty/src/Cacheresource/File.php338
-rw-r--r--vendor/smarty/smarty/src/Cacheresource/KeyValueStore.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php)113
-rw-r--r--vendor/smarty/smarty/src/Compile/Base.php233
-rw-r--r--vendor/smarty/smarty/src/Compile/BlockCompiler.php228
-rw-r--r--vendor/smarty/smarty/src/Compile/CompilerInterface.php26
-rw-r--r--vendor/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php29
-rw-r--r--vendor/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php47
-rw-r--r--vendor/smarty/smarty/src/Compile/FunctionCallCompiler.php79
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php19
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/Base.php49
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php25
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php21
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php19
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php19
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php20
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php26
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php19
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php66
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php21
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php24
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php19
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php25
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php14
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php19
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php17
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php17
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php18
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php21
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php18
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php17
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php18
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php24
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php22
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php18
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php15
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php21
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php34
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php18
-rw-r--r--vendor/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php27
-rw-r--r--vendor/smarty/smarty/src/Compile/ModifierCompiler.php95
-rw-r--r--vendor/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php44
-rw-r--r--vendor/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php76
-rw-r--r--vendor/smarty/smarty/src/Compile/PrintExpressionCompiler.php96
-rw-r--r--vendor/smarty/smarty/src/Compile/SpecialVariableCompiler.php134
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Append.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php)34
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Assign.php95
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php31
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Block.php92
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/BlockClose.php110
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/BreakTag.php123
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Call.php81
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Capture.php72
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/CaptureClose.php43
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ConfigLoad.php77
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ContinueTag.php27
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Debug.php45
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ElseIfTag.php86
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ElseTag.php29
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/EvalTag.php74
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ExtendsTag.php87
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ForClose.php51
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ForElse.php30
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ForTag.php101
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ForeachClose.php55
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ForeachElse.php35
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ForeachSection.php206
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/ForeachTag.php286
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/FunctionClose.php164
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/FunctionTag.php73
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/IfClose.php48
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/IfTag.php70
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/IncludeTag.php189
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Inheritance.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php)27
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Ldelim.php41
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Nocache.php36
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/NocacheClose.php37
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Rdelim.php36
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Section.php399
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/SectionClose.php48
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/SectionElse.php29
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/Setfilter.php40
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/SetfilterClose.php43
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/WhileClose.php45
-rw-r--r--vendor/smarty/smarty/src/Compile/Tag/WhileTag.php72
-rw-r--r--vendor/smarty/smarty/src/Compiler/BaseCompiler.php23
-rw-r--r--vendor/smarty/smarty/src/Compiler/CodeFrame.php126
-rw-r--r--vendor/smarty/smarty/src/Compiler/Configfile.php173
-rw-r--r--vendor/smarty/smarty/src/Compiler/Template.php1512
-rw-r--r--vendor/smarty/smarty/src/CompilerException.php73
-rw-r--r--vendor/smarty/smarty/src/Data.php521
-rw-r--r--vendor/smarty/smarty/src/Debug.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php)212
-rw-r--r--vendor/smarty/smarty/src/ErrorHandler.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php)23
-rw-r--r--vendor/smarty/smarty/src/Exception.php16
-rw-r--r--vendor/smarty/smarty/src/Extension/BCPluginsAdapter.php229
-rw-r--r--vendor/smarty/smarty/src/Extension/Base.php41
-rw-r--r--vendor/smarty/smarty/src/Extension/CallbackWrapper.php35
-rw-r--r--vendor/smarty/smarty/src/Extension/CoreExtension.php49
-rw-r--r--vendor/smarty/smarty/src/Extension/DefaultExtension.php757
-rw-r--r--vendor/smarty/smarty/src/Extension/ExtensionInterface.php83
-rw-r--r--vendor/smarty/smarty/src/Filter/FilterInterface.php9
-rw-r--r--vendor/smarty/smarty/src/Filter/FilterPluginWrapper.php15
-rw-r--r--vendor/smarty/smarty/src/Filter/Output/TrimWhitespace.php91
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php21
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/Base.php21
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/Count.php36
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/Counter.php61
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/Cycle.php90
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/Fetch.php203
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php10
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlBase.php107
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php189
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlImage.php149
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlOptions.php223
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlRadios.php174
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php381
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php334
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/HtmlTable.php161
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/Mailto.php141
-rw-r--r--vendor/smarty/smarty/src/FunctionHandler/Math.php140
-rw-r--r--vendor/smarty/smarty/src/Lexer/ConfigfileLexer.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php)530
-rw-r--r--vendor/smarty/smarty/src/Lexer/ConfigfileLexer.plex (renamed from vendor/smarty/smarty/lexer/smarty_internal_configfilelexer.plex)61
-rw-r--r--vendor/smarty/smarty/src/Lexer/TemplateLexer.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php)232
-rw-r--r--vendor/smarty/smarty/src/Lexer/TemplateLexer.plex (renamed from vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex)182
-rw-r--r--vendor/smarty/smarty/src/ParseTree/Base.php45
-rw-r--r--vendor/smarty/smarty/src/ParseTree/Code.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php)17
-rw-r--r--vendor/smarty/smarty/src/ParseTree/Dq.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php)54
-rw-r--r--vendor/smarty/smarty/src/ParseTree/DqContent.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php)20
-rw-r--r--vendor/smarty/smarty/src/ParseTree/Tag.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php)29
-rw-r--r--vendor/smarty/smarty/src/ParseTree/Template.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php)43
-rw-r--r--vendor/smarty/smarty/src/ParseTree/Text.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php)16
-rw-r--r--vendor/smarty/smarty/src/Parser/ConfigfileParser.php972
-rw-r--r--vendor/smarty/smarty/src/Parser/ConfigfileParser.y (renamed from vendor/smarty/smarty/lexer/smarty_internal_configfileparser.y)28
-rw-r--r--vendor/smarty/smarty/src/Parser/TemplateParser.php3171
-rw-r--r--vendor/smarty/smarty/src/Parser/TemplateParser.y (renamed from vendor/smarty/smarty/lexer/smarty_internal_templateparser.y)312
-rw-r--r--vendor/smarty/smarty/src/Resource/BasePlugin.php145
-rw-r--r--vendor/smarty/smarty/src/Resource/CustomPlugin.php105
-rw-r--r--vendor/smarty/smarty/src/Resource/ExtendsPlugin.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php)76
-rw-r--r--vendor/smarty/smarty/src/Resource/FilePlugin.php183
-rw-r--r--vendor/smarty/smarty/src/Resource/RecompiledPlugin.php50
-rw-r--r--vendor/smarty/smarty/src/Resource/StreamPlugin.php71
-rw-r--r--vendor/smarty/smarty/src/Resource/StringEval.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php)49
-rw-r--r--vendor/smarty/smarty/src/Resource/StringPlugin.php94
-rw-r--r--vendor/smarty/smarty/src/Runtime/Block.php (renamed from vendor/smarty/smarty/libs/sysplugins/smarty_internal_block.php)18
-rw-r--r--vendor/smarty/smarty/src/Runtime/CaptureRuntime.php163
-rw-r--r--vendor/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php73
-rw-r--r--vendor/smarty/smarty/src/Runtime/ForeachRuntime.php160
-rw-r--r--vendor/smarty/smarty/src/Runtime/InheritanceRuntime.php243
-rw-r--r--vendor/smarty/smarty/src/Runtime/TplFunctionRuntime.php144
-rw-r--r--vendor/smarty/smarty/src/Security.php560
-rw-r--r--vendor/smarty/smarty/src/Smarty.php2239
-rw-r--r--vendor/smarty/smarty/src/Template.php732
-rw-r--r--vendor/smarty/smarty/src/Template/Cached.php428
-rw-r--r--vendor/smarty/smarty/src/Template/Compiled.php305
-rw-r--r--vendor/smarty/smarty/src/Template/Config.php36
-rw-r--r--vendor/smarty/smarty/src/Template/GeneratedPhpFile.php159
-rw-r--r--vendor/smarty/smarty/src/Template/Source.php285
-rw-r--r--vendor/smarty/smarty/src/TemplateBase.php425
-rw-r--r--vendor/smarty/smarty/src/TestInstall.php211
-rw-r--r--vendor/smarty/smarty/src/UndefinedVariable.php19
-rw-r--r--vendor/smarty/smarty/src/Variable.php118
-rw-r--r--vendor/smarty/smarty/src/debug.tpl (renamed from vendor/smarty/smarty/libs/debug.tpl)7
-rw-r--r--vendor/smarty/smarty/src/functions.php253
-rw-r--r--vendor/spomky-labs/otphp/README.md1
-rw-r--r--vendor/spomky-labs/otphp/composer.json16
-rw-r--r--vendor/spomky-labs/otphp/src/Factory.php21
-rw-r--r--vendor/spomky-labs/otphp/src/HOTP.php8
-rw-r--r--vendor/spomky-labs/otphp/src/HOTPInterface.php5
-rw-r--r--vendor/spomky-labs/otphp/src/InternalClock.php19
-rw-r--r--vendor/spomky-labs/otphp/src/OTP.php16
-rw-r--r--vendor/spomky-labs/otphp/src/OTPInterface.php5
-rw-r--r--vendor/spomky-labs/otphp/src/ParameterTrait.php2
-rw-r--r--vendor/spomky-labs/otphp/src/TOTP.php92
-rw-r--r--vendor/spomky-labs/otphp/src/TOTPInterface.php14
-rw-r--r--vendor/spomky-labs/otphp/src/Url.php3
-rw-r--r--vendor/symfony/deprecation-contracts/CHANGELOG.md5
-rw-r--r--vendor/symfony/deprecation-contracts/LICENSE (renamed from library/symfony/options-resolver/LICENSE)2
-rw-r--r--vendor/symfony/deprecation-contracts/README.md26
-rw-r--r--vendor/symfony/deprecation-contracts/composer.json35
-rw-r--r--vendor/symfony/deprecation-contracts/function.php27
-rw-r--r--vendor/symfony/polyfill-mbstring/LICENSE (renamed from library/symfony/process/LICENSE)2
-rw-r--r--vendor/symfony/polyfill-mbstring/Mbstring.php1045
-rw-r--r--vendor/symfony/polyfill-mbstring/README.md13
-rw-r--r--vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php119
-rw-r--r--vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php1397
-rw-r--r--vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php5
-rw-r--r--vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php1489
-rw-r--r--vendor/symfony/polyfill-mbstring/bootstrap.php172
-rw-r--r--vendor/symfony/polyfill-mbstring/bootstrap80.php167
-rw-r--r--vendor/symfony/polyfill-mbstring/composer.json (renamed from vendor/symfony/polyfill-php81/composer.json)19
-rw-r--r--vendor/symfony/polyfill-php81/Php81.php37
-rw-r--r--vendor/symfony/polyfill-php81/README.md18
-rw-r--r--vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php51
-rw-r--r--vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php20
-rw-r--r--vendor/symfony/polyfill-php81/bootstrap.php28
-rw-r--r--vendor/voku/portable-ascii/.deepsource.toml4
-rw-r--r--vendor/voku/portable-ascii/CHANGELOG.md8
-rw-r--r--vendor/voku/portable-ascii/composer.json2
-rw-r--r--vendor/voku/portable-ascii/src/voku/helper/ASCII.php165
-rw-r--r--view/css/conversation.css4
-rw-r--r--view/es-es/hmessages.po4677
-rw-r--r--view/es-es/hstrings.php115
-rw-r--r--view/js/main.js562
-rw-r--r--view/js/mod_articles.js2
-rw-r--r--view/js/mod_cards.js2
-rw-r--r--view/js/mod_cloud.js57
-rw-r--r--view/js/mod_connections.js2
-rw-r--r--view/js/mod_hq.js3
-rw-r--r--view/js/mod_import_progress.js6
-rw-r--r--view/js/mod_photos.js57
-rw-r--r--view/nb/hmessages.po (renamed from view/nb-no/hmessages.po)21805
-rw-r--r--view/nb/hstrings.php (renamed from view/nb-no/hstrings.php)5460
-rw-r--r--view/nb/lostpass_eml.tpl (renamed from view/nb-no/lostpass_eml.tpl)0
-rw-r--r--view/nb/messages.po (renamed from view/nb-no/messages.po)0
-rw-r--r--view/nb/passchanged_eml.tpl (renamed from view/nb-no/passchanged_eml.tpl)0
-rw-r--r--view/nb/register_open_eml.tpl (renamed from view/nb-no/register_open_eml.tpl)0
-rw-r--r--view/nb/register_verify_eml.tpl (renamed from view/nb-no/register_verify_eml.tpl)0
-rw-r--r--view/nb/strings.php (renamed from view/nb-no/strings.php)0
-rw-r--r--view/nb/update_fail_eml.tpl (renamed from view/nb-no/update_fail_eml.tpl)0
-rw-r--r--view/pdl/mod_rmagic.pdl6
-rw-r--r--view/php/theme_init.php3
-rw-r--r--view/theme/redbasic/css/style.css24
-rw-r--r--view/theme/redbasic/js/redbasic.js448
-rw-r--r--view/theme/redbasic/php/config.php10
-rw-r--r--view/theme/redbasic/php/theme.php2
-rw-r--r--view/theme/redbasic/schema/Focus-Boxy.css2
-rw-r--r--view/tpl/admin_account_edit.tpl1
-rw-r--r--view/tpl/admin_channels.tpl2
-rw-r--r--view/tpl/admin_plugins.tpl167
-rw-r--r--view/tpl/admin_plugins_addrepo.tpl9
-rw-r--r--view/tpl/cal_calendar.tpl27
-rw-r--r--view/tpl/cdav_calendar.tpl13
-rw-r--r--view/tpl/chat.tpl28
-rw-r--r--view/tpl/comment_item.tpl3
-rw-r--r--view/tpl/contact_edit_header.tpl2
-rw-r--r--view/tpl/conv_item.tpl28
-rw-r--r--view/tpl/conv_list.tpl20
-rw-r--r--view/tpl/cover_photo.tpl2
-rw-r--r--view/tpl/cover_photo_widget.tpl159
-rw-r--r--view/tpl/direntry.tpl2
-rw-r--r--view/tpl/event_form.tpl8
-rw-r--r--view/tpl/event_item_header.tpl2
-rw-r--r--view/tpl/events-js.tpl10
-rw-r--r--view/tpl/field_input.tpl4
-rw-r--r--view/tpl/field_password.tpl2
-rw-r--r--view/tpl/field_select.tpl4
-rw-r--r--view/tpl/generic_addon_settings.tpl2
-rw-r--r--view/tpl/head.tpl3
-rw-r--r--view/tpl/install_checks.tpl4
-rw-r--r--view/tpl/jot-header.tpl1
-rw-r--r--view/tpl/jot.tpl8
-rw-r--r--view/tpl/js_strings.tpl20
-rw-r--r--view/tpl/login.tpl9
-rw-r--r--view/tpl/messages_widget.tpl72
-rw-r--r--view/tpl/notifications_widget.tpl780
-rw-r--r--view/tpl/pinned_item.tpl2
-rw-r--r--view/tpl/register.tpl2
-rw-r--r--view/tpl/rmagic.tpl14
-rw-r--r--view/tpl/search_item.tpl16
-rw-r--r--view/tpl/uexport.tpl12
1350 files changed, 71946 insertions, 101959 deletions
diff --git a/.debianinstall/README.md b/.debianinstall/README.md
index 46e0e0858..e157c0876 100644
--- a/.debianinstall/README.md
+++ b/.debianinstall/README.md
@@ -27,9 +27,7 @@ if you look for more choices. The main differences are:
- graphical installer whiptail
- The script stops (fails) if it finds results of a previous installation. (The [debian-setup.sh](https://framagit.org/ojrandom/core/-/tree/dev/.debianinstall) will just jump over it.)
- If something fails the script tries to clean up everything that was installed up to the point of failure. (That might cause trouble if certbot registered a certificate already.)
-- The script under [homeinstall](https://framagit.org/hubzilla/core/-/tree/master/.homeinstall) seems to be an older version of the scripts used for Streams
- + [autoinstall](https://codeberg.org/streams/streams/src/branch/dev/contrib/autoinstall)
- + [easyinstall](https://codeberg.org/streams/streams/src/branch/dev/contrib/easyinstall)
+- The script under [homeinstall](https://framagit.org/hubzilla/core/-/tree/master/.homeinstall) seems to be an older version of the scripts used for Streams, i.e. [autoinstall](https://codeberg.org/streams/streams/src/branch/dev/contrib/autoinstall) and [easyinstall](https://codeberg.org/streams/streams/src/branch/dev/contrib/easyinstall)
## Preconditions
@@ -153,6 +151,3 @@ to boot the Rapsi to the client console.
DO NOT FORGET TO CHANGE THE DEFAULT PASSWORD FOR USER PI!
-## Reminder for Different Web Wervers
-
-For those of you who feel adventurous enough to use a different web server (i.e. Lighttpd...), don't forget that this script will install Apache or Nginx and that you can only have one web server listening to ports 80 & 443. Also, don't forget to tweak your daily shell script in /var/www/ accordingly.
diff --git a/.debianinstall/config.txt.template b/.debianinstall/config.txt.template
index 1737b52ad..065515653 100644
--- a/.debianinstall/config.txt.template
+++ b/.debianinstall/config.txt.template
@@ -93,9 +93,8 @@ freedns_key=
# If left empty, both your database and user will be named after your zot instance (hubzilla, zap or misty)
# Use custom name, at least fo the database, if you plan to run more than one hub/instance on the same server
#
-zotserver_db_name=
-zotserver_db_user=
-zotserver_db_pass=$db_pass
+db_name=hubzilla
+db_user=hubzilla
#
#
# Password for package mysql-server
diff --git a/.debianinstall/debian-setup.sh b/.debianinstall/debian-setup.sh
index 9e9b3fc1a..cef34c3b2 100644
--- a/.debianinstall/debian-setup.sh
+++ b/.debianinstall/debian-setup.sh
@@ -150,7 +150,7 @@ function install_sendmail {
function install_php {
# openssl and mbstring are included in libapache2-mod-php
print_info "installing php..."
- nocheck_install "libapache2-mod-php php php-pear php-curl php-gd php-mbstring php-xml php-zip"
+ nocheck_install "libapache2-mod-php php php-pear php-curl php-gd php-mbstring php-xml php-zip php-intl php-bcmath"
phpversion=$(php -v|grep --only-matching --perl-regexp "(PHP )\d+\.\\d+\.\\d+"|cut -c 5-7)
sed -i "s/^upload_max_filesize =.*/upload_max_filesize = 100M/g" /etc/php/$phpversion/apache2/php.ini
sed -i "s/^post_max_size =.*/post_max_size = 100M/g" /etc/php/$phpversion/apache2/php.ini
@@ -256,12 +256,18 @@ function create_zotserver_db {
then
Q1="CREATE DATABASE IF NOT EXISTS $db_name;"
Q2="GRANT USAGE ON *.* TO $db_user@localhost IDENTIFIED BY '$db_pass';"
- Q3="GRANT ALL PRIVILEGES ON $name.* to $db_user@localhost identified by '$db_pass';"
+ Q3="GRANT ALL PRIVILEGES ON $db_name.* to $db_user@localhost identified by '$db_pass';"
Q4="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}${Q3}${Q4}"
mysql -uroot -p$mysqlpass -e "$SQL"
else
echo "database $db_name does exist already"
+ Q1="CREATE DATABASE IF NOT EXISTS $db_name;"
+ Q2="GRANT USAGE ON *.* TO $db_user@localhost IDENTIFIED BY '$db_pass';"
+ Q3="GRANT ALL PRIVILEGES ON $db_name.* to $db_user@localhost identified by '$db_pass';"
+ Q4="FLUSH PRIVILEGES;"
+ SQL="${Q1}${Q2}${Q3}${Q4}"
+ mysql -uroot -p$mysqlpass -e "$SQL"
fi
}
diff --git a/.gitignore b/.gitignore
index 878f33f67..e0dc303b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,9 +48,10 @@ doc/html/
.zotshrc
# external repositories for themes/addons
extend/
-# files generated by phpunit
+
+# exclude test results and cache
tests/.cache
-tests/.phpunit.result.cache
+tests/.phpunit*
tests/results/
## exclude IDE files
@@ -67,7 +68,6 @@ nbproject/
# PHPStorm
.idea/
-
## composer
# locally installed composer binary
composer.phar
@@ -87,6 +87,7 @@ vendor/bin/php-parse
vendor/bin/phpcbf
vendor/bin/phpcs
vendor/bin/phpmd
+vendor/bin/phpstan*
vendor/bin/phpunit
vendor/composer/pcre/
vendor/composer/xdebug-handler/
@@ -98,18 +99,11 @@ vendor/pdepend/
vendor/phar-io/
vendor/php-mock/
vendor/phpmd/
+vendor/phpstan
vendor/phpunit/
vendor/psr/container/
vendor/sebastian/
vendor/squizlabs/
-vendor/symfony/config/
-vendor/symfony/dependency-injection/
-vendor/symfony/deprecation-contracts/
-vendor/symfony/filesystem/
-vendor/symfony/polyfill-ctype/
-vendor/symfony/polyfill-mbstring/
-vendor/symfony/polyfill-php80/
-vendor/symfony/service-contracts/
vendor/theseer/
# /info is a directory containing site-specific HTML documents
/info/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 04ae550b2..656ccb128 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -32,6 +32,7 @@ before_script:
- apt-get install -yqq libicu-dev libjpeg-dev libpng-dev libpq-dev libyaml-dev libzip-dev mariadb-client postgresql-client unzip zip
- pecl install xdebug yaml
- docker-php-ext-enable xdebug yaml
+ - docker-php-ext-configure gd --with-jpeg=/usr/include/
- docker-php-ext-install gd bcmath intl pdo_mysql pdo_pgsql zip
# Install composer
diff --git a/.phpcs.xml b/.phpcs.xml
index 0054e4cda..c9c9cdd57 100644
--- a/.phpcs.xml
+++ b/.phpcs.xml
@@ -48,6 +48,10 @@
<exclude name="Generic.Files.OneClassPerFile.MultipleFound"/>
<exclude name="Generic.Files.OneObjectStructurePerFile.MultipleFound"/>
<exclude name="Generic.Formatting.SpaceAfterCast.NoSpace"/>
+
+ <exclude name="Generic.Classes.OpeningBraceSameLine.BraceOnNewLine" />
+ <exclude name="Generic.WhiteSpace.DisallowSpaceIndent.SpacesUsed" />
+ <exclude name="Generic.Functions.OpeningFunctionBraceKernighanRitchie.BraceOnNewLine" />
</rule>
<!--
diff --git a/CHANGELOG b/CHANGELOG
index 8055223ad..951c97b6f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,184 @@
+Hubzilla 10.2.3 (2025-04-11)
+ - Fix bogus merge from 10.2.2 release
+
+
+Hubzilla 10.2.2 (2025-04-11)
+ - Cleanup deprecated forum queries, improved performance
+ - Fix zot6 handler returning success allthough Libzot::fetch() did not return anything useful
+ - Fix json encoding of a possibly empty item.target
+ - Fix permalink for forum posts and comments
+ - Fix an obscure delivering issue which could produce duplicate posts
+ - Lazy load profile photos for reactions to reduce server load
+ - Pubcrawl: deal with Update(Tombstone)
+ - Pubcrawl: fix mentions not mapped to "to" in public toplevel posts (regression)
+
+
+Hubzilla 10.2.1 (2025-03-18)
+ - Fix OWA in cases where Signature is in the REDIRECT_REMOTE_USER field
+ - Fix query in mod sse_bs
+
+
+Hubzilla 10.2 (2025-03-17)
+ - Allow to send signed requests from the zot_probe tool
+ - Print an error message if OWA fails
+ - Remove possible leading @ before processing webfinger address
+ - Updated debian install script
+ - Calculate observer.baseurl from xchan_url instead of xchan_connurl
+ - Refactor unparse_url() to allow return of a custom field set only and add tests
+ - Slightly improve event object rendering
+ - Update smarty library to version 5 for PHP 8.4 compatibility
+ - Remove vendor/symfony from gitignore file
+ - Update composer libraries
+ - Add contextHistory field to activities and prefer it over context when consuming
+ - Implement highlight button in jot editor
+ - Add test results and PHPStan to gitignore
+ - Update spanish strings
+ - Remove EpubMeta library in favor of a custom solution
+ - Configue gd for jpeg support in CI
+ - Add error message on missing owa auth headers
+ - Add Zotlabs\Tests namespace to autloader in dev
+ - Add dba_pdo::update method
+ - Add dba_pdo::insert method
+ - Rewrite redbasic javascript to remove jquery dependency
+ - Add security policy SECURITY.md
+
+ Bugfixes
+ - Fix notifications for likes on our comments
+ - Fix fullscreen view
+ - Fix boxy scheme text alignment for comments
+ - Fix poll date string to match with the autotime string
+ - Fix owner hash not set correctly when editing a post/comment
+ - Fix an issue where some participants could not post to forums
+ - Fix navbar selector conflict with possible additional navbars when using a cover photo
+ - Fix target and tgt_type not set for sourced rss items if we rewrite them to our own
+ - Fix auto save draft not set correctly
+ - Fix cover height calculation
+
+ Addons
+ - Diaspora: revisit import_diaspora_account()
+ - Pubcrawl: escape quotation marks in ActivityStreams link header
+ - Wiki: fixed wiki_page_list.tpl to use bootstrap class for layout
+ - BBmath: fix orientation for inline math
+ - BBmath: document imagemagick permissions
+ - Pubcrawl: ensure we select the correct hubloc hash when extending recipients list
+ - Msg_footer: do not add footer on edit, also dismiss anything but a create activity
+ - Pubcrawl: refactor activitypub addressing
+ - Wiki: added space to preview panel
+ - Startpage: update help text and some cleanup
+
+
+Hubzilla 10.0.8 (2025-02-01)
+ - Fix duplicating terms/iconfig in addToCollectionAndSync()
+ - Refactor Daemon/Importdoc for better SQL performance when looking up outdated entries
+ - Tweak SQL in mod sse_bs for possible performance improvements
+ - Fix PHP warnings
+ - Do not run post_local hook on add activities in pubcrawl addon
+ - Do not run post_local hook on add activities in diaspora addon
+ - Remove old rawmsg/fields before storing new rawmsg in pubcrawl addon
+ - Fix retractions in diaspora addon
+
+
+Hubzilla 10.0.7 (2025-01-22)
+ - Fix ownership check in consume_feed()
+ - Fix toast() if notification contains non-ascii characters
+ - Fix regression in notifications filter
+
+
+Hubzilla 10.0.6 (2025-01-05)
+ - Fix entries where primary location data is not complete not dismissed early
+ - Fix query to cleanup outdated doc entries called multiple times
+ - Fix query to cleanup outdated doc entries
+
+
+Hubzilla 10.0.5 (2024-12-29)
+ - Fix another instance of drop_item() not having permission to drop items
+
+
+Hubzilla 10.0.4 (2024-12-26)
+ - Fix missing argument name
+
+
+Hubzilla 10.0.3 (2024-12-26)
+ - Fix regression in Daemon/Channel_purge which could cause a possible infinite loop
+ - Fix regression in Daemon/Expire which could cause a infinite loop
+
+
+Hubzilla 10.0.2 (2024-12-25)
+ - Hotfix comment out Daemon/Expire
+ - Fix zid parameter allowed to override an existing remote login
+ - Slightly improved imagesLoaded()
+
+
+Hubzilla 10.0.1 (2024-12-22)
+ - Revert removing of openid library
+ - Fix SQL query in Daemon/Importdoc
+
+
+Hubzilla 10.0 (2024-12-21)
+ - Port updateConvItem() and notifications widget to vanilla javascript
+ - Remove jquery.timeago.js in favor of a native js implementation
+ - Introduce item_forwardable() a function to check if an item should be frowarded
+ - Always set item_delayed flag if we use a custom created date
+ - Add indicators to items in case they are delayed, have an expiration time or commenting is disabled
+ - Introduce relative_time() a new function to calculate the relative time
+ - Refactor mod admin/accounts
+ - Toggle aside if a notification or message is clicked
+ - Add Mailer class to replace z_mail()
+ - Provide a possibility to link to a specific day or month in mod cal via URL fragment e.g. #2024-12-24
+ - Refactor mod magic
+ - Introduce conversation containers a.k.a. FEP-171b
+ - Refactor mod item
+ - Refactor Thumbs\Epubthumb to adapt to new version of EPub meta lib
+ - Remove unused libraries
+ - Bring filed items to mod hq
+
+ Bugfixes
+ - Fix comments on/off toggle
+ - Fix various missing icons after transition from fork-awesome
+ - Fix performance issue in mod pubstream
+ - Fix mails with + in local part rejected
+ - Fix % calculation in mod import_progress
+ - Fix query vars not unset when constructing the server address
+ - Fix can_comment_on_post() logic after introduction of repeats
+ - Fix xchan_query() not including deleted hublocs
+ - Fix allday variable not set when clicking an event or a resource is provided
+
+ Addons
+ - Introduce conversation containers a.k.a. FEP-171b
+ - Cards: fix comments on/off state
+ - Articles: fix comments on/off state
+ - Pubcrawl: fix encoding of stored raw message
+ - Gallery fix zoom icon toggle
+ - Pubcrawl: fix follow to non primary hub location
+ - Pubcrawl: rewrite id host to local host instead of primary host
+
+
+Hubzilla 9.4.4 (2024-11-06)
+ - Update Norwegian translations
+ - Fix error adding things when multiple profiles not enabled
+ - Port mod thing to use $_GET/$_POST instead of $_REQUEST
+ - Move Norwegian translations from nb-no to nb
+ - Fix intact alernative network hublocs being marked deleted in Libsync::sync_locations()
+ - Fix modals only partly removed when DOM emlement updated via ajax
+ - Add explicit check for channel_address in channel_url()
+ - Fix PHP deprecation warnings in mod setup
+ - Fix PHP warning in Web/HttpMeta
+ - Fix typo in UnitTestCase
+ - Fix missing CSRF token checks in mod account_edit
+ - Fix OCAP tokens only added to images
+ - Fix unescaped zid parameter
+ - Fix wrong date format in published date in update question activities
+ - Fix include for en TOS page
+ - Fix query in copy_of_pubitem() returning duplicate items
+ - Fix edit button not clickable if below right aside when viewing webpages
+ - Fix rendering of category tags icons in the editor
+ - Fix regex to detect URLs in cleanup_bbcode
+ - Fix duplicate posts from forum clones
+ - Fix follow to non primary hub location in pubcrawl addon
+ - Fix id host not rewritten to local host in pubcrawl addon
+ - Fix regression when manually fetching items in pubcrawl addon
+
+
Hubzilla 9.4.3 (2024-10-10)
- Discard Add/Remove activities (Hubzilla 10 and (streams) compatibility)
- Fix HQ channel activities icons
diff --git a/CHANGELOG.air b/CHANGELOG.air
deleted file mode 100644
index d1fd0f05e..000000000
--- a/CHANGELOG.air
+++ /dev/null
@@ -1,48 +0,0 @@
-"air" is a branch name for revision of Account-Invite-Register at the Hubzilla project
-
-Invite:
-* Rewritten and now language template driven
-* Selectable templates for the invite mails
-* Invitor may add personal notes in the mailtext
-+ Invite codes are bound to the recipients email address
-* Invite mod never more creates accounts
-* new db scheme for table register
-* existing register table will be migrated to the new schema even when detected at runtime
-* Bugfix: creating invite codes when admin only calls Invite w/o any further action
-* account library revision also together with invite mod
-* Depending on config: Users may send invitations also
-* Invitations expires, controlled by the invitor
-* Changed and new configs:
-* * invitation_only As usual before
-* * invitation_also Beside other registration policies, invitations may be used also
-* * invitation_max_per_day defaults 50, may be changed in adminUI admin>site
-* * invitation_max_per_user defaults 4
-* Requirements:
-* * Addon language has to be installed
-
-Register:
-* Register panel (form) and js interaction changed
-* Unused registrations expire
-* Depending on config, anonymous registrations (w/o email) are supported
-* :... dont't panic, that may let grow security
-* Even anonymous users have to confirm their registration
-* Registrations may be enabled / disabled time driven for each day in the week (dudy)
-* Unsoliced registration floods may be blocked
-* Limited registrations from one single source ip
-* Using one additional log file, to easy interfare with f2b
-
-Account:
-* An user account always becomes created only if all depending conditions are satisfied
-* AdminUI for site configuration, accounts and registrations enhancements
-* Still untouched, but accountUI needs enhanced async control in case for mass delete
- with deep level of recursion cascade of the dependencies (channels etc). An open TODO
- since years for instances with many much users and channels.
-
-History:
-2020.03 Hubzilla Prod version 4.6 (master branch) of hubzilla/core was the base for AIR
- that was assigned Version 4.6.2 at sn/core
-2021.02 Hubzilla Prod version 5.2.1 (master branch) of hubzilla/core was new base for AIR
- that was assigned version 5.2.2 at sn/core (air.5)
- plus adjustment of hubzilla 5.2.2 (master) to sn/core (air.5) version 5.2.9
-
-
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000..08310c116
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,31 @@
+# Hubzilla Security Policy
+
+The [Hubzilla] Project takes security, privacy and user control over personal data seriously. We ask that any security issues be disclosed to us in a responsible manner to allow us time to remediate the issues, and site administrators time to upgrade before information about the issue is made public.
+
+This document outlines security procedures and policies for the Hubzilla project. It covers the following components:
+
+* The Hubzilla core repository: https://framagit.org/hubzilla/core
+* The official addon repository: https://framagit.org/hubzilla/addons
+* The official themes repository: https://framagit.org/hubzilla/themes
+* The official widgets repository: https://framagit.org/hubzilla/widgets
+
+## Coordinated Disclosure Guidelines
+
+We are committed to working with security researchers to verify, reproduce, and respond to legitimate reported vulnerabilities. You can help us by following these simple guidelines:
+
+* Submit suspected vulnerabilities by email to `security@hubzilla.org`, or as a confidential issue in the relevant repository listed above.
+* Provide clear instructions on how to reproduce the issue, and if possible, a minimal Proof of Concept (PoC) exploit.
+* We will acknowledge your submission as soon as we can, and will keep you updated as it is being processed. We may ask for more information, or clarifications about the issue or the steps to reproduce it during this time.
+* We will assign a CVE to the issue once it is confirmed.
+* We will do our best to fix the issue as soon as we can after it has been confirmed. We request that information about the vulnerability or details about how to exploit it is not disclosed to other parties until after the fix is released and some time has passed, to allow site administrators to upgrade. We will normally make the CVE public one month after a fix has been released. (This grace period can differ based on severity, and can be negotiated.)
+* Please perform all tests against a local instance of the software, and refrain from running any Denial of Service or automated testing tools against public hubs or the project managers (and their partners') infrastructure.
+* If the issue belongs to a third party module that we depend on, we may help with reporting it upstream if the submitter wants us to.
+
+## Comments on this Policy
+
+We welcome comments and suggestions for improving this policy. You can reach us at:
+
+* Our ticketing system: https://framagit.org/hubzilla/core/-/issues
+* By sending us an email at `security@hubzilla.org`.
+
+[Hubzilla]: https://hubzilla.org
diff --git a/Zotlabs/ActivityStreams/ASObject.php b/Zotlabs/ActivityStreams/ASObject.php
new file mode 100644
index 000000000..1006943af
--- /dev/null
+++ b/Zotlabs/ActivityStreams/ASObject.php
@@ -0,0 +1,776 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+
+use Zotlabs\Lib\BaseObject;
+
+class ASObject extends BaseObject
+{
+ public $id;
+ public $type;
+ public $attachment;
+ public $attributedTo;
+ public $audience;
+ public $content;
+ public $context;
+ public $name;
+ public $endTime;
+ public $generator;
+ public $icon;
+ public $image;
+ public $inReplyTo;
+ public $location;
+ public $preview;
+ public $published;
+ public $replies;
+ public $startTime;
+ public $summary;
+ public $tag;
+ public $updated;
+ public $url;
+ public $to;
+ public $bto;
+ public $cc;
+ public $bcc;
+ public $mediaType;
+ public $duration;
+ public $source;
+
+
+ // Extension properties
+
+ public $signature;
+ public $proof;
+ public $sensitive;
+ public $replyTo;
+ public $wall;
+ public $isContainedConversation;
+ public $expires;
+ public $canReply;
+ public $canSearch;
+ public $directMessage;
+ public $commentPolicy;
+
+ /**
+ * @return mixed
+ */
+ public function getDirectMessage()
+ {
+ return $this->directMessage;
+ }
+
+ /**
+ * @param mixed $directMessage
+ * @return ASObject
+ */
+ public function setDirectMessage($directMessage)
+ {
+ $this->directMessage = $directMessage;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSignature()
+ {
+ return $this->signature;
+ }
+
+ /**
+ * @param mixed $signature
+ * @return ASObject
+ */
+ public function setSignature($signature)
+ {
+ $this->signature = $signature;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getProof()
+ {
+ return $this->proof;
+ }
+
+ /**
+ * @param mixed $proof
+ * @return ASObject
+ */
+ public function setProof($proof)
+ {
+ $this->proof = $proof;
+ return $this;
+ }
+
+
+ /**
+ * @return mixed
+ */
+ public function getSensitive()
+ {
+ return $this->sensitive;
+ }
+
+ /**
+ * @param mixed $sensitive
+ * @return ASObject
+ */
+ public function setSensitive($sensitive)
+ {
+ $this->sensitive = $sensitive;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getReplyTo()
+ {
+ return $this->replyTo;
+ }
+
+ /**
+ * @param mixed $replyTo
+ * @return ASObject
+ */
+ public function setReplyTo($replyTo)
+ {
+ $this->replyTo = $replyTo;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getWall()
+ {
+ return $this->wall;
+ }
+
+ /**
+ * @param mixed $wall
+ * @return ASObject
+ */
+ public function setWall($wall)
+ {
+ $this->wall = $wall;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getIsContainedConversation()
+ {
+ return $this->isContainedConversation;
+ }
+
+ /**
+ * @param mixed $isContainedConversation
+ * @return ASObject
+ */
+ public function setIsContainedConversation($isContainedConversation)
+ {
+ $this->isContainedConversation = $isContainedConversation;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getExpires()
+ {
+ return $this->expires;
+ }
+
+ /**
+ * @param mixed $expires
+ * @return ASObject
+ */
+ public function setExpires($expires)
+ {
+ $this->expires = $expires;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCanReply()
+ {
+ return $this->canReply;
+ }
+
+ /**
+ * @param mixed $canReply
+ * @return ASObject
+ */
+ public function setCanReply($canReply)
+ {
+ $this->canReply = $canReply;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCanSearch()
+ {
+ return $this->canSearch;
+ }
+
+ /**
+ * @param mixed $canSearch
+ * @return ASObject
+ */
+ public function setCanSearch($canSearch)
+ {
+ $this->canSearch = $canSearch;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCommentPolicy()
+ {
+ return $this->commentPolicy;
+ }
+
+ /**
+ * @param mixed $commentPolicy
+ * @return ASObject
+ */
+ public function setCommentPolicy($commentPolicy)
+ {
+ $this->commentPolicy = $commentPolicy;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * @param mixed $id
+ * @return ASObject
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param mixed $type
+ * @return ASObject
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAttachment()
+ {
+ return $this->attachment;
+ }
+
+ /**
+ * @param mixed $attachment
+ * @return ASObject
+ */
+ public function setAttachment($attachment)
+ {
+ $this->attachment = $attachment;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAttributedTo()
+ {
+ return $this->attributedTo;
+ }
+
+ /**
+ * @param mixed $attributedTo
+ * @return ASObject
+ */
+ public function setAttributedTo($attributedTo)
+ {
+ $this->attributedTo = $attributedTo;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAudience()
+ {
+ return $this->audience;
+ }
+
+ /**
+ * @param mixed $audience
+ * @return ASObject
+ */
+ public function setAudience($audience)
+ {
+ $this->audience = $audience;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ /**
+ * @param mixed $content
+ * @return ASObject
+ */
+ public function setContent($content)
+ {
+ $this->content = $content;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getContext()
+ {
+ return $this->context;
+ }
+
+ /**
+ * @param mixed $context
+ * @return ASObject
+ */
+ public function setContext($context)
+ {
+ $this->context = $context;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * @param mixed $name
+ * @return ASObject
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getEndTime()
+ {
+ return $this->endTime;
+ }
+
+ /**
+ * @param mixed $endTime
+ * @return ASObject
+ */
+ public function setEndTime($endTime)
+ {
+ $this->endTime = $endTime;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getGenerator()
+ {
+ return $this->generator;
+ }
+
+ /**
+ * @param mixed $generator
+ * @return ASObject
+ */
+ public function setGenerator($generator)
+ {
+ $this->generator = $generator;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getIcon()
+ {
+ return $this->icon;
+ }
+
+ /**
+ * @param mixed $icon
+ * @return ASObject
+ */
+ public function setIcon($icon)
+ {
+ $this->icon = $icon;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getImage()
+ {
+ return $this->image;
+ }
+
+ /**
+ * @param mixed $image
+ * @return ASObject
+ */
+ public function setImage($image)
+ {
+ $this->image = $image;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getInReplyTo()
+ {
+ return $this->inReplyTo;
+ }
+
+ /**
+ * @param mixed $inReplyTo
+ * @return ASObject
+ */
+ public function setInReplyTo($inReplyTo)
+ {
+ $this->inReplyTo = $inReplyTo;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLocation()
+ {
+ return $this->location;
+ }
+
+ /**
+ * @param mixed $location
+ * @return ASObject
+ */
+ public function setLocation($location)
+ {
+ $this->location = $location;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPreview()
+ {
+ return $this->preview;
+ }
+
+ /**
+ * @param mixed $preview
+ * @return ASObject
+ */
+ public function setPreview($preview)
+ {
+ $this->preview = $preview;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPublished()
+ {
+ return $this->published;
+ }
+
+ /**
+ * @param mixed $published
+ * @return ASObject
+ */
+ public function setPublished($published)
+ {
+ $this->published = $published;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getReplies()
+ {
+ return $this->replies;
+ }
+
+ /**
+ * @param mixed $replies
+ * @return ASObject
+ */
+ public function setReplies($replies)
+ {
+ $this->replies = $replies;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getStartTime()
+ {
+ return $this->startTime;
+ }
+
+ /**
+ * @param mixed $startTime
+ * @return ASObject
+ */
+ public function setStartTime($startTime)
+ {
+ $this->startTime = $startTime;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSummary()
+ {
+ return $this->summary;
+ }
+
+ /**
+ * @param mixed $summary
+ * @return ASObject
+ */
+ public function setSummary($summary)
+ {
+ $this->summary = $summary;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTag()
+ {
+ return $this->tag;
+ }
+
+ /**
+ * @param mixed $tag
+ * @return ASObject
+ */
+ public function setTag($tag)
+ {
+ $this->tag = $tag;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUpdated()
+ {
+ return $this->updated;
+ }
+
+ /**
+ * @param mixed $updated
+ * @return ASObject
+ */
+ public function setUpdated($updated)
+ {
+ $this->updated = $updated;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUrl()
+ {
+ return $this->url;
+ }
+
+ /**
+ * @param mixed $url
+ * @return ASObject
+ */
+ public function setUrl($url)
+ {
+ $this->url = $url;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTo()
+ {
+ return $this->to;
+ }
+
+ /**
+ * @param mixed $to
+ * @return ASObject
+ */
+ public function setTo($to)
+ {
+ $this->to = $to;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getBto()
+ {
+ return $this->bto;
+ }
+
+ /**
+ * @param mixed $bto
+ * @return ASObject
+ */
+ public function setBto($bto)
+ {
+ $this->bto = $bto;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCc()
+ {
+ return $this->cc;
+ }
+
+ /**
+ * @param mixed $cc
+ * @return ASObject
+ */
+ public function setCc($cc)
+ {
+ $this->cc = $cc;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getBcc()
+ {
+ return $this->bcc;
+ }
+
+ /**
+ * @param mixed $bcc
+ * @return ASObject
+ */
+ public function setBcc($bcc)
+ {
+ $this->bcc = $bcc;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMediaType()
+ {
+ return $this->mediaType;
+ }
+
+ /**
+ * @param mixed $mediaType
+ * @return ASObject
+ */
+ public function setMediaType($mediaType)
+ {
+ $this->mediaType = $mediaType;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDuration()
+ {
+ return $this->duration;
+ }
+
+ /**
+ * @param mixed $duration
+ * @return ASObject
+ */
+ public function setDuration($duration)
+ {
+ $this->duration = $duration;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ /**
+ * @param mixed $source
+ * @return ASObject
+ */
+ public function setSource($source)
+ {
+ $this->source = $source;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/ActivityStreams/Activity.php b/Zotlabs/ActivityStreams/Activity.php
new file mode 100644
index 000000000..3fccfb964
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Activity.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Activity extends ASObject
+{
+ public $actor;
+ public $object;
+ public $target;
+ public $result;
+ public $origin;
+ public $instrument;
+
+ /**
+ * @return mixed
+ */
+ public function getActor()
+ {
+ return $this->actor;
+ }
+
+ /**
+ * @param mixed $actor
+ * @return Activity
+ */
+ public function setActor($actor)
+ {
+ $this->actor = $actor;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getObject()
+ {
+ return $this->object;
+ }
+
+ /**
+ * @param mixed $object
+ * @return Activity
+ */
+ public function setObject($object)
+ {
+ $this->object = $object;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTarget()
+ {
+ return $this->target;
+ }
+
+ /**
+ * @param mixed $target
+ * @return Activity
+ */
+ public function setTarget($target)
+ {
+ $this->target = $target;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getResult()
+ {
+ return $this->result;
+ }
+
+ /**
+ * @param mixed $result
+ * @return Activity
+ */
+ public function setResult($result)
+ {
+ $this->result = $result;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getOrigin()
+ {
+ return $this->origin;
+ }
+
+ /**
+ * @param mixed $origin
+ * @return Activity
+ */
+ public function setOrigin($origin)
+ {
+ $this->origin = $origin;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getInstrument()
+ {
+ return $this->instrument;
+ }
+
+ /**
+ * @param mixed $instrument
+ * @return Activity
+ */
+ public function setInstrument($instrument)
+ {
+ $this->instrument = $instrument;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/ActivityStreams/Actor.php b/Zotlabs/ActivityStreams/Actor.php
new file mode 100644
index 000000000..4efa2f6b1
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Actor.php
@@ -0,0 +1,428 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Actor extends ASObject
+{
+ public $inbox;
+ public $outbox;
+ public $followers;
+ public $following;
+ public $permissions; /* extension property */
+ public $endpoints;
+ public $publicKey;
+ public $preferredUsername;
+ public $alsoKnownAs;
+
+ // Extension properties
+
+ public $movedTo;
+ public $copiedTo;
+ public $discoverable;
+ public $manuallyApprovesFollowers;
+ public $webfinger;
+ public $canSearch;
+ public $indexable;
+ public $assertionMethod;
+ public $gateways;
+ public $openwebauth;
+ public $authredirect;
+
+ /**
+ * @return mixed
+ */
+ public function getAlsoKnownAs()
+ {
+ return $this->alsoKnownAs;
+ }
+
+ /**
+ * @param mixed $alsoKnownAs
+ * @return Actor
+ */
+ public function setAlsoKnownAs($alsoKnownAs)
+ {
+ $this->alsoKnownAs = $alsoKnownAs;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMovedTo()
+ {
+ return $this->movedTo;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCopiedTo()
+ {
+ return $this->copiedTo;
+ }
+
+ /**
+ * @param mixed $copiedTo
+ * @return Actor
+ */
+ public function setCopiedTo($copiedTo)
+ {
+ $this->copiedTo = $copiedTo;
+ return $this;
+ }
+
+ /**
+ * @param mixed $movedTo
+ * @return Actor
+ */
+ public function setMovedTo($movedTo)
+ {
+ $this->movedTo = $movedTo;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDiscoverable()
+ {
+ return $this->discoverable;
+ }
+
+ /**
+ * @param mixed $discoverable
+ * @return Actor
+ */
+ public function setDiscoverable($discoverable)
+ {
+ $this->discoverable = $discoverable;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getManuallyApprovesFollowers()
+ {
+ return $this->manuallyApprovesFollowers;
+ }
+
+ /**
+ * @param mixed $manuallyApprovesFollowers
+ * @return Actor
+ */
+ public function setManuallyApprovesFollowers($manuallyApprovesFollowers)
+ {
+ $this->manuallyApprovesFollowers = $manuallyApprovesFollowers;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPreferredUsername()
+ {
+ return $this->preferredUsername;
+ }
+
+ /**
+ * @param mixed $preferredUsername
+ * @return Actor
+ */
+ public function setPreferredUsername($preferredUsername)
+ {
+ $this->preferredUsername = $preferredUsername;
+ return $this;
+ }
+
+
+ /**
+ * @return mixed
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * @param mixed $id
+ * @return Actor
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param mixed $type
+ * @return Actor
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getInbox()
+ {
+ return $this->inbox;
+ }
+
+ /**
+ * @param mixed $inbox
+ * @return Actor
+ */
+ public function setInbox($inbox)
+ {
+ $this->inbox = $inbox;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getOutbox()
+ {
+ return $this->outbox;
+ }
+
+ /**
+ * @param mixed $outbox
+ * @return Actor
+ */
+ public function setOutbox($outbox)
+ {
+ $this->outbox = $outbox;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getFollowers()
+ {
+ return $this->followers;
+ }
+
+ /**
+ * @param mixed $followers
+ * @return Actor
+ */
+ public function setFollowers($followers)
+ {
+ $this->followers = $followers;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getFollowing()
+ {
+ return $this->following;
+ }
+
+ /**
+ * @param mixed $following
+ * @return Actor
+ */
+ public function setFollowing($following)
+ {
+ $this->following = $following;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getEndpoints()
+ {
+ return $this->endpoints;
+ }
+
+ /**
+ * @param mixed $endpoints
+ * @return Actor
+ */
+ public function setEndpoints($endpoints)
+ {
+ $this->endpoints = $endpoints;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPublicKey()
+ {
+ return $this->publicKey;
+ }
+
+ /**
+ * @param mixed $publicKey
+ * @return Actor
+ */
+ public function setPublicKey($publicKey)
+ {
+ $this->publicKey = $publicKey;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getWebfinger()
+ {
+ return $this->webfinger;
+ }
+
+ /**
+ * @param mixed $webfinger
+ * @return Actor
+ */
+ public function setWebfinger($webfinger)
+ {
+ $this->webfinger = $webfinger;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCanSearch()
+ {
+ return $this->canSearch;
+ }
+
+ /**
+ * @param mixed $canSearch
+ * @return Actor
+ */
+ public function setCanSearch($canSearch)
+ {
+ $this->canSearch = $canSearch;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getIndexable()
+ {
+ return $this->indexable;
+ }
+
+ /**
+ * @param mixed $indexable
+ * @return Actor
+ */
+ public function setIndexable($indexable)
+ {
+ $this->indexable = $indexable;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAssertionMethod()
+ {
+ return $this->assertionMethod;
+ }
+
+ /**
+ * @param mixed $assertionMethod
+ * @return Actor
+ */
+ public function setAssertionMethod($assertionMethod)
+ {
+ $this->assertionMethod = $assertionMethod;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getGateways()
+ {
+ return $this->gateways;
+ }
+
+ /**
+ * @param mixed $gateways
+ * @return Actor
+ */
+ public function setGateways($gateways)
+ {
+ $this->gateways = $gateways;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPermissions()
+ {
+ return $this->permissions;
+ }
+
+ /**
+ * @param mixed $permissions
+ * @return Actor
+ */
+ public function setPermissions($permissions)
+ {
+ $this->permissions = $permissions;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getOpenwebauth()
+ {
+ return $this->openwebauth;
+ }
+
+ /**
+ * @param mixed $openwebauth
+ * @return Actor
+ */
+ public function setOpenwebauth($openwebauth)
+ {
+ $this->openwebauth = $openwebauth;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAuthredirect()
+ {
+ return $this->authredirect;
+ }
+
+ /**
+ * @param mixed $authredirect
+ * @return Actor
+ */
+ public function setAuthredirect($authredirect)
+ {
+ $this->authredirect = $authredirect;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/ActivityStreams/AssertionMethod.php b/Zotlabs/ActivityStreams/AssertionMethod.php
new file mode 100644
index 000000000..d34f0332c
--- /dev/null
+++ b/Zotlabs/ActivityStreams/AssertionMethod.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class AssertionMethod extends ASObject
+{
+ public $id;
+ public $type;
+ public $controller;
+ public $publicKeyMultibase;
+
+ /**
+ * @return mixed
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * @param mixed $id
+ * @return AssertionMethod
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param mixed $type
+ * @return AssertionMethod
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getController()
+ {
+ return $this->controller;
+ }
+
+ /**
+ * @param mixed $controller
+ * @return AssertionMethod
+ */
+ public function setController($controller)
+ {
+ $this->controller = $controller;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPublicKeyMultibase()
+ {
+ return $this->publicKeyMultibase;
+ }
+
+ /**
+ * @param mixed $publicKeyMultibase
+ * @return AssertionMethod
+ */
+ public function setPublicKeyMultibase($publicKeyMultibase)
+ {
+ $this->publicKeyMultibase = $publicKeyMultibase;
+ return $this;
+ }
+
+
+
+
+}
diff --git a/Zotlabs/ActivityStreams/Collection.php b/Zotlabs/ActivityStreams/Collection.php
new file mode 100644
index 000000000..f005166a8
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Collection.php
@@ -0,0 +1,124 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Collection extends ASObject
+{
+ public int $totalItems;
+ public string $current;
+ public string $first;
+ public string $last;
+ public array $items;
+
+ public mixed $collectionOf;
+
+ /**
+ * @return int
+ */
+ public function getTotalItems(): int
+ {
+ return $this->totalItems;
+ }
+
+ /**
+ * @param mixed $totalItems
+ * @return Collection
+ */
+ public function setTotalItems(mixed $totalItems): static
+ {
+ $this->totalItems = $totalItems;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCurrent(): string
+ {
+ return $this->current;
+ }
+
+ /**
+ * @param mixed $current
+ * @return Collection
+ */
+ public function setCurrent(mixed $current): static
+ {
+ $this->current = $current;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFirst(): string
+ {
+ return $this->first;
+ }
+
+ /**
+ * @param mixed $first
+ * @return Collection
+ */
+ public function setFirst(mixed $first): static
+ {
+ $this->first = $first;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLast(): string
+ {
+ return $this->last;
+ }
+
+ /**
+ * @param mixed $last
+ * @return Collection
+ */
+ public function setLast(mixed $last): static
+ {
+ $this->last = $last;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getItems(): array
+ {
+ return $this->items;
+ }
+
+ /**
+ * @param mixed $items
+ * @return Collection
+ */
+ public function setItems(mixed $items): static
+ {
+ $this->items = $items;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCollectionOf(): mixed
+ {
+ return $this->collectionOf;
+ }
+
+ /**
+ * @param mixed $collectionOf
+ * @return Collection
+ */
+ public function setCollectionOf(mixed $collectionOf): static
+ {
+ $this->collectionOf = $collectionOf;
+ return $this;
+ }
+
+
+}
diff --git a/Zotlabs/ActivityStreams/CollectionPage.php b/Zotlabs/ActivityStreams/CollectionPage.php
new file mode 100644
index 000000000..4bdedc93e
--- /dev/null
+++ b/Zotlabs/ActivityStreams/CollectionPage.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class CollectionPage extends Collection
+{
+ public $partOf;
+ public $next;
+ public $prev;
+
+ // startIndex only applies for OrderedCollectionPage. See
+ // https://www.w3.org/ns/activitystreams#OrderedCollectionPage
+ // It is provided here to avoid multiple inheritance
+
+ public $startIndex;
+
+ /**
+ * @return mixed
+ */
+ public function getPartOf()
+ {
+ return $this->partOf;
+ }
+
+ /**
+ * @param mixed $partOf
+ * @return CollectionPage
+ */
+ public function setPartOf($partOf)
+ {
+ $this->partOf = $partOf;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getNext()
+ {
+ return $this->next;
+ }
+
+ /**
+ * @param mixed $next
+ * @return CollectionPage
+ */
+ public function setNext($next)
+ {
+ $this->next = $next;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPrev()
+ {
+ return $this->prev;
+ }
+
+ /**
+ * @param mixed $prev
+ * @return CollectionPage
+ */
+ public function setPrev($prev)
+ {
+ $this->prev = $prev;
+ return $this;
+ }
+
+
+
+}
diff --git a/Zotlabs/ActivityStreams/IntransitiveActivity.php b/Zotlabs/ActivityStreams/IntransitiveActivity.php
new file mode 100644
index 000000000..62e83f63c
--- /dev/null
+++ b/Zotlabs/ActivityStreams/IntransitiveActivity.php
@@ -0,0 +1,104 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+
+class IntransitiveActivity extends ASObject
+{
+ public $actor;
+ public $target;
+ public $result;
+ public $origin;
+ public $instrument;
+
+ /**
+ * @return mixed
+ */
+ public function getActor()
+ {
+ return $this->actor;
+ }
+
+ /**
+ * @param mixed $actor
+ * @return IntransitiveActivity
+ */
+ public function setActor($actor)
+ {
+ $this->actor = $actor;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTarget()
+ {
+ return $this->target;
+ }
+
+ /**
+ * @param mixed $target
+ * @return IntransitiveActivity
+ */
+ public function setTarget($target)
+ {
+ $this->target = $target;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getResult()
+ {
+ return $this->result;
+ }
+
+ /**
+ * @param mixed $result
+ * @return IntransitiveActivity
+ */
+ public function setResult($result)
+ {
+ $this->result = $result;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getOrigin()
+ {
+ return $this->origin;
+ }
+
+ /**
+ * @param mixed $origin
+ * @return IntransitiveActivity
+ */
+ public function setOrigin($origin)
+ {
+ $this->origin = $origin;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getInstrument()
+ {
+ return $this->instrument;
+ }
+
+ /**
+ * @param mixed $instrument
+ * @return IntransitiveActivity
+ */
+ public function setInstrument($instrument)
+ {
+ $this->instrument = $instrument;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/ActivityStreams/Link.php b/Zotlabs/ActivityStreams/Link.php
new file mode 100644
index 000000000..904b354da
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Link.php
@@ -0,0 +1,183 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+use Zotlabs\Lib\BaseObject;
+
+class Link extends BaseObject
+{
+ public $type;
+ public $href;
+ public $rel;
+ public $mediaType;
+ public $name;
+ public $hreflang;
+ public $height;
+ public $width;
+ public $preview;
+
+
+
+ /**
+ * @return mixed
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param mixed $type
+ * @return Link
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getHref()
+ {
+ return $this->href;
+ }
+
+ /**
+ * @param mixed $href
+ * @return Link
+ */
+ public function setHref($href)
+ {
+ $this->href = $href;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRel()
+ {
+ return $this->rel;
+ }
+
+ /**
+ * @param mixed $rel
+ * @return Link
+ */
+ public function setRel($rel)
+ {
+ $this->rel = $rel;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMediaType()
+ {
+ return $this->mediaType;
+ }
+
+ /**
+ * @param mixed $mediaType
+ * @return Link
+ */
+ public function setMediaType($mediaType)
+ {
+ $this->mediaType = $mediaType;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * @param mixed $name
+ * @return Link
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getHreflang()
+ {
+ return $this->hreflang;
+ }
+
+ /**
+ * @param mixed $hreflang
+ * @return Link
+ */
+ public function setHreflang($hreflang)
+ {
+ $this->hreflang = $hreflang;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ /**
+ * @param mixed $height
+ * @return Link
+ */
+ public function setHeight($height)
+ {
+ $this->height = $height;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getWidth()
+ {
+ return $this->width;
+ }
+
+ /**
+ * @param mixed $width
+ * @return Link
+ */
+ public function setWidth($width)
+ {
+ $this->width = $width;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPreview()
+ {
+ return $this->preview;
+ }
+
+ /**
+ * @param mixed $preview
+ * @return Link
+ */
+ public function setPreview($preview)
+ {
+ $this->preview = $preview;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/ActivityStreams/OrderedCollection.php b/Zotlabs/ActivityStreams/OrderedCollection.php
new file mode 100644
index 000000000..95f5036f7
--- /dev/null
+++ b/Zotlabs/ActivityStreams/OrderedCollection.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class OrderedCollection extends Collection
+{
+
+}
diff --git a/Zotlabs/ActivityStreams/OrderedCollectionPage.php b/Zotlabs/ActivityStreams/OrderedCollectionPage.php
new file mode 100644
index 000000000..664802eff
--- /dev/null
+++ b/Zotlabs/ActivityStreams/OrderedCollectionPage.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+/**
+ * According to the specification, OrderedCollectionPage extends
+ * both OrderedCollection and CollectionPage, but PHP is still a bit awkward
+ * when it comes to multiple inheritance. Rather than try and do this with
+ * traits, we'll just include the CollectionPage elements here - as this only
+ * consists of three properties.
+ */
+
+class OrderedCollectionPage extends OrderedCollection
+{
+ public $partOf;
+ public $next;
+ public $prev;
+ public $startIndex;
+
+ /**
+ * @return mixed
+ */
+ public function getPartOf()
+ {
+ return $this->partOf;
+ }
+
+ /**
+ * @param mixed $partOf
+ * @return OrderedCollectionPage
+ */
+ public function setPartOf($partOf)
+ {
+ $this->partOf = $partOf;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getNext()
+ {
+ return $this->next;
+ }
+
+ /**
+ * @param mixed $next
+ * @return OrderedCollectionPage
+ */
+ public function setNext($next)
+ {
+ $this->next = $next;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPrev()
+ {
+ return $this->prev;
+ }
+
+ /**
+ * @param mixed $prev
+ * @return OrderedCollectionPage
+ */
+ public function setPrev($prev)
+ {
+ $this->prev = $prev;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getStartIndex()
+ {
+ return $this->startIndex;
+ }
+
+ /**
+ * @param mixed $startIndex
+ * @return OrderedCollectionPage
+ */
+ public function setStartIndex($startIndex)
+ {
+ $this->startIndex = $startIndex;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/ActivityStreams/Place.php b/Zotlabs/ActivityStreams/Place.php
new file mode 100644
index 000000000..5aadc1c73
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Place.php
@@ -0,0 +1,125 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Place extends ASObject
+{
+
+ public $accuracy;
+ public $altitude;
+ public $latitude;
+ public $longitude;
+ public $radius;
+ public $units;
+
+ /**
+ * @return mixed
+ */
+ public function getAccuracy()
+ {
+ return $this->accuracy;
+ }
+
+ /**
+ * @param mixed $accuracy
+ * @return Place
+ */
+ public function setAccuracy($accuracy)
+ {
+ $this->accuracy = $accuracy;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAltitude()
+ {
+ return $this->altitude;
+ }
+
+ /**
+ * @param mixed $altitude
+ * @return Place
+ */
+ public function setAltitude($altitude)
+ {
+ $this->altitude = $altitude;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLatitude()
+ {
+ return $this->latitude;
+ }
+
+ /**
+ * @param mixed $latitude
+ * @return Place
+ */
+ public function setLatitude($latitude)
+ {
+ $this->latitude = $latitude;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLongitude()
+ {
+ return $this->longitude;
+ }
+
+ /**
+ * @param mixed $longitude
+ * @return Place
+ */
+ public function setLongitude($longitude)
+ {
+ $this->longitude = $longitude;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRadius()
+ {
+ return $this->radius;
+ }
+
+ /**
+ * @param mixed $radius
+ * @return Place
+ */
+ public function setRadius($radius)
+ {
+ $this->radius = $radius;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUnits()
+ {
+ return $this->units;
+ }
+
+ /**
+ * @param mixed $units
+ * @return Place
+ */
+ public function setUnits($units)
+ {
+ $this->units = $units;
+ return $this;
+ }
+
+
+
+}
diff --git a/Zotlabs/ActivityStreams/Profile.php b/Zotlabs/ActivityStreams/Profile.php
new file mode 100644
index 000000000..817f4a817
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Profile.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Profile extends ASObject
+{
+
+ public $describes;
+
+ /**
+ * @return mixed
+ */
+ public function getDescribes()
+ {
+ return $this->describes;
+ }
+
+ /**
+ * @param mixed $describes
+ * @return Profile
+ */
+ public function setDescribes($describes)
+ {
+ $this->describes = $describes;
+ return $this;
+ }
+
+
+}
diff --git a/Zotlabs/ActivityStreams/PublicKey.php b/Zotlabs/ActivityStreams/PublicKey.php
new file mode 100644
index 000000000..d5e7b9522
--- /dev/null
+++ b/Zotlabs/ActivityStreams/PublicKey.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class PublicKey extends ASObject
+{
+ public $owner;
+ public $signatureAlgorithm;
+ public $publicKeyPem;
+
+ /**
+ * @return mixed
+ */
+ public function getOwner()
+ {
+ return $this->owner;
+ }
+
+ /**
+ * @param mixed $owner
+ * @return PublicKey
+ */
+ public function setOwner($owner)
+ {
+ $this->owner = $owner;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSignatureAlgorithm()
+ {
+ return $this->signatureAlgorithm;
+ }
+
+ /**
+ * @param mixed $signatureAlgorithm
+ * @return PublicKey
+ */
+ public function setSignatureAlgorithm($signatureAlgorithm)
+ {
+ $this->signatureAlgorithm = $signatureAlgorithm;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPublicKeyPem()
+ {
+ return $this->publicKeyPem;
+ }
+
+ /**
+ * @param mixed $publicKeyPem
+ * @return PublicKey
+ */
+ public function setPublicKeyPem($publicKeyPem)
+ {
+ $this->publicKeyPem = $publicKeyPem;
+ return $this;
+ }
+
+
+
+
+}
diff --git a/Zotlabs/ActivityStreams/Question.php b/Zotlabs/ActivityStreams/Question.php
new file mode 100644
index 000000000..63f642eaa
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Question.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Question extends ASObject
+{
+ public $oneOf;
+ public $anyOf;
+ public $closed;
+
+ /**
+ * @return mixed
+ */
+ public function getOneOf()
+ {
+ return $this->oneOf;
+ }
+
+ /**
+ * @param mixed $oneOf
+ * @return Question
+ */
+ public function setOneOf($oneOf)
+ {
+ $this->oneOf = $oneOf;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAnyOf()
+ {
+ return $this->anyOf;
+ }
+
+ /**
+ * @param mixed $anyOf
+ * @return Question
+ */
+ public function setAnyOf($anyOf)
+ {
+ $this->anyOf = $anyOf;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getClosed()
+ {
+ return $this->closed;
+ }
+
+ /**
+ * @param mixed $closed
+ * @return Question
+ */
+ public function setClosed($closed)
+ {
+ $this->closed = $closed;
+ return $this;
+ }
+
+
+
+}
diff --git a/Zotlabs/ActivityStreams/Relationship.php b/Zotlabs/ActivityStreams/Relationship.php
new file mode 100644
index 000000000..29669a200
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Relationship.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Relationship extends ASObject
+{
+ public $subject;
+ public $object;
+ public $relationship;
+
+ /**
+ * @return mixed
+ */
+ public function getSubject()
+ {
+ return $this->subject;
+ }
+
+ /**
+ * @param mixed $subject
+ * @return Relationship
+ */
+ public function setSubject($subject)
+ {
+ $this->subject = $subject;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getObject()
+ {
+ return $this->object;
+ }
+
+ /**
+ * @param mixed $object
+ * @return Relationship
+ */
+ public function setObject($object)
+ {
+ $this->object = $object;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRelationship()
+ {
+ return $this->relationship;
+ }
+
+ /**
+ * @param mixed $relationship
+ * @return Relationship
+ */
+ public function setRelationship($relationship)
+ {
+ $this->relationship = $relationship;
+ return $this;
+ }
+
+
+
+}
diff --git a/Zotlabs/ActivityStreams/Signature.php b/Zotlabs/ActivityStreams/Signature.php
new file mode 100644
index 000000000..e115dd331
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Signature.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Signature extends ASObject
+{
+ public $nonce;
+ public $creator;
+ public $signatureValue;
+
+ /**
+ * @return mixed
+ */
+ public function getCreator()
+ {
+ return $this->creator;
+ }
+
+ /**
+ * @param mixed $creator
+ * @return Signature
+ */
+ public function setCreator($creator)
+ {
+ $this->creator = $creator;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSignatureValue()
+ {
+ return $this->signatureValue;
+ }
+
+ /**
+ * @param mixed $signatureValue
+ * @return Signature
+ */
+ public function setSignatureValue($signatureValue)
+ {
+ $this->signatureValue = $signatureValue;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getNonce()
+ {
+ return $this->nonce;
+ }
+
+ /**
+ * @param mixed $nonce
+ * @return Signature
+ */
+ public function setNonce($nonce)
+ {
+ $this->nonce = $nonce;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/ActivityStreams/Tombstone.php b/Zotlabs/ActivityStreams/Tombstone.php
new file mode 100644
index 000000000..54a6ab76c
--- /dev/null
+++ b/Zotlabs/ActivityStreams/Tombstone.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class Tombstone extends ASObject
+{
+ public $formerType;
+ public $deleted;
+
+ /**
+ * @return mixed
+ */
+ public function getFormerType()
+ {
+ return $this->formerType;
+ }
+
+ /**
+ * @param mixed $formerType
+ * @return Tombstone
+ */
+ public function setFormerType($formerType)
+ {
+ $this->formerType = $formerType;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDeleted()
+ {
+ return $this->deleted;
+ }
+
+ /**
+ * @param mixed $deleted
+ * @return Tombstone
+ */
+ public function setDeleted($deleted)
+ {
+ $this->deleted = $deleted;
+ return $this;
+ }
+
+
+
+}
diff --git a/Zotlabs/ActivityStreams/UnhandledElementException.php b/Zotlabs/ActivityStreams/UnhandledElementException.php
new file mode 100644
index 000000000..f8b71693d
--- /dev/null
+++ b/Zotlabs/ActivityStreams/UnhandledElementException.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Zotlabs\ActivityStreams;
+
+class UnhandledElementException extends \Exception
+{
+
+}
diff --git a/Zotlabs/Daemon/Channel_purge.php b/Zotlabs/Daemon/Channel_purge.php
index 9fceb0fb9..7286a791a 100644
--- a/Zotlabs/Daemon/Channel_purge.php
+++ b/Zotlabs/Daemon/Channel_purge.php
@@ -24,7 +24,7 @@ class Channel_purge {
);
if ($r) {
foreach ($r as $rv) {
- drop_item($rv['id'], false);
+ drop_item($rv['id'], uid: $channel_id);
}
}
} while ($r);
diff --git a/Zotlabs/Daemon/Content_importer.php b/Zotlabs/Daemon/Content_importer.php
index 67f1c8e80..b98a1f10d 100644
--- a/Zotlabs/Daemon/Content_importer.php
+++ b/Zotlabs/Daemon/Content_importer.php
@@ -38,7 +38,13 @@ class Content_importer {
$headers = HTTPSig::create_sig($headers,$channel['channel_prvkey'], channel_url($channel),true,'sha512');
- $x = z_fetch_url($hz_server . '/api/z/1.0/item/export_page?f=&since=' . urlencode($since) . '&until=' . urlencode($until) . '&page=' . $page,false,$redirects,[ 'headers' => $headers ]);
+ $redirects = 0;
+ $x = z_fetch_url(
+ $hz_server . '/api/z/1.0/item/export_page?f=&since=' . urlencode($since) . '&until=' . urlencode($until) . '&page=' . $page,
+ false,
+ $redirects,
+ [ 'headers' => $headers ]
+ );
// logger('item fetch: ' . print_r($x,true));
@@ -47,9 +53,9 @@ class Content_importer {
killme();
}
- $j = json_decode($x['body'],true);
+ $j = json_decode($x['body'], true);
- if(! is_array($j['item']) || ! count($j['item'])) {
+ if($j && empty($j['item'])) {
PConfig::Set($channel['channel_id'], 'import', 'content_completed', 1);
return;
}
diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php
index d2c863572..a38809f45 100644
--- a/Zotlabs/Daemon/Cron.php
+++ b/Zotlabs/Daemon/Cron.php
@@ -69,18 +69,18 @@ class Cron {
// expire any expired items
- $r = q("select id,item_wall from item where expires > '2001-01-01 00:00:00' and expires < %s
+ $r = q("select id, uid, item_wall from item where expires > '2001-01-01 00:00:00' and expires < %s
and item_deleted = 0 ",
db_utcnow()
);
+
if ($r) {
- require_once('include/items.php');
foreach ($r as $rr) {
- drop_item($rr['id'], false, (($rr['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL));
+ // pass uid of the message for permission check as we are running as a daemon process with no session.
+ drop_item($rr['id'], (($rr['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL), uid: intval($rr['uid']));
if ($rr['item_wall']) {
// The notifier isn't normally invoked unless item_drop is interactive.
Master::Summon(['Notifier', 'drop', $rr['id']]);
-
if ($interval) {
usleep($interval);
}
@@ -147,40 +147,29 @@ class Cron {
// (time travel posts). Restrict to items that have come of age in the last
// couple of days to limit the query to something reasonable.
- $r = q("select id from item where item_delayed = 1 and created <= %s and created > '%s' ",
+ $r = q("select * from item where item_delayed = 1 and created <= %s and created > '%s' ",
db_utcnow(),
dbesc(datetime_convert('UTC', 'UTC', 'now - 2 days'))
);
- if ($r) {
- foreach ($r as $rr) {
- $x = q("update item set item_delayed = 0 where id = %d",
- intval($rr['id'])
- );
- if ($x) {
- $z = q("select * from item where id = %d",
- intval($rr['id'])
- );
- if ($z) {
- xchan_query($z);
- $sync_item = fetch_post_tags($z);
- Libsync::build_sync_packet($sync_item[0]['uid'],
- [
- 'item' => [encode_item($sync_item[0], true)]
- ]
- );
- }
- Master::Summon(array('Notifier', 'wall-new', $rr['id']));
- if ($interval) {
- usleep($interval);
+ if ($r) {
+ xchan_query($r);
+ $items = fetch_post_tags($r);
+ foreach ($items as $item) {
+ $item['item_delayed'] = 0;
+ $post = item_store_update($item);
+
+ if($post['success']) {
+ Master::Summon(['Notifier', 'wall-new', $post['item_id']]);
+ if (!empty($post['approval_id'])) {
+ Master::Summon(['Notifier', 'wall-new', $post['approval_id']]);
}
}
- }
- }
-
- require_once('include/attach.php');
- attach_upgrade();
-
+ if ($interval) {
+ usleep($interval);
+ }
+ }
+ }
// once daily run birthday_updates and then expire in background
// FIXME: add birthday updates, both locally and for xprof for use
diff --git a/Zotlabs/Daemon/Expire.php b/Zotlabs/Daemon/Expire.php
index ad52a6b71..dae585578 100644
--- a/Zotlabs/Daemon/Expire.php
+++ b/Zotlabs/Daemon/Expire.php
@@ -23,13 +23,13 @@ class Expire {
// perform final cleanup on previously delete items
- $r = q("select id from item where item_deleted = 1 and item_pending_remove = 0 and changed < %s - INTERVAL %s",
+ $r = q("select id, uid from item where item_deleted = 1 and item_pending_remove = 0 and changed < %s - INTERVAL %s",
db_utcnow(),
db_quoteinterval('10 DAY')
);
if ($r) {
foreach ($r as $rr) {
- drop_item($rr['id'], false, DROPITEM_PHASE2);
+ drop_item($rr['id'], DROPITEM_PHASE2, uid: $rr['uid']);
}
}
diff --git a/Zotlabs/Daemon/File_importer.php b/Zotlabs/Daemon/File_importer.php
index 7067e152d..1ddab60f0 100644
--- a/Zotlabs/Daemon/File_importer.php
+++ b/Zotlabs/Daemon/File_importer.php
@@ -38,7 +38,13 @@ class File_importer {
$headers = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel),true,'sha512');
// TODO: implement total count
- $x = z_fetch_url($hz_server . '/api/z/1.0/file/export_page?f=records=1&page=' . $page, false, $redirects, [ 'headers' => $headers ]);
+ $redirects = 0;
+ $x = z_fetch_url(
+ $hz_server . '/api/z/1.0/file/export_page?f=records=1&page=' . $page,
+ false,
+ $redirects,
+ [ 'headers' => $headers ]
+ );
// logger('file fetch: ' . print_r($x,true));
if(! $x['success']) {
diff --git a/Zotlabs/Daemon/Importdoc.php b/Zotlabs/Daemon/Importdoc.php
index c5a81e50c..de571848e 100644
--- a/Zotlabs/Daemon/Importdoc.php
+++ b/Zotlabs/Daemon/Importdoc.php
@@ -11,6 +11,21 @@ class Importdoc {
self::update_docs_dir('doc/*');
+ $sys = get_sys_channel();
+
+ // remove old files that weren't updated (indicates they were most likely deleted).
+ $i = q("select id from item where uid = %d and item_type = 5 and edited < %s - INTERVAL %s",
+ intval($sys['channel_id']),
+ db_utcnow(),
+ db_quoteinterval('14 DAY')
+ );
+
+ if ($i) {
+ foreach ($i as $iv) {
+ drop_item($iv['id'], uid: $sys['channel_id']);
+ }
+ }
+
return;
}
@@ -18,9 +33,13 @@ class Importdoc {
static public function update_docs_dir($s) {
$f = basename($s);
$d = dirname($s);
- if ($s === 'doc/html')
+
+ if ($s === 'doc/html') {
return;
+ }
+
$files = glob("$d/$f");
+
if ($files) {
foreach ($files as $fi) {
if ($fi === 'doc/html') {
diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php
index 20134b8fe..9fdb1defb 100644
--- a/Zotlabs/Daemon/Notifier.php
+++ b/Zotlabs/Daemon/Notifier.php
@@ -241,11 +241,6 @@ class Notifier {
$target_item = $r[0];
- if (in_array($target_item['author']['xchan_network'], ['rss', 'anon', 'token'])) {
- logger('notifier: target item author is not a fetchable actor', LOGGER_DEBUG);
- return;
- }
-
if (intval($target_item['item_deleted'])) {
logger('notifier: target item ITEM_DELETED', LOGGER_DEBUG);
}
@@ -268,22 +263,9 @@ class Notifier {
}
- // Check for non published items, but allow an exclusion for transmitting hidden file activities
-
- if (intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) ||
- intval($target_item['item_blocked']) || intval($target_item['item_hidden'])) {
- logger('notifier: target item not published, so not forwardable', LOGGER_DEBUG);
- return;
- }
-
- // follow/unfollow is for internal use only
- if (in_array($target_item['verb'], ['Follow', 'Ignore', ACTIVITY_FOLLOW, ACTIVITY_UNFOLLOW])) {
- logger('not fowarding follow/unfollow note activity');
- return;
- }
-
- if (strpos($target_item['postopts'], 'nodeliver') !== false) {
- logger('notifier: target item is undeliverable', LOGGER_DEBUG);
+ if (!item_forwardable($target_item)) {
+ //hz_syslog(print_r($target_item,true));
+ logger('notifier: target item not forwardable', LOGGER_DEBUG);
return;
}
@@ -299,7 +281,7 @@ class Notifier {
return;
}
- if ($target_item['verb'] === ACTIVITY_SHARE) {
+ if (in_array($target_item['verb'], [ACTIVITY_SHARE])) {
// Provide correct representation across the wire. Internally this is treated as a comment.
$target_item['parent_mid'] = $target_item['thr_parent'] = $target_item['mid'];
}
@@ -341,7 +323,13 @@ class Notifier {
self::$encoded_item = json_decode($m, true);
}
else {
- self::$encoded_item = Activity::build_packet(Activity::encode_activity($target_item), self::$channel, false);
+ $activity = Activity::encode_activity($target_item);
+
+ if (!$activity) {
+ return;
+ }
+
+ self::$encoded_item = Activity::build_packet($activity, self::$channel, false);
}
logger('target_item: ' . print_r($target_item, true), LOGGER_DEBUG);
@@ -358,6 +346,10 @@ class Notifier {
$relay_to_owner = (!$top_level_post && intval($target_item['item_origin']) && comment_local_origin($target_item));
+ if (self::$channel['channel_hash'] === $target_item['owner_xchan']) {
+ $relay_to_owner = false;
+ }
+
// $cmd === 'relay' indicates the owner is sending it to the original recipients
// don't allow the item in the relay command to relay to owner under any circumstances, it will loop
@@ -374,7 +366,6 @@ class Notifier {
if (($relay_to_owner || $uplink) && ($cmd !== 'relay')) {
logger('notifier: followup relay', LOGGER_DEBUG);
- // If the Parent item is an Announce the real owner is the parent author
$sendto = (($uplink) ? $parent_item['source_xchan'] : $parent_item['owner_xchan']);
self::$recipients = [$sendto];
self::$private = true;
@@ -389,7 +380,7 @@ class Notifier {
logger('normal (downstream) distribution', LOGGER_DEBUG);
}
- if ($parent_item && $parent_item['item_private'] !== $target_item['item_private']) {
+ if (($parent_item && $parent_item['item_private'] !== $target_item['item_private']) || (intval($target_item['item_restrict']) & 1)) {
logger('conversation privacy mismatch - downstream delivery prevented');
return;
}
@@ -589,8 +580,6 @@ class Notifier {
foreach ($dhubs as $hub) {
- logger('notifier_hub: ' . $hub['hubloc_url'], LOGGER_DEBUG);
-
if ($hub['hubloc_network'] !== 'zot6') {
$narr = [
'channel' => self::$channel,
diff --git a/Zotlabs/Entity/Account.php b/Zotlabs/Entity/Account.php
new file mode 100644
index 000000000..2d3af5e4b
--- /dev/null
+++ b/Zotlabs/Entity/Account.php
@@ -0,0 +1,352 @@
+<?php
+
+namespace Zotlabs\Entity;
+
+use Zotlabs\Lib\BaseObject;
+
+class Account extends BaseObject
+{
+ public $account_id;
+ public $account_parent;
+ public $account_default_channel;
+ public $account_salt;
+ public $account_password;
+ public $account_email;
+ public $account_external;
+ public $account_language;
+ public $account_created;
+ public $account_lastlog;
+ public $account_flags;
+ public $account_roles;
+ public $account_reset;
+ public $account_expires;
+ public $account_expire_notified;
+ public $account_service_class;
+ public $account_level;
+ public $account_password_change;
+
+ /**
+ * @return mixed
+ */
+ public function getId()
+ {
+ return $this->account_id;
+ }
+
+ /**
+ * @param mixed $account_id
+ * @return Account
+ */
+ public function setId($account_id)
+ {
+ $this->account_id = $account_id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getParent()
+ {
+ return $this->account_parent;
+ }
+
+ /**
+ * @param mixed $account_parent
+ * @return Account
+ */
+ public function setParent($account_parent)
+ {
+ $this->account_parent = $account_parent;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDefaultChannel()
+ {
+ return $this->account_default_channel;
+ }
+
+ /**
+ * @param mixed $account_default_channel
+ * @return Account
+ */
+ public function setDefaultChannel($account_default_channel)
+ {
+ $this->account_default_channel = $account_default_channel;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSalt()
+ {
+ return $this->account_salt;
+ }
+
+ /**
+ * @param mixed $account_salt
+ * @return Account
+ */
+ public function setSalt($account_salt)
+ {
+ $this->account_salt = $account_salt;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPassword()
+ {
+ return $this->account_password;
+ }
+
+ /**
+ * @param mixed $account_password
+ * @return Account
+ */
+ public function setPassword($account_password)
+ {
+ $this->account_password = $account_password;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getEmail()
+ {
+ return $this->account_email;
+ }
+
+ /**
+ * @param mixed $account_email
+ * @return Account
+ */
+ public function setEmail($account_email)
+ {
+ $this->account_email = $account_email;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getExternal()
+ {
+ return $this->account_external;
+ }
+
+ /**
+ * @param mixed $account_external
+ * @return Account
+ */
+ public function setExternal($account_external)
+ {
+ $this->account_external = $account_external;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLanguage()
+ {
+ return $this->account_language;
+ }
+
+ /**
+ * @param mixed $account_language
+ * @return Account
+ */
+ public function setLanguage($account_language)
+ {
+ $this->account_language = $account_language;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCreated()
+ {
+ return $this->account_created;
+ }
+
+ /**
+ * @param mixed $account_created
+ * @return Account
+ */
+ public function setCreated($account_created)
+ {
+ $this->account_created = $account_created;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLastlog()
+ {
+ return $this->account_lastlog;
+ }
+
+ /**
+ * @param mixed $account_lastlog
+ * @return Account
+ */
+ public function setLastlog($account_lastlog)
+ {
+ $this->account_lastlog = $account_lastlog;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getFlags()
+ {
+ return $this->account_flags;
+ }
+
+ /**
+ * @param mixed $account_flags
+ * @return Account
+ */
+ public function setFlags($account_flags)
+ {
+ $this->account_flags = $account_flags;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRoles()
+ {
+ return $this->account_roles;
+ }
+
+ /**
+ * @param mixed $account_roles
+ * @return Account
+ */
+ public function setRoles($account_roles)
+ {
+ $this->account_roles = $account_roles;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getReset()
+ {
+ return $this->account_reset;
+ }
+
+ /**
+ * @param mixed $account_reset
+ * @return Account
+ */
+ public function setReset($account_reset)
+ {
+ $this->account_reset = $account_reset;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getExpires()
+ {
+ return $this->account_expires;
+ }
+
+ /**
+ * @param mixed $account_expires
+ * @return Account
+ */
+ public function setExpires($account_expires)
+ {
+ $this->account_expires = $account_expires;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getExpireNotified()
+ {
+ return $this->account_expire_notified;
+ }
+
+ /**
+ * @param mixed $account_expire_notified
+ * @return Account
+ */
+ public function setExpireNotified($account_expire_notified)
+ {
+ $this->account_expire_notified = $account_expire_notified;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getServiceClass()
+ {
+ return $this->account_service_class;
+ }
+
+ /**
+ * @param mixed $account_service_class
+ * @return Account
+ */
+ public function setServiceClass($account_service_class)
+ {
+ $this->account_service_class = $account_service_class;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLevel()
+ {
+ return $this->account_level;
+ }
+
+ /**
+ * @param mixed $account_level
+ * @return Account
+ */
+ public function setLevel($account_level)
+ {
+ $this->account_level = $account_level;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPasswordChange()
+ {
+ return $this->account_password_change;
+ }
+
+ /**
+ * @param mixed $account_password_change
+ * @return Account
+ */
+ public function setPasswordChange($account_password_change)
+ {
+ $this->account_password_change = $account_password_change;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/Entity/Channel.php b/Zotlabs/Entity/Channel.php
new file mode 100644
index 000000000..e9f7dc14f
--- /dev/null
+++ b/Zotlabs/Entity/Channel.php
@@ -0,0 +1,714 @@
+<?php
+
+namespace Zotlabs\Entity;
+
+use Zotlabs\Lib\BaseObject;
+
+class Channel extends BaseObject
+{
+ public $channel_id;
+ public $channel_account_id;
+ public $channel_primary;
+ public $channel_name;
+ public $channel_parent;
+ public $channel_address;
+ public $channel_guid;
+ public $channel_guid_sig;
+ public $channel_hash;
+ public $channel_timezone;
+ public $channel_location;
+ public $channel_theme;
+ public $channel_startpage;
+ public $channel_pubkey;
+ public $channel_prvkey;
+ public $channel_epubkey;
+ public $channel_eprvkey;
+ public $channel_notifyflags;
+ public $channel_pageflags;
+ public $channel_dirdate;
+ public $channel_lastpost;
+ public $channel_deleted;
+ public $channel_active;
+ public $channel_max_anon_mail;
+ public $channel_max_friend_req;
+ public $channel_expire_days;
+ public $channel_passwd_reset;
+ public $channel_default_group;
+ public $channel_allow_cid;
+ public $channel_allow_gid;
+ public $channel_deny_cid;
+ public $channel_deny_gid;
+ public $channel_removed;
+ public $channel_system;
+ public $channel_moved;
+ public $channel_password;
+ public $channel_salt;
+
+ /**
+ * @return mixed
+ */
+ public function getId()
+ {
+ return $this->channel_id;
+ }
+
+ /**
+ * @param mixed $channel_id
+ * @return Channel
+ */
+ public function setId($channel_id)
+ {
+ $this->channel_id = $channel_id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAccountId()
+ {
+ return $this->channel_account_id;
+ }
+
+ /**
+ * @param mixed $channel_account_id
+ * @return Channel
+ */
+ public function setAccountId($channel_account_id)
+ {
+ $this->channel_account_id = $channel_account_id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPrimary()
+ {
+ return $this->channel_primary;
+ }
+
+ /**
+ * @param mixed $channel_primary
+ * @return Channel
+ */
+ public function setPrimary($channel_primary)
+ {
+ $this->channel_primary = $channel_primary;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getName()
+ {
+ return $this->channel_name;
+ }
+
+ /**
+ * @param mixed $channel_name
+ * @return Channel
+ */
+ public function setName($channel_name)
+ {
+ $this->channel_name = $channel_name;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getParent()
+ {
+ return $this->channel_parent;
+ }
+
+ /**
+ * @param mixed $channel_parent
+ * @return Channel
+ */
+ public function setParent($channel_parent)
+ {
+ $this->channel_parent = $channel_parent;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAddress()
+ {
+ return $this->channel_address;
+ }
+
+ /**
+ * @param mixed $channel_address
+ * @return Channel
+ */
+ public function setAddress($channel_address)
+ {
+ $this->channel_address = $channel_address;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getGuid()
+ {
+ return $this->channel_guid;
+ }
+
+ /**
+ * @param mixed $channel_guid
+ * @return Channel
+ */
+ public function setGuid($channel_guid)
+ {
+ $this->channel_guid = $channel_guid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getGuidSig()
+ {
+ return $this->channel_guid_sig;
+ }
+
+ /**
+ * @param mixed $channel_guid_sig
+ * @return Channel
+ */
+ public function setGuidSig($channel_guid_sig)
+ {
+ $this->channel_guid_sig = $channel_guid_sig;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getHash()
+ {
+ return $this->channel_hash;
+ }
+
+ /**
+ * @param mixed $channel_hash
+ * @return Channel
+ */
+ public function setHash($channel_hash)
+ {
+ $this->channel_hash = $channel_hash;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTimezone()
+ {
+ return $this->channel_timezone;
+ }
+
+ /**
+ * @param mixed $channel_timezone
+ * @return Channel
+ */
+ public function setTimezone($channel_timezone)
+ {
+ $this->channel_timezone = $channel_timezone;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLocation()
+ {
+ return $this->channel_location;
+ }
+
+ /**
+ * @param mixed $channel_location
+ * @return Channel
+ */
+ public function setLocation($channel_location)
+ {
+ $this->channel_location = $channel_location;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTheme()
+ {
+ return $this->channel_theme;
+ }
+
+ /**
+ * @param mixed $channel_theme
+ * @return Channel
+ */
+ public function setTheme($channel_theme)
+ {
+ $this->channel_theme = $channel_theme;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getStartpage()
+ {
+ return $this->channel_startpage;
+ }
+
+ /**
+ * @param mixed $channel_startpage
+ * @return Channel
+ */
+ public function setStartpage($channel_startpage)
+ {
+ $this->channel_startpage = $channel_startpage;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPubkey()
+ {
+ return $this->channel_pubkey;
+ }
+
+ /**
+ * @param mixed $channel_pubkey
+ * @return Channel
+ */
+ public function setPubkey($channel_pubkey)
+ {
+ $this->channel_pubkey = $channel_pubkey;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPrvkey()
+ {
+ return $this->channel_prvkey;
+ }
+
+ /**
+ * @param mixed $channel_prvkey
+ * @return Channel
+ */
+ public function setPrvkey($channel_prvkey)
+ {
+ $this->channel_prvkey = $channel_prvkey;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getEpubkey()
+ {
+ return $this->channel_epubkey;
+ }
+
+ /**
+ * @param mixed $channel_epubkey
+ * @return Channel
+ */
+ public function setEpubkey($channel_epubkey)
+ {
+ $this->channel_epubkey = $channel_epubkey;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getEprvkey()
+ {
+ return $this->channel_eprvkey;
+ }
+
+ /**
+ * @param mixed $channel_eprvkey
+ * @return Channel
+ */
+ public function setEprvkey($channel_eprvkey)
+ {
+ $this->channel_eprvkey = $channel_eprvkey;
+ return $this;
+ }
+
+
+ /**
+ * @return mixed
+ */
+ public function getNotifyflags()
+ {
+ return $this->channel_notifyflags;
+ }
+
+ /**
+ * @param mixed $channel_notifyflags
+ * @return Channel
+ */
+ public function setNotifyflags($channel_notifyflags)
+ {
+ $this->channel_notifyflags = $channel_notifyflags;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPageflags()
+ {
+ return $this->channel_pageflags;
+ }
+
+ /**
+ * @param mixed $channel_pageflags
+ * @return Channel
+ */
+ public function setPageflags($channel_pageflags)
+ {
+ $this->channel_pageflags = $channel_pageflags;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDirdate()
+ {
+ return $this->channel_dirdate;
+ }
+
+ /**
+ * @param mixed $channel_dirdate
+ * @return Channel
+ */
+ public function setDirdate($channel_dirdate)
+ {
+ $this->channel_dirdate = $channel_dirdate;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLastpost()
+ {
+ return $this->channel_lastpost;
+ }
+
+ /**
+ * @param mixed $channel_lastpost
+ * @return Channel
+ */
+ public function setLastpost($channel_lastpost)
+ {
+ $this->channel_lastpost = $channel_lastpost;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDeleted()
+ {
+ return $this->channel_deleted;
+ }
+
+ /**
+ * @param mixed $channel_deleted
+ * @return Channel
+ */
+ public function setDeleted($channel_deleted)
+ {
+ $this->channel_deleted = $channel_deleted;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getActive()
+ {
+ return $this->channel_active;
+ }
+
+ /**
+ * @param mixed $channel_active
+ * @return Channel
+ */
+ public function setActive($channel_active)
+ {
+ $this->channel_active = $channel_active;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMaxAnonMail()
+ {
+ return $this->channel_max_anon_mail;
+ }
+
+ /**
+ * @param mixed $channel_max_anon_mail
+ * @return Channel
+ */
+ public function setMaxAnonMail($channel_max_anon_mail)
+ {
+ $this->channel_max_anon_mail = $channel_max_anon_mail;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMaxFriendReq()
+ {
+ return $this->channel_max_friend_req;
+ }
+
+ /**
+ * @param mixed $channel_max_friend_req
+ * @return Channel
+ */
+ public function setMaxFriendReq($channel_max_friend_req)
+ {
+ $this->channel_max_friend_req = $channel_max_friend_req;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getExpireDays()
+ {
+ return $this->channel_expire_days;
+ }
+
+ /**
+ * @param mixed $channel_expire_days
+ * @return Channel
+ */
+ public function setExpireDays($channel_expire_days)
+ {
+ $this->channel_expire_days = $channel_expire_days;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPasswdReset()
+ {
+ return $this->channel_passwd_reset;
+ }
+
+ /**
+ * @param mixed $channel_passwd_reset
+ * @return Channel
+ */
+ public function setPasswdReset($channel_passwd_reset)
+ {
+ $this->channel_passwd_reset = $channel_passwd_reset;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDefaultGroup()
+ {
+ return $this->channel_default_group;
+ }
+
+ /**
+ * @param mixed $channel_default_group
+ * @return Channel
+ */
+ public function setDefaultGroup($channel_default_group)
+ {
+ $this->channel_default_group = $channel_default_group;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAllowCid()
+ {
+ return $this->channel_allow_cid;
+ }
+
+ /**
+ * @param mixed $channel_allow_cid
+ * @return Channel
+ */
+ public function setAllowCid($channel_allow_cid)
+ {
+ $this->channel_allow_cid = $channel_allow_cid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAllowGid()
+ {
+ return $this->channel_allow_gid;
+ }
+
+ /**
+ * @param mixed $channel_allow_gid
+ * @return Channel
+ */
+ public function setAllowGid($channel_allow_gid)
+ {
+ $this->channel_allow_gid = $channel_allow_gid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDenyCid()
+ {
+ return $this->channel_deny_cid;
+ }
+
+ /**
+ * @param mixed $channel_deny_cid
+ * @return Channel
+ */
+ public function setDenyCid($channel_deny_cid)
+ {
+ $this->channel_deny_cid = $channel_deny_cid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDenyGid()
+ {
+ return $this->channel_deny_gid;
+ }
+
+ /**
+ * @param mixed $channel_deny_gid
+ * @return Channel
+ */
+ public function setDenyGid($channel_deny_gid)
+ {
+ $this->channel_deny_gid = $channel_deny_gid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRemoved()
+ {
+ return $this->channel_removed;
+ }
+
+ /**
+ * @param mixed $channel_removed
+ * @return Channel
+ */
+ public function setRemoved($channel_removed)
+ {
+ $this->channel_removed = $channel_removed;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSystem()
+ {
+ return $this->channel_system;
+ }
+
+ /**
+ * @param mixed $channel_system
+ * @return Channel
+ */
+ public function setSystem($channel_system)
+ {
+ $this->channel_system = $channel_system;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMoved()
+ {
+ return $this->channel_moved;
+ }
+
+ /**
+ * @param mixed $channel_moved
+ * @return Channel
+ */
+ public function setMoved($channel_moved)
+ {
+ $this->channel_moved = $channel_moved;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPassword()
+ {
+ return $this->channel_password;
+ }
+
+ /**
+ * @param mixed $channel_password
+ * @return Channel
+ */
+ public function setPassword($channel_password)
+ {
+ $this->channel_password = $channel_password;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSalt()
+ {
+ return $this->channel_salt;
+ }
+
+ /**
+ * @param mixed $channel_salt
+ * @return Channel
+ */
+ public function setSalt($channel_salt)
+ {
+ $this->channel_salt = $channel_salt;
+ return $this;
+ }
+
+}
diff --git a/Zotlabs/Entity/Item.php b/Zotlabs/Entity/Item.php
new file mode 100644
index 000000000..76ff8b150
--- /dev/null
+++ b/Zotlabs/Entity/Item.php
@@ -0,0 +1,1498 @@
+<?php
+
+namespace Zotlabs\Entity;
+
+use Zotlabs\Lib\BaseObject;
+
+class Item extends BaseObject
+{
+ // primary index auto-increment
+ public $id;
+ // id of the thread top-level parent
+ public $parent;
+
+ // account id of the owner of this record
+ public $aid;
+ // channel id of the owner of this record
+ public $uid;
+
+ // UUID-V4 // If no UUID is provided UUID-V5 of the message id
+ public $uuid;
+
+ // message id
+ public $mid;
+
+ // message id of top-level parent
+ public $parent_mid;
+ // message id of immediate parent
+ public $thr_parent;
+
+ // int thread depth
+ public $item_level;
+
+ // url pointing to the local copy of this item
+ public $llink;
+
+ // url pointing to permalink or this item origin
+ public $plink;
+
+ // UTC datetime the item was created
+ public $created;
+ // UTC datetime the item was changed
+ public $edited;
+ // UTC datetime the item will self-destruct
+ public $expires;
+ // UTC datetime last comment
+ public $commented;
+ // UTC datetime received here
+ public $received;
+ // UTC datetime this record last modified
+ public $changed;
+ // UTC datetime comments will be refused
+ public $comments_closed;
+
+ // portable id of channel that initiated this conversation thread
+ public $owner_xchan;
+ // portable id of item creator
+ public $author_xchan;
+ // portable id of real (upstream) author if relayed
+ public $source_xchan;
+ // MIME type of item body
+ public $mimetype;
+
+ // ISO language string
+ public $lang;
+ // Name of publishing software
+ public $app;
+ // Title of item
+ public $title;
+ // Sommary of item
+ public $summary;
+ // body of item
+ public $body;
+ // html representation
+ public $html;
+ // Activity type
+ public $verb;
+ // Activity object type
+ public $obj_type;
+ // Activity object content JSON
+ public $obj;
+ // Activity target type
+ public $tgt_type;
+ // Activity target content JSON
+ public $target;
+ // attachments
+ public $attach;
+ // signature information
+ public $sig;
+
+ // version of this item
+ public $revision;
+ // message id of controlling layout (CMS use)
+ public $layout_mid;
+ // shared storage for delivery addons
+ public $postopts;
+ // delivery relay tracking
+ public $route;
+ // UUID of attached resource
+ public $resource_id;
+ // table type of attacched resource
+ public $resource_type;
+
+ // free-form text location
+ public $location;
+ // combined coordinates (text)
+ public $coord;
+ // string public policy
+ public $public_policy;
+ // string comment policy
+ public $comment_policy;
+ // string encoded array of portable ids
+ public $allow_cid;
+ // string encoded array of access group UUIDs
+ public $allow_gid;
+ // string encoded array blocked portable ids
+ public $deny_cid;
+ // string encoded array blocked access group UUIDs
+ public $deny_gid;
+ public $item_restrict;
+ public $item_flags;
+ public $item_private;
+ public $item_origin;
+ public $item_unseen;
+ public $item_starred;
+ public $item_uplink;
+ public $item_consensus;
+ public $item_wall;
+ public $item_thread_top;
+ public $item_notshown;
+ public $item_nsfw;
+ public $item_relay;
+ public $item_mentionsme;
+ public $item_nocomment;
+ public $item_obscured;
+ public $item_verified;
+ public $item_retained;
+ public $item_rss;
+ public $item_deleted;
+ public $item_type;
+ public $item_hidden;
+ public $item_unpublished;
+ public $item_delayed;
+ public $item_pending_remove;
+ public $item_blocked;
+
+ /**
+ * @return mixed
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * @param mixed $id
+ * @return Item
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMid()
+ {
+ return $this->mid;
+ }
+
+ /**
+ * @param mixed $mid
+ * @return Item
+ */
+ public function setMid($mid)
+ {
+ $this->mid = $mid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUuid()
+ {
+ return $this->uuid;
+ }
+
+ /**
+ * @param mixed $uuid
+ * @return Item
+ */
+ public function setUuid($uuid)
+ {
+ $this->uuid = $uuid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAid()
+ {
+ return $this->aid;
+ }
+
+ /**
+ * @param mixed $aid
+ * @return Item
+ */
+ public function setAid($aid)
+ {
+ $this->aid = $aid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUid()
+ {
+ return $this->uid;
+ }
+
+ /**
+ * @param mixed $uid
+ * @return Item
+ */
+ public function setUid($uid)
+ {
+ $this->uid = $uid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getParent()
+ {
+ return $this->parent;
+ }
+
+ /**
+ * @param mixed $parent
+ * @return Item
+ */
+ public function setParent($parent)
+ {
+ $this->parent = $parent;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getParentMid()
+ {
+ return $this->parent_mid;
+ }
+
+ /**
+ * @param mixed $parent_mid
+ * @return Item
+ */
+ public function setParentMid($parent_mid)
+ {
+ $this->parent_mid = $parent_mid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getThrParent()
+ {
+ return $this->thr_parent;
+ }
+
+ /**
+ * @param mixed $thr_parent
+ * @return Item
+ */
+ public function setThrParent($thr_parent)
+ {
+ $this->thr_parent = $thr_parent;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLevel()
+ {
+ return $this->item_level;
+ }
+
+ /**
+ * @param mixed $item_level
+ * @return Item
+ */
+ public function setLevel($item_level)
+ {
+ $this->item_level = $item_level;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCreated()
+ {
+ return $this->created;
+ }
+
+ /**
+ * @param mixed $created
+ * @return Item
+ */
+ public function setCreated($created)
+ {
+ $this->created = $created;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getEdited()
+ {
+ return $this->edited;
+ }
+
+ /**
+ * @param mixed $edited
+ * @return Item
+ */
+ public function setEdited($edited)
+ {
+ $this->edited = $edited;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getExpires()
+ {
+ return $this->expires;
+ }
+
+ /**
+ * @param mixed $expires
+ * @return Item
+ */
+ public function setExpires($expires)
+ {
+ $this->expires = $expires;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCommented()
+ {
+ return $this->commented;
+ }
+
+ /**
+ * @param mixed $commented
+ * @return Item
+ */
+ public function setCommented($commented)
+ {
+ $this->commented = $commented;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getReceived()
+ {
+ return $this->received;
+ }
+
+ /**
+ * @param mixed $received
+ * @return Item
+ */
+ public function setReceived($received)
+ {
+ $this->received = $received;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getChanged()
+ {
+ return $this->changed;
+ }
+
+ /**
+ * @param mixed $changed
+ * @return Item
+ */
+ public function setChanged($changed)
+ {
+ $this->changed = $changed;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCommentsClosed()
+ {
+ return $this->comments_closed;
+ }
+
+ /**
+ * @param mixed $comments_closed
+ * @return Item
+ */
+ public function setCommentsClosed($comments_closed)
+ {
+ $this->comments_closed = $comments_closed;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getOwnerXchan()
+ {
+ return $this->owner_xchan;
+ }
+
+ /**
+ * @param mixed $owner_xchan
+ * @return Item
+ */
+ public function setOwnerXchan($owner_xchan)
+ {
+ $this->owner_xchan = $owner_xchan;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAuthorXchan()
+ {
+ return $this->author_xchan;
+ }
+
+ /**
+ * @param mixed $author_xchan
+ * @return Item
+ */
+ public function setAuthorXchan($author_xchan)
+ {
+ $this->author_xchan = $author_xchan;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSourceXchan()
+ {
+ return $this->source_xchan;
+ }
+
+ /**
+ * @param mixed $source_xchan
+ * @return Item
+ */
+ public function setSourceXchan($source_xchan)
+ {
+ $this->source_xchan = $source_xchan;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMimetype()
+ {
+ return $this->mimetype;
+ }
+
+ /**
+ * @param mixed $mimetype
+ * @return Item
+ */
+ public function setMimetype($mimetype)
+ {
+ $this->mimetype = $mimetype;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * @param mixed $title
+ * @return Item
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSummary()
+ {
+ return $this->summary;
+ }
+
+ /**
+ * @param mixed $summary
+ * @return Item
+ */
+ public function setSummary($summary)
+ {
+ $this->summary = $summary;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getBody()
+ {
+ return $this->body;
+ }
+
+ /**
+ * @param mixed $body
+ * @return Item
+ */
+ public function setBody($body)
+ {
+ $this->body = $body;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getHtml()
+ {
+ return $this->html;
+ }
+
+ /**
+ * @param mixed $html
+ * @return Item
+ */
+ public function setHtml($html)
+ {
+ $this->html = $html;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getApp()
+ {
+ return $this->app;
+ }
+
+ /**
+ * @param mixed $app
+ * @return Item
+ */
+ public function setApp($app)
+ {
+ $this->app = $app;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLang()
+ {
+ return $this->lang;
+ }
+
+ /**
+ * @param mixed $lang
+ * @return Item
+ */
+ public function setLang($lang)
+ {
+ $this->lang = $lang;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRevision()
+ {
+ return $this->revision;
+ }
+
+ /**
+ * @param mixed $revision
+ * @return Item
+ */
+ public function setRevision($revision)
+ {
+ $this->revision = $revision;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getVerb()
+ {
+ return $this->verb;
+ }
+
+ /**
+ * @param mixed $verb
+ * @return Item
+ */
+ public function setVerb($verb)
+ {
+ $this->verb = $verb;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getObjType()
+ {
+ return $this->obj_type;
+ }
+
+ /**
+ * @param mixed $obj_type
+ * @return Item
+ */
+ public function setObjType($obj_type)
+ {
+ $this->obj_type = $obj_type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getObj()
+ {
+ return $this->obj;
+ }
+
+ /**
+ * @param mixed $obj
+ * @return Item
+ */
+ public function setObj($obj)
+ {
+ $this->obj = $obj;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTgtType()
+ {
+ return $this->tgt_type;
+ }
+
+ /**
+ * @param mixed $tgt_type
+ * @return Item
+ */
+ public function setTgtType($tgt_type)
+ {
+ $this->tgt_type = $tgt_type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTarget()
+ {
+ return $this->target;
+ }
+
+ /**
+ * @param mixed $target
+ * @return Item
+ */
+ public function setTarget($target)
+ {
+ $this->target = $target;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLayoutMid()
+ {
+ return $this->layout_mid;
+ }
+
+ /**
+ * @param mixed $layout_mid
+ * @return Item
+ */
+ public function setLayoutMid($layout_mid)
+ {
+ $this->layout_mid = $layout_mid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPostopts()
+ {
+ return $this->postopts;
+ }
+
+ /**
+ * @param mixed $postopts
+ * @return Item
+ */
+ public function setPostopts($postopts)
+ {
+ $this->postopts = $postopts;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRoute()
+ {
+ return $this->route;
+ }
+
+ /**
+ * @param mixed $route
+ * @return Item
+ */
+ public function setRoute($route)
+ {
+ $this->route = $route;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLlink()
+ {
+ return $this->llink;
+ }
+
+ /**
+ * @param mixed $llink
+ * @return Item
+ */
+ public function setLlink($llink)
+ {
+ $this->llink = $llink;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPlink()
+ {
+ return $this->plink;
+ }
+
+ /**
+ * @param mixed $plink
+ * @return Item
+ */
+ public function setPlink($plink)
+ {
+ $this->plink = $plink;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getResourceId()
+ {
+ return $this->resource_id;
+ }
+
+ /**
+ * @param mixed $resource_id
+ * @return Item
+ */
+ public function setResourceId($resource_id)
+ {
+ $this->resource_id = $resource_id;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getResourceType()
+ {
+ return $this->resource_type;
+ }
+
+ /**
+ * @param mixed $resource_type
+ * @return Item
+ */
+ public function setResourceType($resource_type)
+ {
+ $this->resource_type = $resource_type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAttach()
+ {
+ return $this->attach;
+ }
+
+ /**
+ * @param mixed $attach
+ * @return Item
+ */
+ public function setAttach($attach)
+ {
+ $this->attach = $attach;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getSig()
+ {
+ return $this->sig;
+ }
+
+ /**
+ * @param mixed $sig
+ * @return Item
+ */
+ public function setSig($sig)
+ {
+ $this->sig = $sig;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLocation()
+ {
+ return $this->location;
+ }
+
+ /**
+ * @param mixed $location
+ * @return Item
+ */
+ public function setLocation($location)
+ {
+ $this->location = $location;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCoord()
+ {
+ return $this->coord;
+ }
+
+ /**
+ * @param mixed $coord
+ * @return Item
+ */
+ public function setCoord($coord)
+ {
+ $this->coord = $coord;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPublicPolicy()
+ {
+ return $this->public_policy;
+ }
+
+ /**
+ * @param mixed $public_policy
+ * @return Item
+ */
+ public function setPublicPolicy($public_policy)
+ {
+ $this->public_policy = $public_policy;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCommentPolicy()
+ {
+ return $this->comment_policy;
+ }
+
+ /**
+ * @param mixed $comment_policy
+ * @return Item
+ */
+ public function setCommentPolicy($comment_policy)
+ {
+ $this->comment_policy = $comment_policy;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAllowCid()
+ {
+ return $this->allow_cid;
+ }
+
+ /**
+ * @param mixed $allow_cid
+ * @return Item
+ */
+ public function setAllowCid($allow_cid)
+ {
+ $this->allow_cid = $allow_cid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAllowGid()
+ {
+ return $this->allow_gid;
+ }
+
+ /**
+ * @param mixed $allow_gid
+ * @return Item
+ */
+ public function setAllowGid($allow_gid)
+ {
+ $this->allow_gid = $allow_gid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDenyCid()
+ {
+ return $this->deny_cid;
+ }
+
+ /**
+ * @param mixed $deny_cid
+ * @return Item
+ */
+ public function setDenyCid($deny_cid)
+ {
+ $this->deny_cid = $deny_cid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDenyGid()
+ {
+ return $this->deny_gid;
+ }
+
+ /**
+ * @param mixed $deny_gid
+ * @return Item
+ */
+ public function setDenyGid($deny_gid)
+ {
+ $this->deny_gid = $deny_gid;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRestrict()
+ {
+ return $this->item_restrict;
+ }
+
+ /**
+ * @param mixed $item_restrict
+ * @return Item
+ */
+ public function setRestrict($item_restrict)
+ {
+ $this->item_restrict = $item_restrict;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getFlags()
+ {
+ return $this->item_flags;
+ }
+
+ /**
+ * @param mixed $item_flags
+ * @return Item
+ */
+ public function setFlags($item_flags)
+ {
+ $this->item_flags = $item_flags;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPrivate()
+ {
+ return $this->item_private;
+ }
+
+ /**
+ * @param mixed $item_private
+ * @return Item
+ */
+ public function setPrivate($item_private)
+ {
+ $this->item_private = $item_private;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getOrigin()
+ {
+ return $this->item_origin;
+ }
+
+ /**
+ * @param mixed $item_origin
+ * @return Item
+ */
+ public function setOrigin($item_origin)
+ {
+ $this->item_origin = $item_origin;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUnseen()
+ {
+ return $this->item_unseen;
+ }
+
+ /**
+ * @param mixed $item_unseen
+ * @return Item
+ */
+ public function setUnseen($item_unseen)
+ {
+ $this->item_unseen = $item_unseen;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getStarred()
+ {
+ return $this->item_starred;
+ }
+
+ /**
+ * @param mixed $item_starred
+ * @return Item
+ */
+ public function setStarred($item_starred)
+ {
+ $this->item_starred = $item_starred;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUplink()
+ {
+ return $this->item_uplink;
+ }
+
+ /**
+ * @param mixed $item_uplink
+ * @return Item
+ */
+ public function setUplink($item_uplink)
+ {
+ $this->item_uplink = $item_uplink;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getConsensus()
+ {
+ return $this->item_consensus;
+ }
+
+ /**
+ * @param mixed $item_consensus
+ * @return Item
+ */
+ public function setConsensus($item_consensus)
+ {
+ $this->item_consensus = $item_consensus;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getWall()
+ {
+ return $this->item_wall;
+ }
+
+ /**
+ * @param mixed $item_wall
+ * @return Item
+ */
+ public function setWall($item_wall)
+ {
+ $this->item_wall = $item_wall;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getThreadTop()
+ {
+ return $this->item_thread_top;
+ }
+
+ /**
+ * @param mixed $item_thread_top
+ * @return Item
+ */
+ public function setThreadTop($item_thread_top)
+ {
+ $this->item_thread_top = $item_thread_top;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getNotshown()
+ {
+ return $this->item_notshown;
+ }
+
+ /**
+ * @param mixed $item_notshown
+ * @return Item
+ */
+ public function setNotshown($item_notshown)
+ {
+ $this->item_notshown = $item_notshown;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getNsfw()
+ {
+ return $this->item_nsfw;
+ }
+
+ /**
+ * @param mixed $item_nsfw
+ * @return Item
+ */
+ public function setNsfw($item_nsfw)
+ {
+ $this->item_nsfw = $item_nsfw;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRelay()
+ {
+ return $this->item_relay;
+ }
+
+ /**
+ * @param mixed $item_relay
+ * @return Item
+ */
+ public function setRelay($item_relay)
+ {
+ $this->item_relay = $item_relay;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMentionsme()
+ {
+ return $this->item_mentionsme;
+ }
+
+ /**
+ * @param mixed $item_mentionsme
+ * @return Item
+ */
+ public function setMentionsme($item_mentionsme)
+ {
+ $this->item_mentionsme = $item_mentionsme;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getNocomment()
+ {
+ return $this->item_nocomment;
+ }
+
+ /**
+ * @param mixed $item_nocomment
+ * @return Item
+ */
+ public function setNocomment($item_nocomment)
+ {
+ $this->item_nocomment = $item_nocomment;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getObscured()
+ {
+ return $this->item_obscured;
+ }
+
+ /**
+ * @param mixed $item_obscured
+ * @return Item
+ */
+ public function setObscured($item_obscured)
+ {
+ $this->item_obscured = $item_obscured;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getVerified()
+ {
+ return $this->item_verified;
+ }
+
+ /**
+ * @param mixed $item_verified
+ * @return Item
+ */
+ public function setVerified($item_verified)
+ {
+ $this->item_verified = $item_verified;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRetained()
+ {
+ return $this->item_retained;
+ }
+
+ /**
+ * @param mixed $item_retained
+ * @return Item
+ */
+ public function setRetained($item_retained)
+ {
+ $this->item_retained = $item_retained;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getRss()
+ {
+ return $this->item_rss;
+ }
+
+ /**
+ * @param mixed $item_rss
+ * @return Item
+ */
+ public function setRss($item_rss)
+ {
+ $this->item_rss = $item_rss;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDeleted()
+ {
+ return $this->item_deleted;
+ }
+
+ /**
+ * @param mixed $item_deleted
+ * @return Item
+ */
+ public function setDeleted($item_deleted)
+ {
+ $this->item_deleted = $item_deleted;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getType()
+ {
+ return $this->item_type;
+ }
+
+ /**
+ * @param mixed $item_type
+ * @return Item
+ */
+ public function setType($item_type)
+ {
+ $this->item_type = $item_type;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getHidden()
+ {
+ return $this->item_hidden;
+ }
+
+ /**
+ * @param mixed $item_hidden
+ * @return Item
+ */
+ public function setHidden($item_hidden)
+ {
+ $this->item_hidden = $item_hidden;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUnpublished()
+ {
+ return $this->item_unpublished;
+ }
+
+ /**
+ * @param mixed $item_unpublished
+ * @return Item
+ */
+ public function setUnpublished($item_unpublished)
+ {
+ $this->item_unpublished = $item_unpublished;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDelayed()
+ {
+ return $this->item_delayed;
+ }
+
+ /**
+ * @param mixed $item_delayed
+ * @return Item
+ */
+ public function setDelayed($item_delayed)
+ {
+ $this->item_delayed = $item_delayed;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getPendingRemove()
+ {
+ return $this->item_pending_remove;
+ }
+
+ /**
+ * @param mixed $item_pending_remove
+ * @return Item
+ */
+ public function setPendingRemove($item_pending_remove)
+ {
+ $this->item_pending_remove = $item_pending_remove;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getBlocked()
+ {
+ return $this->item_blocked;
+ }
+
+ /**
+ * @param mixed $item_blocked
+ * @return Item
+ */
+ public function setBlocked($item_blocked)
+ {
+ $this->item_blocked = $item_blocked;
+ return $this;
+ }
+
+
+
+}
diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php
index 90d7af8e8..1f7d4be0c 100644
--- a/Zotlabs/Lib/Activity.php
+++ b/Zotlabs/Lib/Activity.php
@@ -8,6 +8,7 @@ use Zotlabs\Access\PermissionRoles;
use Zotlabs\Access\Permissions;
use Zotlabs\Daemon\Master;
use Zotlabs\Web\HTTPSig;
+use Zotlabs\Entity\Item;
require_once('include/event.php');
require_once('include/html2plain.php');
@@ -503,15 +504,21 @@ class Activity {
$ret['diaspora:guid'] = $i['uuid'];
$images = [];
+ $audios = [];
+ $videos = [];
+
$has_images = preg_match_all('/\[[zi]mg(.*?)](.*?)\[/ism', $i['body'], $images, PREG_SET_ORDER);
+ $has_audios = preg_match_all('/\[zaudio](.*?)\[/ism', $i['body'], $audios, PREG_SET_ORDER);
+ $has_videos = preg_match_all('/\[zvideo](.*?)\[/ism', $i['body'], $videos, PREG_SET_ORDER);
// provide ocap access token for private media.
// set this for descendants even if the current item is not private
// because it may have been relayed from a private item.
$token = IConfig::Get($i, 'ocap', 'relay');
+ $matches_processed = [];
+
if ($token && $has_images) {
- $matches_processed = [];
for ($n = 0; $n < count($images); $n++) {
$match = $images[$n];
if (str_starts_with($match[1], '=http') && str_contains($match[1], z_root() . '/photo/') && !in_array($match[1], $matches_processed)) {
@@ -526,6 +533,28 @@ class Activity {
}
}
+ if ($token && $has_audios) {
+ for ($n = 0; $n < count($audios); $n++) {
+ $match = $audios[$n];
+ if (str_contains($match[1], z_root() . '/attach/') && !in_array($match[1], $matches_processed)) {
+ $i['body'] = str_replace($match[1], $match[1] . '?token=' . $token, $i['body']);
+ $audios[$n][1] = $match[1] . '?token=' . $token;
+ $matches_processed[] = $match[1];
+ }
+ }
+ }
+
+ if ($token && $has_videos) {
+ for ($n = 0; $n < count($videos); $n++) {
+ $match = $videos[$n];
+ if (str_contains($match[1], z_root() . '/attach/') && !in_array($match[1], $matches_processed)) {
+ $i['body'] = str_replace($match[1], $match[1] . '?token=' . $token, $i['body']);
+ $videos[$n][1] = $match[1] . '?token=' . $token;
+ $matches_processed[] = $match[1];
+ }
+ }
+ }
+
if ($i['title'])
$ret['name'] = unescape_tags($i['title']);
@@ -570,6 +599,26 @@ class Activity {
if ($i['mid'] !== $i['parent_mid']) {
$ret['inReplyTo'] = ((strpos($i['thr_parent'], 'http') === 0) ? $i['thr_parent'] : z_root() . '/item/' . urlencode($i['thr_parent']));
+
+ $cnv = IConfig::Get($i['parent'], 'activitypub', 'context');
+ if (!$cnv) {
+ $cnv = $i['parent_mid'];
+ }
+ }
+
+ if (empty($cnv)) {
+ $cnv = IConfig::Get($i, 'activitypub', 'context');
+ if (!$cnv) {
+ $cnv = $i['parent_mid'];
+ }
+ }
+
+ if (!empty($cnv)) {
+ if (is_string($cnv) && str_starts_with($cnv, z_root())) {
+ $cnv = str_replace(['/item/', '/activity/'], ['/conversation/', '/conversation/'], $cnv);
+ $ret['contextHistory'] = $cnv;
+ }
+ $ret['context'] = $cnv;
}
if ($i['mimetype'] === 'text/bbcode') {
@@ -589,6 +638,12 @@ class Activity {
$t = self::encode_taxonomy($i);
if ($t) {
+ foreach($t as $tag) {
+ if (strcasecmp($tag['name'], '#nsfw') === 0 || strcasecmp($tag['name'], '#sensitive') === 0) {
+ $ret['sensitive'] = true;
+ }
+ }
+
$ret['tag'] = $t;
}
@@ -596,7 +651,20 @@ class Activity {
if ($a) {
$ret['attachment'] = $a;
}
-
+/*
+ if ($i['target']) {
+ if (is_string($i['target'])) {
+ $tmp = json_decode($i['target'], true);
+ if ($tmp !== null) {
+ $i['target'] = $tmp;
+ }
+ }
+ $tgt = self::encode_object($i['target']);
+ if ($tgt) {
+ $ret['target'] = $tgt;
+ }
+ }
+*/
if (intval($i['item_private']) === 0) {
$ret['to'] = [ACTIVITY_PUBLIC_INBOX];
}
@@ -694,6 +762,8 @@ class Activity {
$ret = [];
+ $token = IConfig::Get($item, 'ocap', 'relay');
+
if (!$iconfig && array_key_exists('attach', $item)) {
$atts = ((is_array($item['attach'])) ? $item['attach'] : json_decode($item['attach'], true));
if ($atts) {
@@ -702,11 +772,17 @@ class Activity {
continue;
}
- if (isset($att['type']) && strpos($att['type'], 'image')) {
- $ret[] = ['type' => 'Image', 'mediaType' => $att['type'], 'name' => $att['title'], 'url' => $att['href']];
+ if (str_starts_with($att['type'], 'image')) {
+ $ret[] = ['type' => 'Image', 'mediaType' => $att['type'], 'name' => $att['title'], 'url' => $att['href'] . (($token) ? '?token=' . $token : '')];
+ }
+ elseif (str_starts_with($att['type'], 'audio')) {
+ $ret[] = ['type' => 'Audio', 'mediaType' => $att['type'], 'name' => $att['title'], 'url' => $att['href'] . (($token) ? '?token=' . $token : '')];
+ }
+ elseif (str_starts_with($att['type'], 'video')) {
+ $ret[] = ['type' => 'Video', 'mediaType' => $att['type'], 'name' => $att['title'], 'url' => $att['href'] . (($token) ? '?token=' . $token : '')];
}
else {
- $ret[] = ['type' => 'Link', 'mediaType' => $att['type'], 'name' => $att['title'], 'href' => $att['href']];
+ $ret[] = ['type' => 'Link', 'mediaType' => $att['type'], 'name' => $att['title'], 'href' => $att['href'] . (($token) ? '?token=' . $token : '')];
}
}
}
@@ -727,7 +803,7 @@ class Activity {
$ret = [];
- if (isset($item['attachment'])) {
+ if (isset($item['attachment']) && is_array($item['attachment'])) {
$ptr = $item['attachment'];
if (!array_key_exists(0, $ptr)) {
$ptr = [$ptr];
@@ -807,12 +883,32 @@ class Activity {
$ret['type'] = self::activity_mapper($i['verb']);
if ((isset($i['item_deleted']) && intval($i['item_deleted'])) && !$recurse) {
- $is_response = false;
- if (ActivityStreams::is_response_activity($ret['type'])) {
+ if ($i['verb'] === 'Add' && str_contains($i['tgt_type'], 'Collection')) {
+ $ret['id'] = str_replace('/item/', '/activity/', $i['mid']) . '#Remove';
+ $ret['type'] = 'Remove';
+ if (is_string($i['obj'])) {
+ $obj = json_decode($i['obj'], true);
+ }
+ elseif(is_array($i['obj'])) {
+ $obj = $i['obj'];
+ }
+ if (isset($obj['id'])) {
+ $ret['object'] = $obj['id'];
+ }
+ else {
+ $ret['object'] = str_replace('/item/', '/activity/', $i['mid']);
+ }
+ $ret['target'] = is_array($i['target']) ? $i['target'] : json_decode($i['target'], true);
+
+ return $ret;
+ }
+
+ $is_response = ActivityStreams::is_response_activity($ret['type']);
+
+ if ($is_response) {
$ret['type'] = 'Undo';
$fragment = 'undo';
- $is_response = true;
}
else {
$ret['type'] = 'Delete';
@@ -935,9 +1031,29 @@ class Activity {
// inReplyTo needs to be set in the activity for followup actions (Like, Dislike, Announce, etc.),
// but *not* for comments and RSVPs, where it should only be present in the object
- if (!in_array($ret['type'], ['Create', 'Update', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject'])) {
+ if (!in_array($ret['type'], ['Create', 'Update', 'Add', 'Remove', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject'])) {
$ret['inReplyTo'] = ((strpos($i['thr_parent'], 'http') === 0) ? $i['thr_parent'] : z_root() . '/item/' . urlencode($i['thr_parent']));
}
+
+ $cnv = IConfig::Get($i['parent'], 'activitypub', 'context');
+ if (!$cnv) {
+ $cnv = $i['parent_mid'];
+ }
+ }
+
+ if (empty($cnv)) {
+ $cnv = IConfig::Get($i, 'activitypub', 'context');
+ if (!$cnv) {
+ $cnv = $i['parent_mid'];
+ }
+ }
+
+ if (!empty($cnv)) {
+ if (is_string($cnv) && str_starts_with($cnv, z_root())) {
+ $cnv = str_replace(['/item/', '/activity/'], ['/conversation/', '/conversation/'], $cnv);
+ $ret['contextHistory'] = $cnv;
+ }
+ $ret['context'] = $cnv;
}
$actor = self::encode_person($i['author'], false);
@@ -1010,6 +1126,7 @@ class Activity {
call_hooks('encode_activity', $hookinfo);
return $hookinfo['encoded'];
+
}
// Returns an array of URLS for any mention tags found in the item array $i.
@@ -1253,81 +1370,6 @@ class Activity {
// return false;
}
- static function activity_decode_mapper($verb) {
-
- $acts = [
- 'http://activitystrea.ms/schema/1.0/post' => 'Create',
- // 'http://activitystrea.ms/schema/1.0/share' => 'Announce',
- 'http://activitystrea.ms/schema/1.0/update' => 'Update',
- 'http://activitystrea.ms/schema/1.0/like' => 'Like',
- 'http://activitystrea.ms/schema/1.0/favorite' => 'Like',
- 'http://purl.org/zot/activity/dislike' => 'Dislike',
- // 'http://activitystrea.ms/schema/1.0/tag' => 'Add',
- 'http://activitystrea.ms/schema/1.0/follow' => 'Follow',
- 'http://activitystrea.ms/schema/1.0/unfollow' => 'Unfollow',
- 'http://activitystrea.ms/schema/1.0/stop-following' => 'Unfollow',
- 'http://purl.org/zot/activity/attendyes' => 'Accept',
- 'http://purl.org/zot/activity/attendno' => 'Reject',
- 'http://purl.org/zot/activity/attendmaybe' => 'TentativeAccept',
- 'Announce' => 'Announce',
- 'Invite' => 'Invite',
- 'Delete' => 'Delete',
- 'Undo' => 'Undo',
- 'Add' => 'Add',
- 'Remove' => 'Remove'
- ];
-
- call_hooks('activity_decode_mapper', $acts);
-
- foreach ($acts as $k => $v) {
- if ($verb === $v) {
- return $k;
- }
- }
-
- logger('Unmapped activity: ' . $verb);
- return 'Create';
-
- }
-
- static function activity_obj_decode_mapper($obj) {
-
- $objs = [
- 'http://activitystrea.ms/schema/1.0/note' => 'Note',
- 'http://activitystrea.ms/schema/1.0/note' => 'Article',
- 'http://activitystrea.ms/schema/1.0/comment' => 'Note',
- 'http://activitystrea.ms/schema/1.0/person' => 'Person',
- 'http://purl.org/zot/activity/profile' => 'Profile',
- 'http://activitystrea.ms/schema/1.0/photo' => 'Image',
- 'http://activitystrea.ms/schema/1.0/profile-photo' => 'Icon',
- 'http://activitystrea.ms/schema/1.0/event' => 'Event',
- 'http://purl.org/zot/activity/location' => 'Place',
- 'http://purl.org/zot/activity/chessgame' => 'Game',
- 'http://purl.org/zot/activity/tagterm' => 'zot:Tag',
- 'http://purl.org/zot/activity/thing' => 'Object',
- 'http://purl.org/zot/activity/file' => 'zot:File',
- 'http://purl.org/zot/activity/mood' => 'zot:Mood',
- 'Invite' => 'Invite',
- 'Question' => 'Question',
- 'Document' => 'Document',
- 'Audio' => 'Audio',
- 'Video' => 'Video',
- 'Delete' => 'Delete',
- 'Undo' => 'Undo'
- ];
-
- call_hooks('activity_obj_decode_mapper', $objs);
-
- foreach ($objs as $k => $v) {
- if ($obj === $v) {
- return $k;
- }
- }
-
- logger('Unmapped activity object: ' . $obj);
- return 'Note';
- }
-
static function activity_obj_mapper($obj) {
$objs = [
@@ -1606,9 +1648,9 @@ class Activity {
}
if (in_array($observer, [$r[0]['author_xchan'], $r[0]['owner_xchan']])) {
- drop_item($r[0]['id'], false, (($r[0]['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL));
+ drop_item($r[0]['id'], (($r[0]['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL), observer_hash: $observer);
} elseif (in_array($act->actor['id'], [$r[0]['author_xchan'], $r[0]['owner_xchan']])) {
- drop_item($r[0]['id'], false, (($r[0]['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL));
+ drop_item($r[0]['id'], (($r[0]['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL));
}
sync_an_item($channel['channel_id'], $r[0]['id']);
@@ -1676,9 +1718,9 @@ class Activity {
return;
}
- $name = $person_obj['name'] ?? '';
+ $name = ((isset($person_obj['name'])) ? escape_tags($person_obj['name']) : '');
if (!$name) {
- $name = $person_obj['preferredUsername'] ?? '';
+ $name = ((isset($person_obj['preferredUsername'])) ? escape_tags($person_obj['preferredUsername']) : '');
}
if (!$name) {
$name = t('Unknown');
@@ -1687,13 +1729,11 @@ class Activity {
$webfinger_addr = ((isset($person_obj['webfinger'])) ? str_replace('acct:', '', $person_obj['webfinger']) : '');
$hostname = '';
$baseurl = '';
- $site_url = '';
$m = parse_url($url);
if ($m) {
- $hostname = $m['host'];
- $baseurl = $m['scheme'] . '://' . $m['host'] . ((isset($m['port'])) ? ':' . $m['port'] : '');
- $site_url = $m['scheme'] . '://' . $m['host'];
+ $hostname = unparse_url($m, ['host']);
+ $baseurl = unparse_url($m, ['scheme', 'host', 'port']);
}
if (!$webfinger_addr && !empty($person_obj['preferredUsername']) && $hostname) {
@@ -1795,7 +1835,7 @@ class Activity {
q("UPDATE site SET site_update = '%s', site_dead = 0 WHERE site_url = '%s'",
dbesc(datetime_convert()),
- dbesc($site_url)
+ dbesc($baseurl)
);
// update existing xchan record
@@ -1906,129 +1946,173 @@ class Activity {
}
- static function update_poll($item_id, $post) {
+ static function update_poll($pollItem, $response) {
+
+ logger('updating poll');
- $multi = false;
- $mid = $post['mid'];
- $content = $post['title'];
+ $multi = false;
- if (!$item_id) {
+ if (!$pollItem) {
+ logger('no item');
return false;
}
- if (intval($post['item_blocked']) === ITEM_MODERATED) {
+ if (intval($pollItem['item_blocked']) === ITEM_MODERATED) {
+ logger('item blocked');
return false;
}
+ $channel = channelx_by_n($pollItem['uid']);
+ if (!$channel) {
+ logger('no channel');
+ return false;
+ }
+
+ $relatedItem = find_related($pollItem);
+
+ $ids = (($relatedItem) ? $pollItem['id'] . ',' . $relatedItem['id'] : $pollItem['id']);
+
dbq("START TRANSACTION");
+ // Using the provided items as is will produce desastrous race conditions
+ // in case of multiple choice polls - hence:
- $item = q("SELECT * FROM item WHERE id = %d FOR UPDATE",
- intval($item_id)
- );
+ $items = dbq("SELECT * FROM item WHERE id in ($ids) FOR UPDATE");
- if (!$item) {
- dbq("COMMIT");
- return false;
+ foreach ($items as $item) {
+ if ($item['id'] === $pollItem['id']) {
+ $pollItem = $item;
+ }
+ if (!empty($relatedItem['id']) && $item['id'] === $relatedItem['id']) {
+ $relatedItem = $item;
+ }
}
- $item = $item[0];
+ $o = json_decode($pollItem['obj'], true);
- $o = json_decode($item['obj'], true);
if ($o && array_key_exists('anyOf', $o)) {
$multi = true;
}
- $r = q("select mid, title from item where parent_mid = '%s' and author_xchan = '%s'",
- dbesc($item['mid']),
- dbesc($post['author_xchan'])
- );
+ if ($response) {
+ $mid = $response['mid'];
+ $content = trim($response['title']);
- // prevent any duplicate votes by same author for oneOf and duplicate votes with same author and same answer for anyOf
+ $r = q("select mid, title from item where parent_mid = '%s' and author_xchan = '%s' and mid != parent_mid ",
+ dbesc($pollItem['mid']),
+ dbesc($response['author_xchan'])
+ );
- if ($r) {
- if ($multi) {
- foreach ($r as $rv) {
- if ($rv['title'] === $content && $rv['mid'] !== $mid) {
- return false;
+ // prevent any duplicate votes by same author for oneOf and duplicate votes with same author and same answer for anyOf
+
+ if ($r) {
+ if ($multi) {
+ foreach ($r as $rv) {
+ if (trim($rv['title']) === $content && $rv['mid'] !== $mid) {
+ logger('already voted multi');
+ return false;
+ }
}
- }
- }
- else {
- foreach ($r as $rv) {
- if ($rv['mid'] !== $mid) {
- return false;
+ } else {
+ foreach ($r as $rv) {
+ if ($rv['mid'] !== $mid && $content) {
+ logger('already voted');
+ return false;
+ }
}
}
}
- }
- $answer_found = false;
- $found = false;
- if ($multi) {
- for ($c = 0; $c < count($o['anyOf']); $c++) {
- if ($o['anyOf'][$c]['name'] === $content) {
- $answer_found = true;
- if (is_array($o['anyOf'][$c]['replies'])) {
- foreach ($o['anyOf'][$c]['replies'] as $reply) {
- if (is_array($reply) && array_key_exists('id', $reply) && $reply['id'] === $mid) {
- $found = true;
+ $answer_found = false;
+ $foundPrevious = false;
+ if ($multi) {
+ for ($c = 0; $c < count($o['anyOf']); $c++) {
+ if (trim($o['anyOf'][$c]['name']) === $content) {
+ $answer_found = true;
+
+
+ if (is_array($o['anyOf'][$c]['replies'])) {
+ foreach ($o['anyOf'][$c]['replies'] as $reply) {
+ if (is_array($reply) && array_key_exists('id', $reply) && $reply['id'] === $mid) {
+ $foundPrevious = true;
+ }
}
}
- }
- if (!$found) {
- $o['anyOf'][$c]['replies']['totalItems']++;
- $o['anyOf'][$c]['replies']['items'][] = ['id' => $mid, 'type' => 'Note'];
+ if (!$foundPrevious) {
+ $o['anyOf'][$c]['replies']['totalItems']++;
+ $o['anyOf'][$c]['replies']['items'][] = ['id' => $mid, 'type' => 'Note'];
+ }
}
}
- }
- }
- else {
- for ($c = 0; $c < count($o['oneOf']); $c++) {
- if ($o['oneOf'][$c]['name'] === $content) {
- $answer_found = true;
- if (is_array($o['oneOf'][$c]['replies'])) {
- foreach ($o['oneOf'][$c]['replies'] as $reply) {
- if (is_array($reply) && array_key_exists('id', $reply) && $reply['id'] === $mid) {
- $found = true;
+ } else {
+ for ($c = 0; $c < count($o['oneOf']); $c++) {
+ if (trim($o['oneOf'][$c]['name']) === $content) {
+ $answer_found = true;
+ if (is_array($o['oneOf'][$c]['replies'])) {
+ foreach ($o['oneOf'][$c]['replies'] as $reply) {
+ if (is_array($reply) && array_key_exists('id', $reply) && $reply['id'] === $mid) {
+ $foundPrevious = true;
+ }
}
}
- }
- if (!$found) {
- $o['oneOf'][$c]['replies']['totalItems']++;
- $o['oneOf'][$c]['replies']['items'][] = ['id' => $mid, 'type' => 'Note'];
+ if (!$foundPrevious) {
+ $o['oneOf'][$c]['replies']['totalItems']++;
+ $o['oneOf'][$c]['replies']['items'][] = ['id' => $mid, 'type' => 'Note'];
+ }
}
}
}
}
- logger('updated_poll: ' . print_r($o, true), LOGGER_DATA);
- if ($answer_found && !$found) {
- $u = q("update item set obj = '%s', edited = '%s' where id = %d",
- dbesc(json_encode($o)),
- dbesc(datetime_convert()),
- intval($item['id'])
- );
+ if ($pollItem['comments_closed'] > NULL_DATE) {
+ if ($pollItem['comments_closed'] > datetime_convert()) {
+ $o['closed'] = datetime_convert('UTC', 'UTC', $pollItem['comments_closed'], ATOM_TIME);
+ // set this to force an update
+ $answer_found = true;
+ }
+ }
- if ($u) {
- dbq("COMMIT");
+ // A change was made locally
+ if ($response && $answer_found && !$foundPrevious) {
- if ($multi) {
- // wait some seconds for possible multiple answers to be processed
- // before calling the notifier
- sleep(3);
- }
+ // update this copy
+ $i = [$pollItem];
+ xchan_query($i, true);
+ $i = fetch_post_tags($i);
+ $i[0]['obj'] = $o;
- Master::Summon(['Notifier', 'wall-new', $item['id']]);
- return true;
- }
+ $edited = datetime_convert();
+ $i[0]['edited'] = $edited;
- dbq("ROLLBACK");
+ // create the new object
+ $newObj = self::build_packet(self::encode_activity($i[0]), $channel, true);
+ // and immediately update the db
+ $u = q("UPDATE item
+ SET obj = (
+ CASE
+ WHEN item.id = %d THEN '%s'
+ WHEN item.id = %d THEN '%s'
+ END
+ ),
+ edited = '%s'
+ WHERE id IN ($ids)",
+ intval($pollItem['id']),
+ dbesc(json_encode($o)),
+ intval($relatedItem['id']),
+ dbesc($newObj),
+ dbesc($edited)
+ );
+
+ dbq("COMMIT");
+
+ Master::Summon(['Notifier', 'edit_post', $pollItem['id'], $response['mid']]);
+ if (!empty($relatedItem['id'])) {
+ Master::Summon(['Notifier', 'edit_post', $relatedItem['id'], $response['mid']]);
+ }
}
- dbq("COMMIT");
- return false;
+ return true;
}
static function decode_note($act) {
@@ -2225,6 +2309,8 @@ class Activity {
if ($s['mid'] === $s['parent_mid']) {
$s['item_thread_top'] = 1;
+ $s['item_nocomment'] = 0;
+ $s['comments_closed'] = NULL_DATE;
// it is a parent node - decode the comment policy info if present
if ($act->objprop('commentPolicy')) {
@@ -2232,7 +2318,7 @@ class Activity {
if ($until !== false) {
$s['comments_closed'] = datetime_convert('UTC', 'UTC', substr($act->obj['commentPolicy'], $until + 6));
if ($s['comments_closed'] < datetime_convert()) {
- $s['nocomment'] = true;
+ $s['item_nocomment'] = 1;
}
}
@@ -2284,6 +2370,16 @@ class Activity {
$s['obj']['actor'] = $s['obj']['actor']['id'];
}
+ if (is_array($act->tgt) && $act->tgt) {
+ if (array_key_exists('type', $act->tgt)) {
+ $s['tgt_type'] = self::activity_obj_mapper($act->tgt['type']);
+ }
+ // We shouldn't need to store collection contents which could be large. We will often only require the meta-data
+ if (isset($s['tgt_type']) && str_contains($s['tgt_type'], 'Collection')) {
+ $s['target'] = ['id' => $act->tgt['id'], 'type' => $s['tgt_type'], 'attributedTo' => $act->tgt['attributedTo'] ?? $act->tgt['actor']];
+ }
+ }
+
$generator = $act->get_property_obj('generator');
if ((!$generator) && (!$response_activity)) {
$generator = $act->get_property_obj('generator', $act->obj);
@@ -2589,6 +2685,7 @@ class Activity {
}
}
+
if (!$ap_rawmsg && array_key_exists('signed', $raw_arr)) {
// zap
$ap_rawmsg = json_encode($act->data, JSON_UNESCAPED_SLASHES);
@@ -2622,8 +2719,7 @@ class Activity {
return $hookinfo['s'];
}
-
- static function store($channel, $observer_hash, $act, $item, $fetch_parents = true, $force = false) {
+ static function store($channel, $observer_hash, $act, $item, $fetch_parents = true, $force = false, $is_collection_operation = false) {
$is_sys_channel = is_sys_channel($channel['channel_id']);
$is_child_node = false;
$parent = null;
@@ -2654,6 +2750,8 @@ class Activity {
}
$allowed = false;
+ $relay = false;
+
$permit_mentions = intval(PConfig::Get($channel['channel_id'], 'system','permit_all_mentions') && i_am_mentioned($channel, $item));
if ($is_child_node) {
@@ -2680,13 +2778,22 @@ class Activity {
return;
}
+ $relay = $channel['channel_hash'] === $parent[0]['owner_xchan'];
+
+ if (str_contains($parent[0]['tgt_type'], 'Collection') && !$relay && !$isCollectionOperation) {
+ logger('not a collection activity');
+ return;
+ }
+
if ($parent[0]['obj_type'] === 'Question') {
if (in_array($item['obj_type'], ['Note', ACTIVITY_OBJ_COMMENT]) && $item['title'] && (!$item['body'])) {
$item['obj_type'] = 'Answer';
+ $item['item_hidden'] = 1;
}
}
if ($parent[0]['item_wall']) {
+
// set the owner to the owner of the parent
$item['owner_xchan'] = $parent[0]['owner_xchan'];
@@ -2867,6 +2974,13 @@ class Activity {
// This isn't perfect but the best we can do for now.
$item['comment_policy'] = ((isset($act->data['commentPolicy'])) ? $act->data['commentPolicy'] : 'authenticated');
+ if (!empty($act->obj['contextHistory'])) {
+ IConfig::Set($item, 'activitypub', 'context', $act->obj['contextHistory'], 1);
+ }
+ elseif (!empty($act->obj['context'])) {
+ IConfig::Set($item, 'activitypub', 'context', $act->obj['context'], 1);
+ }
+
IConfig::Set($item, 'activitypub', 'recips', $act->raw_recips);
if (intval($act->sigok)) {
@@ -2937,17 +3051,48 @@ class Activity {
dbesc($item['mid']),
intval($item['uid'])
);
+
if ($r) {
if ($item['edited'] > $r[0]['edited']) {
$item['id'] = $r[0]['id'];
- $x = item_store_update($item);
+ $x = item_store_update($item, deliver: false);
}
else {
return;
}
}
else {
- $x = item_store($item);
+ $x = item_store($item, deliver: false, addAndSync: false);
+ }
+
+ if ($x['success']) {
+
+ if ($relay && $channel['channel_hash'] === $x['item']['owner_xchan'] && $x['item']['verb'] !== 'Add' && !$isCollectionOperation) {
+ $approval = Activity::addToCollection($channel, $act->data, $x['item']['parent_mid'], $x['item'], deliver: false);
+ }
+
+ if (check_item_source($channel['channel_id'], $x['item']) && in_array($x['item']['obj_type'], ['Event', ACTIVITY_OBJ_EVENT])) {
+ event_addtocal($x['item_id'], $channel['channel_id']);
+ }
+
+ tag_deliver($channel['channel_id'], $x['item_id']);
+
+ if ($relay && $is_child_node) {
+ // We are the owner of this conversation, so send all received comments back downstream
+ Master::Summon(['Notifier', 'comment-import', $x['item_id']]);
+ if (!empty($approval['item_id'])) {
+ Master::Summon(['Notifier', 'comment-import', $approval['item_id']]);
+ }
+ }
+
+ $r = q("select * from item where id = %d limit 1",
+ intval($x['item_id'])
+ );
+
+ if ($r) {
+ send_status_notifications($x['item_id'], $r[0]);
+ }
+ sync_an_item($channel['channel_id'], $x['item_id']);
}
if ($fetch_parents && $parent && !intval($parent[0]['item_private'])) {
@@ -2974,28 +3119,6 @@ class Activity {
}
}
}
-
- if ($x['success']) {
-
- if (check_item_source($channel['channel_id'], $x['item']) && in_array($x['item']['obj_type'], ['Event', ACTIVITY_OBJ_EVENT])) {
- event_addtocal($x['item_id'], $channel['channel_id']);
- }
-
- if ($is_child_node) {
- if ($item['owner_xchan'] === $channel['channel_hash']) {
- // We are the owner of this conversation, so send all received comments back downstream
- Master::Summon(['Notifier', 'comment-import', $x['item_id']]);
- }
- $r = q("select * from item where id = %d limit 1",
- intval($x['item_id'])
- );
- if ($r) {
- send_status_notifications($x['item_id'], $r[0]);
- }
- }
- sync_an_item($channel['channel_id'], $x['item_id']);
- }
-
}
/**
@@ -3054,24 +3177,6 @@ class Activity {
}
$a = new ActivityStreams($n);
-
- logger($a->debug(), LOGGER_DATA);
-
- if (!$a->is_valid()) {
- logger('not a valid activity');
- break;
- }
-
- if (in_array($a->type, ['Add', 'Remove'])
- && is_array($a->obj)
- && array_key_exists('object', $a->obj)
- && array_key_exists('actor', $a->obj)
- && !empty($a->tgt)) {
-
- logger('unsupported collection operation', LOGGER_DEBUG);
- return;
- }
-
if ($a->type === 'Announce' && is_array($a->obj)
&& array_key_exists('object', $a->obj) && array_key_exists('actor', $a->obj)) {
// This is a relayed/forwarded Activity (as opposed to a shared/boosted object)
@@ -3080,6 +3185,13 @@ class Activity {
$a = new ActivityStreams($a->obj);
}
+ logger($a->debug(), LOGGER_DATA);
+
+ if (!$a->is_valid()) {
+ logger('not a valid activity');
+ break;
+ }
+
$item = Activity::decode_note($a);
if (!$item) {
@@ -3585,6 +3697,8 @@ class Activity {
return [
'zot' => z_root() . '/apschema#',
+
+ 'contextHistory' => 'https://w3id.org/fep/171b/contextHistory',
'schema' => 'http://schema.org#',
'ostatus' => 'http://ostatus.org#',
'diaspora' => 'https://diasporafoundation.org/ns/',
@@ -3608,7 +3722,6 @@ class Activity {
'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
'Hashtag' => 'as:Hashtag'
-
];
}
@@ -3687,5 +3800,76 @@ class Activity {
}
}
+ public static function addToCollection($channel, $object, $target, $sourceItem = null, $deliver = true) {
+ if (!isset($channel['xchan_hash'])) {
+ $channel = channelx_by_hash($channel['channel_hash']);
+ }
+
+ $item = ((new Item())
+ ->setUid($channel['channel_id'])
+ ->setVerb('Add')
+ ->setAuthorXchan($channel['channel_hash'])
+ ->setOwnerXchan($channel['channel_hash'])
+ ->setObj($object)
+ ->setObjType($object['type'])
+ ->setParentMid(str_replace('/conversation/','/item/', $target))
+ ->setThrParent(str_replace('/conversation/','/item/', $target))
+ ->setTgtType('Collection')
+ ->setTarget([
+ 'id' => str_replace('/item/','/conversation/', $target),
+ 'type' => 'Collection',
+ 'attributedTo' => z_root() . '/channel/' . $channel['channel_address'],
+ ])
+ );
+ if ($sourceItem) {
+ $item->setSourceXchan($sourceItem['source_xchan'])
+ ->setAllowCid($sourceItem['allow_cid'])
+ ->setAllowGid($sourceItem['allow_gid'])
+ ->setDenyCid($sourceItem['deny_cid'])
+ ->setDenyGid($sourceItem['deny_gid'])
+ ->setPrivate($sourceItem['item_private'])
+ ->setRestrict($sourceItem['item_restrict'])
+ ->setHidden($sourceItem['item_hidden'])
+ ->setDelayed($sourceItem['item_delayed'])
+ ->setUnpublished($sourceItem['item_unpublished'])
+ ->setBlocked($sourceItem['item_blocked'])
+ ->setType($sourceItem['item_type'])
+ ->setCommentPolicy($sourceItem['comment_policy'])
+ ->setPublicPolicy($sourceItem['public_policy'])
+ ->setPostopts($sourceItem['postopts']);
+ }
+ $result = post_activity_item($item->toArray(), deliver: $deliver, channel: $channel, observer: $channel, addAndSync: false);
+ logger('addToCollection: ' . print_r($result, true));
+
+ return $result;
+ }
+
+ public static function removeFromCollection($channel, $object, $target, $deliver = true) {
+ if (!isset($channel['xchan_hash'])) {
+ $channel = channelx_by_hash($channel['channel_hash']);
+ }
+
+ $item = ((new Item())
+ ->setUid($channel['channel_id'])
+ ->setVerb('Remove')
+ ->setAuthorXchan($channel['channel_hash'])
+ ->setOwnerXchan($channel['channel_hash'])
+ ->setObj($object)
+ ->setObjType($object['type'])
+ ->setParentMid(str_replace('/conversation/','/item/', $target))
+ ->setThrParent(str_replace('/conversation/','/item/', $target))
+ ->setReplyto(z_root() . '/channel/' . $channel['channel_address'])
+ ->setTgtType('Collection')
+ ->setTarget([
+ 'id' => str_replace('/item/','/conversation/', $target),
+ 'type' => 'Collection',
+ 'attributedTo' => z_root() . '/channel/' . $channel['channel_address']
+ ])
+ );
+
+ $result = post_activity_item($item->toArray(), deliver: $deliver, channel: $channel, observer: $channel, addAndSync: false);
+ logger('removeFromCollection: ' . print_r($result, true));
+ return $result;
+ }
}
diff --git a/Zotlabs/Lib/BaseObject.php b/Zotlabs/Lib/BaseObject.php
new file mode 100644
index 000000000..7125d34cb
--- /dev/null
+++ b/Zotlabs/Lib/BaseObject.php
@@ -0,0 +1,80 @@
+<?php
+
+namespace Zotlabs\Lib;
+
+use Zotlabs\ActivityStreams\UnhandledElementException;
+
+class BaseObject
+{
+
+ public $string;
+ public $ldContext;
+
+ /**
+ * @param $input
+ * @param $strict
+ * @throws UnhandledElementException if $strict
+ */
+
+ public function __construct($input = null, $strict = false)
+ {
+ if (isset($input)) {
+ if (is_string($input)) {
+ $this->string = $input;
+ }
+ elseif(is_array($input)) {
+ foreach ($input as $key => $value) {
+ $key = ($key === '@context') ? 'ldContext' : $key;
+ if ($strict && !property_exists($this, $key)) {
+ throw new UnhandledElementException("Unhandled element: $key");
+ }
+ $this->{$key} = $value;
+ }
+ }
+ }
+ return $this;
+ }
+
+ public function getDataType($element, $object = null)
+ {
+ $object = $object ?? $this;
+ $type = gettype($object[$element]);
+ if ($type === 'array' && array_is_list($object[$element])) {
+ return 'list';
+ }
+ return $type;
+ }
+
+ public function toArray()
+ {
+ if ($this->string) {
+ return $this->string;
+ }
+ $returnValue = [];
+ foreach ((array) $this as $key => $value) {
+ if (isset($value)) {
+ $key = ($key === 'ldContext') ? '@context' : $key;
+ $returnValue[$key] = (($value instanceof BaseObject) ? $value->toArray() : $value);
+ }
+ }
+ return $returnValue;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getLdContext()
+ {
+ return $this->ldContext;
+ }
+
+ /**
+ * @param mixed $ldContext
+ * @return BaseObject
+ */
+ public function setLdContext($ldContext)
+ {
+ $this->ldContext = $ldContext;
+ return $this;
+ }
+}
diff --git a/Zotlabs/Lib/Chatroom.php b/Zotlabs/Lib/Chatroom.php
index 34853b6ab..ee16d0002 100644
--- a/Zotlabs/Lib/Chatroom.php
+++ b/Zotlabs/Lib/Chatroom.php
@@ -181,7 +181,7 @@ class Chatroom {
}
- function leave($observer_xchan, $room_id, $client) {
+ public static function leave($observer_xchan, $room_id, $client) {
if(! $room_id || ! $observer_xchan)
return;
diff --git a/Zotlabs/Lib/Connect.php b/Zotlabs/Lib/Connect.php
index b8e7a5c4e..9f6d077b4 100644
--- a/Zotlabs/Lib/Connect.php
+++ b/Zotlabs/Lib/Connect.php
@@ -24,10 +24,16 @@ class Connect {
$uid = $channel['channel_id'];
- if (strpos($url,'@') === false && strpos($url,'/') === false) {
+ // If we get just a channel name and it is not an URL turn it into a local webbie
+ if (!str_contains($url, '@') && strpos($url,'/') === false) {
$url = $url . '@' . App::get_hostname();
}
+ // Remove a possible leading @
+ if (str_starts_with($url, '@')) {
+ $url = ltrim($url, '@');
+ }
+
$result = [ 'success' => false, 'message' => '' ];
$my_perms = false;
diff --git a/Zotlabs/Lib/DB_Upgrade.php b/Zotlabs/Lib/DB_Upgrade.php
index 981c354a4..e11c2eb10 100644
--- a/Zotlabs/Lib/DB_Upgrade.php
+++ b/Zotlabs/Lib/DB_Upgrade.php
@@ -1,18 +1,35 @@
<?php
+/**
+ * A class to handle database schema upgrades.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
namespace Zotlabs\Lib;
use Zotlabs\Lib\Config;
+/**
+ * Upgrade the database schema if necessary.
+ *
+ * Compares the currently active database schema version with the version
+ * required for this version of Hubzilla, and performs the upgrade if needed.
+ *
+ * If the difference consists of more than one revision of the schema, each of
+ * the intermediate upgrades are performed in turn.
+ */
class DB_Upgrade {
- public $config_name = '';
- public $func_prefix = '';
-
- function __construct($db_revision) {
-
- $this->config_name = 'db_version';
- $this->func_prefix = '_';
+ /**
+ * Check the installed and required schema versions and perform the upgrade
+ * if necessary.
+ *
+ * @param int $db_version The required DB schema version.
+ */
+ public static function run(int $db_revision): void {
$build = Config::Get('system', 'db_version', 0);
if(! intval($build))
diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php
index 121ad9b09..6820091d5 100644
--- a/Zotlabs/Lib/Enotify.php
+++ b/Zotlabs/Lib/Enotify.php
@@ -213,28 +213,36 @@ class Enotify {
//$possess_desc = str_replace('<!item_type!>',$possess_desc);
// "a post"
- $dest_str = sprintf(t('%1$s %2$s [zrl=%3$s]a %4$s[/zrl]'),
+ $dest_str = sprintf(
+ t('%1$s %2$s [zrl=%3$s]a %4$s[/zrl]'),
'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
$action,
$itemlink,
- $item_post_type);
+ $item_post_type
+ );
// "George Bull's post"
- if($p)
- $dest_str = sprintf(t('%1$s %2$s [zrl=%3$s]%4$s\'s %5$s[/zrl]'),
+ if($p) {
+ $dest_str = sprintf(
+ t('%1$s %2$s [zrl=%3$s]%4$s\'s %5$s[/zrl]'),
'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
$action,
$itemlink,
- $p[0]['author']['xchan_name'],
- $item_post_type);
+ $parent_item['author']['xchan_name'],
+ $item_post_type
+ );
+ }
// "your post"
- if($p[0]['owner']['xchan_name'] == $p[0]['author']['xchan_name'] && intval($p[0]['item_wall']))
- $dest_str = sprintf(t('%1$s %2$s [zrl=%3$s]your %4$s[/zrl]'),
+ if ($parent_item['owner']['xchan_hash'] === $recip['channel_hash'] && intval($parent_item['item_wall'])) {
+ $dest_str = sprintf(
+ t('%1$s %2$s [zrl=%3$s]your %4$s[/zrl]'),
'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
$action,
$itemlink,
- $item_post_type);
+ $item_post_type
+ );
+ }
// Some mail softwares relies on subject field for threading.
// So, we cannot have different subjects for notifications of the same thread.
@@ -308,7 +316,6 @@ class Enotify {
$item_post_type = item_post_type($p[0]);
// $private = $p[0]['item_private'];
$parent_id = $p[0]['id'];
-
$parent_item = $p[0];
//$verb = ((activity_match($params['item']['verb'], ACTIVITY_DISLIKE)) ? t('disliked') : t('liked'));
@@ -321,13 +328,14 @@ class Enotify {
$verb = (($moderated) ? t('requested to dislike') : t('disliked'));
// "your post"
- if($p[0]['owner']['xchan_name'] === $p[0]['author']['xchan_name'] && intval($p[0]['item_wall']))
+ if ($parent_item['author']['xchan_hash'] === $recip['channel_hash']) {
$dest_str = sprintf(t('%1$s %2$s [zrl=%3$s]your %4$s[/zrl]'),
'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
$verb,
$itemlink,
$item_post_type
);
+ }
else {
pop_lang();
return;
@@ -406,6 +414,7 @@ class Enotify {
}
elseif (isset($params['type']) && $params['type'] === NOTIFY_TAGSHARE) {
+ $itemlink = $params['link'];
$subject = sprintf( t('[$Projectname:Notify] %s tagged your post') , $sender['xchan_name']);
$preamble = sprintf( t('%1$s tagged your post at %2$s'),$sender['xchan_name'], $sitename);
$epreamble = sprintf( t('%1$s tagged [zrl=%2$s]your post[/zrl]') ,
@@ -415,7 +424,6 @@ class Enotify {
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf( $sitelink, $siteurl );
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
- $itemlink = $params['link'];
}
elseif (isset($params['type']) && $params['type'] === NOTIFY_INTRO) {
@@ -433,6 +441,7 @@ class Enotify {
}
elseif (isset($params['type']) && $params['type'] === NOTIFY_SUGGEST) {
+ $itemlink = $params['link'];
$subject = sprintf( t('[$Projectname:Notify] Friend suggestion received'));
$preamble = sprintf( t('You\'ve received a friend suggestion from \'%1$s\' at %2$s'), $sender['xchan_name'], $sitename);
$epreamble = sprintf( t('You\'ve received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s.'),
@@ -447,7 +456,6 @@ class Enotify {
$sitelink = t('Please visit %s to approve or reject the suggestion.');
$tsitelink = sprintf( $sitelink, $siteurl );
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
- $itemlink = $params['link'];
}
elseif (isset($params['type']) && $params['type'] === NOTIFY_CONFIRM) {
@@ -595,7 +603,7 @@ class Enotify {
// send email notification if notification preferences permit
- require_once('bbcode.php');
+ require_once('include/bbcode.php');
if ((intval($recip['channel_notifyflags']) & intval($params['type'])) || $params['type'] == NOTIFY_SYSTEM) {
logger('notification: sending notification email');
diff --git a/Zotlabs/Lib/Libsync.php b/Zotlabs/Lib/Libsync.php
index a7e33ba6b..c6b149738 100644
--- a/Zotlabs/Lib/Libsync.php
+++ b/Zotlabs/Lib/Libsync.php
@@ -885,7 +885,7 @@ class Libsync {
dbesc($t)
);
- q("update hubloc set hubloc_error = 1, hubloc_deleted = 1 where hubloc_url = '%s' and hubloc_sitekey != '%s'",
+ q("update hubloc set hubloc_error = 1, hubloc_deleted = 1 where hubloc_url = '%s' and hubloc_sitekey != '%s' and hubloc_network = 'zot6'",
dbesc($r[0]['hubloc_url']),
dbesc($r[0]['hubloc_sitekey'])
);
diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php
index 05134f433..57c110d8b 100644
--- a/Zotlabs/Lib/Libzot.php
+++ b/Zotlabs/Lib/Libzot.php
@@ -655,6 +655,11 @@ class Libzot {
return $ret;
}
+ if (empty($arr['primary_location']['address'])) {
+ logger('Empty primary location address: ' . print_r($arr, true), LOGGER_DEBUG);
+ return $ret;
+ }
+
/**
* @hooks import_xchan
* Called when processing the result of zot_finger() to store the result
@@ -1134,6 +1139,7 @@ class Libzot {
}
$message_request = false;
+ $is_collection_operation = false;
$has_data = array_key_exists('data', $env) && $env['data'];
@@ -1141,26 +1147,33 @@ class Libzot {
$AS = null;
+
if ($env['encoding'] === 'activitystreams') {
$AS = new ActivityStreams($data);
- if (!$AS->is_valid()) {
- logger('Activity rejected: ' . print_r($data, true));
- return;
- }
+ // process add/remove from collection separately, as it requires a target.
+ // use the data object, as it will not include actor expansion
if (in_array($AS->type, ['Add', 'Remove'])
&& is_array($AS->obj)
&& array_key_exists('object', $AS->obj)
&& array_key_exists('actor', $AS->obj)
&& !empty($AS->tgt)) {
- logger('unsupported collection operation', LOGGER_DEBUG);
- return;
+ logger('relayed collection operation', LOGGER_DEBUG);
+ $is_collection_operation = true;
+
+ $original_id = $AS->id;
+ $original_type = $AS->type;
+
+ $raw_activity = $AS->data;
+
+ $AS = new ActivityStreams($raw_activity['object'], portable_id: $env['sender']);
}
if (is_array($AS->obj)) {
$item = Activity::decode_note($AS);
+
if (!$item) {
logger('Could not decode activity: ' . print_r($AS, true));
return;
@@ -1170,6 +1183,11 @@ class Libzot {
$item = [];
}
+ if (!$AS->is_valid()) {
+ logger('Activity rejected: ' . print_r($data, true));
+ return;
+ }
+
logger($AS->debug(), LOGGER_DATA);
}
@@ -1210,7 +1228,6 @@ class Libzot {
logger('public post');
-
// Public post. look for any site members who are or may be accepting posts from this sender
// and who are allowed to see them based on the sender's permissions
// @fixme;
@@ -1277,25 +1294,6 @@ class Libzot {
$item['item_private'] = 1;
}
- if ($item['mid'] === $item['parent_mid']) {
- if (is_array($AS->obj) && array_key_exists('commentPolicy', $AS->obj)) {
- $p = strstr($AS->obj['commentPolicy'], 'until=');
- if ($p !== false) {
- $comments_closed_at = datetime_convert('UTC', 'UTC', substr($p, 6));
- if ($comments_closed_at === $item['created']) {
- $item['item_nocomment'] = 1;
- }
- else {
- $item['comments_closed'] = $comments_closed_at;
- $aritemr['comment_policy'] = trim(str_replace($p, '', $AS->obj['commentPolicy']));
- }
- }
- else {
- $item['comment_policy'] = $AS->obj['commentPolicy'];
- }
- }
- }
-
if (!empty($AS->meta['hubloc']) || $AS->sigok) {
$item['item_verified'] = true;
}
@@ -1313,7 +1311,7 @@ class Libzot {
$relay = (($env['type'] === 'response') ? true : false);
- $result = self::process_delivery($env['sender'], $AS, $item, $deliveries, $relay, false, $message_request);
+ $result = self::process_delivery($env['sender'], $AS, $item, $deliveries, $relay, false, $message_request, false, $is_collection_operation);
Activity::init_background_fetch($env['sender']);
}
@@ -1529,7 +1527,7 @@ class Libzot {
* @return array
*/
- static function process_delivery($sender, $act, $arr, $deliveries, $relay, $public = false, $request = false, $force = false) {
+ static function process_delivery($sender, $act, $arr, $deliveries, $relay, $public = false, $request = false, $force = false, $is_collection_operation = false) {
$result = [];
// We've validated the sender. Now make sure that the sender is the owner or author
@@ -1557,6 +1555,14 @@ class Libzot {
$DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>');
+ $conversation_operation = $is_collection_operation && isset($arr['target']['attributedTo']);
+
+ if (isset($arr['tgt_type']) && str_contains($arr['tgt_type'], 'Collection') && !$relay && !$conversation_operation) {
+ $DR->update('not a collection activity');
+ $result[] = $DR->get();
+ continue;
+ }
+
if (($act) && ($act->obj) && (!is_array($act->obj))) {
// The initial object fetch failed using the sys channel credentials.
// Try again using the delivery channel credentials.
@@ -1590,6 +1596,8 @@ class Libzot {
*
*/
+
+
if ($sender === $channel['channel_hash'] && $arr['author_xchan'] === $channel['channel_hash'] && !str_starts_with($arr['mid'], z_root())) {
$DR->update('self delivery ignored');
$result[] = $DR->get();
@@ -1636,22 +1644,24 @@ class Libzot {
if (intval($channel['channel_system']) && (!$arr['item_private']) && (!$relay)) {
$local_public = true;
- $r = q("select xchan_selfcensored from xchan where xchan_hash = '%s' limit 1",
- dbesc($sender)
- );
- // don't import sys channel posts from selfcensored authors
- if ($r && (intval($r[0]['xchan_selfcensored']))) {
+ $incl = Config::Get('system','pubstream_incl');
+ $excl = Config::Get('system','pubstream_excl');
+
+ if(($incl || $excl) && !MessageFilter::evaluate($arr, $incl, $excl)) {
$local_public = false;
continue;
}
- $incl = Config::Get('system','pubstream_incl');
- $excl = Config::Get('system','pubstream_excl');
+ $r = q("select xchan_selfcensored, xchan_censored from xchan where xchan_hash = '%s'",
+ dbesc($sender)
+ );
- if(($incl || $excl) && !MessageFilter::evaluate($arr, $incl, $excl)) {
+ // don't import sys channel posts from selfcensored or censored authors
+ if ($r && ($r[0]['xchan_selfcensored'] || $r[0]['xchan_censored'])) {
$local_public = false;
continue;
}
+
}
$tag_delivery = tgroup_check($channel['channel_id'], $arr);
@@ -1713,6 +1723,7 @@ class Libzot {
// If this is a poll response, convert the obj_type to our (internal-only) "Answer" type
if (in_array($arr['obj_type'], ['Note', ACTIVITY_OBJ_COMMENT]) && $arr['title'] && (!$arr['body'])) {
$arr['obj_type'] = 'Answer';
+ $arr['item_hidden'] = 1;
}
}
@@ -1838,11 +1849,12 @@ class Libzot {
dbesc($arr['author_xchan'])
);
- // reactions such as like and dislike could have an mid with /activity/ in it.
+ // Reactions such as like and dislike could have an mid with /activity/ in it.
// Check for both forms in order to prevent duplicates.
- $r = q("select * from item where mid in ('%s','%s') and uid = %d limit 1",
+
+ $r = q("select * from item where mid in ('%s', '%s') and uid = %d limit 1",
dbesc($arr['mid']),
- dbesc(str_replace(z_root() . '/activity/', z_root() . '/item/', $arr['mid'])),
+ dbesc(reverse_activity_mid($arr['mid'])),
intval($channel['channel_id'])
);
@@ -1871,21 +1883,29 @@ class Libzot {
$DR->update('update ignored');
$result[] = $DR->get();
}
+
+ if ($relay && $channel['channel_hash'] === $item_result['item']['owner_xchan'] && $item_result['item']['verb'] !== 'Add' && !$is_collection_operation) {
+ $approval = Activity::addToCollection($channel, $act->data, $item_result['item']['parent_mid'], $item_result['item'], deliver: false);
+ }
+
}
else {
$DR->update('update ignored');
$result[] = $DR->get();
- // We need this line to ensure wall-to-wall comments are relayed (by falling through to the relay bit),
+ // We need this line to ensure wall-to-wall comments and add/remove activities are relayed (by falling through to the relay bit),
// and at the same time not relay any other relayable posts more than once, because to do so is very wasteful.
if (!intval($r[0]['item_origin']))
continue;
}
+
+
}
else {
$arr['aid'] = $channel['channel_account_id'];
$arr['uid'] = $channel['channel_id'];
+
// if it's a sourced post, call the post_local hooks as if it were
// posted locally so that crosspost connectors will be triggered.
$item_source = check_item_source($arr['uid'], $arr);
@@ -1914,10 +1934,15 @@ class Libzot {
}
if (post_is_importable($arr['uid'], $arr, $abook)) {
- $item_result = item_store($arr);
+ $item_result = item_store($arr, addAndSync: false);
+
if ($item_result['success']) {
$item_id = $item_result['item_id'];
+ if ($relay && $channel['channel_hash'] === $item_result['item']['owner_xchan'] && $item_result['item']['verb'] !== 'Add' && !$is_collection_operation) {
+ $approval = Activity::addToCollection($channel, $act->data, $item_result['item']['parent_mid'], $item_result['item'], deliver: false);
+ }
+
if ($item_source && in_array($item_result['item']['obj_type'], ['Event', ACTIVITY_OBJ_EVENT])) {
event_addtocal($item_id, $channel['channel_id']);
}
@@ -1960,12 +1985,16 @@ class Libzot {
if ((is_array($stored)) && ($stored['id'] != $stored['parent'])
&& ($stored['author_xchan'] === $channel['channel_hash'])) {
- retain_item($stored['item']['parent']);
+ retain_item($stored['parent']);
}
- if ($relay && $item_id && $stored['item_blocked'] !== ITEM_MODERATED) {
+ if ($relay && $item_id && item_forwardable($stored)) {
logger('Invoking relay');
Master::Summon(['Notifier', 'relay', intval($item_id)]);
+ if (!empty($approval) && $approval['item_id']) {
+ Master::Summon(['Notifier', 'relay', intval($approval['item_id'])]);
+ }
+
$DR->addto_update('relayed');
$result[] = $DR->get();
}
@@ -2019,12 +2048,7 @@ class Libzot {
$AS = new ActivityStreams($activity);
- if (!$AS->is_valid()) {
- logger('Fetched activity rejected: ' . print_r($activity, true));
- continue;
- }
-
- if ($AS->type === 'Announce' && is_array($AS->obj)
+ if ($AS->is_valid() && $AS->type === 'Announce' && is_array($AS->obj)
&& array_key_exists('object', $AS->obj) && array_key_exists('actor', $AS->obj)) {
// This is a relayed/forwarded Activity (as opposed to a shared/boosted object)
// Reparse the encapsulated Activity and use that instead
@@ -2032,14 +2056,33 @@ class Libzot {
$AS = new ActivityStreams($AS->obj);
}
+ // process add/remove from collection separately, as it requires a target.
+ // use the raw object, as it will not include actor expansion
if (in_array($AS->type, ['Add', 'Remove'])
&& is_array($AS->obj)
&& array_key_exists('object', $AS->obj)
&& array_key_exists('actor', $AS->obj)
&& !empty($AS->tgt)) {
- logger('unsupported collection operation', LOGGER_DEBUG);
- return;
+ logger('relayed collection operation', LOGGER_DEBUG);
+
+ $is_collection_operation = true;
+
+ $original_id = $AS->id;
+ $original_type = $AS->type;
+
+ $raw_activity = $AS->data;
+
+ $AS = new ActivityStreams($raw_activity['object']);
+
+ // Store the original activity id and type for later usage
+ $AS->meta['original_id'] = $original_id;
+ $AS->meta['original_type'] = $original_type;
+ }
+
+ if (!$AS->is_valid()) {
+ logger('Fetched activity rejected: ' . print_r($activity, true));
+ continue;
}
// logger($AS->debug());
@@ -2230,7 +2273,7 @@ class Libzot {
}
- $x = item_store_update($item);
+ $x = item_store_update($item, addAndSync: false);
// If we're updating an event that we've saved locally, we store the item info first
// because event_addtocal will parse the body to get the 'new' event details
@@ -2346,21 +2389,20 @@ class Libzot {
);
}
} else {
- if ($stored['id'] !== $stored['parent']) {
- q(
- "update item set commented = '%s', changed = '%s' where id = %d",
- dbesc(datetime_convert()),
- dbesc(datetime_convert()),
- intval($stored['parent'])
- );
- }
- }
+ if ($stored['id'] !== $stored['parent']) {
+ q("update item set commented = '%s', changed = '%s' where id = %d",
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ intval($stored['parent'])
+ );
+ }
+ }
// Use phased deletion to set the deleted flag, call both tag_deliver and the notifier to notify downstream channels
// and then clean up after ourselves with a cron job after several days to do the delete_item_lowlevel() (DROPITEM_PHASE2).
- drop_item($post_id, false, DROPITEM_PHASE1);
+ drop_item($post_id, DROPITEM_PHASE1, uid: $uid);
tag_deliver($uid, $post_id);
}
diff --git a/Zotlabs/Lib/Mailer.php b/Zotlabs/Lib/Mailer.php
new file mode 100644
index 000000000..ca2d84d0d
--- /dev/null
+++ b/Zotlabs/Lib/Mailer.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * Mailer class for sending emails from Hubzilla.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Lib;
+
+use App;
+
+/**
+ * A class for sending emails.
+ *
+ * Based on the previous `z_mail` function, but adaped and made more
+ * robust and usable as a class.
+ */
+class Mailer {
+
+ public function __construct(private array $params = []) {
+ }
+
+ public function deliver(): bool {
+
+ if(empty($this->params['fromEmail'])) {
+ $this->params['fromEmail'] = Config::Get('system','from_email');
+ if(empty($this->params['fromEmail'])) {
+ $this->params['fromEmail'] = 'Administrator@' . App::get_hostname();
+ }
+ }
+
+ if(empty($this->params['fromName'])) {
+ $this->params['fromName'] = Config::Get('system','from_email_name');
+ if(empty($this->params['fromName'])) {
+ $this->params['fromName'] = System::get_site_name();
+ }
+ }
+
+ if(empty($this->params['replyTo'])) {
+ $this->params['replyTo'] = Config::Get('system','reply_address');
+ if(empty($this->params['replyTo'])) {
+ $this->params['replyTo'] = 'noreply@' . App::get_hostname();
+ }
+ }
+
+ if (!isset($this->params['additionalMailHeader'])) {
+ $this->params['additionalMailHeader'] = '';
+ }
+
+ $this->params['sent'] = false;
+ $this->params['result'] = false;
+
+ /**
+ * @hooks email_send
+ * * \e params @see z_mail()
+ */
+ call_hooks('email_send', $this->params);
+
+ if($this->params['sent']) {
+ logger('notification: z_mail returns ' . (($this->params['result']) ? 'success' : 'failure'), LOGGER_DEBUG);
+ return $this->params['result'];
+ }
+
+ $fromName = email_header_encode(html_entity_decode($this->params['fromName'],ENT_QUOTES,'UTF-8'),'UTF-8');
+ $messageSubject = email_header_encode(html_entity_decode($this->params['messageSubject'],ENT_QUOTES,'UTF-8'),'UTF-8');
+
+ $messageHeader =
+ $this->params['additionalMailHeader'] .
+ "From: $fromName <{$this->params['fromEmail']}>" . PHP_EOL .
+ "Reply-To: $fromName <{$this->params['replyTo']}>" . PHP_EOL .
+ "Content-Type: text/plain; charset=UTF-8";
+
+ // send the message
+ $res = mail(
+ $this->params['toEmail'], // send to address
+ $messageSubject, // subject
+ $this->params['textVersion'],
+ $messageHeader // message headers
+ );
+ logger('notification: z_mail returns ' . (($res) ? 'success' : 'failure'), LOGGER_DEBUG);
+ return $res;
+ }
+}
diff --git a/Zotlabs/Lib/SuperCurl.php b/Zotlabs/Lib/SuperCurl.php
deleted file mode 100644
index 462a62b36..000000000
--- a/Zotlabs/Lib/SuperCurl.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-namespace Zotlabs\Lib;
-
-/**
- * @brief wrapper for z_fetch_url() which can be instantiated with several built-in parameters and
- * these can be modified and re-used. Useful for CalDAV and other processes which need to authenticate
- * and set lots of CURL options (many of which stay the same from one call to the next).
- */
-
-
-
-
-class SuperCurl {
-
-
- private $auth;
- private $url;
-
- private $curlopt = array();
-
- private $headers = null;
- public $filepos = 0;
- public $filehandle = 0;
- public $request_data = '';
-
- private $request_method = 'GET';
- private $upload = false;
- private $cookies = false;
-
-
- private function set_data($s) {
- $this->request_data = $s;
- $this->filepos = 0;
- }
-
- public function curl_read($ch,$fh,$size) {
-
- if($this->filepos < 0) {
- unset($fh);
- return '';
- }
-
- $s = substr($this->request_data,$this->filepos,$size);
-
- if(strlen($s) < $size)
- $this->filepos = (-1);
- else
- $this->filepos = $this->filepos + $size;
-
- return $s;
- }
-
-
- public function __construct($opts = array()) {
- $this->set($opts);
- }
-
- private function set($opts = array()) {
- if($opts) {
- foreach($opts as $k => $v) {
- switch($k) {
- case 'http_auth':
- $this->auth = $v;
- break;
- case 'magicauth':
- // currently experimental
- $this->magicauth = $v;
- \Zotlabs\Daemon\Master::Summon([ 'CurlAuth', $v ]);
- break;
- case 'custom':
- $this->request_method = $v;
- break;
- case 'url':
- $this->url = $v;
- break;
- case 'data':
- $this->set_data($v);
- if($v) {
- $this->upload = true;
- }
- else {
- $this->upload = false;
- }
- break;
- case 'headers':
- $this->headers = $v;
- break;
- default:
- $this->curlopts[$k] = $v;
- break;
- }
- }
- }
- }
-
- function exec() {
- $opts = $this->curlopts;
- $url = $this->url;
- if($this->auth)
- $opts['http_auth'] = $this->auth;
- if($this->magicauth) {
- $opts['cookiejar'] = 'store/[data]/cookie_' . $this->magicauth;
- $opts['cookiefile'] = 'store/[data]/cookie_' . $this->magicauth;
- $opts['cookie'] = 'PHPSESSID=' . trim(file_get_contents('store/[data]/cookien_' . $this->magicauth));
- $c = channelx_by_n($this->magicauth);
- if($c)
- $url = zid($this->url,channel_reddress($c));
- }
- if($this->custom)
- $opts['custom'] = $this->custom;
- if($this->headers)
- $opts['headers'] = $this->headers;
- if($this->upload) {
- $opts['upload'] = true;
- $opts['infile'] = $this->filehandle;
- $opts['infilesize'] = strlen($this->request_data);
- $opts['readfunc'] = [ $this, 'curl_read' ] ;
- }
-
- $recurse = 0;
- return z_fetch_url($this->url,true,$recurse,(($opts) ? $opts : null));
-
- }
-
-
-}
diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php
index 60a314da0..e0db98eb3 100644
--- a/Zotlabs/Lib/ThreadItem.php
+++ b/Zotlabs/Lib/ThreadItem.php
@@ -187,7 +187,7 @@ class ThreadItem {
$drop = [ 'dropping' => true, 'delete' => t('Admin Delete') ];
}
- $filer = ((($conv->get_profile_owner() == local_channel()) && (! array_key_exists('real_uid',$item))) ? t("Save to Folder") : false);
+ $filer = (((local_channel() && $conv->get_profile_owner() === local_channel()) || (local_channel() && App::$module === 'pubstream')) ? t("Save to Folder") : false);
$profile_avatar = $item['author']['xchan_photo_s'];
$profile_link = chanlink_hash($item['author_xchan']);
@@ -233,45 +233,6 @@ class ThreadItem {
$my_responses[$v] = ((isset($conv_responses[$v][$item['mid'] . '-m'])) ? 1 : 0);
}
-/*
-
- $like_count = ((x($conv_responses['like'],$item['mid'])) ? $conv_responses['like'][$item['mid']] : '');
- $like_list = ((x($conv_responses['like'],$item['mid'])) ? $conv_responses['like'][$item['mid'] . '-l'] : '');
- if (($like_list) && (count($like_list) > MAX_LIKERS)) {
- $like_list_part = array_slice($like_list, 0, MAX_LIKERS);
- array_push($like_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#likeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
- } else {
- $like_list_part = '';
- }
- $like_button_label = tt('Like','Likes',$like_count,'noun');
-
- $repeat_count = ((x($conv_responses['announce'],$item['mid'])) ? $conv_responses['announce'][$item['mid']] : '');
- $repeat_list = ((x($conv_responses['announce'],$item['mid'])) ? $conv_responses['announce'][$item['mid'] . '-l'] : '');
- if (($repeat_list) && (count($repeat_list) > MAX_LIKERS)) {
- $repeat_list_part = array_slice($repeat_list, 0, MAX_LIKERS);
- array_push($repeat_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#repeatModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
- } else {
- $repeat_list_part = '';
- }
- $repeat_button_label = tt('Repeat','Repeats',$repeat_count,'noun');
-
- $showdislike = '';
- if (feature_enabled($conv->get_profile_owner(),'dislike')) {
- $dislike_count = ((x($conv_responses['dislike'],$item['mid'])) ? $conv_responses['dislike'][$item['mid']] : '');
- $dislike_list = ((x($conv_responses['dislike'],$item['mid'])) ? $conv_responses['dislike'][$item['mid'] . '-l'] : '');
- $dislike_button_label = tt('Dislike','Dislikes',$dislike_count,'noun');
- if (($dislike_list) && (count($dislike_list) > MAX_LIKERS)) {
- $dislike_list_part = array_slice($dislike_list, 0, MAX_LIKERS);
- array_push($dislike_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#dislikeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
- } else {
- $dislike_list_part = '';
- }
-
- $showdislike = ((x($conv_responses['dislike'],$item['mid'])) ? format_like($conv_responses['dislike'][$item['mid']],$conv_responses['dislike'][$item['mid'] . '-l'],'dislike',$item['mid']) : '');
- }
-
- $showlike = ((x($conv_responses['like'],$item['mid'])) ? format_like($conv_responses['like'][$item['mid']],$conv_responses['like'][$item['mid'] . '-l'],'like',$item['mid']) : '');
-*/
/*
* We should avoid doing this all the time, but it depends on the conversation mode
@@ -415,7 +376,6 @@ class ThreadItem {
'template' => $this->get_template(),
'mode' => $mode,
'item_type' => intval($item['item_type']),
- //'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
'body' => $body['html'],
'tags' => $body['tags'],
'categories' => $body['categories'],
@@ -450,16 +410,15 @@ class ThreadItem {
'sparkle' => $sparkle,
'title' => $item['title'],
'title_tosource' => get_pconfig($conv->get_profile_owner(),'system','title_tosource'),
- //'ago' => relative_date($item['created']),
'app' => $item['app'],
'str_app' => sprintf( t('from %s'), $item['app']),
'isotime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'c'),
- 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
- 'editedtime' => (($item['edited'] != $item['created']) ? sprintf( t('last edited: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r')) : ''),
- 'expiretime' => (($item['expires'] > NULL_DATE) ? sprintf( t('Expires: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['expires'], 'r')):''),
+ 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created']),
+ 'editedtime' => (($item['edited'] != $item['created']) ? sprintf(t('Last edited %s'), relative_time($item['edited'])) : ''),
+ 'expiretime' => (($item['expires'] > NULL_DATE) ? sprintf(t('Expires %s'), relative_time($item['expires'])) : ''),
'lock' => $lock,
'locktype' => $locktype,
- 'delayed' => $item['item_delayed'],
+ 'delayed' => (($item['item_delayed']) ? sprintf(t('Published %s'), relative_time($item['created'])) : ''),
'privacy_warning' => $privacy_warning,
'verified' => $verified,
'unverified' => $unverified,
@@ -479,7 +438,7 @@ class ThreadItem {
'event' => $body['event'],
'has_tags' => $has_tags,
'reactions' => $this->reactions,
-// Item toolbar buttons
+ // Item toolbar buttons
'emojis' => (($this->is_toplevel() && $this->is_commentable() && $observer && feature_enabled($conv->get_profile_owner(),'emojis')) ? '1' : ''),
'like' => $like,
'dislike' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike : ''),
@@ -489,7 +448,7 @@ class ThreadItem {
'embed' => $embed,
'rawmid' => $item['mid'],
'plink' => get_plink($item),
- 'edpost' => $edpost, // ((feature_enabled($conv->get_profile_owner(),'edit_posts')) ? $edpost : ''),
+ 'edpost' => $edpost,
'star' => ((feature_enabled($conv->get_profile_owner(),'star_posts') && ($item['item_type'] == ITEM_TYPE_POST)) ? $star : ''),
'tagger' => ((feature_enabled($conv->get_profile_owner(),'commtag')) ? $tagger : ''),
'filer' => ((feature_enabled($conv->get_profile_owner(),'filing') && ($item['item_type'] == ITEM_TYPE_POST)) ? $filer : ''),
@@ -500,7 +459,7 @@ class ThreadItem {
'addtocal' => (($has_event) ? t('Add to Calendar') : ''),
'drop' => $drop,
'dropdown_extras' => $dropdown_extras,
-// end toolbar buttons
+ // end toolbar buttons
'unseen_comments' => $unseen_comments,
'comment_count' => $total_children,
'comment_count_txt' => $comment_count_txt,
@@ -508,30 +467,9 @@ class ThreadItem {
'markseen' => t('Mark all comments seen'),
'responses' => $responses,
'my_responses' => $my_responses,
- /*
- 'like_count' => $like_count,
- 'like_list' => $like_list,
- 'like_list_part' => $like_list_part,
- 'like_button_label' => $like_button_label,
- 'like_modal_title' => t('Likes','noun'),
-
- 'repeat_count' => $repeat_count,
- 'repeat_list' => $repeat_list,
- 'repeat_list_part' => $repeat_list_part,
- 'repeat_button_label' => $repeat_button_label,
- 'repeat_modal_title' => t('Repeats','noun'),
-
-
- 'dislike_modal_title' => t('Dislikes','noun'),
- 'dislike_count' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_count : ''),
- 'dislike_list' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_list : ''),
- 'dislike_list_part' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_list_part : ''),
- 'dislike_button_label' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_button_label : ''),
-*/
'modal_dismiss' => t('Close'),
- // 'showlike' => $showlike,
- // 'showdislike' => $showdislike,
'comment' => ($item['item_delayed'] ? '' : $this->get_comment_box()),
+ 'no_comment' => (($item['item_thread_top'] && $item['item_nocomment'])? t('Comments disabled') : ''),
'previewing' => ($conv->is_preview() ? true : false ),
'preview_lbl' => t('This is an unsaved preview'),
'wait' => t('Please wait'),
@@ -544,7 +482,8 @@ class ThreadItem {
'moderate_delete' => t('Delete'),
'rtl' => in_array($item['lang'], rtl_languages()),
'reactions_allowed' => $reactions_allowed,
- 'reaction_str' => [t('Add yours'), t('Remove yours')]
+ 'reaction_str' => [t('Add yours'), t('Remove yours')],
+ 'is_contained' => $this->is_toplevel() && str_contains($item['tgt_type'], 'Collection')
);
$arr = array('item' => $item, 'output' => $tmp_item);
@@ -555,15 +494,7 @@ class ThreadItem {
$result['children'] = array();
$nb_children = count($children);
- $visible_comments = Config::Get('system','expanded_comments');
- if($visible_comments === false)
- $visible_comments = 3;
-
-// needed for scroll to comment from notification but needs more work
-// as we do not want to open all comments unless there is actually an #item_xx anchor
-// and the url fragment is not sent to the server.
-// if(in_array(\App::$module,['display','update_display']))
-// $visible_comments = 99999;
+ $visible_comments = Config::Get('system', 'expanded_comments', 3);
if(($this->get_display_mode() === 'normal') && ($nb_children > 0)) {
foreach($children as $child) {
@@ -868,6 +799,7 @@ class ThreadItem {
'$submit' => t('Submit'),
'$edbold' => t('Bold'),
'$editalic' => t('Italic'),
+ '$edhighlighter' => t('Highlight selected text'),
'$eduline' => t('Underline'),
'$edquote' => t('Quote'),
'$edcode' => t('Code'),
@@ -875,7 +807,7 @@ class ThreadItem {
'$edatt' => t('Attach/Upload file'),
'$edurl' => t('Insert Link'),
'$edvideo' => t('Video'),
- '$preview' => t('Preview'), // ((feature_enabled($conv->get_profile_owner(),'preview')) ? t('Preview') : ''),
+ '$preview' => t('Preview'),
'$can_upload' => (perm_is_allowed($conv->get_profile_owner(),get_observer_hash(),'write_storage') && $conv->is_uploadable()),
'$feature_encrypt' => ((feature_enabled($conv->get_profile_owner(),'content_encrypt')) ? true : false),
'$encrypt' => t('Encrypt text'),
@@ -896,7 +828,7 @@ class ThreadItem {
}
/**
- * Check if we are a wall to wall item and set the relevant properties
+ * Check if we are a wall to wall or announce item and set the relevant properties
*/
protected function check_wall_to_wall() {
$conv = $this->get_conversation();
diff --git a/Zotlabs/Module/Achievements.php b/Zotlabs/Module/Achievements.php
index 1529448d3..a16294039 100644
--- a/Zotlabs/Module/Achievements.php
+++ b/Zotlabs/Module/Achievements.php
@@ -8,25 +8,25 @@ class Achievements extends \Zotlabs\Web\Controller {
// This doesn't work, so
if (! is_developer())
return;
-
+
if(argc() > 1)
$which = argv(1);
else {
notice( t('Requested profile is not available.') . EOL );
return;
}
-
+
$profile = 0;
- $profile = argv(1);
+ $profile = argv(1);
profile_load($which,$profile);
-
+
$r = q("select channel_id from channel where channel_address = '%s'",
dbesc($which)
);
if($r) {
$owner = intval($r[0]['channel_id']);
}
-
+
$observer = \App::get_observer();
$ob_hash = (($observer) ? $observer['xchan_hash'] : '');
$perms = get_all_perms($owner,$ob_hash);
@@ -34,60 +34,60 @@ class Achievements extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL);
return;
}
-
+
$newmembertext = t('Some blurb about what to do when you\'re new here');
-
-
+
+
// By default, all badges are false
$contactbadge = false;
$profilebadge = false;
$keywordsbadge = false;
-
+
// Check number of contacts. Award a badge if over 10
- // We'll figure these out on each page load instead of
+ // We'll figure these out on each page load instead of
// writing them to the DB because that will mean one needs
// to retain their achievements - eg, you can't add
// a bunch of channels just to get your badge, and then
// delete them all again. If these become popular or
// used in profiles or something, we may need to reconsider
// and add a table for this - because this won't scale.
-
+
$r = q("select * from abook where abook_channel = %d",
intval($owner)
);
-
+
if (count($r))
$contacts = count($r);
// We're checking for 11 to adjust for the abook record for self
if ($contacts >= 11)
$contactbadge = true;
-
+
// Check if an about field in the profile has been created.
-
+
$r = q("select * from profile where uid = %d and about <> ''",
intval($owner)
);
-
+
if ($r)
$profilebadge = 1;
-
+
// Check if keywords have been set
-
+
$r = q("select * from profile where uid = %d and keywords <> ''",
intval($owner)
);
-
+
if($r)
$keywordsbadge = 1;
-
+
return replace_macros(get_markup_template("achievements.tpl"), array(
'$newmembertext' => $newmembertext,
'$profilebadge' => $profilebadge,
'$contactbadge' => $contactbadge,
'$keywordsbadge' => $keywordsbadge,
- '$channelsbadge' => $channelsbadge
+ '$channelsbadge' => null,
));
-
+
}
-
+
}
diff --git a/Zotlabs/Module/Activity.php b/Zotlabs/Module/Activity.php
index 133312e28..85b9f3e7c 100644
--- a/Zotlabs/Module/Activity.php
+++ b/Zotlabs/Module/Activity.php
@@ -30,7 +30,7 @@ class Activity extends Controller {
dbesc(ACTIVITY_UNFOLLOW)
);
- $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 $item_normal_extra ";
+ $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 and item.item_uplink = 0 $item_normal_extra ";
$i = null;
@@ -191,7 +191,7 @@ class Activity extends Controller {
dbesc(ACTIVITY_UNFOLLOW)
);
- $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 $item_normal_extra ";
+ $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 and item.item_uplink = 0 $item_normal_extra ";
$sigdata = HTTPSig::verify(EMPTY_STR);
if ($sigdata['portable_id'] && $sigdata['header_valid']) {
diff --git a/Zotlabs/Module/Admin/Account_edit.php b/Zotlabs/Module/Admin/Account_edit.php
index 0300fb10c..35a15133f 100644
--- a/Zotlabs/Module/Admin/Account_edit.php
+++ b/Zotlabs/Module/Admin/Account_edit.php
@@ -8,6 +8,11 @@ class Account_edit {
function post() {
+ // Validate CSRF token
+ //
+ // We terminate with a 403 Forbidden status if the check fails.
+ check_form_security_token_ForbiddenOnErr('admin_account_edit', 'security');
+
$account_id = $_REQUEST['aid'];
if(! $account_id)
@@ -18,7 +23,7 @@ class Account_edit {
if($pass1 && $pass2 && ($pass1 === $pass2)) {
$salt = random_string(32);
$password_encoded = hash('whirlpool', $salt . $pass1);
- $r = q("update account set account_salt = '%s', account_password = '%s',
+ $r = q("update account set account_salt = '%s', account_password = '%s',
account_password_changed = '%s' where account_id = %d",
dbesc($salt),
dbesc($password_encoded),
@@ -34,7 +39,7 @@ class Account_edit {
$account_level = 5;
$account_language = trim($_REQUEST['account_language']);
- $r = q("update account set account_service_class = '%s', account_level = %d, account_language = '%s'
+ $r = q("update account set account_service_class = '%s', account_level = %d, account_language = '%s'
where account_id = %d",
dbesc($service_class),
intval($account_level),
@@ -62,8 +67,8 @@ class Account_edit {
return '';
}
-
$a = replace_macros(get_markup_template('admin_account_edit.tpl'), [
+ '$security' => get_form_security_token('admin_account_edit'),
'$account' => $x[0],
'$title' => t('Account Edit'),
'$pass1' => [ 'pass1', t('New Password'), ' ','' ],
diff --git a/Zotlabs/Module/Admin/Accounts.php b/Zotlabs/Module/Admin/Accounts.php
index 6f7cb0311..108231d7d 100644
--- a/Zotlabs/Module/Admin/Accounts.php
+++ b/Zotlabs/Module/Admin/Accounts.php
@@ -6,133 +6,33 @@ use Zotlabs\Lib\Config;
class Accounts {
- /**
- * @brief Handle POST actions on accounts admin page.
- *
- * This function is called when on the admin user/account page the form was
- * submitted to handle multiple operations at once. If one of the icons next
- * to an entry are pressed the function admin_page_accounts() will handle this.
- *
- */
const MYP = 'ZAR'; // ZAR2x
const VERSION = '2.0.0';
- function post() {
+ /**
+ * Handle POST actions on accounts admin page.
+ */
+ public function post() {
- $pending = ( x($_POST, 'pending') ? $_POST['pending'] : array() );
- $users = ( x($_POST, 'user') ? $_POST['user'] : array() );
- $blocked = ( x($_POST, 'blocked') ? $_POST['blocked'] : array() );
+ $pending = x($_POST, 'pending') ? $_POST['pending'] : array();
check_form_security_token_redirectOnErr('/admin/accounts', 'admin_accounts');
- $isajax = is_ajax();
- $rc = 0;
-
- If (!is_site_admin()) {
- if ($isajax) {
- killme();
- exit;
- }
- goaway(z_root() . '/');
- }
-
- if ($isajax) {
- //$debug = print_r($_SESSION[self::MYP],true);
- $zarop = (x($_POST['zardo']) && preg_match('/^[ad]{1,1}$/', $_POST['zardo']) )
- ? $_POST['zardo'] : '';
- // zarat arrives with leading underscore _n
- $zarat = (x($_POST['zarat']) && preg_match('/^_{1,1}[0-9]{1,6}$/', $_POST['zarat']) )
- ? substr($_POST['zarat'],1) : '';
- $zarse = (x($_POST['zarse']) && preg_match('/^[0-9a-f]{8,8}$/', $_POST['zarse']) )
- ? hex2bin($_POST['zarse']) : '';
-
- if ($zarop && $zarat >= 0 && $zarse && $zarse == $_SESSION[self::MYP]['h'][$zarat]) {
-
- //
- if ($zarop == 'd') {
- $rd = q("UPDATE register SET reg_vital = 0 WHERE reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ",
- intval($_SESSION[self::MYP]['i'][$zarat]),
- dbesc($_SESSION[self::MYP]['h'][$zarat])
- );
- $rc = '×';
- }
- elseif ($zarop == 'a') {
- // approval, REGISTER_DENIED by user 0x0040, REGISTER_AGREED by user 0x0020 @Regate
- $rd = q("UPDATE register SET reg_flags = (reg_flags & ~ 16), "
- . " reg_vital = (CASE (reg_flags & ~ 48) WHEN 0 THEN 0 ELSE 1 END) "
- . " WHERE reg_vital = 1 AND reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ",
- intval($_SESSION[self::MYP]['i'][$zarat]),
- dbesc($_SESSION[self::MYP]['h'][$zarat])
- );
- $rc = 0;
- $rs = q("SELECT * from register WHERE reg_id = %d ",
- intval($_SESSION[self::MYP]['i'][$zarat])
- );
- if ($rs && ($rs[0]['reg_flags'] & ~ 48) == 0) {
- // create account
- $rc = 'ok'.$rs[0]['reg_id'];
- $ac = create_account_from_register($rs[0]);
- if ( $ac['success'] ) {
- $rc .= '✔';
-
- $auto_create = Config::Get('system','auto_channel_create',1);
-
- if($auto_create) {
- $reonar = json_decode($rs[0]['reg_stuff'], true);
- // prepare channel creation
- if($reonar['chan.name'])
- set_aconfig($ac['account']['account_id'], 'register', 'channel_name', $reonar['chan.name']);
-
- if($reonar['chan.did1'])
- set_aconfig($ac['account']['account_id'], 'register', 'channel_address', $reonar['chan.did1']);
-
- $permissions_role = Config::Get('system','default_permissions_role');
- if($permissions_role)
- set_aconfig($ac['account']['account_id'], 'register', 'permissions_role', $permissions_role);
-
- // create channel
- $new_channel = auto_channel_create($ac['account']['account_id']);
-
- if($new_channel['success']) {
- $rc .= ' c,ok' . $new_channel['channel']['channel_id'] . '✔';
- }
- else {
- $rc .= ' c ×';
- }
- }
-
-
- }
- } else {
- $rc='oh ×';
- }
- }
- echo json_encode(array('re' => $zarop, 'at' => '_' . $zarat, 'rc' => $rc));
- }
+ if (is_ajax()) {
+ $this->handle_ajax_request();
killme();
- exit;
}
// change to switch structure?
// account block/unblock button was submitted
if (x($_POST, 'page_accounts_block')) {
- for ($i = 0; $i < count($users); $i++) {
- // if account is blocked remove blocked bit-flag, otherwise add blocked bit-flag
- $op = ($blocked[$i]) ? '& ~' : '| ';
- q("UPDATE account SET account_flags = (account_flags $op%d) WHERE account_id = %d",
- intval(ACCOUNT_BLOCKED),
- intval($users[$i])
- );
- }
- notice( sprintf( tt("%s account blocked/unblocked", "%s account blocked/unblocked", count($users)), count($users)) );
+ $this->block_unblock_accounts();
}
+
// account delete button was submitted
if (x($_POST, 'page_accounts_delete')) {
- foreach ($users as $uid){
- account_remove($uid, true, false);
- }
- notice( sprintf( tt("%s account deleted", "%s accounts deleted", count($users)), count($users)) );
+ $this->delete_accounts();
}
// registration approved button was submitted
if (x($_POST, 'page_accounts_approve')) {
@@ -351,5 +251,143 @@ class Accounts {
return $o;
}
+ private function handle_ajax_request(): void {
+ //$debug = print_r($_SESSION[self::MYP],true);
+ $zarop = (x($_POST['zardo']) && preg_match('/^[ad]{1,1}$/', $_POST['zardo']) )
+ ? $_POST['zardo'] : '';
+ // zarat arrives with leading underscore _n
+ $zarat = (x($_POST['zarat']) && preg_match('/^_{1,1}[0-9]{1,6}$/', $_POST['zarat']) )
+ ? substr($_POST['zarat'],1) : '';
+ $zarse = (x($_POST['zarse']) && preg_match('/^[0-9a-f]{8,8}$/', $_POST['zarse']) )
+ ? hex2bin($_POST['zarse']) : '';
+
+ if ($zarop && $zarat >= 0 && $zarse && $zarse == $_SESSION[self::MYP]['h'][$zarat]) {
+
+ //
+ if ($zarop == 'd') {
+ $rd = q("UPDATE register SET reg_vital = 0 WHERE reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ",
+ intval($_SESSION[self::MYP]['i'][$zarat]),
+ dbesc($_SESSION[self::MYP]['h'][$zarat])
+ );
+ $rc = '×';
+ }
+ elseif ($zarop == 'a') {
+ // approval, REGISTER_DENIED by user 0x0040, REGISTER_AGREED by user 0x0020 @Regate
+ $rd = q("UPDATE register SET reg_flags = (reg_flags & ~ 16), "
+ . " reg_vital = (CASE (reg_flags & ~ 48) WHEN 0 THEN 0 ELSE 1 END) "
+ . " WHERE reg_vital = 1 AND reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ",
+ intval($_SESSION[self::MYP]['i'][$zarat]),
+ dbesc($_SESSION[self::MYP]['h'][$zarat])
+ );
+ $rc = 0;
+ $rs = q("SELECT * from register WHERE reg_id = %d ",
+ intval($_SESSION[self::MYP]['i'][$zarat])
+ );
+ if ($rs && ($rs[0]['reg_flags'] & ~ 48) == 0) {
+ // create account
+ $rc = 'ok'.$rs[0]['reg_id'];
+ $ac = create_account_from_register($rs[0]);
+ if ( $ac['success'] ) {
+ $rc .= '✔';
+
+ $auto_create = Config::Get('system','auto_channel_create',1);
+
+ if($auto_create) {
+ $reonar = json_decode($rs[0]['reg_stuff'], true);
+ // prepare channel creation
+ if($reonar['chan.name'])
+ set_aconfig($ac['account']['account_id'], 'register', 'channel_name', $reonar['chan.name']);
+
+ if($reonar['chan.did1'])
+ set_aconfig($ac['account']['account_id'], 'register', 'channel_address', $reonar['chan.did1']);
+
+ $permissions_role = Config::Get('system','default_permissions_role');
+ if($permissions_role)
+ set_aconfig($ac['account']['account_id'], 'register', 'permissions_role', $permissions_role);
+
+ // create channel
+ $new_channel = auto_channel_create($ac['account']['account_id']);
+
+ if($new_channel['success']) {
+ $rc .= ' c,ok' . $new_channel['channel']['channel_id'] . '✔';
+ }
+ else {
+ $rc .= ' c ×';
+ }
+ }
+
+
+ }
+ } else {
+ $rc='oh ×';
+ }
+ }
+ echo json_encode(array('re' => $zarop, 'at' => '_' . $zarat, 'rc' => $rc));
+ }
+ }
+
+ /**
+ * Block or unblock accounts given by the `user` and `blocked` POST params.
+ *
+ * The post params `user` and `blocked` must be present and arrays of equal
+ * lengths. The `user` array should contain account id's or the accounts to
+ * process, and the `blocked` array holds a corresponding boolean value to
+ * indicate that the account at the same offset in the `user` array is or is
+ * not blocked.
+ *
+ * An account that is _not_ blocked will be blocked, and accounts that _are_
+ * blocked will be unblocked.
+ *
+ * @SuppressWarnings(PHPMD.ShortVariable)
+ */
+ private function block_unblock_accounts(): void {
+ if (!isset($_POST['user']) || !isset($_POST['blocked'])) {
+ return;
+ }
+
+ $users = $_POST['user'];
+ $blocked = $_POST['blocked'];
+
+ if (!is_array($users) || !is_array($blocked)) {
+ return;
+ }
+
+ foreach($users as $i => $id) {
+ // if account is blocked remove blocked bit-flag, otherwise add blocked bit-flag
+ $op = $blocked[$i] ? '& ~' : '| ';
+
+ q("UPDATE account SET account_flags = (account_flags $op%d) WHERE account_id = %d",
+ intval(ACCOUNT_BLOCKED),
+ intval($id)
+ );
+ }
+
+ $count = count($users);
+ $fmt = tt("%s account blocked/unblocked", "%s account blocked/unblocked", $count);
+ notice(sprintf($fmt, $count));
+ }
+
+ /**
+ * Delete multiple accounts given by the `user` POST param.
+ */
+ private function delete_accounts(): void {
+ if (!isset($_POST['user'])) {
+ return;
+ }
+
+ $users = $_POST['user'];
+
+ if (!is_array($users)) {
+ return;
+ }
+
+ foreach ($users as $uid){
+ account_remove($uid, true, false);
+ }
+
+ $count = count($users);
+ $fmt = tt("%s account deleted", "%s accounts deleted", $count);
+ notice(sprintf($fmt, $count));
+ }
}
diff --git a/Zotlabs/Module/Admin/Addons.php b/Zotlabs/Module/Admin/Addons.php
index b7cfb651c..0cb173e7c 100644
--- a/Zotlabs/Module/Admin/Addons.php
+++ b/Zotlabs/Module/Admin/Addons.php
@@ -3,9 +3,8 @@
namespace Zotlabs\Module\Admin;
use App;
-use \Zotlabs\Lib\Config;
-use \Zotlabs\Storage\GitRepo;
-use \Michelf\MarkdownExtra;
+use Zotlabs\Lib\Config;
+use Michelf\MarkdownExtra;
class Addons {
@@ -24,227 +23,6 @@ class Addons {
goaway(z_root() . '/admin/addons/' . argv(2) );
}
- elseif(argc() > 2) {
- switch(argv(2)) {
- case 'updaterepo':
- if (array_key_exists('repoName', $_REQUEST)) {
- $repoName = $_REQUEST['repoName'];
- }
- else {
- json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
- }
- $extendDir = 'store/[data]/git/sys/extend';
- $addonDir = $extendDir . '/addon';
- if (!file_exists($extendDir)) {
- if (!mkdir($extendDir, 0770, true)) {
- logger('Error creating extend folder: ' . $extendDir);
- json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
- }
- else {
- if (!symlink(realpath('extend/addon'), $addonDir)) {
- logger('Error creating symlink to addon folder: ' . $addonDir);
- json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
- }
- }
- }
- $repoDir = 'store/[data]/git/sys/extend/addon/' . $repoName;
- if (!is_dir($repoDir)) {
- logger('Repo directory does not exist: ' . $repoDir);
- json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
- }
- if (!is_writable($repoDir)) {
- logger('Repo directory not writable to web server: ' . $repoDir);
- json_return_and_die(array('message' => 'Repo directory not writable to web server.', 'success' => false));
- }
- $git = new GitRepo('sys', null, false, $repoName, $repoDir);
- try {
- if ($git->pull()) {
- $files = array_diff(scandir($repoDir), array('.', '..'));
- foreach ($files as $file) {
- if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
- $source = '../extend/addon/' . $repoName . '/' . $file;
- $target = realpath('addon/') . '/' . $file;
- unlink($target);
- if (!symlink($source, $target)) {
- logger('Error linking addons to /addon');
- json_return_and_die(array('message' => 'Error linking addons to /addon', 'success' => false));
- }
- }
- }
- json_return_and_die(array('message' => 'Repo updated.', 'success' => true));
- } else {
- json_return_and_die(array('message' => 'Error updating addon repo.', 'success' => false));
- }
- } catch (\PHPGit\Exception\GitException $e) {
- json_return_and_die(array('message' => 'Error updating addon repo.', 'success' => false));
- }
- break;
- case 'removerepo':
- if (array_key_exists('repoName', $_REQUEST)) {
- $repoName = $_REQUEST['repoName'];
- } else {
- json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
- }
- $extendDir = 'store/[data]/git/sys/extend';
- $addonDir = $extendDir . '/addon';
- if (!file_exists($extendDir)) {
- if (!mkdir($extendDir, 0770, true)) {
- logger('Error creating extend folder: ' . $extendDir);
- json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
- } else {
- if (!symlink(realpath('extend/addon'), $addonDir)) {
- logger('Error creating symlink to addon folder: ' . $addonDir);
- json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
- }
- }
- }
- $repoDir = 'store/[data]/git/sys/extend/addon/' . $repoName;
- if (!is_dir($repoDir)) {
- logger('Repo directory does not exist: ' . $repoDir);
- json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
- }
- if (!is_writable($repoDir)) {
- logger('Repo directory not writable to web server: ' . $repoDir);
- json_return_and_die(array('message' => 'Repo directory not writable to web server.', 'success' => false));
- }
- /// @TODO remove directory and unlink /addon/files
- if (rrmdir($repoDir)) {
- json_return_and_die(array('message' => 'Repo deleted.', 'success' => true));
- } else {
- json_return_and_die(array('message' => 'Error deleting addon repo.', 'success' => false));
- }
- break;
- case 'installrepo':
- if (array_key_exists('repoURL', $_REQUEST)) {
- require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
- $repoURL = $_REQUEST['repoURL'];
- $extendDir = 'store/[data]/git/sys/extend';
- $addonDir = $extendDir . '/addon';
- if (!file_exists($extendDir)) {
- if (!mkdir($extendDir, 0770, true)) {
- logger('Error creating extend folder: ' . $extendDir);
- json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
- } else {
- if (!symlink(realpath('extend/addon'), $addonDir)) {
- logger('Error creating symlink to addon folder: ' . $addonDir);
- json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
- }
- }
- }
- if (!is_writable($extendDir)) {
- logger('Directory not writable to web server: ' . $extendDir);
- json_return_and_die(array('message' => 'Directory not writable to web server.', 'success' => false));
- }
- $repoName = null;
- if (array_key_exists('repoName', $_REQUEST) && $_REQUEST['repoName'] !== '') {
- $repoName = $_REQUEST['repoName'];
- } else {
- $repoName = GitRepo::getRepoNameFromURL($repoURL);
- }
- if (!$repoName) {
- logger('Invalid git repo');
- json_return_and_die(array('message' => 'Invalid git repo', 'success' => false));
- }
- $repoDir = $addonDir . '/' . $repoName;
- $tempRepoBaseDir = 'store/[data]/git/sys/temp/';
- $tempAddonDir = $tempRepoBaseDir . $repoName;
-
- if (!is_writable($addonDir) || !is_writable($tempAddonDir)) {
- logger('Temp repo directory or /extend/addon not writable to web server: ' . $tempAddonDir);
- json_return_and_die(array('message' => 'Temp repo directory not writable to web server.', 'success' => false));
- }
- rename($tempAddonDir, $repoDir);
-
- if (!is_writable(realpath('addon/'))) {
- logger('/addon directory not writable to web server: ' . $tempAddonDir);
- json_return_and_die(array('message' => '/addon directory not writable to web server.', 'success' => false));
- }
- $files = array_diff(scandir($repoDir), array('.', '..'));
- foreach ($files as $file) {
- if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
- $source = '../extend/addon/' . $repoName . '/' . $file;
- $target = realpath('addon/') . '/' . $file;
- unlink($target);
- if (!symlink($source, $target)) {
- logger('Error linking addons to /addon');
- json_return_and_die(array('message' => 'Error linking addons to /addon', 'success' => false));
- }
- }
- }
- $git = new GitRepo('sys', $repoURL, false, $repoName, $repoDir);
- $repo = $git->probeRepo();
- json_return_and_die(array('repo' => $repo, 'message' => '', 'success' => true));
- }
- break;
- case 'addrepo':
- if (array_key_exists('repoURL', $_REQUEST)) {
- require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
- $repoURL = $_REQUEST['repoURL'];
- $extendDir = 'store/[data]/git/sys/extend';
- $addonDir = $extendDir . '/addon';
- $tempAddonDir = realpath('store/[data]') . '/git/sys/temp';
- if (!file_exists($extendDir)) {
- if (!mkdir($extendDir, 0770, true)) {
- logger('Error creating extend folder: ' . $extendDir);
- json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
- } else {
- if (!symlink(realpath('extend/addon'), $addonDir)) {
- logger('Error creating symlink to addon folder: ' . $addonDir);
- json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
- }
- }
- }
- if (!is_dir($tempAddonDir)) {
- if (!mkdir($tempAddonDir, 0770, true)) {
- logger('Error creating temp plugin repo folder: ' . $tempAddonDir);
- json_return_and_die(array('message' => 'Error creating temp plugin repo folder: ' . $tempAddonDir, 'success' => false));
- }
- }
- $repoName = null;
- if (array_key_exists('repoName', $_REQUEST) && $_REQUEST['repoName'] !== '') {
- $repoName = $_REQUEST['repoName'];
- } else {
- $repoName = GitRepo::getRepoNameFromURL($repoURL);
- }
- if (!$repoName) {
- logger('Invalid git repo');
- json_return_and_die(array('message' => 'Invalid git repo: ' . $repoName, 'success' => false));
- }
- $repoDir = $tempAddonDir . '/' . $repoName;
- if (!is_writable($tempAddonDir)) {
- logger('Temporary directory for new addon repo is not writable to web server: ' . $tempAddonDir);
- json_return_and_die(array('message' => 'Temporary directory for new addon repo is not writable to web server.', 'success' => false));
- }
- // clone the repo if new automatically
- $git = new GitRepo('sys', $repoURL, true, $repoName, $repoDir);
-
- $remotes = $git->git->remote();
- $fetchURL = $remotes['origin']['fetch'];
- if ($fetchURL !== $git->url) {
- if (rrmdir($repoDir)) {
- $git = new GitRepo('sys', $repoURL, true, $repoName, $repoDir);
- } else {
- json_return_and_die(array('message' => 'Error deleting existing addon repo.', 'success' => false));
- }
- }
- $repo = $git->probeRepo();
- $repo['readme'] = $repo['manifest'] = null;
- foreach ($git->git->tree('master') as $object) {
- if ($object['type'] == 'blob' && (strtolower($object['file']) === 'readme.md' || strtolower($object['file']) === 'readme')) {
- $repo['readme'] = MarkdownExtra::defaultTransform($git->git->cat->blob($object['hash']));
- } else if ($object['type'] == 'blob' && strtolower($object['file']) === 'manifest.json') {
- $repo['manifest'] = $git->git->cat->blob($object['hash']);
- }
- }
- json_return_and_die(array('repo' => $repo, 'message' => '', 'success' => true));
- } else {
- json_return_and_die(array('message' => 'No repo URL provided', 'success' => false));
- }
- break;
- default:
- break;
- }
- }
}
/**
@@ -408,37 +186,6 @@ class Addons {
usort($plugins,'self::plugin_sort');
- $allowManageRepos = false;
- if(is_writable('extend/addon') && is_writable('store/[data]')) {
- $allowManageRepos = true;
- }
-
- $admin_plugins_add_repo_form= replace_macros(
- get_markup_template('admin_plugins_addrepo.tpl'), array(
- '$post' => 'admin/addons/addrepo',
- '$desc' => t('Enter the public git repository URL of the addon repo.'),
- '$repoURL' => array('repoURL', t('Addon repo git URL'), '', ''),
- '$repoName' => array('repoName', t('Custom repo name'), '', '', t('(optional)')),
- '$submit' => t('Download Addon Repo')
- )
- );
- $newRepoModalID = random_string(3);
- $newRepoModal = replace_macros(
- get_markup_template('generic_modal.tpl'), array(
- '$id' => $newRepoModalID,
- '$title' => t('Install new repo'),
- '$ok' => t('Install'),
- '$cancel' => t('Cancel')
- )
- );
-
- $reponames = $this->listAddonRepos();
- $addonrepos = [];
- foreach($reponames as $repo) {
- $addonrepos[] = array('name' => $repo, 'description' => '');
- /// @TODO Parse repo info to provide more information about repos
- }
-
$t = get_markup_template('admin_plugins.tpl');
return replace_macros($t, array(
'$title' => t('Administration'),
@@ -449,37 +196,9 @@ class Addons {
'$plugins' => $plugins,
'$disabled' => t('Disabled - version incompatibility'),
'$form_security_token' => get_form_security_token('admin_addons'),
- '$allowManageRepos' => $allowManageRepos,
- '$managerepos' => t('Manage Repos'),
- '$installedtitle' => t('Installed Addon Repositories'),
- '$addnewrepotitle' => t('Install a New Addon Repository'),
- '$expandform' => false,
- '$form' => $admin_plugins_add_repo_form,
- '$newRepoModal' => $newRepoModal,
- '$newRepoModalID' => $newRepoModalID,
- '$addonrepos' => $addonrepos,
- '$repoUpdateButton' => t('Update'),
- '$repoBranchButton' => t('Switch branch'),
- '$repoRemoveButton' => t('Remove')
));
}
- function listAddonRepos() {
- $addonrepos = [];
- $addonDir = 'extend/addon/';
- if(is_dir($addonDir)) {
- if ($handle = opendir($addonDir)) {
- while (false !== ($entry = readdir($handle))) {
- if ($entry != "." && $entry != "..") {
- $addonrepos[] = $entry;
- }
- }
- closedir($handle);
- }
- }
- return $addonrepos;
- }
-
static public function plugin_sort($a,$b) {
return(strcmp(strtolower($a[2]['name']),strtolower($b[2]['name'])));
}
diff --git a/Zotlabs/Module/Admin/Features.php b/Zotlabs/Module/Admin/Features.php
index e0b3a3fd4..eb82ae1ff 100644
--- a/Zotlabs/Module/Admin/Features.php
+++ b/Zotlabs/Module/Admin/Features.php
@@ -59,14 +59,13 @@ class Features {
}
$tpl = get_markup_template("admin_settings_features.tpl");
- $o .= replace_macros($tpl, array(
+
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("admin_manage_features"),
'$title' => t('Manage Additional Features'),
'$features' => $arr,
'$submit' => t('Submit'),
));
-
- return $o;
}
}
diff --git a/Zotlabs/Module/Admin/Site.php b/Zotlabs/Module/Admin/Site.php
index abc56d298..9ef5dc20f 100644
--- a/Zotlabs/Module/Admin/Site.php
+++ b/Zotlabs/Module/Admin/Site.php
@@ -6,6 +6,8 @@ use Zotlabs\Lib\Config;
class Site {
+ private string $eol;
+ private string $joo;
/**
* @brief POST handler for Admin Site Page.
@@ -208,7 +210,6 @@ class Site {
//Config::Set('system','force_queue_threshold', $force_queue);
Config::Set('system','no_community_page', $no_community_page);
- Config::Set('system','no_utf', $no_utf);
Config::Set('system','sse_enabled', $sse_enabled);
diff --git a/Zotlabs/Module/Admin/Themes.php b/Zotlabs/Module/Admin/Themes.php
index 6793f56b1..09fec9725 100644
--- a/Zotlabs/Module/Admin/Themes.php
+++ b/Zotlabs/Module/Admin/Themes.php
@@ -2,7 +2,7 @@
namespace Zotlabs\Module\Admin;
-use \Michelf\MarkdownExtra;
+use Michelf\MarkdownExtra;
use Zotlabs\Lib\Config;
/**
diff --git a/Zotlabs/Module/Api.php b/Zotlabs/Module/Api.php
index 8574ae1cd..c3337b501 100644
--- a/Zotlabs/Module/Api.php
+++ b/Zotlabs/Module/Api.php
@@ -108,6 +108,9 @@ class Api extends \Zotlabs\Web\Controller {
echo api_call();
killme();
+
+ // not reached
+ return;
}
function oauth_get_client($request){
diff --git a/Zotlabs/Module/Apporder.php b/Zotlabs/Module/Apporder.php
index 313c2df50..579ca738c 100644
--- a/Zotlabs/Module/Apporder.php
+++ b/Zotlabs/Module/Apporder.php
@@ -2,7 +2,7 @@
namespace Zotlabs\Module;
-use \Zotlabs\Lib as Zlib;
+use Zotlabs\Lib as Zlib;
class Apporder extends \Zotlabs\Web\Controller {
@@ -25,7 +25,7 @@ class Apporder extends \Zotlabs\Web\Controller {
$syslist[] = Zlib\Apps::app_encode($li);
}
}
-
+
Zlib\Apps::translate_system_apps($syslist);
usort($syslist,'Zotlabs\\Lib\\Apps::app_name_compare');
diff --git a/Zotlabs/Module/Apps.php b/Zotlabs/Module/Apps.php
index a8817111e..97e1b237f 100644
--- a/Zotlabs/Module/Apps.php
+++ b/Zotlabs/Module/Apps.php
@@ -1,8 +1,8 @@
<?php
namespace Zotlabs\Module;
-use \Zotlabs\Lib\Config;
-use \Zotlabs\Lib as Zlib;
+use Zotlabs\Lib\Config;
+use Zotlabs\Lib as Zlib;
class Apps extends \Zotlabs\Web\Controller {
diff --git a/Zotlabs/Module/Authorize.php b/Zotlabs/Module/Authorize.php
index c6709f602..b015c3284 100644
--- a/Zotlabs/Module/Authorize.php
+++ b/Zotlabs/Module/Authorize.php
@@ -9,7 +9,7 @@ class Authorize extends \Zotlabs\Web\Controller {
function get() {
if (! local_channel()) {
return login();
- }
+ }
else {
$name = $_REQUEST['client_name'];
@@ -25,7 +25,7 @@ class Authorize extends \Zotlabs\Web\Controller {
$link = (($app['url']) ? '<a style="float: none;" href="' . $app['url'] . '">' . $app['name'] . '</a> ' : $app['name']);
- $o .= replace_macros(get_markup_template('oauth_authorize.tpl'), [
+ return replace_macros(get_markup_template('oauth_authorize.tpl'), [
'$title' => t('Authorize'),
'$authorize' => sprintf( t('Do you authorize the app %s to access your channel data?'), $link ),
'$app' => $app,
@@ -35,7 +35,6 @@ class Authorize extends \Zotlabs\Web\Controller {
'$redirect_uri' => (x($_REQUEST, 'redirect_uri') ? $_REQUEST['redirect_uri'] : ''),
'$state' => (x($_REQUEST, 'state') ? $_REQUEST['state'] : ''),
]);
- return $o;
}
}
@@ -50,7 +49,7 @@ class Authorize extends \Zotlabs\Web\Controller {
// TODO: The automatic client registration protocol below should adhere more
// closely to "OAuth 2.0 Dynamic Client Registration Protocol" defined
// at https://tools.ietf.org/html/rfc7591
-
+
// If no client_id was provided, generate a new one.
if (x($_POST, 'client_id')) {
$client_id = $_POST['client_id'];
@@ -67,7 +66,7 @@ class Authorize extends \Zotlabs\Web\Controller {
$request = \OAuth2\Request::createFromGlobals();
$response = new \OAuth2\Response();
- // Note, "sub" field must match type and content. $user_id is used to populate - make sure it's a string.
+ // Note, "sub" field must match type and content. $user_id is used to populate - make sure it's a string.
$channel = channelx_by_n(local_channel());
$user_id = $channel['channel_id'];
diff --git a/Zotlabs/Module/Authtest.php b/Zotlabs/Module/Authtest.php
index d85af09dc..bf199ccf6 100644
--- a/Zotlabs/Module/Authtest.php
+++ b/Zotlabs/Module/Authtest.php
@@ -7,7 +7,7 @@ class Authtest extends \Zotlabs\Web\Controller {
$auth_success = false;
- $o .= '<h3>Magic-Auth Diagnostic</h3>';
+ $o = '<h3>Magic-Auth Diagnostic</h3>';
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
@@ -27,7 +27,7 @@ class Authtest extends \Zotlabs\Web\Controller {
$_REQUEST['test'] = 1;
$mod = new Magic();
- $x = $mod->init($a);
+ $x = $mod->init();
$o .= 'Local Setup returns: ' . print_r($x,true);
diff --git a/Zotlabs/Module/Changeaddr.php b/Zotlabs/Module/Changeaddr.php
index ed139c9f9..f8a045727 100644
--- a/Zotlabs/Module/Changeaddr.php
+++ b/Zotlabs/Module/Changeaddr.php
@@ -5,30 +5,30 @@ namespace Zotlabs\Module;
class Changeaddr extends \Zotlabs\Web\Controller {
function post() {
-
+
if(! local_channel())
return;
-
+
if($_SESSION['delegate'])
return;
-
+
if((! x($_POST,'qxz_password')) || (! strlen(trim($_POST['qxz_password']))))
return;
-
+
if((! x($_POST,'verify')) || (! strlen(trim($_POST['verify']))))
return;
-
+
if($_POST['verify'] !== $_SESSION['remove_account_verify'])
return;
-
-
+
+
$account = \App::get_account();
$channel = \App::get_channel();
-
+
$x = account_verify_password($account['account_email'],$_POST['qxz_password']);
if(! ($x && $x['account']))
return;
-
+
if($account['account_password_changed'] > NULL_DATE) {
$d1 = datetime_convert('UTC','UTC','now - 48 hours');
if($account['account_password_changed'] > $d1) {
@@ -36,7 +36,7 @@ class Changeaddr extends \Zotlabs\Web\Controller {
return;
}
}
-
+
$new_address = trim($_POST['newname']);
if($new_address === $channel['channel_address'])
@@ -55,23 +55,23 @@ class Changeaddr extends \Zotlabs\Web\Controller {
channel_change_address($channel,$new_address);
goaway(z_root() . '/changeaddr');
-
+
}
-
-
+
+
function get() {
-
+
if(! local_channel())
goaway(z_root());
-
+
$channel = \App::get_channel();
$hash = random_string();
-
+
$_SESSION['remove_account_verify'] = $hash;
-
+
$tpl = get_markup_template('channel_rename.tpl');
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$basedir' => z_root(),
'$hash' => $hash,
'$title' => t('Change channel nickname/address'),
@@ -80,9 +80,5 @@ class Changeaddr extends \Zotlabs\Web\Controller {
'$newname' => array('newname', t('New channel address'),$channel['channel_address'], ''),
'$submit' => t('Rename Channel')
));
-
- return $o;
-
}
-
}
diff --git a/Zotlabs/Module/Channel_calendar.php b/Zotlabs/Module/Channel_calendar.php
index 289e3a734..30683404b 100644
--- a/Zotlabs/Module/Channel_calendar.php
+++ b/Zotlabs/Module/Channel_calendar.php
@@ -179,26 +179,14 @@ class Channel_calendar extends Controller {
if ($post_tags)
$datarray['term'] = $post_tags;
- $item_id = event_store_item($datarray, $event);
+ $post = event_store_item($datarray, $event);
- if ($item_id) {
- $r = q("select * from item where id = %d",
- intval($item_id)
- );
- if ($r) {
- xchan_query($r);
- $sync_item = fetch_post_tags($r);
- $z = q("select * from event where event_hash = '%s' and uid = %d limit 1",
- dbesc($r[0]['resource_id']),
- intval($channel['channel_id'])
- );
- if ($z) {
- Libsync::build_sync_packet($channel['channel_id'], array('event_item' => array(encode_item($sync_item[0], true)), 'event' => $z));
- }
- }
+ if (!empty($post['item_id'])) {
+ Master::Summon(['Notifier', 'event', $post['item_id']]);
+ }
+ if (!empty($post['approval_id'])) {
+ Master::Summon(['Notifier', 'event', $post['approval_id']]);
}
-
- Master::Summon(array('Notifier', 'event', $item_id));
killme();
@@ -470,13 +458,14 @@ class Channel_calendar extends Controller {
}
else {
// complex deletion that needs to propagate and be performed in phases
- drop_item($i[0]['id'], true, DROPITEM_PHASE1);
+ drop_item($i[0]['id'], DROPITEM_PHASE1);
$complex = true;
}
$ii = q("select * from item where id = %d",
intval($i[0]['id'])
);
+
if ($ii) {
xchan_query($ii);
$sync_item = fetch_post_tags($ii);
@@ -485,6 +474,9 @@ class Channel_calendar extends Controller {
if ($complex) {
tag_deliver($i[0]['uid'], $i[0]['id']);
+ if (intval($i[0]['item_wall'])) {
+ Master::Summon(['Notifier', 'drop', $i[0]['id']]);
+ }
}
}
}
diff --git a/Zotlabs/Module/Chatsvc.php b/Zotlabs/Module/Chatsvc.php
index 2f2784fc4..e9dfb2a4b 100644
--- a/Zotlabs/Module/Chatsvc.php
+++ b/Zotlabs/Module/Chatsvc.php
@@ -4,7 +4,7 @@ namespace Zotlabs\Module;
require_once('include/security.php');
-use \Zotlabs\Lib as Zlib;
+use Zotlabs\Lib as Zlib;
class Chatsvc extends \Zotlabs\Web\Controller {
diff --git a/Zotlabs/Module/Cloud.php b/Zotlabs/Module/Cloud.php
index 527b06b3a..510f91c1e 100644
--- a/Zotlabs/Module/Cloud.php
+++ b/Zotlabs/Module/Cloud.php
@@ -8,10 +8,10 @@ namespace Zotlabs\Module;
*/
use Sabre\DAV as SDAV;
-use \Zotlabs\Web\Controller;
-use \Zotlabs\Storage\BasicAuth;
-use \Zotlabs\Storage\Directory;
-use \Zotlabs\Storage\Browser;
+use Zotlabs\Web\Controller;
+use Zotlabs\Storage\BasicAuth;
+use Zotlabs\Storage\Directory;
+use Zotlabs\Storage\Browser;
// composer autoloader for SabreDAV
diff --git a/Zotlabs/Module/Conversation.php b/Zotlabs/Module/Conversation.php
index aa8349f55..0a1ba87d1 100644
--- a/Zotlabs/Module/Conversation.php
+++ b/Zotlabs/Module/Conversation.php
@@ -16,7 +16,7 @@ class Conversation extends Controller {
public function init() {
- if (ActivityStreams::is_as_request()) {
+ if (ActivityStreams::is_as_request() || Libzot::is_zot_request()) {
$item_id = argv(1);
if (!$item_id) {
@@ -30,14 +30,13 @@ class Conversation extends Controller {
dbesc(ACTIVITY_UNFOLLOW)
);
- $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 $item_normal_extra ";
+ $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 and item.item_uplink = 0 $item_normal_extra ";
$i = null;
// do we have the item (at all)?
- $r = q("select parent_mid from item where mid = '%s' or uuid = '%s' $item_normal order by item_wall desc limit 1",
- dbesc(z_root() . '/item/' . $item_id),
+ $r = q("select parent_mid from item where uuid = '%s' $item_normal order by item_wall desc limit 1",
dbesc($item_id)
);
@@ -77,16 +76,16 @@ class Conversation extends Controller {
}
}
}
- elseif (Config::get('system', 'require_authenticated_fetch', false)) {
+ elseif (Config::Get('system', 'require_authenticated_fetch', false)) {
http_status_exit(403, 'Permission denied');
}
// if we don't have a parent id belonging to the signer see if we can obtain one as a visitor that we have permission to access
// with a bias towards those items owned by channels on this site (item_wall = 1)
- $sql_extra = item_permissions_sql(0);
-
if (!$i) {
+ $sql_extra = item_permissions_sql(0);
+
$i = q("select id as item_id from item where mid = '%s' $item_normal $sql_extra order by item_wall desc limit 1",
dbesc($r[0]['parent_mid'])
);
diff --git a/Zotlabs/Module/Cover_photo.php b/Zotlabs/Module/Cover_photo.php
index aa2464ac2..2d2ffd52d 100644
--- a/Zotlabs/Module/Cover_photo.php
+++ b/Zotlabs/Module/Cover_photo.php
@@ -371,7 +371,7 @@ class Cover_photo extends \Zotlabs\Web\Controller {
$tpl = get_markup_template('cover_photo.tpl');
- $o .= replace_macros($tpl,array(
+ $output = replace_macros($tpl,array(
'$user' => \App::$channel['channel_address'],
'$info' => t('Your cover photo may be visible to anybody on the internet'),
'$existing' => get_cover_photo(local_channel(),'array',PHOTO_RES_COVER_850),
@@ -397,15 +397,15 @@ class Cover_photo extends \Zotlabs\Web\Controller {
));
- call_hooks('cover_photo_content_end', $o);
+ call_hooks('cover_photo_content_end', $output);
- return $o;
+ return $output;
}
else {
$filename = \App::$data['imagecrop'] . '-3';
$resolution = 3;
$tpl = get_markup_template("cropcover.tpl");
- $o .= replace_macros($tpl,array(
+ return replace_macros($tpl,array(
'$filename' => $filename,
'$profile' => intval($_REQUEST['profile']),
'$resource' => \App::$data['imagecrop'] . '-3',
@@ -415,7 +415,6 @@ class Cover_photo extends \Zotlabs\Web\Controller {
'$form_security_token' => get_form_security_token("cover_photo"),
'$done' => t('Done Editing')
));
- return $o;
}
}
diff --git a/Zotlabs/Module/Dav.php b/Zotlabs/Module/Dav.php
index 96fe2c898..5254d436d 100644
--- a/Zotlabs/Module/Dav.php
+++ b/Zotlabs/Module/Dav.php
@@ -9,6 +9,7 @@
namespace Zotlabs\Module;
use Sabre\DAV as SDAV;
+use Zotlabs\Lib\Libzot;
use Zotlabs\Storage;
use Zotlabs\Web\HTTPSig;
diff --git a/Zotlabs/Module/Display.php b/Zotlabs/Module/Display.php
index 451ddeb1f..090e0c92e 100644
--- a/Zotlabs/Module/Display.php
+++ b/Zotlabs/Module/Display.php
@@ -344,7 +344,12 @@ class Display extends Controller {
'$profile_page' => xmlify(z_root() . '/display/' . gen_link_id($target_item['mid'])),
));
- $x = [ 'xml' => $atom, 'channel' => $channel, 'observer_hash' => $observer_hash, 'params' => $params ];
+ $x = [
+ 'xml' => $atom,
+ 'channel' => $channel,
+ 'observer_hash' => $observer_hash,
+ 'params' => [],
+ ];
call_hooks('atom_feed_top',$x);
$atom = $x['xml'];
diff --git a/Zotlabs/Module/Dreport.php b/Zotlabs/Module/Dreport.php
index 5db607545..d1ffb8027 100644
--- a/Zotlabs/Module/Dreport.php
+++ b/Zotlabs/Module/Dreport.php
@@ -19,7 +19,7 @@ class Dreport extends \Zotlabs\Web\Controller {
$table = 'push';
if($mid) {
- $i = q("select id from item where mid = '%s' and uid = %d and ( author_xchan = '%s' or ( owner_xchan = '%s' and item_wall = 1 )) ",
+ $i = q("select * from item where mid = '%s' and uid = %d and ( author_xchan = '%s' or ( owner_xchan = '%s' and item_wall = 1 )) ",
dbesc($mid),
intval($channel['channel_id']),
dbesc($channel['channel_hash']),
@@ -27,6 +27,12 @@ class Dreport extends \Zotlabs\Web\Controller {
);
if($i) {
\Zotlabs\Daemon\Master::Summon([ 'Notifier', 'edit_post', $i[0]['id'] ]);
+
+ $relatedItem = find_related($i[0]);
+ if (isset($relatedItem['id'])) {
+ \Zotlabs\Daemon\Master::Summon([ 'Notifier', 'edit_post', $relatedItem['id'] ]);
+ }
+
}
}
sleep(3);
diff --git a/Zotlabs/Module/Editpost.php b/Zotlabs/Module/Editpost.php
index 6f524cdb8..678ceb207 100644
--- a/Zotlabs/Module/Editpost.php
+++ b/Zotlabs/Module/Editpost.php
@@ -86,6 +86,7 @@ class Editpost extends \Zotlabs\Web\Controller {
'bbco_autocomplete'=> 'bbcode',
'return_path' => 'hq',
'button' => t('Submit'),
+ 'disable_comments' => (($itm[0]['item_thread_top']) ? false : true),
'hide_voting' => true,
'hide_future' => true,
'hide_location' => true,
diff --git a/Zotlabs/Module/Fbrowser.php b/Zotlabs/Module/Fbrowser.php
index 3bac81c5a..e8517e095 100644
--- a/Zotlabs/Module/Fbrowser.php
+++ b/Zotlabs/Module/Fbrowser.php
@@ -6,6 +6,8 @@ namespace Zotlabs\Module;
* @author Fabio Comuni <fabrixxm@kirgroup.com>
*/
+use function Zotlabs\Render\template_escape;
+
require_once('include/photo/photo_driver.php');
/**
diff --git a/Zotlabs/Module/Filer.php b/Zotlabs/Module/Filer.php
index c2747e6c2..bf472eb67 100644
--- a/Zotlabs/Module/Filer.php
+++ b/Zotlabs/Module/Filer.php
@@ -1,43 +1,54 @@
<?php
namespace Zotlabs\Module;
-require_once('include/security.php');
-require_once('include/bbcode.php');
-require_once('include/items.php');
-
-
+use App;
class Filer extends \Zotlabs\Web\Controller {
function get() {
-
- if(! local_channel()) {
+
+ if(!local_channel()) {
killme();
}
-
- $term = unxmlify(trim($_GET['term']));
- $item_id = ((\App::$argc > 1) ? intval(\App::$argv[1]) : 0);
-
+
+ $term = unxmlify(trim($_GET['term'] ?? ''));
+ $item_id = ((App::$argc > 1) ? intval(App::$argv[1]) : 0);
+
logger('filer: tag ' . $term . ' item ' . $item_id);
-
+
if($item_id && strlen($term)){
+
+ $sys = get_sys_channel();
+
+ $r = q("SELECT * FROM item WHERE (uid = %d OR uid = %d) AND id = %d
+ and item_type in (0,6,7) and item_deleted = 0 and item_unpublished = 0
+ and item_delayed = 0 and item_pending_remove = 0 and item_blocked = 0 LIMIT 1",
+ intval(local_channel()),
+ intval($sys['channel_id']),
+ intval($item_id)
+ );
+
+ if ($r && $r[0]['uid'] === $sys['channel_id']) {
+ $r = [copy_of_pubitem(App::get_channel(), $r[0]['mid'])];
+ }
+
+ if(!$r) {
+ killme();
+ }
+
+ $item_id = $r[0]['id'];
+
// file item
store_item_tag(local_channel(),$item_id,TERM_OBJ_POST,TERM_FILE,$term,'');
-
+
// protect the entire conversation from periodic expiration
-
- $r = q("select parent from item where id = %d and uid = %d limit 1",
- intval($item_id),
+
+ q("update item set item_retained = 1, changed = '%s' where id = %d and uid = %d",
+ dbesc(datetime_convert()),
+ intval($r[0]['parent']),
intval(local_channel())
);
- if($r) {
- $x = q("update item set item_retained = 1, changed = '%s' where id = %d and uid = %d",
- dbesc(datetime_convert()),
- intval($r[0]['parent']),
- intval(local_channel())
- );
- }
- }
+ }
else {
$filetags = array();
$r = q("select distinct(term) from term where uid = %d and ttype = %d order by term asc",
@@ -55,10 +66,10 @@ class Filer extends \Zotlabs\Web\Controller {
'$title' => t('Save to Folder'),
'$cancel' => t('Cancel')
));
-
+
echo $o;
}
killme();
}
-
+
}
diff --git a/Zotlabs/Module/Go.php b/Zotlabs/Module/Go.php
index ec528fb1a..77a3ffac6 100644
--- a/Zotlabs/Module/Go.php
+++ b/Zotlabs/Module/Go.php
@@ -2,7 +2,7 @@
namespace Zotlabs\Module;
-use Zorlabs\Lib\Config;
+use Zotlabs\Lib\Config;
class Go extends \Zotlabs\Web\Controller {
@@ -19,7 +19,7 @@ class Go extends \Zotlabs\Web\Controller {
function get() {
if(! local_channel()) {
- notify( t('This page is available only to site members') . EOL);
+ notice( t('This page is available only to site members') . EOL);
}
$channel = \App::get_channel();
diff --git a/Zotlabs/Module/Home.php b/Zotlabs/Module/Home.php
index 691ca1af9..3ac445f9f 100644
--- a/Zotlabs/Module/Home.php
+++ b/Zotlabs/Module/Home.php
@@ -100,14 +100,25 @@ class Home extends Controller {
goaway($frontpage);
}
+ $o .= '<div class="generic-content-wrapper">';
+
$sitename = Config::Get('system', 'sitename');
- if ($sitename)
- $o .= '<h1 class="home-welcome">' . sprintf(t('Welcome to %s'), $sitename) . '</h1>';
+ if ($sitename) {
+ $o .= '<div class="section-title-wrapper">';
+ $o .= '<h2 class="">' . sprintf(t('Welcome to %s'), $sitename) . '</h2>';
+ $o .= '</div>';
+
+ }
+
+ $o .= '<div class="section-content-wrapper">';
$loginbox = Config::Get('system', 'login_on_homepage');
if (intval($loginbox) || $loginbox === false)
$o .= login(true);
+ $o .= '</div>';
+ $o .= '</div>';
+
return $o;
}
diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php
index c8e6efe38..51caa179c 100644
--- a/Zotlabs/Module/Hq.php
+++ b/Zotlabs/Module/Hq.php
@@ -230,6 +230,7 @@ class Hq extends \Zotlabs\Web\Controller {
$options['offset'] = $_REQUEST['offset'] ?? 0;
$options['type'] = $_REQUEST['type'] ?? '';
$options['author'] = ((isset($_REQUEST['author'])) ? urldecode($_REQUEST['author']) : '');
+ $options['file'] = ((isset($_REQUEST['file'])) ? urldecode($_REQUEST['file']) : '');
$ret = Messages::get_messages_page($options);
diff --git a/Zotlabs/Module/Impel.php b/Zotlabs/Module/Impel.php
index 869de2669..0e07ab71c 100644
--- a/Zotlabs/Module/Impel.php
+++ b/Zotlabs/Module/Impel.php
@@ -164,7 +164,7 @@ class Impel extends \Zotlabs\Web\Controller {
$arr['id'] = $i[0]['id'];
// don't update if it has the same timestamp as the original
if($arr['edited'] > $i[0]['edited'])
- $x = item_store_update($arr,$execflag);
+ $x = item_store_update($arr, $execflag , deliver: false, addAndSync: false);
}
else {
if(($i) && (intval($i[0]['item_deleted']))) {
@@ -175,7 +175,7 @@ class Impel extends \Zotlabs\Web\Controller {
);
}
else
- $x = item_store($arr,$execflag);
+ $x = item_store($arr, $execflag, deliver: false, addAndSync: false);
}
if($x && $x['success']) {
diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php
index 5ace4e72d..7aed6469e 100644
--- a/Zotlabs/Module/Import.php
+++ b/Zotlabs/Module/Import.php
@@ -534,6 +534,7 @@ class Import extends Controller {
if ($api_path) {
$parsed = parse_url($api_path);
unset($parsed['path']);
+ unset($parsed['query']);
// store the import host so we can manually kick off item/file sync later in case anything did not work out
set_pconfig($channel['channel_id'], 'import', 'host', $parsed['host']);
@@ -551,7 +552,7 @@ class Import extends Controller {
$until = datetime_convert(date_default_timezone_get(), date_default_timezone_get(), 'now + 1 day');
//$poll_interval = Config::Get('system', 'poll_interval', 3);
- $page = 0;
+ $page = 0;
Master::Summon(['Content_importer', sprintf('%d', $page), $since, $until, $channel['channel_address'], urlencode($hz_server)]);
Master::Summon(['File_importer', sprintf('%d', $page), $channel['channel_address'], urlencode($hz_server)]);
diff --git a/Zotlabs/Module/Import_progress.php b/Zotlabs/Module/Import_progress.php
index d9b13e8a8..0afb6faed 100644
--- a/Zotlabs/Module/Import_progress.php
+++ b/Zotlabs/Module/Import_progress.php
@@ -29,14 +29,14 @@ class Import_progress extends \Zotlabs\Web\Controller {
$c = PConfig::Get(local_channel(), 'import', 'content_progress');
if ($c) {
- $total_cpages = floor(intval($c['items_total']) / intval($c['items_page']));
+ $total_cpages = round(intval($c['items_total']) / intval($c['items_page']));
if(!$total_cpages) {
- $total_cpages = 1; // because of floor
+ $total_cpages = 1; // because of round
}
$cpage = $c['last_page'] + 1; // because page count start at 0
- $cprogress = intval(floor((intval($cpage) * 100) / $total_cpages));
+ $cprogress = intval(round((intval($cpage) * 100) / $total_cpages));
$ccompleted_str = t('Item sync completed!');
if(argv(1) === 'resume_itemsync' && $cprogress < 100) {
@@ -50,6 +50,7 @@ class Import_progress extends \Zotlabs\Web\Controller {
if ($alive) {
$parsed = parse_url($alive);
unset($parsed['path']);
+ unset($parsed['query']);
$hz_server = unparse_url($parsed);
$since = datetime_convert(date_default_timezone_get(), date_default_timezone_get(), '0001-01-01 00:00');
@@ -79,14 +80,14 @@ class Import_progress extends \Zotlabs\Web\Controller {
$f = PConfig::Get(local_channel(), 'import', 'files_progress');
if ($f) {
- $total_fpages = floor(intval($f['files_total']) / intval($f['files_page']));
+ $total_fpages = round(intval($f['files_total']) / intval($f['files_page']));
if(!$total_fpages) {
$total_fpages = 1;
}
$fpage = $f['last_page'] + 1;
- $fprogress = intval(floor((intval($fpage) * 100) / $total_fpages));
+ $fprogress = intval(round((intval($fpage) * 100) / $total_fpages));
$fcompleted_str = t('File sync completed!');
if(argv(1) === 'resume_filesync' && $fprogress < 100) {
@@ -120,6 +121,7 @@ class Import_progress extends \Zotlabs\Web\Controller {
}
$fcompleted_str = t('File sync completed but no files were found!');
+
}
$fprogress_str = ((intval($fprogress)) ? $fprogress . '%' : $fprogress);
@@ -127,13 +129,15 @@ class Import_progress extends \Zotlabs\Web\Controller {
if(is_ajax()) {
$ret = [
'cprogress' => $cprogress,
- 'fprogress' => $fprogress
+ 'ccompleted_str' => $ccompleted_str,
+ 'fprogress' => $fprogress,
+ 'fcompleted_str' => $fcompleted_str
];
json_return_and_die($ret);
}
- $o = replace_macros(get_markup_template("import_progress.tpl"), [
+ return replace_macros(get_markup_template('import_progress.tpl'), [
'$chtitle_str' => t('Channel clone status'),
'$ctitle_str' => t('Item sync status'),
'$ftitle_str' => t('File sync status'),
@@ -147,8 +151,6 @@ class Import_progress extends \Zotlabs\Web\Controller {
'$resume_str' => t('Resume'),
'$resume_helper_str' => t('Only resume if sync stalled!')
]);
-
- return $o;
}
}
diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php
index d96cfd822..ea561ee25 100644
--- a/Zotlabs/Module/Item.php
+++ b/Zotlabs/Module/Item.php
@@ -44,253 +44,30 @@ class Item extends Controller {
function init() {
if (Libzot::is_zot_request()) {
-
- $item_id = argv(1);
-
- if (!$item_id)
- http_status_exit(404, 'Not found');
-
- $portable_id = EMPTY_STR;
-
- $item_normal_extra = sprintf(" and not verb in ('Follow', 'Ignore', '%s', '%s') ",
- dbesc(ACTIVITY_FOLLOW),
- dbesc(ACTIVITY_UNFOLLOW)
- );
-
- $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 $item_normal_extra ";
-
- $i = null;
-
- // do we have the item (at all)?
-
- $r = q("select parent_mid from item where uuid = '%s' $item_normal limit 1",
- dbesc($item_id)
- );
-
- if (!$r) {
- http_status_exit(404, 'Not found');
- }
-
- // process an authenticated fetch
-
- $sigdata = HTTPSig::verify(($_SERVER['REQUEST_METHOD'] === 'POST') ? file_get_contents('php://input') : EMPTY_STR);
- if ($sigdata['portable_id'] && $sigdata['header_valid']) {
- $portable_id = $sigdata['portable_id'];
- if (!check_channelallowed($portable_id)) {
- http_status_exit(403, 'Permission denied');
- }
- if (!check_siteallowed($sigdata['signer'])) {
- http_status_exit(403, 'Permission denied');
- }
- observer_auth($portable_id);
-
- $i = q("select id as item_id, uid from item where mid = '%s' $item_normal and owner_xchan = '%s' limit 1",
- dbesc($r[0]['parent_mid']),
- dbesc($portable_id)
- );
- }
- elseif (Config::get('system', 'require_authenticated_fetch', false)) {
- http_status_exit(403, 'Permission denied');
- }
-
- // if we don't have a parent id belonging to the signer see if we can obtain one as a visitor that we have permission to access
- // with a bias towards those items owned by channels on this site (item_wall = 1)
-
- $sql_extra = item_permissions_sql(0);
-
- if (!$i) {
- $i = q("select id as item_id, uid, item_private from item where mid = '%s' $item_normal $sql_extra order by item_wall desc limit 1",
- dbesc($r[0]['parent_mid'])
- );
- }
-
- if (!$i) {
- http_status_exit(403, 'Forbidden');
- }
-
- $chan = channelx_by_n($i[0]['uid']);
-
- if (!$chan) {
- http_status_exit(404, 'Not found');
- }
-
- if (!perm_is_allowed($chan['channel_id'], get_observer_hash(), 'view_stream')) {
- http_status_exit(403, 'Forbidden');
- }
-
- $parents_str = ids_to_querystr($i, 'item_id');
-
- // We won't need to check for privacy mismatches if the verified observer is also owner
- $parent_item_private = ((isset($i[0]['item_private'])) ? " and item_private = " . intval($i[0]['item_private']) . " " : '');
-
- $total = q("SELECT count(*) AS count FROM item WHERE parent = %d $parent_item_private $item_normal ",
- intval($parents_str)
- );
-
- App::set_pager_total($total[0]['count']);
- App::set_pager_itemspage(30);
-
- if (App::$pager['total'] > App::$pager['itemspage']) {
- // let mod conversation handle this request
- App::$query_string = str_replace('item', 'conversation', App::$query_string);
- $i = Activity::paged_collection_init(App::$pager['total'], App::$query_string);
- as_return_and_die($i ,$chan);
- }
- else {
- $items = q("SELECT item.*, item.id AS item_id FROM item WHERE item.parent = %d $parent_item_private $item_normal ORDER BY item.id",
- intval($parents_str)
- );
-
- xchan_query($items, true);
- $items = fetch_post_tags($items, true);
-
- $i = Activity::encode_item_collection($items, App::$query_string, 'OrderedCollection', App::$pager['total']);
- }
-
- if ($portable_id && (!intval($items[0]['item_private']))) {
- $c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'",
- intval($items[0]['uid']),
- dbesc($portable_id)
- );
- if (!$c) {
- ThreadListener::store(z_root() . '/item/' . $item_id, $portable_id);
- }
- }
-
- as_return_and_die($i ,$chan);
+ $this->init_zot_request();
}
if (ActivityStreams::is_as_request()) {
-
- $item_id = argv(1);
- if (!$item_id)
- http_status_exit(404, 'Not found');
-
- $portable_id = EMPTY_STR;
-
- $item_normal_extra = sprintf(" and not verb in ('Follow', 'Ignore', '%s', '%s') ",
- dbesc(ACTIVITY_FOLLOW),
- dbesc(ACTIVITY_UNFOLLOW)
- );
-
- $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 $item_normal_extra ";
-
- $i = null;
-
- // do we have the item (at all)?
- // add preferential bias to item owners (item_wall = 1)
-
- $r = q("select * from item where uuid = '%s' $item_normal order by item_wall desc limit 1",
- dbesc($item_id)
- );
-
- if (!$r) {
- http_status_exit(404, 'Not found');
- }
-
- // process an authenticated fetch
-
- $sigdata = HTTPSig::verify(EMPTY_STR);
- if ($sigdata['portable_id'] && $sigdata['header_valid']) {
- $portable_id = $sigdata['portable_id'];
- if (!check_channelallowed($portable_id)) {
- http_status_exit(403, 'Permission denied');
- }
- if (!check_siteallowed($sigdata['signer'])) {
- http_status_exit(403, 'Permission denied');
- }
- observer_auth($portable_id);
-
- $i = q("select id as item_id from item where mid = '%s' $item_normal and owner_xchan = '%s' limit 1 ",
- dbesc($r[0]['parent_mid']),
- dbesc($portable_id)
- );
- }
- elseif (Config::get('system', 'require_authenticated_fetch', false)) {
- http_status_exit(403, 'Permission denied');
- }
-
- // if we don't have a parent id belonging to the signer see if we can obtain one as a visitor that we have permission to access
- // with a bias towards those items owned by channels on this site (item_wall = 1)
-
- $sql_extra = item_permissions_sql(0);
-
- if (!$i) {
- $i = q("select id as item_id from item where mid = '%s' $item_normal $sql_extra order by item_wall desc limit 1",
- dbesc($r[0]['parent_mid'])
- );
- }
-
- $bear = Activity::token_from_request();
- if ($bear) {
- logger('bear: ' . $bear, LOGGER_DEBUG);
- if (!$i) {
- $t = q("select * from iconfig where cat = 'ocap' and k = 'relay' and v = '%s'",
- dbesc($bear)
- );
- if ($t) {
- $i = q("select id as item_id from item where uuid = '%s' and id = %d $item_normal limit 1",
- dbesc($item_id),
- intval($t[0]['iid'])
- );
- }
- }
- }
-
- if (!$i) {
- http_status_exit(403, 'Forbidden');
- }
-
- // If we get to this point we have determined we can access the original in $r (fetched much further above), so use it.
-
- xchan_query($r, true);
- $items = fetch_post_tags($r, false);
-
- $chan = channelx_by_n($items[0]['uid']);
-
- if (!$chan)
- http_status_exit(404, 'Not found');
-
- if (!perm_is_allowed($chan['channel_id'], get_observer_hash(), 'view_stream'))
- http_status_exit(403, 'Forbidden');
-
- $i = Activity::encode_item($items[0]);
-
- if (!$i)
- http_status_exit(404, 'Not found');
-
- if ($portable_id && (!intval($items[0]['item_private']))) {
- $c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'",
- intval($items[0]['uid']),
- dbesc($portable_id)
- );
- if (!$c) {
- ThreadListener::store(z_root() . '/item/' . $item_id, $portable_id);
- }
- }
-
- as_return_and_die($i ,$chan);
-
+ $this->init_as_request();
}
if (argc() > 1 && argv(1) !== 'drop') {
- $x = q("select uid, item_wall, llink, mid, uuid from item where mid = '%s' or mid = '%s' or uuid = '%s'",
- dbesc(z_root() . '/item/' . argv(1)),
- dbesc(z_root() . '/activity/' . argv(1)),
+ $x = q("select uid, item_wall, llink, uuid from item where uuid = '%s' order by item_wall desc",
dbesc(argv(1))
);
+
if ($x) {
- foreach ($x as $xv) {
- if (intval($xv['item_wall'])) {
- $c = channelx_by_n($xv['uid']);
- if ($c) {
- goaway(z_root() . '/channel/' . $c['channel_address'] . '?mid=' . $xv['uuid']);
- }
+ if ($x[0]['item_wall']) {
+ $c = channelx_by_n($x[0]['uid']);
+ if ($c) {
+ goaway(z_root() . '/channel/' . $c['channel_address'] . '?mid=' . $x[0]['uuid']);
}
}
+
goaway($x[0]['llink']);
}
+
http_status_exit(404, 'Not found');
}
@@ -323,7 +100,6 @@ class Item extends Controller {
$item_deleted = false;
$item_hidden = false;
$item_unpublished = false;
- $item_delayed = false;
$item_pending_remove = false;
$item_blocked = false;
@@ -401,6 +177,7 @@ class Item extends Controller {
$categories = ((x($_REQUEST, 'category')) ? escape_tags($_REQUEST['category']) : '');
$webpage = ((x($_REQUEST, 'webpage')) ? intval($_REQUEST['webpage']) : 0);
$item_obscured = ((x($_REQUEST, 'obscured')) ? intval($_REQUEST['obscured']) : 0);
+ $item_delayed = ((x($_REQUEST, 'delayed')) ? intval($_REQUEST['delayed']) : 0);
$pagetitle = ((x($_REQUEST, 'pagetitle')) ? escape_tags($_REQUEST['pagetitle']) : '');
$layout_mid = ((x($_REQUEST, 'layout_mid')) ? escape_tags($_REQUEST['layout_mid']) : '');
$plink = ((x($_REQUEST, 'permalink')) ? escape_tags($_REQUEST['permalink']) : '');
@@ -430,7 +207,6 @@ class Item extends Controller {
$expires = NULL_DATE;
- $comments_closed = NULL_DATE;
$route = '';
$parent_item = null;
@@ -607,6 +383,7 @@ class Item extends Controller {
$r = q("select * from xchan where xchan_hash = '%s' limit 1",
dbesc($channel['channel_hash'])
);
+
if ($r && count($r)) {
$owner_xchan = $r[0];
}
@@ -677,7 +454,7 @@ class Item extends Controller {
$title = escape_tags(trim($_REQUEST['title']));
$summary = escape_tags(trim($_REQUEST['summary']));
$body = trim($_REQUEST['body']);
- $item_flags = $orig_post['item_flags'];
+ $item_flags = $orig_post['item_flags'];
$item_origin = $orig_post['item_origin'];
$item_unseen = $orig_post['item_unseen'];
$item_starred = $orig_post['item_starred'];
@@ -691,7 +468,7 @@ class Item extends Controller {
$item_mentionsme = $orig_post['item_mentionsme'];
$item_nocomment = $orig_post['item_nocomment'];
$item_obscured = $orig_post['item_obscured'];
- $item_verified = $orig_post['item_verified'];
+ $item_verified = $orig_post['item_verified'];
$item_retained = $orig_post['item_retained'];
$item_rss = $orig_post['item_rss'];
$item_deleted = $orig_post['item_deleted'];
@@ -710,6 +487,7 @@ class Item extends Controller {
$thr_parent = $orig_post['thr_parent'];
$parent_mid = $orig_post['parent_mid'];
$plink = $orig_post['plink'];
+ $owner_hash = $orig_post['owner_xchan'];
}
else {
if (!$walltowall) {
@@ -1016,6 +794,7 @@ class Item extends Controller {
$item_origin = (($origin) ? 1 : 0);
$item_consensus = (($consensus) ? 1 : 0);
$item_nocomment = (($nocomment) ? 1 : 0);
+ $comments_closed = (($nocomment) ? $comments_closed : NULL_DATE);
// determine if this is a wall post
@@ -1029,18 +808,42 @@ class Item extends Controller {
}
- if ($moderated)
+ if ($moderated) {
$item_blocked = ITEM_MODERATED;
+ }
- if (!strlen($verb))
+ if (!strlen($verb)) {
$verb = 'Create';
+ }
$notify_type = (($parent) ? 'comment-new' : 'wall-new');
$uuid = $uuid ?? $message_id ?? item_message_id();
$mid = $mid ?? z_root() . '/item/' . $uuid;
+
+ if (empty($owner_hash)) {
+ $owner_hash = $owner_xchan['xchan_hash'];
+ }
+
+ // Set the conversation target.
+ if ($owner_hash === $channel['channel_hash']) {
+ $attributedTo = z_root() . '/channel/' . $channel['channel_address'];
+
+ $conversation = isset($parent_item) ? $parent_item['mid'] : $mid;
+ $datarray['target'] = [
+ 'id' => str_replace('/item/', '/conversation/', $conversation),
+ 'type' => 'Collection',
+ 'attributedTo' => $attributedTo,
+ ];
+ $datarray['tgt_type'] = 'Collection';
+ }
+ elseif (!empty($parent_item['target'])) {
+ $datarray['target'] = $parent_item['target'];
+ $datarray['tgt_type'] = $parent_item['tgt_type'];
+ }
+
if ($is_poll) {
$poll = [
'question' => $body,
@@ -1082,19 +885,13 @@ class Item extends Controller {
if ($parent_item)
$parent_mid = $parent_item['mid'];
-
// Fallback so that we always have a thr_parent
if (!$thr_parent)
$thr_parent = $mid;
-
$item_thread_top = ((!$parent) ? 1 : 0);
- if ((!$plink) && ($item_thread_top)) {
- $plink = $mid;
- }
-
if (isset($datarray['obj']) && $datarray['obj']) {
$datarray['obj']['id'] = $mid;
}
@@ -1157,7 +954,7 @@ class Item extends Controller {
$datarray['public_policy'] = $public_policy;
$datarray['comment_policy'] = map_scope($comment_policy);
$datarray['term'] = array_unique($post_tags, SORT_REGULAR);
- $datarray['plink'] = $plink;
+ $datarray['plink'] = $plink ?? $mid;
$datarray['route'] = $route;
// A specific ACL over-rides public_policy completely
@@ -1245,6 +1042,7 @@ class Item extends Controller {
$this->add_listeners($datarray);
}
+ /* sync this is done in item_store_update()
if (!$parent) {
$r = q("select * from item where id = %d",
intval($post_id)
@@ -1255,9 +1053,14 @@ class Item extends Controller {
Libsync::build_sync_packet($profile_uid, ['item' => [encode_item($sync_item[0], true)]]);
}
}
- if (!$nopush)
- Master::Summon(['Notifier', 'edit_post', $post_id]);
+ */
+ if (!$nopush) {
+ Master::Summon(['Notifier', 'edit_post', $post_id]);
+ if (intval($x['approval_id'])) {
+ Master::Summon(['Notifier', 'edit_post', $x['approval_id']]);
+ }
+ }
if ($api_source)
return ($x);
@@ -1281,6 +1084,7 @@ class Item extends Controller {
}
$post_id = $post['item_id'];
+ $approval_id = $post['approval_id'] ?? 0;
$datarray = $post['item'];
@@ -1355,6 +1159,7 @@ class Item extends Controller {
killme();
}
+ /* sync this is done in item_store_update()
if ($parent || $datarray['item_private'] == 1) {
$r = q("select * from item where id = %d",
intval($post_id)
@@ -1365,6 +1170,7 @@ class Item extends Controller {
Libsync::build_sync_packet($profile_uid, ['item' => [encode_item($sync_item[0], true)]]);
}
}
+ */
$datarray['id'] = $post_id;
$datarray['llink'] = z_root() . '/display/' . $datarray['uuid'];
@@ -1375,8 +1181,12 @@ class Item extends Controller {
$nopush = false;
}
- if (!$nopush)
+ if (!$nopush) {
Master::Summon(['Notifier', $notify_type, $post_id]);
+ if ($approval_id) {
+ Master::Summon(['Notifier', $notify_type, $approval_id]);
+ }
+ }
logger('post_complete');
@@ -1429,9 +1239,7 @@ class Item extends Controller {
if ((argc() == 3) && (argv(1) === 'drop') && intval(argv(2))) {
- require_once('include/items.php');
-
- $i = q("select id, uid, item_origin, author_xchan, owner_xchan, source_xchan, item_type from item where id = %d limit 1",
+ $i = q("select * from item where id = %d limit 1",
intval(argv(2))
);
@@ -1458,7 +1266,6 @@ class Item extends Controller {
$can_delete = true;
}
-
if (!($can_delete || $local_delete)) {
notice(t('Permission denied.') . EOL);
return;
@@ -1474,13 +1281,14 @@ class Item extends Controller {
}
else {
// complex deletion that needs to propagate and be performed in phases
- drop_item($i[0]['id'], true, DROPITEM_PHASE1);
+ drop_item($i[0]['id'], DROPITEM_PHASE1);
$complex = true;
}
$r = q("select * from item where id = %d",
intval($i[0]['id'])
);
+
if ($r) {
xchan_query($r);
$sync_item = fetch_post_tags($r);
@@ -1489,6 +1297,9 @@ class Item extends Controller {
if ($complex) {
tag_deliver($i[0]['uid'], $i[0]['id']);
+ if (intval($i[0]['item_wall']) || $i[0]['mid'] !== $i[0]['parent_mid']) {
+ Master::Summon(['Notifier', 'drop', $i[0]['id']]);
+ }
}
}
@@ -1672,5 +1483,234 @@ class Item extends Controller {
}
}
+ private function init_zot_request() {
+
+ $item_id = argv(1);
+
+ if (!$item_id)
+ http_status_exit(404, 'Not found');
+
+ $portable_id = EMPTY_STR;
+
+ $item_normal_extra = sprintf(" and not verb in ('Follow', 'Ignore', '%s', '%s') ",
+ dbesc(ACTIVITY_FOLLOW),
+ dbesc(ACTIVITY_UNFOLLOW)
+ );
+
+ $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 and item.item_uplink = 0 $item_normal_extra ";
+
+ $i = null;
+
+ // do we have the item (at all)?
+
+ $r = q("select parent_mid from item where uuid = '%s' $item_normal limit 1",
+ dbesc($item_id)
+ );
+
+ if (!$r) {
+ http_status_exit(404, 'Not found');
+ }
+
+ // process an authenticated fetch
+
+ $sigdata = HTTPSig::verify(($_SERVER['REQUEST_METHOD'] === 'POST') ? file_get_contents('php://input') : EMPTY_STR);
+ if ($sigdata['portable_id'] && $sigdata['header_valid']) {
+ $portable_id = $sigdata['portable_id'];
+ if (!check_channelallowed($portable_id)) {
+ http_status_exit(403, 'Permission denied');
+ }
+ if (!check_siteallowed($sigdata['signer'])) {
+ http_status_exit(403, 'Permission denied');
+ }
+ observer_auth($portable_id);
+
+ $i = q("select id as item_id, uid from item where mid = '%s' $item_normal and owner_xchan = '%s' limit 1",
+ dbesc($r[0]['parent_mid']),
+ dbesc($portable_id)
+ );
+ }
+ elseif (Config::get('system', 'require_authenticated_fetch', false)) {
+ http_status_exit(403, 'Permission denied');
+ }
+
+ // if we don't have a parent id belonging to the signer see if we can obtain one as a visitor that we have permission to access
+ // with a bias towards those items owned by channels on this site (item_wall = 1)
+
+ $sql_extra = item_permissions_sql(0);
+
+ if (!$i) {
+ $i = q("select id as item_id, uid, item_private from item where mid = '%s' $item_normal $sql_extra order by item_wall desc limit 1",
+ dbesc($r[0]['parent_mid'])
+ );
+ }
+
+ if (!$i) {
+ http_status_exit(403, 'Forbidden');
+ }
+
+ $chan = channelx_by_n($i[0]['uid']);
+
+ if (!$chan) {
+ http_status_exit(404, 'Not found');
+ }
+
+ if (!perm_is_allowed($chan['channel_id'], get_observer_hash(), 'view_stream')) {
+ http_status_exit(403, 'Forbidden');
+ }
+
+ $parents_str = ids_to_querystr($i, 'item_id');
+
+ // We won't need to check for privacy mismatches if the verified observer is also owner
+ $parent_item_private = ((isset($i[0]['item_private'])) ? " and item_private = " . intval($i[0]['item_private']) . " " : '');
+
+ $total = q("SELECT count(*) AS count FROM item WHERE parent = %d $parent_item_private $item_normal ",
+ intval($parents_str)
+ );
+
+ App::set_pager_total($total[0]['count']);
+ App::set_pager_itemspage(30);
+
+ if (App::$pager['total'] > App::$pager['itemspage']) {
+ // let mod conversation handle this request
+ App::$query_string = str_replace('item', 'conversation', App::$query_string);
+ $i = Activity::paged_collection_init(App::$pager['total'], App::$query_string);
+ as_return_and_die($i ,$chan);
+ }
+ else {
+ $items = q("SELECT item.*, item.id AS item_id FROM item WHERE item.parent = %d $parent_item_private $item_normal ORDER BY item.id",
+ intval($parents_str)
+ );
+
+ xchan_query($items, true);
+ $items = fetch_post_tags($items, true);
+
+ $i = Activity::encode_item_collection($items, App::$query_string, 'OrderedCollection', App::$pager['total']);
+ }
+
+ if ($portable_id && (!intval($items[0]['item_private']))) {
+ $c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'",
+ intval($items[0]['uid']),
+ dbesc($portable_id)
+ );
+ if (!$c) {
+ ThreadListener::store(z_root() . '/item/' . $item_id, $portable_id);
+ }
+ }
+
+ as_return_and_die($i ,$chan);
+ }
+
+ private function init_as_request() {
+
+ $item_id = argv(1);
+ if (!$item_id)
+ http_status_exit(404, 'Not found');
+
+ $portable_id = EMPTY_STR;
+
+ $item_normal_extra = sprintf(" and not verb in ('Follow', 'Ignore', '%s', '%s') ",
+ dbesc(ACTIVITY_FOLLOW),
+ dbesc(ACTIVITY_UNFOLLOW)
+ );
+
+ $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_blocked = 0 and item.item_uplink = 0 $item_normal_extra ";
+
+ $i = null;
+
+ // do we have the item (at all)?
+ // add preferential bias to item owners (item_wall = 1)
+
+ $r = q("select * from item where uuid = '%s' $item_normal order by item_wall desc limit 1",
+ dbesc($item_id)
+ );
+
+ if (!$r) {
+ http_status_exit(404, 'Not found');
+ }
+
+ // process an authenticated fetch
+
+ $sigdata = HTTPSig::verify(EMPTY_STR);
+ if ($sigdata['portable_id'] && $sigdata['header_valid']) {
+ $portable_id = $sigdata['portable_id'];
+ if (!check_channelallowed($portable_id)) {
+ http_status_exit(403, 'Permission denied');
+ }
+ if (!check_siteallowed($sigdata['signer'])) {
+ http_status_exit(403, 'Permission denied');
+ }
+ observer_auth($portable_id);
+
+ $i = q("select id as item_id from item where mid = '%s' $item_normal and owner_xchan = '%s' limit 1 ",
+ dbesc($r[0]['parent_mid']),
+ dbesc($portable_id)
+ );
+ }
+ elseif (Config::get('system', 'require_authenticated_fetch', false)) {
+ http_status_exit(403, 'Permission denied');
+ }
+
+ // if we don't have a parent id belonging to the signer see if we can obtain one as a visitor that we have permission to access
+ // with a bias towards those items owned by channels on this site (item_wall = 1)
+
+ $sql_extra = item_permissions_sql(0);
+
+ if (!$i) {
+ $i = q("select id as item_id from item where mid = '%s' $item_normal $sql_extra order by item_wall desc limit 1",
+ dbesc($r[0]['parent_mid'])
+ );
+ }
+
+ $bear = Activity::token_from_request();
+ if ($bear) {
+ logger('bear: ' . $bear, LOGGER_DEBUG);
+ if (!$i) {
+ $t = q("select * from iconfig where cat = 'ocap' and k = 'relay' and v = '%s'",
+ dbesc($bear)
+ );
+ if ($t) {
+ $i = q("select id as item_id from item where uuid = '%s' and id = %d $item_normal limit 1",
+ dbesc($item_id),
+ intval($t[0]['iid'])
+ );
+ }
+ }
+ }
+
+ if (!$i) {
+ http_status_exit(403, 'Forbidden');
+ }
+
+ // If we get to this point we have determined we can access the original in $r (fetched much further above), so use it.
+
+ xchan_query($r, true);
+ $items = fetch_post_tags($r, false);
+
+ $chan = channelx_by_n($items[0]['uid']);
+
+ if (!$chan)
+ http_status_exit(404, 'Not found');
+
+ if (!perm_is_allowed($chan['channel_id'], get_observer_hash(), 'view_stream'))
+ http_status_exit(403, 'Forbidden');
+
+ $i = Activity::encode_item($items[0]);
+
+ if (!$i)
+ http_status_exit(404, 'Not found');
+
+ if ($portable_id && (!intval($items[0]['item_private']))) {
+ $c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'",
+ intval($items[0]['uid']),
+ dbesc($portable_id)
+ );
+ if (!$c) {
+ ThreadListener::store(z_root() . '/item/' . $item_id, $portable_id);
+ }
+ }
+
+ as_return_and_die($i ,$chan);
+
+ }
}
diff --git a/Zotlabs/Module/Like.php b/Zotlabs/Module/Like.php
index d493742e7..2fb3fab83 100644
--- a/Zotlabs/Module/Like.php
+++ b/Zotlabs/Module/Like.php
@@ -284,7 +284,7 @@ class Like extends Controller {
intval($ch[0]['channel_id'])
);
if ($r)
- drop_item($r[0]['id'], false);
+ drop_item($r[0]['id']);
if ($interactive) {
notice(t('Previous action reversed.') . EOL);
return $o;
@@ -387,17 +387,20 @@ class Like extends Controller {
// already liked it. Drop that item.
require_once('include/items.php');
foreach ($r as $rr) {
- drop_item($rr['id'], false, DROPITEM_PHASE1);
+ drop_item($rr['id'], DROPITEM_PHASE1);
+
// set the changed timestamp on the parent so we'll see the update without a page reload
q("update item set changed = '%s' where id = %d and uid = %d",
dbesc(datetime_convert()),
intval($rr['parent']),
intval($rr['uid'])
);
+
// Prior activity was a duplicate of the one we're submitting, just undo it;
// don't fall through and create another
- if (activity_match($rr['verb'], $activity))
+ if (activity_match($rr['verb'], $activity)) {
$multi_undo = false;
+ }
$d = q("select * from item where id = %d",
intval($rr['id'])
@@ -559,6 +562,7 @@ class Like extends Controller {
$post = item_store($arr);
$post_id = $post['item_id'];
+ $approval_id = $post['approval_id'] ?? 0;
// save the conversation from expiration
@@ -574,6 +578,7 @@ class Like extends Controller {
}
+/* Item sync is now done in item_store()
$r = q("select * from item where id = %d",
intval($post_id)
);
@@ -582,7 +587,7 @@ class Like extends Controller {
$sync_item = fetch_post_tags($r);
Libsync::build_sync_packet($profile_uid, ['item' => [encode_item($sync_item[0], true)]]);
}
-
+*/
if ($extended_like) {
$r = q("insert into likes (channel_id,liker,likee,iid,i_mid,verb,target_type,target_id,target) values (%d,'%s','%s',%d,'%s','%s','%s','%s','%s')",
@@ -609,7 +614,10 @@ class Like extends Controller {
}
- Master::Summon(array('Notifier', 'like', $post_id));
+ Master::Summon(['Notifier', 'like', $post_id]);
+ if ($approval_id) {
+ Master::Summon(['Notifier', 'like', $approval_id]);
+ }
if ($interactive) {
notice(t('Action completed.') . EOL);
diff --git a/Zotlabs/Module/Login.php b/Zotlabs/Module/Login.php
index 721ac15ac..269990a54 100644
--- a/Zotlabs/Module/Login.php
+++ b/Zotlabs/Module/Login.php
@@ -10,7 +10,16 @@ class Login extends \Zotlabs\Web\Controller {
if(remote_channel() && $_SESSION['atoken'])
goaway(z_root());
- return login(true);
+ $o = '<div class="generic-content-wrapper">';
+ $o .= '<div class="section-title-wrapper">';
+ $o .= '<h2 class="">' . t('Login') . '</h2>';
+ $o .= '</div>';
+ $o .= '<div class="section-content-wrapper">';
+ $o .= login(true);
+ $o .= '</div>';
+ $o .= '</div>';
+
+ return $o;
}
}
diff --git a/Zotlabs/Module/Magic.php b/Zotlabs/Module/Magic.php
index 8259f7d39..732488002 100644
--- a/Zotlabs/Module/Magic.php
+++ b/Zotlabs/Module/Magic.php
@@ -11,37 +11,43 @@ class Magic extends Controller {
function init() {
- $ret = [
- 'success' => false,
- 'url' => '',
- 'message' => ''
- ];
-
logger('mod_magic: invoked', LOGGER_DEBUG);
- logger('args: ' . print_r($_REQUEST,true),LOGGER_DATA);
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
+ $data = $_POST;
+ } elseif ($_SERVER['REQUEST_METHOD'] === 'GET') {
+ $data = $_GET;
+ } else {
+ http_status_exit(405, 'Method Not Allowed');
+ }
+
+ logger('request method: ' . print_r($_SERVER['REQUEST_METHOD'], true), LOGGER_DATA);
+ logger('args: ' . print_r($data, true), LOGGER_DATA);
- $addr = ((x($_REQUEST,'addr')) ? $_REQUEST['addr'] : '');
- $bdest = ((x($_REQUEST,'bdest')) ? $_REQUEST['bdest'] : '');
- $dest = ((x($_REQUEST,'dest')) ? $_REQUEST['dest'] : '');
- $rev = ((x($_REQUEST,'rev')) ? intval($_REQUEST['rev']) : 0);
- $owa = ((x($_REQUEST,'owa')) ? intval($_REQUEST['owa']) : 0);
- $delegate = ((x($_REQUEST,'delegate')) ? $_REQUEST['delegate'] : '');
+ $bdest = $data['bdest'] ?? '';
+ $owa = $data['owa'] ?? 0;
+ $delegate = $data['delegate'] ?? '';
// bdest is preferred as it is hex-encoded and can survive url rewrite and argument parsing
- if ($bdest) {
- $dest = hex2bin($bdest);
+ if (!$bdest) {
+ http_status_exit(400, 'Bad Request');
}
+ $dest = hex2bin($bdest);
$parsed = parse_url($dest);
- if (! $parsed) {
- goaway($dest);
+ if (!$parsed) {
+ http_status_exit(400, 'Bad Request');
}
- $basepath = $parsed['scheme'] . '://' . $parsed['host'] . (isset($parsed['port']) ? ':' . $parsed['port'] : '');
- $owapath = SConfig::get($basepath,'system','openwebauth', $basepath . '/owa');
+ $basepath = unparse_url(array_filter(
+ $parsed,
+ fn (string $key) => in_array($key, ['scheme', 'host', 'port']),
+ ARRAY_FILTER_USE_KEY
+ ));
+
+ $owapath = SConfig::get($basepath, 'system', 'openwebauth', $basepath . '/owa');
// This is ready-made for a plugin that provides a blacklist or "ask me" before blindly authenticating.
// By default, we'll proceed without asking.
@@ -53,12 +59,14 @@ class Magic extends Controller {
];
call_hooks('magic_auth',$arr);
+
$dest = $arr['destination'];
- if (! $arr['proceed']) {
+
+ if (!$arr['proceed']) {
goaway($dest);
}
- if((get_observer_hash()) && (stripos($dest,z_root()) === 0)) {
+ if (get_observer_hash() && str_starts_with($dest, z_root())) {
// We are already authenticated on this site and a registered observer.
// First check if this is a delegate request on the local system and process accordingly.
@@ -106,29 +114,41 @@ class Magic extends Controller {
$headers['Content-Type'] = 'application/x-zot+json' ;
$headers['X-Open-Web-Auth'] = random_string();
$headers['Host'] = $parsed['host'];
- $headers['(request-target)'] = 'get ' . '/owa';
+ $headers['(request-target)'] = 'get /owa';
$headers = HTTPSig::create_sig($headers,$channel['channel_prvkey'], channel_url($channel),true,'sha512');
$redirects = 0;
+
$x = z_fetch_url($owapath, false, $redirects, ['headers' => $headers]);
logger('owa fetch returned: ' . print_r($x,true),LOGGER_DATA);
+
if ($x['success']) {
$j = json_decode($x['body'],true);
if ($j['success'] && $j['encrypted_token']) {
// decrypt the token using our private key
$token = '';
- openssl_private_decrypt(base64url_decode($j['encrypted_token']),$token,$channel['channel_prvkey']);
+ openssl_private_decrypt(base64url_decode($j['encrypted_token']), $token, $channel['channel_prvkey']);
$x = strpbrk($dest,'?&');
// redirect using the encrypted token which will be exchanged for an authenticated session
- $args = (($x) ? '&owt=' . $token : '?f=&owt=' . $token) . (($delegate) ? '&delegate=1' : '');
+ $args = (($x) ? '&owt=' . $token : '?owt=' . $token) . (($delegate) ? '&delegate=1' : '');
goaway($dest . $args);
}
+ else {
+ $o = '<h1>OWA ERROR</h1>';
+ if (!empty($j['message'])) {
+ $o .= '<h2>' . $j['message'] . '</h2>';
+ }
+ $o .= '<a href=' . $dest . '>' . $dest . '</a>';
+
+ echo $o;
+ }
}
}
}
- goaway($dest);
+ killme();
+
}
}
diff --git a/Zotlabs/Module/Mitem.php b/Zotlabs/Module/Mitem.php
index ac7470e13..81787f8c4 100644
--- a/Zotlabs/Module/Mitem.php
+++ b/Zotlabs/Module/Mitem.php
@@ -184,8 +184,8 @@ class Mitem extends \Zotlabs\Web\Controller {
'$nick' => $which,
'$sys' => \App::$is_sys
));
-
- $o .= replace_macros(get_markup_template('mitemlist.tpl'),array(
+
+ return replace_macros(get_markup_template('mitemlist.tpl'),array(
'$title' => t('Menu:'),
'$create' => $create,
'$nametitle' => t('Link Name'),
@@ -204,29 +204,27 @@ class Mitem extends \Zotlabs\Web\Controller {
'$hintedit' => t('Edit this menu item'),
'$nick' => $which,
));
-
- return $o;
}
-
-
+
+
if(argc() > 3) {
if(intval(argv(3))) {
-
+
$m = q("select * from menu_item where mitem_id = %d and mitem_channel_id = %d limit 1",
intval(argv(3)),
intval($owner)
);
-
+
if(! $m) {
notice( t('Menu item not found.') . EOL);
goaway(z_root() . '/menu/'. $which . ((\App::$is_sys) ? '?f=&sys=1' : ''));
}
-
+
$mitem = $m[0];
-
+
$lockstate = (($mitem['allow_cid'] || $mitem['allow_gid'] || $mitem['deny_cid'] || $mitem['deny_gid']) ? 'lock' : 'unlock');
-
+
if(argc() == 5 && argv(4) == 'drop') {
menu_sync_packet($owner,get_observer_hash(),$mitem['mitem_menu_id']);
$r = menu_del_item($mitem['mitem_menu_id'], $owner, intval(argv(3)));
@@ -235,12 +233,12 @@ class Mitem extends \Zotlabs\Web\Controller {
info( t('Menu item deleted.') . EOL);
else
notice( t('Menu item could not be deleted.'). EOL);
-
+
goaway(z_root() . '/mitem/' . $which . '/' . $mitem['mitem_menu_id'] . ((\App::$is_sys) ? '?f=&sys=1' : ''));
}
-
+
// edit menu item
- $o = replace_macros(get_markup_template('mitemedit.tpl'), array(
+ return replace_macros(get_markup_template('mitemedit.tpl'), array(
'$header' => t('Edit Menu Element'),
'$menu_id' => \App::$data['menu']['menu_id'],
'$permissions' => t('Menu Item Permissions'),
@@ -261,10 +259,8 @@ class Mitem extends \Zotlabs\Web\Controller {
'$menu_names' => $menu_names,
'$nick' => $which
));
-
- return $o;
}
}
}
-
+
}
diff --git a/Zotlabs/Module/Moderate.php b/Zotlabs/Module/Moderate.php
index ed2a1e4f9..2103684ab 100644
--- a/Zotlabs/Module/Moderate.php
+++ b/Zotlabs/Module/Moderate.php
@@ -74,7 +74,7 @@ class Moderate extends \Zotlabs\Web\Controller {
// let the sender know we received their comment but we don't permit spam here.
// Activity::send_rejection_activity(App::get_channel(), $item['author_xchan'], $item);
- drop_item($post_id,false);
+ drop_item($post_id);
notice( t('Item deleted') . EOL);
}
diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php
index 3ea813547..09a0a6ccc 100644
--- a/Zotlabs/Module/Network.php
+++ b/Zotlabs/Module/Network.php
@@ -278,32 +278,11 @@ class Network extends \Zotlabs\Web\Controller {
$likes_sql = " AND verb NOT IN ('Like', 'Dislike', '" . dbesc(ACTIVITY_LIKE) . "', '" . dbesc(ACTIVITY_DISLIKE) . "') ";
// This is for nouveau view public forum cid queries (if a forum notification is clicked)
- //$p = q("SELECT oid AS parent FROM term WHERE uid = %d AND ttype = %d AND term = '%s'",
- //intval(local_channel()),
- //intval(TERM_FORUM),
- //dbesc($cid_r[0]['xchan_name'])
- //);
-
- //$p_str = ids_to_querystr($p, 'parent');
-
- $p_sql = '';
- //if($p_str)
- //$p_sql = " OR item.parent IN ( $p_str ) ";
-
- $sql_extra = " AND ( owner_xchan = '" . protect_sprintf(dbesc($cid_r[0]['abook_xchan'])) . "' OR owner_xchan = '" . protect_sprintf(dbesc($cid_r[0]['abook_xchan'])) . "' $p_sql ) AND item_unseen = 1 $likes_sql ";
+ $sql_extra = " AND item.parent IN (SELECT DISTINCT parent FROM item WHERE uid = " . intval(local_channel()) . " AND ( author_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' OR owner_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' ) $item_normal) AND item_unseen = 1 AND verb != 'Announce' $likes_sql ";
}
else {
// This is for threaded view cid queries (e.g. if a forum is selected from the forum filter)
- $ttype = (($pf) ? TERM_FORUM : TERM_MENTION);
-
- $p1 = dbq("SELECT DISTINCT parent FROM item WHERE uid = " . intval(local_channel()) . " AND ( author_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' OR owner_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' ) $item_normal ");
- $p2 = dbq("SELECT oid AS parent FROM term WHERE uid = " . intval(local_channel()) . " AND ttype = $ttype AND term = '" . dbesc($cid_r[0]['xchan_name']) . "'");
-
- $p_str = ids_to_querystr(array_merge($p1, $p2), 'parent');
- if(! $p_str)
- killme();
-
- $sql_extra = " AND item.parent IN ( $p_str ) ";
+ $sql_extra = " AND item.parent IN (SELECT DISTINCT parent FROM item WHERE uid = " . intval(local_channel()) . " AND ( author_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' OR owner_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' ) $item_normal) ";
}
}
diff --git a/Zotlabs/Module/Notify.php b/Zotlabs/Module/Notify.php
index 0af2ec93a..7a7becbc8 100644
--- a/Zotlabs/Module/Notify.php
+++ b/Zotlabs/Module/Notify.php
@@ -1,8 +1,8 @@
<?php
namespace Zotlabs\Module;
-use \Zotlabs\Lib\PConfig;
-use \Zotlabs\Web\Controller;
+use Zotlabs\Lib\PConfig;
+use Zotlabs\Web\Controller;
class Notify extends Controller {
diff --git a/Zotlabs/Module/OAuth2TestVehicle.php b/Zotlabs/Module/OAuth2TestVehicle.php
index 5ae278e8c..57cda3c28 100644
--- a/Zotlabs/Module/OAuth2TestVehicle.php
+++ b/Zotlabs/Module/OAuth2TestVehicle.php
@@ -31,8 +31,8 @@ class OAuth2TestVehicle extends \Zotlabs\Web\Controller {
$_SESSION['api_response'] = (x($_SESSION, 'api_response') ? $_SESSION['api_response'] : '');
}
function get() {
-
- $o .= replace_macros(get_markup_template('oauth2testvehicle.tpl'), array(
+
+ $output = replace_macros(get_markup_template('oauth2testvehicle.tpl'), array(
'$baseurl' => z_root(),
'$api_response' => $_SESSION['api_response'],
/*
@@ -97,8 +97,10 @@ class OAuth2TestVehicle extends \Zotlabs\Web\Controller {
)
)
));
+
$_SESSION['success'] = '';
- return $o;
+
+ return $output;
}
function post() {
diff --git a/Zotlabs/Module/Oauth.php b/Zotlabs/Module/Oauth.php
index 061296257..6063c7738 100644
--- a/Zotlabs/Module/Oauth.php
+++ b/Zotlabs/Module/Oauth.php
@@ -103,7 +103,8 @@ class Oauth extends Controller {
if((argc() > 1) && (argv(1) === 'add')) {
$tpl = get_markup_template("oauth_edit.tpl");
- $o .= replace_macros($tpl, array(
+
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("oauth"),
'$title' => t('Add application'),
'$submit' => t('Submit'),
@@ -114,7 +115,6 @@ class Oauth extends Controller {
'$redirect' => array('redirect', t('Redirect'), '', t('Redirect URI - leave blank unless your application specifically requires this')),
'$icon' => array('icon', t('Icon url'), '', t('Optional')),
));
- return $o;
}
if((argc() > 2) && (argv(1) === 'edit')) {
@@ -129,7 +129,7 @@ class Oauth extends Controller {
$app = $r[0];
$tpl = get_markup_template("oauth_edit.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("oauth"),
'$title' => t('Add application'),
'$submit' => t('Update'),
@@ -140,7 +140,6 @@ class Oauth extends Controller {
'$redirect' => array('redirect', t('Redirect'), $app['redirect_uri'], ''),
'$icon' => array('icon', t('Icon url'), $app['icon'], ''),
));
- return $o;
}
if((argc() > 2) && (argv(1) === 'delete')) {
@@ -163,7 +162,8 @@ class Oauth extends Controller {
$tpl = get_markup_template("oauth.tpl");
- $o .= replace_macros($tpl, array(
+
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("oauth"),
'$baseurl' => z_root(),
'$title' => t('Connected OAuth Apps'),
@@ -175,8 +175,6 @@ class Oauth extends Controller {
'$remove' => t('Remove authorization'),
'$apps' => $r,
));
- return $o;
-
}
}
diff --git a/Zotlabs/Module/Oauth2.php b/Zotlabs/Module/Oauth2.php
index 4b0b1991e..7aadd91bc 100644
--- a/Zotlabs/Module/Oauth2.php
+++ b/Zotlabs/Module/Oauth2.php
@@ -108,7 +108,8 @@ class Oauth2 extends Controller {
if((argc() > 1) && (argv(1) === 'add')) {
$tpl = get_markup_template("oauth2_edit.tpl");
- $o .= replace_macros($tpl, array(
+
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("oauth2"),
'$title' => t('Add OAuth2 application'),
'$submit' => t('Submit'),
@@ -119,7 +120,6 @@ class Oauth2 extends Controller {
'$grant' => array('grant', t('Grant Types'), '', t('leave blank unless your application sepcifically requires this')),
'$scope' => array('scope', t('Authorization scope'), '', t('leave blank unless your application sepcifically requires this')),
));
- return $o;
}
if((argc() > 2) && (argv(1) === 'edit')) {
@@ -136,7 +136,7 @@ class Oauth2 extends Controller {
$app = $r[0];
$tpl = get_markup_template("oauth2_edit.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("oauth2"),
'$title' => t('Add application'),
'$submit' => t('Update'),
@@ -147,7 +147,6 @@ class Oauth2 extends Controller {
'$grant' => array('grant', t('Grant Types'), $app['grant_types'], t('leave blank unless your application specifically requires this')),
'$scope' => array('scope', t('Authorization scope'), $app['scope'], t('leave blank unless your application specifically requires this')),
));
- return $o;
}
if((argc() > 2) && (argv(1) === 'delete')) {
@@ -184,7 +183,8 @@ class Oauth2 extends Controller {
);
$tpl = get_markup_template("oauth2.tpl");
- $o .= replace_macros($tpl, array(
+
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("oauth2"),
'$baseurl' => z_root(),
'$title' => t('Connected OAuth2 Apps'),
@@ -196,8 +196,6 @@ class Oauth2 extends Controller {
'$remove' => t('Remove authorization'),
'$apps' => $r,
));
- return $o;
-
}
}
diff --git a/Zotlabs/Module/Owa.php b/Zotlabs/Module/Owa.php
index 85467d4f4..254b1c7d1 100644
--- a/Zotlabs/Module/Owa.php
+++ b/Zotlabs/Module/Owa.php
@@ -18,96 +18,97 @@ use Zotlabs\Web\Controller;
class Owa extends Controller {
- function init() {
+ public function init(): void
+ {
$ret = [ 'success' => false ];
- if (array_key_exists('REDIRECT_REMOTE_USER',$_SERVER) && (! array_key_exists('HTTP_AUTHORIZATION',$_SERVER))) {
- $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['REDIRECT_REMOTE_USER'];
+ if (!$this->validateAuthorizationHeader()) {
+ $this->error('Missing or invalid authorization header.');
}
- if (array_key_exists('HTTP_AUTHORIZATION',$_SERVER) && substr(trim($_SERVER['HTTP_AUTHORIZATION']),0,9) === 'Signature') {
- $sigblock = HTTPSig::parse_sigheader($_SERVER['HTTP_AUTHORIZATION']);
- if ($sigblock) {
- $keyId = $sigblock['keyId'];
- $parsed = parse_url($keyId);
- if (str_starts_with($parsed['scheme'],'http')) {
- unset($parsed['fragment']);
- unset($parsed['query']);
- $keyId = unparse_url($parsed);
- }
- else {
- $keyId = str_replace('acct:', '', $keyId);
+ $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_AUTHORIZATION'] ?? $_SERVER['REDIRECT_REMOTE_USER'];
+
+ $sigblock = HTTPSig::parse_sigheader($_SERVER['HTTP_AUTHORIZATION']);
+ if ($sigblock) {
+ $keyId = $sigblock['keyId'];
+ $parsed = parse_url($keyId);
+ if (str_starts_with($parsed['scheme'],'http')) {
+ unset($parsed['fragment']);
+ unset($parsed['query']);
+ $keyId = unparse_url($parsed);
+ }
+ else {
+ $keyId = str_replace('acct:', '', $keyId);
+ }
+ if ($keyId) {
+ $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
+ WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s')
+ AND hubloc_deleted = 0 AND xchan_pubkey != ''
+ ORDER BY hubloc_id DESC",
+ dbesc($keyId),
+ dbesc($keyId),
+ dbesc($keyId)
+ );
+ if (! $r) {
+ $found = discover_by_webbie($keyId);
+ logger('found = ' . print_r($found, true));
+ if ($found) {
+ $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
+ WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s') AND hubloc_deleted = 0 AND xchan_pubkey != '' ORDER BY hubloc_id DESC ",
+ dbesc($keyId),
+ dbesc($keyId),
+ dbesc($keyId)
+ );
+ }
}
- if ($keyId) {
- $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
- WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s')
- AND hubloc_deleted = 0 AND xchan_pubkey != ''
- ORDER BY hubloc_id DESC",
- dbesc($keyId),
- dbesc($keyId),
- dbesc($keyId)
- );
- if (! $r) {
+
+ if ($r) {
+ foreach ($r as $hubloc) {
+ $verified = HTTPSig::verify(file_get_contents('php://input'), $hubloc['xchan_pubkey']);
+ if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) {
+ logger('OWA header: ' . print_r($verified,true),LOGGER_DATA);
+ logger('OWA success: ' . $hubloc['hubloc_id_url'],LOGGER_DATA);
+ $ret['success'] = true;
+ $token = random_string(32);
+ Verify::create('owt',0,$token,$hubloc['hubloc_id_url']);
+ $result = '';
+ openssl_public_encrypt($token,$result,$hubloc['xchan_pubkey']);
+ $ret['encrypted_token'] = base64url_encode($result);
+ break;
+ } else {
+ logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']);
+ }
+ }
+
+ if (!$ret['success']) {
+
+ // Possible a reinstall?
+ // In this case we probably already have an old hubloc
+ // but not the new one yet.
+
$found = discover_by_webbie($keyId);
- logger('found = ' . print_r($found, true));
+
if ($found) {
$r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
- WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s') AND hubloc_deleted = 0 AND xchan_pubkey != '' ORDER BY hubloc_id DESC ",
- dbesc($keyId),
- dbesc($keyId),
+ WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s') AND hubloc_deleted = 0 ORDER BY hubloc_id DESC LIMIT 1",
+ dbesc(str_replace('acct:', '', $keyId)),
dbesc($keyId)
);
- }
- }
-
- if ($r) {
- foreach ($r as $hubloc) {
- $verified = HTTPSig::verify(file_get_contents('php://input'), $hubloc['xchan_pubkey']);
- if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) {
- logger('OWA header: ' . print_r($verified,true),LOGGER_DATA);
- logger('OWA success: ' . $hubloc['hubloc_id_url'],LOGGER_DATA);
- $ret['success'] = true;
- $token = random_string(32);
- Verify::create('owt',0,$token,$hubloc['hubloc_id_url']);
- $result = '';
- openssl_public_encrypt($token,$result,$hubloc['xchan_pubkey']);
- $ret['encrypted_token'] = base64url_encode($result);
- break;
- } else {
- logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']);
- }
- }
- if (!$ret['success']) {
-
- // Possible a reinstall?
- // In this case we probably already have an old hubloc
- // but not the new one yet.
-
- $found = discover_by_webbie($keyId);
-
- if ($found) {
- $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
- WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s') AND hubloc_deleted = 0 ORDER BY hubloc_id DESC LIMIT 1",
- dbesc(str_replace('acct:', '', $keyId)),
- dbesc($keyId)
- );
-
- if ($r) {
- $verified = HTTPSig::verify(file_get_contents('php://input'), $r[0]['xchan_pubkey']);
- if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) {
- logger('OWA header: ' . print_r($verified,true), LOGGER_DATA);
- logger('OWA success: ' . $r[0]['hubloc_id_url'], LOGGER_DATA);
- $ret['success'] = true;
- $token = random_string(32);
- Verify::create('owt', 0, $token, $r[0]['hubloc_id_url']);
- $result = '';
- openssl_public_encrypt($token, $result, $r[0]['xchan_pubkey']);
- $ret['encrypted_token'] = base64url_encode($result);
- } else {
- logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']);
- }
+ if ($r) {
+ $verified = HTTPSig::verify(file_get_contents('php://input'), $r[0]['xchan_pubkey']);
+ if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) {
+ logger('OWA header: ' . print_r($verified,true), LOGGER_DATA);
+ logger('OWA success: ' . $r[0]['hubloc_id_url'], LOGGER_DATA);
+ $ret['success'] = true;
+ $token = random_string(32);
+ Verify::create('owt', 0, $token, $r[0]['hubloc_id_url']);
+ $result = '';
+ openssl_public_encrypt($token, $result, $r[0]['xchan_pubkey']);
+ $ret['encrypted_token'] = base64url_encode($result);
+ } else {
+ logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']);
}
}
}
@@ -118,4 +119,33 @@ class Owa extends Controller {
json_return_and_die($ret,'application/x-zot+json');
}
+
+ private function validateAuthorizationHeader(): bool
+ {
+ if (!empty($_SERVER['HTTP_AUTHORIZATION'])) {
+ $auth = trim($_SERVER['HTTP_AUTHORIZATION']);
+ } else if (!empty($_SERVER['REDIRECT_REMOTE_USER'])) {
+ $auth = trim($_SERVER['REDIRECT_REMOTE_USER']);
+ } else {
+ return false;
+ }
+
+ return strncmp($auth, 'Signature', 9) === 0;
+ }
+
+ /**
+ * Terminates the request, and return a json error response.
+ *
+ * @Note This function does not return!
+ *
+ * @param string $msg The error message for the response.
+ */
+ private function error(string $msg): void {
+ $ret = [
+ 'success' => false,
+ 'message' => $msg
+ ];
+
+ json_return_and_die($ret,'application/x-zot+json');
+ }
}
diff --git a/Zotlabs/Module/Page.php b/Zotlabs/Module/Page.php
index 8a698005a..a4ee5eaa2 100644
--- a/Zotlabs/Module/Page.php
+++ b/Zotlabs/Module/Page.php
@@ -183,9 +183,7 @@ class Page extends \Zotlabs\Web\Controller {
if($r[0]['mimetype'] === 'application/x-pdl')
\App::$page['pdl_content'] = true;
- $o .= prepare_page($r[0]);
- return $o;
-
+ return prepare_page($r[0]);
}
}
diff --git a/Zotlabs/Module/Pdledit.php b/Zotlabs/Module/Pdledit.php
index e0bbc31d0..aa512e6da 100644
--- a/Zotlabs/Module/Pdledit.php
+++ b/Zotlabs/Module/Pdledit.php
@@ -51,7 +51,7 @@ class Pdledit extends Controller {
if(argc() > 1)
$module = 'mod_' . argv(1) . '.pdl';
else {
- $o .= '<div class="generic-content-wrapper-styled">';
+ $o = '<div class="generic-content-wrapper-styled">';
$o .= '<h1>' . t('Edit System Page Description') . '</h1>';
$edited = [];
diff --git a/Zotlabs/Module/Permcat.php b/Zotlabs/Module/Permcat.php
index 064c9cefb..0335c7bc6 100644
--- a/Zotlabs/Module/Permcat.php
+++ b/Zotlabs/Module/Permcat.php
@@ -2,7 +2,7 @@
namespace Zotlabs\Module;
-use \Zotlabs\Lib as Zlib;
+use Zotlabs\Lib as Zlib;
class Permcat extends \Zotlabs\Web\Controller {
@@ -22,4 +22,4 @@ class Permcat extends \Zotlabs\Web\Controller {
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php
index 870a2cb79..e31aa9dc1 100644
--- a/Zotlabs/Module/Photos.php
+++ b/Zotlabs/Module/Photos.php
@@ -1122,7 +1122,7 @@ class Photos extends \Zotlabs\Web\Controller {
if(is_array($like_list) && (count($like_list) > MAX_LIKERS)) {
$like_list_part = array_slice($like_list, 0, MAX_LIKERS);
- array_push($like_list_part, '<a href="#" data-toggle="modal" data-target="#likeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
+ array_push($like_list_part, '<a href="#" data-bs-toggle="modal" data-bs-target="#likeModal-' . $link_item['id'] . '"><b>' . t('View all') . '</b></a>');
} else {
$like_list_part = '';
}
@@ -1134,7 +1134,7 @@ class Photos extends \Zotlabs\Web\Controller {
$dislike_button_label = tt('Dislike','Dislikes',$dislike_count,'noun');
if (is_array($dislike_list) && (count($dislike_list) > MAX_LIKERS)) {
$dislike_list_part = array_slice($dislike_list, 0, MAX_LIKERS);
- array_push($dislike_list_part, '<a href="#" data-toggle="modal" data-target="#dislikeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
+ array_push($dislike_list_part, '<a href="#" data-bs-toggle="modal" data-bs-target="#dislikeModal-' . $link_item['id'] . '"><b>' . t('View all') . '</b></a>');
} else {
$dislike_list_part = '';
}
diff --git a/Zotlabs/Module/Profperm.php b/Zotlabs/Module/Profperm.php
index 842197415..4594728b1 100644
--- a/Zotlabs/Module/Profperm.php
+++ b/Zotlabs/Module/Profperm.php
@@ -55,6 +55,8 @@ class Profperm extends \Zotlabs\Web\Controller {
}
+ $o = '';
+
if((argc() > 1) && (intval(argv(1)))) {
$r = q("SELECT * FROM profile WHERE id = %d AND uid = %d AND is_default = 0 LIMIT 1",
intval(argv(1)),
diff --git a/Zotlabs/Module/Pubstream.php b/Zotlabs/Module/Pubstream.php
index 6d8edf4d8..234e73792 100644
--- a/Zotlabs/Module/Pubstream.php
+++ b/Zotlabs/Module/Pubstream.php
@@ -202,11 +202,9 @@ class Pubstream extends \Zotlabs\Web\Controller {
if($mid) {
$r = q("SELECT parent AS item_id FROM item
left join abook on item.author_xchan = abook.abook_xchan
- left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.$identifier = '%s' and item.item_private = 0
$uids $site_firehose_sql
$item_normal
- and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2",
dbesc($mid)
@@ -216,11 +214,9 @@ class Pubstream extends \Zotlabs\Web\Controller {
// Fetch a page full of parent items for this page
$r = dbq("SELECT parent AS item_id FROM item
left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids )
- left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.item_private = 0 $thread_top
$uids $site_firehose_sql
$item_normal
- and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2
ORDER BY $ordering DESC $pager_sql "
@@ -231,10 +227,8 @@ class Pubstream extends \Zotlabs\Web\Controller {
if($mid) {
$r = q("SELECT parent AS item_id FROM item
left join abook on item.author_xchan = abook.abook_xchan
- left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.$identifier = '%s' and item.item_private = 0
$uids $site_firehose_sql $item_normal_update $simple_update
- and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2",
dbesc($mid)
@@ -243,11 +237,9 @@ class Pubstream extends \Zotlabs\Web\Controller {
else {
$r = dbq("SELECT parent AS item_id FROM item
left join abook on item.author_xchan = abook.abook_xchan
- left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.item_private = 0 $thread_top
$uids $site_firehose_sql $item_normal_update
$simple_update
- and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2"
);
diff --git a/Zotlabs/Module/React.php b/Zotlabs/Module/React.php
index e04b9b257..e1abd242e 100644
--- a/Zotlabs/Module/React.php
+++ b/Zotlabs/Module/React.php
@@ -91,6 +91,9 @@ class React extends Controller {
if ($x['success']) {
$nid = $x['item_id'];
Master::Summon(['Notifier', 'like', $nid]);
+ if (!empty($x['approval_id'])) {
+ Master::Summon(['Notifier', 'like', $x['approval_id']]);
+ }
}
}
diff --git a/Zotlabs/Module/Removeaccount.php b/Zotlabs/Module/Removeaccount.php
index cd18b79c0..b41acb8b0 100644
--- a/Zotlabs/Module/Removeaccount.php
+++ b/Zotlabs/Module/Removeaccount.php
@@ -36,22 +36,22 @@ class Removeaccount extends \Zotlabs\Web\Controller {
return;
}
}
-
+
$global_remove = 0; //intval($_POST['global']);
-
- account_remove($account_id, 1 - $global_remove);
+
+ account_remove($account_id, 1 - $global_remove);
}
-
+
function get() {
-
+
if(! local_channel())
goaway(z_root());
-
+
$hash = random_string();
-
+
$_SESSION['remove_account_verify'] = $hash;
$tpl = get_markup_template('removeaccount.tpl');
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$basedir' => z_root(),
'$hash' => $hash,
'$title' => t('Remove This Account'),
@@ -60,9 +60,5 @@ class Removeaccount extends \Zotlabs\Web\Controller {
// '$global' => array('global', t('Remove this account, all its channels and all its channel clones from the network'), false, t('By default only the instances of the channels located on this hub will be removed from the network')),
'$submit' => t('Remove Account')
));
-
- return $o;
-
}
-
}
diff --git a/Zotlabs/Module/Removeme.php b/Zotlabs/Module/Removeme.php
index 4d475ead6..d71f8d4ab 100644
--- a/Zotlabs/Module/Removeme.php
+++ b/Zotlabs/Module/Removeme.php
@@ -54,7 +54,7 @@ class Removeme extends \Zotlabs\Web\Controller {
$_SESSION['remove_account_verify'] = $hash;
$tpl = get_markup_template('removeme.tpl');
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$basedir' => z_root(),
'$hash' => $hash,
'$title' => t('Remove Channel'),
@@ -63,9 +63,5 @@ class Removeme extends \Zotlabs\Web\Controller {
// '$global' => [ 'global', t('Remove this channel and all its clones from the network'), false, t('By default only the instance of the channel located on this hub will be removed from the network'), [ t('No'),t('Yes') ] ],
'$submit' => t('Remove Channel')
));
-
- return $o;
-
}
-
}
diff --git a/Zotlabs/Module/Rmagic.php b/Zotlabs/Module/Rmagic.php
index 90cf8b854..4254dd38b 100644
--- a/Zotlabs/Module/Rmagic.php
+++ b/Zotlabs/Module/Rmagic.php
@@ -29,7 +29,7 @@ class Rmagic extends \Zotlabs\Web\Controller {
if($r['hubloc_url'] === z_root())
goaway(z_root() . '/login');
$dest = bin2hex(z_root() . '/' . str_replace(['rmagic','zid='],['','zid_='],\App::$query_string));
- goaway($r['hubloc_url'] . '/magic' . '?f=&owa=1&bdest=' . $dest);
+ goaway($r['hubloc_url'] . '/magic?owa=1&bdest=' . $dest);
}
}
}
@@ -84,7 +84,7 @@ class Rmagic extends \Zotlabs\Web\Controller {
else
$dest = bin2hex(z_root() . '/' . str_replace([ 'rmagic', 'zid=' ] ,[ '', 'zid_='],\App::$query_string));
- goaway($url . '/magic' . '?f=&owa=1&bdest=' . $dest);
+ goaway($url . '/magic?owa=1&bdest=' . $dest);
}
}
}
diff --git a/Zotlabs/Module/Search_ac.php b/Zotlabs/Module/Search_ac.php
index 24b724c5d..cd0960859 100644
--- a/Zotlabs/Module/Search_ac.php
+++ b/Zotlabs/Module/Search_ac.php
@@ -90,12 +90,7 @@ class Search_ac extends \Zotlabs\Web\Controller {
'items' => $results,
);
echo json_encode($o);
-
- logger('search_ac: ' . print_r($x,true),LOGGER_DATA,LOG_INFO);
-
+
killme();
}
-
-
-
}
diff --git a/Zotlabs/Module/Settings/Account.php b/Zotlabs/Module/Settings/Account.php
index 0266cee12..7f0d11069 100644
--- a/Zotlabs/Module/Settings/Account.php
+++ b/Zotlabs/Module/Settings/Account.php
@@ -100,7 +100,7 @@ class Account {
$attremail = ((!strpos($email, '@')) ? 'disabled="disabled"' : '');
$tpl = get_markup_template("settings_account.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_account"),
'$title' => t('Account Settings'),
'$origpass' => array('origpass', t('Current Password'), ' ',''),
@@ -114,7 +114,5 @@ class Account {
'$removeaccount' => t('Remove this account including all its channels'),
'$account_settings' => $account_settings
));
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Calendar.php b/Zotlabs/Module/Settings/Calendar.php
index 65240c635..3b15f4aa6 100644
--- a/Zotlabs/Module/Settings/Calendar.php
+++ b/Zotlabs/Module/Settings/Calendar.php
@@ -33,7 +33,7 @@ class Calendar {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -41,8 +41,5 @@ class Calendar {
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Channel_home.php b/Zotlabs/Module/Settings/Channel_home.php
index 470dbe4c3..388b70942 100644
--- a/Zotlabs/Module/Settings/Channel_home.php
+++ b/Zotlabs/Module/Settings/Channel_home.php
@@ -81,7 +81,7 @@ class Channel_home {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -90,8 +90,5 @@ class Channel_home {
'$extra_settings_html' => $extra_settings_html,
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Connections.php b/Zotlabs/Module/Settings/Connections.php
index 52a95a3d1..9d1069cf3 100644
--- a/Zotlabs/Module/Settings/Connections.php
+++ b/Zotlabs/Module/Settings/Connections.php
@@ -33,7 +33,7 @@ class Connections {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -41,8 +41,5 @@ class Connections {
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Conversation.php b/Zotlabs/Module/Settings/Conversation.php
index 5f3d903a8..51ee2c83a 100644
--- a/Zotlabs/Module/Settings/Conversation.php
+++ b/Zotlabs/Module/Settings/Conversation.php
@@ -36,7 +36,7 @@ class Conversation {
$tpl = (($aj) ? get_markup_template("settings_module_ajax.tpl") : get_markup_template("settings_module.tpl"));
- $o .= replace_macros($tpl, array(
+ $o = replace_macros($tpl, array(
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
'$title' => t('Conversation Settings'),
diff --git a/Zotlabs/Module/Settings/Directory.php b/Zotlabs/Module/Settings/Directory.php
index 09ea61f60..e1957d2fa 100644
--- a/Zotlabs/Module/Settings/Directory.php
+++ b/Zotlabs/Module/Settings/Directory.php
@@ -33,7 +33,7 @@ class Directory {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -41,8 +41,5 @@ class Directory {
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Editor.php b/Zotlabs/Module/Settings/Editor.php
index 85c3e69ae..50bd2b2ad 100644
--- a/Zotlabs/Module/Settings/Editor.php
+++ b/Zotlabs/Module/Settings/Editor.php
@@ -33,7 +33,7 @@ class Editor {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -41,8 +41,5 @@ class Editor {
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Events.php b/Zotlabs/Module/Settings/Events.php
index 0a0e3516c..3a7faa8b4 100644
--- a/Zotlabs/Module/Settings/Events.php
+++ b/Zotlabs/Module/Settings/Events.php
@@ -33,7 +33,7 @@ class Events {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -41,8 +41,5 @@ class Events {
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Features.php b/Zotlabs/Module/Settings/Features.php
index 553ff0836..84c868e48 100644
--- a/Zotlabs/Module/Settings/Features.php
+++ b/Zotlabs/Module/Settings/Features.php
@@ -38,17 +38,14 @@ class Features {
$arr[$fname][1][] = array('feature_' . $f[0],$f[1],((intval(feature_enabled(local_channel(),$f[0]))) ? "1" : ''),$f[2],array(t('Off'),t('On')));
}
}
-
+
$tpl = get_markup_template("settings_features.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("settings_features"),
'$title' => t('Additional Features'),
'$features' => $arr,
'$baseurl' => z_root(),
'$submit' => t('Submit'),
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Manage.php b/Zotlabs/Module/Settings/Manage.php
index 6fb57eafb..6e47cfcc7 100644
--- a/Zotlabs/Module/Settings/Manage.php
+++ b/Zotlabs/Module/Settings/Manage.php
@@ -34,7 +34,7 @@ class Manage {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -42,8 +42,5 @@ class Manage {
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Network.php b/Zotlabs/Module/Settings/Network.php
index eae963a25..39c66622e 100644
--- a/Zotlabs/Module/Settings/Network.php
+++ b/Zotlabs/Module/Settings/Network.php
@@ -52,7 +52,7 @@ class Network {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -61,8 +61,5 @@ class Network {
'$extra_settings_html' => $extra_settings_html,
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Photos.php b/Zotlabs/Module/Settings/Photos.php
index f68c8847b..05c380850 100644
--- a/Zotlabs/Module/Settings/Photos.php
+++ b/Zotlabs/Module/Settings/Photos.php
@@ -33,7 +33,7 @@ class Photos {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -41,8 +41,5 @@ class Photos {
'$features' => process_module_features_get(local_channel(), $features),
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Settings/Profiles.php b/Zotlabs/Module/Settings/Profiles.php
index 0ff2dfb6d..5052385a8 100644
--- a/Zotlabs/Module/Settings/Profiles.php
+++ b/Zotlabs/Module/Settings/Profiles.php
@@ -42,7 +42,7 @@ class Profiles {
$tpl = get_markup_template("settings_module.tpl");
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$rpath' => escape_url($rpath),
'$action_url' => 'settings/' . $module,
'$form_security_token' => get_form_security_token('settings_' . $module),
@@ -51,8 +51,5 @@ class Profiles {
'$extra_settings_html' => $extra_settings_html,
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Setup.php b/Zotlabs/Module/Setup.php
index 35079e5e5..5b423f67d 100644
--- a/Zotlabs/Module/Setup.php
+++ b/Zotlabs/Module/Setup.php
@@ -263,7 +263,10 @@ class Setup extends \Zotlabs\Web\Controller {
$this->check_htaccess($checks);
- $checkspassed = array_reduce($checks, "self::check_passed", true);
+ $checkspassed = array_reduce(
+ $checks,
+ "Zotlabs\Module\Setup::check_passed",
+ true);
$tpl = get_markup_template('install_checks.tpl');
$o .= replace_macros($tpl, array(
diff --git a/Zotlabs/Module/Share.php b/Zotlabs/Module/Share.php
index db0acb6f5..4fefdb4ef 100644
--- a/Zotlabs/Module/Share.php
+++ b/Zotlabs/Module/Share.php
@@ -136,6 +136,7 @@ class Share extends \Zotlabs\Web\Controller {
$post = item_store($arr);
$post_id = $post['item_id'];
+ $approval_id = $post['approval_id'] ?? 0;
$arr['id'] = $post_id;
@@ -143,6 +144,7 @@ class Share extends \Zotlabs\Web\Controller {
// info( t('Post repeated') . EOL);
+/*
$r = q("select * from item where id = %d",
intval($post_id)
);
@@ -151,8 +153,12 @@ class Share extends \Zotlabs\Web\Controller {
$sync_item = fetch_post_tags($r);
Libsync::build_sync_packet($channel['channel_id'], [ 'item' => [ encode_item($sync_item[0],true) ] ]);
}
+*/
Master::Summon([ 'Notifier', 'like', $post_id ]);
+ if ($approval_id) {
+ Master::Summon(['Notifier', 'like', $approval_id]);
+ }
killme();
diff --git a/Zotlabs/Module/Snap.php b/Zotlabs/Module/Snap.php
index 89aebc097..770ba07c2 100644
--- a/Zotlabs/Module/Snap.php
+++ b/Zotlabs/Module/Snap.php
@@ -8,8 +8,8 @@ namespace Zotlabs\Module;
* Module for accessing the DAV storage area from a DAV client.
*/
-use \Sabre\DAV as SDAV;
-use \Zotlabs\Storage;
+use Sabre\DAV as SDAV;
+use Zotlabs\Storage;
// composer autoloader for SabreDAV
require_once('vendor/autoload.php');
@@ -24,7 +24,7 @@ require_once('vendor/autoload.php');
class Snap extends \Zotlabs\Web\Controller {
function init() {
-
+
// workaround for HTTP-auth in CGI mode
if (x($_SERVER, 'REDIRECT_REMOTE_USER')) {
$userpass = base64_decode(substr($_SERVER["REDIRECT_REMOTE_USER"], 6)) ;
@@ -43,20 +43,20 @@ class Snap extends \Zotlabs\Web\Controller {
$_SERVER['PHP_AUTH_PW'] = $password;
}
}
-
+
if (! is_dir('store'))
os_mkdir('store', STORAGE_DEFAULT_PERMISSIONS, false);
-
+
$which = null;
if (argc() > 1)
$which = argv(1);
-
+
$profile = 0;
-
+
if($which)
profile_load( $which, $profile);
else
- killme();
+ killme();
if($_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_USER'] !== $which)
killme();
@@ -68,7 +68,7 @@ class Snap extends \Zotlabs\Web\Controller {
}
if(! in_array(strtolower($_SERVER['REQUEST_METHOD']),['propfind','get','head']))
- killme();
+ killme();
$auth = new \Zotlabs\Storage\BasicAuth();
$auth->setRealm(ucfirst(\Zotlabs\Lib\System::get_platform_name()) . 'WebDAV');
@@ -101,5 +101,5 @@ class Snap extends \Zotlabs\Web\Controller {
killme();
}
-
+
}
diff --git a/Zotlabs/Module/Sse.php b/Zotlabs/Module/Sse.php
index fda2f2be4..673457db1 100644
--- a/Zotlabs/Module/Sse.php
+++ b/Zotlabs/Module/Sse.php
@@ -207,10 +207,9 @@ class Sse extends Controller {
if ($result) {
XConfig::Set(self::$ob_hash, 'sse', 'notifications', []);
- json_return_and_die($result);
}
- killme();
+ json_return_and_die($result);
}
diff --git a/Zotlabs/Module/Sse_bs.php b/Zotlabs/Module/Sse_bs.php
index 09c4ed614..8847ff242 100644
--- a/Zotlabs/Module/Sse_bs.php
+++ b/Zotlabs/Module/Sse_bs.php
@@ -22,7 +22,6 @@ class Sse_bs extends Controller {
public static $xchans;
function init() {
-
self::$uid = local_channel();
self::$ob_hash = get_observer_hash();
self::$sse_id = false;
@@ -43,8 +42,9 @@ class Sse_bs extends Controller {
self::$offset = 0;
self::$xchans = '';
- if(isset($_REQUEST['sse_rmids']))
- self::mark_read($_REQUEST['sse_rmids']);
+ if (isset($_REQUEST['sse_rmids'])) {
+ self::mark_read(explode(',', $_REQUEST['sse_rmids']));
+ }
if(!empty($_REQUEST['nquery']) && $_REQUEST['nquery'] !== '%') {
$nquery = $_REQUEST['nquery'];
@@ -502,13 +502,15 @@ class Sse_bs extends Controller {
}
}
- $r = q("SELECT id FROM item
+ $r = q("SELECT id, body FROM item
WHERE true $uids
+ AND created <= '%s'
AND created > '%s'
$item_normal
$sql_extra
$sql_extra3
AND author_xchan != '%s' LIMIT 100",
+ dbescdate($_SESSION['sse_loadtime']),
dbescdate($_SESSION['last_login_date'] ?? $_SESSION['static_loadtime']),
dbesc(self::$ob_hash)
);
@@ -600,25 +602,15 @@ class Sse_bs extends Controller {
$i = 0;
for($x = 0; $x < $fcount; $x ++) {
- /*
- $p = q("SELECT oid AS parent FROM term WHERE uid = %d AND ttype = %d AND term = '%s'",
- intval(self::$uid),
- intval(TERM_FORUM),
- dbesc($forums[$x]['xchan_name'])
- );
-
- $p_str = ids_to_querystr($p, 'parent');
- $p_sql = (($p_str) ? "OR parent IN ( $p_str )" : '');
- */
$r = q("select count(*) as total from item
- where uid = %d and ( owner_xchan = '%s' OR author_xchan = '%s' $p_sql ) and verb != 'Announce' and item_unseen = 1 $sql_extra $item_normal",
+ where uid = %d and (owner_xchan = '%s' or author_xchan = '%s') and author_xchan != '%s' and verb != 'Announce' and item_unseen = 1 $sql_extra $item_normal",
intval(self::$uid),
dbesc($forums[$x]['xchan_hash']),
- dbesc($forums[$x]['xchan_hash'])
+ dbesc($forums[$x]['xchan_hash']),
+ dbesc(self::$ob_hash)
);
-
if($r[0]['total']) {
$forums[$x]['notify_link'] = z_root() . '/network/?f=&pf=1&unseen=1&cid=' . $forums[$x]['abook_id'];
diff --git a/Zotlabs/Module/Subthread.php b/Zotlabs/Module/Subthread.php
index b927ee480..baabee78f 100644
--- a/Zotlabs/Module/Subthread.php
+++ b/Zotlabs/Module/Subthread.php
@@ -159,7 +159,7 @@ class Subthread extends \Zotlabs\Web\Controller {
$arr['deny_cid'] = $item['deny_cid'];
$arr['deny_gid'] = $item['deny_gid'];
- $post = item_store($arr);
+ $post = item_store($arr, deliver: false, addAndSync: false);
$post_id = $post['item_id'];
$arr['id'] = $post_id;
diff --git a/Zotlabs/Module/Tagger.php b/Zotlabs/Module/Tagger.php
index b6067be5e..a88a3b112 100644
--- a/Zotlabs/Module/Tagger.php
+++ b/Zotlabs/Module/Tagger.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use App;
use Zotlabs\Lib\Libsync;
require_once('include/security.php');
@@ -18,6 +19,7 @@ class Tagger extends \Zotlabs\Web\Controller {
}
$sys = get_sys_channel();
+ $channel = App::get_channel();
$observer_hash = get_observer_hash();
//strip html-tags
@@ -125,10 +127,6 @@ class Tagger extends \Zotlabs\Web\Controller {
$termlink = html_entity_decode('&#x22d5;') . '[zrl=' . z_root() . '/search?tag=' . urlencode($clean_term) . ']'. $clean_term . '[/zrl]';
- $channel = \App::get_channel();
-
- $arr = array();
-
$arr['owner_xchan'] = $item['owner_xchan'];
$arr['author_xchan'] = $channel['channel_hash'];
diff --git a/Zotlabs/Module/Tagrm.php b/Zotlabs/Module/Tagrm.php
index a6dc21798..34eaf85b2 100644
--- a/Zotlabs/Module/Tagrm.php
+++ b/Zotlabs/Module/Tagrm.php
@@ -7,141 +7,141 @@ require_once('include/bbcode.php');
class Tagrm extends \Zotlabs\Web\Controller {
function post() {
-
+
if(! local_channel())
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
-
+
+
if((x($_POST,'submit')) && ($_POST['submit'] === t('Cancel')))
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
+
$tag = ((x($_POST,'tag')) ? trim($_POST['tag']) : '');
$item = ((x($_POST,'item')) ? intval($_POST['item']) : 0 );
-
+
$r = q("SELECT * FROM item WHERE id = %d AND uid = %d LIMIT 1",
intval($item),
intval(local_channel())
);
-
+
if(! $r)
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
+
$r = fetch_post_tags($r,true);
-
+
$item = $r[0];
$new_tags = array();
-
+
if($item['term']) {
for($x = 0; $x < count($item['term']); $x ++) {
if($item['term'][$x]['term'] !== hex2bin($tag))
$new_tags[] = $item['term'][$x];
}
}
-
+
if($new_tags)
$item['term'] = $new_tags;
else
unset($item['term']);
-
- item_store_update($item);
-
+
+ item_store_update($item, deliver: false, addAndSync: false);
+
info( t('Tag removed') . EOL );
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
+
// NOTREACHED
-
+
}
-
-
-
+
+
+
function get() {
-
+
if(! local_channel()) {
goaway(z_root() . '/' . $_SESSION['photo_return']);
// NOTREACHED
}
-
+
// remove tag on the fly if item and tag are provided
if((argc() == 4) && (argv(1) === 'drop') && intval(argv(2))) {
-
+
$item = intval(argv(2));
$tag = argv(3);
-
+
$r = q("SELECT * FROM item WHERE id = %d AND uid = %d LIMIT 1",
intval($item),
intval(local_channel())
);
-
+
if(! $r)
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
+
$r = fetch_post_tags($r,true);
-
+
$item = $r[0];
-
+
$new_tags = array();
-
+
if($item['term']) {
for($x = 0; $x < count($item['term']); $x ++) {
if($item['term'][$x]['term'] !== hex2bin($tag))
$new_tags[] = $item['term'][$x];
}
}
-
+
if($new_tags)
$item['term'] = $new_tags;
else
unset($item['term']);
-
- item_store_update($item);
-
+
+ item_store_update($item, deliver: false, addAndSync: false);
+
info( t('Tag removed') . EOL );
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
+
}
-
+
//if we got only the item print a list of tags to select
if((argc() == 3) && (argv(1) === 'drop') && intval(argv(2))) {
-
+
$o = '';
-
+
$item = intval(argv(2));
-
+
$r = q("SELECT * FROM item WHERE id = %d AND uid = %d LIMIT 1",
intval($item),
intval(local_channel())
);
-
+
if(! $r)
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
+
$r = fetch_post_tags($r,true);
-
+
if(! count($r[0]['term']))
goaway(z_root() . '/' . $_SESSION['photo_return']);
-
+
$o .= '<h3>' . t('Remove Item Tag') . '</h3>';
-
+
$o .= '<p id="tag-remove-desc">' . t('Select a tag to remove: ') . '</p>';
-
+
$o .= '<form id="tagrm" action="tagrm" method="post" >';
$o .= '<input type="hidden" name="item" value="' . $item . '" />';
$o .= '<ul>';
-
-
+
+
foreach($r[0]['term'] as $x) {
$o .= '<li><input type="checkbox" name="tag" value="' . bin2hex($x['term']) . '" >' . bbcode($x['term']) . '</input></li>';
}
-
+
$o .= '</ul>';
$o .= '<input id="tagrm-submit" type="submit" name="submit" value="' . t('Remove') .'" />';
$o .= '<input id="tagrm-cancel" type="submit" name="submit" value="' . t('Cancel') .'" />';
$o .= '</form>';
-
+
return $o;
-
+
}
-
+
}
-
+
}
diff --git a/Zotlabs/Module/Thing.php b/Zotlabs/Module/Thing.php
index 2038db8c0..aef494e13 100644
--- a/Zotlabs/Module/Thing.php
+++ b/Zotlabs/Module/Thing.php
@@ -50,24 +50,31 @@ class Thing extends \Zotlabs\Web\Controller {
$channel = \App::get_channel();
- $term_hash = (($_REQUEST['term_hash']) ? $_REQUEST['term_hash'] : '');
+ $term_hash = (($_POST['term_hash']) ? $_POST['term_hash'] : '');
- $name = escape_tags($_REQUEST['term']);
- $verb = escape_tags($_REQUEST['verb']);
- $activity = intval($_REQUEST['activity']);
- $profile_guid = escape_tags($_REQUEST['profile_assign']);
- $url = $_REQUEST['url'];
- $photo = $_REQUEST['img'];
+ $name = escape_tags($_POST['term']);
+ $verb = escape_tags($_POST['verb']);
+ $activity = intval($_POST['activity']);
+ $url = $_POST['url'];
+ $photo = $_POST['img'];
+
+ $profile_guid = isset($_POST['profile_assign'])
+ ? escape_tags($_POST['profile_assign'])
+ : null;
$hash = new_uuid();
$verbs = obj_verbs();
- /**
- * verbs: [0] = first person singular, e.g. "I want", [1] = 3rd person singular, e.g. "Bill wants"
- * We use the first person form when creating an activity, but the third person for use in activities
- * @FIXME There is no accounting for verb gender for languages where this is significant. We may eventually
- * require obj_verbs() to provide full conjugations and specify which form to use in the $_REQUEST params to this module.
+ /*
+ * verbs: [0] = first person singular, e.g. "I want", [1] = 3rd person
+ * singular, e.g. "Bill wants" We use the first person form when
+ * creating an activity, but the third person for use in activities
+ *
+ * @FIXME There is no accounting for verb gender for languages where
+ * this is significant. We may eventually require obj_verbs() to
+ * provide full conjugations and specify which form to use in the
+ * $_POST params to this module.
*/
$translated_verb = $verbs[$verb][1];
@@ -100,7 +107,7 @@ class Thing extends \Zotlabs\Web\Controller {
return;
$acl = new \Zotlabs\Access\AccessList($channel);
- $acl->set_from_array($_REQUEST);
+ $acl->set_from_array($_POST);
$x = $acl->get();
@@ -332,7 +339,7 @@ class Thing extends \Zotlabs\Web\Controller {
return '';
}
- $o .= replace_macros(get_markup_template('thing_edit.tpl'),array(
+ return replace_macros(get_markup_template('thing_edit.tpl'),array(
'$thing_hdr' => t('Edit Thing'),
'$multiprof' => feature_enabled(local_channel(),'multi_profiles'),
'$profile_lbl' => t('Select a profile'),
@@ -356,8 +363,6 @@ class Thing extends \Zotlabs\Web\Controller {
'$lockstate' => $lockstate,
'$submit' => t('Submit')
));
-
- return $o;
}
if(argc() == 3 && argv(1) === 'drop') {
@@ -385,16 +390,16 @@ class Thing extends \Zotlabs\Web\Controller {
Libsync::build_sync_packet(0,array('obj' => $r));
- return $o;
+ return '';
}
- $o .= replace_macros(get_markup_template('thing_input.tpl'),array(
+ return replace_macros(get_markup_template('thing_input.tpl'),array(
'$thing_hdr' => t('Add Thing to your Profile'),
'$multiprof' => feature_enabled(local_channel(),'multi_profiles'),
'$profile_lbl' => t('Select a profile'),
'$profile_select' => contact_profile_assign(''),
'$verb_lbl' => $channel['channel_name'],
- '$activity' => array('activity',t('Post an activity'),((array_key_exists('activity',$_REQUEST)) ? $_REQUEST['activity'] : true),t('Only sends to viewers of the applicable profile')),
+ '$activity' => array('activity',t('Post an activity'),((array_key_exists('activity',$_GET)) ? $_GET['activity'] : true),t('Only sends to viewers of the applicable profile')),
'$verb_select' => obj_verb_selector(),
'$thing_lbl' => t('Name of thing e.g. something'),
'$url_lbl' => t('URL of thing (optional)'),
@@ -408,8 +413,5 @@ class Thing extends \Zotlabs\Web\Controller {
'$lockstate' => $lockstate,
'$submit' => t('Submit')
));
-
- return $o;
}
-
}
diff --git a/Zotlabs/Module/Vote.php b/Zotlabs/Module/Vote.php
index 06c47f91f..5192e3043 100644
--- a/Zotlabs/Module/Vote.php
+++ b/Zotlabs/Module/Vote.php
@@ -107,10 +107,12 @@ class Vote extends Controller {
retain_item($fetch[0]['id']);
if($x['success']) {
- $itemid = $x['item_id'];
- Master::Summon( [ 'Notifier', 'like', $itemid ] );
+ Master::Summon(['Notifier', 'like', $x['item_id']]);
+ if (!empty($x['approval_id'])) {
+ Master::Summon(['Notifier', 'like', $x['approval_id']]);
+ }
}
-
+/*
$r = q("select * from item where id = %d",
intval($itemid)
);
@@ -119,6 +121,7 @@ class Vote extends Controller {
$sync_item = fetch_post_tags($r);
Libsync::build_sync_packet($channel['channel_id'], [ 'item' => [ encode_item($sync_item[0],true) ] ]);
}
+*/
}
$ret['success'] = true;
diff --git a/Zotlabs/Module/Webfinger.php b/Zotlabs/Module/Webfinger.php
index 0dafae23c..ba0dca9e7 100644
--- a/Zotlabs/Module/Webfinger.php
+++ b/Zotlabs/Module/Webfinger.php
@@ -7,16 +7,16 @@ namespace Zotlabs\Module;
class Webfinger extends \Zotlabs\Web\Controller {
function get() {
-
-
- $o .= '<h3>Webfinger Diagnostic</h3>';
-
+
+
+ $o = '<h3>Webfinger Diagnostic</h3>';
+
$o .= '<form action="webfinger" method="get">';
$o .= 'Lookup address: <input type="text" style="width: 250px;" name="addr" value="' . $_GET['addr'] .'" />';
- $o .= '<input type="submit" name="submit" value="Submit" /></form>';
-
+ $o .= '<input type="submit" name="submit" value="Submit" /></form>';
+
$o .= '<br /><br />';
-
+
if(x($_GET,'addr')) {
$addr = trim($_GET['addr']);
diff --git a/Zotlabs/Module/Webpages.php b/Zotlabs/Module/Webpages.php
index ffb0d94ea..ca15c0b3a 100644
--- a/Zotlabs/Module/Webpages.php
+++ b/Zotlabs/Module/Webpages.php
@@ -63,7 +63,7 @@ class Webpages extends Controller {
switch ($_SESSION['action']) {
case 'import':
$_SESSION['action'] = null;
- $o .= replace_macros(get_markup_template('webpage_import.tpl'), array(
+ return replace_macros(get_markup_template('webpage_import.tpl'), array(
'$title' => t('Import Webpage Elements'),
'$importbtn' => t('Import selected'),
'$action' => 'import',
@@ -71,7 +71,6 @@ class Webpages extends Controller {
'$layouts' => $_SESSION['layouts'],
'$blocks' => $_SESSION['blocks'],
));
- return $o;
case 'importselected':
$_SESSION['action'] = null;
@@ -87,7 +86,7 @@ class Webpages extends Controller {
$pages = get_webpage_elements($channel, 'pages');
$layouts = get_webpage_elements($channel, 'layouts');
$blocks = get_webpage_elements($channel, 'blocks');
- $o .= replace_macros(get_markup_template('webpage_export_list.tpl'), array(
+ $o = replace_macros(get_markup_template('webpage_export_list.tpl'), array(
'$title' => t('Export Webpage Elements'),
'$exportbtn' => t('Export selected'),
'$action' => $_SESSION['export'], // value should be 'zipfile' or 'cloud'
diff --git a/Zotlabs/Module/Zot_probe.php b/Zotlabs/Module/Zot_probe.php
index 3eaabdd92..cf8355ce6 100644
--- a/Zotlabs/Module/Zot_probe.php
+++ b/Zotlabs/Module/Zot_probe.php
@@ -15,13 +15,19 @@ class Zot_probe extends \Zotlabs\Web\Controller {
$o .= '<form action="zot_probe" method="get">';
$o .= 'Lookup URI: <input type="text" style="width: 250px;" name="addr" value="' . $addr .'" /><br>';
+ $o .= '<input type="checkbox" name="sign" /> Sign request <br>';
$o .= '<input type="submit" name="submit" value="Submit" /></form>';
$o .= '<br /><br />';
if($addr) {
- $x = Zotfinger::exec($addr);
+ $channel = null;
+ if ($_GET['sign']) {
+ $channel = get_sys_channel();
+ }
+
+ $x = Zotfinger::exec($addr, $channel);
$o .= '<pre>' . htmlspecialchars(print_array($x)) . '</pre>';
diff --git a/Zotlabs/Render/SmartyInterface.php b/Zotlabs/Render/SmartyInterface.php
index 64c6aa377..a319a4881 100644
--- a/Zotlabs/Render/SmartyInterface.php
+++ b/Zotlabs/Render/SmartyInterface.php
@@ -2,7 +2,7 @@
namespace Zotlabs\Render;
-use Smarty;
+use Smarty\Smarty;
use App;
class SmartyInterface extends Smarty {
@@ -26,13 +26,13 @@ class SmartyInterface extends Smarty {
$this->setTemplateDir($template_dirs);
$basecompiledir = App::$config['system']['smarty3_folder'];
-
+
$this->setCompileDir($basecompiledir.'/compiled/');
$this->setConfigDir($basecompiledir.'/config/');
$this->setCacheDir($basecompiledir.'/cache/');
- $this->left_delimiter = App::get_template_ldelim('smarty3');
- $this->right_delimiter = App::get_template_rdelim('smarty3');
+ $this->setLeftDelimiter(App::get_template_ldelim('smarty3'));
+ $this->setRightDelimiter(App::get_template_rdelim('smarty3'));
// Don't report errors so verbosely
$this->error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE;
diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php
index e7f71c8c8..6a9cd61ef 100644
--- a/Zotlabs/Storage/Browser.php
+++ b/Zotlabs/Storage/Browser.php
@@ -399,7 +399,6 @@ class Browser extends DAV\Browser\Plugin {
'$allow_gid' => ((isset($channel_acl['allow_gid'])) ? acl2json($channel_acl['allow_gid']) : ''),
'$deny_cid' => ((isset($channel_acl['deny_cid'])) ? acl2json($channel_acl['deny_cid']) : ''),
'$deny_gid' => ((isset($channel_acl['deny_gid'])) ? acl2json($channel_acl['deny_gid']) : ''),
- '$is_owner' => $is_owner,
'$select_all_label' => t('Select All'),
'$bulk_actions_label' => t('Bulk Actions'),
'$adjust_permissions_label' => t('Adjust Permissions'),
diff --git a/Zotlabs/Storage/GitRepo.php b/Zotlabs/Storage/GitRepo.php
deleted file mode 100644
index 306abc0ba..000000000
--- a/Zotlabs/Storage/GitRepo.php
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-
-namespace Zotlabs\Storage;
-
-use PHPGit\Git as PHPGit;
-
-require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
-
-/**
- * Wrapper class for PHPGit class for git repositories managed by Hubzilla
- *
- * @author Andrew Manning <andrewmanning@grid.reticu.li>
- */
-class GitRepo {
-
- public $url = null;
- public $name = null;
- private $path = null;
- private $channel = null;
- public $git = null;
- private $repoBasePath = null;
-
- function __construct($channel = 'sys', $url = null, $clone = false, $name = null, $path = null) {
-
- if ($channel === 'sys' && !is_site_admin()) {
- logger('Only admin can use channel sys');
- return null;
- }
-
- $this->repoBasePath = __DIR__ . '/../../store/git';
- $this->channel = $channel;
- $this->git = new PHPGit();
-
- // Allow custom path for repo in the case of , for example
- if ($path) {
- $this->path = $path;
- } else {
- $this->path = $this->repoBasePath . "/" . $this->channel . "/" . $this->name;
- }
-
- if ($this->isValidGitRepoURL($url)) {
- $this->url = $url;
- }
-
- if ($name) {
- $this->name = $name;
- } else {
- $this->name = $this->getRepoNameFromURL($url);
- }
- if (!$this->name) {
- logger('Error creating GitRepo. No repo name found.');
- return null;
- }
-
- if (is_dir($this->path)) {
- // ignore the $url input if it exists
- // TODO: Check if the path is either empty or is a valid git repo and error if not
- $this->git->setRepository($this->path);
- // TODO: get repo metadata
- return;
- }
-
- if ($this->url) {
- // create the folder and clone the repo at url to that folder if $clone is true
- if ($clone) {
- if (mkdir($this->path, 0770, true)) {
- $this->git->setRepository($this->path);
- if (!$this->cloneRepo()) {
- // TODO: throw error
- logger('git clone failed: ' . json_encode($this->git));
- }
- } else {
- logger('git repo path could not be created: ' . json_encode($this->git));
- }
- }
- }
- }
-
- public function initRepo() {
- if(!$this->path) return false;
- try {
- return $this->git->init($this->path);
- } catch (\PHPGit\Exception\GitException $ex) {
- return false;
- }
- }
-
- public function pull() {
- try {
- $success = $this->git->pull();
- } catch (\PHPGit\Exception\GitException $ex) {
- return false;
- }
- return $success;
- }
-
- public function getRepoPath() {
- return $this->path;
- }
-
- public function setRepoPath($directory) {
- if (is_dir($directory)) {
- $this->path->$directory;
- $this->git->setRepository($directory);
- return true;
- }
- return false;
- }
-
- public function setIdentity($user_name, $user_email) {
- // setup user for commit messages
- $this->git->config->set("user.name", $user_name, ['global' => false, 'system' => false]);
- $this->git->config->set("user.email", $user_email, ['global' => false, 'system' => false]);
- }
-
- public function cloneRepo() {
- if (validate_url($this->url) && $this->isValidGitRepoURL($this->url) && is_dir($this->path)) {
- return $this->git->clone($this->url, $this->path);
- }
- }
-
- public function probeRepo() {
- $git = $this->git;
- $repo = array();
- $repo['remote'] = $git->remote();
- $repo['branches'] = $git->branch(['all' => true]);
- $repo['logs'] = $git->log(array('limit' => 50));
- return $repo;
- }
-
- // Commit changes to the repo. Default is to stage all changes and commit everything.
- public function commit($msg, $options = array()) {
- try {
- return $this->git->commit($msg, $options);
- } catch (\PHPGit\Exception\GitException $ex) {
- return false;
- }
- }
-
- public static function isValidGitRepoURL($url) {
- if (validate_url($url) && strrpos(parse_url($url, PHP_URL_PATH), '.')) {
- return true;
- } else {
- return false;
- }
- }
-
- public static function getRepoNameFromURL($url) {
- $urlpath = parse_url($url, PHP_URL_PATH);
- $lastslash = strrpos($urlpath, '/') + 1;
- $gitext = strrpos($urlpath, '.');
- if ($gitext) {
- return substr($urlpath, $lastslash, $gitext - $lastslash);
- } else {
- return null;
- }
- }
-
-}
diff --git a/Zotlabs/Thumbs/Epubthumb.php b/Zotlabs/Thumbs/Epubthumb.php
index 6ebbd8933..af372e85c 100644
--- a/Zotlabs/Thumbs/Epubthumb.php
+++ b/Zotlabs/Thumbs/Epubthumb.php
@@ -2,60 +2,197 @@
namespace Zotlabs\Thumbs;
-require_once 'library/epub-meta/epub.php';
+use DOMDocument;
+use DOMElement;
+use DOMXPath;
+use GdImage;
+use ZipArchive;
/**
- * @brief Thumbnail creation for epub files.
- *
+ * Thumbnail creation for epub files.
*/
class Epubthumb {
/**
- * @brief Match for application/epub+zip.
+ * Match for application/epub+zip.
*
* @param string $type MimeType
* @return boolean
*/
- function Match($type) {
- return(($type === 'application/epub+zip') ? true : false );
+ function Match(string $type): bool {
+ return $type === 'application/epub+zip';
}
/**
- * @brief
+ * Create the thumbnail if the Epub has a cover.
*
* @param array $attach
- * @param number $preview_style unused
- * @param number $height (optional) default 300
- * @param number $width (optional) default 300
+ * @param int $preview_style unused
+ * @param int $height (optional) default 300
+ * @param int $width (optional) default 300
+ *
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+ * phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed
*/
- function Thumb($attach, $preview_style, $height = 300, $width = 300) {
+ function Thumb($attach, $preview_style, $height = 300, $width = 300): void {
$file = dbunescbin($attach['content']);
if (!$file) {
return;
}
- $photo = false;
-
- $ep = new \EPub($file);
- $data = $ep->Cover();
-
- if($data['found']) {
- $photo = $data['data'];
- }
+ $image = $this->getCoverFromEpub($file);
- if($photo) {
- $image = imagecreatefromstring($photo);
- $dest = imagecreatetruecolor($width, $height);
+ if ($image) {
$srcwidth = imagesx($image);
$srcheight = imagesy($image);
+ $dest = imagecreatetruecolor($width, $height);
imagealphablending($dest, false);
imagesavealpha($dest, true);
+
imagecopyresampled($dest, $image, 0, 0, 0, 0, $width, $height, $srcwidth, $srcheight);
+
+ imagejpeg($dest, "{$file}.thumb");
+
imagedestroy($image);
- imagejpeg($dest, dbunescbin($attach['content']) . '.thumb');
+ imagedestroy($dest);
}
}
+
+ /**
+ * Fetch the cover from the epub archive, if it's present.
+ *
+ * There's a few limitations here: This will only work if the cover
+ * is a raster image of a supported format. SVG does not work, neither
+ * will other schemes sometimes used for cover/front page.
+ *
+ * @param string $filename The local filename of the epub archive.
+ *
+ * @return GdImage|false If a cover is found, it is returned as a
+ * GdImage object. Otherwise return false.
+ */
+ private function getCoverFromEpub(string $filename): GdImage|false {
+ $epub = new ZipArchive();
+ $rc = $epub->open($filename, ZipArchive::RDONLY);
+
+ if ($rc !== true) {
+ logger("Error opening file '{$filename}': rc = ${rc}.", LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ $cover = false;
+ $cover_name = $this->parseEpub($epub);
+ if ($cover_name !== false) {
+ $cover = $epub->getFromName($cover_name);
+ if ($cover === false) {
+ logger("File '{$cover_name}' not found in EPUB.", LOGGER_DEBUG, LOG_DEBUG);
+ }
+ }
+
+ $epub->close();
+
+ if ($cover !== false && !empty($cover)) {
+ return imagecreatefromstring($cover);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Parse the epub to find the path of the cover image.
+ *
+ * @param ZipArchive $epub An opened epub ZipArchive.
+ *
+ * @return string|false The path to the cover image or false.
+ */
+ private function parseEpub(ZipArchive $epub): string|false {
+ $packagePath = $this->getEpubPackagePath($epub);
+ if ($packagePath !== false) {
+ $package = $epub->getFromName($packagePath);
+ if ($package === false || empty($package)) {
+ logger("Package file '${packagePath}' not found in EPUB", LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ $domdoc = new DOMDocument();
+ $domdoc->loadXML($package);
+ $xpath = new DOMXPath($domdoc);
+ $xpath->registerNamespace("n", "http://www.idpf.org/2007/opf");
+ $nodes = $xpath->query('/n:package/n:manifest/n:item[@properties="cover-image"]');
+
+ if ($nodes->count() === 0) {
+ logger('No cover found in EPUB manifest.', LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ $node = $nodes->item(0);
+ if ($node === null) {
+ logger('No nodes in non-empty node list?', LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ if (is_a($node, DOMElement::class)) {
+ // The URL's in the package file is relative to the subdirectory
+ // within the epub archive where it is located. See
+ // https://www.w3.org/TR/epub-33/#sec-parsing-urls-metainf
+ return dirname($packagePath) . '/' . $node->getAttribute('href');
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Locate the package file within the epub.
+ *
+ * The package file in an epub archive contains the manifest
+ * that again may contain a reference to the cover for the
+ * epub.
+ *
+ * @param ZipArchive $epub An opened epub archive.
+ *
+ * @return string|false The full pathname of the package file or false.
+ */
+ private function getEpubPackagePath(ZipArchive $epub): string|false {
+ //
+ // The only mandatory known file within the archive is the
+ // container file, so we fetch it to find the reference to
+ // the package file.
+ //
+ // See: https://www.w3.org/TR/epub-33/#sec-container-metainf
+ //
+ $container = $epub->getFromName('META-INF/container.xml');
+
+ if ($container === false || empty($container)) {
+ logger('No container in archive, probably not an EPUB.', LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ $domdoc = new DOMDocument();
+ $domdoc->loadXML($container);
+ $nodes = $domdoc->getElementsByTagName('rootfile');
+
+ if ($nodes->count() == 0) {
+ logger('EPUB rootfile not found, is this an epub?', LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ $packageNode = $nodes->item(0);
+ if ($packageNode === null || !is_a($packageNode, DOMElement::class)) {
+ logger('EPUB rootfile element missing or invalid.', LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ $packagePath = $packageNode->getAttribute('full-path');
+ $packageMediaType = $packageNode->getAttribute('media-type');
+
+ if (empty($packagePath) || $packageMediaType !== 'application/oebps-package+xml') {
+ logger('EPUB package path missing or incorrect media type.', LOGGER_DEBUG, LOG_DEBUG);
+ return false;
+ }
+
+ return $packagePath;
+ }
}
diff --git a/Zotlabs/Update/_1007.php b/Zotlabs/Update/_1007.php
index eb52c5bc5..74e1bb310 100644
--- a/Zotlabs/Update/_1007.php
+++ b/Zotlabs/Update/_1007.php
@@ -6,10 +6,10 @@ class _1007 {
function run() {
$r = q("ALTER TABLE `channel` ADD `channel_r_storage` INT UNSIGNED NOT NULL DEFAULT '128', ADD `channel_w_storage` INT UNSIGNED NOT NULL DEFAULT '128', add index ( channel_r_storage ), add index ( channel_w_storage )");
- if($r && $r2)
+ if($r)
return UPDATE_SUCCESS;
return UPDATE_FAILED;
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Update/_1151.php b/Zotlabs/Update/_1151.php
index d14baabb1..20f3180a0 100644
--- a/Zotlabs/Update/_1151.php
+++ b/Zotlabs/Update/_1151.php
@@ -8,7 +8,7 @@ function run() {
$r3 = q("select likes.*, item.mid from likes left join item on likes.iid = item.id");
if($r3) {
foreach($r3 as $rr) {
- q("update likes set i_mid = '%s' where id = $d",
+ q("update likes set i_mid = '%s' where id = %d",
dbesc($rr['mid']),
intval($rr['id'])
);
@@ -21,4 +21,4 @@ function run() {
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Web/HttpMeta.php b/Zotlabs/Web/HttpMeta.php
index 7cf93dda9..d12037a51 100644
--- a/Zotlabs/Web/HttpMeta.php
+++ b/Zotlabs/Web/HttpMeta.php
@@ -5,16 +5,9 @@ namespace Zotlabs\Web;
class HttpMeta {
- private $vars = null;
- private $og = null;
-
- function __construct() {
-
- $this->vars = [];
- $this->og = [];
- $this->ogproperties = [];
-
- }
+ private $vars = [];
+ private $og = [];
+ private $ogproperties = [];
//Set Meta Value
// Mode:
diff --git a/Zotlabs/Web/WebServer.php b/Zotlabs/Web/WebServer.php
index 19f14ee8a..d59effc88 100644
--- a/Zotlabs/Web/WebServer.php
+++ b/Zotlabs/Web/WebServer.php
@@ -61,7 +61,7 @@ class WebServer {
if (x($_GET,'zid') && $installed) {
\App::$query_string = strip_zids(\App::$query_string);
if(! local_channel()) {
- if (!isset($_SESSION['my_address']) || $_SESSION['my_address'] != $_GET['zid']) {
+ if (!isset($_SESSION['my_address'])) {
$_SESSION['my_address'] = Text::escape_tags($_GET['zid']);
$_SESSION['authenticated'] = 0;
}
diff --git a/Zotlabs/Widget/Activity.php b/Zotlabs/Widget/Activity.php
index 34e0f67dc..19f7acadb 100644
--- a/Zotlabs/Widget/Activity.php
+++ b/Zotlabs/Widget/Activity.php
@@ -17,7 +17,7 @@ class Activity {
$o = '';
if(is_array($arr) && array_key_exists('limit',$arr))
- $limit = " limit " . intval($limit) . " ";
+ $limit = " limit " . intval($arr['limit']) . " ";
else
$limit = '';
diff --git a/Zotlabs/Widget/Album.php b/Zotlabs/Widget/Album.php
index 003f6f49d..f1fa69182 100644
--- a/Zotlabs/Widget/Album.php
+++ b/Zotlabs/Widget/Album.php
@@ -94,7 +94,7 @@ class Album {
$tpl = get_markup_template('photo_album.tpl');
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$photos' => $photos,
'$album' => (($title) ? $title : $album),
'$album_id' => rand(),
@@ -102,11 +102,9 @@ class Album {
'$can_post' => false,
'$upload' => array(t('Upload'), z_root() . '/photos/' . \App::$profile['channel_address'] . '/upload/' . bin2hex($album)),
'$order' => false,
- '$upload_form' => $upload_form,
- '$usage' => $usage_message
+ '$upload_form' => '', // $upload_form,
+ '$usage' => '', // $usage_message
));
-
- return $o;
}
}
diff --git a/Zotlabs/Widget/Item.php b/Zotlabs/Widget/Item.php
index 6f943ffdf..3de135cb9 100644
--- a/Zotlabs/Widget/Item.php
+++ b/Zotlabs/Widget/Item.php
@@ -34,7 +34,7 @@ class Item {
if($arr['title']) {
$r = q("select item.* from item left join iconfig on item.id = iconfig.iid
where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s'
- and iconfig.k = 'WEBPAGE' and item_type = %d $sql_extra $revision limit 1",
+ and iconfig.k = 'WEBPAGE' and item_type = %d $sql_extra limit 1",
intval($channel_id),
dbesc($arr['title']),
intval(ITEM_TYPE_WEBPAGE)
diff --git a/Zotlabs/Widget/Messages.php b/Zotlabs/Widget/Messages.php
index 294a982b1..f90b4f99e 100644
--- a/Zotlabs/Widget/Messages.php
+++ b/Zotlabs/Widget/Messages.php
@@ -23,20 +23,35 @@ class Messages {
$_SESSION['messages_loadtime'] = datetime_convert();
+ $r = q("SELECT DISTINCT(term) FROM term WHERE uid = %d AND ttype = %d ORDER BY term",
+ intval(local_channel()),
+ intval(TERM_FILE)
+ );
+
+ if ($r) {
+ foreach($r as $rr) {
+ $file_tags[] = $rr['term'];
+ }
+ }
+
$tpl = get_markup_template('messages_widget.tpl');
$o = replace_macros($tpl, [
'$entries' => $page['entries'] ?? [],
'$offset' => $page['offset'] ?? 0,
'$feature_star' => feature_enabled(local_channel(), 'star_posts'),
+ '$feature_file' => feature_enabled(local_channel(), 'filing'),
+ '$file_tags' => $file_tags,
'$strings' => [
'messages_title' => t('Public and restricted messages'),
'direct_messages_title' => t('Direct messages'),
'starred_messages_title' => t('Starred messages'),
+ 'filed_messages_title' => t('Filed messages'),
'notice_messages_title' => t('Notices'),
'loading' => t('Loading'),
'empty' => t('No messages'),
'unseen_count' => t('Unseen'),
- 'filter' => t('Filter by name or address')
+ 'filter' => t('Filter by name or address'),
+ 'file_filter' => t('Filter by file name')
]
]);
@@ -50,6 +65,7 @@ class Messages {
$offset = $options['offset'] ?? 0;
$type = $options['type'] ?? '';
$author = $options['author'] ?? '';
+ $file = $options['file'] ?? '';
if ($offset == -1) {
return;
@@ -67,8 +83,9 @@ class Messages {
$item_normal_c = str_replace('item.', 'c.', $item_normal);
$entries = [];
$limit = 30;
+ $order_sql = 'i.created DESC';
$dummy_order_sql = '';
- $author_sql = '';
+ $filter_sql = '';
$loadtime = (($offset) ? $_SESSION['messages_loadtime'] : datetime_convert());
$vnotify = get_pconfig(local_channel(), 'system', 'vnotify', -1);
@@ -84,43 +101,55 @@ class Messages {
$vnotify_sql_i = " AND i.verb NOT IN ('Dislike', '" . dbesc(ACTIVITY_DISLIKE) . "') ";
}
- if($author) {
- $author_sql = " AND (i.owner_xchan = '" . protect_sprintf(dbesc($author)) . "') ";
+ if($type !== 'filed' && $author) {
+ $filter_sql = " AND (i.owner_xchan = '" . protect_sprintf(dbesc($author)) . "') ";
+ }
+
+ if($type === 'filed' && $file) {
+ $filed_filter_sql = " AND (term.term = '" . protect_sprintf(dbesc($file)) . "') ";
}
switch($type) {
case 'direct':
- $type_sql = ' AND i.item_private = 2 ';
+ $type_sql = ' AND i.item_private = 2 AND i.item_thread_top = 1 ';
// $dummy_order_sql has no other meaning but to trick
// some mysql backends into using the right index.
$dummy_order_sql = ', i.received DESC ';
break;
case 'starred':
- $type_sql = ' AND i.item_starred = 1 ';
+ $type_sql = ' AND i.item_starred = 1 AND i.item_thread_top = 1 ';
+ break;
+ case 'filed':
+ $type_sql = ' AND i.id IN (SELECT term.oid FROM term WHERE term.ttype = ' . TERM_FILE . ' AND term.uid = i.uid ' . $filed_filter_sql . ')';
break;
default:
- $type_sql = ' AND i.item_private IN (0, 1) ';
+ $type_sql = ' AND i.item_private IN (0, 1) AND i.item_thread_top = 1 ';
}
$items = q("SELECT *,
(SELECT count(*) FROM item c WHERE c.uid = %d AND c.parent = i.parent AND c.item_unseen = 1 AND c.item_thread_top = 0 $item_normal_c $vnotify_sql_c) AS unseen_count
- FROM item i WHERE i.uid = %d
+ FROM item i
+ WHERE i.uid = %d
AND i.created <= '%s'
$type_sql
- AND i.item_thread_top = 1
- $author_sql
+ $filter_sql
$item_normal_i
- ORDER BY i.created DESC $dummy_order_sql
+ ORDER BY $order_sql $dummy_order_sql
LIMIT $limit OFFSET $offset",
intval(local_channel()),
intval(local_channel()),
dbescdate($loadtime)
);
+ if ($type === 'filed') {
+ $items = fetch_post_tags($items);
+ }
+
xchan_query($items, false);
$i = 0;
$entries = [];
+ $ids = [];
foreach($items as $item) {
@@ -149,6 +178,16 @@ class Messages {
$info .= t('via') . ' ' . $item['source']['xchan_name'];
}
+ if ($type == 'filed') {
+ $info = '';
+ foreach ($item['term'] as $t) {
+ if ($t['ttype'] !== TERM_FILE) {
+ continue;
+ }
+ $info .= '<span class="badge rounded-pill bg-danger me-1"><i class="bi bi-folder"></i>&nbsp;' . $t['term'] . '</span>';
+ }
+ }
+
$summary = $item['title'];
if (!$summary) {
$summary = $item['summary'];
diff --git a/Zotlabs/Widget/Pinned.php b/Zotlabs/Widget/Pinned.php
index 2ba170fe8..be6b98434 100644
--- a/Zotlabs/Widget/Pinned.php
+++ b/Zotlabs/Widget/Pinned.php
@@ -112,8 +112,7 @@ class Pinned {
'mids' => json_encode([ $midb64 ]),
'isevent' => $isevent,
'attend' => $attend,
- 'consensus' => $consensus,
- 'conlabels' => ($canvote ? $conlabels : []),
+ 'conlabels' => [],
'canvote' => $canvote,
'linktitle' => sprintf( t('View %s\'s profile - %s'), $profile_name, ($author['xchan_addr'] ? $author['xchan_addr'] : $author['xchan_url']) ),
'olinktitle' => sprintf( t('View %s\'s profile - %s'), $owner['xchan_name'], ($owner['xchan_addr'] ? $owner['xchan_addr'] : $owner['xchan_url']) ),
diff --git a/Zotlabs/Widget/Portfolio.php b/Zotlabs/Widget/Portfolio.php
index a06f56e30..bde1c7d6a 100644
--- a/Zotlabs/Widget/Portfolio.php
+++ b/Zotlabs/Widget/Portfolio.php
@@ -103,7 +103,7 @@ class Portfolio {
$tpl = get_markup_template('photo_album_portfolio.tpl');
- $o .= replace_macros($tpl, array(
+ return replace_macros($tpl, array(
'$photos' => $photos,
'$mode' => $mode,
'$count' => $count,
@@ -113,11 +113,7 @@ class Portfolio {
'$can_post' => false,
'$upload' => array(t('Upload'), z_root() . '/photos/' . \App::$profile['channel_address'] . '/upload/' . bin2hex($album)),
'$order' => false,
- '$upload_form' => $upload_form,
- '$usage' => $usage_message
));
-
- return $o;
}
}
diff --git a/Zotlabs/Widget/Tagcloud.php b/Zotlabs/Widget/Tagcloud.php
index 00456f24f..efd571576 100644
--- a/Zotlabs/Widget/Tagcloud.php
+++ b/Zotlabs/Widget/Tagcloud.php
@@ -18,8 +18,7 @@ class Tagcloud {
$flags = 0;
$type = TERM_HASHTAG;
- // @FIXME there exists no $authors variable
- $r = tagadelic($uid, $count, $authors, $owner, $flags, 0, $type);
+ $r = tagadelic($uid, $count, '', '', $flags, 0, $type);
// @FIXME this should use a template
diff --git a/Zotlabs/Widget/Tasklist.php b/Zotlabs/Widget/Tasklist.php
index 96b70af15..9271269cf 100644
--- a/Zotlabs/Widget/Tasklist.php
+++ b/Zotlabs/Widget/Tasklist.php
@@ -19,7 +19,7 @@ class Tasklist {
if(App::$profile_uid !== local_channel())
return EMPTY_STR;
- $o .= '<script>var tasksShowAll = 0; $(document).ready(function() { tasksFetch(); $("#tasklist-new-form").submit(function(event) { event.preventDefault(); $.post( "tasks/new", $("#tasklist-new-form").serialize(), function(data) { tasksFetch(); $("#tasklist-new-summary").val(""); } ); return false; } )});</script>';
+ $o = '<script>var tasksShowAll = 0; $(document).ready(function() { tasksFetch(); $("#tasklist-new-form").submit(function(event) { event.preventDefault(); $.post( "tasks/new", $("#tasklist-new-form").serialize(), function(data) { tasksFetch(); $("#tasklist-new-summary").val(""); } ); return false; } )});</script>';
$o .= '<script>function taskComplete(id) { $.post("tasks/complete/"+id, function(data) { tasksFetch();}); }
function tasksFetch() {
$.get("tasks/fetch" + ((tasksShowAll) ? "/all" : ""), function(data) {
diff --git a/Zotlabs/Zot6/Zot6Handler.php b/Zotlabs/Zot6/Zot6Handler.php
index 053901205..2ef9e3b8d 100644
--- a/Zotlabs/Zot6/Zot6Handler.php
+++ b/Zotlabs/Zot6/Zot6Handler.php
@@ -34,11 +34,13 @@ class Zot6Handler implements IHandler {
logger('notify received from ' . $hub['hubloc_url']);
- $x = Libzot::fetch($data, $hub);
- $ret['delivery_report'] = $x;
+ $x = Libzot::fetch($data);
+ if ($x) {
+ $ret['delivery_report'] = $x;
+ $ret['success'] = true;
+ }
- $ret['success'] = true;
return $ret;
}
diff --git a/boot.php b/boot.php
index ae76fc129..39210456e 100644
--- a/boot.php
+++ b/boot.php
@@ -66,7 +66,7 @@ require_once('include/security.php');
define('PLATFORM_NAME', 'hubzilla');
-define('STD_VERSION', '9.4.3');
+define('STD_VERSION', '10.2.3');
define('ZOT_REVISION', '6.0');
define('DB_UPDATE_VERSION', 1263);
@@ -1270,8 +1270,9 @@ class App {
'$js_strings' => js_strings(),
'$zid' => get_my_address(),
'$channel_id' => self::$profile['uid'] ?? 0,
- '$auto_save_draft' => ((isset(self::$profile['uid']) && feature_enabled(self::$profile['uid'], 'auto_save_draft')) ? "true" : "false"),
- '$module' => App::$module
+ '$auto_save_draft' => ((isset(self::$profile_uid) && feature_enabled(self::$profile_uid, 'auto_save_draft')) ? "true" : "false"),
+ '$module' => App::$module,
+ '$lang' => App::$language
]
) . ((isset(self::$page['htmlhead'])) ? self::$page['htmlhead'] : '');
@@ -1538,14 +1539,7 @@ function check_config() {
App::set_baseurl(z_root());
- // Make sure each site has a system channel. This is now created on install
- // so we just need to keep this around a couple of weeks until the hubs that
- // already exist have one
- $syschan_exists = get_sys_channel();
- if (!$syschan_exists)
- create_sys_channel();
-
- new DB_Upgrade(DB_UPDATE_VERSION);
+ DB_Upgrade::run(DB_UPDATE_VERSION);
plugins_sync();
diff --git a/composer.json b/composer.json
index 7ed537c39..8584718e4 100644
--- a/composer.json
+++ b/composer.json
@@ -43,7 +43,7 @@
"pear/text_languagedetect": "^1.0",
"commerceguys/intl": "~1.1.0",
"lukasreschke/id3parser": "^0.0.3",
- "smarty/smarty": "^4.1",
+ "smarty/smarty": "^5.4",
"ramsey/uuid": "^4.1",
"twbs/bootstrap": "^5.3",
"blueimp/jquery-file-upload": "^10.3",
@@ -65,7 +65,8 @@
"phpmd/phpmd": "^2.6",
"squizlabs/php_codesniffer": "*",
"php-mock/php-mock": "^2.2",
- "dms/phpunit-arraysubset-asserts": "^0.5.0"
+ "dms/phpunit-arraysubset-asserts": "^0.5.0",
+ "phpstan/phpstan": "^2.0"
},
"autoload": {
"psr-4": {
@@ -73,11 +74,11 @@
"Zotlabs\\": "Zotlabs/"
}
},
- "autoload-dev": {
- "psr-4": {
- "Zotlabs\\Tests\\Unit\\": "tests/unit"
- }
- },
+ "autoload-dev": {
+ "psr-4": {
+ "Zotlabs\\Tests\\Unit\\": "tests/unit/"
+ }
+ },
"minimum-stability": "stable",
"config": {
"notify-on-install": false,
diff --git a/composer.lock b/composer.lock
index 1dca2a789..9635827df 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a3d39881eecda53834cbcb595100e00e",
+ "content-hash": "6840b88be8904950e7f965555d75cf36",
"packages": [
{
"name": "blueimp/jquery-file-upload",
@@ -73,25 +73,25 @@
},
{
"name": "brick/math",
- "version": "0.11.0",
+ "version": "0.12.1",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478"
+ "reference": "f510c0a40911935b77b86859eb5223d58d660df1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478",
- "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478",
+ "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1",
+ "reference": "f510c0a40911935b77b86859eb5223d58d660df1",
"shasum": ""
},
"require": {
- "php": "^8.0"
+ "php": "^8.1"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^9.0",
- "vimeo/psalm": "5.0.0"
+ "phpunit/phpunit": "^10.1",
+ "vimeo/psalm": "5.16.0"
},
"type": "library",
"autoload": {
@@ -111,12 +111,17 @@
"arithmetic",
"bigdecimal",
"bignum",
+ "bignumber",
"brick",
- "math"
+ "decimal",
+ "integer",
+ "math",
+ "mathematics",
+ "rational"
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.11.0"
+ "source": "https://github.com/brick/math/tree/0.12.1"
},
"funding": [
{
@@ -124,7 +129,7 @@
"type": "github"
}
],
- "time": "2023-01-15T23:15:59+00:00"
+ "time": "2023-11-29T23:19:16+00:00"
},
{
"name": "bshaffer/oauth2-server-php",
@@ -190,31 +195,34 @@
},
{
"name": "chillerlan/php-qrcode",
- "version": "4.3.4",
+ "version": "4.4.2",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
+ "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
+ "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
"shasum": ""
},
"require": {
- "chillerlan/php-settings-container": "^2.1.4",
+ "chillerlan/php-settings-container": "^2.1.6 || ^3.2.1",
"ext-mbstring": "*",
"php": "^7.4 || ^8.0"
},
"require-dev": {
- "phan/phan": "^5.3",
- "phpunit/phpunit": "^9.5",
- "setasign/fpdf": "^1.8.2"
+ "phan/phan": "^5.4.5",
+ "phpmd/phpmd": "^2.15",
+ "phpunit/phpunit": "^9.6",
+ "setasign/fpdf": "^1.8.2",
+ "squizlabs/php_codesniffer": "^3.11"
},
"suggest": {
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
- "setasign/fpdf": "Required to use the QR FPDF output."
+ "setasign/fpdf": "Required to use the QR FPDF output.",
+ "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code"
},
"type": "library",
"autoload": {
@@ -241,7 +249,7 @@
"homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
}
],
- "description": "A QR code generator. PHP 7.4+",
+ "description": "A QR code generator with a user friendly API. PHP 7.4+",
"homepage": "https://github.com/chillerlan/php-qrcode",
"keywords": [
"phpqrcode",
@@ -252,46 +260,45 @@
],
"support": {
"issues": "https://github.com/chillerlan/php-qrcode/issues",
- "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.4.2"
},
"funding": [
{
- "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
- "type": "custom"
- },
- {
"url": "https://ko-fi.com/codemasher",
"type": "ko_fi"
}
],
- "time": "2022-07-25T09:12:45+00:00"
+ "time": "2024-11-15T15:36:24+00:00"
},
{
"name": "chillerlan/php-settings-container",
- "version": "2.1.4",
+ "version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-settings-container.git",
- "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a"
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
- "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
"shasum": ""
},
"require": {
"ext-json": "*",
- "php": "^7.4 || ^8.0"
+ "php": "^8.1"
},
"require-dev": {
- "phan/phan": "^5.3",
- "phpunit/phpunit": "^9.5"
+ "phpmd/phpmd": "^2.15",
+ "phpstan/phpstan": "^1.11",
+ "phpstan/phpstan-deprecation-rules": "^1.2",
+ "phpunit/phpunit": "^10.5",
+ "squizlabs/php_codesniffer": "^3.10"
},
"type": "library",
"autoload": {
"psr-4": {
- "chillerlan\\Settings\\": "src/"
+ "chillerlan\\Settings\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -305,10 +312,9 @@
"homepage": "https://github.com/codemasher"
}
],
- "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "description": "A container class for immutable settings objects. Not a DI container.",
"homepage": "https://github.com/chillerlan/php-settings-container",
"keywords": [
- "PHP7",
"Settings",
"configuration",
"container",
@@ -328,7 +334,7 @@
"type": "ko_fi"
}
],
- "time": "2022-07-05T22:32:14+00:00"
+ "time": "2024-07-16T11:13:48+00:00"
},
{
"name": "commerceguys/intl",
@@ -426,20 +432,20 @@
},
{
"name": "ezyang/htmlpurifier",
- "version": "v4.17.0",
+ "version": "v4.18.0",
"source": {
"type": "git",
"url": "https://github.com/ezyang/htmlpurifier.git",
- "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c"
+ "reference": "cb56001e54359df7ae76dc522d08845dc741621b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c",
- "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c",
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b",
+ "reference": "cb56001e54359df7ae76dc522d08845dc741621b",
"shasum": ""
},
"require": {
- "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
"cerdic/css-tidy": "^1.7 || ^2.0",
@@ -481,9 +487,9 @@
],
"support": {
"issues": "https://github.com/ezyang/htmlpurifier/issues",
- "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0"
+ "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0"
},
- "time": "2023-11-17T15:01:25+00:00"
+ "time": "2024-11-01T03:51:45+00:00"
},
{
"name": "jbroadway/urlify",
@@ -801,24 +807,24 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.6.3",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ "reference": "df1e7fde177501eee2037dd159cf04f5f301a512"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512",
+ "reference": "df1e7fde177501eee2037dd159cf04f5f301a512",
"shasum": ""
},
"require": {
- "php": "^7|^8"
+ "php": "^8"
},
"require-dev": {
- "phpunit/phpunit": "^6|^7|^8|^9",
- "vimeo/psalm": "^1|^2|^3|^4"
+ "phpunit/phpunit": "^9",
+ "vimeo/psalm": "^4|^5"
},
"type": "library",
"autoload": {
@@ -864,7 +870,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
- "time": "2022-06-14T06:56:20+00:00"
+ "time": "2024-05-08T12:36:18+00:00"
},
{
"name": "patrickschur/language-detection",
@@ -967,16 +973,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "2.0.47",
+ "version": "2.0.48",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb"
+ "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/b7d7d90ee7df7f33a664b4aea32d50a305d35adb",
- "reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/eaa7be704b8b93a6913b69eb7f645a59d7731b61",
+ "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61",
"shasum": ""
},
"require": {
@@ -1057,7 +1063,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/2.0.47"
+ "source": "https://github.com/phpseclib/phpseclib/tree/2.0.48"
},
"funding": [
{
@@ -1073,20 +1079,68 @@
"type": "tidelift"
}
],
- "time": "2024-02-26T04:55:38+00:00"
+ "time": "2024-12-14T21:03:54+00:00"
+ },
+ {
+ "name": "psr/clock",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/clock.git",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for reading the clock.",
+ "homepage": "https://github.com/php-fig/clock",
+ "keywords": [
+ "clock",
+ "now",
+ "psr",
+ "psr-20",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/clock/issues",
+ "source": "https://github.com/php-fig/clock/tree/1.0.0"
+ },
+ "time": "2022-11-25T14:36:26+00:00"
},
{
"name": "psr/log",
- "version": "2.0.0",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
- "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
@@ -1095,7 +1149,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "3.x-dev"
}
},
"autoload": {
@@ -1121,48 +1175,58 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/2.0.0"
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
},
- "time": "2021-07-14T16:41:46+00:00"
+ "time": "2024-09-11T13:17:53+00:00"
},
{
"name": "ramsey/collection",
- "version": "1.2.2",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
- "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
- "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"shasum": ""
},
"require": {
- "php": "^7.3 || ^8",
- "symfony/polyfill-php81": "^1.23"
+ "php": "^8.1"
},
"require-dev": {
- "captainhook/captainhook": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "ergebnis/composer-normalize": "^2.6",
- "fakerphp/faker": "^1.5",
- "hamcrest/hamcrest-php": "^2",
- "jangregor/phpstan-prophecy": "^0.8",
- "mockery/mockery": "^1.3",
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.28.3",
+ "fakerphp/faker": "^1.21",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^1.0",
+ "mockery/mockery": "^1.5",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpcsstandards/phpcsutils": "^1.0.0-rc1",
"phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1",
- "phpstan/phpstan": "^0.12.32",
- "phpstan/phpstan-mockery": "^0.12.5",
- "phpstan/phpstan-phpunit": "^0.12.11",
- "phpunit/phpunit": "^8.5 || ^9",
- "psy/psysh": "^0.10.4",
- "slevomat/coding-standard": "^6.3",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.4"
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.9",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^9.5",
+ "psalm/plugin-mockery": "^1.1",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "ramsey/coding-standard": "^2.0.3",
+ "ramsey/conventional-commits": "^1.3",
+ "vimeo/psalm": "^5.4"
},
"type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
"autoload": {
"psr-4": {
"Ramsey\\Collection\\": "src/"
@@ -1190,7 +1254,7 @@
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/1.2.2"
+ "source": "https://github.com/ramsey/collection/tree/2.0.0"
},
"funding": [
{
@@ -1202,24 +1266,24 @@
"type": "tidelift"
}
],
- "time": "2021-10-10T03:01:02+00:00"
+ "time": "2022-12-31T21:50:55+00:00"
},
{
"name": "ramsey/uuid",
- "version": "4.7.5",
+ "version": "4.7.6",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e"
+ "reference": "91039bc1faa45ba123c4328958e620d382ec7088"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e",
- "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
+ "reference": "91039bc1faa45ba123c4328958e620d382ec7088",
"shasum": ""
},
"require": {
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11",
+ "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
"ext-json": "*",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
@@ -1282,7 +1346,7 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.7.5"
+ "source": "https://github.com/ramsey/uuid/tree/4.7.6"
},
"funding": [
{
@@ -1294,20 +1358,20 @@
"type": "tidelift"
}
],
- "time": "2023-11-08T05:53:05+00:00"
+ "time": "2024-04-27T21:32:50+00:00"
},
{
"name": "sabre/dav",
- "version": "4.6.0",
+ "version": "4.7.0",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/dav.git",
- "reference": "554145304b4a026477d130928d16e626939b0b2a"
+ "reference": "074373bcd689a30bcf5aaa6bbb20a3395964ce7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/dav/zipball/554145304b4a026477d130928d16e626939b0b2a",
- "reference": "554145304b4a026477d130928d16e626939b0b2a",
+ "url": "https://api.github.com/repos/sabre-io/dav/zipball/074373bcd689a30bcf5aaa6bbb20a3395964ce7a",
+ "reference": "074373bcd689a30bcf5aaa6bbb20a3395964ce7a",
"shasum": ""
},
"require": {
@@ -1377,29 +1441,29 @@
"issues": "https://github.com/sabre-io/dav/issues",
"source": "https://github.com/fruux/sabre-dav"
},
- "time": "2023-12-11T13:01:23+00:00"
+ "time": "2024-10-29T11:46:02+00:00"
},
{
"name": "sabre/event",
- "version": "5.1.4",
+ "version": "5.1.7",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/event.git",
- "reference": "d7da22897125d34d7eddf7977758191c06a74497"
+ "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497",
- "reference": "d7da22897125d34d7eddf7977758191c06a74497",
+ "url": "https://api.github.com/repos/sabre-io/event/zipball/86d57e305c272898ba3c28e9bd3d65d5464587c2",
+ "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||^3.63",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
"type": "library",
"autoload": {
@@ -1443,20 +1507,20 @@
"issues": "https://github.com/sabre-io/event/issues",
"source": "https://github.com/fruux/sabre-event"
},
- "time": "2021-11-04T06:51:17+00:00"
+ "time": "2024-08-27T11:23:05+00:00"
},
{
"name": "sabre/http",
- "version": "5.1.6",
+ "version": "5.1.12",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/http.git",
- "reference": "9976ac34ced206bd6579b7b37b401de9fac98dae"
+ "reference": "dedff73f3995578bc942fa4c8484190cac14f139"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/http/zipball/9976ac34ced206bd6579b7b37b401de9fac98dae",
- "reference": "9976ac34ced206bd6579b7b37b401de9fac98dae",
+ "url": "https://api.github.com/repos/sabre-io/http/zipball/dedff73f3995578bc942fa4c8484190cac14f139",
+ "reference": "dedff73f3995578bc942fa4c8484190cac14f139",
"shasum": ""
},
"require": {
@@ -1468,9 +1532,9 @@
"sabre/uri": "^2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||^3.63",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
"suggest": {
"ext-curl": " to make http requests with the Client class"
@@ -1506,29 +1570,32 @@
"issues": "https://github.com/sabre-io/http/issues",
"source": "https://github.com/fruux/sabre-http"
},
- "time": "2022-07-15T14:51:14+00:00"
+ "time": "2024-08-27T16:07:41+00:00"
},
{
"name": "sabre/uri",
- "version": "2.3.2",
+ "version": "2.3.4",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/uri.git",
- "reference": "eceb4a1b8b680b45e215574222d6ca00be541970"
+ "reference": "b76524c22de90d80ca73143680a8e77b1266c291"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/uri/zipball/eceb4a1b8b680b45e215574222d6ca00be541970",
- "reference": "eceb4a1b8b680b45e215574222d6ca00be541970",
+ "url": "https://api.github.com/repos/sabre-io/uri/zipball/b76524c22de90d80ca73143680a8e77b1266c291",
+ "reference": "b76524c22de90d80ca73143680a8e77b1266c291",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.9",
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit": "^9.0"
+ "friendsofphp/php-cs-fixer": "^3.63",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^1.12",
+ "phpstan/phpstan-phpunit": "^1.4",
+ "phpstan/phpstan-strict-rules": "^1.6",
+ "phpunit/phpunit": "^9.6"
},
"type": "library",
"autoload": {
@@ -1563,20 +1630,20 @@
"issues": "https://github.com/sabre-io/uri/issues",
"source": "https://github.com/fruux/sabre-uri"
},
- "time": "2022-09-19T11:58:52+00:00"
+ "time": "2024-08-27T12:18:16+00:00"
},
{
"name": "sabre/vobject",
- "version": "4.5.4",
+ "version": "4.5.6",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/vobject.git",
- "reference": "a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772"
+ "reference": "900266bb3bd448a9f7f41f82344ad0aba237cb27"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/vobject/zipball/a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772",
- "reference": "a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772",
+ "url": "https://api.github.com/repos/sabre-io/vobject/zipball/900266bb3bd448a9f7f41f82344ad0aba237cb27",
+ "reference": "900266bb3bd448a9f7f41f82344ad0aba237cb27",
"shasum": ""
},
"require": {
@@ -1586,9 +1653,9 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "~2.17.1",
- "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan": "^0.12 || ^1.11",
"phpunit/php-invoker": "^2.0 || ^3.1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
"suggest": {
"hoa/bench": "If you would like to run the benchmark scripts"
@@ -1667,20 +1734,20 @@
"issues": "https://github.com/sabre-io/vobject/issues",
"source": "https://github.com/fruux/sabre-vobject"
},
- "time": "2023-11-09T12:54:37+00:00"
+ "time": "2024-10-14T11:53:54+00:00"
},
{
"name": "sabre/xml",
- "version": "2.2.5",
+ "version": "2.2.11",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/xml.git",
- "reference": "a6af111850e7536d200d9637c34885cd3c77a86c"
+ "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/xml/zipball/a6af111850e7536d200d9637c34885cd3c77a86c",
- "reference": "a6af111850e7536d200d9637c34885cd3c77a86c",
+ "url": "https://api.github.com/repos/sabre-io/xml/zipball/01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc",
+ "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc",
"shasum": ""
},
"require": {
@@ -1692,9 +1759,9 @@
"sabre/uri": ">=1.0,<3.0.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
"type": "library",
"autoload": {
@@ -1736,20 +1803,20 @@
"issues": "https://github.com/sabre-io/xml/issues",
"source": "https://github.com/fruux/sabre-xml"
},
- "time": "2021-11-04T06:37:27+00:00"
+ "time": "2024-09-06T07:37:46+00:00"
},
{
"name": "scssphp/scssphp",
- "version": "v1.12.1",
+ "version": "v1.13.0",
"source": {
"type": "git",
"url": "https://github.com/scssphp/scssphp.git",
- "reference": "394ed1e960138710a60d035c1a85d43d0bf0faeb"
+ "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scssphp/scssphp/zipball/394ed1e960138710a60d035c1a85d43d0bf0faeb",
- "reference": "394ed1e960138710a60d035c1a85d43d0bf0faeb",
+ "url": "https://api.github.com/repos/scssphp/scssphp/zipball/63d1157457e5554edf00b0c1fabab4c1511d2520",
+ "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520",
"shasum": ""
},
"require": {
@@ -1778,8 +1845,8 @@
"type": "library",
"extra": {
"bamarni-bin": {
- "forward-command": false,
- "bin-links": false
+ "bin-links": false,
+ "forward-command": false
}
},
"autoload": {
@@ -1814,22 +1881,22 @@
],
"support": {
"issues": "https://github.com/scssphp/scssphp/issues",
- "source": "https://github.com/scssphp/scssphp/tree/v1.12.1"
+ "source": "https://github.com/scssphp/scssphp/tree/v1.13.0"
},
- "time": "2024-01-13T12:36:40+00:00"
+ "time": "2024-08-17T21:02:11+00:00"
},
{
"name": "simplepie/simplepie",
- "version": "1.8.0",
+ "version": "1.8.1",
"source": {
"type": "git",
"url": "https://github.com/simplepie/simplepie.git",
- "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55"
+ "reference": "a567b8ab9b6145a23e6a9ec2b6b74f56d52f7ad1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/simplepie/simplepie/zipball/65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
- "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
+ "url": "https://api.github.com/repos/simplepie/simplepie/zipball/a567b8ab9b6145a23e6a9ec2b6b74f56d52f7ad1",
+ "reference": "a567b8ab9b6145a23e6a9ec2b6b74f56d52f7ad1",
"shasum": ""
},
"require": {
@@ -1852,24 +1919,14 @@
},
"type": "library",
"autoload": {
- "psr-4": {
- "SimplePie\\": "src"
- },
"psr-0": {
"SimplePie": "library"
- }
- },
- "autoload-dev": {
+ },
"psr-4": {
- "SimplePie\\Tests\\Fixtures\\": "tests/Fixtures",
- "SimplePie\\Tests\\Unit\\": "tests/Unit"
+ "SimplePie\\": "src"
}
},
- "scripts": {
- "test": [
- "phpunit"
- ]
- },
+ "notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
@@ -1899,42 +1956,46 @@
"rss"
],
"support": {
- "source": "https://github.com/simplepie/simplepie/tree/1.8.0",
- "issues": "https://github.com/simplepie/simplepie/issues"
+ "issues": "https://github.com/simplepie/simplepie/issues",
+ "source": "https://github.com/simplepie/simplepie/tree/1.8.1"
},
- "time": "2023-01-20T08:37:35+00:00"
+ "time": "2024-11-22T16:33:20+00:00"
},
{
"name": "smarty/smarty",
- "version": "v4.5.4",
+ "version": "v5.4.3",
"source": {
"type": "git",
"url": "https://github.com/smarty-php/smarty.git",
- "reference": "c11676e85aa71bc7c3cd9100f1655a9f4d14616e"
+ "reference": "c6bff5795081ca5e60aabda59fb87daa511acd1e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c11676e85aa71bc7c3cd9100f1655a9f4d14616e",
- "reference": "c11676e85aa71bc7c3cd9100f1655a9f4d14616e",
+ "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c6bff5795081ca5e60aabda59fb87daa511acd1e",
+ "reference": "c6bff5795081ca5e60aabda59fb87daa511acd1e",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.27"
},
"require-dev": {
"phpunit/phpunit": "^8.5 || ^7.5",
- "smarty/smarty-lexer": "^3.1"
+ "smarty/smarty-lexer": "^4.0.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "5.0.x-dev"
}
},
"autoload": {
- "classmap": [
- "libs/"
- ]
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Smarty\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1966,42 +2027,44 @@
"support": {
"forum": "https://github.com/smarty-php/smarty/discussions",
"issues": "https://github.com/smarty-php/smarty/issues",
- "source": "https://github.com/smarty-php/smarty/tree/v4.5.4"
+ "source": "https://github.com/smarty-php/smarty/tree/v5.4.3"
},
- "time": "2024-08-14T20:04:35+00:00"
+ "time": "2024-12-23T00:38:44+00:00"
},
{
"name": "spomky-labs/otphp",
- "version": "11.2.0",
+ "version": "11.3.0",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/otphp.git",
- "reference": "9a1569038bb1c8e98040b14b8bcbba54f25e7795"
+ "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9a1569038bb1c8e98040b14b8bcbba54f25e7795",
- "reference": "9a1569038bb1c8e98040b14b8bcbba54f25e7795",
+ "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33",
+ "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "paragonie/constant_time_encoding": "^2.0",
- "php": "^8.1"
+ "paragonie/constant_time_encoding": "^2.0 || ^3.0",
+ "php": ">=8.1",
+ "psr/clock": "^1.0",
+ "symfony/deprecation-contracts": "^3.2"
},
"require-dev": {
"ekino/phpstan-banned-code": "^1.0",
- "infection/infection": "^0.26",
+ "infection/infection": "^0.26|^0.27|^0.28|^0.29",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-strict-rules": "^1.0",
- "phpunit/phpunit": "^9.5.26",
+ "phpunit/phpunit": "^9.5.26|^10.0|^11.0",
"qossmic/deptrac-shim": "^1.0",
- "rector/rector": "^0.15",
- "symfony/phpunit-bridge": "^6.1",
- "symplify/easy-coding-standard": "^11.0"
+ "rector/rector": "^1.0",
+ "symfony/phpunit-bridge": "^6.1|^7.0",
+ "symplify/easy-coding-standard": "^12.0"
},
"type": "library",
"autoload": {
@@ -2036,7 +2099,7 @@
],
"support": {
"issues": "https://github.com/Spomky-Labs/otphp/issues",
- "source": "https://github.com/Spomky-Labs/otphp/tree/11.2.0"
+ "source": "https://github.com/Spomky-Labs/otphp/tree/11.3.0"
},
"funding": [
{
@@ -2048,7 +2111,7 @@
"type": "patreon"
}
],
- "time": "2023-03-16T19:16:25+00:00"
+ "time": "2024-06-12T11:22:32+00:00"
},
{
"name": "stephenhill/base58",
@@ -2093,27 +2156,100 @@
"time": "2019-08-22T16:51:59+00:00"
},
{
- "name": "symfony/polyfill-php81",
- "version": "v1.29.0",
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:20:29+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.31.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d"
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d",
- "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -2121,11 +2257,8 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2141,16 +2274,17 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
+ "mbstring",
"polyfill",
"portable",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
},
"funding": [
{
@@ -2166,7 +2300,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-29T20:11:03+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "twbs/bootstrap",
@@ -2259,16 +2393,16 @@
},
{
"name": "voku/portable-ascii",
- "version": "2.0.1",
+ "version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-ascii.git",
- "reference": "b56450eed252f6801410d810c8e1727224ae0743"
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743",
- "reference": "b56450eed252f6801410d810c8e1727224ae0743",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
"shasum": ""
},
"require": {
@@ -2293,7 +2427,7 @@
"authors": [
{
"name": "Lars Moelleken",
- "homepage": "http://www.moelleken.org/"
+ "homepage": "https://www.moelleken.org/"
}
],
"description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
@@ -2305,7 +2439,7 @@
],
"support": {
"issues": "https://github.com/voku/portable-ascii/issues",
- "source": "https://github.com/voku/portable-ascii/tree/2.0.1"
+ "source": "https://github.com/voku/portable-ascii/tree/2.0.3"
},
"funding": [
{
@@ -2329,7 +2463,7 @@
"type": "tidelift"
}
],
- "time": "2022-03-08T17:03:00+00:00"
+ "time": "2024-11-21T01:49:47+00:00"
},
{
"name": "voku/stop-words",
@@ -2382,28 +2516,36 @@
"packages-dev": [
{
"name": "composer/pcre",
- "version": "3.0.0",
+ "version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd"
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd",
- "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
+ "conflict": {
+ "phpstan/phpstan": "<1.11.10"
+ },
"require-dev": {
- "phpstan/phpstan": "^1.3",
- "phpstan/phpstan-strict-rules": "^1.1",
- "symfony/phpunit-bridge": "^5"
+ "phpstan/phpstan": "^1.12 || ^2",
+ "phpstan/phpstan-strict-rules": "^1 || ^2",
+ "phpunit/phpunit": "^8 || ^9"
},
"type": "library",
"extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
"branch-alias": {
"dev-main": "3.x-dev"
}
@@ -2433,7 +2575,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.0.0"
+ "source": "https://github.com/composer/pcre/tree/3.3.2"
},
"funding": [
{
@@ -2449,20 +2591,20 @@
"type": "tidelift"
}
],
- "time": "2022-02-25T20:21:48+00:00"
+ "time": "2024-11-12T16:29:46+00:00"
},
{
"name": "composer/xdebug-handler",
- "version": "3.0.3",
+ "version": "3.0.5",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
- "reference": "ced299686f41dce890debac69273b47ffe98a40c"
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
- "reference": "ced299686f41dce890debac69273b47ffe98a40c",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
"shasum": ""
},
"require": {
@@ -2473,7 +2615,7 @@
"require-dev": {
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-strict-rules": "^1.1",
- "symfony/phpunit-bridge": "^6.0"
+ "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
},
"type": "library",
"autoload": {
@@ -2497,9 +2639,9 @@
"performance"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
+ "irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
},
"funding": [
{
@@ -2515,7 +2657,7 @@
"type": "tidelift"
}
],
- "time": "2022-02-25T21:32:43+00:00"
+ "time": "2024-05-06T16:37:16+00:00"
},
{
"name": "dms/phpunit-arraysubset-asserts",
@@ -2563,16 +2705,16 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.11.1",
+ "version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+ "reference": "024473a478be9df5fdaca2c793f2232fe788e414"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
+ "reference": "024473a478be9df5fdaca2c793f2232fe788e414",
"shasum": ""
},
"require": {
@@ -2580,11 +2722,12 @@
},
"conflict": {
"doctrine/collections": "<1.6.8",
- "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
},
"require-dev": {
"doctrine/collections": "^1.6.8",
"doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
},
"type": "library",
@@ -2610,7 +2753,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
},
"funding": [
{
@@ -2618,20 +2761,20 @@
"type": "tidelift"
}
],
- "time": "2023-03-08T13:26:56+00:00"
+ "time": "2025-02-12T12:17:51+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.0.2",
+ "version": "v5.4.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
"shasum": ""
},
"require": {
@@ -2642,7 +2785,7 @@
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ "phpunit/phpunit": "^9.0"
},
"bin": [
"bin/php-parse"
@@ -2674,34 +2817,34 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
},
- "time": "2024-03-05T20:51:40+00:00"
+ "time": "2024-12-30T11:07:19+00:00"
},
{
"name": "pdepend/pdepend",
- "version": "2.10.3",
+ "version": "2.16.2",
"source": {
"type": "git",
"url": "https://github.com/pdepend/pdepend.git",
- "reference": "da3166a06b4a89915920a42444f707122a1584c9"
+ "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pdepend/pdepend/zipball/da3166a06b4a89915920a42444f707122a1584c9",
- "reference": "da3166a06b4a89915920a42444f707122a1584c9",
+ "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58",
+ "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58",
"shasum": ""
},
"require": {
"php": ">=5.3.7",
- "symfony/config": "^2.3.0|^3|^4|^5|^6.0",
- "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0",
- "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0"
+ "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0",
+ "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0",
+ "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0",
+ "symfony/polyfill-mbstring": "^1.19"
},
"require-dev": {
"easy-doc/easy-doc": "0.0.0|^1.2.3",
"gregwar/rst": "^1.0",
- "phpunit/phpunit": "^4.8.36|^5.7.27",
"squizlabs/php_codesniffer": "^2.0.0"
},
"bin": [
@@ -2723,9 +2866,15 @@
"BSD-3-Clause"
],
"description": "Official version of pdepend to be handled with Composer",
+ "keywords": [
+ "PHP Depend",
+ "PHP_Depend",
+ "dev",
+ "pdepend"
+ ],
"support": {
"issues": "https://github.com/pdepend/pdepend/issues",
- "source": "https://github.com/pdepend/pdepend/tree/2.10.3"
+ "source": "https://github.com/pdepend/pdepend/tree/2.16.2"
},
"funding": [
{
@@ -2733,7 +2882,7 @@
"type": "tidelift"
}
],
- "time": "2022-02-23T07:53:09+00:00"
+ "time": "2023-12-17T18:09:59+00:00"
},
{
"name": "phar-io/manifest",
@@ -2855,16 +3004,16 @@
},
{
"name": "php-mock/php-mock",
- "version": "2.5.0",
+ "version": "2.5.1",
"source": {
"type": "git",
"url": "https://github.com/php-mock/php-mock.git",
- "reference": "fff1a621ebe54100fa3bd852e7be57773a0c0127"
+ "reference": "8f58972dce4de5a804dc0459383a11bc651416cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-mock/php-mock/zipball/fff1a621ebe54100fa3bd852e7be57773a0c0127",
- "reference": "fff1a621ebe54100fa3bd852e7be57773a0c0127",
+ "url": "https://api.github.com/repos/php-mock/php-mock/zipball/8f58972dce4de5a804dc0459383a11bc651416cf",
+ "reference": "8f58972dce4de5a804dc0459383a11bc651416cf",
"shasum": ""
},
"require": {
@@ -2919,7 +3068,7 @@
],
"support": {
"issues": "https://github.com/php-mock/php-mock/issues",
- "source": "https://github.com/php-mock/php-mock/tree/2.5.0"
+ "source": "https://github.com/php-mock/php-mock/tree/2.5.1"
},
"funding": [
{
@@ -2927,7 +3076,7 @@
"type": "github"
}
],
- "time": "2024-02-10T21:07:01+00:00"
+ "time": "2024-12-07T20:52:37+00:00"
},
{
"name": "php-mock/php-mock-integration",
@@ -3062,22 +3211,22 @@
},
{
"name": "phpmd/phpmd",
- "version": "2.12.0",
+ "version": "2.15.0",
"source": {
"type": "git",
"url": "https://github.com/phpmd/phpmd.git",
- "reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec"
+ "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpmd/phpmd/zipball/c0b678ba71902f539c27c14332aa0ddcf14388ec",
- "reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec",
+ "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0",
+ "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0",
"shasum": ""
},
"require": {
"composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0",
"ext-xml": "*",
- "pdepend/pdepend": "^2.10.3",
+ "pdepend/pdepend": "^2.16.1",
"php": ">=5.3.9"
},
"require-dev": {
@@ -3086,8 +3235,7 @@
"ext-simplexml": "*",
"gregwar/rst": "^1.0",
"mikey179/vfsstream": "^1.6.8",
- "phpunit/phpunit": "^4.8.36 || ^5.7.27",
- "squizlabs/php_codesniffer": "^2.0"
+ "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2"
},
"bin": [
"src/bin/phpmd"
@@ -3124,6 +3272,7 @@
"description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.",
"homepage": "https://phpmd.org/",
"keywords": [
+ "dev",
"mess detection",
"mess detector",
"pdepend",
@@ -3133,7 +3282,7 @@
"support": {
"irc": "irc://irc.freenode.org/phpmd",
"issues": "https://github.com/phpmd/phpmd/issues",
- "source": "https://github.com/phpmd/phpmd/tree/2.12.0"
+ "source": "https://github.com/phpmd/phpmd/tree/2.15.0"
},
"funding": [
{
@@ -3141,36 +3290,94 @@
"type": "tidelift"
}
],
- "time": "2022-03-24T13:33:01+00:00"
+ "time": "2023-12-11T08:22:20+00:00"
+ },
+ {
+ "name": "phpstan/phpstan",
+ "version": "2.1.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan.git",
+ "reference": "6eaec7c6c9e90dcfe46ad1e1ffa5171e2dab641c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6eaec7c6c9e90dcfe46ad1e1ffa5171e2dab641c",
+ "reference": "6eaec7c6c9e90dcfe46ad1e1ffa5171e2dab641c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-19T15:46:42+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.14",
+ "version": "10.1.16",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
- "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.18 || ^5.0",
+ "nikic/php-parser": "^4.19.1 || ^5.1.0",
"php": ">=8.1",
- "phpunit/php-file-iterator": "^4.0",
- "phpunit/php-text-template": "^3.0",
- "sebastian/code-unit-reverse-lookup": "^3.0",
- "sebastian/complexity": "^3.0",
- "sebastian/environment": "^6.0",
- "sebastian/lines-of-code": "^2.0",
- "sebastian/version": "^4.0",
- "theseer/tokenizer": "^1.2.0"
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "sebastian/code-unit-reverse-lookup": "^3.0.0",
+ "sebastian/complexity": "^3.2.0",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/lines-of-code": "^2.0.2",
+ "sebastian/version": "^4.0.1",
+ "theseer/tokenizer": "^1.2.3"
},
"require-dev": {
"phpunit/phpunit": "^10.1"
@@ -3182,7 +3389,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1-dev"
+ "dev-main": "10.1.x-dev"
}
},
"autoload": {
@@ -3211,7 +3418,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
},
"funding": [
{
@@ -3219,7 +3426,7 @@
"type": "github"
}
],
- "time": "2024-03-12T15:33:41+00:00"
+ "time": "2024-08-22T04:31:57+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -3466,16 +3673,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.20",
+ "version": "10.5.45",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3"
+ "reference": "bd68a781d8e30348bc297449f5234b3458267ae8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3",
- "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8",
+ "reference": "bd68a781d8e30348bc297449f5234b3458267ae8",
"shasum": ""
},
"require": {
@@ -3485,26 +3692,26 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.3",
- "phar-io/version": "^3.0.2",
+ "myclabs/deep-copy": "^1.12.1",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
"php": ">=8.1",
- "phpunit/php-code-coverage": "^10.1.5",
- "phpunit/php-file-iterator": "^4.0",
- "phpunit/php-invoker": "^4.0",
- "phpunit/php-text-template": "^3.0",
- "phpunit/php-timer": "^6.0",
- "sebastian/cli-parser": "^2.0",
- "sebastian/code-unit": "^2.0",
- "sebastian/comparator": "^5.0",
- "sebastian/diff": "^5.0",
- "sebastian/environment": "^6.0",
- "sebastian/exporter": "^5.1",
- "sebastian/global-state": "^6.0.1",
- "sebastian/object-enumerator": "^5.0",
- "sebastian/recursion-context": "^5.0",
- "sebastian/type": "^4.0",
- "sebastian/version": "^4.0"
+ "phpunit/php-code-coverage": "^10.1.16",
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-invoker": "^4.0.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "phpunit/php-timer": "^6.0.0",
+ "sebastian/cli-parser": "^2.0.1",
+ "sebastian/code-unit": "^2.0.0",
+ "sebastian/comparator": "^5.0.3",
+ "sebastian/diff": "^5.1.1",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/exporter": "^5.1.2",
+ "sebastian/global-state": "^6.0.2",
+ "sebastian/object-enumerator": "^5.0.0",
+ "sebastian/recursion-context": "^5.0.0",
+ "sebastian/type": "^4.0.0",
+ "sebastian/version": "^4.0.1"
},
"suggest": {
"ext-soap": "To be able to generate mocks based on WSDL files"
@@ -3547,7 +3754,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45"
},
"funding": [
{
@@ -3563,26 +3770,31 @@
"type": "tidelift"
}
],
- "time": "2024-04-24T06:32:35+00:00"
+ "time": "2025-02-06T16:08:12+00:00"
},
{
"name": "psr/container",
- "version": "1.1.2",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
"shasum": ""
},
"require": {
"php": ">=7.4.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
@@ -3609,9 +3821,9 @@
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.2"
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
},
- "time": "2021-11-05T16:50:12+00:00"
+ "time": "2021-11-05T16:47:00+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -3783,16 +3995,16 @@
},
{
"name": "sebastian/comparator",
- "version": "5.0.1",
+ "version": "5.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
+ "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
+ "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
"shasum": ""
},
"require": {
@@ -3803,7 +4015,7 @@
"sebastian/exporter": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.3"
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@@ -3848,7 +4060,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3"
},
"funding": [
{
@@ -3856,7 +4068,7 @@
"type": "github"
}
],
- "time": "2023-08-14T13:18:12+00:00"
+ "time": "2024-10-18T14:56:07+00:00"
},
{
"name": "sebastian/complexity",
@@ -4531,16 +4743,16 @@
},
{
"name": "squizlabs/php_codesniffer",
- "version": "3.6.2",
+ "version": "3.11.3",
"source": {
"type": "git",
- "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a"
+ "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+ "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
- "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
+ "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
"shasum": ""
},
"require": {
@@ -4550,11 +4762,11 @@
"php": ">=5.4.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
},
"bin": [
- "bin/phpcs",
- "bin/phpcbf"
+ "bin/phpcbf",
+ "bin/phpcs"
],
"type": "library",
"extra": {
@@ -4569,55 +4781,80 @@
"authors": [
{
"name": "Greg Sherwood",
- "role": "lead"
+ "role": "Former lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "Current lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
}
],
"description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
- "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
"keywords": [
"phpcs",
- "standards"
+ "standards",
+ "static analysis"
],
"support": {
- "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
- "source": "https://github.com/squizlabs/PHP_CodeSniffer",
- "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
+ "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
+ "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
},
- "time": "2021-12-12T21:44:58+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/phpcsstandards",
+ "type": "thanks_dev"
+ }
+ ],
+ "time": "2025-01-23T17:04:15+00:00"
},
{
"name": "symfony/config",
- "version": "v4.4.41",
+ "version": "v6.4.14",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "9d031eb2d4292aed117b0f7fafd5c436dcf3dfd7"
+ "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/9d031eb2d4292aed117b0f7fafd5c436dcf3dfd7",
- "reference": "9d031eb2d4292aed117b0f7fafd5c436dcf3dfd7",
+ "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef",
+ "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef",
"shasum": ""
},
"require": {
- "php": ">=7.1.3",
- "symfony/filesystem": "^3.4|^4.0|^5.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-php80": "^1.16",
- "symfony/polyfill-php81": "^1.22"
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/filesystem": "^5.4|^6.0|^7.0",
+ "symfony/polyfill-ctype": "~1.8"
},
"conflict": {
- "symfony/finder": "<3.4"
+ "symfony/finder": "<5.4",
+ "symfony/service-contracts": "<2.5"
},
"require-dev": {
- "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
- "symfony/finder": "^3.4|^4.0|^5.0",
- "symfony/messenger": "^4.1|^5.0",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/yaml": "^3.4|^4.0|^5.0"
- },
- "suggest": {
- "symfony/yaml": "To use the yaml reference dumper"
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+ "symfony/finder": "^5.4|^6.0|^7.0",
+ "symfony/messenger": "^5.4|^6.0|^7.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -4645,7 +4882,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/v4.4.41"
+ "source": "https://github.com/symfony/config/tree/v6.4.14"
},
"funding": [
{
@@ -4661,49 +4898,44 @@
"type": "tidelift"
}
],
- "time": "2022-04-12T15:19:55+00:00"
+ "time": "2024-11-04T11:33:53+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v4.4.41",
+ "version": "v6.4.16",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "74c7f55de0eced4d3c9654809b1871870386a577"
+ "reference": "7a379d8871f6a36f01559c14e11141cc02eb8dc8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/74c7f55de0eced4d3c9654809b1871870386a577",
- "reference": "74c7f55de0eced4d3c9654809b1871870386a577",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7a379d8871f6a36f01559c14e11141cc02eb8dc8",
+ "reference": "7a379d8871f6a36f01559c14e11141cc02eb8dc8",
"shasum": ""
},
"require": {
- "php": ">=7.1.3",
- "psr/container": "^1.0",
- "symfony/polyfill-php80": "^1.16",
- "symfony/service-contracts": "^1.1.6|^2"
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/service-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^6.2.10|^7.0"
},
"conflict": {
- "symfony/config": "<4.3|>=5.0",
- "symfony/finder": "<3.4",
- "symfony/proxy-manager-bridge": "<3.4",
- "symfony/yaml": "<4.4.26"
+ "ext-psr": "<1.1|>=2",
+ "symfony/config": "<6.1",
+ "symfony/finder": "<5.4",
+ "symfony/proxy-manager-bridge": "<6.3",
+ "symfony/yaml": "<5.4"
},
"provide": {
- "psr/container-implementation": "1.0",
- "symfony/service-implementation": "1.0|2.0"
+ "psr/container-implementation": "1.1|2.0",
+ "symfony/service-implementation": "1.1|2.0|3.0"
},
"require-dev": {
- "symfony/config": "^4.3",
- "symfony/expression-language": "^3.4|^4.0|^5.0",
- "symfony/yaml": "^4.4.26|^5.0"
- },
- "suggest": {
- "symfony/config": "",
- "symfony/expression-language": "For using expressions in service container configuration",
- "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
- "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
- "symfony/yaml": ""
+ "symfony/config": "^6.1|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/yaml": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -4731,74 +4963,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dependency-injection/tree/v4.4.41"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2022-04-12T15:19:55+00:00"
- },
- {
- "name": "symfony/deprecation-contracts",
- "version": "v3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
- "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "files": [
- "function.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.1"
+ "source": "https://github.com/symfony/dependency-injection/tree/v6.4.16"
},
"funding": [
{
@@ -4814,27 +4979,29 @@
"type": "tidelift"
}
],
- "time": "2022-01-02T09:55:41+00:00"
+ "time": "2024-11-25T14:52:46+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v5.4.7",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f"
+ "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f",
- "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3",
+ "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.1",
"symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.8",
- "symfony/polyfill-php80": "^1.16"
+ "symfony/polyfill-mbstring": "~1.8"
+ },
+ "require-dev": {
+ "symfony/process": "^5.4|^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -4862,7 +5029,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.4.7"
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.13"
},
"funding": [
{
@@ -4878,24 +5045,24 @@
"type": "tidelift"
}
],
- "time": "2022-04-01T12:33:59+00:00"
+ "time": "2024-10-25T15:07:50+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.25.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab"
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-ctype": "*"
@@ -4905,12 +5072,9 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4944,7 +5108,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
},
"funding": [
{
@@ -4960,127 +5124,46 @@
"type": "tidelift"
}
],
- "time": "2021-10-20T20:35:02+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.25.0",
+ "name": "symfony/service-contracts",
+ "version": "v3.5.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+ "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
"shasum": ""
},
"require": {
- "php": ">=7.1"
- },
- "provide": {
- "ext-mbstring": "*"
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
- "suggest": {
- "ext-mbstring": "For best performance"
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
},
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-11-30T18:21:41+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.25.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
- "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "dev-main": "3.5-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
"psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
+ "Symfony\\Contracts\\Service\\": ""
},
- "classmap": [
- "Resources/stubs"
+ "exclude-from-classmap": [
+ "/Test/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -5089,10 +5172,6 @@
],
"authors": [
{
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
@@ -5101,16 +5180,18 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "description": "Generic abstractions related to writing services",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
},
"funding": [
{
@@ -5126,47 +5207,39 @@
"type": "tidelift"
}
],
- "time": "2022-03-04T08:16:47+00:00"
+ "time": "2024-09-25T14:20:29+00:00"
},
{
- "name": "symfony/service-contracts",
- "version": "v2.5.1",
+ "name": "symfony/var-exporter",
+ "version": "v6.4.13",
"source": {
"type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
+ "url": "https://github.com/symfony/var-exporter.git",
+ "reference": "0f605f72a363f8743001038a176eeb2a11223b51"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
- "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f605f72a363f8743001038a176eeb2a11223b51",
+ "reference": "0f605f72a363f8743001038a176eeb2a11223b51",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1",
- "symfony/deprecation-contracts": "^2.1|^3"
- },
- "conflict": {
- "ext-psr": "<1.1|>=2"
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
- "suggest": {
- "symfony/service-implementation": ""
+ "require-dev": {
+ "symfony/property-access": "^6.4|^7.0",
+ "symfony/serializer": "^6.4|^7.0",
+ "symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
+ "Symfony\\Component\\VarExporter\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -5182,18 +5255,20 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Generic abstractions related to writing services",
+ "description": "Allows exporting any serializable PHP data structure to plain PHP code",
"homepage": "https://symfony.com",
"keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
+ "clone",
+ "construct",
+ "export",
+ "hydrate",
+ "instantiate",
+ "lazy-loading",
+ "proxy",
+ "serialize"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
+ "source": "https://github.com/symfony/var-exporter/tree/v6.4.13"
},
"funding": [
{
@@ -5209,7 +5284,7 @@
"type": "tidelift"
}
],
- "time": "2022-03-13T20:07:29+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "theseer/tokenizer",
@@ -5264,7 +5339,7 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
@@ -5280,6 +5355,8 @@
"ext-sodium": "*",
"ext-bcmath": "*"
},
- "platform-dev": [],
+ "platform-dev": {
+ "ext-yaml": "*"
+ },
"plugin-api-version": "2.6.0"
}
diff --git a/doc/en/context/ru/connections/help.html b/doc/en/context/ru/connections/help.html
index 6c9b9a0e9..b5996e0d0 100644
--- a/doc/en/context/ru/connections/help.html
+++ b/doc/en/context/ru/connections/help.html
@@ -1,7 +1,7 @@
<dl class="dl-horizontal">
- <dd>На этой странице отображается список всех подключений этого канала. Список можно отсортировать и отфильтровать с помощью кнопки <a href='#' onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Нажмите чтобы выделить элемент..."><button class='btn btn-outline-secondary btn-sm'><i class="fa fa-filter"></i></button></a> рядом с кнопкой поиска.</dd>
+ <dd>На этой странице отображается список всех подключений этого канала. Список можно отсортировать и отфильтровать с помощью кнопки <a href='#' onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Нажмите чтобы выделить элемент..."><button class='btn btn-outline-secondary btn-sm'><i class="bi bi-funnel-fill"></i></button></a> рядом с кнопкой поиска.</dd>
<dt>Сведения о контакте</dt>
<dd>Каждая запись в списке показывает информацию о конкретном контакте. Полупрозрачное изображение профиля указывает на заархивированное соединение.</dd>
<dt>Статус контакта</dt>
<dd>Контакт может находиться в разных состояниях: <ul><li>Заархивирован</li><li>Игнорируется</li><li>Заблокирован</li><li>Скрыт</li></ul></dd>
-</dl> \ No newline at end of file
+</dl>
diff --git a/include/account.php b/include/account.php
index 884c07389..615c802f4 100644
--- a/include/account.php
+++ b/include/account.php
@@ -613,59 +613,45 @@ function send_register_success_email($email,$password) {
}
/**
- * @brief Allows a user registration.
+ * Mark a pending registration as approved, and notify the account
+ * holder by email.
*
- * @param string $hash
- * @return array|boolean
+ * @param string $hash The registration hash of the entry to approve
+ *
+ * @return bool
*/
-function account_allow($hash) {
-
- $ret = array('success' => false);
+function account_allow(string $hash): bool {
$register = q("SELECT * FROM register WHERE reg_hash = '%s' LIMIT 1",
dbesc($hash)
);
- if(! $register)
- return $ret;
+ if (! $register) {
+ logger(
+ "Entry with hash '{$hash}' was not found in the register table.",
+ LOGGER_NORMAL,
+ LOG_ERR
+ );
+ return false;
+ }
- $account = q("SELECT * FROM account WHERE account_id = %d LIMIT 1",
- intval($register[0]['reg_uid'])
- );
+ $account = get_account_by_id($register[0]['reg_uid']);
- // a register entry without account assigned to
- if(! $account)
- return $ret;
+ if (! $account) {
+ logger(
+ "Account '{$register[0]['reg_uid']}' mentioned by registration hash '{$hash}' was not found.",
+ LOGGER_NORMAL,
+ LOG_ERR
+ );
+ return false;
+ }
- // [hilmar ->
+ $transaction = new DbaTransaction(DBA::$dba);
- q("START TRANSACTION");
- //q("DELETE FROM register WHERE reg_hash = '%s'",
- // dbesc($register[0]['reg_hash'])
- //);
$r1 = q("UPDATE register SET reg_vital = 0 WHERE reg_hash = '%s'",
dbesc($register[0]['reg_hash'])
);
- /* instead of ...
-
- // unblock
- q("UPDATE account SET account_flags = (account_flags & ~%d) "
- . " WHERE (account_flags & %d)>0 AND account_id = %d",
- intval(ACCOUNT_BLOCKED),
- intval(ACCOUNT_BLOCKED),
- intval($register[0]['reg_uid'])
- );
-
- // unpend
- q("UPDATE account SET account_flags = (account_flags & ~%d) "
- . " WHERE (account_flags & %d)>0 AND account_id = %d",
- intval(ACCOUNT_PENDING),
- intval(ACCOUNT_PENDING),
- intval($register[0]['reg_uid'])
- );
-
- */
// together unblock and unpend
$r2 = q("UPDATE account SET account_flags = %d WHERE account_id = %d",
intval($account['account_flags']
@@ -674,9 +660,7 @@ function account_allow($hash) {
);
if($r1 && $r2) {
- q("COMMIT");
-
- // <- hilmar]
+ $transaction->commit();
push_lang($register[0]['reg_lang']);
@@ -684,35 +668,35 @@ function account_allow($hash) {
$email_msg = replace_macros($email_tpl, array(
'$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
- '$username' => $account[0]['account_email'],
- '$email' => $account[0]['account_email'],
+ '$username' => $account['account_email'],
+ '$email' => $account['account_email'],
'$password' => '',
- '$uid' => $account[0]['account_id']
+ '$uid' => $account['account_id']
));
$res = z_mail(
[
- 'toEmail' => $account[0]['account_email'],
+ 'toEmail' => $account['account_email'],
'messageSubject' => sprintf( t('Registration details for %s'), Config::Get('system','sitename')),
'textVersion' => $email_msg,
]
);
- pop_lang();
+ if (! $res) {
+ info(t("Sending account approval email to {$account['email']} failed..."));
+ }
- if(Config::Get('system', 'auto_channel_create', 1))
- auto_channel_create($register[0]['uid']);
+ pop_lang();
- if ($res) {
- info( t('Account approved.') . EOL );
- return true;
+ if(Config::Get('system', 'auto_channel_create', 1)) {
+ auto_channel_create($register[0]['reg_uid']);
}
- // [hilmar ->
- } else {
- q("ROLLBACK");
+ info( t('Account approved.') . EOL );
+ return true;
}
- // <- hilmar]
+
+ return false;
}
diff --git a/include/attach.php b/include/attach.php
index 654c9990d..bda4905f1 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -1606,8 +1606,7 @@ function attach_drop_photo($channel_id,$resource) {
if($x) {
$stage = (($x[0]['item_hidden']) ? DROPITEM_NORMAL : DROPITEM_PHASE1);
- $interactive = (($x[0]['item_hidden']) ? false : true);
- drop_item($x[0]['id'], $interactive, $stage);
+ drop_item($x[0]['id'], $stage);
}
$r = q("SELECT content FROM photo WHERE resource_id = '%s' AND uid = %d AND os_storage = 1",
@@ -1636,8 +1635,7 @@ function attach_drop_item($channel_id,$resource) {
if($x) {
$stage = (($x[0]['item_hidden']) ? DROPITEM_NORMAL : DROPITEM_PHASE1);
- $interactive = (($x[0]['item_hidden']) ? false : true);
- drop_item($x[0]['id'], $interactive, $stage);
+ drop_item($x[0]['id'], $stage);
}
}
@@ -1855,8 +1853,6 @@ function pipe_streams($in, $out, $bufsize = 16384) {
}
function attach_store_item($channel, $observer, $file) {
-
-
if(is_string($file)) {
$r = q("SELECT * FROM attach WHERE uid = %d AND hash = '%s' LIMIT 1",
intval($channel['channel_id']),
@@ -1906,10 +1902,11 @@ function attach_store_item($channel, $observer, $file) {
$post = item_store($arr);
- $item_id = $post['item_id'];
-
- if($item_id) {
- Master::Summon(['Notifier', 'activity', $item_id]);
+ if ($post['success']) {
+ Master::Summon(['Notifier', 'activity', $post['item_id']]);
+ if (!empty($post['approval_id'])) {
+ Master::Summon(['Notifier', 'activity', $post['approval_id']]);
+ }
}
*/
@@ -1919,8 +1916,11 @@ function attach_store_item($channel, $observer, $file) {
}
$stage = (($r[0]['item_hidden']) ? DROPITEM_NORMAL : DROPITEM_PHASE1);
- $interactive = (($r[0]['item_hidden']) ? false : true);
- drop_item($r[0]['id'], $interactive, $stage);
+ drop_item($r[0]['id'], $stage);
+
+ if (empty($r[0]['item_hidden'])) {
+ Master::Summon(['Notifier', 'drop', $r[0]['id']]);
+ }
}
@@ -1945,6 +1945,12 @@ function attach_store_item($channel, $observer, $file) {
$mid = z_root() . '/item/' . $uuid;
+ $target = [
+ 'id' => z_root() . '/conversation/' . $uuid,
+ 'type' => 'Collection',
+ 'attributedTo' => channel_url($channel),
+ ];
+
$arr = []; // Initialize the array of parameters for the post
$arr['aid'] = $channel['channel_account_id'];
$arr['uuid'] = $uuid;
@@ -1965,6 +1971,8 @@ function attach_store_item($channel, $observer, $file) {
$arr['item_thread_top'] = 1;
$arr['item_private'] = (($file['allow_cid'] || $file['allow_gid'] || $file['deny_cid'] || $file['deny_gid']) ? 1 : 0);
$arr['verb'] = 'Create';
+ $arr['target'] = $target;
+ $arr['target_type'] = 'Collection';
$arr['obj_type'] = $type;
$arr['title'] = $file['filename'];
@@ -1982,14 +1990,13 @@ function attach_store_item($channel, $observer, $file) {
}
$body_str = sprintf((($type === 'Image') ? t('%s shared an %s with you') : t('%s shared a %s with you')), '[zrl=' . $observer['xchan_url'] . ']' . $observer['xchan_name'] . '[/zrl]', '[zrl=' . $path . ']' . (($type === 'Image') ? t('image') : t('file')) . '[/zrl]');
- $arr['body'] .= $body_str;
+ $arr['body'] .= "\r\n" . $body_str;
$meta = [
'name' => $file['filename'],
'type' => $file['filetype'],
'size' => $file['filesize'],
'revision' => $file['revision'],
- 'size' => $file['filesize'],
'created' => $file['created'],
'edited' => $file['edited'],
'path' => $path
@@ -1999,10 +2006,11 @@ function attach_store_item($channel, $observer, $file) {
$post = item_store($arr);
- $item_id = $post['item_id'];
-
- if($item_id) {
- Master::Summon(['Notifier', 'activity', $item_id]);
+ if ($post['success']) {
+ Master::Summon(['Notifier', 'activity', $post['item_id']]);
+ if (!empty($post['approval_id'])) {
+ Master::Summon(['Notifier', 'activity', $post['approval_id']]);
+ }
}
}
@@ -2933,41 +2941,6 @@ function attach_syspaths($channel_id,$attach_hash) {
return [ 'os_path' => $os_path, 'path' => $path ];
}
-/**
- * in earlier releases we did not fill in os_path and display_path in the attach DB structure.
- * (It was not needed or used). Going forward we intend to make use of these fields.
- * A cron task checks for empty values (as older attachments may have arrived at our site
- * in a clone operation) and executes attach_syspaths() to generate these field values and correct
- * the attach table entry. The operation is limited to 100 DB entries at a time so as not to
- * overload the system in any cron run. Eventually it will catch up with old attach structures
- * and switch into maintenance mode to correct any that might arrive in clone packets from older
- * sites.
- */
-
-
-
-function attach_upgrade() {
- $r = q("SELECT id, uid, hash FROM attach WHERE os_path = '' OR display_path = '' LIMIT 100");
- if($r) {
- foreach($r as $rv) {
- $x = attach_syspaths($rv['uid'],$rv['hash']);
- if($x) {
- q("update attach set os_path = '%s', display_path = '%s' where id = %d",
- dbesc($x['os_path']),
- dbesc($x['path']),
- intval($rv['id'])
- );
- q("update photo set os_path = '%s', display_path = '%s' where uid = %d and resource_id = '%s'",
- dbesc($x['os_path']),
- dbesc($x['path']),
- intval($rv['uid']),
- dbesc($rv['hash'])
- );
- }
- }
- }
-}
-
/**
* Chunked uploader for integration with the blueimp jquery-uploader
diff --git a/include/bbcode.php b/include/bbcode.php
index 15a75ce3f..65bda1b7b 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -1126,9 +1126,11 @@ function parseIdentityAwareHTML($Text) {
if ($observer) {
$s1 = '<span class="bb_observer" title="' . t('Different viewers will see this text differently') . '">';
$s2 = '</span>';
- $obsBaseURL = $observer['xchan_connurl'];
- $obsBaseURL = preg_replace("/\/poco\/.*$/", '', $obsBaseURL);
- $Text = str_replace('[observer.baseurl]', $obsBaseURL, $Text);
+
+ $parsed = parse_url($observer['xchan_url']);
+ $observer_base_url = unparse_url($parsed, ['scheme', 'host', 'port']);
+
+ $Text = str_replace('[observer.baseurl]', $observer_base_url, $Text);
$Text = str_replace('[observer.url]',$observer['xchan_url'], $Text);
$Text = str_replace('[observer.name]',$s1 . $observer['xchan_name'] . $s2, $Text);
$Text = str_replace('[observer.address]',$s1 . $observer['xchan_addr'] . $s2, $Text);
@@ -1311,9 +1313,11 @@ function bbcode($text, $options = []) {
if ($observer) {
$s1 = '<span class="bb_observer" title="' . t('Different viewers will see this text differently') . '">';
$s2 = '</span>';
- $obsBaseURL = $observer['xchan_connurl'];
- $obsBaseURL = preg_replace("/\/poco\/.*$/", '', $obsBaseURL);
- $text = str_replace('[observer.baseurl]', $obsBaseURL, $text);
+
+ $parsed = parse_url($observer['xchan_url']);
+ $observer_base_url = unparse_url($parsed, ['scheme', 'host', 'port']);
+
+ $text = str_replace('[observer.baseurl]', $observer_base_url, $text);
$text = str_replace('[observer.url]',$observer['xchan_url'], $text);
$text = str_replace('[observer.name]',$s1 . $observer['xchan_name'] . $s2, $text);
$text = str_replace('[observer.address]',$s1 . $observer['xchan_addr'] . $s2, $text);
diff --git a/include/channel.php b/include/channel.php
index 22b5bcde1..a3ba1a765 100644
--- a/include/channel.php
+++ b/include/channel.php
@@ -96,6 +96,8 @@ function validate_channelname($name) {
if (x($arr, 'message'))
return $arr['message'];
+
+ return null;
}
@@ -2428,7 +2430,7 @@ function get_zcard($channel, $observer_hash = '', $args = array()) {
$cover = [ 'href' => z_root() . '/images/default_cover_photos/' . $default_cover . '/' . $cover_width . '.png' ];
}
- $o .= replace_macros(get_markup_template('zcard.tpl'), array(
+ return replace_macros(get_markup_template('zcard.tpl'), array(
'$maxwidth' => $maxwidth,
'$scale' => $scale,
'$translate' => $translate,
@@ -2437,8 +2439,6 @@ function get_zcard($channel, $observer_hash = '', $args = array()) {
'$pphoto' => $pphoto,
'$zcard' => $zcard
));
-
- return $o;
}
@@ -2505,17 +2505,13 @@ function get_zcard_embed($channel, $observer_hash = '', $args = array()) {
$cover = [ 'href' => z_root() . '/images/default_cover_photos/' . $default_cover . '/' . $cover_width . '.png' ];
}
- $o .= replace_macros(get_markup_template('zcard_embed.tpl'),array(
+ return replace_macros(get_markup_template('zcard_embed.tpl'),array(
'$maxwidth' => $maxwidth,
- '$scale' => $scale,
- '$translate' => $translate,
'$size' => $size,
'$cover' => $cover,
'$pphoto' => $pphoto,
'$zcard' => $zcard
));
-
- return $o;
}
/**
@@ -3106,7 +3102,7 @@ function pchan_to_chan($pchan) {
}
function channel_url($channel) {
- return (($channel) ? z_root() . '/channel/' . $channel['channel_address'] : z_root());
+ return ((isset($channel['channel_address'])) ? z_root() . '/channel/' . $channel['channel_address'] : z_root());
}
function get_channel_hashes() {
diff --git a/include/config.php b/include/config.php
index 4dd40eccf..50fe60eb0 100644
--- a/include/config.php
+++ b/include/config.php
@@ -39,8 +39,6 @@ use Zotlabs\Lib as Zlib;
*
* @param string $family The category of the configuration value
*
- * @return Nothing
- *
* @deprecated
* This function is deprecated, use Zotlabs\Lib\Config::Load
* instead.
diff --git a/include/connections.php b/include/connections.php
index efc531171..b3e9ba89d 100644
--- a/include/connections.php
+++ b/include/connections.php
@@ -342,7 +342,7 @@ function remove_all_xchan_resources($xchan, $channel_id = 0) {
if($r) {
foreach($r as $rr) {
- drop_item($rr['id'],false);
+ drop_item($rr['id']);
}
}
@@ -513,7 +513,7 @@ function remove_abook_items($channel_id, $xchan_hash) {
continue;
}
- drop_item($rr['id'],false);
+ drop_item($rr['id'], uid: $channel_id);
}
}
diff --git a/include/conversation.php b/include/conversation.php
index ee599c28d..6dfefa707 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -1008,7 +1008,7 @@ function builtin_activity_puller($item, &$conv_responses) {
$moderate = ((intval($item['item_blocked']) === ITEM_MODERATED) ? '<a href="moderate/' . $item['id'] . '/approve" onclick="moderate_approve(' . $item['id'] . '); return false;" class="text-success pe-2" title="' . t('Approve this item') . '"><i class="bi bi-check-lg" ></i></a><a href="moderate/' . $item['id'] . '/drop" onclick="moderate_drop(' . $item['id'] . '); return false;" class="text-danger pe-2" title="' . t('Delete this item') . '"><i class="bi bi-trash" ></i></a>' : '');
$url = (($item['author_xchan'] && $item['author']['xchan_photo_s'])
- ? '<div class="dropdown-item">' . $moderate . '<a href="' . chanlink_hash($item['author_xchan']) . '" class="text-reset">' . '<img class="menu-img-1" src="' . zid($item['author']['xchan_photo_s']) . '" alt="' . urlencode($name) . '" /> ' . $name . '</a></div>'
+ ? '<div class="dropdown-item">' . $moderate . '<a href="' . chanlink_hash($item['author_xchan']) . '" class="text-reset">' . '<img class="menu-img-1" src="' . $item['author']['xchan_photo_s'] . '" alt="' . urlencode($name) . '" loading="lazy" /> ' . $name . '</a></div>'
: '<a class="dropdown-item" href="#" class="disabled">' . $name . '</a>'
);
@@ -1255,6 +1255,7 @@ function hz_status_editor($x, $popup = false) {
'$writefiles' => $writefiles,
'$bold' => t('Bold'),
'$italic' => t('Italic'),
+ '$highlighter' => t('Highlight selected text'),
'$underline' => t('Underline'),
'$quote' => t('Quote'),
'$code' => t('Code'),
diff --git a/include/datetime.php b/include/datetime.php
index 4c7105138..89e2876d0 100644
--- a/include/datetime.php
+++ b/include/datetime.php
@@ -264,6 +264,45 @@ function relative_date($posted_date, $format = null) {
return sprintf($format, $r, plural_dates($str,$r));
}
}
+
+ return $abs;
+}
+
+/**
+ * @brief Returns a relative time string like 3 seconds ago.
+ * @param string $posted_date (UTC)
+ * @param DateTime $now (optional)
+ * @return string with relative time
+ */
+function relative_time($timestamp, $now = new DateTime()) {
+ $localtime = datetime_convert('UTC', date_default_timezone_get(), $timestamp);
+ $time = new DateTime($localtime);
+
+ $interval = $now->diff($time);
+
+ $prefix = '';
+ $appendix = ' ' . t('ago');
+
+ if ($time > $now) {
+ $prefix = t('in') . ' ';
+ $appendix = '';
+ }
+
+ if ($interval->y > 0) {
+ return $prefix . $interval->y . ' ' . plural_dates('y', $interval->y) . $appendix;
+ } elseif ($interval->m > 0) {
+ return $prefix . $interval->m . ' ' . plural_dates('m', $interval->m) . $appendix;
+ } elseif ($interval->d > 0) {
+ return $prefix . $interval->d . ' ' . plural_dates('d', $interval->d) . $appendix;
+ } elseif ($interval->h > 0) {
+ return $prefix . $interval->h . ' ' . plural_dates('h', $interval->h) . $appendix;
+ } elseif ($interval->i > 0) {
+ return $prefix . $interval->i . ' ' . plural_dates('i', $interval->i) . $appendix;
+ } elseif ($interval->s > 0) {
+ return $prefix . $interval->s . ' ' . plural_dates('s', $interval->s) . $appendix;
+ } else {
+ return t('now');
+ }
}
function plural_dates($k,$n) {
@@ -525,7 +564,7 @@ function update_birthdays() {
$z = event_store_event($ev);
if ($z) {
- $item_id = event_store_item($ev, $z);
+ event_store_item($ev, $z, false);
q("update abook set abook_dob = '%s' where abook_id = %d",
dbesc(intval($rr['abook_dob']) + 1 . substr($rr['abook_dob'], 4)),
intval($rr['abook_id'])
diff --git a/include/dba/dba_pdo.php b/include/dba/dba_pdo.php
index c8a1b6c85..a12629e19 100644
--- a/include/dba/dba_pdo.php
+++ b/include/dba/dba_pdo.php
@@ -10,6 +10,8 @@ class dba_pdo extends dba_driver {
public $driver_dbtype = null;
+ private string $server_version = '';
+
/**
* {@inheritDoc}
* @see dba_driver::connect()
@@ -37,6 +39,7 @@ class dba_pdo extends dba_driver {
try {
$this->db = new PDO($dsn,$user,$pass);
$this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
+ $this->server_version = $this->db->getAttribute(PDO::ATTR_SERVER_VERSION);
}
catch(PDOException $e) {
if(file_exists('dbfail.out')) {
@@ -73,9 +76,9 @@ class dba_pdo extends dba_driver {
}
}
- $result = null;
+ $result = false;
$this->error = '';
- $select = ((stripos($sql, 'select') === 0) ? true : false);
+ $select = stripos($sql, 'select') === 0 || stripos($sql, 'returning ') > 0;
try {
$result = $this->db->query($sql, PDO::FETCH_ASSOC);
@@ -115,6 +118,111 @@ class dba_pdo extends dba_driver {
return (($this->error) ? false : $r);
}
+ /**
+ * Insert a row into a table.
+ *
+ * The `$data` argument is an array of key/value pairs of the columns to
+ * insert, where the key is the column name. Values are automatically
+ * escaped if needed, and should be provided unescaped to this function.
+ *
+ * @note it is the callers responsibility to ensure that only valid
+ * column names are passed as keys in the array.
+ *
+ * The inserted row will be returned.
+ *
+ * @param string $table The table to insert the row into.
+ * @param array $data The data to insert as an array of column name => value pairs.
+ * @param string $idcol The column name for the primary key of the table. We need to
+ * specify this since we don't have a consistent naming of primary
+ * id for tables.
+ *
+ * @return array|bool The complete record as read back from the database, or false if we
+ * could not fetch it.
+ */
+ public function insert(string $table, array $data, string $idcol): array|bool {
+ $keys = array_keys($data);
+ $values = array_map(
+ fn ($v) => is_numeric($v) ? $v : "'" . dbesc($v) . "'",
+ array_values($data)
+ );
+
+ $query = "INSERT INTO {$table} ("
+ . implode(', ', $keys) . ') VALUES ('
+ . implode(', ', $values) . ')';
+
+ // MySQL is the only supported DB that don't support the returning
+ // clause. Since the driver type is 'mysql' also for MariaDB, we need
+ // to check the actual server version to be sure we only exclude actual
+ // MySQL systems.
+ if ($this->driver_dbtype !== 'mysql' || stripos($this->server_version, 'mariadb') !== false) {
+ $query .= ' RETURNING *';
+ }
+
+ $res = $this->q($query);
+
+ if (is_a($res, PDOStatement::class)) {
+ //
+ // Calling PDO::lastInsertId should be safe here.
+ // The last inserted id is kept for each connection, so we're not risking
+ // a race condition wrt inserts by other requests that happen simultaneously.
+ //
+ $id = $this->db->lastInsertId($table);
+
+ $res = $this->q("SELECT * FROM {$table} WHERE {$idcol} = {$id}");
+
+ if (is_a($res, PDOStatement::class)) {
+ db_logger('dba_pdo: PDOStatement returned, did not expect that.');
+ return false;
+ }
+ }
+
+ if (is_array($res)) {
+ // Since we should never have more than one result, unwrap the array
+ // so we only have the resulting row.
+ $res = $res[0];
+ }
+
+ return $res;
+ }
+
+ /**
+ * Update an existing row in a table.
+ *
+ * The `$data` argument is an array of key/value pairs of the columns to
+ * update, where the key is the column name. Values are automatically
+ * escaped if needed, and should be provided unescaped to this function.
+ *
+ * @note it is the callers responsibility to ensure that only valid
+ * column names are passed as keys in the array.
+ *
+ * The row to be updated is identified by `$idcol` and `$idval` as the
+ * column name and value respectively. This should normally be the unique
+ * id column of the table, but can in theory be any column with a unique
+ * value that identifies a specific row.
+ *
+ * @param string $table The table to update.
+ * @param array $data The columns to update as key => value pairs.
+ * @param string $idcol The name of the id column to check $idval against.
+ * @param mixed $idval The id of the row to update.
+ *
+ * @return bool True if the update succeeded, false otherwise.
+ */
+ public function update(string $table, array $data, string $idcol, mixed $idval): bool {
+ $set_statements = [];
+
+ foreach ($data as $k => $v) {
+ $set_statements[] = "set {$k}=" . (is_numeric($v) ? $v : "'" . dbesc($v) . "'");
+ }
+
+ $query = "UPDATE {$table} "
+ . implode(', ', $set_statements)
+ . " WHERE {$idcol} = {$idval}";
+
+ $res = $this->q($query);
+
+ return is_a($res, PDOStatement::class);
+ }
+
function escape($str) {
if($this->db && $this->connected) {
return substr(substr(@$this->db->quote($str),1),0,-1);
diff --git a/include/event.php b/include/event.php
index af27c45b0..b83a733b8 100644
--- a/include/event.php
+++ b/include/event.php
@@ -13,7 +13,7 @@ use Zotlabs\Lib\Libsync;
use Zotlabs\Access\AccessList;
use Ramsey\Uuid\Uuid;
-use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
+use Ramsey\Uuid\Exception\UnableToBuildUuidException;
require_once('include/bbcode.php');
@@ -102,7 +102,15 @@ function format_event_obj($jobject) {
if (is_array($object) && (array_key_exists('summary', $object) || array_key_exists('name', $object))) {
$dtend = ((array_key_exists('endTime', $object)) ? $object['endTime'] : NULL_DATE);
- $title = ((isset($object['summary']) && $object['summary']) ? zidify_links(smilies(bbcode($object['summary']))) : $object['name']);
+
+ $title = $object['name'] ?? '';
+ $content = html2bbcode($object['content']);
+
+ if (strpos($object['source']['content'], '[/event-description]') !== false) {
+ $bbdescription = [];
+ preg_match("/\[event\-description\](.*?)\[\/event\-description\]/ism", $object['source']['content'], $bbdescription);
+ $content = $bbdescription[1];
+ }
// mobilizon sets a timezone in the object
// we will assume that events with an timezone should be adjusted
@@ -146,15 +154,8 @@ function format_event_obj($jobject) {
'$event_tz' => ['label' => t('Timezone'), 'value' => (($tz === date_default_timezone_get()) ? '' : $tz)]
));
-
- $description = [];
-
- if (strpos($object['source']['content'], '[/event-description]') !== false) {
- preg_match("/\[event\-description\](.*?)\[\/event\-description\]/ism", $object['source']['content'], $description);
- }
-
$event['content'] = replace_macros(get_markup_template('event_item_content.tpl'), array(
- '$description' => ((isset($description[1]))? zidify_links(smilies(bbcode($description[1]))) : EMPTY_STR),
+ '$description' => zidify_links(smilies(bbcode($content, ['tryoembed' => false]))),
'$location_label' => t('Location:'),
'$location' => ((array_path_exists('location/name', $object)) ? zidify_links(smilies(bbcode($object['location']['name']))) : EMPTY_STR)
));
@@ -235,7 +236,7 @@ function ical_wrapper($ev) {
if(! ((is_array($ev)) && count($ev)))
return '';
- $o .= "BEGIN:VCALENDAR";
+ $o = "BEGIN:VCALENDAR";
$o .= "\r\nVERSION:2.0";
$o .= "\r\nMETHOD:PUBLISH";
$o .= "\r\nPRODID:-//" . Config::Get('system','sitename') . "//" . Zotlabs\Lib\System::get_platform_name() . "//" . strtoupper(App::$language). "\r\n";
@@ -647,7 +648,7 @@ function event_store_event($arr) {
else {
try {
$hash = Uuid::uuid4()->toString();
- } catch (UnsatisfiedDependencyException $e) {
+ } catch (UnableToBuildUuidException $e) {
$hash = random_string(48);
}
}
@@ -1070,7 +1071,7 @@ function event_import_ical($ical, $uid) {
logger('storing event: ' . print_r($ev,true), LOGGER_ALL);
$event = event_store_event($ev);
if($event) {
- $item_id = event_store_item($ev,$event);
+ event_store_item($ev, $event, false);
return true;
}
}
@@ -1205,7 +1206,7 @@ function event_import_ical_task($ical, $uid) {
logger('storing event: ' . print_r($ev,true), LOGGER_ALL);
$event = event_store_event($ev);
if($event) {
- $item_id = event_store_item($ev,$event);
+ event_store_item($ev, $event, false);
return true;
}
}
@@ -1214,8 +1215,7 @@ function event_import_ical_task($ical, $uid) {
}
-
-function event_store_item($arr, $event) {
+function event_store_item($arr, $event, $deliver = true) {
require_once('include/datetime.php');
require_once('include/items.php');
@@ -1234,7 +1234,7 @@ function event_store_item($arr, $event) {
}
- $item_arr = array();
+ $item_arr = [];
$prefix = '';
// $birthday = false;
@@ -1255,7 +1255,7 @@ function event_store_item($arr, $event) {
$item_arr['comment_policy'] = 'none';
}
- $r = q("SELECT * FROM item WHERE resource_id = '%s' AND resource_type = 'event' and uid = %d LIMIT 1",
+ $r = q("SELECT * FROM item left join xchan on author_xchan = xchan_hash WHERE resource_id = '%s' AND resource_type = 'event' and uid = %d LIMIT 1",
dbesc($event['event_hash']),
intval($arr['uid'])
);
@@ -1292,51 +1292,21 @@ function event_store_item($arr, $event) {
$object = json_encode($x);
- $private = (($arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid']) ? 1 : 0);
-
- /**
- * @FIXME can only update sig if we have the author's channel on this site
- * Until fixed, set it to nothing so it won't give us signature errors.
- */
- $sig = '';
-
- q("UPDATE item SET title = '%s', body = '%s', obj = '%s', allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', edited = '%s', sig = '%s', item_flags = %d, item_private = %d, obj_type = '%s' WHERE id = %d AND uid = %d",
- dbesc($arr['summary']),
- dbesc($prefix . format_event_bbcode($arr)),
- dbesc($object),
- dbesc($arr['allow_cid']),
- dbesc($arr['allow_gid']),
- dbesc($arr['deny_cid']),
- dbesc($arr['deny_gid']),
- dbesc($arr['edited']),
- dbesc($sig),
- intval($r[0]['item_flags']),
- intval($private),
- dbesc('Event'),
- intval($r[0]['id']),
- intval($arr['uid'])
- );
-
- q("delete from term where oid = %d and otype = %d",
- intval($r[0]['id']),
- intval(TERM_OBJ_POST)
- );
-
- if(($arr['term']) && (is_array($arr['term']))) {
- foreach($arr['term'] as $t) {
- q("insert into term (uid,oid,otype,ttype,term,url)
- values(%d,%d,%d,%d,'%s','%s') ",
- intval($arr['uid']),
- intval($r[0]['id']),
- intval(TERM_OBJ_POST),
- intval($t['ttype']),
- dbesc($t['term']),
- dbesc($t['url'])
- );
- }
- }
-
- $item_id = $r[0]['id'];
+ $item_arr['id'] = $r[0]['id'];
+ $item_arr['uid'] = $arr['uid'];
+ $item_arr['obj'] = $object;
+ $item_arr['edited'] = $arr['edited'];
+ $item_arr['allow_cid'] = $arr['allow_cid'];
+ $item_arr['allow_gid'] = $arr['allow_gid'];
+ $item_arr['deny_cid'] = $arr['deny_cid'];
+ $item_arr['deny_gid'] = $arr['deny_gid'];
+ $item_arr['item_private'] = (($arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid']) ? 1 : 0);
+ $item_arr['title'] = $arr['summary'];
+ $item_arr['sig'] = '';
+ $item_arr['body'] = $prefix . format_event_bbcode($arr);
+ $item_arr['term'] = $arr['term'];
+
+ $post = item_store_update($item_arr, deliver: $deliver);
/**
* @hooks event_updated
@@ -1344,14 +1314,10 @@ function event_store_item($arr, $event) {
*/
call_hooks('event_updated', $event['id']);
- return $item_id;
+ return $post;
} else {
- $z = q("select * from channel where channel_id = %d limit 1",
- intval($arr['uid'])
- );
-
- $private = (($arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid']) ? 1 : 0);
+ $z = channelx_by_n($arr['uid']);
$item_wall = 0;
$item_origin = 0;
@@ -1361,7 +1327,7 @@ function event_store_item($arr, $event) {
$item_arr['id'] = $item['id'];
}
else {
- $wall = (($z[0]['channel_hash'] == $event['event_xchan']) ? true : false);
+ $wall = (($z['channel_hash'] == $event['event_xchan']) ? true : false);
$item_thread_top = 1;
if($wall) {
$item_wall = 1;
@@ -1374,20 +1340,20 @@ function event_store_item($arr, $event) {
$arr['mid'] = z_root() . '/activity/' . $event['event_hash'];
}
- $item_arr['aid'] = $z[0]['channel_account_id'];
+ $item_arr['aid'] = $z['channel_account_id'];
$item_arr['uid'] = $arr['uid'];
$item_arr['uuid'] = $arr['uuid'];
$item_arr['author_xchan'] = $arr['event_xchan'];
$item_arr['mid'] = $arr['mid'];
$item_arr['parent_mid'] = $arr['mid'];
- $item_arr['owner_xchan'] = (($wall) ? $z[0]['channel_hash'] : $arr['event_xchan']);
+ $item_arr['owner_xchan'] = (($wall) ? $z['channel_hash'] : $arr['event_xchan']);
$item_arr['author_xchan'] = $arr['event_xchan'];
$item_arr['title'] = $arr['summary'];
$item_arr['allow_cid'] = $arr['allow_cid'];
$item_arr['allow_gid'] = $arr['allow_gid'];
$item_arr['deny_cid'] = $arr['deny_cid'];
$item_arr['deny_gid'] = $arr['deny_gid'];
- $item_arr['item_private'] = $private;
+ $item_arr['item_private'] = (($arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid']) ? 1 : 0);
$item_arr['verb'] = 'Invite';
$item_arr['item_wall'] = $item_wall;
$item_arr['item_origin'] = $item_origin;
@@ -1452,16 +1418,21 @@ function event_store_item($arr, $event) {
$item_arr['obj'] = json_encode($y);
}
+ $item_arr['target'] = [
+ 'id' => str_replace('/item/', '/conversation/', $item_arr['parent_mid']),
+ 'type' => 'Collection',
+ 'attributedTo' => z_root() . '/channel/' . $z['channel_address'],
+ ];
+ $item_arr['tgt_type'] = 'Collection';
+
// propagate the event resource_id so that posts containing it are easily searchable in downstream copies
// of the item which have not stored the actual event. Required for Diaspora event federation as Diaspora
// event_participation messages refer to the event resource_id as a parent, while out own event attendance
// activities refer to the item message_id as the parent.
- set_iconfig($item_arr, 'system','event_id',$event['event_hash'],true);
-
- $res = item_store($item_arr);
+ set_iconfig($item_arr, 'system', 'event_id', $event['event_hash'], true);
- $item_id = $res['item_id'];
+ $post = item_store($item_arr, deliver: $deliver);
/**
* @hooks event_created
@@ -1469,7 +1440,7 @@ function event_store_item($arr, $event) {
*/
call_hooks('event_created', $event['id']);
- return $item_id;
+ return $post;
}
}
diff --git a/include/features.php b/include/features.php
index d527f60e6..65ead6604 100644
--- a/include/features.php
+++ b/include/features.php
@@ -170,12 +170,20 @@ function get_features($filtered = true, $level = (-1)) {
[
'star_posts',
t('Star Posts'),
- t('Ability to mark special posts with a star indicator'),
+ t('Ability to mark conversations with a star'),
false,
Config::Get('feature_lock','star_posts'),
],
[
+ 'filing',
+ t('File Posts'),
+ t('Ability to file posts'),
+ false,
+ Config::Get('feature_lock','filing'),
+ ],
+
+ [
'reply_to',
t('Reply on comment'),
t('Ability to reply on selected comment'),
diff --git a/include/feedutils.php b/include/feedutils.php
index a50214746..1487ea2d6 100644
--- a/include/feedutils.php
+++ b/include/feedutils.php
@@ -228,15 +228,24 @@ function construct_activity_target($item) {
if($item['target']) {
$o = '<as:target>' . "\r\n";
$r = json_decode($item['target'],false);
- if(! $r)
+
+ if (!$r) {
return '';
- if($r->type)
+ }
+
+ if (isset($r->type)) {
$o .= '<as:obj_type>' . xmlify($r->type) . '</as:obj_type>' . "\r\n";
- if($r->id)
+ }
+
+ if (isset($r->id)) {
$o .= '<id>' . xmlify($r->id) . '</id>' . "\r\n";
- if($r->title)
+ }
+
+ if (isset($r->title)) {
$o .= '<title>' . xmlify($r->title) . '</title>' . "\r\n";
- if($r->links) {
+ }
+
+ if (isset($r->link)) {
/** @FIXME !!! */
if(substr($r->link,0,1) === '<') {
if(strstr($r->link,'&') && (! strstr($r->link,'&amp;')))
@@ -244,11 +253,14 @@ function construct_activity_target($item) {
$r->link = preg_replace('/\<link(.*?)\"\>/','<link$1"/>',$r->link);
$o .= $r->link;
}
- else
+ else {
$o .= '<link rel="alternate" type="text/html" href="' . xmlify($r->link) . '" />' . "\r\n";
+ }
}
- if($r->content)
+
+ if(isset($r->content)) {
$o .= '<content type="html" >' . xmlify(bbcode($r->content)) . '</content>' . "\r\n";
+ }
$o .= '</as:target>' . "\r\n";
@@ -311,7 +323,7 @@ function get_atom_author($feed, $item) {
$base = $rawactor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
if($base && count($base)) {
foreach($base as $link) {
- if($link['attribs']['']['rel'] === 'alternate' && (! $res['author_link']))
+ if($link['attribs']['']['rel'] === 'alternate' && (!$author['author_link']))
$author['author_link'] = unxmlify($link['attribs']['']['href']);
if(!x($author, 'author_photo') || ! $author['author_photo']) {
if($link['attribs']['']['rel'] === 'avatar' || $link['attribs']['']['rel'] === 'photo')
@@ -357,7 +369,7 @@ function get_atom_author($feed, $item) {
if($base && count($base)) {
foreach($base as $link) {
- if($link['attribs']['']['rel'] === 'alternate' && (! $res['author_link']))
+ if($link['attribs']['']['rel'] === 'alternate' && (!$author['author_link']))
$author['author_link'] = unxmlify($link['attribs']['']['href']);
if(! (x($author,'author_photo'))) {
if($link['attribs']['']['rel'] === 'avatar' || $link['attribs']['']['rel'] === 'photo')
@@ -998,7 +1010,7 @@ function process_feed_tombstones($feed,$importer,$contact,$pass) {
if(! intval($item['item_deleted'])) {
logger('deleting item ' . $item['id'] . ' mid=' . $item['mid'], LOGGER_DEBUG);
- drop_item($item['id'],false);
+ drop_item($item['id']);
}
}
}
@@ -1173,15 +1185,19 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
intval($importer['channel_id'])
);
-
// Update content if 'updated' changes
- if($r) {
- if(activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE])
- && $datarray['author_xchan'] === $r[0]['author_xchan']) {
+ if ($r) {
+ // Check ownership
+ if ($datarray['author_xchan'] !== $r[0]['author_xchan']) {
+ logger('stored item author is not imported item author', LOGGER_DEBUG);
+ continue;
+ }
+
+ if (activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE])) {
if(! intval($r[0]['item_deleted'])) {
logger('deleting item ' . $r[0]['id'] . ' mid=' . $datarray['mid'], LOGGER_DEBUG);
- drop_item($r[0]['id'],false);
+ drop_item($r[0]['id']);
}
continue;
}
@@ -1444,12 +1460,17 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
// Update content if 'updated' changes
- if($r) {
- if(isset($datarray['verb']) && activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE])
- && isset($datarray['author_xchan']) && $datarray['author_xchan'] === $r[0]['author_xchan']) {
+ if ($r) {
+ // Check ownership
+ if ($datarray['author_xchan'] !== $r[0]['author_xchan']) {
+ logger('stored item author is not imported item author', LOGGER_DEBUG);
+ continue;
+ }
+
+ if (isset($datarray['verb']) && activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE])) {
if(! intval($r[0]['item_deleted'])) {
logger('deleting item ' . $r[0]['id'] . ' mid=' . $datarray['mid'], LOGGER_DEBUG);
- drop_item($r[0]['id'],false);
+ drop_item($r[0]['id'], uid: $importer['channel_id']);
}
continue;
}
diff --git a/include/help.php b/include/help.php
index 12721a30b..2358f1289 100644
--- a/include/help.php
+++ b/include/help.php
@@ -1,6 +1,6 @@
<?php
-use \Michelf\MarkdownExtra;
+use Michelf\MarkdownExtra;
use CommerceGuys\Intl\Language\LanguageRepository;
require_once('include/items.php');
@@ -156,12 +156,12 @@ function store_doc_file($s) {
if($r) {
$item['id'] = $r[0]['id'];
$item['mid'] = $item['parent_mid'] = $r[0]['mid'];
- $x = item_store_update($item);
+ $x = item_store_update($item, deliver: false, addAndSync: false);
}
else {
$item['uuid'] = item_message_id();
$item['mid'] = $item['parent_mid'] = z_root() . '/item/' . $item['uuid'];
- $x = item_store($item);
+ $x = item_store($item, deliver: false, addAndSync: false);
}
return $x;
diff --git a/include/html2bbcode.php b/include/html2bbcode.php
index 277b0e640..b799a0c28 100644
--- a/include/html2bbcode.php
+++ b/include/html2bbcode.php
@@ -29,9 +29,6 @@ function node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb)
foreach ($list as $oldNode) {
- if ($oldnode == 'li')
- hz_syslog(print_r($oldNode,true));
-
$attr = array();
if ($oldNode->attributes->length)
foreach ($oldNode->attributes as $attribute)
diff --git a/include/import.php b/include/import.php
index 479c2c255..77d35a3e7 100644
--- a/include/import.php
+++ b/include/import.php
@@ -825,13 +825,13 @@ function import_items($channel, $items, $sync = false, $relocate = null) {
if($item['edited'] >= $r[0]['edited']) {
$item['id'] = $r[0]['id'];
$item['uid'] = $channel['channel_id'];
- $item_result = item_store_update($item,$allow_code,$deliver);
+ $item_result = item_store_update($item, $allow_code, $deliver, addAndSync: false);
}
}
else {
$item['aid'] = $channel['channel_account_id'];
$item['uid'] = $channel['channel_id'];
- $item_result = item_store($item,$allow_code,$deliver);
+ $item_result = item_store($item, $allow_code, $deliver, addAndSync: false);
}
// preserve conversations you've been involved in from being expired
@@ -1886,7 +1886,7 @@ function import_webpage_element($element, $channel, $type) {
$arr['id'] = $i[0]['id'];
// don't update if it has the same timestamp as the original
if($arr['edited'] > $i[0]['edited'])
- $x = item_store_update($arr,$execflag);
+ $x = item_store_update($arr, $execflag, deliver: false, addAndSync: false);
}
else {
if(($i) && (intval($i[0]['item_deleted']))) {
@@ -1897,7 +1897,7 @@ function import_webpage_element($element, $channel, $type) {
);
}
else
- $x = item_store($arr,$execflag);
+ $x = item_store($arr, $execflag, deliver: false, addAndSync: false);
}
if($x && $x['success']) {
diff --git a/include/items.php b/include/items.php
index 423d626ad..1f3671c83 100644
--- a/include/items.php
+++ b/include/items.php
@@ -258,6 +258,25 @@ function item_normal() {
return $sql;
}
+function item_forwardable($item) {
+ if (intval($item['item_unpublished']) ||
+ intval($item['item_delayed']) ||
+ intval($item['item_blocked']) ||
+ intval($item['item_hidden']) ||
+ intval($item['item_restrict']) || // this might change in the future
+ // internal follow/unfollow thread
+ in_array($item['verb'], ['Follow', 'Ignore', ACTIVITY_FOLLOW, ACTIVITY_UNFOLLOW]) ||
+ str_contains($item['postopts'], 'nodeliver') ||
+ // actor not fetchable
+ (isset($item['author']['xchan_network']) && in_array($item['author']['xchan_network'], ['rss', 'anon', 'token']))
+
+ ) {
+ return false;
+ }
+
+ return true;
+}
+
function item_normal_search() {
return " and item.item_hidden = 0 and item.item_type in (0,3,6,7) and item.item_deleted = 0
and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_pending_remove = 0
@@ -361,7 +380,7 @@ function can_comment_on_post($observer_xchan, $item) {
case 'specific':
case 'contacts':
case '':
- if(local_channel() && get_abconfig(local_channel(), (($item['verb'] === ACTIVITY_SHARE) ? $item['source_xchan'] : $item['owner_xchan']), 'their_perms', 'post_comments')) {
+ if(local_channel() && get_abconfig(local_channel(), $item['owner_xchan'], 'their_perms', 'post_comments')) {
return true;
}
if(intval($item['item_wall']) && perm_is_allowed($item['uid'],$observer_xchan,'post_comments')) {
@@ -431,8 +450,9 @@ function add_source_route($iid, $hash) {
* * \e boolean \b success true or false
* * \e array \b activity the resulting activity if successful
*/
-function post_activity_item($arr, $allow_code = false, $deliver = true) {
+
+function post_activity_item($arr, $allow_code = false, $deliver = true, $channel = null, $observer = null, $addAndSync = true) {
$ret = array('success' => false);
$is_comment = false;
@@ -446,8 +466,13 @@ function post_activity_item($arr, $allow_code = false, $deliver = true) {
if(! array_key_exists('item_thread_top',$arr) && (! $is_comment))
$arr['item_thread_top'] = 1;
- $channel = App::get_channel();
- $observer = App::get_observer();
+ if (!$channel) {
+ $channel = App::get_channel();
+ }
+
+ if (!$observer) {
+ $observer = App::get_observer();
+ }
$arr['aid'] = ((x($arr,'aid')) ? $arr['aid'] : $channel['channel_account_id']);
$arr['uid'] = ((x($arr,'uid')) ? $arr['uid'] : $channel['channel_id']);
@@ -493,6 +518,14 @@ function post_activity_item($arr, $allow_code = false, $deliver = true) {
$arr['plink'] = $arr['mid'];
}
+ if (!$arr['target']) {
+ $arr['target'] = [
+ 'id' => str_replace('/item/', '/conversation/', $arr['parent_mid']),
+ 'type' => 'Collection',
+ 'attributedTo' => z_root() . '/channel/' . $channel['channel_address'],
+ ];
+ $arr['tgt_type'] = 'Collection';
+ }
// for the benefit of plugins, we will behave as if this is an API call rather than a normal online post
@@ -509,29 +542,30 @@ function post_activity_item($arr, $allow_code = false, $deliver = true) {
return $ret;
}
- $post = item_store($arr,$allow_code,$deliver);
+ $post = item_store($arr, $allow_code, $deliver, $addAndSync);
- if($post['success']) {
- $post_id = $post['item_id'];
- $ret['success'] = true;
- $ret['item_id'] = $post_id;
- $ret['activity'] = $post['item'];
-
- /**
- * @hooks post_local_end
- * Called after a local post operation has completed.
- * * \e array - the item returned from item_store()
- */
- call_hooks('post_local_end', $ret['activity']);
- }
- else
+ if (!$post['success']) {
return $ret;
-
- if($post_id && $deliver) {
- Master::Summon(['Notifier','activity', $post_id]);
}
+ $post_id = $post['item_id'];
$ret['success'] = true;
+ $ret['item_id'] = $post_id;
+ $ret['activity'] = $post['item'];
+
+ /**
+ * @hooks post_local_end
+ * Called after a local post operation has completed.
+ * * \e array - the item returned from item_store()
+ */
+ call_hooks('post_local_end', $ret['activity']);
+
+ if($post_id && $deliver) {
+ Master::Summon(['Notifier', 'activity', $post_id]);
+ if (!empty($post['approval_id'])) {
+ Master::Summon(['Notifier', 'activity', $post['approval_id']]);
+ }
+ }
return $ret;
}
@@ -1594,7 +1628,7 @@ function item_json_encapsulate($arr, $k) {
* * \e boolean \b success
* * \e int \b item_id
*/
-function item_store($arr, $allow_exec = false, $deliver = true) {
+function item_store($arr, $allow_exec = false, $deliver = true, $addAndSync = true) {
$d = [
'item' => $arr,
@@ -1776,16 +1810,6 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
if((! array_key_exists('item_nocomment',$arr)) && ($arr['comment_policy'] == 'none'))
$arr['item_nocomment'] = 1;
- // handle time travelers
- // Allow a bit of fudge in case somebody just has a slightly slow/fast clock
-
- $d1 = new DateTime('now +10 minutes', new DateTimeZone('UTC'));
- $d2 = new DateTime($arr['created'] . '+00:00');
-
- if($d2 > $d1) {
- $arr['item_delayed'] = 1;
- }
-
if(empty($arr['llink'])) {
$arr['llink'] = z_root() . '/display/' . $arr['uuid'];
}
@@ -1827,7 +1851,7 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
);
}
- if(comments_are_now_closed($r[0])) {
+ if(comments_are_now_closed($r[0]) && !in_array($arr['verb'], ['Add', 'Remove'])) {
logger('item_store: comments closed');
$ret['message'] = 'Comments closed.';
return $ret;
@@ -1882,7 +1906,7 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
$arr['item_private'] = 0;
if(in_array($arr['obj_type'], ['Note','Answer']) && $r[0]['obj_type'] === 'Question' && intval($r[0]['item_wall'])) {
- Activity::update_poll($r[0]['id'], $arr);
+ Activity::update_poll($r[0], $arr);
}
}
@@ -2052,6 +2076,13 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
Master::Summon([ 'Cache_embeds', $current_post ]);
}
+ $ret['success'] = true;
+ $ret['item_id'] = $current_post;
+
+ if ($addAndSync) {
+ $ret = addToCollectionAndSync($ret);
+ }
+
// If _creating_ a deleted item, don't propagate it further or send out notifications.
// We need to store the item details just in case the delete came in before the original post,
// so that we have an item in the DB that's marked deleted and won't store a fresh post
@@ -2062,9 +2093,6 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
tag_deliver($arr['uid'],$current_post);
}
- $ret['success'] = true;
- $ret['item_id'] = $current_post;
-
return $ret;
}
@@ -2077,7 +2105,7 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
* @param boolean $deliver (optional) default true
* @return array
*/
-function item_store_update($arr, $allow_exec = false, $deliver = true) {
+function item_store_update($arr, $allow_exec = false, $deliver = true, $addAndSync = true) {
$d = [
'item' => $arr,
@@ -2211,7 +2239,7 @@ function item_store_update($arr, $allow_exec = false, $deliver = true) {
$arr['revision'] = ((x($arr,'revision') && $arr['revision'] > 0) ? intval($arr['revision']) : 0);
- if(array_key_exists('comments_closed',$arr) && $arr['comments_closed'] > NULL_DATE)
+ if(array_key_exists('comments_closed',$arr))
$arr['comments_closed'] = datetime_convert('UTC','UTC',$arr['comments_closed']);
else
$arr['comments_closed'] = $orig[0]['comments_closed'];
@@ -2390,17 +2418,19 @@ function item_store_update($arr, $allow_exec = false, $deliver = true) {
Master::Summon([ 'Cache_embeds', $orig_post_id ]);
}
+ $ret['success'] = true;
+ $ret['item_id'] = $orig_post_id;
-
+ if ($addAndSync) {
+ $ret = addToCollectionAndSync($ret);
+ }
if($deliver) {
- send_status_notifications($orig_post_id,$arr);
+ // don't send notify_comment for edits
+ // send_status_notifications($orig_post_id,$arr);
tag_deliver($uid,$orig_post_id);
}
- $ret['success'] = true;
- $ret['item_id'] = $orig_post_id;
-
return $ret;
}
@@ -3101,6 +3131,11 @@ function i_am_mentioned($channel, $item, $check_groups = false) {
*/
function start_delivery_chain($channel, $item, $item_id, $parent, $group = false, $edit = false) {
+ if ($item['author_xchan'] === $channel['channel_hash'] && in_array($item['verb'], ['Add', 'Remove'])) {
+ logger('delivery chain already started');
+ return;
+ }
+
$sourced = check_item_source($channel['channel_id'],$item);
if($sourced) {
@@ -3146,17 +3181,113 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
$item['parent_mid'] = $item['mid'];
$item['thr_parent'] = $item['mid'];
$item['llink'] = z_root() . '/display/' . $item['uuid'];
+ $item['target'] = json_encode([
+ 'id' => str_replace('/item/', '/conversation/', $item['mid']),
+ 'type' => 'Collection',
+ 'attributedTo' => z_root() . '/channel/' . $channel['channel_address']
+ ]);
+ $item['tgt_type'] = 'Collection';
}
+ }
- $r = q("UPDATE item SET author_xchan = '%s', mid = '%s', parent_mid = '%s', thr_parent = '%s', llink = '%s' WHERE id = %d",
- dbesc($item['author_xchan']),
- dbesc($item['mid']),
- dbesc($item['parent_mid']),
- dbesc($item['thr_parent']),
- dbesc($item['llink']),
+ $private = (($channel['channel_allow_cid'] || $channel['channel_allow_gid']
+ || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 1 : 0);
+
+ $new_public_policy = map_scope(PermissionLimits::Get($channel['channel_id'],'view_stream'),true);
+
+ if((! $private) && $new_public_policy)
+ $private = 1;
+
+ $item_wall = 1;
+ $item_origin = (($item['item_deleted']) ? 0 : 1); // item_origin for deleted items is set to 0 in delete_imported_item() to prevent looping. In this case we probably should not set it back to 1 here.
+ $item_uplink = 0;
+ $item_nocomment = 0;
+
+ $flag_bits = $item['item_flags'];
+
+ // maintain the original source, which will be the original item owner and was stored in source_xchan
+ // when we created the delivery fork
+
+ if($parent) {
+ $r = q("update item set source_xchan = '%s' where id = %d",
+ dbesc($parent['source_xchan']),
intval($item_id)
);
}
+ else {
+ $item_uplink = (($item['item_rss']) ? 0 : 1); // Do not set item_uplink for rss items - we can not send anything to them.
+
+ // if this is an edit, item_store_update() will have already updated the item
+ // with the correct value for source_xchan (by ignoring it). We cannot set to owner_xchan
+ // in this case because owner_xchan will point to the parent of this chain
+ // and not the original sender.
+
+ if(!$edit) {
+ $r = q("update item set source_xchan = owner_xchan where id = %d",
+ intval($item_id)
+ );
+ }
+ }
+
+ // this will not work with item_store_update()
+
+ $r = q("update item set item_uplink = %d, item_nocomment = %d, item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s',
+ deny_cid = '%s', deny_gid = '%s', item_private = %d, public_policy = '%s', comment_policy = '%s', title = '%s', body = '%s', item_wall = %d, item_origin = %d,
+ author_xchan = '%s', mid = '%s', parent_mid = '%s', thr_parent = '%s', llink = '%s', target = '%s', tgt_type = '%s' where id = %d",
+ intval($item_uplink),
+ intval($item_nocomment),
+ intval($flag_bits),
+ dbesc($channel['channel_hash']),
+ dbesc($channel['channel_allow_cid']),
+ dbesc($channel['channel_allow_gid']),
+ dbesc($channel['channel_deny_cid']),
+ dbesc($channel['channel_deny_gid']),
+ intval($private),
+ dbesc($new_public_policy),
+ dbesc(map_scope(PermissionLimits::Get($channel['channel_id'],'post_comments'))),
+ dbesc($item['title']),
+ dbesc($item['body']),
+ intval($item_wall),
+ intval($item_origin),
+ dbesc($item['author_xchan']),
+ dbesc($item['mid']),
+ dbesc($item['parent_mid']),
+ dbesc($item['thr_parent']),
+ dbesc($item['llink']),
+ dbesc($item['target']),
+ dbesc($item['tgt_type']),
+ intval($item_id)
+ );
+
+ if($r) {
+ $rr = q("select * from item where id = %d",
+ intval($item_id)
+ );
+
+ if ($rr) {
+
+ // this is hackish but since we can not use item_store_update() here,
+ // we will prepare a similar output to feed to addToCollectionAndSync()
+ $ret['success'] = 1;
+ $ret['item_id'] = $rr[0]['id'];
+ $ret['item'] = $rr[0];
+
+ $result = addToCollectionAndSync($ret);
+
+ Master::Summon(['Notifier', 'tgroup', $result['item_id']]);
+ if ($result['approval_id']) {
+ Master::Summon(['Notifier', 'tgroup', $result['approval_id']]);
+ }
+ }
+ }
+ else {
+ logger('start_delivery_chain: failed to update item');
+ // reset the source xchan to prevent loops
+ $r = q("update item set source_xchan = '' where id = %d",
+ intval($item_id)
+ );
+ }
+ return;
}
if ($group && (! $parent)) {
@@ -3178,8 +3309,8 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
if ($r) {
if (intval($item['item_deleted'])) {
- drop_item($r[0]['id'], false, DROPITEM_PHASE1);
- Master::Summon([ 'Notifier', 'drop', $r[0]['id'] ]);
+ drop_item($r[0]['id'], DROPITEM_PHASE1, uid: $r[0]['uid']);
+ Master::Summon(['Notifier', 'drop' ,$r[0]['id']]);
return;
}
$arr['id'] = intval($r[0]['id']);
@@ -3197,10 +3328,13 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
}
else {
// To prevent duplicates from possible clones of the forum/group,
- // will create a v5 UUID of the source item mid.
- $arr['uuid'] = uuid_from_url($item['mid']);
+ // we will create a v5 UUID of the source item mid.
+ // Add some extra entropy to prevent duplicate UUIDs with items where we already
+ // created an UUID from the mid (activities which do not provide an UUID field).
+ $arr['uuid'] = uuid_from_url($item['mid'] . '#group_item');
$arr['mid'] = z_root() . '/item/' . $arr['uuid'];
$arr['parent_mid'] = $arr['mid'];
+ $arr['plink'] = $arr['mid'];
}
$arr['aid'] = $channel['channel_account_id'];
@@ -3261,8 +3395,15 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
}
$arr['title'] = $item['title'];
- $arr['tgt_type'] = $item['tgt_type'];
- $arr['target'] = $item['target'];
+// $arr['tgt_type'] = $item['tgt_type'];
+// $arr['target'] = $item['target'];
+
+ $arr['tgt_type'] = 'Collection';
+ $arr['target'] = [
+ 'id' => str_replace('/item/', '/conversation/', $arr['parent_mid']),
+ 'type' => 'Collection',
+ 'attributedTo' => channel_url($channel['channel_address'])
+ ];
$arr['term'] = $item['term'];
@@ -3285,10 +3426,14 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
$post = item_store($arr);
}
- $post_id = $post['item_id'];
+ $post_id = $post['item_id'] ?? 0;
+ $approval_id = $post['approval_id'] ?? 0;
if($post_id) {
Master::Summon([ 'Notifier','tgroup',$post_id ]);
+ if ($approval_id) {
+ Master::Summon(['Notifier', 'tgroup', $approval_id]);
+ }
}
return;
}
@@ -3313,14 +3458,14 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
if ($edit) {
if (intval($item['item_deleted'])) {
- drop_item($item['id'],false,DROPITEM_PHASE1);
- Master::Summon([ 'Notifier','drop',$item['id'] ]);
+ drop_item($item['id'], DROPITEM_PHASE1, uid: $item['uid']);
+ Master::Summon(['Notifier', 'drop', $item['id']]);
return;
}
return;
}
else {
- $arr['uuid'] = item_message_id();
+ $arr['uuid'] = uuid_from_url($item['mid']);
$arr['mid'] = z_root() . '/activity/' . $arr['uuid'];
$arr['parent_mid'] = $item['parent_mid'];
//IConfig::Set($arr,'activitypub','context', str_replace('/item/','/conversation/',$item['parent_mid']));
@@ -3364,12 +3509,12 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
$arr['deny_gid'] = $channel['channel_deny_gid'];
$arr['comment_policy'] = map_scope(PermissionLimits::Get($channel['channel_id'],'post_comments'));
- $post = item_store($arr);
- $post_id = $post['item_id'];
+ $post = item_store($arr, deliver: false, addAndSync: false);
+ $post_id = $post['item_id'] ?? 0;
- if ($post_id) {
- Master::Summon([ 'Notifier','tgroup',$post_id ]);
- }
+ if ($post_id) {
+ Master::Summon(['Notifier', 'tgroup', $post_id]);
+ }
q("update channel set channel_lastpost = '%s' where channel_id = %d",
dbesc(datetime_convert()),
@@ -3379,81 +3524,6 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false
return;
}
-
- // Change this copy of the post to a forum head message and deliver to all the tgroup members
- // also reset all the privacy bits to the forum default permissions
-
- $private = (($channel['channel_allow_cid'] || $channel['channel_allow_gid']
- || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 1 : 0);
-
- $new_public_policy = map_scope(PermissionLimits::Get($channel['channel_id'],'view_stream'),true);
-
- if((! $private) && $new_public_policy)
- $private = 1;
-
- $item_wall = 1;
- $item_origin = (($item['item_deleted']) ? 0 : 1); // item_origin for deleted items is set to 0 in delete_imported_item() to prevent looping. In this case we probably should not set it back to 1 here.
- $item_uplink = 0;
- $item_nocomment = 0;
-
- $flag_bits = $item['item_flags'];
-
- // maintain the original source, which will be the original item owner and was stored in source_xchan
- // when we created the delivery fork
-
- if($parent) {
- $r = q("update item set source_xchan = '%s' where id = %d",
- dbesc($parent['source_xchan']),
- intval($item_id)
- );
- }
- else {
- $item_uplink = (($item['item_rss']) ? 0 : 1); // Do not set item_uplink for rss items - we can not send anything to them.
-
- // if this is an edit, item_store_update() will have already updated the item
- // with the correct value for source_xchan (by ignoring it). We cannot set to owner_xchan
- // in this case because owner_xchan will point to the parent of this chain
- // and not the original sender.
-
- if(! $edit) {
- $r = q("update item set source_xchan = owner_xchan where id = %d",
- intval($item_id)
- );
- }
- }
-
- $title = $item['title'];
- $body = $item['body'];
-
- $r = q("update item set item_uplink = %d, item_nocomment = %d, item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s',
- deny_cid = '%s', deny_gid = '%s', item_private = %d, public_policy = '%s', comment_policy = '%s', title = '%s', body = '%s', item_wall = %d, item_origin = %d where id = %d",
- intval($item_uplink),
- intval($item_nocomment),
- intval($flag_bits),
- dbesc($channel['channel_hash']),
- dbesc($channel['channel_allow_cid']),
- dbesc($channel['channel_allow_gid']),
- dbesc($channel['channel_deny_cid']),
- dbesc($channel['channel_deny_gid']),
- intval($private),
- dbesc($new_public_policy),
- dbesc(map_scope(PermissionLimits::Get($channel['channel_id'],'post_comments'))),
- dbesc($title),
- dbesc($body),
- intval($item_wall),
- intval($item_origin),
- intval($item_id)
- );
-
- if($r)
- Master::Summon([ 'Notifier','tgroup',$item_id ]);
- else {
- logger('start_delivery_chain: failed to update item');
- // reset the source xchan to prevent loops
- $r = q("update item set source_xchan = '' where id = %d",
- intval($item_id)
- );
- }
}
/**
@@ -3792,7 +3862,7 @@ function item_expire($uid,$days,$comment_days = 7) {
if ($r) {
foreach ($r as $item) {
- drop_item($item['id'], false);
+ drop_item($item['id'], uid: $uid);
}
}
@@ -3805,25 +3875,12 @@ function retain_item($id) {
);
}
-function drop_items($items,$interactive = false,$stage = DROPITEM_NORMAL) {
- $uid = 0;
-
- if(! local_channel() && ! remote_channel())
- return;
-
- if(count($items)) {
+function drop_items($items, $stage = DROPITEM_NORMAL, $force = false, $expire = false) {
+ if ($items) {
foreach($items as $item) {
- $owner = drop_item($item,$interactive,$stage);
- if($owner && ! $uid)
- $uid = $owner;
+ drop_item($item, $stage, $force, expire: $expire);
}
}
-
- // multiple threads may have been deleted, send an expire notification
-
- if($uid) {
- Master::Summon([ 'Notifier','expire',$uid ]);
- }
}
@@ -3836,7 +3893,7 @@ function drop_items($items,$interactive = false,$stage = DROPITEM_NORMAL) {
// $stage = 1 => set deleted flag on the item and perform intial notifications
// $stage = 2 => perform low level delete at a later stage
-function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
+function drop_item($id, $stage = DROPITEM_NORMAL, $force = false, $uid = 0, $observer_hash = '', $expire = false, $recurse = false) {
// locate item to be deleted
@@ -3844,33 +3901,48 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
intval($id)
);
- if((! $r) || (intval($r[0]['item_deleted']) && ($stage === DROPITEM_NORMAL))) {
- if(! $interactive)
- return 0;
- notice( t('Item not found.') . EOL);
- //goaway(z_root() . '/' . $_SESSION['return_url']);
+ if(!$r || (intval($r[0]['item_deleted']) && $stage === DROPITEM_NORMAL)) {
+ return false;
}
$item = $r[0];
- $ok_to_delete = false;
+ if(!$recurse) {
+ drop_related($item, $stage, $force, $uid, $observer_hash, $expire);
+ }
- // system deletion
- if(! $interactive)
- $ok_to_delete = true;
+ $ok_to_delete = false;
// admin deletion
- if(is_site_admin())
+ if(is_site_admin()) {
$ok_to_delete = true;
+ }
// owner deletion
- if(local_channel() && local_channel() == $item['uid'])
+ if(local_channel() && local_channel() == $item['uid']) {
+ $ok_to_delete = true;
+ }
+
+ // remote delete when nobody is authenticated (called from Libzot and Daemons)
+ if ($uid && intval($uid) === intval($item['uid'])) {
$ok_to_delete = true;
+ }
// author deletion
- $observer = App::get_observer();
- if($observer && $observer['xchan_hash'] && ($observer['xchan_hash'] === $item['author_xchan']))
+ if ($observer_hash) {
+ $observer = ['xchan_hash' => $observer_hash];
+ }
+ else {
+ $observer = App::get_observer();
+ }
+
+ if (isset($observer['xchan_hash']) && $observer['xchan_hash'] === $item['author_xchan']) {
$ok_to_delete = true;
+ }
+
+ if (isset($observer['xchan_hash']) && $observer['xchan_hash'] === $item['owner_xchan']) {
+ $ok_to_delete = true;
+ }
if($ok_to_delete) {
@@ -3883,9 +3955,9 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
$arr = [
'item' => $item,
- 'interactive' => $interactive,
'stage' => $stage
];
+
/**
* @hooks drop_item
* Called when an 'item' is removed.
@@ -3908,30 +3980,95 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
delete_item_lowlevel($item, $stage);
}
- if(! $interactive)
- return 1;
+ return true;
+ }
+ else {
+ return false;
+ }
+}
- // send the notification upstream/downstream as the case may be
- // only send notifications to others if this is the owner's wall item.
- // This isn't optimal. We somehow need to pass to this function whether or not
- // to call the notifier, or we need to call the notifier from the calling function.
- // We'll rely on the undocumented behaviour that DROPITEM_PHASE1 is (hopefully) only
- // set if we know we're going to send delete notifications out to others.
+// If somebody deletes a 'Create' activity, find any associated 'Add/Collection'
+// activity and delete it. And vice versa.
- if((intval($item['item_wall']) && ($stage != DROPITEM_PHASE2)) || ($stage == DROPITEM_PHASE1)) {
- Master::Summon([ 'Notifier','drop',$notify_id ]);
+function drop_related($item, $stage = DROPITEM_NORMAL, $force = false, $uid = 0, $observer_hash = '', $expire = false, $recurse = false) {
+ $allRelated = q("select * from item where parent_mid = '%s' and uid = %d",
+ dbesc($item['parent_mid']),
+ intval($item['uid'])
+ );
+ if (! $allRelated) {
+ return;
+ }
+ if ($item['verb'] === 'Add' && $item['tgt_type'] === 'Collection') {
+ if (is_array($item['obj'])) {
+ $thisItem = $item['obj'];
+ }
+ else {
+ $thisItem = json_decode($item['obj'], true);
+ }
+ if (isset($thisItem['object']['id'])) {
+ $targetMid = $thisItem['object']['id'];
+ }
+ if (!$targetMid) {
+ return;
+ }
+ foreach ($allRelated as $related) {
+ if ($related['mid'] === $targetMid) {
+ drop_item($related['id'], $stage, $force, $uid, $observer_hash, $expire, recurse: true);
+ break;
+ }
}
- //goaway(z_root() . '/' . $_SESSION['return_url']);
}
else {
- if(! $interactive)
- return 0;
- notice( t('Permission denied.') . EOL);
- //goaway(z_root() . '/' . $_SESSION['return_url']);
+ foreach ($allRelated as $related) {
+ if ($related['verb'] === 'Add' && str_contains($related['tgt_type'], 'Collection')) {
+ $thisItem = json_decode($related['obj'], true);
+ if (isset($thisItem['id']) && $thisItem['id'] === str_replace('/item/', '/activity/', $item['mid'])) {
+ drop_item($related['id'], $stage, $force, $uid, $observer_hash, $expire, recurse: true);
+ break;
+ }
+ }
+ }
}
}
+
+function find_related($item) {
+ $allRelated = q("select * from item where parent_mid = '%s' and uid = %d",
+ dbesc($item['parent_mid']),
+ intval($item['uid'])
+ );
+ if (! $allRelated) {
+ return false;
+ }
+ if ($item['verb'] === 'Add' && $item['tgt_type'] === 'Collection') {
+ $thisItem = json_decode($item['obj'],true);
+ if (is_array($thisItem)) {
+ $targetMid = $thisItem['object']['id'];
+ }
+ if (!$targetMid) {
+ return false;
+ }
+ foreach ($allRelated as $related) {
+ if ($related['mid'] === $targetMid) {
+ return $related;
+ }
+ }
+ }
+ else {
+ foreach ($allRelated as $related) {
+ if ($related['verb'] === 'Add' && str_contains($related['tgt_type'], 'Collection')) {
+ $thisItem = json_decode($related['obj'], true);
+ if (isset($thisItem['object']['id']) && $thisItem['object']['id'] === $item['mid']) {
+ return $related;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+
/**
* @warning This function does not check for permission and does not send
* notifications and does not check recursion.
@@ -5094,7 +5231,7 @@ function fix_attached_permissions($uid, $body, $str_contact_allow, $str_group_al
* which will allow you to interact with it.
*/
-function copy_of_pubitem($channel,$mid) {
+function copy_of_pubitem($channel, $mid) {
$result = null;
$syschan = get_sys_channel();
@@ -5130,9 +5267,10 @@ function copy_of_pubitem($channel,$mid) {
$rv['item_wall'] = 0;
$rv['item_origin'] = 0;
- $x = item_store($rv);
+ $x = item_store($rv, deliver: false, addAndSync: false);
if($x['item_id'] && $x['item']['mid'] === $mid) {
$result = $x['item'];
+ sync_an_item($channel['channel_id'], $x['item_id']);
}
}
@@ -5140,3 +5278,75 @@ function copy_of_pubitem($channel,$mid) {
return $result;
}
+
+function addToCollectionAndSync($ret) {
+ if (!$ret['success']) {
+ return $ret;
+ }
+
+ $channel = channelx_by_n($ret['item']['uid']);
+ if ($channel && $channel['channel_hash'] === $ret['item']['owner_xchan']) {
+ $items = [$ret['item']];
+
+ if ((int)$items[0]['item_blocked'] === ITEM_MODERATED
+ || (int)$items[0]['item_unpublished'] || (int)$items[0]['item_delayed']) {
+ return $ret;
+ }
+
+ xchan_query($items);
+ // TODO: fetch_post_tags() will add term and iconfig twice if called twice and it looks like they are already added here
+ // $items = fetch_post_tags($items);
+ $sync_items = [];
+ $sync_items[] = encode_item($items[0], true);
+
+ if (!in_array($ret['item']['verb'], ['Add', 'Remove'])) {
+ $activity = Activity::encode_activity($items[0]);
+
+ if (!$activity) {
+ return $ret;
+ }
+
+ $new_obj = Activity::build_packet($activity, $channel, false);
+ $approval = Activity::addToCollection($channel, $new_obj, $ret['item']['parent_mid'], $ret['item'], deliver: false);
+
+ if ($approval['success']) {
+ $ret['approval_id'] = $approval['item_id'];
+ $ret['approval'] = $approval['activity'];
+ $add_items = [$approval['activity']];
+ xchan_query($add_items);
+ $add_items = fetch_post_tags($add_items);
+ $sync_items[] = encode_item($add_items[0], true);
+ }
+ }
+
+ $resource_type = $ret['item']['resource_type'];
+
+ if ($resource_type === 'event') {
+ $z = q("select * from event where event_hash = '%s' and uid = %d limit 1",
+ dbesc($ret['item']['resource_id']),
+ intval($channel['channel_id'])
+ );
+
+ if ($z) {
+ Libsync::build_sync_packet($channel['channel_id'], ['event_item' => $sync_items, 'event' => $z]);
+ }
+ }
+ elseif ($resource_type === 'photo') {
+ // reserved for future use, currently handled in the photo upload workflow
+ }
+ else {
+ Libsync::build_sync_packet($ret['item']['uid'], ['item' => $sync_items]);
+ }
+ }
+
+ return $ret;
+}
+
+function reverse_activity_mid($string) {
+ return str_replace(z_root() . '/activity/', z_root() . '/item/', $string);
+}
+
+function set_activity_mid($string) {
+ return str_replace(z_root() . '/item/', z_root() . '/activity/', $string);
+}
+
diff --git a/include/js_strings.php b/include/js_strings.php
index 0142bad28..b41c34508 100644
--- a/include/js_strings.php
+++ b/include/js_strings.php
@@ -49,29 +49,6 @@ function js_strings() {
'months' => tt('%d months', '%d months', '%d'),
'years' => tt('%d years', '%d years', '%d'),
- // get plural function code
- 'plural_func' => tf(),
-
- '$t01' => ((t('timeago.prefixAgo') == 'timeago.prefixAgo') ? '' : ((t('timeago.prefixAgo') == 'NONE') ? '' : t('timeago.prefixAgo'))),
- '$t02' => ((t('timeago.prefixFromNow') == 'timeago.prefixFromNow') ? '' : ((t('timeago.prefixFromNow') == 'NONE') ? '' : t('timeago.prefixFromNow'))),
- '$t03' => ((t('timeago.suffixAgo') == 'timeago.suffixAgo') ? 'ago' : ((t('timeago.suffixAgo') == 'NONE') ? '' : t('timeago.suffixAgo'))),
- '$t04' => ((t('timeago.suffixFromNow') == 'timeago.suffixFromNow') ? 'from now' : ((t('timeago.suffixFromNow') == 'NONE') ? '' : t('timeago.suffixFromNow'))),
-
- // translatable main strings for jquery.timeago
- '$t05' => t('less than a minute'),
- '$t06' => t('about a minute'),
- '$t07' => ta('%d minutes'),
- '$t08' => t('about an hour'),
- '$t09' => ta('about %d hours'),
- '$t10' => t('a day'),
- '$t11' => ta('%d days'),
- '$t12' => t('about a month'),
- '$t13' => ta('%d months'),
- '$t14' => t('about a year'),
- '$t15' => ta('%d years'),
- '$t16' => t(' '), // wordSeparator
- '$t17' => ((t('timeago.numbers') != 'timeago.numbers') ? t('timeago.numbers') : '[]'),
-
'$January' => t('January'),
'$February' => t('February'),
'$March' => t('March'),
diff --git a/include/nav.php b/include/nav.php
index f8cd6101f..1bee5a2db 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -1,8 +1,8 @@
<?php /** @file */
-use \Zotlabs\Lib\Apps;
-use \Zotlabs\Lib\Chatroom;
-use \Zotlabs\Lib\Config;
+use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Chatroom;
+use Zotlabs\Lib\Config;
require_once('include/security.php');
require_once('include/menu.php');
diff --git a/include/network.php b/include/network.php
index b3a3d715c..55eecac84 100644
--- a/include/network.php
+++ b/include/network.php
@@ -2,6 +2,7 @@
use Zotlabs\Lib\Activity;
use Zotlabs\Lib\Config;
+use Zotlabs\Lib\Mailer;
use Zotlabs\Lib\Zotfinger;
use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Queue;
@@ -612,7 +613,7 @@ function validate_email(string $addr): bool {
$matches = array();
$result = preg_match(
- '/^[A-Z0-9._%-]+@([A-Z0-9.-]+\.[A-Z0-9-]{2,})$/i',
+ '/^[A-Z0-9._%+-]+@([A-Z0-9.-]+\.[A-Z0-9-]{2,})$/i',
punify($addr),
$matches);
@@ -1488,11 +1489,11 @@ function do_delivery($deliveries, $force = false) {
$interval = Config::Get('queueworker', 'queue_interval', 500000);
- $deliveries_per_process = intval(Config::Get('system','delivery_batch_count'));
+ $deliveries_per_process = intval(Config::Get('system', 'delivery_batch_count'));
- if($deliveries_per_process <= 0)
+ if($deliveries_per_process <= 0) {
$deliveries_per_process = 1;
-
+ }
$deliver = [];
foreach($deliveries as $d) {
@@ -1813,54 +1814,9 @@ function network_to_name($s) {
*/
function z_mail($params) {
- if(! $params['fromEmail']) {
- $params['fromEmail'] = Config::Get('system','from_email');
- if(! $params['fromEmail'])
- $params['fromEmail'] = 'Administrator' . '@' . App::get_hostname();
- }
- if(! $params['fromName']) {
- $params['fromName'] = Config::Get('system','from_email_name');
- if(! $params['fromName'])
- $params['fromName'] = Zotlabs\Lib\System::get_site_name();
- }
- if(! $params['replyTo']) {
- $params['replyTo'] = Config::Get('system','reply_address');
- if(! $params['replyTo'])
- $params['replyTo'] = 'noreply' . '@' . App::get_hostname();
- }
-
- $params['sent'] = false;
- $params['result'] = false;
-
- /**
- * @hooks email_send
- * * \e params @see z_mail()
- */
- call_hooks('email_send', $params);
-
- if($params['sent']) {
- logger('notification: z_mail returns ' . (($params['result']) ? 'success' : 'failure'), LOGGER_DEBUG);
- return $params['result'];
- }
-
- $fromName = email_header_encode(html_entity_decode($params['fromName'],ENT_QUOTES,'UTF-8'),'UTF-8');
- $messageSubject = email_header_encode(html_entity_decode($params['messageSubject'],ENT_QUOTES,'UTF-8'),'UTF-8');
-
- $messageHeader =
- $params['additionalMailHeader'] .
- "From: $fromName <{$params['fromEmail']}>" . PHP_EOL .
- "Reply-To: $fromName <{$params['replyTo']}>" . PHP_EOL .
- "Content-Type: text/plain; charset=UTF-8";
-
- // send the message
- $res = mail(
- $params['toEmail'], // send to address
- $messageSubject, // subject
- $params['textVersion'],
- $messageHeader // message headers
- );
- logger('notification: z_mail returns ' . (($res) ? 'success' : 'failure'), LOGGER_DEBUG);
- return $res;
+ // Delegate the call to the Mailer class.
+ $mailer = new Mailer($params);
+ return $mailer->deliver();
}
@@ -2145,21 +2101,59 @@ function get_request_string($url) {
/**
- * Builds a url from the result of `parse_url`.
+ * Reconstructs a URL from its parsed components.
+ *
+ * This function takes a parsed URL as an associative array and reconstructs
+ * the URL based on the specified components (scheme, host, port, user, pass, path, query, fragment).
+ * You can specify which components should be included in the final URL by passing the optional
+ * `$parts` array. The function will return the complete URL string formed by combining
+ * only the parts that exist in both the parsed URL and the `$parts` array.
+ *
+ * @param array $parsed_url The parsed URL components as an associative array.
+ * The array can include keys like 'scheme', 'host', 'port', 'user', 'pass',
+ * 'path', 'query', 'fragment'.
*
- * @param array $parsed_url An associative array as produced by `parse_url`.
+ * @param array $parts An optional array that specifies which components of the URL
+ * should be included in the final string. Defaults to:
+ * ['scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment'].
+ * If any of the components are not required, they can be omitted from the array.
*
- * @return string The reassembled URL as a string.
+ * @return string The reconstructed URL as a string.
*/
-function unparse_url(array $parsed_url): string {
- $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
- $host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
- $port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
- $user = isset($parsed_url['user']) ? $parsed_url['user'] : '';
- $pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : '';
- $pass = ($user || $pass) ? "$pass@" : '';
- $path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
- $query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
- $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
- return $scheme . $user . $pass . $host . $port . $path . $query . $fragment;
+function unparse_url(array $parsed_url, array $parts = ['scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment']): string {
+ $url_parts = [];
+
+ if (in_array('scheme', $parts) && array_key_exists('scheme', $parsed_url)) {
+ $url_parts[] = $parsed_url['scheme'] . '://';
+ }
+
+ if (in_array('user', $parts) && array_key_exists('user', $parsed_url)) {
+ $url_parts[] = $parsed_url['user'];
+ if (in_array('pass', $parts) && array_key_exists('pass', $parsed_url)) {
+ $url_parts[] = ':' . $parsed_url['pass'];
+ }
+ $url_parts[] = '@';
+ }
+
+ if (in_array('host', $parts) && array_key_exists('host', $parsed_url)) {
+ $url_parts[] = $parsed_url['host'];
+ }
+
+ if (in_array('port', $parts) && array_key_exists('port', $parsed_url)) {
+ $url_parts[] = ':' . $parsed_url['port'];
+ }
+
+ if (in_array('path', $parts) && array_key_exists('path', $parsed_url)) {
+ $url_parts[] = $parsed_url['path'];
+ }
+
+ if (in_array('query', $parts) && array_key_exists('query', $parsed_url)) {
+ $url_parts[] = '?' . $parsed_url['query'];
+ }
+
+ if (in_array('fragment', $parts) && array_key_exists('fragment', $parsed_url)) {
+ $url_parts[] = '#' . $parsed_url['fragment'];
+ }
+
+ return implode('', $url_parts);
}
diff --git a/include/oembed.php b/include/oembed.php
index f52f73225..840164663 100644
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -143,6 +143,10 @@ function oembed_fetch_url($embedurl){
$furl = ((local_channel() && $zrl) ? zid($embedurl) : $embedurl);
+ if (empty($furl)) {
+ return;
+ }
+
if($action !== 'block' && (! Config::Get('system','oembed_cache_disable'))) {
$txt = Cache::get('[' . App::$videowidth . '] ' . $furl);
}
diff --git a/include/permissions.php b/include/permissions.php
index be6fc8594..29d242537 100644
--- a/include/permissions.php
+++ b/include/permissions.php
@@ -408,7 +408,7 @@ function get_all_api_perms($uid,$api) {
$arr = array(
'channel_id' => $uid,
- 'observer_hash' => $observer_xchan,
+ 'observer_hash' => null, //$observer_xchan,
'permissions' => $ret);
call_hooks('get_all_api_perms',$arr);
@@ -422,7 +422,7 @@ function api_perm_is_allowed($uid,$api,$permission) {
$arr = array(
'channel_id' => $uid,
- 'observer_hash' => $observer_xchan,
+ 'observer_hash' => null, //$observer_xchan,
'permission' => $permission,
'result' => false
);
diff --git a/include/photos.php b/include/photos.php
index 85c97d1fd..a9f92e103 100644
--- a/include/photos.php
+++ b/include/photos.php
@@ -7,6 +7,7 @@
use Zotlabs\Access\PermissionLimits;
use Zotlabs\Lib\Activity;
use Zotlabs\Lib\Config;
+use Zotlabs\Daemon\Master;
require_once('include/permissions.php');
require_once('include/items.php');
@@ -405,7 +406,7 @@ function photo_upload($channel, $observer, $args) {
}
}
- $attribution = (($visitor) ? $visitor : $channel['xchan_url']);
+ $attribution = (($visitor) ? $visitor : channel_url($channel));
//// Create item object
$object = [
@@ -438,13 +439,13 @@ function photo_upload($channel, $observer, $args) {
else {
$object['to'] = Activity::map_acl(array_merge($ac, ['item_private' => 1 - intval($public)]));
}
-
+/*
$target = [
'type' => 'orderedCollection',
'name' => ((strlen($album)) ? $album : '/'),
'id' => z_root() . '/album/' . $channel['channel_address'] . ((isset($args['directory']['hash'])) ? '/' . $args['directory']['hash'] : EMPTY_STR)
];
-
+*/
// Create item container
if (isset($args['item'])) {
foreach ($args['item'] as $i) {
@@ -453,6 +454,11 @@ function photo_upload($channel, $observer, $args) {
$force = false;
if ($item['mid'] === $item['parent_mid']) {
+ $target = [
+ 'id' => str_replace('/item/', '/conversation/', $item['mid']),
+ 'type' => 'Collection',
+ 'attributedTo' => $attribution,
+ ];
$item['body'] = $summary;
$item['mimetype'] = 'text/bbcode';
@@ -460,10 +466,10 @@ function photo_upload($channel, $observer, $args) {
$object['id'] = $item['mid'];
$object['diaspora:guid'] = $item['uuid'];
- $item['obj'] = json_encode($object);
+ $item['obj'] = $object;
- $item['tgt_type'] = 'orderedCollection';
- $item['target'] = json_encode($target);
+ $item['tgt_type'] = 'Collection';
+ $item['target'] = $target;
if ($post_tags) {
$arr['term'] = $post_tags;
}
@@ -477,15 +483,23 @@ function photo_upload($channel, $observer, $args) {
if (($item['edited'] > $r[0]['edited']) || $force) {
$item['id'] = $r[0]['id'];
$item['uid'] = $channel['channel_id'];
- item_store_update($item, false, $deliver);
+ $result = item_store_update($item, deliver: $deliver);
continue;
}
}
else {
$item['aid'] = $channel['channel_account_id'];
$item['uid'] = $channel['channel_id'];
- item_store($item, false, $deliver);
+ $result = item_store($item, deliver: $deliver);
}
+
+ if ($result['success'] && $visible && $deliver) {
+ Master::Summon(['Notifier', 'wall-new', $result['item_id']]);
+ if (!empty($result['approval_id'])) {
+ Master::Summon(['Notifier', 'wall-new', $result['approval_id']]);
+ }
+ }
+
}
}
else {
@@ -496,6 +510,12 @@ function photo_upload($channel, $observer, $args) {
$object['id'] = $mid;
$object['diaspora:guid'] = $uuid;
+ $target = [
+ 'id' => z_root() . '/conversation/' . $uuid,
+ 'type' => 'Collection',
+ 'attributedTo' => $attribution,
+ ];
+
$arr = [
'aid' => $account_id,
'uid' => $channel_id,
@@ -514,9 +534,9 @@ function photo_upload($channel, $observer, $args) {
'deny_gid' => $ac['deny_gid'],
'verb' => 'Create',
'obj_type' => 'Image',
- 'obj' => json_encode($object),
- 'tgt_type' => 'orderedCollection',
- 'target' => json_encode($target),
+ 'obj' => $object,
+ 'tgt_type' => 'Collection',
+ 'target' => $target,
'item_wall' => $visible,
'item_origin' => 1,
'item_thread_top' => 1,
@@ -541,21 +561,26 @@ function photo_upload($channel, $observer, $args) {
// linked item from leaking into the feed when somebody has a channel with read_stream restrictions.
$arr['public_policy'] = map_scope(PermissionLimits::Get($channel['channel_id'], 'view_stream'), true);
- if ($arr['public_policy'])
+
+ if ($arr['public_policy']) {
$arr['item_private'] = 1;
+ }
- $result = item_store($arr, false, $deliver);
- $item_id = $result['item_id'];
+ $result = item_store($arr, deliver: $deliver);
- if ($visible && $deliver)
- Zotlabs\Daemon\Master::Summon(['Notifier', 'wall-new', $item_id]);
+ if ($result['success'] && $visible && $deliver) {
+ Master::Summon(['Notifier', 'wall-new', $result['item_id']]);
+ if (!empty($result['approval_id'])) {
+ Master::Summon(['Notifier', 'wall-new', $result['approval_id']]);
+ }
+ }
}
$ret['success'] = true;
$ret['item'] = $arr;
$ret['body'] = $obj_body;
$ret['resource_id'] = $photo_hash;
- $ret['photoitem_id'] = $item_id;
+ $ret['photoitem_id'] = $result['item_id'];
/**
* @hooks photo_upload_end
@@ -911,7 +936,7 @@ function photos_create_item($channel, $creator_hash, $photo, $visible = false) {
. '[zmg]' . z_root() . '/photo/' . $photo['resource_id'] . '-' . $photo['imgscale'] . '[/zmg]'
. '[/zrl]';
- $result = item_store($arr);
+ $result = item_store($arr, deliver: false, addAndSync: true);
$item_id = $result['item_id'];
return $item_id;
diff --git a/include/plugin.php b/include/plugin.php
index 62b643c3e..b5f9959b9 100644
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -987,12 +987,13 @@ function format_css_if_exists($source) {
}
} else {
// It's a file from the theme
- $path = theme_include($script);
+ $theme_include = theme_include($script);
+ $path = (($theme_include) ? '/' . $theme_include : '');
}
if($path) {
$qstring = ((parse_url($path, PHP_URL_QUERY)) ? '&' : '?') . 'v=' . STD_VERSION;
- return '<link rel="stylesheet" href="' . $path_prefix . '/' . $path . $qstring . '" type="text/css" media="' . $source[1] . '">' . "\r\n";
+ return '<link rel="stylesheet" href="' . $path_prefix . $path . $qstring . '" type="text/css" media="' . $source[1] . '">' . "\r\n";
}
}
@@ -1059,11 +1060,12 @@ function format_js_if_exists($source) {
}
else {
// It's a file from the theme
- $path = theme_include($source);
+ $theme_include = theme_include($source);
+ $path = (($theme_include) ? '/' . $theme_include : '');
}
if($path) {
$qstring = ((parse_url($path, PHP_URL_QUERY)) ? '&' : '?') . 'v=' . STD_VERSION;
- return '<script src="' . $path_prefix . '/' . $path . $qstring . '" ></script>' . "\r\n" ;
+ return '<script src="' . $path_prefix . $path . $qstring . '"></script>' . "\r\n" ;
}
}
diff --git a/include/text.php b/include/text.php
index e69ce7d10..7692a6f3e 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1145,7 +1145,7 @@ function chanlink_cid($d) {
function magiclink_url($observer,$myaddr,$url) {
return (($observer)
- ? z_root() . '/magic?f=&owa=1&bdest=' . bin2hex($url) . '&addr=' . $myaddr
+ ? z_root() . '/magic?owa=1&bdest=' . bin2hex($url) . '&addr=' . $myaddr
: $url
);
}
@@ -1579,15 +1579,13 @@ function theme_attachments(&$item) {
$title = t('Size') . ' ' . (isset($r['length']) ? userReadableSize($r['length']) : t('unknown'));
- $revision = $r['revision'] ?? '';
-
require_once('include/channel.php');
if (isset($r['href'])) {
if(is_foreigner($item['author_xchan']))
$url = $r['href'];
else
- $url = z_root() . '/magic?f=&owa=1&hash=' . $item['author_xchan'] . '&bdest=' . bin2hex($r['href'] . '/' . $revision);
+ $url = z_root() . '/magic?owa=1&bdest=' . bin2hex($r['href']);
}
if (isset($label) && isset($url) && isset($icon) && isset($title)) {
@@ -2004,7 +2002,7 @@ function format_poll($item,$s,$opts) {
$message .= t('Poll has ended');
}
else {
- $message .= sprintf(t('Poll ends in %s'), '<span class="autotime" title="' . $t . '"></span>');
+ $message .= sprintf(t('Poll ends %s'), '<span class="autotime" title="' . $t . '"></span>');
}
}
@@ -2639,13 +2637,13 @@ function xchan_query(&$items, $abook = true, $effective_uid = 0) {
if(count($arr)) {
if($abook) {
$chans = q("select * from xchan left join hubloc on hubloc_hash = xchan_hash left join abook on abook_xchan = xchan_hash and abook_channel = %d
- where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_deleted = 0 order by hubloc_primary desc",
+ where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") order by hubloc_primary desc, hubloc_deleted ASC",
intval($item['uid'])
);
}
else {
$chans = q("select xchan.*,hubloc.* from xchan left join hubloc on hubloc_hash = xchan_hash
- where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_deleted = 0 order by hubloc_primary desc");
+ where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") order by hubloc_primary desc, hubloc_deleted ASC");
}
$xchans = q("select * from xchan where xchan_hash in (" . protect_sprintf(implode(',',$arr)) . ") and xchan_network in ('rss','unknown', 'anon', 'token')");
if(! $chans)
@@ -3208,7 +3206,7 @@ function getIconFromType($type) {
//Common file
'application/octet-stream' => 'bi-file-earmark',
//Text
- 'text/plain' => 'bi-earmark-text',
+ 'text/plain' => 'bi-file-earmark-text',
'text/markdown' => 'bi-filetype-md',
'text/bbcode' => 'bi-file-earmark-text',
'text/html' => 'bi-filetype-html',
@@ -3843,7 +3841,7 @@ function featured_sort($a,$b) {
function unpunify($s) {
- if (function_exists('idn_to_utf8') && isset($s)) {
+ if (function_exists('idn_to_utf8') && !empty($s)) {
return idn_to_utf8($s);
}
return $s;
@@ -3851,7 +3849,7 @@ function unpunify($s) {
function punify($s) {
- if (function_exists('idn_to_ascii') && isset($s)) {
+ if (function_exists('idn_to_ascii') && !empty($s)) {
return idn_to_ascii($s);
}
return $s;
diff --git a/include/xchan.php b/include/xchan.php
index b8677c8c4..c492a77dc 100644
--- a/include/xchan.php
+++ b/include/xchan.php
@@ -217,6 +217,10 @@ function xchan_keychange_acl($table,$column,$oldxchan,$newxchan) {
function xchan_change_key($oldx,$newx,$data) {
+ // TODO: this will need a refactor to eliminate duplicate keys
+ // E.G. item => [author_xchan, owner_xchan, source_kchan]
+ // Also: add a test!
+
$tables = [
'abook' => 'abook_xchan',
'abconfig' => 'xchan',
@@ -227,8 +231,6 @@ function xchan_change_key($oldx,$newx,$data) {
'item' => 'owner_xchan',
'item' => 'author_xchan',
'item' => 'source_xchan',
- 'mail' => 'from_xchan',
- 'mail' => 'to_xchan',
'shares' => 'share_xchan',
'source' => 'src_channel_xchan',
'source' => 'src_xchan',
diff --git a/include/zid.php b/include/zid.php
index 159a3b834..b74e82930 100644
--- a/include/zid.php
+++ b/include/zid.php
@@ -150,6 +150,9 @@ function clean_query_string($s = '') {
*/
function drop_query_params($s, $p) {
+
+ $s = unescape_tags($s);
+
$parsed = parse_url($s);
$query = '';
$query_args = null;
@@ -172,7 +175,7 @@ function drop_query_params($s, $p) {
$parsed['query'] = $query;
}
- return unparse_url($parsed);
+ return escape_tags(unparse_url($parsed));
}
@@ -261,25 +264,25 @@ function zidify_text($s) {
*/
function red_zrl_callback($matches) {
- // Catch and exclude trailing punctuation
- preg_match("/[.,;:!?)]*$/i", $matches[2], $pts);
- $matches[2] = substr($matches[2], 0, strlen($matches[2])-strlen($pts[0]));
+ // Catch and exclude trailing punctuation
+ preg_match("/[.,;:!?)]*$/i", $matches[2], $pts);
+ $matches[2] = substr($matches[2], 0, strlen($matches[2])-strlen($pts[0]));
- $zrl = is_matrix_url($matches[2]);
+ $zrl = is_matrix_url($matches[2]);
- $t = strip_zids($matches[2]);
- if($t !== $matches[2]) {
- $zrl = true;
- $matches[2] = $t;
- }
+ $t = strip_zids($matches[2]);
+ if($t !== $matches[2]) {
+ $zrl = true;
+ $matches[2] = $t;
+ }
- if($matches[1] === '#^')
- $matches[1] = '';
+ if($matches[1] === '#^')
+ $matches[1] = '';
- if($zrl)
- return $matches[1] . '#^[zrl=' . $matches[2] . ']' . $matches[2] . '[/zrl]' . $pts[0];
+ if($zrl)
+ return $matches[1] . '#^[zrl=' . $matches[2] . ']' . $matches[2] . '[/zrl]' . $pts[0];
- return $matches[1] . '#^[url=' . $matches[2] . ']' . $matches[2] . '[/url]' . $pts[0];
+ return $matches[1] . '#^[url=' . $matches[2] . ']' . $matches[2] . '[/url]' . $pts[0];
}
/**
diff --git a/library/HTML5/Data.php b/library/HTML5/Data.php
deleted file mode 100644
index fa97e3ee8..000000000
--- a/library/HTML5/Data.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-// warning: this file is encoded in UTF-8!
-
-class HTML5_Data
-{
-
- // at some point this should be moved to a .ser file. Another
- // possible optimization is to give UTF-8 bytes, not Unicode
- // codepoints
- protected static $realCodepointTable = array(
- 0x0D => 0x000A, // LINE FEED (LF)
- 0x80 => 0x20AC, // EURO SIGN ('€')
- 0x81 => 0xFFFD, // REPLACEMENT CHARACTER
- 0x82 => 0x201A, // SINGLE LOW-9 QUOTATION MARK ('‚')
- 0x83 => 0x0192, // LATIN SMALL LETTER F WITH HOOK ('ƒ')
- 0x84 => 0x201E, // DOUBLE LOW-9 QUOTATION MARK ('„')
- 0x85 => 0x2026, // HORIZONTAL ELLIPSIS ('…')
- 0x86 => 0x2020, // DAGGER ('†')
- 0x87 => 0x2021, // DOUBLE DAGGER ('‡')
- 0x88 => 0x02C6, // MODIFIER LETTER CIRCUMFLEX ACCENT ('ˆ')
- 0x89 => 0x2030, // PER MILLE SIGN ('‰')
- 0x8A => 0x0160, // LATIN CAPITAL LETTER S WITH CARON ('Š')
- 0x8B => 0x2039, // SINGLE LEFT-POINTING ANGLE QUOTATION MARK ('‹')
- 0x8C => 0x0152, // LATIN CAPITAL LIGATURE OE ('Œ')
- 0x8D => 0xFFFD, // REPLACEMENT CHARACTER
- 0x8E => 0x017D, // LATIN CAPITAL LETTER Z WITH CARON ('Ž')
- 0x8F => 0xFFFD, // REPLACEMENT CHARACTER
- 0x90 => 0xFFFD, // REPLACEMENT CHARACTER
- 0x91 => 0x2018, // LEFT SINGLE QUOTATION MARK ('‘')
- 0x92 => 0x2019, // RIGHT SINGLE QUOTATION MARK ('’')
- 0x93 => 0x201C, // LEFT DOUBLE QUOTATION MARK ('“')
- 0x94 => 0x201D, // RIGHT DOUBLE QUOTATION MARK ('”')
- 0x95 => 0x2022, // BULLET ('•')
- 0x96 => 0x2013, // EN DASH ('–')
- 0x97 => 0x2014, // EM DASH ('—')
- 0x98 => 0x02DC, // SMALL TILDE ('˜')
- 0x99 => 0x2122, // TRADE MARK SIGN ('™')
- 0x9A => 0x0161, // LATIN SMALL LETTER S WITH CARON ('š')
- 0x9B => 0x203A, // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK ('›')
- 0x9C => 0x0153, // LATIN SMALL LIGATURE OE ('œ')
- 0x9D => 0xFFFD, // REPLACEMENT CHARACTER
- 0x9E => 0x017E, // LATIN SMALL LETTER Z WITH CARON ('ž')
- 0x9F => 0x0178, // LATIN CAPITAL LETTER Y WITH DIAERESIS ('Ÿ')
- );
-
- protected static $namedCharacterReferences;
-
- protected static $namedCharacterReferenceMaxLength;
-
- /**
- * Returns the "real" Unicode codepoint of a malformed character
- * reference.
- */
- public static function getRealCodepoint($ref) {
- if (!isset(self::$realCodepointTable[$ref])) return false;
- else return self::$realCodepointTable[$ref];
- }
-
- public static function getNamedCharacterReferences() {
- if (!self::$namedCharacterReferences) {
- self::$namedCharacterReferences = unserialize(
- file_get_contents(dirname(__FILE__) . '/named-character-references.ser'));
- }
- return self::$namedCharacterReferences;
- }
-
- public static function getNamedCharacterReferenceMaxLength() {
- if (!self::$namedCharacterReferenceMaxLength) {
- $namedCharacterReferences = self::getNamedCharacterReferences();
- $lengths = array_map('strlen', array_keys($namedCharacterReferences));
- self::$namedCharacterReferenceMaxLength = max($lengths);
- }
- return self::$namedCharacterReferenceMaxLength;
- }
-
-
- /**
- * Converts a Unicode codepoint to sequence of UTF-8 bytes.
- * @note Shamelessly stolen from HTML Purifier, which is also
- * shamelessly stolen from Feyd (which is in public domain).
- */
- public static function utf8chr($code) {
- if($code > 0x10FFFF or $code < 0x0 or
- ($code >= 0xD800 and $code <= 0xDFFF) ) {
- // bits are set outside the "valid" range as defined
- // by UNICODE 4.1.0
- return "\xEF\xBF\xBD";
- }
-
- $x = $y = $z = $w = 0;
- if ($code < 0x80) {
- // regular ASCII character
- $x = $code;
- } else {
- // set up bits for UTF-8
- $x = ($code & 0x3F) | 0x80;
- if ($code < 0x800) {
- $y = (($code & 0x7FF) >> 6) | 0xC0;
- } else {
- $y = (($code & 0xFC0) >> 6) | 0x80;
- if($code < 0x10000) {
- $z = (($code >> 12) & 0x0F) | 0xE0;
- } else {
- $z = (($code >> 12) & 0x3F) | 0x80;
- $w = (($code >> 18) & 0x07) | 0xF0;
- }
- }
- }
- // set up the actual character
- $ret = '';
- if($w) $ret .= chr($w);
- if($z) $ret .= chr($z);
- if($y) $ret .= chr($y);
- $ret .= chr($x);
-
- return $ret;
- }
-
-}
diff --git a/library/HTML5/InputStream.php b/library/HTML5/InputStream.php
deleted file mode 100644
index f98b42723..000000000
--- a/library/HTML5/InputStream.php
+++ /dev/null
@@ -1,284 +0,0 @@
-<?php
-
-/*
-
-Copyright 2009 Geoffrey Sneddon <http://gsnedders.com/>
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*/
-
-// Some conventions:
-// /* */ indicates verbatim text from the HTML 5 specification
-// // indicates regular comments
-
-class HTML5_InputStream {
- /**
- * The string data we're parsing.
- */
- private $data;
-
- /**
- * The current integer byte position we are in $data
- */
- private $char;
-
- /**
- * Length of $data; when $char === $data, we are at the end-of-file.
- */
- private $EOF;
-
- /**
- * Parse errors.
- */
- public $errors = array();
-
- /**
- * @param $data Data to parse
- */
- public function __construct($data) {
-
- /* Given an encoding, the bytes in the input stream must be
- converted to Unicode characters for the tokeniser, as
- described by the rules for that encoding, except that the
- leading U+FEFF BYTE ORDER MARK character, if any, must not
- be stripped by the encoding layer (it is stripped by the rule below).
-
- Bytes or sequences of bytes in the original byte stream that
- could not be converted to Unicode characters must be converted
- to U+FFFD REPLACEMENT CHARACTER code points. */
-
- // XXX currently assuming input data is UTF-8; once we
- // build encoding detection this will no longer be the case
- //
- // We previously had an mbstring implementation here, but that
- // implementation is heavily non-conforming, so it's been
- // omitted.
- if (extension_loaded('iconv')) {
- // non-conforming
- $data = @iconv('UTF-8', 'UTF-8//IGNORE', $data);
- } else {
- // we can make a conforming native implementation
- throw new Exception('Not implemented, please install mbstring or iconv');
- }
-
- /* One leading U+FEFF BYTE ORDER MARK character must be
- ignored if any are present. */
- if (substr($data, 0, 3) === "\xEF\xBB\xBF") {
- $data = substr($data, 3);
- }
-
- /* All U+0000 NULL characters in the input must be replaced
- by U+FFFD REPLACEMENT CHARACTERs. Any occurrences of such
- characters is a parse error. */
- for ($i = 0, $count = substr_count($data, "\0"); $i < $count; $i++) {
- $this->errors[] = array(
- 'type' => HTML5_Tokenizer::PARSEERROR,
- 'data' => 'null-character'
- );
- }
- /* U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED
- (LF) characters are treated specially. Any CR characters
- that are followed by LF characters must be removed, and any
- CR characters not followed by LF characters must be converted
- to LF characters. Thus, newlines in HTML DOMs are represented
- by LF characters, and there are never any CR characters in the
- input to the tokenization stage. */
- $data = str_replace(
- array(
- "\0",
- "\r\n",
- "\r"
- ),
- array(
- "\xEF\xBF\xBD",
- "\n",
- "\n"
- ),
- $data
- );
-
- /* Any occurrences of any characters in the ranges U+0001 to
- U+0008, U+000B, U+000E to U+001F, U+007F to U+009F,
- U+D800 to U+DFFF , U+FDD0 to U+FDEF, and
- characters U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF,
- U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE,
- U+6FFFF, U+7FFFE, U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF,
- U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF, U+DFFFE,
- U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, and
- U+10FFFF are parse errors. (These are all control characters
- or permanently undefined Unicode characters.) */
- // Check PCRE is loaded.
- if (extension_loaded('pcre')) {
- $count = preg_match_all(
- '/(?:
- [\x01-\x08\x0B\x0E-\x1F\x7F] # U+0001 to U+0008, U+000B, U+000E to U+001F and U+007F
- |
- \xC2[\x80-\x9F] # U+0080 to U+009F
- |
- \xED(?:\xA0[\x80-\xFF]|[\xA1-\xBE][\x00-\xFF]|\xBF[\x00-\xBF]) # U+D800 to U+DFFFF
- |
- \xEF\xB7[\x90-\xAF] # U+FDD0 to U+FDEF
- |
- \xEF\xBF[\xBE\xBF] # U+FFFE and U+FFFF
- |
- [\xF0-\xF4][\x8F-\xBF]\xBF[\xBE\xBF] # U+nFFFE and U+nFFFF (1 <= n <= 10_{16})
- )/x',
- $data,
- $matches
- );
- for ($i = 0; $i < $count; $i++) {
- $this->errors[] = array(
- 'type' => HTML5_Tokenizer::PARSEERROR,
- 'data' => 'invalid-codepoint'
- );
- }
- } else {
- // XXX: Need non-PCRE impl, probably using substr_count
- }
-
- $this->data = $data;
- $this->char = 0;
- $this->EOF = strlen($data);
- }
-
- /**
- * Returns the current line that the tokenizer is at.
- */
- public function getCurrentLine() {
- // Check the string isn't empty
- if($this->EOF) {
- // Add one to $this->char because we want the number for the next
- // byte to be processed.
- return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1;
- } else {
- // If the string is empty, we are on the first line (sorta).
- return 1;
- }
- }
-
- /**
- * Returns the current column of the current line that the tokenizer is at.
- */
- public function getColumnOffset() {
- // strrpos is weird, and the offset needs to be negative for what we
- // want (i.e., the last \n before $this->char). This needs to not have
- // one (to make it point to the next character, the one we want the
- // position of) added to it because strrpos's behaviour includes the
- // final offset byte.
- $lastLine = strrpos($this->data, "\n", $this->char - 1 - strlen($this->data));
-
- // However, for here we want the length up until the next byte to be
- // processed, so add one to the current byte ($this->char).
- if($lastLine !== false) {
- $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine);
- } else {
- $findLengthOf = substr($this->data, 0, $this->char);
- }
-
- // Get the length for the string we need.
- if(extension_loaded('iconv')) {
- return iconv_strlen($findLengthOf, 'utf-8');
- } elseif(extension_loaded('mbstring')) {
- return mb_strlen($findLengthOf, 'utf-8');
- } elseif(extension_loaded('xml')) {
- return strlen(utf8_decode($findLengthOf));
- } else {
- $count = count_chars($findLengthOf);
- // 0x80 = 0x7F - 0 + 1 (one added to get inclusive range)
- // 0x33 = 0xF4 - 0x2C + 1 (one added to get inclusive range)
- return array_sum(array_slice($count, 0, 0x80)) +
- array_sum(array_slice($count, 0xC2, 0x33));
- }
- }
-
- /**
- * Retrieve the currently consume character.
- * @note This performs bounds checking
- */
- public function char() {
- return ($this->char++ < $this->EOF)
- ? $this->data[$this->char - 1]
- : false;
- }
-
- /**
- * Get all characters until EOF.
- * @note This performs bounds checking
- */
- public function remainingChars() {
- if($this->char < $this->EOF) {
- $data = substr($this->data, $this->char);
- $this->char = $this->EOF;
- return $data;
- } else {
- return false;
- }
- }
-
- /**
- * Matches as far as possible until we reach a certain set of bytes
- * and returns the matched substring.
- * @param $bytes Bytes to match.
- */
- public function charsUntil($bytes, $max = null) {
- if ($this->char < $this->EOF) {
- if ($max === 0 || $max) {
- $len = strcspn($this->data, $bytes, $this->char, $max);
- } else {
- $len = strcspn($this->data, $bytes, $this->char);
- }
- $string = (string) substr($this->data, $this->char, $len);
- $this->char += $len;
- return $string;
- } else {
- return false;
- }
- }
-
- /**
- * Matches as far as possible with a certain set of bytes
- * and returns the matched substring.
- * @param $bytes Bytes to match.
- */
- public function charsWhile($bytes, $max = null) {
- if ($this->char < $this->EOF) {
- if ($max === 0 || $max) {
- $len = strspn($this->data, $bytes, $this->char, $max);
- } else {
- $len = strspn($this->data, $bytes, $this->char);
- }
- $string = (string) substr($this->data, $this->char, $len);
- $this->char += $len;
- return $string;
- } else {
- return false;
- }
- }
-
- /**
- * Unconsume one character.
- */
- public function unget() {
- if ($this->char <= $this->EOF) {
- $this->char--;
- }
- }
-}
diff --git a/library/HTML5/Parser.php b/library/HTML5/Parser.php
deleted file mode 100644
index 5f9ca560e..000000000
--- a/library/HTML5/Parser.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-require_once dirname(__FILE__) . '/Data.php';
-require_once dirname(__FILE__) . '/InputStream.php';
-require_once dirname(__FILE__) . '/TreeBuilder.php';
-require_once dirname(__FILE__) . '/Tokenizer.php';
-
-/**
- * Outwards facing interface for HTML5.
- */
-class HTML5_Parser
-{
- /**
- * Parses a full HTML document.
- * @param $text HTML text to parse
- * @param $builder Custom builder implementation
- * @return Parsed HTML as DOMDocument
- */
- static public function parse($text, $builder = null) {
- $tokenizer = new HTML5_Tokenizer($text, $builder);
- $tokenizer->parse();
- return $tokenizer->save();
- }
- /**
- * Parses an HTML fragment.
- * @param $text HTML text to parse
- * @param $context String name of context element to pretend parsing is in.
- * @param $builder Custom builder implementation
- * @return Parsed HTML as DOMDocument
- */
- static public function parseFragment($text, $context = null, $builder = null) {
- $tokenizer = new HTML5_Tokenizer($text, $builder);
- $tokenizer->parseFragment($context);
- return $tokenizer->save();
- }
-}
diff --git a/library/HTML5/Tokenizer.php b/library/HTML5/Tokenizer.php
deleted file mode 100644
index 06c73065f..000000000
--- a/library/HTML5/Tokenizer.php
+++ /dev/null
@@ -1,2307 +0,0 @@
-<?php
-
-/*
-
-Copyright 2007 Jeroen van der Meer <http://jero.net/>
-Copyright 2008 Edward Z. Yang <http://htmlpurifier.org/>
-Copyright 2009 Geoffrey Sneddon <http://gsnedders.com/>
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*/
-
-// Some conventions:
-// /* */ indicates verbatim text from the HTML 5 specification
-// // indicates regular comments
-
-// all flags are in hyphenated form
-
-class HTML5_Tokenizer {
- /**
- * Points to an InputStream object.
- */
- protected $stream;
-
- /**
- * Tree builder that the tokenizer emits token to.
- */
- private $tree;
-
- /**
- * Current content model we are parsing as.
- */
- protected $content_model;
-
- /**
- * Current token that is being built, but not yet emitted. Also
- * is the last token emitted, if applicable.
- */
- protected $token;
-
- // These are constants describing the content model
- const PCDATA = 0;
- const RCDATA = 1;
- const CDATA = 2;
- const PLAINTEXT = 3;
-
- // These are constants describing tokens
- // XXX should probably be moved somewhere else, probably the
- // HTML5 class.
- const DOCTYPE = 0;
- const STARTTAG = 1;
- const ENDTAG = 2;
- const COMMENT = 3;
- const CHARACTER = 4;
- const SPACECHARACTER = 5;
- const EOF = 6;
- const PARSEERROR = 7;
-
- // These are constants representing bunches of characters.
- const ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
- const UPPER_ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- const LOWER_ALPHA = 'abcdefghijklmnopqrstuvwxyz';
- const DIGIT = '0123456789';
- const HEX = '0123456789ABCDEFabcdef';
- const WHITESPACE = "\t\n\x0c ";
-
- /**
- * @param $data Data to parse
- */
- public function __construct($data, $builder = null) {
- $this->stream = new HTML5_InputStream($data);
- if (!$builder) $this->tree = new HTML5_TreeBuilder;
- $this->content_model = self::PCDATA;
- }
-
- public function parseFragment($context = null) {
- $this->tree->setupContext($context);
- if ($this->tree->content_model) {
- $this->content_model = $this->tree->content_model;
- $this->tree->content_model = null;
- }
- $this->parse();
- }
-
- // XXX maybe convert this into an iterator? regardless, this function
- // and the save function should go into a Parser facade of some sort
- /**
- * Performs the actual parsing of the document.
- */
- public function parse() {
- // Current state
- $state = 'data';
- // This is used to avoid having to have look-behind in the data state.
- $lastFourChars = '';
- /**
- * Escape flag as specified by the HTML5 specification: "used to
- * control the behavior of the tokeniser. It is either true or
- * false, and initially must be set to the false state."
- */
- $escape = false;
- //echo "\n\n";
- while($state !== null) {
-
- /*echo $state . ' ';
- switch ($this->content_model) {
- case self::PCDATA: echo 'PCDATA'; break;
- case self::RCDATA: echo 'RCDATA'; break;
- case self::CDATA: echo 'CDATA'; break;
- case self::PLAINTEXT: echo 'PLAINTEXT'; break;
- }
- if ($escape) echo " escape";
- echo "\n";*/
-
- switch($state) {
- case 'data':
-
- /* Consume the next input character */
- $char = $this->stream->char();
- $lastFourChars .= $char;
- if (strlen($lastFourChars) > 4) $lastFourChars = substr($lastFourChars, -4);
-
- // see below for meaning
- $hyp_cond =
- !$escape &&
- (
- $this->content_model === self::RCDATA ||
- $this->content_model === self::CDATA
- );
- $amp_cond =
- !$escape &&
- (
- $this->content_model === self::PCDATA ||
- $this->content_model === self::RCDATA
- );
- $lt_cond =
- $this->content_model === self::PCDATA ||
- (
- (
- $this->content_model === self::RCDATA ||
- $this->content_model === self::CDATA
- ) &&
- !$escape
- );
- $gt_cond =
- $escape &&
- (
- $this->content_model === self::RCDATA ||
- $this->content_model === self::CDATA
- );
-
- if($char === '&' && $amp_cond) {
- /* U+0026 AMPERSAND (&)
- When the content model flag is set to one of the PCDATA or RCDATA
- states and the escape flag is false: switch to the
- character reference data state. Otherwise: treat it as per
- the "anything else" entry below. */
- $state = 'characterReferenceData';
-
- } elseif(
- $char === '-' &&
- $hyp_cond &&
- $lastFourChars === '<!--'
- ) {
- /*
- U+002D HYPHEN-MINUS (-)
- If the content model flag is set to either the RCDATA state or
- the CDATA state, and the escape flag is false, and there are at
- least three characters before this one in the input stream, and the
- last four characters in the input stream, including this one, are
- U+003C LESS-THAN SIGN, U+0021 EXCLAMATION MARK, U+002D HYPHEN-MINUS,
- and U+002D HYPHEN-MINUS ("<!--"), then set the escape flag to true. */
- $escape = true;
-
- /* In any case, emit the input character as a character token. Stay
- in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => '-'
- ));
- // We do the "any case" part as part of "anything else".
-
- /* U+003C LESS-THAN SIGN (<) */
- } elseif($char === '<' && $lt_cond) {
- /* When the content model flag is set to the PCDATA state: switch
- to the tag open state.
-
- When the content model flag is set to either the RCDATA state or
- the CDATA state and the escape flag is false: switch to the tag
- open state.
-
- Otherwise: treat it as per the "anything else" entry below. */
- $state = 'tagOpen';
-
- /* U+003E GREATER-THAN SIGN (>) */
- } elseif(
- $char === '>' &&
- $gt_cond &&
- substr($lastFourChars, 1) === '-->'
- ) {
- /* If the content model flag is set to either the RCDATA state or
- the CDATA state, and the escape flag is true, and the last three
- characters in the input stream including this one are U+002D
- HYPHEN-MINUS, U+002D HYPHEN-MINUS, U+003E GREATER-THAN SIGN ("-->"),
- set the escape flag to false. */
- $escape = false;
-
- /* In any case, emit the input character as a character token.
- Stay in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => '>'
- ));
- // We do the "any case" part as part of "anything else".
-
- } elseif($char === false) {
- /* EOF
- Emit an end-of-file token. */
- $state = null;
- $this->tree->emitToken(array(
- 'type' => self::EOF
- ));
-
- } elseif($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- // Directly after emitting a token you switch back to the "data
- // state". At that point spaceCharacters are important so they are
- // emitted separately.
- $chars = $this->stream->charsWhile(self::WHITESPACE);
- $this->emitToken(array(
- 'type' => self::SPACECHARACTER,
- 'data' => $char . $chars
- ));
- $lastFourChars .= $chars;
- if (strlen($lastFourChars) > 4) $lastFourChars = substr($lastFourChars, -4);
-
- } else {
- /* Anything else
- THIS IS AN OPTIMIZATION: Get as many character that
- otherwise would also be treated as a character token and emit it
- as a single character token. Stay in the data state. */
-
- $mask = '';
- if ($hyp_cond) $mask .= '-';
- if ($amp_cond) $mask .= '&';
- if ($lt_cond) $mask .= '<';
- if ($gt_cond) $mask .= '>';
-
- if ($mask === '') {
- $chars = $this->stream->remainingChars();
- } else {
- $chars = $this->stream->charsUntil($mask);
- }
-
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => $char . $chars
- ));
-
- $lastFourChars .= $chars;
- if (strlen($lastFourChars) > 4) $lastFourChars = substr($lastFourChars, -4);
-
- $state = 'data';
- }
- break;
-
- case 'characterReferenceData':
- /* (This cannot happen if the content model flag
- is set to the CDATA state.) */
-
- /* Attempt to consume a character reference, with no
- additional allowed character. */
- $entity = $this->consumeCharacterReference();
-
- /* If nothing is returned, emit a U+0026 AMPERSAND
- character token. Otherwise, emit the character token that
- was returned. */
- // This is all done when consuming the character reference.
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => $entity
- ));
-
- /* Finally, switch to the data state. */
- $state = 'data';
- break;
-
- case 'tagOpen':
- $char = $this->stream->char();
-
- switch($this->content_model) {
- case self::RCDATA:
- case self::CDATA:
- /* Consume the next input character. If it is a
- U+002F SOLIDUS (/) character, switch to the close
- tag open state. Otherwise, emit a U+003C LESS-THAN
- SIGN character token and reconsume the current input
- character in the data state. */
- // We consumed above.
-
- if($char === '/') {
- $state = 'closeTagOpen';
-
- } else {
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => '<'
- ));
-
- $this->stream->unget();
-
- $state = 'data';
- }
- break;
-
- case self::PCDATA:
- /* If the content model flag is set to the PCDATA state
- Consume the next input character: */
- // We consumed above.
-
- if($char === '!') {
- /* U+0021 EXCLAMATION MARK (!)
- Switch to the markup declaration open state. */
- $state = 'markupDeclarationOpen';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Switch to the close tag open state. */
- $state = 'closeTagOpen';
-
- } elseif('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z
- Create a new start tag token, set its tag name to the lowercase
- version of the input character (add 0x0020 to the character's code
- point), then switch to the tag name state. (Don't emit the token
- yet; further details will be filled in before it is emitted.) */
- $this->token = array(
- 'name' => strtolower($char),
- 'type' => self::STARTTAG,
- 'attr' => array()
- );
-
- $state = 'tagName';
-
- } elseif('a' <= $char && $char <= 'z') {
- /* U+0061 LATIN SMALL LETTER A through to U+007A LATIN SMALL LETTER Z
- Create a new start tag token, set its tag name to the input
- character, then switch to the tag name state. (Don't emit
- the token yet; further details will be filled in before it
- is emitted.) */
- $this->token = array(
- 'name' => $char,
- 'type' => self::STARTTAG,
- 'attr' => array()
- );
-
- $state = 'tagName';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Emit a U+003C LESS-THAN SIGN character token and a
- U+003E GREATER-THAN SIGN character token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-tag-name-but-got-right-bracket'
- ));
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => '<>'
- ));
-
- $state = 'data';
-
- } elseif($char === '?') {
- /* U+003F QUESTION MARK (?)
- Parse error. Switch to the bogus comment state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-tag-name-but-got-question-mark'
- ));
- $this->token = array(
- 'data' => '?',
- 'type' => self::COMMENT
- );
- $state = 'bogusComment';
-
- } else {
- /* Anything else
- Parse error. Emit a U+003C LESS-THAN SIGN character token and
- reconsume the current input character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-tag-name'
- ));
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => '<'
- ));
-
- $state = 'data';
- $this->stream->unget();
- }
- break;
- }
- break;
-
- case 'closeTagOpen':
- if (
- $this->content_model === self::RCDATA ||
- $this->content_model === self::CDATA
- ) {
- /* If the content model flag is set to the RCDATA or CDATA
- states... */
- $name = strtolower($this->stream->charsWhile(self::ALPHA));
- $following = $this->stream->char();
- $this->stream->unget();
- if (
- !$this->token ||
- $this->token['name'] !== $name ||
- $this->token['name'] === $name && !in_array($following, array("\x09", "\x0A", "\x0C", "\x20", "\x3E", "\x2F", false))
- ) {
- /* if no start tag token has ever been emitted by this instance
- of the tokenizer (fragment case), or, if the next few
- characters do not match the tag name of the last start tag
- token emitted (compared in an ASCII case-insensitive manner),
- or if they do but they are not immediately followed by one of
- the following characters:
-
- * U+0009 CHARACTER TABULATION
- * U+000A LINE FEED (LF)
- * U+000C FORM FEED (FF)
- * U+0020 SPACE
- * U+003E GREATER-THAN SIGN (>)
- * U+002F SOLIDUS (/)
- * EOF
-
- ...then emit a U+003C LESS-THAN SIGN character token, a
- U+002F SOLIDUS character token, and switch to the data
- state to process the next input character. */
- // XXX: Probably ought to replace in_array with $following === x ||...
-
- // We also need to emit $name now we've consumed that, as we
- // know it'll just be emitted as a character token.
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => '</' . $name
- ));
-
- $state = 'data';
- } else {
- // This matches what would happen if we actually did the
- // otherwise below (but we can't because we've consumed too
- // much).
-
- // Start the end tag token with the name we already have.
- $this->token = array(
- 'name' => $name,
- 'type' => self::ENDTAG
- );
-
- // Change to tag name state.
- $state = 'tagName';
- }
- } elseif ($this->content_model === self::PCDATA) {
- /* Otherwise, if the content model flag is set to the PCDATA
- state [...]: */
- $char = $this->stream->char();
-
- if ('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z
- Create a new end tag token, set its tag name to the lowercase version
- of the input character (add 0x0020 to the character's code point), then
- switch to the tag name state. (Don't emit the token yet; further details
- will be filled in before it is emitted.) */
- $this->token = array(
- 'name' => strtolower($char),
- 'type' => self::ENDTAG
- );
-
- $state = 'tagName';
-
- } elseif ('a' <= $char && $char <= 'z') {
- /* U+0061 LATIN SMALL LETTER A through to U+007A LATIN SMALL LETTER Z
- Create a new end tag token, set its tag name to the
- input character, then switch to the tag name state.
- (Don't emit the token yet; further details will be
- filled in before it is emitted.) */
- $this->token = array(
- 'name' => $char,
- 'type' => self::ENDTAG
- );
-
- $state = 'tagName';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-closing-tag-but-got-right-bracket'
- ));
- $state = 'data';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit a U+003C LESS-THAN SIGN character token and a U+002F
- SOLIDUS character token. Reconsume the EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-closing-tag-but-got-eof'
- ));
- $this->emitToken(array(
- 'type' => self::CHARACTER,
- 'data' => '</'
- ));
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Parse error. Switch to the bogus comment state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-closing-tag-but-got-char'
- ));
- $this->token = array(
- 'data' => $char,
- 'type' => self::COMMENT
- );
- $state = 'bogusComment';
- }
- }
- break;
-
- case 'tagName':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the before attribute name state. */
- $state = 'beforeAttributeName';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Switch to the self-closing start tag state. */
- $state = 'selfClosingStartTag';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN CAPITAL LETTER A through to U+005A LATIN CAPITAL LETTER Z
- Append the lowercase version of the current input
- character (add 0x0020 to the character's code point) to
- the current tag token's tag name. Stay in the tag name state. */
- $chars = $this->stream->charsWhile(self::UPPER_ALPHA);
-
- $this->token['name'] .= strtolower($char . $chars);
- $state = 'tagName';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-tag-name'
- ));
- $this->emitToken($this->token);
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current tag token's tag name.
- Stay in the tag name state. */
- $chars = $this->stream->charsUntil("\t\n\x0C />" . self::UPPER_ALPHA);
-
- $this->token['name'] .= $char . $chars;
- $state = 'tagName';
- }
- break;
-
- case 'beforeAttributeName':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- // this conditional is optimized, check bottom
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before attribute name state. */
- $state = 'beforeAttributeName';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Switch to the self-closing start tag state. */
- $state = 'selfClosingStartTag';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN CAPITAL LETTER A through to U+005A LATIN CAPITAL LETTER Z
- Start a new attribute in the current tag token. Set that
- attribute's name to the lowercase version of the current
- input character (add 0x0020 to the character's code
- point), and its value to the empty string. Switch to the
- attribute name state.*/
- $this->token['attr'][] = array(
- 'name' => strtolower($char),
- 'value' => ''
- );
-
- $state = 'attributeName';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-attribute-name-but-got-eof'
- ));
- $this->emitToken($this->token);
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* U+0022 QUOTATION MARK (")
- U+0027 APOSTROPHE (')
- U+003D EQUALS SIGN (=)
- Parse error. Treat it as per the "anything else" entry
- below. */
- if($char === '"' || $char === "'" || $char === '=') {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'invalid-character-in-attribute-name'
- ));
- }
-
- /* Anything else
- Start a new attribute in the current tag token. Set that attribute's
- name to the current input character, and its value to the empty string.
- Switch to the attribute name state. */
- $this->token['attr'][] = array(
- 'name' => $char,
- 'value' => ''
- );
-
- $state = 'attributeName';
- }
- break;
-
- case 'attributeName':
- // Consume the next input character:
- $char = $this->stream->char();
-
- // this conditional is optimized, check bottom
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the after attribute name state. */
- $state = 'afterAttributeName';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Switch to the self-closing start tag state. */
- $state = 'selfClosingStartTag';
-
- } elseif($char === '=') {
- /* U+003D EQUALS SIGN (=)
- Switch to the before attribute value state. */
- $state = 'beforeAttributeValue';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN CAPITAL LETTER A through to U+005A LATIN CAPITAL LETTER Z
- Append the lowercase version of the current input
- character (add 0x0020 to the character's code point) to
- the current attribute's name. Stay in the attribute name
- state. */
- $chars = $this->stream->charsWhile(self::UPPER_ALPHA);
-
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['name'] .= strtolower($char . $chars);
-
- $state = 'attributeName';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-attribute-name'
- ));
- $this->emitToken($this->token);
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* U+0022 QUOTATION MARK (")
- U+0027 APOSTROPHE (')
- Parse error. Treat it as per the "anything else"
- entry below. */
- if($char === '"' || $char === "'") {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'invalid-character-in-attribute-name'
- ));
- }
-
- /* Anything else
- Append the current input character to the current attribute's name.
- Stay in the attribute name state. */
- $chars = $this->stream->charsUntil("\t\n\x0C /=>\"'" . self::UPPER_ALPHA);
-
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['name'] .= $char . $chars;
-
- $state = 'attributeName';
- }
-
- /* When the user agent leaves the attribute name state
- (and before emitting the tag token, if appropriate), the
- complete attribute's name must be compared to the other
- attributes on the same token; if there is already an
- attribute on the token with the exact same name, then this
- is a parse error and the new attribute must be dropped, along
- with the value that gets associated with it (if any). */
- // this might be implemented in the emitToken method
- break;
-
- case 'afterAttributeName':
- // Consume the next input character:
- $char = $this->stream->char();
-
- // this is an optimized conditional, check the bottom
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the after attribute name state. */
- $state = 'afterAttributeName';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Switch to the self-closing start tag state. */
- $state = 'selfClosingStartTag';
-
- } elseif($char === '=') {
- /* U+003D EQUALS SIGN (=)
- Switch to the before attribute value state. */
- $state = 'beforeAttributeValue';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN CAPITAL LETTER A through to U+005A LATIN CAPITAL LETTER Z
- Start a new attribute in the current tag token. Set that
- attribute's name to the lowercase version of the current
- input character (add 0x0020 to the character's code
- point), and its value to the empty string. Switch to the
- attribute name state. */
- $this->token['attr'][] = array(
- 'name' => strtolower($char),
- 'value' => ''
- );
-
- $state = 'attributeName';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-end-of-tag-but-got-eof'
- ));
- $this->emitToken($this->token);
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* U+0022 QUOTATION MARK (")
- U+0027 APOSTROPHE (')
- Parse error. Treat it as per the "anything else"
- entry below. */
- if($char === '"' || $char === "'") {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'invalid-character-after-attribute-name'
- ));
- }
-
- /* Anything else
- Start a new attribute in the current tag token. Set that attribute's
- name to the current input character, and its value to the empty string.
- Switch to the attribute name state. */
- $this->token['attr'][] = array(
- 'name' => $char,
- 'value' => ''
- );
-
- $state = 'attributeName';
- }
- break;
-
- case 'beforeAttributeValue':
- // Consume the next input character:
- $char = $this->stream->char();
-
- // this is an optimized conditional
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before attribute value state. */
- $state = 'beforeAttributeValue';
-
- } elseif($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Switch to the attribute value (double-quoted) state. */
- $state = 'attributeValueDoubleQuoted';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the attribute value (unquoted) state and reconsume
- this input character. */
- $this->stream->unget();
- $state = 'attributeValueUnquoted';
-
- } elseif($char === '\'') {
- /* U+0027 APOSTROPHE (')
- Switch to the attribute value (single-quoted) state. */
- $state = 'attributeValueSingleQuoted';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Emit the current tag token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-attribute-value-but-got-right-bracket'
- ));
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume
- the character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-attribute-value-but-got-eof'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* U+003D EQUALS SIGN (=)
- Parse error. Treat it as per the "anything else" entry below. */
- if($char === '=') {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'equals-in-unquoted-attribute-value'
- ));
- }
-
- /* Anything else
- Append the current input character to the current attribute's value.
- Switch to the attribute value (unquoted) state. */
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char;
-
- $state = 'attributeValueUnquoted';
- }
- break;
-
- case 'attributeValueDoubleQuoted':
- // Consume the next input character:
- $char = $this->stream->char();
-
- if($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Switch to the after attribute value (quoted) state. */
- $state = 'afterAttributeValueQuoted';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the character reference in attribute value
- state, with the additional allowed character
- being U+0022 QUOTATION MARK ("). */
- $this->characterReferenceInAttributeValue('"');
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the character
- in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-attribute-value-double-quote'
- ));
- $this->emitToken($this->token);
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current attribute's value.
- Stay in the attribute value (double-quoted) state. */
- $chars = $this->stream->charsUntil('"&');
-
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char . $chars;
-
- $state = 'attributeValueDoubleQuoted';
- }
- break;
-
- case 'attributeValueSingleQuoted':
- // Consume the next input character:
- $char = $this->stream->char();
-
- if($char === "'") {
- /* U+0022 QUOTATION MARK (')
- Switch to the after attribute value state. */
- $state = 'afterAttributeValueQuoted';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the entity in attribute value state. */
- $this->characterReferenceInAttributeValue("'");
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the character
- in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-attribute-value-single-quote'
- ));
- $this->emitToken($this->token);
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current attribute's value.
- Stay in the attribute value (single-quoted) state. */
- $chars = $this->stream->charsUntil("'&");
-
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char . $chars;
-
- $state = 'attributeValueSingleQuoted';
- }
- break;
-
- case 'attributeValueUnquoted':
- // Consume the next input character:
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the before attribute name state. */
- $state = 'beforeAttributeName';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the entity in attribute value state. */
- $this->characterReferenceInAttributeValue();
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif ($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume
- the character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-attribute-value-no-quotes'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* U+0022 QUOTATION MARK (")
- U+0027 APOSTROPHE (')
- U+003D EQUALS SIGN (=)
- Parse error. Treat it as per the "anything else"
- entry below. */
- if($char === '"' || $char === "'" || $char === '=') {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-character-in-unquoted-attribute-value'
- ));
- }
-
- /* Anything else
- Append the current input character to the current attribute's value.
- Stay in the attribute value (unquoted) state. */
- $chars = $this->stream->charsUntil("\t\n\x0c &>\"'=");
-
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char . $chars;
-
- $state = 'attributeValueUnquoted';
- }
- break;
-
- case 'afterAttributeValueQuoted':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the before attribute name state. */
- $state = 'beforeAttributeName';
-
- } elseif ($char === '/') {
- /* U+002F SOLIDUS (/)
- Switch to the self-closing start tag state. */
- $state = 'selfClosingStartTag';
-
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif ($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-EOF-after-attribute-value'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Parse error. Reconsume the character in the before attribute
- name state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-character-after-attribute-value'
- ));
- $this->stream->unget();
- $state = 'beforeAttributeName';
- }
- break;
-
- case 'selfClosingStartTag':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Set the self-closing flag of the current tag token.
- Emit the current tag token. Switch to the data state. */
- // not sure if this is the name we want
- $this->token['self-closing'] = true;
- /* When an end tag token is emitted with its self-closing flag set,
- that is a parse error. */
- if ($this->token['type'] === self::ENDTAG) {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'self-closing-end-tag'
- ));
- }
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif ($char === false) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the
- EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-eof-after-self-closing'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Parse error. Reconsume the character in the before attribute name state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-character-after-self-closing'
- ));
- $this->stream->unget();
- $state = 'beforeAttributeName';
- }
- break;
-
- case 'bogusComment':
- /* (This can only happen if the content model flag is set to the PCDATA state.) */
- /* Consume every character up to the first U+003E GREATER-THAN SIGN
- character (>) or the end of the file (EOF), whichever comes first. Emit
- a comment token whose data is the concatenation of all the characters
- starting from and including the character that caused the state machine
- to switch into the bogus comment state, up to and including the last
- consumed character before the U+003E character, if any, or up to the
- end of the file otherwise. (If the comment was started by the end of
- the file (EOF), the token is empty.) */
- $this->token['data'] .= (string) $this->stream->charsUntil('>');
- $this->stream->char();
-
- $this->emitToken($this->token);
-
- /* Switch to the data state. */
- $state = 'data';
- break;
-
- case 'markupDeclarationOpen':
- // Consume for below
- $hyphens = $this->stream->charsWhile('-', 2);
- if ($hyphens === '-') {
- $this->stream->unget();
- }
- if ($hyphens !== '--') {
- $alpha = $this->stream->charsWhile(self::ALPHA, 7);
- }
-
- /* If the next two characters are both U+002D HYPHEN-MINUS (-)
- characters, consume those two characters, create a comment token whose
- data is the empty string, and switch to the comment state. */
- if($hyphens === '--') {
- $state = 'commentStart';
- $this->token = array(
- 'data' => '',
- 'type' => self::COMMENT
- );
-
- /* Otherwise if the next seven characters are a case-insensitive match
- for the word "DOCTYPE", then consume those characters and switch to the
- DOCTYPE state. */
- } elseif(strtoupper($alpha) === 'DOCTYPE') {
- $state = 'doctype';
-
- // XXX not implemented
- /* Otherwise, if the insertion mode is "in foreign content"
- and the current node is not an element in the HTML namespace
- and the next seven characters are an ASCII case-sensitive
- match for the string "[CDATA[" (the five uppercase letters
- "CDATA" with a U+005B LEFT SQUARE BRACKET character before
- and after), then consume those characters and switch to the
- CDATA section state (which is unrelated to the content model
- flag's CDATA state). */
-
- /* Otherwise, is is a parse error. Switch to the bogus comment state.
- The next character that is consumed, if any, is the first character
- that will be in the comment. */
- } else {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-dashes-or-doctype'
- ));
- $this->token = array(
- 'data' => (string) $alpha,
- 'type' => self::COMMENT
- );
- $state = 'bogusComment';
- }
- break;
-
- case 'commentStart':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if ($char === '-') {
- /* U+002D HYPHEN-MINUS (-)
- Switch to the comment start dash state. */
- $state = 'commentStartDash';
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Emit the comment token. Switch to the
- data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'incorrect-comment'
- ));
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* EOF
- Parse error. Emit the comment token. Reconsume the
- EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-comment'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Anything else
- Append the input character to the comment token's
- data. Switch to the comment state. */
- $this->token['data'] .= $char;
- $state = 'comment';
- }
- break;
-
- case 'commentStartDash':
- /* Consume the next input character: */
- $char = $this->stream->char();
- if ($char === '-') {
- /* U+002D HYPHEN-MINUS (-)
- Switch to the comment end state */
- $state = 'commentEnd';
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Emit the comment token. Switch to the
- data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'incorrect-comment'
- ));
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* Parse error. Emit the comment token. Reconsume the
- EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-comment'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- $this->token['data'] .= '-' . $char;
- $state = 'comment';
- }
- break;
-
- case 'comment':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === '-') {
- /* U+002D HYPHEN-MINUS (-)
- Switch to the comment end dash state */
- $state = 'commentEndDash';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the comment token. Reconsume the EOF character
- in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-comment'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Append the input character to the comment token's data. Stay in
- the comment state. */
- $chars = $this->stream->charsUntil('-');
-
- $this->token['data'] .= $char . $chars;
- }
- break;
-
- case 'commentEndDash':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === '-') {
- /* U+002D HYPHEN-MINUS (-)
- Switch to the comment end state */
- $state = 'commentEnd';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the comment token. Reconsume the EOF character
- in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-comment-end-dash'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Append a U+002D HYPHEN-MINUS (-) character and the input
- character to the comment token's data. Switch to the comment state. */
- $this->token['data'] .= '-'.$char;
- $state = 'comment';
- }
- break;
-
- case 'commentEnd':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the comment token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif($char === '-') {
- /* U+002D HYPHEN-MINUS (-)
- Parse error. Append a U+002D HYPHEN-MINUS (-) character
- to the comment token's data. Stay in the comment end
- state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-dash-after-double-dash-in-comment'
- ));
- $this->token['data'] .= '-';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Emit the comment token. Reconsume the
- EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-comment-double-dash'
- ));
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Parse error. Append two U+002D HYPHEN-MINUS (-)
- characters and the input character to the comment token's
- data. Switch to the comment state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-char-in-comment'
- ));
- $this->token['data'] .= '--'.$char;
- $state = 'comment';
- }
- break;
-
- case 'doctype':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the before DOCTYPE name state. */
- $state = 'beforeDoctypeName';
-
- } else {
- /* Anything else
- Parse error. Reconsume the current character in the
- before DOCTYPE name state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'need-space-after-doctype'
- ));
- $this->stream->unget();
- $state = 'beforeDoctypeName';
- }
- break;
-
- case 'beforeDoctypeName':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before DOCTYPE name state. */
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Create a new DOCTYPE token. Set its
- force-quirks flag to on. Emit the token. Switch to the
- data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-doctype-name-but-got-right-bracket'
- ));
- $this->emitToken(array(
- 'name' => '',
- 'type' => self::DOCTYPE,
- 'force-quirks' => true,
- 'error' => true
- ));
-
- $state = 'data';
-
- } elseif('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN CAPITAL LETTER A through to U+005A LATIN CAPITAL LETTER Z
- Create a new DOCTYPE token. Set the token's name to the
- lowercase version of the input character (add 0x0020 to
- the character's code point). Switch to the DOCTYPE name
- state. */
- $this->token = array(
- 'name' => strtolower($char),
- 'type' => self::DOCTYPE,
- 'error' => true
- );
-
- $state = 'doctypeName';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Create a new DOCTYPE token. Set its
- force-quirks flag to on. Emit the token. Reconsume the
- EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-doctype-name-but-got-eof'
- ));
- $this->emitToken(array(
- 'name' => '',
- 'type' => self::DOCTYPE,
- 'force-quirks' => true,
- 'error' => true
- ));
-
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Create a new DOCTYPE token. Set the token's name to the
- current input character. Switch to the DOCTYPE name state. */
- $this->token = array(
- 'name' => $char,
- 'type' => self::DOCTYPE,
- 'error' => true
- );
-
- $state = 'doctypeName';
- }
- break;
-
- case 'doctypeName':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the after DOCTYPE name state. */
- $state = 'afterDoctypeName';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current DOCTYPE token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif('A' <= $char && $char <= 'Z') {
- /* U+0041 LATIN CAPITAL LETTER A through to U+005A LATIN CAPITAL LETTER Z
- Append the lowercase version of the input character
- (add 0x0020 to the character's code point) to the current
- DOCTYPE token's name. Stay in the DOCTYPE name state. */
- $this->token['name'] .= strtolower($char);
-
- } elseif($char === false) {
- /* EOF
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype-name'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current
- DOCTYPE token's name. Stay in the DOCTYPE name state. */
- $this->token['name'] .= $char;
- }
-
- // XXX this is probably some sort of quirks mode designation,
- // check tree-builder to be sure. In general 'error' needs
- // to be specc'ified, this probably means removing it at the end
- $this->token['error'] = ($this->token['name'] === 'HTML')
- ? false
- : true;
- break;
-
- case 'afterDoctypeName':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the after DOCTYPE name state. */
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current DOCTYPE token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif($char === false) {
- /* EOF
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else */
-
- $nextSix = strtoupper($char . $this->stream->charsWhile(self::ALPHA, 5));
- if ($nextSix === 'PUBLIC') {
- /* If the next six characters are an ASCII
- case-insensitive match for the word "PUBLIC", then
- consume those characters and switch to the before
- DOCTYPE public identifier state. */
- $state = 'beforeDoctypePublicIdentifier';
-
- } elseif ($nextSix === 'SYSTEM') {
- /* Otherwise, if the next six characters are an ASCII
- case-insensitive match for the word "SYSTEM", then
- consume those characters and switch to the before
- DOCTYPE system identifier state. */
- $state = 'beforeDoctypeSystemIdentifier';
-
- } else {
- /* Otherwise, this is the parse error. Set the DOCTYPE
- token's force-quirks flag to on. Switch to the bogus
- DOCTYPE state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-space-or-right-bracket-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->token['error'] = true;
- $state = 'bogusDoctype';
- }
- }
- break;
-
- case 'beforeDoctypePublicIdentifier':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before DOCTYPE public identifier state. */
- } elseif ($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Set the DOCTYPE token's public identifier to the empty
- string (not missing), then switch to the DOCTYPE public
- identifier (double-quoted) state. */
- $this->token['public'] = '';
- $state = 'doctypePublicIdentifierDoubleQuoted';
- } elseif ($char === "'") {
- /* U+0027 APOSTROPHE (')
- Set the DOCTYPE token's public identifier to the empty
- string (not missing), then switch to the DOCTYPE public
- identifier (single-quoted) state. */
- $this->token['public'] = '';
- $state = 'doctypePublicIdentifierSingleQuoted';
- } elseif ($char === '>') {
- /* Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-end-of-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* Parse error. Set the DOCTYPE token's force-quirks
- flag to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Switch to the bogus DOCTYPE state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-char-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $state = 'bogusDoctype';
- }
- break;
-
- case 'doctypePublicIdentifierDoubleQuoted':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if ($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Switch to the after DOCTYPE public identifier state. */
- $state = 'afterDoctypePublicIdentifier';
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-end-of-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* EOF
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Anything else
- Append the current input character to the current
- DOCTYPE token's public identifier. Stay in the DOCTYPE
- public identifier (double-quoted) state. */
- $this->token['public'] .= $char;
- }
- break;
-
- case 'doctypePublicIdentifierSingleQuoted':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if ($char === "'") {
- /* U+0027 APOSTROPHE (')
- Switch to the after DOCTYPE public identifier state. */
- $state = 'afterDoctypePublicIdentifier';
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-end-of-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* EOF
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Anything else
- Append the current input character to the current
- DOCTYPE token's public identifier. Stay in the DOCTYPE
- public identifier (double-quoted) state. */
- $this->token['public'] .= $char;
- }
- break;
-
- case 'afterDoctypePublicIdentifier':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the after DOCTYPE public identifier state. */
- } elseif ($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Set the DOCTYPE token's system identifier to the
- empty string (not missing), then switch to the DOCTYPE
- system identifier (double-quoted) state. */
- $this->token['system'] = '';
- $state = 'doctypeSystemIdentifierDoubleQuoted';
- } elseif ($char === "'") {
- /* U+0027 APOSTROPHE (')
- Set the DOCTYPE token's system identifier to the
- empty string (not missing), then switch to the DOCTYPE
- system identifier (single-quoted) state. */
- $this->token['system'] = '';
- $state = 'doctypeSystemIdentifierSingleQuoted';
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current DOCTYPE token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* Parse error. Set the DOCTYPE token's force-quirks
- flag to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Anything else
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Switch to the bogus DOCTYPE state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-char-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $state = 'bogusDoctype';
- }
- break;
-
- case 'beforeDoctypeSystemIdentifier':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before DOCTYPE system identifier state. */
- } elseif ($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Set the DOCTYPE token's system identifier to the empty
- string (not missing), then switch to the DOCTYPE system
- identifier (double-quoted) state. */
- $this->token['system'] = '';
- $state = 'doctypeSystemIdentifierDoubleQuoted';
- } elseif ($char === "'") {
- /* U+0027 APOSTROPHE (')
- Set the DOCTYPE token's system identifier to the empty
- string (not missing), then switch to the DOCTYPE system
- identifier (single-quoted) state. */
- $this->token['system'] = '';
- $state = 'doctypeSystemIdentifierSingleQuoted';
- } elseif ($char === '>') {
- /* Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-char-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* Parse error. Set the DOCTYPE token's force-quirks
- flag to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Switch to the bogus DOCTYPE state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-char-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $state = 'bogusDoctype';
- }
- break;
-
- case 'doctypeSystemIdentifierDoubleQuoted':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if ($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Switch to the after DOCTYPE system identifier state. */
- $state = 'afterDoctypeSystemIdentifier';
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-end-of-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* EOF
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Anything else
- Append the current input character to the current
- DOCTYPE token's system identifier. Stay in the DOCTYPE
- system identifier (double-quoted) state. */
- $this->token['system'] .= $char;
- }
- break;
-
- case 'doctypeSystemIdentifierSingleQuoted':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if ($char === "'") {
- /* U+0027 APOSTROPHE (')
- Switch to the after DOCTYPE system identifier state. */
- $state = 'afterDoctypeSystemIdentifier';
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-end-of-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* EOF
- Parse error. Set the DOCTYPE token's force-quirks flag
- to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Anything else
- Append the current input character to the current
- DOCTYPE token's system identifier. Stay in the DOCTYPE
- system identifier (double-quoted) state. */
- $this->token['system'] .= $char;
- }
- break;
-
- case 'afterDoctypeSystemIdentifier':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if($char === "\t" || $char === "\n" || $char === "\x0c" || $char === ' ') {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the after DOCTYPE system identifier state. */
- } elseif ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current DOCTYPE token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
- } elseif ($char === false) {
- /* Parse error. Set the DOCTYPE token's force-quirks
- flag to on. Emit that DOCTYPE token. Reconsume the EOF
- character in the data state. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'eof-in-doctype'
- ));
- $this->token['force-quirks'] = true;
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
- } else {
- /* Anything else
- Parse error. Switch to the bogus DOCTYPE state.
- (This does not set the DOCTYPE token's force-quirks
- flag to on.) */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'unexpected-char-in-doctype'
- ));
- $state = 'bogusDoctype';
- }
- break;
-
- case 'bogusDoctype':
- /* Consume the next input character: */
- $char = $this->stream->char();
-
- if ($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the DOCTYPE token. Switch to the data state. */
- $this->emitToken($this->token);
- $state = 'data';
-
- } elseif($char === false) {
- /* EOF
- Emit the DOCTYPE token. Reconsume the EOF character in
- the data state. */
- $this->emitToken($this->token);
- $this->stream->unget();
- $state = 'data';
-
- } else {
- /* Anything else
- Stay in the bogus DOCTYPE state. */
- }
- break;
-
- // case 'cdataSection':
-
- }
- }
- }
-
- /**
- * Returns a serialized representation of the tree.
- */
- public function save() {
- return $this->tree->save();
- }
-
- /**
- * Returns the input stream.
- */
- public function stream() {
- return $this->stream;
- }
-
- private function consumeCharacterReference($allowed = false, $inattr = false) {
- // This goes quite far against spec, and is far closer to the Python
- // impl., mainly because we don't do the large unconsuming the spec
- // requires.
-
- // All consumed characters.
- $chars = $this->stream->char();
-
- /* This section defines how to consume a character
- reference. This definition is used when parsing character
- references in text and in attributes.
-
- The behavior depends on the identity of the next character
- (the one immediately after the U+0026 AMPERSAND character): */
-
- if (
- $chars[0] === "\x09" ||
- $chars[0] === "\x0A" ||
- $chars[0] === "\x0C" ||
- $chars[0] === "\x20" ||
- $chars[0] === '<' ||
- $chars[0] === '&' ||
- $chars === false ||
- $chars[0] === $allowed
- ) {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000C FORM FEED (FF)
- U+0020 SPACE
- U+003C LESS-THAN SIGN
- U+0026 AMPERSAND
- EOF
- The additional allowed character, if there is one
- Not a character reference. No characters are consumed,
- and nothing is returned. (This is not an error, either.) */
- // We already consumed, so unconsume.
- $this->stream->unget();
- return '&';
- } elseif ($chars[0] === '#') {
- /* Consume the U+0023 NUMBER SIGN. */
- // Um, yeah, we already did that.
- /* The behavior further depends on the character after
- the U+0023 NUMBER SIGN: */
- $chars .= $this->stream->char();
- if (isset($chars[1]) && ($chars[1] === 'x' || $chars[1] === 'X')) {
- /* U+0078 LATIN SMALL LETTER X
- U+0058 LATIN CAPITAL LETTER X */
- /* Consume the X. */
- // Um, yeah, we already did that.
- /* Follow the steps below, but using the range of
- characters U+0030 DIGIT ZERO through to U+0039 DIGIT
- NINE, U+0061 LATIN SMALL LETTER A through to U+0066
- LATIN SMALL LETTER F, and U+0041 LATIN CAPITAL LETTER
- A, through to U+0046 LATIN CAPITAL LETTER F (in other
- words, 0123456789, ABCDEF, abcdef). */
- $char_class = self::HEX;
- /* When it comes to interpreting the
- number, interpret it as a hexadecimal number. */
- $hex = true;
- } else {
- /* Anything else */
- // Unconsume because we shouldn't have consumed this.
- $chars = $chars[0];
- $this->stream->unget();
- /* Follow the steps below, but using the range of
- characters U+0030 DIGIT ZERO through to U+0039 DIGIT
- NINE (i.e. just 0123456789). */
- $char_class = self::DIGIT;
- /* When it comes to interpreting the number,
- interpret it as a decimal number. */
- $hex = false;
- }
-
- /* Consume as many characters as match the range of characters given above. */
- $consumed = $this->stream->charsWhile($char_class);
- if ($consumed === '' || $consumed === false) {
- /* If no characters match the range, then don't consume
- any characters (and unconsume the U+0023 NUMBER SIGN
- character and, if appropriate, the X character). This
- is a parse error; nothing is returned. */
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-numeric-entity'
- ));
- return '&' . $chars;
- } else {
- /* Otherwise, if the next character is a U+003B SEMICOLON,
- consume that too. If it isn't, there is a parse error. */
- if ($this->stream->char() !== ';') {
- $this->stream->unget();
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'numeric-entity-without-semicolon'
- ));
- }
-
- /* If one or more characters match the range, then take
- them all and interpret the string of characters as a number
- (either hexadecimal or decimal as appropriate). */
- $codepoint = $hex ? hexdec($consumed) : (int) $consumed;
-
- /* If that number is one of the numbers in the first column
- of the following table, then this is a parse error. Find the
- row with that number in the first column, and return a
- character token for the Unicode character given in the
- second column of that row. */
- $new_codepoint = HTML5_Data::getRealCodepoint($codepoint);
- if ($new_codepoint) {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'illegal-windows-1252-entity'
- ));
- $codepoint = $new_codepoint;
- } else {
- /* Otherwise, if the number is in the range 0x0000 to 0x0008,
- U+000B, U+000E to 0x001F, 0x007F to 0x009F, 0xD800 to 0xDFFF ,
- 0xFDD0 to 0xFDEF, or is one of 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF,
- 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE,
- 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF,
- 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF, 0xCFFFE,
- 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF,
- 0x10FFFE, or 0x10FFFF, or is higher than 0x10FFFF, then this
- is a parse error; return a character token for the U+FFFD
- REPLACEMENT CHARACTER character instead. */
- // && has higher precedence than ||
- if (
- $codepoint >= 0x0000 && $codepoint <= 0x0008 ||
- $codepoint === 0x000B ||
- $codepoint >= 0x000E && $codepoint <= 0x001F ||
- $codepoint >= 0x007F && $codepoint <= 0x009F ||
- $codepoint >= 0xD800 && $codepoint <= 0xDFFF ||
- $codepoint >= 0xFDD0 && $codepoint <= 0xFDEF ||
- ($codepoint & 0xFFFE) === 0xFFFE ||
- $codepoint > 0x10FFFF
- ) {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'illegal-codepoint-for-numeric-entity'
- ));
- $codepoint = 0xFFFD;
- }
- }
-
- /* Otherwise, return a character token for the Unicode
- character whose code point is that number. */
- return HTML5_Data::utf8chr($codepoint);
- }
-
- } else {
- /* Anything else */
-
- /* Consume the maximum number of characters possible,
- with the consumed characters matching one of the
- identifiers in the first column of the named character
- references table (in a case-sensitive manner). */
-
- // we will implement this by matching the longest
- // alphanumeric + semicolon string, and then working
- // our way backwards
- $chars .= $this->stream->charsWhile(self::DIGIT . self::ALPHA . ';', HTML5_Data::getNamedCharacterReferenceMaxLength() - 1);
- $len = strlen($chars);
-
- $refs = HTML5_Data::getNamedCharacterReferences();
- $codepoint = false;
- for($c = $len; $c > 0; $c--) {
- $id = substr($chars, 0, $c);
- if(isset($refs[$id])) {
- $codepoint = $refs[$id];
- break;
- }
- }
-
- /* If no match can be made, then this is a parse error.
- No characters are consumed, and nothing is returned. */
- if (!$codepoint) {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'expected-named-entity'
- ));
- return '&' . $chars;
- }
-
- /* If the last character matched is not a U+003B SEMICOLON
- (;), there is a parse error. */
- $semicolon = true;
- if (substr($id, -1) !== ';') {
- $this->emitToken(array(
- 'type' => self::PARSEERROR,
- 'data' => 'named-entity-without-semicolon'
- ));
- $semicolon = false;
- }
-
-
- /* If the character reference is being consumed as part of
- an attribute, and the last character matched is not a
- U+003B SEMICOLON (;), and the next character is in the
- range U+0030 DIGIT ZERO to U+0039 DIGIT NINE, U+0041
- LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z,
- or U+0061 LATIN SMALL LETTER A to U+007A LATIN SMALL LETTER Z,
- then, for historical reasons, all the characters that were
- matched after the U+0026 AMPERSAND (&) must be unconsumed,
- and nothing is returned. */
- if (
- $inattr && !$semicolon &&
- strspn(substr($chars, $c, 1), self::ALPHA . self::DIGIT)
- ) {
- return '&' . $chars;
- }
-
- /* Otherwise, return a character token for the character
- corresponding to the character reference name (as given
- by the second column of the named character references table). */
- return HTML5_Data::utf8chr($codepoint) . substr($chars, $c);
- }
- }
-
- private function characterReferenceInAttributeValue($allowed = false) {
- /* Attempt to consume a character reference. */
- $entity = $this->consumeCharacterReference($allowed, true);
-
- /* If nothing is returned, append a U+0026 AMPERSAND
- character to the current attribute's value.
-
- Otherwise, append the returned character token to the
- current attribute's value. */
- $char = (!$entity)
- ? '&'
- : $entity;
-
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char;
-
- /* Finally, switch back to the attribute value state that you
- were in when were switched into this state. */
- }
-
- /**
- * Emits a token, passing it on to the tree builder.
- */
- protected function emitToken($token, $checkStream = true) {
- if ($checkStream) {
- // Emit errors from input stream.
- while ($this->stream->errors) {
- $this->emitToken(array_shift($this->stream->errors), false);
- }
- }
-
- // the current structure of attributes is not a terribly good one
- $this->tree->emitToken($token);
-
- if(is_int($this->tree->content_model)) {
- $this->content_model = $this->tree->content_model;
- $this->tree->content_model = null;
-
- } elseif($token['type'] === self::ENDTAG) {
- $this->content_model = self::PCDATA;
- }
- }
-}
-
diff --git a/library/HTML5/TreeBuilder.php b/library/HTML5/TreeBuilder.php
deleted file mode 100644
index 578e73682..000000000
--- a/library/HTML5/TreeBuilder.php
+++ /dev/null
@@ -1,3721 +0,0 @@
-<?php
-
-/*
-
-Copyright 2007 Jeroen van der Meer <http://jero.net/>
-Copyright 2009 Edward Z. Yang <edwardzyang@thewritingpot.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*/
-
-// Tags for FIX ME!!!: (in order of priority)
-// XXX - should be fixed NAO!
-// XERROR - with regards to parse errors
-// XSCRIPT - with regards to scripting mode
-// XENCODING - with regards to encoding (for reparsing tests)
-
-class HTML5_TreeBuilder {
- public $stack = array();
- public $content_model;
-
- private $mode;
- private $original_mode;
- private $secondary_mode;
- private $dom;
- // Whether or not normal insertion of nodes should actually foster
- // parent (used in one case in spec)
- private $foster_parent = false;
- private $a_formatting = array();
-
- private $head_pointer = null;
- private $form_pointer = null;
-
- private $flag_frameset_ok = true;
- private $flag_force_quirks = false;
- private $ignored = false;
- private $quirks_mode = null;
- // this gets to 2 when we want to ignore the next lf character, and
- // is decrement at the beginning of each processed token (this way,
- // code can check for (bool)$ignore_lf_token, but it phases out
- // appropriately)
- private $ignore_lf_token = 0;
- private $fragment = false;
- private $root;
-
- private $scoping = array('applet','button','caption','html','marquee','object','table','td','th', 'svg:foreignObject');
- private $formatting = array('a','b','big','code','em','font','i','nobr','s','small','strike','strong','tt','u');
- private $special = array('address','area','article','aside','base','basefont','bgsound',
- 'blockquote','body','br','center','col','colgroup','command','dd','details','dialog','dir','div','dl',
- 'dt','embed','fieldset','figure','footer','form','frame','frameset','h1','h2','h3','h4','h5',
- 'h6','head','header','hgroup','hr','iframe','img','input','isindex','li','link',
- 'listing','menu','meta','nav','noembed','noframes','noscript','ol',
- 'p','param','plaintext','pre','script','select','spacer','style',
- 'tbody','textarea','tfoot','thead','title','tr','ul','wbr');
-
- // Tree construction modes
- const INITIAL = 0;
- const BEFORE_HTML = 1;
- const BEFORE_HEAD = 2;
- const IN_HEAD = 3;
- const IN_HEAD_NOSCRIPT = 4;
- const AFTER_HEAD = 5;
- const IN_BODY = 6;
- const IN_CDATA_RCDATA = 7;
- const IN_TABLE = 8;
- const IN_CAPTION = 9;
- const IN_COLUMN_GROUP = 10;
- const IN_TABLE_BODY = 11;
- const IN_ROW = 12;
- const IN_CELL = 13;
- const IN_SELECT = 14;
- const IN_SELECT_IN_TABLE= 15;
- const IN_FOREIGN_CONTENT= 16;
- const AFTER_BODY = 17;
- const IN_FRAMESET = 18;
- const AFTER_FRAMESET = 19;
- const AFTER_AFTER_BODY = 20;
- const AFTER_AFTER_FRAMESET = 21;
-
- /**
- * Converts a magic number to a readable name. Use for debugging.
- */
- private function strConst($number) {
- static $lookup;
- if (!$lookup) {
- $r = new ReflectionClass('HTML5_TreeBuilder');
- $lookup = array_flip($r->getConstants());
- }
- return $lookup[$number];
- }
-
- // The different types of elements.
- const SPECIAL = 100;
- const SCOPING = 101;
- const FORMATTING = 102;
- const PHRASING = 103;
-
- // Quirks modes in $quirks_mode
- const NO_QUIRKS = 200;
- const QUIRKS_MODE = 201;
- const LIMITED_QUIRKS_MODE = 202;
-
- // Marker to be placed in $a_formatting
- const MARKER = 300;
-
- // Namespaces for foreign content
- const NS_HTML = null; // to prevent DOM from requiring NS on everything
- const NS_MATHML = 'http://www.w3.org/1998/Math/MathML';
- const NS_SVG = 'http://www.w3.org/2000/svg';
- const NS_XLINK = 'http://www.w3.org/1999/xlink';
- const NS_XML = 'http://www.w3.org/XML/1998/namespace';
- const NS_XMLNS = 'http://www.w3.org/2000/xmlns/';
-
- public function __construct() {
- $this->mode = self::INITIAL;
- $this->dom = new DOMDocument;
-
- $this->dom->encoding = 'UTF-8';
- $this->dom->preserveWhiteSpace = true;
- $this->dom->substituteEntities = true;
- $this->dom->strictErrorChecking = false;
- }
-
- // Process tag tokens
- public function emitToken($token, $mode = null) {
- // XXX: ignore parse errors... why are we emitting them, again?
- if ($token['type'] === HTML5_Tokenizer::PARSEERROR) return;
- if ($mode === null) $mode = $this->mode;
-
- /*
- $backtrace = debug_backtrace();
- if ($backtrace[1]['class'] !== 'HTML5_TreeBuilder') echo "--\n";
- echo $this->strConst($mode);
- if ($this->original_mode) echo " (originally ".$this->strConst($this->original_mode).")";
- echo "\n ";
- token_dump($token);
- $this->printStack();
- $this->printActiveFormattingElements();
- if ($this->foster_parent) echo " -> this is a foster parent mode\n";
- */
-
- if ($this->ignore_lf_token) $this->ignore_lf_token--;
- $this->ignored = false;
- // indenting is a little wonky, this can be changed later on
- switch ($mode) {
-
- case self::INITIAL:
-
- /* A character token that is one of U+0009 CHARACTER TABULATION,
- * U+000A LINE FEED (LF), U+000C FORM FEED (FF), or U+0020 SPACE */
- if ($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Ignore the token. */
- $this->ignored = true;
- } elseif ($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- if (
- $token['name'] !== 'html' || !empty($token['public']) ||
- !empty($token['system']) || $token !== 'about:legacy-compat'
- ) {
- /* If the DOCTYPE token's name is not a case-sensitive match
- * for the string "html", or if the token's public identifier
- * is not missing, or if the token's system identifier is
- * neither missing nor a case-sensitive match for the string
- * "about:legacy-compat", then there is a parse error (this
- * is the DOCTYPE parse error). */
- // DOCTYPE parse error
- }
- /* Append a DocumentType node to the Document node, with the name
- * attribute set to the name given in the DOCTYPE token, or the
- * empty string if the name was missing; the publicId attribute
- * set to the public identifier given in the DOCTYPE token, or
- * the empty string if the public identifier was missing; the
- * systemId attribute set to the system identifier given in the
- * DOCTYPE token, or the empty string if the system identifier
- * was missing; and the other attributes specific to
- * DocumentType objects set to null and empty lists as
- * appropriate. Associate the DocumentType node with the
- * Document object so that it is returned as the value of the
- * doctype attribute of the Document object. */
- if (!isset($token['public'])) $token['public'] = null;
- if (!isset($token['system'])) $token['system'] = null;
- // Yes this is hacky. I'm kind of annoyed that I can't appendChild
- // a doctype to DOMDocument. Maybe I haven't chanted the right
- // syllables.
- $impl = new DOMImplementation();
- // This call can fail for particularly pathological cases (namely,
- // the qualifiedName parameter ($token['name']) could be missing.
- if ($token['name']) {
- $doctype = $impl->createDocumentType($token['name'], $token['public'], $token['system']);
- $this->dom->appendChild($doctype);
- } else {
- // It looks like libxml's not actually *able* to express this case.
- // So... don't.
- $this->dom->emptyDoctype = true;
- }
- $public = is_null($token['public']) ? false : strtolower($token['public']);
- $system = is_null($token['system']) ? false : strtolower($token['system']);
- $publicStartsWithForQuirks = array(
- "+//silmaril//dtd html pro v0r11 19970101//",
- "-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
- "-//as//dtd html 3.0 aswedit + extensions//",
- "-//ietf//dtd html 2.0 level 1//",
- "-//ietf//dtd html 2.0 level 2//",
- "-//ietf//dtd html 2.0 strict level 1//",
- "-//ietf//dtd html 2.0 strict level 2//",
- "-//ietf//dtd html 2.0 strict//",
- "-//ietf//dtd html 2.0//",
- "-//ietf//dtd html 2.1e//",
- "-//ietf//dtd html 3.0//",
- "-//ietf//dtd html 3.2 final//",
- "-//ietf//dtd html 3.2//",
- "-//ietf//dtd html 3//",
- "-//ietf//dtd html level 0//",
- "-//ietf//dtd html level 1//",
- "-//ietf//dtd html level 2//",
- "-//ietf//dtd html level 3//",
- "-//ietf//dtd html strict level 0//",
- "-//ietf//dtd html strict level 1//",
- "-//ietf//dtd html strict level 2//",
- "-//ietf//dtd html strict level 3//",
- "-//ietf//dtd html strict//",
- "-//ietf//dtd html//",
- "-//metrius//dtd metrius presentational//",
- "-//microsoft//dtd internet explorer 2.0 html strict//",
- "-//microsoft//dtd internet explorer 2.0 html//",
- "-//microsoft//dtd internet explorer 2.0 tables//",
- "-//microsoft//dtd internet explorer 3.0 html strict//",
- "-//microsoft//dtd internet explorer 3.0 html//",
- "-//microsoft//dtd internet explorer 3.0 tables//",
- "-//netscape comm. corp.//dtd html//",
- "-//netscape comm. corp.//dtd strict html//",
- "-//o'reilly and associates//dtd html 2.0//",
- "-//o'reilly and associates//dtd html extended 1.0//",
- "-//o'reilly and associates//dtd html extended relaxed 1.0//",
- "-//spyglass//dtd html 2.0 extended//",
- "-//sq//dtd html 2.0 hotmetal + extensions//",
- "-//sun microsystems corp.//dtd hotjava html//",
- "-//sun microsystems corp.//dtd hotjava strict html//",
- "-//w3c//dtd html 3 1995-03-24//",
- "-//w3c//dtd html 3.2 draft//",
- "-//w3c//dtd html 3.2 final//",
- "-//w3c//dtd html 3.2//",
- "-//w3c//dtd html 3.2s draft//",
- "-//w3c//dtd html 4.0 frameset//",
- "-//w3c//dtd html 4.0 transitional//",
- "-//w3c//dtd html experimental 19960712//",
- "-//w3c//dtd html experimental 970421//",
- "-//w3c//dtd w3 html//",
- "-//w3o//dtd w3 html 3.0//",
- "-//webtechs//dtd mozilla html 2.0//",
- "-//webtechs//dtd mozilla html//",
- );
- $publicSetToForQuirks = array(
- "-//w3o//dtd w3 html strict 3.0//",
- "-/w3c/dtd html 4.0 transitional/en",
- "html",
- );
- $publicStartsWithAndSystemForQuirks = array(
- "-//w3c//dtd html 4.01 frameset//",
- "-//w3c//dtd html 4.01 transitional//",
- );
- $publicStartsWithForLimitedQuirks = array(
- "-//w3c//dtd xhtml 1.0 frameset//",
- "-//w3c//dtd xhtml 1.0 transitional//",
- );
- $publicStartsWithAndSystemForLimitedQuirks = array(
- "-//w3c//dtd html 4.01 frameset//",
- "-//w3c//dtd html 4.01 transitional//",
- );
- // first, do easy checks
- if (
- !empty($token['force-quirks']) ||
- strtolower($token['name']) !== 'html'
- ) {
- $this->quirks_mode = self::QUIRKS_MODE;
- } else {
- do {
- if ($system) {
- foreach ($publicStartsWithAndSystemForQuirks as $x) {
- if (strncmp($public, $x, strlen($x)) === 0) {
- $this->quirks_mode = self::QUIRKS_MODE;
- break;
- }
- }
- if (!is_null($this->quirks_mode)) break;
- foreach ($publicStartsWithAndSystemForLimitedQuirks as $x) {
- if (strncmp($public, $x, strlen($x)) === 0) {
- $this->quirks_mode = self::LIMITED_QUIRKS_MODE;
- break;
- }
- }
- if (!is_null($this->quirks_mode)) break;
- }
- foreach ($publicSetToForQuirks as $x) {
- if ($public === $x) {
- $this->quirks_mode = self::QUIRKS_MODE;
- break;
- }
- }
- if (!is_null($this->quirks_mode)) break;
- foreach ($publicStartsWithForLimitedQuirks as $x) {
- if (strncmp($public, $x, strlen($x)) === 0) {
- $this->quirks_mode = self::LIMITED_QUIRKS_MODE;
- }
- }
- if (!is_null($this->quirks_mode)) break;
- if ($system === "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") {
- $this->quirks_mode = self::QUIRKS_MODE;
- break;
- }
- foreach ($publicStartsWithForQuirks as $x) {
- if (strncmp($public, $x, strlen($x)) === 0) {
- $this->quirks_mode = self::QUIRKS_MODE;
- break;
- }
- }
- if (is_null($this->quirks_mode)) {
- $this->quirks_mode = self::NO_QUIRKS;
- }
- } while (false);
- }
- $this->mode = self::BEFORE_HTML;
- } else {
- // parse error
- /* Switch the insertion mode to "before html", then reprocess the
- * current token. */
- $this->mode = self::BEFORE_HTML;
- $this->quirks_mode = self::QUIRKS_MODE;
- $this->emitToken($token);
- }
- break;
-
- case self::BEFORE_HTML:
-
- /* A DOCTYPE token */
- if($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // Parse error. Ignore the token.
- $this->ignored = true;
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the Document object with the data
- attribute set to the data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- $this->dom->appendChild($comment);
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- } elseif($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Ignore the token. */
- $this->ignored = true;
-
- /* A start tag whose tag name is "html" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] == 'html') {
- /* Create an element for the token in the HTML namespace. Append it
- * to the Document object. Put this element in the stack of open
- * elements. */
- $html = $this->insertElement($token, false);
- $this->dom->appendChild($html);
- $this->stack[] = $html;
-
- $this->mode = self::BEFORE_HEAD;
-
- } else {
- /* Create an html element. Append it to the Document object. Put
- * this element in the stack of open elements. */
- $html = $this->dom->createElementNS(self::NS_HTML, 'html');
- $this->dom->appendChild($html);
- $this->stack[] = $html;
-
- /* Switch the insertion mode to "before head", then reprocess the
- * current token. */
- $this->mode = self::BEFORE_HEAD;
- $this->emitToken($token);
- }
- break;
-
- case self::BEFORE_HEAD:
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Ignore the token. */
- $this->ignored = true;
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data attribute
- set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- /* A DOCTYPE token */
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- /* Parse error. Ignore the token */
- $this->ignored = true;
- // parse error
-
- /* A start tag token with the tag name "html" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html') {
- /* Process the token using the rules for the "in body"
- * insertion mode. */
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* A start tag token with the tag name "head" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'head') {
- /* Insert an HTML element for the token. */
- $element = $this->insertElement($token);
-
- /* Set the head element pointer to this new element node. */
- $this->head_pointer = $element;
-
- /* Change the insertion mode to "in head". */
- $this->mode = self::IN_HEAD;
-
- /* An end tag whose tag name is one of: "head", "body", "html", "br" */
- } elseif(
- $token['type'] === HTML5_Tokenizer::ENDTAG && (
- $token['name'] === 'head' || $token['name'] === 'body' ||
- $token['name'] === 'html' || $token['name'] === 'br'
- )) {
- /* Act as if a start tag token with the tag name "head" and no
- * attributes had been seen, then reprocess the current token. */
- $this->emitToken(array(
- 'name' => 'head',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
- $this->emitToken($token);
-
- /* Any other end tag */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG) {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
-
- } else {
- /* Act as if a start tag token with the tag name "head" and no
- * attributes had been seen, then reprocess the current token.
- * Note: This will result in an empty head element being
- * generated, with the current token being reprocessed in the
- * "after head" insertion mode. */
- $this->emitToken(array(
- 'name' => 'head',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
- $this->emitToken($token);
- }
- break;
-
- case self::IN_HEAD:
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE. */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Insert the character into the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data attribute
- set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- /* A DOCTYPE token */
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
- // parse error
-
- /* A start tag whose tag name is "html" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'html') {
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* A start tag whose tag name is one of: "base", "command", "link" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- ($token['name'] === 'base' || $token['name'] === 'command' ||
- $token['name'] === 'link')) {
- /* Insert an HTML element for the token. Immediately pop the
- * current node off the stack of open elements. */
- $this->insertElement($token);
- array_pop($this->stack);
-
- // YYY: Acknowledge the token's self-closing flag, if it is set.
-
- /* A start tag whose tag name is "meta" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'meta') {
- /* Insert an HTML element for the token. Immediately pop the
- * current node off the stack of open elements. */
- $this->insertElement($token);
- array_pop($this->stack);
-
- // XERROR: Acknowledge the token's self-closing flag, if it is set.
-
- // XENCODING: If the element has a charset attribute, and its value is a
- // supported encoding, and the confidence is currently tentative,
- // then change the encoding to the encoding given by the value of
- // the charset attribute.
- //
- // Otherwise, if the element has a content attribute, and applying
- // the algorithm for extracting an encoding from a Content-Type to
- // its value returns a supported encoding encoding, and the
- // confidence is currently tentative, then change the encoding to
- // the encoding encoding.
-
- /* A start tag with the tag name "title" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'title') {
- $this->insertRCDATAElement($token);
-
- /* A start tag whose tag name is "noscript", if the scripting flag is enabled, or
- * A start tag whose tag name is one of: "noframes", "style" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- ($token['name'] === 'noscript' || $token['name'] === 'noframes' || $token['name'] === 'style')) {
- // XSCRIPT: Scripting flag not respected
- $this->insertCDATAElement($token);
-
- // XSCRIPT: Scripting flag disable not implemented
-
- /* A start tag with the tag name "script" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'script') {
- /* 1. Create an element for the token in the HTML namespace. */
- $node = $this->insertElement($token, false);
-
- /* 2. Mark the element as being "parser-inserted" */
- // Uhhh... XSCRIPT
-
- /* 3. If the parser was originally created for the HTML
- * fragment parsing algorithm, then mark the script element as
- * "already executed". (fragment case) */
- // ditto... XSCRIPT
-
- /* 4. Append the new element to the current node and push it onto
- * the stack of open elements. */
- end($this->stack)->appendChild($node);
- $this->stack[] = $node;
- // I guess we could squash these together
-
- /* 6. Let the original insertion mode be the current insertion mode. */
- $this->original_mode = $this->mode;
- /* 7. Switch the insertion mode to "in CDATA/RCDATA" */
- $this->mode = self::IN_CDATA_RCDATA;
- /* 5. Switch the tokeniser's content model flag to the CDATA state. */
- $this->content_model = HTML5_Tokenizer::CDATA;
-
- /* An end tag with the tag name "head" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'head') {
- /* Pop the current node (which will be the head element) off the stack of open elements. */
- array_pop($this->stack);
-
- /* Change the insertion mode to "after head". */
- $this->mode = self::AFTER_HEAD;
-
- // Slight logic inversion here to minimize duplication
- /* A start tag with the tag name "head". */
- /* An end tag whose tag name is not one of: "body", "html", "br" */
- } elseif(($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'head') ||
- ($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] !== 'html' &&
- $token['name'] !== 'body' && $token['name'] !== 'br')) {
- // Parse error. Ignore the token.
- $this->ignored = true;
-
- /* Anything else */
- } else {
- /* Act as if an end tag token with the tag name "head" had been
- * seen, and reprocess the current token. */
- $this->emitToken(array(
- 'name' => 'head',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- /* Then, reprocess the current token. */
- $this->emitToken($token);
- }
- break;
-
- case self::IN_HEAD_NOSCRIPT:
- if ($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
- } elseif ($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html') {
- $this->processWithRulesFor($token, self::IN_BODY);
- } elseif ($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'noscript') {
- /* Pop the current node (which will be a noscript element) from the
- * stack of open elements; the new current node will be a head
- * element. */
- array_pop($this->stack);
- $this->mode = self::IN_HEAD;
- } elseif (
- ($token['type'] === HTML5_Tokenizer::SPACECHARACTER) ||
- ($token['type'] === HTML5_Tokenizer::COMMENT) ||
- ($token['type'] === HTML5_Tokenizer::STARTTAG && (
- $token['name'] === 'link' || $token['name'] === 'meta' ||
- $token['name'] === 'noframes' || $token['name'] === 'style'))) {
- $this->processWithRulesFor($token, self::IN_HEAD);
- // inverted logic
- } elseif (
- ($token['type'] === HTML5_Tokenizer::STARTTAG && (
- $token['name'] === 'head' || $token['name'] === 'noscript')) ||
- ($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] !== 'br')) {
- // parse error
- } else {
- // parse error
- $this->emitToken(array(
- 'type' => HTML5_Tokenizer::ENDTAG,
- 'name' => 'noscript',
- ));
- $this->emitToken($token);
- }
- break;
-
- case self::AFTER_HEAD:
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data attribute
- set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- } elseif ($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
-
- } elseif ($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html') {
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* A start tag token with the tag name "body" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'body') {
- $this->insertElement($token);
-
- /* Set the frameset-ok flag to "not ok". */
- $this->flag_frameset_ok = false;
-
- /* Change the insertion mode to "in body". */
- $this->mode = self::IN_BODY;
-
- /* A start tag token with the tag name "frameset" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'frameset') {
- /* Insert a frameset element for the token. */
- $this->insertElement($token);
-
- /* Change the insertion mode to "in frameset". */
- $this->mode = self::IN_FRAMESET;
-
- /* A start tag token whose tag name is one of: "base", "link", "meta",
- "script", "style", "title" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && in_array($token['name'],
- array('base', 'link', 'meta', 'noframes', 'script', 'style', 'title'))) {
- // parse error
- /* Push the node pointed to by the head element pointer onto the
- * stack of open elements. */
- $this->stack[] = $this->head_pointer;
- $this->processWithRulesFor($token, self::IN_HEAD);
- array_splice($this->stack, array_search($this->head_pointer, $this->stack, true), 1);
-
- // inversion of specification
- } elseif(
- ($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'head') ||
- ($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] !== 'body' && $token['name'] !== 'html' &&
- $token['name'] !== 'br')) {
- // parse error
-
- /* Anything else */
- } else {
- $this->emitToken(array(
- 'name' => 'body',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
- $this->flag_frameset_ok = true;
- $this->emitToken($token);
- }
- break;
-
- case self::IN_BODY:
- /* Handle the token as follows: */
-
- switch($token['type']) {
- /* A character token */
- case HTML5_Tokenizer::CHARACTER:
- case HTML5_Tokenizer::SPACECHARACTER:
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Append the token's character to the current node. */
- $this->insertText($token['data']);
-
- /* If the token is not one of U+0009 CHARACTER TABULATION,
- * U+000A LINE FEED (LF), U+000C FORM FEED (FF), or U+0020
- * SPACE, then set the frameset-ok flag to "not ok". */
- // i.e., if any of the characters is not whitespace
- if (strlen($token['data']) !== strspn($token['data'], HTML5_Tokenizer::WHITESPACE)) {
- $this->flag_frameset_ok = false;
- }
- break;
-
- /* A comment token */
- case HTML5_Tokenizer::COMMENT:
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
- break;
-
- case HTML5_Tokenizer::DOCTYPE:
- // parse error
- break;
-
- case HTML5_Tokenizer::STARTTAG:
- switch($token['name']) {
- case 'html':
- // parse error
- /* For each attribute on the token, check to see if the
- * attribute is already present on the top element of the
- * stack of open elements. If it is not, add the attribute
- * and its corresponding value to that element. */
- foreach($token['attr'] as $attr) {
- if(!$this->stack[0]->hasAttribute($attr['name'])) {
- $this->stack[0]->setAttribute($attr['name'], $attr['value']);
- }
- }
- break;
-
- case 'base': case 'command': case 'link': case 'meta': case 'noframes':
- case 'script': case 'style': case 'title':
- /* Process the token as if the insertion mode had been "in
- head". */
- $this->processWithRulesFor($token, self::IN_HEAD);
- break;
-
- /* A start tag token with the tag name "body" */
- case 'body':
- /* Parse error. If the second element on the stack of open
- elements is not a body element, or, if the stack of open
- elements has only one node on it, then ignore the token.
- (fragment case) */
- if(count($this->stack) === 1 || $this->stack[1]->tagName !== 'body') {
- $this->ignored = true;
- // Ignore
-
- /* Otherwise, for each attribute on the token, check to see
- if the attribute is already present on the body element (the
- second element) on the stack of open elements. If it is not,
- add the attribute and its corresponding value to that
- element. */
- } else {
- foreach($token['attr'] as $attr) {
- if(!$this->stack[1]->hasAttribute($attr['name'])) {
- $this->stack[1]->setAttribute($attr['name'], $attr['value']);
- }
- }
- }
- break;
-
- case 'frameset':
- // parse error
- /* If the second element on the stack of open elements is
- * not a body element, or, if the stack of open elements
- * has only one node on it, then ignore the token.
- * (fragment case) */
- if(count($this->stack) === 1 || $this->stack[1]->tagName !== 'body') {
- $this->ignored = true;
- // Ignore
- } elseif (!$this->flag_frameset_ok) {
- $this->ignored = true;
- // Ignore
- } else {
- /* 1. Remove the second element on the stack of open
- * elements from its parent node, if it has one. */
- if($this->stack[1]->parentNode) {
- $this->stack[1]->parentNode->removeChild($this->stack[1]);
- }
-
- /* 2. Pop all the nodes from the bottom of the stack of
- * open elements, from the current node up to the root
- * html element. */
- array_splice($this->stack, 1);
-
- $this->insertElement($token);
- $this->mode = self::IN_FRAMESET;
- }
- break;
-
- // in spec, there is a diversion here
-
- case 'address': case 'article': case 'aside': case 'blockquote':
- case 'center': case 'datagrid': case 'details': case 'dialog': case 'dir':
- case 'div': case 'dl': case 'fieldset': case 'figure': case 'footer':
- case 'header': case 'hgroup': case 'menu': case 'nav':
- case 'ol': case 'p': case 'section': case 'ul':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
- break;
-
- /* A start tag whose tag name is one of: "h1", "h2", "h3", "h4",
- "h5", "h6" */
- case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* If the current node is an element whose tag name is one
- * of "h1", "h2", "h3", "h4", "h5", or "h6", then this is a
- * parse error; pop the current node off the stack of open
- * elements. */
- $peek = array_pop($this->stack);
- if (in_array($peek->tagName, array("h1", "h2", "h3", "h4", "h5", "h6"))) {
- // parse error
- } else {
- $this->stack[] = $peek;
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
- break;
-
- case 'pre': case 'listing':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
- $this->insertElement($token);
- /* If the next token is a U+000A LINE FEED (LF) character
- * token, then ignore that token and move on to the next
- * one. (Newlines at the start of pre blocks are ignored as
- * an authoring convenience.) */
- $this->ignore_lf_token = 2;
- $this->flag_frameset_ok = false;
- break;
-
- /* A start tag whose tag name is "form" */
- case 'form':
- /* If the form element pointer is not null, ignore the
- token with a parse error. */
- if($this->form_pointer !== null) {
- $this->ignored = true;
- // Ignore.
-
- /* Otherwise: */
- } else {
- /* If the stack of open elements has a p element in
- scope, then act as if an end tag with the tag name p
- had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token, and set the
- form element pointer to point to the element created. */
- $element = $this->insertElement($token);
- $this->form_pointer = $element;
- }
- break;
-
- // condensed specification
- case 'li': case 'dd': case 'dt':
- /* 1. Set the frameset-ok flag to "not ok". */
- $this->flag_frameset_ok = false;
-
- $stack_length = count($this->stack) - 1;
- for($n = $stack_length; 0 <= $n; $n--) {
- /* 2. Initialise node to be the current node (the
- bottommost node of the stack). */
- $stop = false;
- $node = $this->stack[$n];
- $cat = $this->getElementCategory($node);
-
- // for case 'li':
- /* 3. If node is an li element, then act as if an end
- * tag with the tag name "li" had been seen, then jump
- * to the last step. */
- // for case 'dd': case 'dt':
- /* If node is a dd or dt element, then act as if an end
- * tag with the same tag name as node had been seen, then
- * jump to the last step. */
- if(($token['name'] === 'li' && $node->tagName === 'li') ||
- ($token['name'] !== 'li' && ($node->tagName === 'dd' || $node->tagName === 'dt'))) { // limited conditional
- $this->emitToken(array(
- 'type' => HTML5_Tokenizer::ENDTAG,
- 'name' => $node->tagName,
- ));
- break;
- }
-
- /* 4. If node is not in the formatting category, and is
- not in the phrasing category, and is not an address,
- div or p element, then stop this algorithm. */
- if($cat !== self::FORMATTING && $cat !== self::PHRASING &&
- $node->tagName !== 'address' && $node->tagName !== 'div' &&
- $node->tagName !== 'p') {
- break;
- }
-
- /* 5. Otherwise, set node to the previous entry in the
- * stack of open elements and return to step 2. */
- }
-
- /* 6. This is the last step. */
-
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Finally, insert an HTML element with the same tag
- name as the token's. */
- $this->insertElement($token);
- break;
-
- /* A start tag token whose tag name is "plaintext" */
- case 'plaintext':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- $this->content_model = HTML5_Tokenizer::PLAINTEXT;
- break;
-
- // more diversions
-
- /* A start tag whose tag name is "a" */
- case 'a':
- /* If the list of active formatting elements contains
- an element whose tag name is "a" between the end of the
- list and the last marker on the list (or the start of
- the list if there is no marker on the list), then this
- is a parse error; act as if an end tag with the tag name
- "a" had been seen, then remove that element from the list
- of active formatting elements and the stack of open
- elements if the end tag didn't already remove it (it
- might not have if the element is not in table scope). */
- $leng = count($this->a_formatting);
-
- for($n = $leng - 1; $n >= 0; $n--) {
- if($this->a_formatting[$n] === self::MARKER) {
- break;
-
- } elseif($this->a_formatting[$n]->tagName === 'a') {
- $a = $this->a_formatting[$n];
- $this->emitToken(array(
- 'name' => 'a',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- if (in_array($a, $this->a_formatting)) {
- $a_i = array_search($a, $this->a_formatting, true);
- if($a_i !== false) array_splice($this->a_formatting, $a_i, 1);
- }
- if (in_array($a, $this->stack)) {
- $a_i = array_search($a, $this->stack, true);
- if ($a_i !== false) array_splice($this->stack, $a_i, 1);
- }
- break;
- }
- }
-
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $el = $this->insertElement($token);
-
- /* Add that element to the list of active formatting
- elements. */
- $this->a_formatting[] = $el;
- break;
-
- case 'b': case 'big': case 'code': case 'em': case 'font': case 'i':
- case 's': case 'small': case 'strike':
- case 'strong': case 'tt': case 'u':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $el = $this->insertElement($token);
-
- /* Add that element to the list of active formatting
- elements. */
- $this->a_formatting[] = $el;
- break;
-
- case 'nobr':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* If the stack of open elements has a nobr element in
- * scope, then this is a parse error; act as if an end tag
- * with the tag name "nobr" had been seen, then once again
- * reconstruct the active formatting elements, if any. */
- if ($this->elementInScope('nobr')) {
- $this->emitToken(array(
- 'name' => 'nobr',
- 'type' => HTML5_Tokenizer::ENDTAG,
- ));
- $this->reconstructActiveFormattingElements();
- }
-
- /* Insert an HTML element for the token. */
- $el = $this->insertElement($token);
-
- /* Add that element to the list of active formatting
- elements. */
- $this->a_formatting[] = $el;
- break;
-
- // another diversion
-
- /* A start tag token whose tag name is "button" */
- case 'button':
- /* If the stack of open elements has a button element in scope,
- then this is a parse error; act as if an end tag with the tag
- name "button" had been seen, then reprocess the token. (We don't
- do that. Unnecessary.) (I hope you're right! -- ezyang) */
- if($this->elementInScope('button')) {
- $this->emitToken(array(
- 'name' => 'button',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
-
- $this->flag_frameset_ok = false;
- break;
-
- case 'applet': case 'marquee': case 'object':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
-
- $this->flag_frameset_ok = false;
- break;
-
- // spec diversion
-
- /* A start tag whose tag name is "table" */
- case 'table':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->quirks_mode !== self::QUIRKS_MODE &&
- $this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- $this->flag_frameset_ok = false;
-
- /* Change the insertion mode to "in table". */
- $this->mode = self::IN_TABLE;
- break;
-
- /* A start tag whose tag name is one of: "area", "basefont",
- "bgsound", "br", "embed", "img", "param", "spacer", "wbr" */
- case 'area': case 'basefont': case 'bgsound': case 'br':
- case 'embed': case 'img': case 'input': case 'keygen': case 'spacer':
- case 'wbr':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
-
- // YYY: Acknowledge the token's self-closing flag, if it is set.
-
- $this->flag_frameset_ok = false;
- break;
-
- case 'param': case 'source':
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
-
- // YYY: Acknowledge the token's self-closing flag, if it is set.
- break;
-
- /* A start tag whose tag name is "hr" */
- case 'hr':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
-
- // YYY: Acknowledge the token's self-closing flag, if it is set.
-
- $this->flag_frameset_ok = false;
- break;
-
- /* A start tag whose tag name is "image" */
- case 'image':
- /* Parse error. Change the token's tag name to "img" and
- reprocess it. (Don't ask.) */
- $token['name'] = 'img';
- $this->emitToken($token);
- break;
-
- /* A start tag whose tag name is "isindex" */
- case 'isindex':
- /* Parse error. */
-
- /* If the form element pointer is not null,
- then ignore the token. */
- if($this->form_pointer === null) {
- /* Act as if a start tag token with the tag name "form" had
- been seen. */
- /* If the token has an attribute called "action", set
- * the action attribute on the resulting form
- * element to the value of the "action" attribute of
- * the token. */
- $attr = array();
- $action = $this->getAttr($token, 'action');
- if ($action !== false) {
- $attr[] = array('name' => 'action', 'value' => $action);
- }
- $this->emitToken(array(
- 'name' => 'form',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => $attr
- ));
-
- /* Act as if a start tag token with the tag name "hr" had
- been seen. */
- $this->emitToken(array(
- 'name' => 'hr',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "p" had
- been seen. */
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "label"
- had been seen. */
- $this->emitToken(array(
- 'name' => 'label',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a stream of character tokens had been seen. */
- $prompt = $this->getAttr($token, 'prompt');
- if ($prompt === false) {
- $prompt = 'This is a searchable index. '.
- 'Insert your search keywords here: ';
- }
- $this->emitToken(array(
- 'data' => $prompt,
- 'type' => HTML5_Tokenizer::CHARACTER,
- ));
-
- /* Act as if a start tag token with the tag name "input"
- had been seen, with all the attributes from the "isindex"
- token, except with the "name" attribute set to the value
- "isindex" (ignoring any explicit "name" attribute). */
- $attr = array();
- foreach ($token['attr'] as $keypair) {
- if ($keypair['name'] === 'name' || $keypair['name'] === 'action' ||
- $keypair['name'] === 'prompt') continue;
- $attr[] = $keypair;
- }
- $attr[] = array('name' => 'name', 'value' => 'isindex');
-
- $this->emitToken(array(
- 'name' => 'input',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => $attr
- ));
-
- /* Act as if an end tag token with the tag name "label"
- had been seen. */
- $this->emitToken(array(
- 'name' => 'label',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- /* Act as if an end tag token with the tag name "p" had
- been seen. */
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- /* Act as if a start tag token with the tag name "hr" had
- been seen. */
- $this->emitToken(array(
- 'name' => 'hr',
- 'type' => HTML5_Tokenizer::STARTTAG
- ));
-
- /* Act as if an end tag token with the tag name "form" had
- been seen. */
- $this->emitToken(array(
- 'name' => 'form',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- } else {
- $this->ignored = true;
- }
- break;
-
- /* A start tag whose tag name is "textarea" */
- case 'textarea':
- $this->insertElement($token);
-
- /* If the next token is a U+000A LINE FEED (LF)
- * character token, then ignore that token and move on to
- * the next one. (Newlines at the start of textarea
- * elements are ignored as an authoring convenience.)
- * need flag, see also <pre> */
- $this->ignore_lf_token = 2;
-
- $this->original_mode = $this->mode;
- $this->flag_frameset_ok = false;
- $this->mode = self::IN_CDATA_RCDATA;
-
- /* Switch the tokeniser's content model flag to the
- RCDATA state. */
- $this->content_model = HTML5_Tokenizer::RCDATA;
- break;
-
- /* A start tag token whose tag name is "xmp" */
- case 'xmp':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- $this->flag_frameset_ok = false;
-
- $this->insertCDATAElement($token);
- break;
-
- case 'iframe':
- $this->flag_frameset_ok = false;
- $this->insertCDATAElement($token);
- break;
-
- case 'noembed': case 'noscript':
- // XSCRIPT: should check scripting flag
- $this->insertCDATAElement($token);
- break;
-
- /* A start tag whose tag name is "select" */
- case 'select':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- $this->flag_frameset_ok = false;
-
- /* If the insertion mode is one of in table", "in caption",
- * "in column group", "in table body", "in row", or "in
- * cell", then switch the insertion mode to "in select in
- * table". Otherwise, switch the insertion mode to "in
- * select". */
- if (
- $this->mode === self::IN_TABLE || $this->mode === self::IN_CAPTION ||
- $this->mode === self::IN_COLUMN_GROUP || $this->mode ==+self::IN_TABLE_BODY ||
- $this->mode === self::IN_ROW || $this->mode === self::IN_CELL
- ) {
- $this->mode = self::IN_SELECT_IN_TABLE;
- } else {
- $this->mode = self::IN_SELECT;
- }
- break;
-
- case 'option': case 'optgroup':
- if ($this->elementInScope('option')) {
- $this->emitToken(array(
- 'name' => 'option',
- 'type' => HTML5_Tokenizer::ENDTAG,
- ));
- }
- $this->reconstructActiveFormattingElements();
- $this->insertElement($token);
- break;
-
- case 'rp': case 'rt':
- /* If the stack of open elements has a ruby element in scope, then generate
- * implied end tags. If the current node is not then a ruby element, this is
- * a parse error; pop all the nodes from the current node up to the node
- * immediately before the bottommost ruby element on the stack of open elements.
- */
- if ($this->elementInScope('ruby')) {
- $this->generateImpliedEndTags();
- }
- $peek = false;
- do {
- if ($peek) {
- // parse error
- }
- $peek = array_pop($this->stack);
- } while ($peek->tagName !== 'ruby');
- $this->stack[] = $peek; // we popped one too many
- $this->insertElement($token);
- break;
-
- // spec diversion
-
- case 'math':
- $this->reconstructActiveFormattingElements();
- $token = $this->adjustMathMLAttributes($token);
- $token = $this->adjustForeignAttributes($token);
- $this->insertForeignElement($token, self::NS_MATHML);
- if (isset($token['self-closing'])) {
- // XERROR: acknowledge the token's self-closing flag
- array_pop($this->stack);
- }
- if ($this->mode !== self::IN_FOREIGN_CONTENT) {
- $this->secondary_mode = $this->mode;
- $this->mode = self::IN_FOREIGN_CONTENT;
- }
- break;
-
- case 'svg':
- $this->reconstructActiveFormattingElements();
- $token = $this->adjustSVGAttributes($token);
- $token = $this->adjustForeignAttributes($token);
- $this->insertForeignElement($token, self::NS_SVG);
- if (isset($token['self-closing'])) {
- // XERROR: acknowledge the token's self-closing flag
- array_pop($this->stack);
- }
- if ($this->mode !== self::IN_FOREIGN_CONTENT) {
- $this->secondary_mode = $this->mode;
- $this->mode = self::IN_FOREIGN_CONTENT;
- }
- break;
-
- case 'caption': case 'col': case 'colgroup': case 'frame': case 'head':
- case 'tbody': case 'td': case 'tfoot': case 'th': case 'thead': case 'tr':
- // parse error
- break;
-
- /* A start tag token not covered by the previous entries */
- default:
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- $this->insertElement($token);
- /* This element will be a phrasing element. */
- break;
- }
- break;
-
- case HTML5_Tokenizer::ENDTAG:
- switch($token['name']) {
- /* An end tag with the tag name "body" */
- case 'body':
- /* If the second element in the stack of open elements is
- not a body element, this is a parse error. Ignore the token.
- (innerHTML case) */
- if(count($this->stack) < 2 || $this->stack[1]->tagName !== 'body') {
- $this->ignored = true;
-
- /* Otherwise, if there is a node in the stack of open
- * elements that is not either a dd element, a dt
- * element, an li element, an optgroup element, an
- * option element, a p element, an rp element, an rt
- * element, a tbody element, a td element, a tfoot
- * element, a th element, a thead element, a tr element,
- * the body element, or the html element, then this is a
- * parse error. */
- } else {
- // XERROR: implement this check for parse error
- }
-
- /* Change the insertion mode to "after body". */
- $this->mode = self::AFTER_BODY;
- break;
-
- /* An end tag with the tag name "html" */
- case 'html':
- /* Act as if an end tag with tag name "body" had been seen,
- then, if that token wasn't ignored, reprocess the current
- token. */
- $this->emitToken(array(
- 'name' => 'body',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- if (!$this->ignored) $this->emitToken($token);
- break;
-
- case 'address': case 'article': case 'aside': case 'blockquote':
- case 'center': case 'datagrid': case 'details': case 'dir':
- case 'div': case 'dl': case 'fieldset': case 'figure': case 'footer':
- case 'header': case 'hgroup': case 'listing': case 'menu':
- case 'nav': case 'ol': case 'pre': case 'section': case 'ul':
- /* If the stack of open elements has an element in scope
- with the same tag name as that of the token, then generate
- implied end tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with
- the same tag name as that of the token, then this
- is a parse error. */
- // XERROR: implement parse error logic
-
- /* If the stack of open elements has an element in
- scope with the same tag name as that of the token,
- then pop elements from this stack until an element
- with that tag name has been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== $token['name']);
- } else {
- // parse error
- }
- break;
-
- /* An end tag whose tag name is "form" */
- case 'form':
- /* Let node be the element that the form element pointer is set to. */
- $node = $this->form_pointer;
- /* Set the form element pointer to null. */
- $this->form_pointer = null;
- /* If node is null or the stack of open elements does not
- * have node in scope, then this is a parse error; ignore the token. */
- if ($node === null || !in_array($node, $this->stack)) {
- // parse error
- $this->ignored = true;
- } else {
- /* 1. Generate implied end tags. */
- $this->generateImpliedEndTags();
- /* 2. If the current node is not node, then this is a parse error. */
- if (end($this->stack) !== $node) {
- // parse error
- }
- /* 3. Remove node from the stack of open elements. */
- array_splice($this->stack, array_search($node, $this->stack, true), 1);
- }
-
- break;
-
- /* An end tag whose tag name is "p" */
- case 'p':
- /* If the stack of open elements has a p element in scope,
- then generate implied end tags, except for p elements. */
- if($this->elementInScope('p')) {
- /* Generate implied end tags, except for elements with
- * the same tag name as the token. */
- $this->generateImpliedEndTags(array('p'));
-
- /* If the current node is not a p element, then this is
- a parse error. */
- // XERROR: implement
-
- /* Pop elements from the stack of open elements until
- * an element with the same tag name as the token has
- * been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== 'p');
-
- } else {
- // parse error
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5_Tokenizer::STARTTAG,
- ));
- $this->emitToken($token);
- }
- break;
-
- /* An end tag whose tag name is "dd", "dt", or "li" */
- case 'dd': case 'dt': case 'li':
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags(array($token['name']));
-
- /* If the current node is not an element with the same
- tag name as the token, then this is a parse error. */
- // XERROR: implement parse error
-
- /* Pop elements from the stack of open elements until
- * an element with the same tag name as the token has
- * been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== $token['name']);
-
- } else {
- // parse error
- }
- break;
-
- /* An end tag whose tag name is one of: "h1", "h2", "h3", "h4",
- "h5", "h6" */
- case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6':
- $elements = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6');
-
- /* If the stack of open elements has in scope an element whose
- tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then
- generate implied end tags. */
- if($this->elementInScope($elements)) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with the same
- tag name as that of the token, then this is a parse error. */
- // XERROR: implement parse error
-
- /* If the stack of open elements has in scope an element
- whose tag name is one of "h1", "h2", "h3", "h4", "h5", or
- "h6", then pop elements from the stack until an element
- with one of those tag names has been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while (!in_array($node->tagName, $elements));
- } else {
- // parse error
- }
- break;
-
- /* An end tag whose tag name is one of: "a", "b", "big", "em",
- "font", "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */
- case 'a': case 'b': case 'big': case 'code': case 'em': case 'font':
- case 'i': case 'nobr': case 's': case 'small': case 'strike':
- case 'strong': case 'tt': case 'u':
- // XERROR: generally speaking this needs parse error logic
- /* 1. Let the formatting element be the last element in
- the list of active formatting elements that:
- * is between the end of the list and the last scope
- marker in the list, if any, or the start of the list
- otherwise, and
- * has the same tag name as the token.
- */
- while(true) {
- for($a = count($this->a_formatting) - 1; $a >= 0; $a--) {
- if($this->a_formatting[$a] === self::MARKER) {
- break;
-
- } elseif($this->a_formatting[$a]->tagName === $token['name']) {
- $formatting_element = $this->a_formatting[$a];
- $in_stack = in_array($formatting_element, $this->stack, true);
- $fe_af_pos = $a;
- break;
- }
- }
-
- /* If there is no such node, or, if that node is
- also in the stack of open elements but the element
- is not in scope, then this is a parse error. Abort
- these steps. The token is ignored. */
- if(!isset($formatting_element) || ($in_stack &&
- !$this->elementInScope($token['name']))) {
- $this->ignored = true;
- break;
-
- /* Otherwise, if there is such a node, but that node
- is not in the stack of open elements, then this is a
- parse error; remove the element from the list, and
- abort these steps. */
- } elseif(isset($formatting_element) && !$in_stack) {
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
- break;
- }
-
- /* Otherwise, there is a formatting element and that
- * element is in the stack and is in scope. If the
- * element is not the current node, this is a parse
- * error. In any case, proceed with the algorithm as
- * written in the following steps. */
- // XERROR: implement me
-
- /* 2. Let the furthest block be the topmost node in the
- stack of open elements that is lower in the stack
- than the formatting element, and is not an element in
- the phrasing or formatting categories. There might
- not be one. */
- $fe_s_pos = array_search($formatting_element, $this->stack, true);
- $length = count($this->stack);
-
- for($s = $fe_s_pos + 1; $s < $length; $s++) {
- $category = $this->getElementCategory($this->stack[$s]);
-
- if($category !== self::PHRASING && $category !== self::FORMATTING) {
- $furthest_block = $this->stack[$s];
- break;
- }
- }
-
- /* 3. If there is no furthest block, then the UA must
- skip the subsequent steps and instead just pop all
- the nodes from the bottom of the stack of open
- elements, from the current node up to the formatting
- element, and remove the formatting element from the
- list of active formatting elements. */
- if(!isset($furthest_block)) {
- for($n = $length - 1; $n >= $fe_s_pos; $n--) {
- array_pop($this->stack);
- }
-
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
- break;
- }
-
- /* 4. Let the common ancestor be the element
- immediately above the formatting element in the stack
- of open elements. */
- $common_ancestor = $this->stack[$fe_s_pos - 1];
-
- /* 5. Let a bookmark note the position of the
- formatting element in the list of active formatting
- elements relative to the elements on either side
- of it in the list. */
- $bookmark = $fe_af_pos;
-
- /* 6. Let node and last node be the furthest block.
- Follow these steps: */
- $node = $furthest_block;
- $last_node = $furthest_block;
-
- while(true) {
- for($n = array_search($node, $this->stack, true) - 1; $n >= 0; $n--) {
- /* 6.1 Let node be the element immediately
- prior to node in the stack of open elements. */
- $node = $this->stack[$n];
-
- /* 6.2 If node is not in the list of active
- formatting elements, then remove node from
- the stack of open elements and then go back
- to step 1. */
- if(!in_array($node, $this->a_formatting, true)) {
- array_splice($this->stack, $n, 1);
-
- } else {
- break;
- }
- }
-
- /* 6.3 Otherwise, if node is the formatting
- element, then go to the next step in the overall
- algorithm. */
- if($node === $formatting_element) {
- break;
-
- /* 6.4 Otherwise, if last node is the furthest
- block, then move the aforementioned bookmark to
- be immediately after the node in the list of
- active formatting elements. */
- } elseif($last_node === $furthest_block) {
- $bookmark = array_search($node, $this->a_formatting, true) + 1;
- }
-
- /* 6.5 Create an element for the token for which
- * the element node was created, replace the entry
- * for node in the list of active formatting
- * elements with an entry for the new element,
- * replace the entry for node in the stack of open
- * elements with an entry for the new element, and
- * let node be the new element. */
- // we don't know what the token is anymore
- $clone = $node->cloneNode();
- $a_pos = array_search($node, $this->a_formatting, true);
- $s_pos = array_search($node, $this->stack, true);
- $this->a_formatting[$a_pos] = $clone;
- $this->stack[$s_pos] = $clone;
- $node = $clone;
-
- /* 6.6 Insert last node into node, first removing
- it from its previous parent node if any. */
- if($last_node->parentNode !== null) {
- $last_node->parentNode->removeChild($last_node);
- }
-
- $node->appendChild($last_node);
-
- /* 6.7 Let last node be node. */
- $last_node = $node;
-
- /* 6.8 Return to step 1 of this inner set of steps. */
- }
-
- /* 7. If the common ancestor node is a table, tbody,
- * tfoot, thead, or tr element, then, foster parent
- * whatever last node ended up being in the previous
- * step, first removing it from its previous parent
- * node if any. */
- if ($last_node->parentNode) { // common step
- $last_node->parentNode->removeChild($last_node);
- }
- if (in_array($common_ancestor->tagName, array('table', 'tbody', 'tfoot', 'thead', 'tr'))) {
- $this->fosterParent($last_node);
- /* Otherwise, append whatever last node ended up being
- * in the previous step to the common ancestor node,
- * first removing it from its previous parent node if
- * any. */
- } else {
- $common_ancestor->appendChild($last_node);
- }
-
- /* 8. Create an element for the token for which the
- * formatting element was created. */
- $clone = $formatting_element->cloneNode();
-
- /* 9. Take all of the child nodes of the furthest
- block and append them to the element created in the
- last step. */
- while($furthest_block->hasChildNodes()) {
- $child = $furthest_block->firstChild;
- $furthest_block->removeChild($child);
- $clone->appendChild($child);
- }
-
- /* 10. Append that clone to the furthest block. */
- $furthest_block->appendChild($clone);
-
- /* 11. Remove the formatting element from the list
- of active formatting elements, and insert the new element
- into the list of active formatting elements at the
- position of the aforementioned bookmark. */
- $fe_af_pos = array_search($formatting_element, $this->a_formatting, true);
- array_splice($this->a_formatting, $fe_af_pos, 1);
-
- $af_part1 = array_slice($this->a_formatting, 0, $bookmark - 1);
- $af_part2 = array_slice($this->a_formatting, $bookmark);
- $this->a_formatting = array_merge($af_part1, array($clone), $af_part2);
-
- /* 12. Remove the formatting element from the stack
- of open elements, and insert the new element into the stack
- of open elements immediately below the position of the
- furthest block in that stack. */
- $fe_s_pos = array_search($formatting_element, $this->stack, true);
- array_splice($this->stack, $fe_s_pos, 1);
-
- $fb_s_pos = array_search($furthest_block, $this->stack, true);
- $s_part1 = array_slice($this->stack, 0, $fb_s_pos + 1);
- $s_part2 = array_slice($this->stack, $fb_s_pos + 1);
- $this->stack = array_merge($s_part1, array($clone), $s_part2);
-
- /* 13. Jump back to step 1 in this series of steps. */
- unset($formatting_element, $fe_af_pos, $fe_s_pos, $furthest_block);
- }
- break;
-
- case 'applet': case 'button': case 'marquee': case 'object':
- /* If the stack of open elements has an element in scope whose
- tag name matches the tag name of the token, then generate implied
- tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with the same
- tag name as the token, then this is a parse error. */
- // XERROR: implement logic
-
- /* Pop elements from the stack of open elements until
- * an element with the same tag name as the token has
- * been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== $token['name']);
-
- /* Clear the list of active formatting elements up to the
- * last marker. */
- $keys = array_keys($this->a_formatting, self::MARKER, true);
- $marker = end($keys);
-
- for($n = count($this->a_formatting) - 1; $n > $marker; $n--) {
- array_pop($this->a_formatting);
- }
- } else {
- // parse error
- }
- break;
-
- case 'br':
- // Parse error
- $this->emitToken(array(
- 'name' => 'br',
- 'type' => HTML5_Tokenizer::STARTTAG,
- ));
- break;
-
- /* An end tag token not covered by the previous entries */
- default:
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- /* Initialise node to be the current node (the bottommost
- node of the stack). */
- $node = $this->stack[$n];
-
- /* If node has the same tag name as the end tag token,
- then: */
- if($token['name'] === $node->tagName) {
- /* Generate implied end tags. */
- $this->generateImpliedEndTags();
-
- /* If the tag name of the end tag token does not
- match the tag name of the current node, this is a
- parse error. */
- // XERROR: implement this
-
- /* Pop all the nodes from the current node up to
- node, including node, then stop these steps. */
- // XSKETCHY
- do {
- $pop = array_pop($this->stack);
- } while ($pop !== $node);
- break;
-
- } else {
- $category = $this->getElementCategory($node);
-
- if($category !== self::FORMATTING && $category !== self::PHRASING) {
- /* Otherwise, if node is in neither the formatting
- category nor the phrasing category, then this is a
- parse error. Stop this algorithm. The end tag token
- is ignored. */
- $this->ignored = true;
- break;
- // parse error
- }
- }
- /* Set node to the previous entry in the stack of open elements. Loop. */
- }
- break;
- }
- break;
- }
- break;
-
- case self::IN_CDATA_RCDATA:
- if (
- $token['type'] === HTML5_Tokenizer::CHARACTER ||
- $token['type'] === HTML5_Tokenizer::SPACECHARACTER
- ) {
- $this->insertText($token['data']);
- } elseif ($token['type'] === HTML5_Tokenizer::EOF) {
- // parse error
- /* If the current node is a script element, mark the script
- * element as "already executed". */
- // probably not necessary
- array_pop($this->stack);
- $this->mode = $this->original_mode;
- $this->emitToken($token);
- } elseif ($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'script') {
- array_pop($this->stack);
- $this->mode = $this->original_mode;
- // we're ignoring all of the execution stuff
- } elseif ($token['type'] === HTML5_Tokenizer::ENDTAG) {
- array_pop($this->stack);
- $this->mode = $this->original_mode;
- }
- break;
-
- case self::IN_TABLE:
- $clear = array('html', 'table');
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER &&
- /* If the current table is tainted, then act as described in
- * the "anything else" entry below. */
- // Note: hsivonen has a test that fails due to this line
- // because he wants to convince Hixie not to do taint
- !$this->currentTableIsTainted()) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
-
- /* A start tag whose tag name is "caption" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'caption') {
- /* Clear the stack back to a table context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
-
- /* Insert an HTML element for the token, then switch the
- insertion mode to "in caption". */
- $this->insertElement($token);
- $this->mode = self::IN_CAPTION;
-
- /* A start tag whose tag name is "colgroup" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'colgroup') {
- /* Clear the stack back to a table context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert an HTML element for the token, then switch the
- insertion mode to "in column group". */
- $this->insertElement($token);
- $this->mode = self::IN_COLUMN_GROUP;
-
- /* A start tag whose tag name is "col" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'col') {
- $this->emitToken(array(
- 'name' => 'colgroup',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
-
- $this->emitToken($token);
-
- /* A start tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && in_array($token['name'],
- array('tbody', 'tfoot', 'thead'))) {
- /* Clear the stack back to a table context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert an HTML element for the token, then switch the insertion
- mode to "in table body". */
- $this->insertElement($token);
- $this->mode = self::IN_TABLE_BODY;
-
- /* A start tag whose tag name is one of: "td", "th", "tr" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- in_array($token['name'], array('td', 'th', 'tr'))) {
- /* Act as if a start tag token with the tag name "tbody" had been
- seen, then reprocess the current token. */
- $this->emitToken(array(
- 'name' => 'tbody',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
-
- $this->emitToken($token);
-
- /* A start tag whose tag name is "table" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'table') {
- /* Parse error. Act as if an end tag token with the tag name "table"
- had been seen, then, if that token wasn't ignored, reprocess the
- current token. */
- $this->emitToken(array(
- 'name' => 'table',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- if (!$this->ignored) $this->emitToken($token);
-
- /* An end tag whose tag name is "table" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'table') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (fragment case) */
- if(!$this->elementInScope($token['name'], true)) {
- $this->ignored = true;
-
- /* Otherwise: */
- } else {
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== 'table');
-
- /* Reset the insertion mode appropriately. */
- $this->resetInsertionMode();
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'tbody', 'td',
- 'tfoot', 'th', 'thead', 'tr'))) {
- // Parse error. Ignore the token.
-
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- ($token['name'] === 'style' || $token['name'] === 'script')) {
- $this->processWithRulesFor($token, self::IN_HEAD);
-
- } elseif ($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'input' &&
- // assignment is intentional
- /* If the token does not have an attribute with the name "type", or
- * if it does, but that attribute's value is not an ASCII
- * case-insensitive match for the string "hidden", then: act as
- * described in the "anything else" entry below. */
- ($type = $this->getAttr($token, 'type')) && strtolower($type) === 'hidden') {
- // I.e., if its an input with the type attribute == 'hidden'
- /* Otherwise */
- // parse error
- $this->insertElement($token);
- array_pop($this->stack);
- } elseif ($token['type'] === HTML5_Tokenizer::EOF) {
- /* If the current node is not the root html element, then this is a parse error. */
- if (end($this->stack)->tagName !== 'html') {
- // Note: It can only be the current node in the fragment case.
- // parse error
- }
- /* Stop parsing. */
- /* Anything else */
- } else {
- /* Parse error. Process the token as if the insertion mode was "in
- body", with the following exception: */
-
- $old = $this->foster_parent;
- $this->foster_parent = true;
- $this->processWithRulesFor($token, self::IN_BODY);
- $this->foster_parent = $old;
- }
- break;
-
- case self::IN_CAPTION:
- /* An end tag whose tag name is "caption" */
- if($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'caption') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (fragment case) */
- if(!$this->elementInScope($token['name'], true)) {
- $this->ignored = true;
- // Ignore
-
- /* Otherwise: */
- } else {
- /* Generate implied end tags. */
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not a caption element, then this
- is a parse error. */
- // XERROR: implement
-
- /* Pop elements from this stack until a caption element has
- been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== 'caption');
-
- /* Clear the list of active formatting elements up to the last
- marker. */
- $this->clearTheActiveFormattingElementsUpToTheLastMarker();
-
- /* Switch the insertion mode to "in table". */
- $this->mode = self::IN_TABLE;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr", or an end tag whose tag
- name is "table" */
- } elseif(($token['type'] === HTML5_Tokenizer::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) || ($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'table')) {
- /* Parse error. Act as if an end tag with the tag name "caption"
- had been seen, then, if that token wasn't ignored, reprocess the
- current token. */
- $this->emitToken(array(
- 'name' => 'caption',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- if (!$this->ignored) $this->emitToken($token);
-
- /* An end tag whose tag name is one of: "body", "col", "colgroup",
- "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && in_array($token['name'],
- array('body', 'col', 'colgroup', 'html', 'tbody', 'tfoot', 'th',
- 'thead', 'tr'))) {
- // Parse error. Ignore the token.
- $this->ignored = true;
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in body". */
- $this->processWithRulesFor($token, self::IN_BODY);
- }
- break;
-
- case self::IN_COLUMN_GROUP:
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertToken($token['data']);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
-
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html') {
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* A start tag whose tag name is "col" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'col') {
- /* Insert a col element for the token. Immediately pop the current
- node off the stack of open elements. */
- $this->insertElement($token);
- array_pop($this->stack);
- // XERROR: Acknowledge the token's self-closing flag, if it is set.
-
- /* An end tag whose tag name is "colgroup" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'colgroup') {
- /* If the current node is the root html element, then this is a
- parse error, ignore the token. (fragment case) */
- if(end($this->stack)->tagName === 'html') {
- $this->ignored = true;
-
- /* Otherwise, pop the current node (which will be a colgroup
- element) from the stack of open elements. Switch the insertion
- mode to "in table". */
- } else {
- array_pop($this->stack);
- $this->mode = self::IN_TABLE;
- }
-
- /* An end tag whose tag name is "col" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'col') {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
-
- /* An end-of-file token */
- /* If the current node is the root html element */
- } elseif($token['type'] === HTML5_Tokenizer::EOF && end($this->stack)->tagName === 'html') {
- /* Stop parsing */
-
- /* Anything else */
- } else {
- /* Act as if an end tag with the tag name "colgroup" had been seen,
- and then, if that token wasn't ignored, reprocess the current token. */
- $this->emitToken(array(
- 'name' => 'colgroup',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- if (!$this->ignored) $this->emitToken($token);
- }
- break;
-
- case self::IN_TABLE_BODY:
- $clear = array('tbody', 'tfoot', 'thead', 'html');
-
- /* A start tag whose tag name is "tr" */
- if($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'tr') {
- /* Clear the stack back to a table body context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert a tr element for the token, then switch the insertion
- mode to "in row". */
- $this->insertElement($token);
- $this->mode = self::IN_ROW;
-
- /* A start tag whose tag name is one of: "th", "td" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- ($token['name'] === 'th' || $token['name'] === 'td')) {
- /* Parse error. Act as if a start tag with the tag name "tr" had
- been seen, then reprocess the current token. */
- $this->emitToken(array(
- 'name' => 'tr',
- 'type' => HTML5_Tokenizer::STARTTAG,
- 'attr' => array()
- ));
-
- $this->emitToken($token);
-
- /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- in_array($token['name'], array('tbody', 'tfoot', 'thead'))) {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. */
- if(!$this->elementInScope($token['name'], true)) {
- // Parse error
- $this->ignored = true;
-
- /* Otherwise: */
- } else {
- /* Clear the stack back to a table body context. */
- $this->clearStackToTableContext($clear);
-
- /* Pop the current node from the stack of open elements. Switch
- the insertion mode to "in table". */
- array_pop($this->stack);
- $this->mode = self::IN_TABLE;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "tfoot", "thead", or an end tag whose tag name is "table" */
- } elseif(($token['type'] === HTML5_Tokenizer::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'tfoot', 'thead'))) ||
- ($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'table')) {
- /* If the stack of open elements does not have a tbody, thead, or
- tfoot element in table scope, this is a parse error. Ignore the
- token. (fragment case) */
- if(!$this->elementInScope(array('tbody', 'thead', 'tfoot'), true)) {
- // parse error
- $this->ignored = true;
-
- /* Otherwise: */
- } else {
- /* Clear the stack back to a table body context. */
- $this->clearStackToTableContext($clear);
-
- /* Act as if an end tag with the same tag name as the current
- node ("tbody", "tfoot", or "thead") had been seen, then
- reprocess the current token. */
- $this->emitToken(array(
- 'name' => end($this->stack)->tagName,
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- $this->emitToken($token);
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "td", "th", "tr" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr'))) {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in table". */
- $this->processWithRulesFor($token, self::IN_TABLE);
- }
- break;
-
- case self::IN_ROW:
- $clear = array('tr', 'html');
-
- /* A start tag whose tag name is one of: "th", "td" */
- if($token['type'] === HTML5_Tokenizer::STARTTAG &&
- ($token['name'] === 'th' || $token['name'] === 'td')) {
- /* Clear the stack back to a table row context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert an HTML element for the token, then switch the insertion
- mode to "in cell". */
- $this->insertElement($token);
- $this->mode = self::IN_CELL;
-
- /* Insert a marker at the end of the list of active formatting
- elements. */
- $this->a_formatting[] = self::MARKER;
-
- /* An end tag whose tag name is "tr" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'tr') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (fragment case) */
- if(!$this->elementInScope($token['name'], true)) {
- // Ignore.
- $this->ignored = true;
-
- /* Otherwise: */
- } else {
- /* Clear the stack back to a table row context. */
- $this->clearStackToTableContext($clear);
-
- /* Pop the current node (which will be a tr element) from the
- stack of open elements. Switch the insertion mode to "in table
- body". */
- array_pop($this->stack);
- $this->mode = self::IN_TABLE_BODY;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "tfoot", "thead", "tr" or an end tag whose tag name is "table" */
- } elseif(($token['type'] === HTML5_Tokenizer::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'tfoot', 'thead', 'tr'))) ||
- ($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'table')) {
- /* Act as if an end tag with the tag name "tr" had been seen, then,
- if that token wasn't ignored, reprocess the current token. */
- $this->emitToken(array(
- 'name' => 'tr',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- if (!$this->ignored) $this->emitToken($token);
-
- /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- in_array($token['name'], array('tbody', 'tfoot', 'thead'))) {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. */
- if(!$this->elementInScope($token['name'], true)) {
- $this->ignored = true;
-
- /* Otherwise: */
- } else {
- /* Otherwise, act as if an end tag with the tag name "tr" had
- been seen, then reprocess the current token. */
- $this->emitToken(array(
- 'name' => 'tr',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- $this->emitToken($token);
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "td", "th" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th'))) {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in table". */
- $this->processWithRulesFor($token, self::IN_TABLE);
- }
- break;
-
- case self::IN_CELL:
- /* An end tag whose tag name is one of: "td", "th" */
- if($token['type'] === HTML5_Tokenizer::ENDTAG &&
- ($token['name'] === 'td' || $token['name'] === 'th')) {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as that of the token, then this is a
- parse error and the token must be ignored. */
- if(!$this->elementInScope($token['name'], true)) {
- $this->ignored = true;
-
- /* Otherwise: */
- } else {
- /* Generate implied end tags, except for elements with the same
- tag name as the token. */
- $this->generateImpliedEndTags(array($token['name']));
-
- /* Now, if the current node is not an element with the same tag
- name as the token, then this is a parse error. */
- // XERROR: Implement parse error code
-
- /* Pop elements from this stack until an element with the same
- tag name as the token has been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== $token['name']);
-
- /* Clear the list of active formatting elements up to the last
- marker. */
- $this->clearTheActiveFormattingElementsUpToTheLastMarker();
-
- /* Switch the insertion mode to "in row". (The current node
- will be a tr element at this point.) */
- $this->mode = self::IN_ROW;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) {
- /* If the stack of open elements does not have a td or th element
- in table scope, then this is a parse error; ignore the token.
- (fragment case) */
- if(!$this->elementInScope(array('td', 'th'), true)) {
- // parse error
- $this->ignored = true;
-
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
- } else {
- $this->closeCell();
- $this->emitToken($token);
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html'))) {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
-
- /* An end tag whose tag name is one of: "table", "tbody", "tfoot",
- "thead", "tr" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && in_array($token['name'],
- array('table', 'tbody', 'tfoot', 'thead', 'tr'))) {
- /* If the stack of open elements does not have a td or th element
- in table scope, then this is a parse error; ignore the token.
- (innerHTML case) */
- if(!$this->elementInScope(array('td', 'th'), true)) {
- // Parse error
- $this->ignored = true;
-
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
- } else {
- $this->closeCell();
- $this->emitToken($token);
- }
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in body". */
- $this->processWithRulesFor($token, self::IN_BODY);
- }
- break;
-
- case self::IN_SELECT:
- /* Handle the token as follows: */
-
- /* A character token */
- if(
- $token['type'] === HTML5_Tokenizer::CHARACTER ||
- $token['type'] === HTML5_Tokenizer::SPACECHARACTER
- ) {
- /* Append the token's character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
-
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html') {
- $this->processWithRulesFor($token, self::INBODY);
-
- /* A start tag token whose tag name is "option" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'option') {
- /* If the current node is an option element, act as if an end tag
- with the tag name "option" had been seen. */
- if(end($this->stack)->tagName === 'option') {
- $this->emitToken(array(
- 'name' => 'option',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* A start tag token whose tag name is "optgroup" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'optgroup') {
- /* If the current node is an option element, act as if an end tag
- with the tag name "option" had been seen. */
- if(end($this->stack)->tagName === 'option') {
- $this->emitToken(array(
- 'name' => 'option',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* If the current node is an optgroup element, act as if an end tag
- with the tag name "optgroup" had been seen. */
- if(end($this->stack)->tagName === 'optgroup') {
- $this->emitToken(array(
- 'name' => 'optgroup',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* An end tag token whose tag name is "optgroup" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'optgroup') {
- /* First, if the current node is an option element, and the node
- immediately before it in the stack of open elements is an optgroup
- element, then act as if an end tag with the tag name "option" had
- been seen. */
- $elements_in_stack = count($this->stack);
-
- if($this->stack[$elements_in_stack - 1]->tagName === 'option' &&
- $this->stack[$elements_in_stack - 2]->tagName === 'optgroup') {
- $this->emitToken(array(
- 'name' => 'option',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- }
-
- /* If the current node is an optgroup element, then pop that node
- from the stack of open elements. Otherwise, this is a parse error,
- ignore the token. */
- if(end($this->stack)->tagName === 'optgroup') {
- array_pop($this->stack);
- } else {
- // parse error
- $this->ignored = true;
- }
-
- /* An end tag token whose tag name is "option" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'option') {
- /* If the current node is an option element, then pop that node
- from the stack of open elements. Otherwise, this is a parse error,
- ignore the token. */
- if(end($this->stack)->tagName === 'option') {
- array_pop($this->stack);
- } else {
- // parse error
- $this->ignored = true;
- }
-
- /* An end tag whose tag name is "select" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'select') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (fragment case) */
- if(!$this->elementInScope($token['name'], true)) {
- $this->ignored = true;
- // parse error
-
- /* Otherwise: */
- } else {
- /* Pop elements from the stack of open elements until a select
- element has been popped from the stack. */
- do {
- $node = array_pop($this->stack);
- } while ($node->tagName !== 'select');
-
- /* Reset the insertion mode appropriately. */
- $this->resetInsertionMode();
- }
-
- /* A start tag whose tag name is "select" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'select') {
- /* Parse error. Act as if the token had been an end tag with the
- tag name "select" instead. */
- $this->emitToken(array(
- 'name' => 'select',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- ($token['name'] === 'input' || $token['name'] === 'textarea')) {
- // parse error
- $this->emitToken(array(
- 'name' => 'select',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
- $this->emitToken($token);
-
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'script') {
- $this->processWithRulesFor($token, self::IN_HEAD);
-
- } elseif($token['type'] === HTML5_Tokenizer::EOF) {
- // XERROR: If the current node is not the root html element, then this is a parse error.
- /* Stop parsing */
-
- /* Anything else */
- } else {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
- }
- break;
-
- case self::IN_SELECT_IN_TABLE:
-
- if($token['type'] === HTML5_Tokenizer::STARTTAG &&
- in_array($token['name'], array('caption', 'table', 'tbody',
- 'tfoot', 'thead', 'tr', 'td', 'th'))) {
- // parse error
- $this->emitToken(array(
- 'name' => 'select',
- 'type' => HTML5_Tokenizer::ENDTAG,
- ));
- $this->emitToken($token);
-
- /* An end tag whose tag name is one of: "caption", "table", "tbody",
- "tfoot", "thead", "tr", "td", "th" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- in_array($token['name'], array('caption', 'table', 'tbody', 'tfoot', 'thead', 'tr', 'td', 'th'))) {
- /* Parse error. */
- // parse error
-
- /* If the stack of open elements has an element in table scope with
- the same tag name as that of the token, then act as if an end tag
- with the tag name "select" had been seen, and reprocess the token.
- Otherwise, ignore the token. */
- if($this->elementInScope($token['name'], true)) {
- $this->emitToken(array(
- 'name' => 'select',
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- $this->emitToken($token);
- } else {
- $this->ignored = true;
- }
- } else {
- $this->processWithRulesFor($token, self::IN_SELECT);
- }
- break;
-
- case self::IN_FOREIGN_CONTENT:
- if ($token['type'] === HTML5_Tokenizer::CHARACTER ||
- $token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- $this->insertText($token['data']);
- } elseif ($token['type'] === HTML5_Tokenizer::COMMENT) {
- $this->insertComment($token['data']);
- } elseif ($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // XERROR: parse error
- } elseif ($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'script' && end($this->stack)->tagName === 'script' &&
- end($this->stack)->namespaceURI === self::NS_SVG) {
- array_pop($this->stack);
- // a bunch of script running mumbo jumbo
- } elseif (
- ($token['type'] === HTML5_Tokenizer::STARTTAG &&
- ((
- $token['name'] !== 'mglyph' &&
- $token['name'] !== 'malignmark' &&
- end($this->stack)->namespaceURI === self::NS_MATHML &&
- in_array(end($this->stack)->tagName, array('mi', 'mo', 'mn', 'ms', 'mtext'))
- ) ||
- (
- $token['name'] === 'svg' &&
- end($this->stack)->namespaceURI === self::NS_MATHML &&
- end($this->stack)->tagName === 'annotation-xml'
- ) ||
- (
- end($this->stack)->namespaceURI === self::NS_SVG &&
- in_array(end($this->stack)->tagName, array('foreignObject', 'desc', 'title'))
- ) ||
- (
- // XSKETCHY
- end($this->stack)->namespaceURI === self::NS_HTML
- ))
- ) || $token['type'] === HTML5_Tokenizer::ENDTAG
- ) {
- $this->processWithRulesFor($token, $this->secondary_mode);
- /* If, after doing so, the insertion mode is still "in foreign
- * content", but there is no element in scope that has a namespace
- * other than the HTML namespace, switch the insertion mode to the
- * secondary insertion mode. */
- if ($this->mode === self::IN_FOREIGN_CONTENT) {
- $found = false;
- // this basically duplicates elementInScope()
- for ($i = count($this->stack) - 1; $i >= 0; $i--) {
- $node = $this->stack[$i];
- if ($node->namespaceURI !== self::NS_HTML) {
- $found = true;
- break;
- } elseif (in_array($node->tagName, array('table', 'html',
- 'applet', 'caption', 'td', 'th', 'button', 'marquee',
- 'object')) || ($node->tagName === 'foreignObject' &&
- $node->namespaceURI === self::NS_SVG)) {
- break;
- }
- }
- if (!$found) {
- $this->mode = $this->secondary_mode;
- }
- }
- } elseif ($token['type'] === HTML5_Tokenizer::EOF || (
- $token['type'] === HTML5_Tokenizer::STARTTAG &&
- (in_array($token['name'], array('b', "big", "blockquote", "body", "br",
- "center", "code", "dd", "div", "dl", "dt", "em", "embed", "h1", "h2",
- "h3", "h4", "h5", "h6", "head", "hr", "i", "img", "li", "listing",
- "menu", "meta", "nobr", "ol", "p", "pre", "ruby", "s", "small",
- "span", "strong", "strike", "sub", "sup", "table", "tt", "u", "ul",
- "var")) || ($token['name'] === 'font' && ($this->getAttr($token, 'color') ||
- $this->getAttr($token, 'face') || $this->getAttr($token, 'size')))))) {
- // XERROR: parse error
- do {
- $node = array_pop($this->stack);
- } while ($node->namespaceURI !== self::NS_HTML);
- $this->stack[] = $node;
- $this->mode = $this->secondary_mode;
- $this->emitToken($token);
- } elseif ($token['type'] === HTML5_Tokenizer::STARTTAG) {
- static $svg_lookup = array(
- 'altglyph' => 'altGlyph',
- 'altglyphdef' => 'altGlyphDef',
- 'altglyphitem' => 'altGlyphItem',
- 'animatecolor' => 'animateColor',
- 'animatemotion' => 'animateMotion',
- 'animatetransform' => 'animateTransform',
- 'clippath' => 'clipPath',
- 'feblend' => 'feBlend',
- 'fecolormatrix' => 'feColorMatrix',
- 'fecomponenttransfer' => 'feComponentTransfer',
- 'fecomposite' => 'feComposite',
- 'feconvolvematrix' => 'feConvolveMatrix',
- 'fediffuselighting' => 'feDiffuseLighting',
- 'fedisplacementmap' => 'feDisplacementMap',
- 'fedistantlight' => 'feDistantLight',
- 'feflood' => 'feFlood',
- 'fefunca' => 'feFuncA',
- 'fefuncb' => 'feFuncB',
- 'fefuncg' => 'feFuncG',
- 'fefuncr' => 'feFuncR',
- 'fegaussianblur' => 'feGaussianBlur',
- 'feimage' => 'feImage',
- 'femerge' => 'feMerge',
- 'femergenode' => 'feMergeNode',
- 'femorphology' => 'feMorphology',
- 'feoffset' => 'feOffset',
- 'fepointlight' => 'fePointLight',
- 'fespecularlighting' => 'feSpecularLighting',
- 'fespotlight' => 'feSpotLight',
- 'fetile' => 'feTile',
- 'feturbulence' => 'feTurbulence',
- 'foreignobject' => 'foreignObject',
- 'glyphref' => 'glyphRef',
- 'lineargradient' => 'linearGradient',
- 'radialgradient' => 'radialGradient',
- 'textpath' => 'textPath',
- );
- $current = end($this->stack);
- if ($current->namespaceURI === self::NS_MATHML) {
- $token = $this->adjustMathMLAttributes($token);
- }
- if ($current->namespaceURI === self::NS_SVG &&
- isset($svg_lookup[$token['name']])) {
- $token['name'] = $svg_lookup[$token['name']];
- }
- if ($current->namespaceURI === self::NS_SVG) {
- $token = $this->adjustSVGAttributes($token);
- }
- $token = $this->adjustForeignAttributes($token);
- $this->insertForeignElement($token, $current->namespaceURI);
- if (isset($token['self-closing'])) {
- array_pop($this->stack);
- // XERROR: acknowledge self-closing flag
- }
- }
- break;
-
- case self::AFTER_BODY:
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Process the token as it would be processed if the insertion mode
- was "in body". */
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the first element in the stack of open
- elements (the html element), with the data attribute set to the
- data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- $this->stack[0]->appendChild($comment);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
-
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html') {
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* An end tag with the tag name "html" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG && $token['name'] === 'html') {
- /* If the parser was originally created as part of the HTML
- * fragment parsing algorithm, this is a parse error; ignore
- * the token. (fragment case) */
- $this->ignored = true;
- // XERROR: implement this
-
- $this->mode = self::AFTER_AFTER_BODY;
-
- } elseif($token['type'] === HTML5_Tokenizer::EOF) {
- /* Stop parsing */
-
- /* Anything else */
- } else {
- /* Parse error. Set the insertion mode to "in body" and reprocess
- the token. */
- $this->mode = self::IN_BODY;
- $this->emitToken($token);
- }
- break;
-
- case self::IN_FRAMESET:
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
-
- /* A start tag with the tag name "frameset" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'frameset') {
- $this->insertElement($token);
-
- /* An end tag with the tag name "frameset" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'frameset') {
- /* If the current node is the root html element, then this is a
- parse error; ignore the token. (fragment case) */
- if(end($this->stack)->tagName === 'html') {
- $this->ignored = true;
- // Parse error
-
- } else {
- /* Otherwise, pop the current node from the stack of open
- elements. */
- array_pop($this->stack);
-
- /* If the parser was not originally created as part of the HTML
- * fragment parsing algorithm (fragment case), and the current
- * node is no longer a frameset element, then switch the
- * insertion mode to "after frameset". */
- $this->mode = self::AFTER_FRAMESET;
- }
-
- /* A start tag with the tag name "frame" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'frame') {
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
-
- // XERROR: Acknowledge the token's self-closing flag, if it is set.
-
- /* A start tag with the tag name "noframes" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'noframes') {
- /* Process the token using the rules for the "in head" insertion mode. */
- $this->processwithRulesFor($token, self::IN_HEAD);
-
- } elseif($token['type'] === HTML5_Tokenizer::EOF) {
- // XERROR: If the current node is not the root html element, then this is a parse error.
- /* Stop parsing */
- /* Anything else */
- } else {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
- }
- break;
-
- case self::AFTER_FRAMESET:
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */
- if($token['type'] === HTML5_Tokenizer::SPACECHARACTER) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE) {
- // parse error
-
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html') {
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* An end tag with the tag name "html" */
- } elseif($token['type'] === HTML5_Tokenizer::ENDTAG &&
- $token['name'] === 'html') {
- $this->mode = self::AFTER_AFTER_FRAMESET;
-
- /* A start tag with the tag name "noframes" */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG &&
- $token['name'] === 'noframes') {
- $this->processWithRulesFor($token, self::IN_HEAD);
-
- } elseif($token['type'] === HTML5_Tokenizer::EOF) {
- /* Stop parsing */
-
- /* Anything else */
- } else {
- /* Parse error. Ignore the token. */
- $this->ignored = true;
- }
- break;
-
- case self::AFTER_AFTER_BODY:
- /* A comment token */
- if($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the Document object with the data
- attribute set to the data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- $this->dom->appendChild($comment);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE ||
- $token['type'] === HTML5_Tokenizer::SPACECHARACTER ||
- ($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html')) {
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* An end-of-file token */
- } elseif($token['type'] === HTML5_Tokenizer::EOF) {
- /* OMG DONE!! */
- } else {
- // parse error
- $this->mode = self::IN_BODY;
- $this->emitToken($token);
- }
- break;
-
- case self::AFTER_AFTER_FRAMESET:
- /* A comment token */
- if($token['type'] === HTML5_Tokenizer::COMMENT) {
- /* Append a Comment node to the Document object with the data
- attribute set to the data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- $this->dom->appendChild($comment);
-
- } elseif($token['type'] === HTML5_Tokenizer::DOCTYPE ||
- $token['type'] === HTML5_Tokenizer::SPACECHARACTER ||
- ($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'html')) {
- $this->processWithRulesFor($token, self::IN_BODY);
-
- /* An end-of-file token */
- } elseif($token['type'] === HTML5_Tokenizer::EOF) {
- /* OMG DONE!! */
- } elseif($token['type'] === HTML5_Tokenizer::STARTTAG && $token['name'] === 'nofrmaes') {
- $this->processWithRulesFor($token, self::IN_HEAD);
- } else {
- // parse error
- }
- break;
- }
- // end funky indenting
- }
-
- private function insertElement($token, $append = true) {
- $el = $this->dom->createElementNS(self::NS_HTML, $token['name']);
-
- if (!empty($token['attr'])) {
- foreach($token['attr'] as $attr) {
-
- // mike@macgirvin.com 2011-11-17, check attribute name for
- // validity (ignoring extenders and combiners) as illegal chars in names
- // causes everything to abort
-
- $valid = preg_match('/^[a-zA-Z\_\:]([\-a-zA-Z0-9\_\:\.]+$)/',$attr['name'],$matches);
- if($attr['name'] && (!$el->hasAttribute($attr['name'])) && ($valid)) {
- $el->setAttribute($attr['name'], $attr['value']);
- }
- }
- }
- if ($append) {
- $this->appendToRealParent($el);
- $this->stack[] = $el;
- }
-
- return $el;
- }
-
- private function insertText($data) {
- if ($data === '') return;
- if ($this->ignore_lf_token) {
- if ($data[0] === "\n") {
- $data = substr($data, 1);
- if ($data === false) return;
- }
- }
- $text = $this->dom->createTextNode($data);
- $this->appendToRealParent($text);
- }
-
- private function insertComment($data) {
- $comment = $this->dom->createComment($data);
- $this->appendToRealParent($comment);
- }
-
- private function appendToRealParent($node) {
- // this is only for the foster_parent case
- /* If the current node is a table, tbody, tfoot, thead, or tr
- element, then, whenever a node would be inserted into the current
- node, it must instead be inserted into the foster parent element. */
- if(!$this->foster_parent || !in_array(end($this->stack)->tagName,
- array('table', 'tbody', 'tfoot', 'thead', 'tr'))) {
- end($this->stack)->appendChild($node);
- } else {
- $this->fosterParent($node);
- }
- }
-
- private function elementInScope($el, $table = false) {
- if(is_array($el)) {
- foreach($el as $element) {
- if($this->elementInScope($element, $table)) {
- return true;
- }
- }
-
- return false;
- }
-
- $leng = count($this->stack);
-
- for($n = 0; $n < $leng; $n++) {
- /* 1. Initialise node to be the current node (the bottommost node of
- the stack). */
- $node = $this->stack[$leng - 1 - $n];
-
- if($node->tagName === $el) {
- /* 2. If node is the target node, terminate in a match state. */
- return true;
-
- // these are the common states for "in scope" and "in table scope"
- } elseif($node->tagName === 'table' || $node->tagName === 'html') {
- return false;
-
- // these are only valid for "in scope"
- } elseif(!$table &&
- (in_array($node->tagName, array('applet', 'caption', 'td',
- 'th', 'button', 'marquee', 'object')) ||
- $node->tagName === 'foreignObject' && $node->namespaceURI === self::NS_SVG)) {
- return false;
- }
-
- /* Otherwise, set node to the previous entry in the stack of open
- elements and return to step 2. (This will never fail, since the loop
- will always terminate in the previous step if the top of the stack
- is reached.) */
- }
- }
-
- private function reconstructActiveFormattingElements() {
- /* 1. If there are no entries in the list of active formatting elements,
- then there is nothing to reconstruct; stop this algorithm. */
- $formatting_elements = count($this->a_formatting);
-
- if($formatting_elements === 0) {
- return false;
- }
-
- /* 3. Let entry be the last (most recently added) element in the list
- of active formatting elements. */
- $entry = end($this->a_formatting);
-
- /* 2. If the last (most recently added) entry in the list of active
- formatting elements is a marker, or if it is an element that is in the
- stack of open elements, then there is nothing to reconstruct; stop this
- algorithm. */
- if($entry === self::MARKER || in_array($entry, $this->stack, true)) {
- return false;
- }
-
- for($a = $formatting_elements - 1; $a >= 0; true) {
- /* 4. If there are no entries before entry in the list of active
- formatting elements, then jump to step 8. */
- if($a === 0) {
- $step_seven = false;
- break;
- }
-
- /* 5. Let entry be the entry one earlier than entry in the list of
- active formatting elements. */
- $a--;
- $entry = $this->a_formatting[$a];
-
- /* 6. If entry is neither a marker nor an element that is also in
- thetack of open elements, go to step 4. */
- if($entry === self::MARKER || in_array($entry, $this->stack, true)) {
- break;
- }
- }
-
- while(true) {
- /* 7. Let entry be the element one later than entry in the list of
- active formatting elements. */
- if(isset($step_seven) && $step_seven === true) {
- $a++;
- $entry = $this->a_formatting[$a];
- }
-
- /* 8. Perform a shallow clone of the element entry to obtain clone. */
- $clone = $entry->cloneNode();
-
- /* 9. Append clone to the current node and push it onto the stack
- of open elements so that it is the new current node. */
- $this->appendToRealParent($clone);
- $this->stack[] = $clone;
-
- /* 10. Replace the entry for entry in the list with an entry for
- clone. */
- $this->a_formatting[$a] = $clone;
-
- /* 11. If the entry for clone in the list of active formatting
- elements is not the last entry in the list, return to step 7. */
- if(end($this->a_formatting) !== $clone) {
- $step_seven = true;
- } else {
- break;
- }
- }
- }
-
- private function clearTheActiveFormattingElementsUpToTheLastMarker() {
- /* When the steps below require the UA to clear the list of active
- formatting elements up to the last marker, the UA must perform the
- following steps: */
-
- while(true) {
- /* 1. Let entry be the last (most recently added) entry in the list
- of active formatting elements. */
- $entry = end($this->a_formatting);
-
- /* 2. Remove entry from the list of active formatting elements. */
- array_pop($this->a_formatting);
-
- /* 3. If entry was a marker, then stop the algorithm at this point.
- The list has been cleared up to the last marker. */
- if($entry === self::MARKER) {
- break;
- }
- }
- }
-
- private function generateImpliedEndTags($exclude = array()) {
- /* When the steps below require the UA to generate implied end tags,
- then, if the current node is a dd element, a dt element, an li element,
- a p element, a td element, a th element, or a tr element, the UA must
- act as if an end tag with the respective tag name had been seen and
- then generate implied end tags again. */
- $node = end($this->stack);
- $elements = array_diff(array('dd', 'dt', 'li', 'p', 'td', 'th', 'tr'), $exclude);
-
- while(in_array(end($this->stack)->tagName, $elements)) {
- array_pop($this->stack);
- }
- }
-
- private function getElementCategory($node) {
- if (!is_object($node)) debug_print_backtrace();
- $name = $node->tagName;
- if(in_array($name, $this->special))
- return self::SPECIAL;
-
- elseif(in_array($name, $this->scoping))
- return self::SCOPING;
-
- elseif(in_array($name, $this->formatting))
- return self::FORMATTING;
-
- else
- return self::PHRASING;
- }
-
- private function clearStackToTableContext($elements) {
- /* When the steps above require the UA to clear the stack back to a
- table context, it means that the UA must, while the current node is not
- a table element or an html element, pop elements from the stack of open
- elements. */
- while(true) {
- $name = end($this->stack)->tagName;
-
- if(in_array($name, $elements)) {
- break;
- } else {
- array_pop($this->stack);
- }
- }
- }
-
- private function resetInsertionMode($context = null) {
- /* 1. Let last be false. */
- $last = false;
- $leng = count($this->stack);
-
- for($n = $leng - 1; $n >= 0; $n--) {
- /* 2. Let node be the last node in the stack of open elements. */
- $node = $this->stack[$n];
-
- /* 3. If node is the first node in the stack of open elements, then
- * set last to true and set node to the context element. (fragment
- * case) */
- if($this->stack[0]->isSameNode($node)) {
- $last = true;
- $node = $context;
- }
-
- /* 4. If node is a select element, then switch the insertion mode to
- "in select" and abort these steps. (fragment case) */
- if($node->tagName === 'select') {
- $this->mode = self::IN_SELECT;
- break;
-
- /* 5. If node is a td or th element, then switch the insertion mode
- to "in cell" and abort these steps. */
- } elseif($node->tagName === 'td' || $node->nodeName === 'th') {
- $this->mode = self::IN_CELL;
- break;
-
- /* 6. If node is a tr element, then switch the insertion mode to
- "in row" and abort these steps. */
- } elseif($node->tagName === 'tr') {
- $this->mode = self::IN_ROW;
- break;
-
- /* 7. If node is a tbody, thead, or tfoot element, then switch the
- insertion mode to "in table body" and abort these steps. */
- } elseif(in_array($node->tagName, array('tbody', 'thead', 'tfoot'))) {
- $this->mode = self::IN_TABLE_BODY;
- break;
-
- /* 8. If node is a caption element, then switch the insertion mode
- to "in caption" and abort these steps. */
- } elseif($node->tagName === 'caption') {
- $this->mode = self::IN_CAPTION;
- break;
-
- /* 9. If node is a colgroup element, then switch the insertion mode
- to "in column group" and abort these steps. (innerHTML case) */
- } elseif($node->tagName === 'colgroup') {
- $this->mode = self::IN_COLUMN_GROUP;
- break;
-
- /* 10. If node is a table element, then switch the insertion mode
- to "in table" and abort these steps. */
- } elseif($node->tagName === 'table') {
- $this->mode = self::IN_TABLE;
- break;
-
- /* 11. If node is an element from the MathML namespace or the SVG
- * namespace, then switch the insertion mode to "in foreign
- * content", let the secondary insertion mode be "in body", and
- * abort these steps. */
- } elseif($node->namespaceURI === self::NS_SVG ||
- $node->namespaceURI === self::NS_MATHML) {
- $this->mode = self::IN_FOREIGN_CONTENT;
- $this->secondary_mode = self::IN_BODY;
- break;
-
- /* 12. If node is a head element, then switch the insertion mode
- to "in body" ("in body"! not "in head"!) and abort these steps.
- (fragment case) */
- } elseif($node->tagName === 'head') {
- $this->mode = self::IN_BODY;
- break;
-
- /* 13. If node is a body element, then switch the insertion mode to
- "in body" and abort these steps. */
- } elseif($node->tagName === 'body') {
- $this->mode = self::IN_BODY;
- break;
-
- /* 14. If node is a frameset element, then switch the insertion
- mode to "in frameset" and abort these steps. (fragment case) */
- } elseif($node->tagName === 'frameset') {
- $this->mode = self::IN_FRAMESET;
- break;
-
- /* 15. If node is an html element, then: if the head element
- pointer is null, switch the insertion mode to "before head",
- otherwise, switch the insertion mode to "after head". In either
- case, abort these steps. (fragment case) */
- } elseif($node->tagName === 'html') {
- $this->mode = ($this->head_pointer === null)
- ? self::BEFORE_HEAD
- : self::AFTER_HEAD;
-
- break;
-
- /* 16. If last is true, then set the insertion mode to "in body"
- and abort these steps. (fragment case) */
- } elseif($last) {
- $this->mode = self::IN_BODY;
- break;
- }
- }
- }
-
- private function closeCell() {
- /* If the stack of open elements has a td or th element in table scope,
- then act as if an end tag token with that tag name had been seen. */
- foreach(array('td', 'th') as $cell) {
- if($this->elementInScope($cell, true)) {
- $this->emitToken(array(
- 'name' => $cell,
- 'type' => HTML5_Tokenizer::ENDTAG
- ));
-
- break;
- }
- }
- }
-
- private function processWithRulesFor($token, $mode) {
- /* "using the rules for the m insertion mode", where m is one of these
- * modes, the user agent must use the rules described under the m
- * insertion mode's section, but must leave the insertion mode
- * unchanged unless the rules in m themselves switch the insertion mode
- * to a new value. */
- return $this->emitToken($token, $mode);
- }
-
- private function insertCDATAElement($token) {
- $this->insertElement($token);
- $this->original_mode = $this->mode;
- $this->mode = self::IN_CDATA_RCDATA;
- $this->content_model = HTML5_Tokenizer::CDATA;
- }
-
- private function insertRCDATAElement($token) {
- $this->insertElement($token);
- $this->original_mode = $this->mode;
- $this->mode = self::IN_CDATA_RCDATA;
- $this->content_model = HTML5_Tokenizer::RCDATA;
- }
-
- private function getAttr($token, $key) {
- if (!isset($token['attr'])) return false;
- $ret = false;
- foreach ($token['attr'] as $keypair) {
- if ($keypair['name'] === $key) $ret = $keypair['value'];
- }
- return $ret;
- }
-
- private function getCurrentTable() {
- /* The current table is the last table element in the stack of open
- * elements, if there is one. If there is no table element in the stack
- * of open elements (fragment case), then the current table is the
- * first element in the stack of open elements (the html element). */
- for ($i = count($this->stack) - 1; $i >= 0; $i--) {
- if ($this->stack[$i]->tagName === 'table') {
- return $this->stack[$i];
- }
- }
- return $this->stack[0];
- }
-
- private function getFosterParent() {
- /* The foster parent element is the parent element of the last
- table element in the stack of open elements, if there is a
- table element and it has such a parent element. If there is no
- table element in the stack of open elements (innerHTML case),
- then the foster parent element is the first element in the
- stack of open elements (the html element). Otherwise, if there
- is a table element in the stack of open elements, but the last
- table element in the stack of open elements has no parent, or
- its parent node is not an element, then the foster parent
- element is the element before the last table element in the
- stack of open elements. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->tagName === 'table') {
- $table = $this->stack[$n];
- break;
- }
- }
-
- if(isset($table) && $table->parentNode !== null) {
- return $table->parentNode;
-
- } elseif(!isset($table)) {
- return $this->stack[0];
-
- } elseif(isset($table) && ($table->parentNode === null ||
- $table->parentNode->nodeType !== XML_ELEMENT_NODE)) {
- return $this->stack[$n - 1];
- }
- }
-
- public function fosterParent($node) {
- $foster_parent = $this->getFosterParent();
- $table = $this->getCurrentTable(); // almost equivalent to last table element, except it can be html
- /* When a node node is to be foster parented, the node node must be
- * inserted into the foster parent element, and the current table must
- * be marked as tainted. (Once the current table has been tainted,
- * whitespace characters are inserted into the foster parent element
- * instead of the current node.) */
- $table->tainted = true;
- /* If the foster parent element is the parent element of the last table
- * element in the stack of open elements, then node must be inserted
- * immediately before the last table element in the stack of open
- * elements in the foster parent element; otherwise, node must be
- * appended to the foster parent element. */
- if ($table->tagName === 'table' && $table->parentNode->isSameNode($foster_parent)) {
- $foster_parent->insertBefore($node, $table);
- } else {
- $foster_parent->appendChild($node);
- }
- }
-
- /**
- * For debugging, prints the stack
- */
- private function printStack() {
- $names = array();
- foreach ($this->stack as $i => $element) {
- $names[] = $element->tagName;
- }
- echo " -> stack [" . implode(', ', $names) . "]\n";
- }
-
- /**
- * For debugging, prints active formatting elements
- */
- private function printActiveFormattingElements() {
- if (!$this->a_formatting) return;
- $names = array();
- foreach ($this->a_formatting as $node) {
- if ($node === self::MARKER) $names[] = 'MARKER';
- else $names[] = $node->tagName;
- }
- echo " -> active formatting [" . implode(', ', $names) . "]\n";
- }
-
- public function currentTableIsTainted() {
- return !empty($this->getCurrentTable()->tainted);
- }
-
- /**
- * Sets up the tree constructor for building a fragment.
- */
- public function setupContext($context = null) {
- $this->fragment = true;
- if ($context) {
- $context = $this->dom->createElementNS(self::NS_HTML, $context);
- /* 4.1. Set the HTML parser's tokenization stage's content model
- * flag according to the context element, as follows: */
- switch ($context->tagName) {
- case 'title': case 'textarea':
- $this->content_model = HTML5_Tokenizer::RCDATA;
- break;
- case 'style': case 'script': case 'xmp': case 'iframe':
- case 'noembed': case 'noframes':
- $this->content_model = HTML5_Tokenizer::CDATA;
- break;
- case 'noscript':
- // XSCRIPT: assuming scripting is enabled
- $this->content_model = HTML5_Tokenizer::CDATA;
- break;
- case 'plaintext':
- $this->content_model = HTML5_Tokenizer::PLAINTEXT;
- break;
- }
- /* 4.2. Let root be a new html element with no attributes. */
- $root = $this->dom->createElementNS(self::NS_HTML, 'html');
- $this->root = $root;
- /* 4.3 Append the element root to the Document node created above. */
- $this->dom->appendChild($root);
- /* 4.4 Set up the parser's stack of open elements so that it
- * contains just the single element root. */
- $this->stack = array($root);
- /* 4.5 Reset the parser's insertion mode appropriately. */
- $this->resetInsertionMode($context);
- /* 4.6 Set the parser's form element pointer to the nearest node
- * to the context element that is a form element (going straight up
- * the ancestor chain, and including the element itself, if it is a
- * form element), or, if there is no such form element, to null. */
- $node = $context;
- do {
- if ($node->tagName === 'form') {
- $this->form_pointer = $node;
- break;
- }
- } while ($node = $node->parentNode);
- }
- }
-
- public function adjustMathMLAttributes($token) {
- foreach ($token['attr'] as &$kp) {
- if ($kp['name'] === 'definitionurl') {
- $kp['name'] = 'definitionURL';
- }
- }
- return $token;
- }
-
- public function adjustSVGAttributes($token) {
- static $lookup = array(
- 'attributename' => 'attributeName',
- 'attributetype' => 'attributeType',
- 'basefrequency' => 'baseFrequency',
- 'baseprofile' => 'baseProfile',
- 'calcmode' => 'calcMode',
- 'clippathunits' => 'clipPathUnits',
- 'contentscripttype' => 'contentScriptType',
- 'contentstyletype' => 'contentStyleType',
- 'diffuseconstant' => 'diffuseConstant',
- 'edgemode' => 'edgeMode',
- 'externalresourcesrequired' => 'externalResourcesRequired',
- 'filterres' => 'filterRes',
- 'filterunits' => 'filterUnits',
- 'glyphref' => 'glyphRef',
- 'gradienttransform' => 'gradientTransform',
- 'gradientunits' => 'gradientUnits',
- 'kernelmatrix' => 'kernelMatrix',
- 'kernelunitlength' => 'kernelUnitLength',
- 'keypoints' => 'keyPoints',
- 'keysplines' => 'keySplines',
- 'keytimes' => 'keyTimes',
- 'lengthadjust' => 'lengthAdjust',
- 'limitingconeangle' => 'limitingConeAngle',
- 'markerheight' => 'markerHeight',
- 'markerunits' => 'markerUnits',
- 'markerwidth' => 'markerWidth',
- 'maskcontentunits' => 'maskContentUnits',
- 'maskunits' => 'maskUnits',
- 'numoctaves' => 'numOctaves',
- 'pathlength' => 'pathLength',
- 'patterncontentunits' => 'patternContentUnits',
- 'patterntransform' => 'patternTransform',
- 'patternunits' => 'patternUnits',
- 'pointsatx' => 'pointsAtX',
- 'pointsaty' => 'pointsAtY',
- 'pointsatz' => 'pointsAtZ',
- 'preservealpha' => 'preserveAlpha',
- 'preserveaspectratio' => 'preserveAspectRatio',
- 'primitiveunits' => 'primitiveUnits',
- 'refx' => 'refX',
- 'refy' => 'refY',
- 'repeatcount' => 'repeatCount',
- 'repeatdur' => 'repeatDur',
- 'requiredextensions' => 'requiredExtensions',
- 'requiredfeatures' => 'requiredFeatures',
- 'specularconstant' => 'specularConstant',
- 'specularexponent' => 'specularExponent',
- 'spreadmethod' => 'spreadMethod',
- 'startoffset' => 'startOffset',
- 'stddeviation' => 'stdDeviation',
- 'stitchtiles' => 'stitchTiles',
- 'surfacescale' => 'surfaceScale',
- 'systemlanguage' => 'systemLanguage',
- 'tablevalues' => 'tableValues',
- 'targetx' => 'targetX',
- 'targety' => 'targetY',
- 'textlength' => 'textLength',
- 'viewbox' => 'viewBox',
- 'viewtarget' => 'viewTarget',
- 'xchannelselector' => 'xChannelSelector',
- 'ychannelselector' => 'yChannelSelector',
- 'zoomandpan' => 'zoomAndPan',
- );
- foreach ($token['attr'] as &$kp) {
- if (isset($lookup[$kp['name']])) {
- $kp['name'] = $lookup[$kp['name']];
- }
- }
- return $token;
- }
-
- public function adjustForeignAttributes($token) {
- static $lookup = array(
- 'xlink:actuate' => array('xlink', 'actuate', self::NS_XLINK),
- 'xlink:arcrole' => array('xlink', 'arcrole', self::NS_XLINK),
- 'xlink:href' => array('xlink', 'href', self::NS_XLINK),
- 'xlink:role' => array('xlink', 'role', self::NS_XLINK),
- 'xlink:show' => array('xlink', 'show', self::NS_XLINK),
- 'xlink:title' => array('xlink', 'title', self::NS_XLINK),
- 'xlink:type' => array('xlink', 'type', self::NS_XLINK),
- 'xml:base' => array('xml', 'base', self::NS_XML),
- 'xml:lang' => array('xml', 'lang', self::NS_XML),
- 'xml:space' => array('xml', 'space', self::NS_XML),
- 'xmlns' => array(null, 'xmlns', self::NS_XMLNS),
- 'xmlns:xlink' => array('xmlns', 'xlink', self::NS_XMLNS),
- );
- foreach ($token['attr'] as &$kp) {
- if (isset($lookup[$kp['name']])) {
- $kp['name'] = $lookup[$kp['name']];
- }
- }
- return $token;
- }
-
- public function insertForeignElement($token, $namespaceURI) {
- $el = $this->dom->createElementNS($namespaceURI, $token['name']);
- if (!empty($token['attr'])) {
- foreach ($token['attr'] as $kp) {
- $attr = $kp['name'];
- if (is_array($attr)) {
- $ns = $attr[2];
- $attr = $attr[1];
- } else {
- $ns = self::NS_HTML;
- }
- if (!$el->hasAttributeNS($ns, $attr)) {
- // XSKETCHY: work around godawful libxml bug
- if ($ns === self::NS_XLINK) {
- $el->setAttribute('xlink:'.$attr, $kp['value']);
- } elseif ($ns === self::NS_HTML) {
- // Another godawful libxml bug
- $el->setAttribute($attr, $kp['value']);
- } else {
- $el->setAttributeNS($ns, $attr, $kp['value']);
- }
- }
- }
- }
- $this->appendToRealParent($el);
- $this->stack[] = $el;
- // XERROR: see below
- /* If the newly created element has an xmlns attribute in the XMLNS
- * namespace whose value is not exactly the same as the element's
- * namespace, that is a parse error. Similarly, if the newly created
- * element has an xmlns:xlink attribute in the XMLNS namespace whose
- * value is not the XLink Namespace, that is a parse error. */
- }
-
- public function save() {
- $this->dom->normalize();
- if (!$this->fragment) {
- return $this->dom;
- } else {
- if ($this->root) {
- return $this->root->childNodes;
- } else {
- return $this->dom->childNodes;
- }
- }
- }
-}
-
diff --git a/library/HTML5/named-character-references.ser b/library/HTML5/named-character-references.ser
deleted file mode 100644
index 3004c4b91..000000000
--- a/library/HTML5/named-character-references.ser
+++ /dev/null
@@ -1 +0,0 @@
-a:2137:{s:6:"AElig;";i:198;s:5:"AElig";i:198;s:4:"AMP;";i:38;s:3:"AMP";i:38;s:7:"Aacute;";i:193;s:6:"Aacute";i:193;s:7:"Abreve;";i:258;s:6:"Acirc;";i:194;s:5:"Acirc";i:194;s:4:"Acy;";i:1040;s:4:"Afr;";i:120068;s:7:"Agrave;";i:192;s:6:"Agrave";i:192;s:6:"Alpha;";i:913;s:6:"Amacr;";i:256;s:4:"And;";i:10835;s:6:"Aogon;";i:260;s:5:"Aopf;";i:120120;s:14:"ApplyFunction;";i:8289;s:6:"Aring;";i:197;s:5:"Aring";i:197;s:5:"Ascr;";i:119964;s:7:"Assign;";i:8788;s:7:"Atilde;";i:195;s:6:"Atilde";i:195;s:5:"Auml;";i:196;s:4:"Auml";i:196;s:10:"Backslash;";i:8726;s:5:"Barv;";i:10983;s:7:"Barwed;";i:8966;s:4:"Bcy;";i:1041;s:8:"Because;";i:8757;s:11:"Bernoullis;";i:8492;s:5:"Beta;";i:914;s:4:"Bfr;";i:120069;s:5:"Bopf;";i:120121;s:6:"Breve;";i:728;s:5:"Bscr;";i:8492;s:7:"Bumpeq;";i:8782;s:5:"CHcy;";i:1063;s:5:"COPY;";i:169;s:4:"COPY";i:169;s:7:"Cacute;";i:262;s:4:"Cap;";i:8914;s:21:"CapitalDifferentialD;";i:8517;s:8:"Cayleys;";i:8493;s:7:"Ccaron;";i:268;s:7:"Ccedil;";i:199;s:6:"Ccedil";i:199;s:6:"Ccirc;";i:264;s:8:"Cconint;";i:8752;s:5:"Cdot;";i:266;s:8:"Cedilla;";i:184;s:10:"CenterDot;";i:183;s:4:"Cfr;";i:8493;s:4:"Chi;";i:935;s:10:"CircleDot;";i:8857;s:12:"CircleMinus;";i:8854;s:11:"CirclePlus;";i:8853;s:12:"CircleTimes;";i:8855;s:25:"ClockwiseContourIntegral;";i:8754;s:22:"CloseCurlyDoubleQuote;";i:8221;s:16:"CloseCurlyQuote;";i:8217;s:6:"Colon;";i:8759;s:7:"Colone;";i:10868;s:10:"Congruent;";i:8801;s:7:"Conint;";i:8751;s:16:"ContourIntegral;";i:8750;s:5:"Copf;";i:8450;s:10:"Coproduct;";i:8720;s:32:"CounterClockwiseContourIntegral;";i:8755;s:6:"Cross;";i:10799;s:5:"Cscr;";i:119966;s:4:"Cup;";i:8915;s:7:"CupCap;";i:8781;s:3:"DD;";i:8517;s:9:"DDotrahd;";i:10513;s:5:"DJcy;";i:1026;s:5:"DScy;";i:1029;s:5:"DZcy;";i:1039;s:7:"Dagger;";i:8225;s:5:"Darr;";i:8609;s:6:"Dashv;";i:10980;s:7:"Dcaron;";i:270;s:4:"Dcy;";i:1044;s:4:"Del;";i:8711;s:6:"Delta;";i:916;s:4:"Dfr;";i:120071;s:17:"DiacriticalAcute;";i:180;s:15:"DiacriticalDot;";i:729;s:23:"DiacriticalDoubleAcute;";i:733;s:17:"DiacriticalGrave;";i:96;s:17:"DiacriticalTilde;";i:732;s:8:"Diamond;";i:8900;s:14:"DifferentialD;";i:8518;s:5:"Dopf;";i:120123;s:4:"Dot;";i:168;s:7:"DotDot;";i:8412;s:9:"DotEqual;";i:8784;s:22:"DoubleContourIntegral;";i:8751;s:10:"DoubleDot;";i:168;s:16:"DoubleDownArrow;";i:8659;s:16:"DoubleLeftArrow;";i:8656;s:21:"DoubleLeftRightArrow;";i:8660;s:14:"DoubleLeftTee;";i:10980;s:20:"DoubleLongLeftArrow;";i:10232;s:25:"DoubleLongLeftRightArrow;";i:10234;s:21:"DoubleLongRightArrow;";i:10233;s:17:"DoubleRightArrow;";i:8658;s:15:"DoubleRightTee;";i:8872;s:14:"DoubleUpArrow;";i:8657;s:18:"DoubleUpDownArrow;";i:8661;s:18:"DoubleVerticalBar;";i:8741;s:10:"DownArrow;";i:8595;s:13:"DownArrowBar;";i:10515;s:17:"DownArrowUpArrow;";i:8693;s:10:"DownBreve;";i:785;s:20:"DownLeftRightVector;";i:10576;s:18:"DownLeftTeeVector;";i:10590;s:15:"DownLeftVector;";i:8637;s:18:"DownLeftVectorBar;";i:10582;s:19:"DownRightTeeVector;";i:10591;s:16:"DownRightVector;";i:8641;s:19:"DownRightVectorBar;";i:10583;s:8:"DownTee;";i:8868;s:13:"DownTeeArrow;";i:8615;s:10:"Downarrow;";i:8659;s:5:"Dscr;";i:119967;s:7:"Dstrok;";i:272;s:4:"ENG;";i:330;s:4:"ETH;";i:208;s:3:"ETH";i:208;s:7:"Eacute;";i:201;s:6:"Eacute";i:201;s:7:"Ecaron;";i:282;s:6:"Ecirc;";i:202;s:5:"Ecirc";i:202;s:4:"Ecy;";i:1069;s:5:"Edot;";i:278;s:4:"Efr;";i:120072;s:7:"Egrave;";i:200;s:6:"Egrave";i:200;s:8:"Element;";i:8712;s:6:"Emacr;";i:274;s:17:"EmptySmallSquare;";i:9723;s:21:"EmptyVerySmallSquare;";i:9643;s:6:"Eogon;";i:280;s:5:"Eopf;";i:120124;s:8:"Epsilon;";i:917;s:6:"Equal;";i:10869;s:11:"EqualTilde;";i:8770;s:12:"Equilibrium;";i:8652;s:5:"Escr;";i:8496;s:5:"Esim;";i:10867;s:4:"Eta;";i:919;s:5:"Euml;";i:203;s:4:"Euml";i:203;s:7:"Exists;";i:8707;s:13:"ExponentialE;";i:8519;s:4:"Fcy;";i:1060;s:4:"Ffr;";i:120073;s:18:"FilledSmallSquare;";i:9724;s:22:"FilledVerySmallSquare;";i:9642;s:5:"Fopf;";i:120125;s:7:"ForAll;";i:8704;s:11:"Fouriertrf;";i:8497;s:5:"Fscr;";i:8497;s:5:"GJcy;";i:1027;s:3:"GT;";i:62;s:2:"GT";i:62;s:6:"Gamma;";i:915;s:7:"Gammad;";i:988;s:7:"Gbreve;";i:286;s:7:"Gcedil;";i:290;s:6:"Gcirc;";i:284;s:4:"Gcy;";i:1043;s:5:"Gdot;";i:288;s:4:"Gfr;";i:120074;s:3:"Gg;";i:8921;s:5:"Gopf;";i:120126;s:13:"GreaterEqual;";i:8805;s:17:"GreaterEqualLess;";i:8923;s:17:"GreaterFullEqual;";i:8807;s:15:"GreaterGreater;";i:10914;s:12:"GreaterLess;";i:8823;s:18:"GreaterSlantEqual;";i:10878;s:13:"GreaterTilde;";i:8819;s:5:"Gscr;";i:119970;s:3:"Gt;";i:8811;s:7:"HARDcy;";i:1066;s:6:"Hacek;";i:711;s:4:"Hat;";i:94;s:6:"Hcirc;";i:292;s:4:"Hfr;";i:8460;s:13:"HilbertSpace;";i:8459;s:5:"Hopf;";i:8461;s:15:"HorizontalLine;";i:9472;s:5:"Hscr;";i:8459;s:7:"Hstrok;";i:294;s:13:"HumpDownHump;";i:8782;s:10:"HumpEqual;";i:8783;s:5:"IEcy;";i:1045;s:6:"IJlig;";i:306;s:5:"IOcy;";i:1025;s:7:"Iacute;";i:205;s:6:"Iacute";i:205;s:6:"Icirc;";i:206;s:5:"Icirc";i:206;s:4:"Icy;";i:1048;s:5:"Idot;";i:304;s:4:"Ifr;";i:8465;s:7:"Igrave;";i:204;s:6:"Igrave";i:204;s:3:"Im;";i:8465;s:6:"Imacr;";i:298;s:11:"ImaginaryI;";i:8520;s:8:"Implies;";i:8658;s:4:"Int;";i:8748;s:9:"Integral;";i:8747;s:13:"Intersection;";i:8898;s:15:"InvisibleComma;";i:8291;s:15:"InvisibleTimes;";i:8290;s:6:"Iogon;";i:302;s:5:"Iopf;";i:120128;s:5:"Iota;";i:921;s:5:"Iscr;";i:8464;s:7:"Itilde;";i:296;s:6:"Iukcy;";i:1030;s:5:"Iuml;";i:207;s:4:"Iuml";i:207;s:6:"Jcirc;";i:308;s:4:"Jcy;";i:1049;s:4:"Jfr;";i:120077;s:5:"Jopf;";i:120129;s:5:"Jscr;";i:119973;s:7:"Jsercy;";i:1032;s:6:"Jukcy;";i:1028;s:5:"KHcy;";i:1061;s:5:"KJcy;";i:1036;s:6:"Kappa;";i:922;s:7:"Kcedil;";i:310;s:4:"Kcy;";i:1050;s:4:"Kfr;";i:120078;s:5:"Kopf;";i:120130;s:5:"Kscr;";i:119974;s:5:"LJcy;";i:1033;s:3:"LT;";i:60;s:2:"LT";i:60;s:7:"Lacute;";i:313;s:7:"Lambda;";i:923;s:5:"Lang;";i:10218;s:11:"Laplacetrf;";i:8466;s:5:"Larr;";i:8606;s:7:"Lcaron;";i:317;s:7:"Lcedil;";i:315;s:4:"Lcy;";i:1051;s:17:"LeftAngleBracket;";i:10216;s:10:"LeftArrow;";i:8592;s:13:"LeftArrowBar;";i:8676;s:20:"LeftArrowRightArrow;";i:8646;s:12:"LeftCeiling;";i:8968;s:18:"LeftDoubleBracket;";i:10214;s:18:"LeftDownTeeVector;";i:10593;s:15:"LeftDownVector;";i:8643;s:18:"LeftDownVectorBar;";i:10585;s:10:"LeftFloor;";i:8970;s:15:"LeftRightArrow;";i:8596;s:16:"LeftRightVector;";i:10574;s:8:"LeftTee;";i:8867;s:13:"LeftTeeArrow;";i:8612;s:14:"LeftTeeVector;";i:10586;s:13:"LeftTriangle;";i:8882;s:16:"LeftTriangleBar;";i:10703;s:18:"LeftTriangleEqual;";i:8884;s:17:"LeftUpDownVector;";i:10577;s:16:"LeftUpTeeVector;";i:10592;s:13:"LeftUpVector;";i:8639;s:16:"LeftUpVectorBar;";i:10584;s:11:"LeftVector;";i:8636;s:14:"LeftVectorBar;";i:10578;s:10:"Leftarrow;";i:8656;s:15:"Leftrightarrow;";i:8660;s:17:"LessEqualGreater;";i:8922;s:14:"LessFullEqual;";i:8806;s:12:"LessGreater;";i:8822;s:9:"LessLess;";i:10913;s:15:"LessSlantEqual;";i:10877;s:10:"LessTilde;";i:8818;s:4:"Lfr;";i:120079;s:3:"Ll;";i:8920;s:11:"Lleftarrow;";i:8666;s:7:"Lmidot;";i:319;s:14:"LongLeftArrow;";i:10229;s:19:"LongLeftRightArrow;";i:10231;s:15:"LongRightArrow;";i:10230;s:14:"Longleftarrow;";i:10232;s:19:"Longleftrightarrow;";i:10234;s:15:"Longrightarrow;";i:10233;s:5:"Lopf;";i:120131;s:15:"LowerLeftArrow;";i:8601;s:16:"LowerRightArrow;";i:8600;s:5:"Lscr;";i:8466;s:4:"Lsh;";i:8624;s:7:"Lstrok;";i:321;s:3:"Lt;";i:8810;s:4:"Map;";i:10501;s:4:"Mcy;";i:1052;s:12:"MediumSpace;";i:8287;s:10:"Mellintrf;";i:8499;s:4:"Mfr;";i:120080;s:10:"MinusPlus;";i:8723;s:5:"Mopf;";i:120132;s:5:"Mscr;";i:8499;s:3:"Mu;";i:924;s:5:"NJcy;";i:1034;s:7:"Nacute;";i:323;s:7:"Ncaron;";i:327;s:7:"Ncedil;";i:325;s:4:"Ncy;";i:1053;s:20:"NegativeMediumSpace;";i:8203;s:19:"NegativeThickSpace;";i:8203;s:18:"NegativeThinSpace;";i:8203;s:22:"NegativeVeryThinSpace;";i:8203;s:21:"NestedGreaterGreater;";i:8811;s:15:"NestedLessLess;";i:8810;s:8:"NewLine;";i:10;s:4:"Nfr;";i:120081;s:8:"NoBreak;";i:8288;s:17:"NonBreakingSpace;";i:160;s:5:"Nopf;";i:8469;s:4:"Not;";i:10988;s:13:"NotCongruent;";i:8802;s:10:"NotCupCap;";i:8813;s:21:"NotDoubleVerticalBar;";i:8742;s:11:"NotElement;";i:8713;s:9:"NotEqual;";i:8800;s:10:"NotExists;";i:8708;s:11:"NotGreater;";i:8815;s:16:"NotGreaterEqual;";i:8817;s:15:"NotGreaterLess;";i:8825;s:16:"NotGreaterTilde;";i:8821;s:16:"NotLeftTriangle;";i:8938;s:21:"NotLeftTriangleEqual;";i:8940;s:8:"NotLess;";i:8814;s:13:"NotLessEqual;";i:8816;s:15:"NotLessGreater;";i:8824;s:13:"NotLessTilde;";i:8820;s:12:"NotPrecedes;";i:8832;s:22:"NotPrecedesSlantEqual;";i:8928;s:18:"NotReverseElement;";i:8716;s:17:"NotRightTriangle;";i:8939;s:22:"NotRightTriangleEqual;";i:8941;s:21:"NotSquareSubsetEqual;";i:8930;s:23:"NotSquareSupersetEqual;";i:8931;s:15:"NotSubsetEqual;";i:8840;s:12:"NotSucceeds;";i:8833;s:22:"NotSucceedsSlantEqual;";i:8929;s:17:"NotSupersetEqual;";i:8841;s:9:"NotTilde;";i:8769;s:14:"NotTildeEqual;";i:8772;s:18:"NotTildeFullEqual;";i:8775;s:14:"NotTildeTilde;";i:8777;s:15:"NotVerticalBar;";i:8740;s:5:"Nscr;";i:119977;s:7:"Ntilde;";i:209;s:6:"Ntilde";i:209;s:3:"Nu;";i:925;s:6:"OElig;";i:338;s:7:"Oacute;";i:211;s:6:"Oacute";i:211;s:6:"Ocirc;";i:212;s:5:"Ocirc";i:212;s:4:"Ocy;";i:1054;s:7:"Odblac;";i:336;s:4:"Ofr;";i:120082;s:7:"Ograve;";i:210;s:6:"Ograve";i:210;s:6:"Omacr;";i:332;s:6:"Omega;";i:937;s:8:"Omicron;";i:927;s:5:"Oopf;";i:120134;s:21:"OpenCurlyDoubleQuote;";i:8220;s:15:"OpenCurlyQuote;";i:8216;s:3:"Or;";i:10836;s:5:"Oscr;";i:119978;s:7:"Oslash;";i:216;s:6:"Oslash";i:216;s:7:"Otilde;";i:213;s:6:"Otilde";i:213;s:7:"Otimes;";i:10807;s:5:"Ouml;";i:214;s:4:"Ouml";i:214;s:8:"OverBar;";i:175;s:10:"OverBrace;";i:9182;s:12:"OverBracket;";i:9140;s:16:"OverParenthesis;";i:9180;s:9:"PartialD;";i:8706;s:4:"Pcy;";i:1055;s:4:"Pfr;";i:120083;s:4:"Phi;";i:934;s:3:"Pi;";i:928;s:10:"PlusMinus;";i:177;s:14:"Poincareplane;";i:8460;s:5:"Popf;";i:8473;s:3:"Pr;";i:10939;s:9:"Precedes;";i:8826;s:14:"PrecedesEqual;";i:10927;s:19:"PrecedesSlantEqual;";i:8828;s:14:"PrecedesTilde;";i:8830;s:6:"Prime;";i:8243;s:8:"Product;";i:8719;s:11:"Proportion;";i:8759;s:13:"Proportional;";i:8733;s:5:"Pscr;";i:119979;s:4:"Psi;";i:936;s:5:"QUOT;";i:34;s:4:"QUOT";i:34;s:4:"Qfr;";i:120084;s:5:"Qopf;";i:8474;s:5:"Qscr;";i:119980;s:6:"RBarr;";i:10512;s:4:"REG;";i:174;s:3:"REG";i:174;s:7:"Racute;";i:340;s:5:"Rang;";i:10219;s:5:"Rarr;";i:8608;s:7:"Rarrtl;";i:10518;s:7:"Rcaron;";i:344;s:7:"Rcedil;";i:342;s:4:"Rcy;";i:1056;s:3:"Re;";i:8476;s:15:"ReverseElement;";i:8715;s:19:"ReverseEquilibrium;";i:8651;s:21:"ReverseUpEquilibrium;";i:10607;s:4:"Rfr;";i:8476;s:4:"Rho;";i:929;s:18:"RightAngleBracket;";i:10217;s:11:"RightArrow;";i:8594;s:14:"RightArrowBar;";i:8677;s:20:"RightArrowLeftArrow;";i:8644;s:13:"RightCeiling;";i:8969;s:19:"RightDoubleBracket;";i:10215;s:19:"RightDownTeeVector;";i:10589;s:16:"RightDownVector;";i:8642;s:19:"RightDownVectorBar;";i:10581;s:11:"RightFloor;";i:8971;s:9:"RightTee;";i:8866;s:14:"RightTeeArrow;";i:8614;s:15:"RightTeeVector;";i:10587;s:14:"RightTriangle;";i:8883;s:17:"RightTriangleBar;";i:10704;s:19:"RightTriangleEqual;";i:8885;s:18:"RightUpDownVector;";i:10575;s:17:"RightUpTeeVector;";i:10588;s:14:"RightUpVector;";i:8638;s:17:"RightUpVectorBar;";i:10580;s:12:"RightVector;";i:8640;s:15:"RightVectorBar;";i:10579;s:11:"Rightarrow;";i:8658;s:5:"Ropf;";i:8477;s:13:"RoundImplies;";i:10608;s:12:"Rrightarrow;";i:8667;s:5:"Rscr;";i:8475;s:4:"Rsh;";i:8625;s:12:"RuleDelayed;";i:10740;s:7:"SHCHcy;";i:1065;s:5:"SHcy;";i:1064;s:7:"SOFTcy;";i:1068;s:7:"Sacute;";i:346;s:3:"Sc;";i:10940;s:7:"Scaron;";i:352;s:7:"Scedil;";i:350;s:6:"Scirc;";i:348;s:4:"Scy;";i:1057;s:4:"Sfr;";i:120086;s:15:"ShortDownArrow;";i:8595;s:15:"ShortLeftArrow;";i:8592;s:16:"ShortRightArrow;";i:8594;s:13:"ShortUpArrow;";i:8593;s:6:"Sigma;";i:931;s:12:"SmallCircle;";i:8728;s:5:"Sopf;";i:120138;s:5:"Sqrt;";i:8730;s:7:"Square;";i:9633;s:19:"SquareIntersection;";i:8851;s:13:"SquareSubset;";i:8847;s:18:"SquareSubsetEqual;";i:8849;s:15:"SquareSuperset;";i:8848;s:20:"SquareSupersetEqual;";i:8850;s:12:"SquareUnion;";i:8852;s:5:"Sscr;";i:119982;s:5:"Star;";i:8902;s:4:"Sub;";i:8912;s:7:"Subset;";i:8912;s:12:"SubsetEqual;";i:8838;s:9:"Succeeds;";i:8827;s:14:"SucceedsEqual;";i:10928;s:19:"SucceedsSlantEqual;";i:8829;s:14:"SucceedsTilde;";i:8831;s:9:"SuchThat;";i:8715;s:4:"Sum;";i:8721;s:4:"Sup;";i:8913;s:9:"Superset;";i:8835;s:14:"SupersetEqual;";i:8839;s:7:"Supset;";i:8913;s:6:"THORN;";i:222;s:5:"THORN";i:222;s:6:"TRADE;";i:8482;s:6:"TSHcy;";i:1035;s:5:"TScy;";i:1062;s:4:"Tab;";i:9;s:4:"Tau;";i:932;s:7:"Tcaron;";i:356;s:7:"Tcedil;";i:354;s:4:"Tcy;";i:1058;s:4:"Tfr;";i:120087;s:10:"Therefore;";i:8756;s:6:"Theta;";i:920;s:10:"ThinSpace;";i:8201;s:6:"Tilde;";i:8764;s:11:"TildeEqual;";i:8771;s:15:"TildeFullEqual;";i:8773;s:11:"TildeTilde;";i:8776;s:5:"Topf;";i:120139;s:10:"TripleDot;";i:8411;s:5:"Tscr;";i:119983;s:7:"Tstrok;";i:358;s:7:"Uacute;";i:218;s:6:"Uacute";i:218;s:5:"Uarr;";i:8607;s:9:"Uarrocir;";i:10569;s:6:"Ubrcy;";i:1038;s:7:"Ubreve;";i:364;s:6:"Ucirc;";i:219;s:5:"Ucirc";i:219;s:4:"Ucy;";i:1059;s:7:"Udblac;";i:368;s:4:"Ufr;";i:120088;s:7:"Ugrave;";i:217;s:6:"Ugrave";i:217;s:6:"Umacr;";i:362;s:9:"UnderBar;";i:818;s:11:"UnderBrace;";i:9183;s:13:"UnderBracket;";i:9141;s:17:"UnderParenthesis;";i:9181;s:6:"Union;";i:8899;s:10:"UnionPlus;";i:8846;s:6:"Uogon;";i:370;s:5:"Uopf;";i:120140;s:8:"UpArrow;";i:8593;s:11:"UpArrowBar;";i:10514;s:17:"UpArrowDownArrow;";i:8645;s:12:"UpDownArrow;";i:8597;s:14:"UpEquilibrium;";i:10606;s:6:"UpTee;";i:8869;s:11:"UpTeeArrow;";i:8613;s:8:"Uparrow;";i:8657;s:12:"Updownarrow;";i:8661;s:15:"UpperLeftArrow;";i:8598;s:16:"UpperRightArrow;";i:8599;s:5:"Upsi;";i:978;s:8:"Upsilon;";i:933;s:6:"Uring;";i:366;s:5:"Uscr;";i:119984;s:7:"Utilde;";i:360;s:5:"Uuml;";i:220;s:4:"Uuml";i:220;s:6:"VDash;";i:8875;s:5:"Vbar;";i:10987;s:4:"Vcy;";i:1042;s:6:"Vdash;";i:8873;s:7:"Vdashl;";i:10982;s:4:"Vee;";i:8897;s:7:"Verbar;";i:8214;s:5:"Vert;";i:8214;s:12:"VerticalBar;";i:8739;s:13:"VerticalLine;";i:124;s:18:"VerticalSeparator;";i:10072;s:14:"VerticalTilde;";i:8768;s:14:"VeryThinSpace;";i:8202;s:4:"Vfr;";i:120089;s:5:"Vopf;";i:120141;s:5:"Vscr;";i:119985;s:7:"Vvdash;";i:8874;s:6:"Wcirc;";i:372;s:6:"Wedge;";i:8896;s:4:"Wfr;";i:120090;s:5:"Wopf;";i:120142;s:5:"Wscr;";i:119986;s:4:"Xfr;";i:120091;s:3:"Xi;";i:926;s:5:"Xopf;";i:120143;s:5:"Xscr;";i:119987;s:5:"YAcy;";i:1071;s:5:"YIcy;";i:1031;s:5:"YUcy;";i:1070;s:7:"Yacute;";i:221;s:6:"Yacute";i:221;s:6:"Ycirc;";i:374;s:4:"Ycy;";i:1067;s:4:"Yfr;";i:120092;s:5:"Yopf;";i:120144;s:5:"Yscr;";i:119988;s:5:"Yuml;";i:376;s:5:"ZHcy;";i:1046;s:7:"Zacute;";i:377;s:7:"Zcaron;";i:381;s:4:"Zcy;";i:1047;s:5:"Zdot;";i:379;s:15:"ZeroWidthSpace;";i:8203;s:5:"Zeta;";i:918;s:4:"Zfr;";i:8488;s:5:"Zopf;";i:8484;s:5:"Zscr;";i:119989;s:7:"aacute;";i:225;s:6:"aacute";i:225;s:7:"abreve;";i:259;s:3:"ac;";i:8766;s:4:"acd;";i:8767;s:6:"acirc;";i:226;s:5:"acirc";i:226;s:6:"acute;";i:180;s:5:"acute";i:180;s:4:"acy;";i:1072;s:6:"aelig;";i:230;s:5:"aelig";i:230;s:3:"af;";i:8289;s:4:"afr;";i:120094;s:7:"agrave;";i:224;s:6:"agrave";i:224;s:8:"alefsym;";i:8501;s:6:"aleph;";i:8501;s:6:"alpha;";i:945;s:6:"amacr;";i:257;s:6:"amalg;";i:10815;s:4:"amp;";i:38;s:3:"amp";i:38;s:4:"and;";i:8743;s:7:"andand;";i:10837;s:5:"andd;";i:10844;s:9:"andslope;";i:10840;s:5:"andv;";i:10842;s:4:"ang;";i:8736;s:5:"ange;";i:10660;s:6:"angle;";i:8736;s:7:"angmsd;";i:8737;s:9:"angmsdaa;";i:10664;s:9:"angmsdab;";i:10665;s:9:"angmsdac;";i:10666;s:9:"angmsdad;";i:10667;s:9:"angmsdae;";i:10668;s:9:"angmsdaf;";i:10669;s:9:"angmsdag;";i:10670;s:9:"angmsdah;";i:10671;s:6:"angrt;";i:8735;s:8:"angrtvb;";i:8894;s:9:"angrtvbd;";i:10653;s:7:"angsph;";i:8738;s:6:"angst;";i:8491;s:8:"angzarr;";i:9084;s:6:"aogon;";i:261;s:5:"aopf;";i:120146;s:3:"ap;";i:8776;s:4:"apE;";i:10864;s:7:"apacir;";i:10863;s:4:"ape;";i:8778;s:5:"apid;";i:8779;s:5:"apos;";i:39;s:7:"approx;";i:8776;s:9:"approxeq;";i:8778;s:6:"aring;";i:229;s:5:"aring";i:229;s:5:"ascr;";i:119990;s:4:"ast;";i:42;s:6:"asymp;";i:8776;s:8:"asympeq;";i:8781;s:7:"atilde;";i:227;s:6:"atilde";i:227;s:5:"auml;";i:228;s:4:"auml";i:228;s:9:"awconint;";i:8755;s:6:"awint;";i:10769;s:5:"bNot;";i:10989;s:9:"backcong;";i:8780;s:12:"backepsilon;";i:1014;s:10:"backprime;";i:8245;s:8:"backsim;";i:8765;s:10:"backsimeq;";i:8909;s:7:"barvee;";i:8893;s:7:"barwed;";i:8965;s:9:"barwedge;";i:8965;s:5:"bbrk;";i:9141;s:9:"bbrktbrk;";i:9142;s:6:"bcong;";i:8780;s:4:"bcy;";i:1073;s:6:"bdquo;";i:8222;s:7:"becaus;";i:8757;s:8:"because;";i:8757;s:8:"bemptyv;";i:10672;s:6:"bepsi;";i:1014;s:7:"bernou;";i:8492;s:5:"beta;";i:946;s:5:"beth;";i:8502;s:8:"between;";i:8812;s:4:"bfr;";i:120095;s:7:"bigcap;";i:8898;s:8:"bigcirc;";i:9711;s:7:"bigcup;";i:8899;s:8:"bigodot;";i:10752;s:9:"bigoplus;";i:10753;s:10:"bigotimes;";i:10754;s:9:"bigsqcup;";i:10758;s:8:"bigstar;";i:9733;s:16:"bigtriangledown;";i:9661;s:14:"bigtriangleup;";i:9651;s:9:"biguplus;";i:10756;s:7:"bigvee;";i:8897;s:9:"bigwedge;";i:8896;s:7:"bkarow;";i:10509;s:13:"blacklozenge;";i:10731;s:12:"blacksquare;";i:9642;s:14:"blacktriangle;";i:9652;s:18:"blacktriangledown;";i:9662;s:18:"blacktriangleleft;";i:9666;s:19:"blacktriangleright;";i:9656;s:6:"blank;";i:9251;s:6:"blk12;";i:9618;s:6:"blk14;";i:9617;s:6:"blk34;";i:9619;s:6:"block;";i:9608;s:5:"bnot;";i:8976;s:5:"bopf;";i:120147;s:4:"bot;";i:8869;s:7:"bottom;";i:8869;s:7:"bowtie;";i:8904;s:6:"boxDL;";i:9559;s:6:"boxDR;";i:9556;s:6:"boxDl;";i:9558;s:6:"boxDr;";i:9555;s:5:"boxH;";i:9552;s:6:"boxHD;";i:9574;s:6:"boxHU;";i:9577;s:6:"boxHd;";i:9572;s:6:"boxHu;";i:9575;s:6:"boxUL;";i:9565;s:6:"boxUR;";i:9562;s:6:"boxUl;";i:9564;s:6:"boxUr;";i:9561;s:5:"boxV;";i:9553;s:6:"boxVH;";i:9580;s:6:"boxVL;";i:9571;s:6:"boxVR;";i:9568;s:6:"boxVh;";i:9579;s:6:"boxVl;";i:9570;s:6:"boxVr;";i:9567;s:7:"boxbox;";i:10697;s:6:"boxdL;";i:9557;s:6:"boxdR;";i:9554;s:6:"boxdl;";i:9488;s:6:"boxdr;";i:9484;s:5:"boxh;";i:9472;s:6:"boxhD;";i:9573;s:6:"boxhU;";i:9576;s:6:"boxhd;";i:9516;s:6:"boxhu;";i:9524;s:9:"boxminus;";i:8863;s:8:"boxplus;";i:8862;s:9:"boxtimes;";i:8864;s:6:"boxuL;";i:9563;s:6:"boxuR;";i:9560;s:6:"boxul;";i:9496;s:6:"boxur;";i:9492;s:5:"boxv;";i:9474;s:6:"boxvH;";i:9578;s:6:"boxvL;";i:9569;s:6:"boxvR;";i:9566;s:6:"boxvh;";i:9532;s:6:"boxvl;";i:9508;s:6:"boxvr;";i:9500;s:7:"bprime;";i:8245;s:6:"breve;";i:728;s:7:"brvbar;";i:166;s:6:"brvbar";i:166;s:5:"bscr;";i:119991;s:6:"bsemi;";i:8271;s:5:"bsim;";i:8765;s:6:"bsime;";i:8909;s:5:"bsol;";i:92;s:6:"bsolb;";i:10693;s:5:"bull;";i:8226;s:7:"bullet;";i:8226;s:5:"bump;";i:8782;s:6:"bumpE;";i:10926;s:6:"bumpe;";i:8783;s:7:"bumpeq;";i:8783;s:7:"cacute;";i:263;s:4:"cap;";i:8745;s:7:"capand;";i:10820;s:9:"capbrcup;";i:10825;s:7:"capcap;";i:10827;s:7:"capcup;";i:10823;s:7:"capdot;";i:10816;s:6:"caret;";i:8257;s:6:"caron;";i:711;s:6:"ccaps;";i:10829;s:7:"ccaron;";i:269;s:7:"ccedil;";i:231;s:6:"ccedil";i:231;s:6:"ccirc;";i:265;s:6:"ccups;";i:10828;s:8:"ccupssm;";i:10832;s:5:"cdot;";i:267;s:6:"cedil;";i:184;s:5:"cedil";i:184;s:8:"cemptyv;";i:10674;s:5:"cent;";i:162;s:4:"cent";i:162;s:10:"centerdot;";i:183;s:4:"cfr;";i:120096;s:5:"chcy;";i:1095;s:6:"check;";i:10003;s:10:"checkmark;";i:10003;s:4:"chi;";i:967;s:4:"cir;";i:9675;s:5:"cirE;";i:10691;s:5:"circ;";i:710;s:7:"circeq;";i:8791;s:16:"circlearrowleft;";i:8634;s:17:"circlearrowright;";i:8635;s:9:"circledR;";i:174;s:9:"circledS;";i:9416;s:11:"circledast;";i:8859;s:12:"circledcirc;";i:8858;s:12:"circleddash;";i:8861;s:5:"cire;";i:8791;s:9:"cirfnint;";i:10768;s:7:"cirmid;";i:10991;s:8:"cirscir;";i:10690;s:6:"clubs;";i:9827;s:9:"clubsuit;";i:9827;s:6:"colon;";i:58;s:7:"colone;";i:8788;s:8:"coloneq;";i:8788;s:6:"comma;";i:44;s:7:"commat;";i:64;s:5:"comp;";i:8705;s:7:"compfn;";i:8728;s:11:"complement;";i:8705;s:10:"complexes;";i:8450;s:5:"cong;";i:8773;s:8:"congdot;";i:10861;s:7:"conint;";i:8750;s:5:"copf;";i:120148;s:7:"coprod;";i:8720;s:5:"copy;";i:169;s:4:"copy";i:169;s:7:"copysr;";i:8471;s:6:"crarr;";i:8629;s:6:"cross;";i:10007;s:5:"cscr;";i:119992;s:5:"csub;";i:10959;s:6:"csube;";i:10961;s:5:"csup;";i:10960;s:6:"csupe;";i:10962;s:6:"ctdot;";i:8943;s:8:"cudarrl;";i:10552;s:8:"cudarrr;";i:10549;s:6:"cuepr;";i:8926;s:6:"cuesc;";i:8927;s:7:"cularr;";i:8630;s:8:"cularrp;";i:10557;s:4:"cup;";i:8746;s:9:"cupbrcap;";i:10824;s:7:"cupcap;";i:10822;s:7:"cupcup;";i:10826;s:7:"cupdot;";i:8845;s:6:"cupor;";i:10821;s:7:"curarr;";i:8631;s:8:"curarrm;";i:10556;s:12:"curlyeqprec;";i:8926;s:12:"curlyeqsucc;";i:8927;s:9:"curlyvee;";i:8910;s:11:"curlywedge;";i:8911;s:7:"curren;";i:164;s:6:"curren";i:164;s:15:"curvearrowleft;";i:8630;s:16:"curvearrowright;";i:8631;s:6:"cuvee;";i:8910;s:6:"cuwed;";i:8911;s:9:"cwconint;";i:8754;s:6:"cwint;";i:8753;s:7:"cylcty;";i:9005;s:5:"dArr;";i:8659;s:5:"dHar;";i:10597;s:7:"dagger;";i:8224;s:7:"daleth;";i:8504;s:5:"darr;";i:8595;s:5:"dash;";i:8208;s:6:"dashv;";i:8867;s:8:"dbkarow;";i:10511;s:6:"dblac;";i:733;s:7:"dcaron;";i:271;s:4:"dcy;";i:1076;s:3:"dd;";i:8518;s:8:"ddagger;";i:8225;s:6:"ddarr;";i:8650;s:8:"ddotseq;";i:10871;s:4:"deg;";i:176;s:3:"deg";i:176;s:6:"delta;";i:948;s:8:"demptyv;";i:10673;s:7:"dfisht;";i:10623;s:4:"dfr;";i:120097;s:6:"dharl;";i:8643;s:6:"dharr;";i:8642;s:5:"diam;";i:8900;s:8:"diamond;";i:8900;s:12:"diamondsuit;";i:9830;s:6:"diams;";i:9830;s:4:"die;";i:168;s:8:"digamma;";i:989;s:6:"disin;";i:8946;s:4:"div;";i:247;s:7:"divide;";i:247;s:6:"divide";i:247;s:14:"divideontimes;";i:8903;s:7:"divonx;";i:8903;s:5:"djcy;";i:1106;s:7:"dlcorn;";i:8990;s:7:"dlcrop;";i:8973;s:7:"dollar;";i:36;s:5:"dopf;";i:120149;s:4:"dot;";i:729;s:6:"doteq;";i:8784;s:9:"doteqdot;";i:8785;s:9:"dotminus;";i:8760;s:8:"dotplus;";i:8724;s:10:"dotsquare;";i:8865;s:15:"doublebarwedge;";i:8966;s:10:"downarrow;";i:8595;s:15:"downdownarrows;";i:8650;s:16:"downharpoonleft;";i:8643;s:17:"downharpoonright;";i:8642;s:9:"drbkarow;";i:10512;s:7:"drcorn;";i:8991;s:7:"drcrop;";i:8972;s:5:"dscr;";i:119993;s:5:"dscy;";i:1109;s:5:"dsol;";i:10742;s:7:"dstrok;";i:273;s:6:"dtdot;";i:8945;s:5:"dtri;";i:9663;s:6:"dtrif;";i:9662;s:6:"duarr;";i:8693;s:6:"duhar;";i:10607;s:8:"dwangle;";i:10662;s:5:"dzcy;";i:1119;s:9:"dzigrarr;";i:10239;s:6:"eDDot;";i:10871;s:5:"eDot;";i:8785;s:7:"eacute;";i:233;s:6:"eacute";i:233;s:7:"easter;";i:10862;s:7:"ecaron;";i:283;s:5:"ecir;";i:8790;s:6:"ecirc;";i:234;s:5:"ecirc";i:234;s:7:"ecolon;";i:8789;s:4:"ecy;";i:1101;s:5:"edot;";i:279;s:3:"ee;";i:8519;s:6:"efDot;";i:8786;s:4:"efr;";i:120098;s:3:"eg;";i:10906;s:7:"egrave;";i:232;s:6:"egrave";i:232;s:4:"egs;";i:10902;s:7:"egsdot;";i:10904;s:3:"el;";i:10905;s:9:"elinters;";i:9191;s:4:"ell;";i:8467;s:4:"els;";i:10901;s:7:"elsdot;";i:10903;s:6:"emacr;";i:275;s:6:"empty;";i:8709;s:9:"emptyset;";i:8709;s:7:"emptyv;";i:8709;s:7:"emsp13;";i:8196;s:7:"emsp14;";i:8197;s:5:"emsp;";i:8195;s:4:"eng;";i:331;s:5:"ensp;";i:8194;s:6:"eogon;";i:281;s:5:"eopf;";i:120150;s:5:"epar;";i:8917;s:7:"eparsl;";i:10723;s:6:"eplus;";i:10865;s:5:"epsi;";i:1013;s:8:"epsilon;";i:949;s:6:"epsiv;";i:949;s:7:"eqcirc;";i:8790;s:8:"eqcolon;";i:8789;s:6:"eqsim;";i:8770;s:11:"eqslantgtr;";i:10902;s:12:"eqslantless;";i:10901;s:7:"equals;";i:61;s:7:"equest;";i:8799;s:6:"equiv;";i:8801;s:8:"equivDD;";i:10872;s:9:"eqvparsl;";i:10725;s:6:"erDot;";i:8787;s:6:"erarr;";i:10609;s:5:"escr;";i:8495;s:6:"esdot;";i:8784;s:5:"esim;";i:8770;s:4:"eta;";i:951;s:4:"eth;";i:240;s:3:"eth";i:240;s:5:"euml;";i:235;s:4:"euml";i:235;s:5:"euro;";i:8364;s:5:"excl;";i:33;s:6:"exist;";i:8707;s:12:"expectation;";i:8496;s:13:"exponentiale;";i:8519;s:14:"fallingdotseq;";i:8786;s:4:"fcy;";i:1092;s:7:"female;";i:9792;s:7:"ffilig;";i:64259;s:6:"fflig;";i:64256;s:7:"ffllig;";i:64260;s:4:"ffr;";i:120099;s:6:"filig;";i:64257;s:5:"flat;";i:9837;s:6:"fllig;";i:64258;s:6:"fltns;";i:9649;s:5:"fnof;";i:402;s:5:"fopf;";i:120151;s:7:"forall;";i:8704;s:5:"fork;";i:8916;s:6:"forkv;";i:10969;s:9:"fpartint;";i:10765;s:7:"frac12;";i:189;s:6:"frac12";i:189;s:7:"frac13;";i:8531;s:7:"frac14;";i:188;s:6:"frac14";i:188;s:7:"frac15;";i:8533;s:7:"frac16;";i:8537;s:7:"frac18;";i:8539;s:7:"frac23;";i:8532;s:7:"frac25;";i:8534;s:7:"frac34;";i:190;s:6:"frac34";i:190;s:7:"frac35;";i:8535;s:7:"frac38;";i:8540;s:7:"frac45;";i:8536;s:7:"frac56;";i:8538;s:7:"frac58;";i:8541;s:7:"frac78;";i:8542;s:6:"frasl;";i:8260;s:6:"frown;";i:8994;s:5:"fscr;";i:119995;s:3:"gE;";i:8807;s:4:"gEl;";i:10892;s:7:"gacute;";i:501;s:6:"gamma;";i:947;s:7:"gammad;";i:989;s:4:"gap;";i:10886;s:7:"gbreve;";i:287;s:6:"gcirc;";i:285;s:4:"gcy;";i:1075;s:5:"gdot;";i:289;s:3:"ge;";i:8805;s:4:"gel;";i:8923;s:4:"geq;";i:8805;s:5:"geqq;";i:8807;s:9:"geqslant;";i:10878;s:4:"ges;";i:10878;s:6:"gescc;";i:10921;s:7:"gesdot;";i:10880;s:8:"gesdoto;";i:10882;s:9:"gesdotol;";i:10884;s:7:"gesles;";i:10900;s:4:"gfr;";i:120100;s:3:"gg;";i:8811;s:4:"ggg;";i:8921;s:6:"gimel;";i:8503;s:5:"gjcy;";i:1107;s:3:"gl;";i:8823;s:4:"glE;";i:10898;s:4:"gla;";i:10917;s:4:"glj;";i:10916;s:4:"gnE;";i:8809;s:5:"gnap;";i:10890;s:9:"gnapprox;";i:10890;s:4:"gne;";i:10888;s:5:"gneq;";i:10888;s:6:"gneqq;";i:8809;s:6:"gnsim;";i:8935;s:5:"gopf;";i:120152;s:6:"grave;";i:96;s:5:"gscr;";i:8458;s:5:"gsim;";i:8819;s:6:"gsime;";i:10894;s:6:"gsiml;";i:10896;s:3:"gt;";i:62;s:2:"gt";i:62;s:5:"gtcc;";i:10919;s:6:"gtcir;";i:10874;s:6:"gtdot;";i:8919;s:7:"gtlPar;";i:10645;s:8:"gtquest;";i:10876;s:10:"gtrapprox;";i:10886;s:7:"gtrarr;";i:10616;s:7:"gtrdot;";i:8919;s:10:"gtreqless;";i:8923;s:11:"gtreqqless;";i:10892;s:8:"gtrless;";i:8823;s:7:"gtrsim;";i:8819;s:5:"hArr;";i:8660;s:7:"hairsp;";i:8202;s:5:"half;";i:189;s:7:"hamilt;";i:8459;s:7:"hardcy;";i:1098;s:5:"harr;";i:8596;s:8:"harrcir;";i:10568;s:6:"harrw;";i:8621;s:5:"hbar;";i:8463;s:6:"hcirc;";i:293;s:7:"hearts;";i:9829;s:10:"heartsuit;";i:9829;s:7:"hellip;";i:8230;s:7:"hercon;";i:8889;s:4:"hfr;";i:120101;s:9:"hksearow;";i:10533;s:9:"hkswarow;";i:10534;s:6:"hoarr;";i:8703;s:7:"homtht;";i:8763;s:14:"hookleftarrow;";i:8617;s:15:"hookrightarrow;";i:8618;s:5:"hopf;";i:120153;s:7:"horbar;";i:8213;s:5:"hscr;";i:119997;s:7:"hslash;";i:8463;s:7:"hstrok;";i:295;s:7:"hybull;";i:8259;s:7:"hyphen;";i:8208;s:7:"iacute;";i:237;s:6:"iacute";i:237;s:3:"ic;";i:8291;s:6:"icirc;";i:238;s:5:"icirc";i:238;s:4:"icy;";i:1080;s:5:"iecy;";i:1077;s:6:"iexcl;";i:161;s:5:"iexcl";i:161;s:4:"iff;";i:8660;s:4:"ifr;";i:120102;s:7:"igrave;";i:236;s:6:"igrave";i:236;s:3:"ii;";i:8520;s:7:"iiiint;";i:10764;s:6:"iiint;";i:8749;s:7:"iinfin;";i:10716;s:6:"iiota;";i:8489;s:6:"ijlig;";i:307;s:6:"imacr;";i:299;s:6:"image;";i:8465;s:9:"imagline;";i:8464;s:9:"imagpart;";i:8465;s:6:"imath;";i:305;s:5:"imof;";i:8887;s:6:"imped;";i:437;s:3:"in;";i:8712;s:7:"incare;";i:8453;s:6:"infin;";i:8734;s:9:"infintie;";i:10717;s:7:"inodot;";i:305;s:4:"int;";i:8747;s:7:"intcal;";i:8890;s:9:"integers;";i:8484;s:9:"intercal;";i:8890;s:9:"intlarhk;";i:10775;s:8:"intprod;";i:10812;s:5:"iocy;";i:1105;s:6:"iogon;";i:303;s:5:"iopf;";i:120154;s:5:"iota;";i:953;s:6:"iprod;";i:10812;s:7:"iquest;";i:191;s:6:"iquest";i:191;s:5:"iscr;";i:119998;s:5:"isin;";i:8712;s:6:"isinE;";i:8953;s:8:"isindot;";i:8949;s:6:"isins;";i:8948;s:7:"isinsv;";i:8947;s:6:"isinv;";i:8712;s:3:"it;";i:8290;s:7:"itilde;";i:297;s:6:"iukcy;";i:1110;s:5:"iuml;";i:239;s:4:"iuml";i:239;s:6:"jcirc;";i:309;s:4:"jcy;";i:1081;s:4:"jfr;";i:120103;s:6:"jmath;";i:567;s:5:"jopf;";i:120155;s:5:"jscr;";i:119999;s:7:"jsercy;";i:1112;s:6:"jukcy;";i:1108;s:6:"kappa;";i:954;s:7:"kappav;";i:1008;s:7:"kcedil;";i:311;s:4:"kcy;";i:1082;s:4:"kfr;";i:120104;s:7:"kgreen;";i:312;s:5:"khcy;";i:1093;s:5:"kjcy;";i:1116;s:5:"kopf;";i:120156;s:5:"kscr;";i:120000;s:6:"lAarr;";i:8666;s:5:"lArr;";i:8656;s:7:"lAtail;";i:10523;s:6:"lBarr;";i:10510;s:3:"lE;";i:8806;s:4:"lEg;";i:10891;s:5:"lHar;";i:10594;s:7:"lacute;";i:314;s:9:"laemptyv;";i:10676;s:7:"lagran;";i:8466;s:7:"lambda;";i:955;s:5:"lang;";i:10216;s:6:"langd;";i:10641;s:7:"langle;";i:10216;s:4:"lap;";i:10885;s:6:"laquo;";i:171;s:5:"laquo";i:171;s:5:"larr;";i:8592;s:6:"larrb;";i:8676;s:8:"larrbfs;";i:10527;s:7:"larrfs;";i:10525;s:7:"larrhk;";i:8617;s:7:"larrlp;";i:8619;s:7:"larrpl;";i:10553;s:8:"larrsim;";i:10611;s:7:"larrtl;";i:8610;s:4:"lat;";i:10923;s:7:"latail;";i:10521;s:5:"late;";i:10925;s:6:"lbarr;";i:10508;s:6:"lbbrk;";i:10098;s:7:"lbrace;";i:123;s:7:"lbrack;";i:91;s:6:"lbrke;";i:10635;s:8:"lbrksld;";i:10639;s:8:"lbrkslu;";i:10637;s:7:"lcaron;";i:318;s:7:"lcedil;";i:316;s:6:"lceil;";i:8968;s:5:"lcub;";i:123;s:4:"lcy;";i:1083;s:5:"ldca;";i:10550;s:6:"ldquo;";i:8220;s:7:"ldquor;";i:8222;s:8:"ldrdhar;";i:10599;s:9:"ldrushar;";i:10571;s:5:"ldsh;";i:8626;s:3:"le;";i:8804;s:10:"leftarrow;";i:8592;s:14:"leftarrowtail;";i:8610;s:16:"leftharpoondown;";i:8637;s:14:"leftharpoonup;";i:8636;s:15:"leftleftarrows;";i:8647;s:15:"leftrightarrow;";i:8596;s:16:"leftrightarrows;";i:8646;s:18:"leftrightharpoons;";i:8651;s:20:"leftrightsquigarrow;";i:8621;s:15:"leftthreetimes;";i:8907;s:4:"leg;";i:8922;s:4:"leq;";i:8804;s:5:"leqq;";i:8806;s:9:"leqslant;";i:10877;s:4:"les;";i:10877;s:6:"lescc;";i:10920;s:7:"lesdot;";i:10879;s:8:"lesdoto;";i:10881;s:9:"lesdotor;";i:10883;s:7:"lesges;";i:10899;s:11:"lessapprox;";i:10885;s:8:"lessdot;";i:8918;s:10:"lesseqgtr;";i:8922;s:11:"lesseqqgtr;";i:10891;s:8:"lessgtr;";i:8822;s:8:"lesssim;";i:8818;s:7:"lfisht;";i:10620;s:7:"lfloor;";i:8970;s:4:"lfr;";i:120105;s:3:"lg;";i:8822;s:4:"lgE;";i:10897;s:6:"lhard;";i:8637;s:6:"lharu;";i:8636;s:7:"lharul;";i:10602;s:6:"lhblk;";i:9604;s:5:"ljcy;";i:1113;s:3:"ll;";i:8810;s:6:"llarr;";i:8647;s:9:"llcorner;";i:8990;s:7:"llhard;";i:10603;s:6:"lltri;";i:9722;s:7:"lmidot;";i:320;s:7:"lmoust;";i:9136;s:11:"lmoustache;";i:9136;s:4:"lnE;";i:8808;s:5:"lnap;";i:10889;s:9:"lnapprox;";i:10889;s:4:"lne;";i:10887;s:5:"lneq;";i:10887;s:6:"lneqq;";i:8808;s:6:"lnsim;";i:8934;s:6:"loang;";i:10220;s:6:"loarr;";i:8701;s:6:"lobrk;";i:10214;s:14:"longleftarrow;";i:10229;s:19:"longleftrightarrow;";i:10231;s:11:"longmapsto;";i:10236;s:15:"longrightarrow;";i:10230;s:14:"looparrowleft;";i:8619;s:15:"looparrowright;";i:8620;s:6:"lopar;";i:10629;s:5:"lopf;";i:120157;s:7:"loplus;";i:10797;s:8:"lotimes;";i:10804;s:7:"lowast;";i:8727;s:7:"lowbar;";i:95;s:4:"loz;";i:9674;s:8:"lozenge;";i:9674;s:5:"lozf;";i:10731;s:5:"lpar;";i:40;s:7:"lparlt;";i:10643;s:6:"lrarr;";i:8646;s:9:"lrcorner;";i:8991;s:6:"lrhar;";i:8651;s:7:"lrhard;";i:10605;s:4:"lrm;";i:8206;s:6:"lrtri;";i:8895;s:7:"lsaquo;";i:8249;s:5:"lscr;";i:120001;s:4:"lsh;";i:8624;s:5:"lsim;";i:8818;s:6:"lsime;";i:10893;s:6:"lsimg;";i:10895;s:5:"lsqb;";i:91;s:6:"lsquo;";i:8216;s:7:"lsquor;";i:8218;s:7:"lstrok;";i:322;s:3:"lt;";i:60;s:2:"lt";i:60;s:5:"ltcc;";i:10918;s:6:"ltcir;";i:10873;s:6:"ltdot;";i:8918;s:7:"lthree;";i:8907;s:7:"ltimes;";i:8905;s:7:"ltlarr;";i:10614;s:8:"ltquest;";i:10875;s:7:"ltrPar;";i:10646;s:5:"ltri;";i:9667;s:6:"ltrie;";i:8884;s:6:"ltrif;";i:9666;s:9:"lurdshar;";i:10570;s:8:"luruhar;";i:10598;s:6:"mDDot;";i:8762;s:5:"macr;";i:175;s:4:"macr";i:175;s:5:"male;";i:9794;s:5:"malt;";i:10016;s:8:"maltese;";i:10016;s:4:"map;";i:8614;s:7:"mapsto;";i:8614;s:11:"mapstodown;";i:8615;s:11:"mapstoleft;";i:8612;s:9:"mapstoup;";i:8613;s:7:"marker;";i:9646;s:7:"mcomma;";i:10793;s:4:"mcy;";i:1084;s:6:"mdash;";i:8212;s:14:"measuredangle;";i:8737;s:4:"mfr;";i:120106;s:4:"mho;";i:8487;s:6:"micro;";i:181;s:5:"micro";i:181;s:4:"mid;";i:8739;s:7:"midast;";i:42;s:7:"midcir;";i:10992;s:7:"middot;";i:183;s:6:"middot";i:183;s:6:"minus;";i:8722;s:7:"minusb;";i:8863;s:7:"minusd;";i:8760;s:8:"minusdu;";i:10794;s:5:"mlcp;";i:10971;s:5:"mldr;";i:8230;s:7:"mnplus;";i:8723;s:7:"models;";i:8871;s:5:"mopf;";i:120158;s:3:"mp;";i:8723;s:5:"mscr;";i:120002;s:7:"mstpos;";i:8766;s:3:"mu;";i:956;s:9:"multimap;";i:8888;s:6:"mumap;";i:8888;s:11:"nLeftarrow;";i:8653;s:16:"nLeftrightarrow;";i:8654;s:12:"nRightarrow;";i:8655;s:7:"nVDash;";i:8879;s:7:"nVdash;";i:8878;s:6:"nabla;";i:8711;s:7:"nacute;";i:324;s:4:"nap;";i:8777;s:6:"napos;";i:329;s:8:"napprox;";i:8777;s:6:"natur;";i:9838;s:8:"natural;";i:9838;s:9:"naturals;";i:8469;s:5:"nbsp;";i:160;s:4:"nbsp";i:160;s:5:"ncap;";i:10819;s:7:"ncaron;";i:328;s:7:"ncedil;";i:326;s:6:"ncong;";i:8775;s:5:"ncup;";i:10818;s:4:"ncy;";i:1085;s:6:"ndash;";i:8211;s:3:"ne;";i:8800;s:6:"neArr;";i:8663;s:7:"nearhk;";i:10532;s:6:"nearr;";i:8599;s:8:"nearrow;";i:8599;s:7:"nequiv;";i:8802;s:7:"nesear;";i:10536;s:7:"nexist;";i:8708;s:8:"nexists;";i:8708;s:4:"nfr;";i:120107;s:4:"nge;";i:8817;s:5:"ngeq;";i:8817;s:6:"ngsim;";i:8821;s:4:"ngt;";i:8815;s:5:"ngtr;";i:8815;s:6:"nhArr;";i:8654;s:6:"nharr;";i:8622;s:6:"nhpar;";i:10994;s:3:"ni;";i:8715;s:4:"nis;";i:8956;s:5:"nisd;";i:8954;s:4:"niv;";i:8715;s:5:"njcy;";i:1114;s:6:"nlArr;";i:8653;s:6:"nlarr;";i:8602;s:5:"nldr;";i:8229;s:4:"nle;";i:8816;s:11:"nleftarrow;";i:8602;s:16:"nleftrightarrow;";i:8622;s:5:"nleq;";i:8816;s:6:"nless;";i:8814;s:6:"nlsim;";i:8820;s:4:"nlt;";i:8814;s:6:"nltri;";i:8938;s:7:"nltrie;";i:8940;s:5:"nmid;";i:8740;s:5:"nopf;";i:120159;s:4:"not;";i:172;s:3:"not";i:172;s:6:"notin;";i:8713;s:8:"notinva;";i:8713;s:8:"notinvb;";i:8951;s:8:"notinvc;";i:8950;s:6:"notni;";i:8716;s:8:"notniva;";i:8716;s:8:"notnivb;";i:8958;s:8:"notnivc;";i:8957;s:5:"npar;";i:8742;s:10:"nparallel;";i:8742;s:8:"npolint;";i:10772;s:4:"npr;";i:8832;s:7:"nprcue;";i:8928;s:6:"nprec;";i:8832;s:6:"nrArr;";i:8655;s:6:"nrarr;";i:8603;s:12:"nrightarrow;";i:8603;s:6:"nrtri;";i:8939;s:7:"nrtrie;";i:8941;s:4:"nsc;";i:8833;s:7:"nsccue;";i:8929;s:5:"nscr;";i:120003;s:10:"nshortmid;";i:8740;s:15:"nshortparallel;";i:8742;s:5:"nsim;";i:8769;s:6:"nsime;";i:8772;s:7:"nsimeq;";i:8772;s:6:"nsmid;";i:8740;s:6:"nspar;";i:8742;s:8:"nsqsube;";i:8930;s:8:"nsqsupe;";i:8931;s:5:"nsub;";i:8836;s:6:"nsube;";i:8840;s:10:"nsubseteq;";i:8840;s:6:"nsucc;";i:8833;s:5:"nsup;";i:8837;s:6:"nsupe;";i:8841;s:10:"nsupseteq;";i:8841;s:5:"ntgl;";i:8825;s:7:"ntilde;";i:241;s:6:"ntilde";i:241;s:5:"ntlg;";i:8824;s:14:"ntriangleleft;";i:8938;s:16:"ntrianglelefteq;";i:8940;s:15:"ntriangleright;";i:8939;s:17:"ntrianglerighteq;";i:8941;s:3:"nu;";i:957;s:4:"num;";i:35;s:7:"numero;";i:8470;s:6:"numsp;";i:8199;s:7:"nvDash;";i:8877;s:7:"nvHarr;";i:10500;s:7:"nvdash;";i:8876;s:8:"nvinfin;";i:10718;s:7:"nvlArr;";i:10498;s:7:"nvrArr;";i:10499;s:6:"nwArr;";i:8662;s:7:"nwarhk;";i:10531;s:6:"nwarr;";i:8598;s:8:"nwarrow;";i:8598;s:7:"nwnear;";i:10535;s:3:"oS;";i:9416;s:7:"oacute;";i:243;s:6:"oacute";i:243;s:5:"oast;";i:8859;s:5:"ocir;";i:8858;s:6:"ocirc;";i:244;s:5:"ocirc";i:244;s:4:"ocy;";i:1086;s:6:"odash;";i:8861;s:7:"odblac;";i:337;s:5:"odiv;";i:10808;s:5:"odot;";i:8857;s:7:"odsold;";i:10684;s:6:"oelig;";i:339;s:6:"ofcir;";i:10687;s:4:"ofr;";i:120108;s:5:"ogon;";i:731;s:7:"ograve;";i:242;s:6:"ograve";i:242;s:4:"ogt;";i:10689;s:6:"ohbar;";i:10677;s:4:"ohm;";i:8486;s:5:"oint;";i:8750;s:6:"olarr;";i:8634;s:6:"olcir;";i:10686;s:8:"olcross;";i:10683;s:6:"oline;";i:8254;s:4:"olt;";i:10688;s:6:"omacr;";i:333;s:6:"omega;";i:969;s:8:"omicron;";i:959;s:5:"omid;";i:10678;s:7:"ominus;";i:8854;s:5:"oopf;";i:120160;s:5:"opar;";i:10679;s:6:"operp;";i:10681;s:6:"oplus;";i:8853;s:3:"or;";i:8744;s:6:"orarr;";i:8635;s:4:"ord;";i:10845;s:6:"order;";i:8500;s:8:"orderof;";i:8500;s:5:"ordf;";i:170;s:4:"ordf";i:170;s:5:"ordm;";i:186;s:4:"ordm";i:186;s:7:"origof;";i:8886;s:5:"oror;";i:10838;s:8:"orslope;";i:10839;s:4:"orv;";i:10843;s:5:"oscr;";i:8500;s:7:"oslash;";i:248;s:6:"oslash";i:248;s:5:"osol;";i:8856;s:7:"otilde;";i:245;s:6:"otilde";i:245;s:7:"otimes;";i:8855;s:9:"otimesas;";i:10806;s:5:"ouml;";i:246;s:4:"ouml";i:246;s:6:"ovbar;";i:9021;s:4:"par;";i:8741;s:5:"para;";i:182;s:4:"para";i:182;s:9:"parallel;";i:8741;s:7:"parsim;";i:10995;s:6:"parsl;";i:11005;s:5:"part;";i:8706;s:4:"pcy;";i:1087;s:7:"percnt;";i:37;s:7:"period;";i:46;s:7:"permil;";i:8240;s:5:"perp;";i:8869;s:8:"pertenk;";i:8241;s:4:"pfr;";i:120109;s:4:"phi;";i:966;s:5:"phiv;";i:966;s:7:"phmmat;";i:8499;s:6:"phone;";i:9742;s:3:"pi;";i:960;s:10:"pitchfork;";i:8916;s:4:"piv;";i:982;s:7:"planck;";i:8463;s:8:"planckh;";i:8462;s:7:"plankv;";i:8463;s:5:"plus;";i:43;s:9:"plusacir;";i:10787;s:6:"plusb;";i:8862;s:8:"pluscir;";i:10786;s:7:"plusdo;";i:8724;s:7:"plusdu;";i:10789;s:6:"pluse;";i:10866;s:7:"plusmn;";i:177;s:6:"plusmn";i:177;s:8:"plussim;";i:10790;s:8:"plustwo;";i:10791;s:3:"pm;";i:177;s:9:"pointint;";i:10773;s:5:"popf;";i:120161;s:6:"pound;";i:163;s:5:"pound";i:163;s:3:"pr;";i:8826;s:4:"prE;";i:10931;s:5:"prap;";i:10935;s:6:"prcue;";i:8828;s:4:"pre;";i:10927;s:5:"prec;";i:8826;s:11:"precapprox;";i:10935;s:12:"preccurlyeq;";i:8828;s:7:"preceq;";i:10927;s:12:"precnapprox;";i:10937;s:9:"precneqq;";i:10933;s:9:"precnsim;";i:8936;s:8:"precsim;";i:8830;s:6:"prime;";i:8242;s:7:"primes;";i:8473;s:5:"prnE;";i:10933;s:6:"prnap;";i:10937;s:7:"prnsim;";i:8936;s:5:"prod;";i:8719;s:9:"profalar;";i:9006;s:9:"profline;";i:8978;s:9:"profsurf;";i:8979;s:5:"prop;";i:8733;s:7:"propto;";i:8733;s:6:"prsim;";i:8830;s:7:"prurel;";i:8880;s:5:"pscr;";i:120005;s:4:"psi;";i:968;s:7:"puncsp;";i:8200;s:4:"qfr;";i:120110;s:5:"qint;";i:10764;s:5:"qopf;";i:120162;s:7:"qprime;";i:8279;s:5:"qscr;";i:120006;s:12:"quaternions;";i:8461;s:8:"quatint;";i:10774;s:6:"quest;";i:63;s:8:"questeq;";i:8799;s:5:"quot;";i:34;s:4:"quot";i:34;s:6:"rAarr;";i:8667;s:5:"rArr;";i:8658;s:7:"rAtail;";i:10524;s:6:"rBarr;";i:10511;s:5:"rHar;";i:10596;s:5:"race;";i:10714;s:7:"racute;";i:341;s:6:"radic;";i:8730;s:9:"raemptyv;";i:10675;s:5:"rang;";i:10217;s:6:"rangd;";i:10642;s:6:"range;";i:10661;s:7:"rangle;";i:10217;s:6:"raquo;";i:187;s:5:"raquo";i:187;s:5:"rarr;";i:8594;s:7:"rarrap;";i:10613;s:6:"rarrb;";i:8677;s:8:"rarrbfs;";i:10528;s:6:"rarrc;";i:10547;s:7:"rarrfs;";i:10526;s:7:"rarrhk;";i:8618;s:7:"rarrlp;";i:8620;s:7:"rarrpl;";i:10565;s:8:"rarrsim;";i:10612;s:7:"rarrtl;";i:8611;s:6:"rarrw;";i:8605;s:7:"ratail;";i:10522;s:6:"ratio;";i:8758;s:10:"rationals;";i:8474;s:6:"rbarr;";i:10509;s:6:"rbbrk;";i:10099;s:7:"rbrace;";i:125;s:7:"rbrack;";i:93;s:6:"rbrke;";i:10636;s:8:"rbrksld;";i:10638;s:8:"rbrkslu;";i:10640;s:7:"rcaron;";i:345;s:7:"rcedil;";i:343;s:6:"rceil;";i:8969;s:5:"rcub;";i:125;s:4:"rcy;";i:1088;s:5:"rdca;";i:10551;s:8:"rdldhar;";i:10601;s:6:"rdquo;";i:8221;s:7:"rdquor;";i:8221;s:5:"rdsh;";i:8627;s:5:"real;";i:8476;s:8:"realine;";i:8475;s:9:"realpart;";i:8476;s:6:"reals;";i:8477;s:5:"rect;";i:9645;s:4:"reg;";i:174;s:3:"reg";i:174;s:7:"rfisht;";i:10621;s:7:"rfloor;";i:8971;s:4:"rfr;";i:120111;s:6:"rhard;";i:8641;s:6:"rharu;";i:8640;s:7:"rharul;";i:10604;s:4:"rho;";i:961;s:5:"rhov;";i:1009;s:11:"rightarrow;";i:8594;s:15:"rightarrowtail;";i:8611;s:17:"rightharpoondown;";i:8641;s:15:"rightharpoonup;";i:8640;s:16:"rightleftarrows;";i:8644;s:18:"rightleftharpoons;";i:8652;s:17:"rightrightarrows;";i:8649;s:16:"rightsquigarrow;";i:8605;s:16:"rightthreetimes;";i:8908;s:5:"ring;";i:730;s:13:"risingdotseq;";i:8787;s:6:"rlarr;";i:8644;s:6:"rlhar;";i:8652;s:4:"rlm;";i:8207;s:7:"rmoust;";i:9137;s:11:"rmoustache;";i:9137;s:6:"rnmid;";i:10990;s:6:"roang;";i:10221;s:6:"roarr;";i:8702;s:6:"robrk;";i:10215;s:6:"ropar;";i:10630;s:5:"ropf;";i:120163;s:7:"roplus;";i:10798;s:8:"rotimes;";i:10805;s:5:"rpar;";i:41;s:7:"rpargt;";i:10644;s:9:"rppolint;";i:10770;s:6:"rrarr;";i:8649;s:7:"rsaquo;";i:8250;s:5:"rscr;";i:120007;s:4:"rsh;";i:8625;s:5:"rsqb;";i:93;s:6:"rsquo;";i:8217;s:7:"rsquor;";i:8217;s:7:"rthree;";i:8908;s:7:"rtimes;";i:8906;s:5:"rtri;";i:9657;s:6:"rtrie;";i:8885;s:6:"rtrif;";i:9656;s:9:"rtriltri;";i:10702;s:8:"ruluhar;";i:10600;s:3:"rx;";i:8478;s:7:"sacute;";i:347;s:6:"sbquo;";i:8218;s:3:"sc;";i:8827;s:4:"scE;";i:10932;s:5:"scap;";i:10936;s:7:"scaron;";i:353;s:6:"sccue;";i:8829;s:4:"sce;";i:10928;s:7:"scedil;";i:351;s:6:"scirc;";i:349;s:5:"scnE;";i:10934;s:6:"scnap;";i:10938;s:7:"scnsim;";i:8937;s:9:"scpolint;";i:10771;s:6:"scsim;";i:8831;s:4:"scy;";i:1089;s:5:"sdot;";i:8901;s:6:"sdotb;";i:8865;s:6:"sdote;";i:10854;s:6:"seArr;";i:8664;s:7:"searhk;";i:10533;s:6:"searr;";i:8600;s:8:"searrow;";i:8600;s:5:"sect;";i:167;s:4:"sect";i:167;s:5:"semi;";i:59;s:7:"seswar;";i:10537;s:9:"setminus;";i:8726;s:6:"setmn;";i:8726;s:5:"sext;";i:10038;s:4:"sfr;";i:120112;s:7:"sfrown;";i:8994;s:6:"sharp;";i:9839;s:7:"shchcy;";i:1097;s:5:"shcy;";i:1096;s:9:"shortmid;";i:8739;s:14:"shortparallel;";i:8741;s:4:"shy;";i:173;s:3:"shy";i:173;s:6:"sigma;";i:963;s:7:"sigmaf;";i:962;s:7:"sigmav;";i:962;s:4:"sim;";i:8764;s:7:"simdot;";i:10858;s:5:"sime;";i:8771;s:6:"simeq;";i:8771;s:5:"simg;";i:10910;s:6:"simgE;";i:10912;s:5:"siml;";i:10909;s:6:"simlE;";i:10911;s:6:"simne;";i:8774;s:8:"simplus;";i:10788;s:8:"simrarr;";i:10610;s:6:"slarr;";i:8592;s:14:"smallsetminus;";i:8726;s:7:"smashp;";i:10803;s:9:"smeparsl;";i:10724;s:5:"smid;";i:8739;s:6:"smile;";i:8995;s:4:"smt;";i:10922;s:5:"smte;";i:10924;s:7:"softcy;";i:1100;s:4:"sol;";i:47;s:5:"solb;";i:10692;s:7:"solbar;";i:9023;s:5:"sopf;";i:120164;s:7:"spades;";i:9824;s:10:"spadesuit;";i:9824;s:5:"spar;";i:8741;s:6:"sqcap;";i:8851;s:6:"sqcup;";i:8852;s:6:"sqsub;";i:8847;s:7:"sqsube;";i:8849;s:9:"sqsubset;";i:8847;s:11:"sqsubseteq;";i:8849;s:6:"sqsup;";i:8848;s:7:"sqsupe;";i:8850;s:9:"sqsupset;";i:8848;s:11:"sqsupseteq;";i:8850;s:4:"squ;";i:9633;s:7:"square;";i:9633;s:7:"squarf;";i:9642;s:5:"squf;";i:9642;s:6:"srarr;";i:8594;s:5:"sscr;";i:120008;s:7:"ssetmn;";i:8726;s:7:"ssmile;";i:8995;s:7:"sstarf;";i:8902;s:5:"star;";i:9734;s:6:"starf;";i:9733;s:16:"straightepsilon;";i:1013;s:12:"straightphi;";i:981;s:6:"strns;";i:175;s:4:"sub;";i:8834;s:5:"subE;";i:10949;s:7:"subdot;";i:10941;s:5:"sube;";i:8838;s:8:"subedot;";i:10947;s:8:"submult;";i:10945;s:6:"subnE;";i:10955;s:6:"subne;";i:8842;s:8:"subplus;";i:10943;s:8:"subrarr;";i:10617;s:7:"subset;";i:8834;s:9:"subseteq;";i:8838;s:10:"subseteqq;";i:10949;s:10:"subsetneq;";i:8842;s:11:"subsetneqq;";i:10955;s:7:"subsim;";i:10951;s:7:"subsub;";i:10965;s:7:"subsup;";i:10963;s:5:"succ;";i:8827;s:11:"succapprox;";i:10936;s:12:"succcurlyeq;";i:8829;s:7:"succeq;";i:10928;s:12:"succnapprox;";i:10938;s:9:"succneqq;";i:10934;s:9:"succnsim;";i:8937;s:8:"succsim;";i:8831;s:4:"sum;";i:8721;s:5:"sung;";i:9834;s:5:"sup1;";i:185;s:4:"sup1";i:185;s:5:"sup2;";i:178;s:4:"sup2";i:178;s:5:"sup3;";i:179;s:4:"sup3";i:179;s:4:"sup;";i:8835;s:5:"supE;";i:10950;s:7:"supdot;";i:10942;s:8:"supdsub;";i:10968;s:5:"supe;";i:8839;s:8:"supedot;";i:10948;s:8:"suphsub;";i:10967;s:8:"suplarr;";i:10619;s:8:"supmult;";i:10946;s:6:"supnE;";i:10956;s:6:"supne;";i:8843;s:8:"supplus;";i:10944;s:7:"supset;";i:8835;s:9:"supseteq;";i:8839;s:10:"supseteqq;";i:10950;s:10:"supsetneq;";i:8843;s:11:"supsetneqq;";i:10956;s:7:"supsim;";i:10952;s:7:"supsub;";i:10964;s:7:"supsup;";i:10966;s:6:"swArr;";i:8665;s:7:"swarhk;";i:10534;s:6:"swarr;";i:8601;s:8:"swarrow;";i:8601;s:7:"swnwar;";i:10538;s:6:"szlig;";i:223;s:5:"szlig";i:223;s:7:"target;";i:8982;s:4:"tau;";i:964;s:5:"tbrk;";i:9140;s:7:"tcaron;";i:357;s:7:"tcedil;";i:355;s:4:"tcy;";i:1090;s:5:"tdot;";i:8411;s:7:"telrec;";i:8981;s:4:"tfr;";i:120113;s:7:"there4;";i:8756;s:10:"therefore;";i:8756;s:6:"theta;";i:952;s:9:"thetasym;";i:977;s:7:"thetav;";i:977;s:12:"thickapprox;";i:8776;s:9:"thicksim;";i:8764;s:7:"thinsp;";i:8201;s:6:"thkap;";i:8776;s:7:"thksim;";i:8764;s:6:"thorn;";i:254;s:5:"thorn";i:254;s:6:"tilde;";i:732;s:6:"times;";i:215;s:5:"times";i:215;s:7:"timesb;";i:8864;s:9:"timesbar;";i:10801;s:7:"timesd;";i:10800;s:5:"tint;";i:8749;s:5:"toea;";i:10536;s:4:"top;";i:8868;s:7:"topbot;";i:9014;s:7:"topcir;";i:10993;s:5:"topf;";i:120165;s:8:"topfork;";i:10970;s:5:"tosa;";i:10537;s:7:"tprime;";i:8244;s:6:"trade;";i:8482;s:9:"triangle;";i:9653;s:13:"triangledown;";i:9663;s:13:"triangleleft;";i:9667;s:15:"trianglelefteq;";i:8884;s:10:"triangleq;";i:8796;s:14:"triangleright;";i:9657;s:16:"trianglerighteq;";i:8885;s:7:"tridot;";i:9708;s:5:"trie;";i:8796;s:9:"triminus;";i:10810;s:8:"triplus;";i:10809;s:6:"trisb;";i:10701;s:8:"tritime;";i:10811;s:9:"trpezium;";i:9186;s:5:"tscr;";i:120009;s:5:"tscy;";i:1094;s:6:"tshcy;";i:1115;s:7:"tstrok;";i:359;s:6:"twixt;";i:8812;s:17:"twoheadleftarrow;";i:8606;s:18:"twoheadrightarrow;";i:8608;s:5:"uArr;";i:8657;s:5:"uHar;";i:10595;s:7:"uacute;";i:250;s:6:"uacute";i:250;s:5:"uarr;";i:8593;s:6:"ubrcy;";i:1118;s:7:"ubreve;";i:365;s:6:"ucirc;";i:251;s:5:"ucirc";i:251;s:4:"ucy;";i:1091;s:6:"udarr;";i:8645;s:7:"udblac;";i:369;s:6:"udhar;";i:10606;s:7:"ufisht;";i:10622;s:4:"ufr;";i:120114;s:7:"ugrave;";i:249;s:6:"ugrave";i:249;s:6:"uharl;";i:8639;s:6:"uharr;";i:8638;s:6:"uhblk;";i:9600;s:7:"ulcorn;";i:8988;s:9:"ulcorner;";i:8988;s:7:"ulcrop;";i:8975;s:6:"ultri;";i:9720;s:6:"umacr;";i:363;s:4:"uml;";i:168;s:3:"uml";i:168;s:6:"uogon;";i:371;s:5:"uopf;";i:120166;s:8:"uparrow;";i:8593;s:12:"updownarrow;";i:8597;s:14:"upharpoonleft;";i:8639;s:15:"upharpoonright;";i:8638;s:6:"uplus;";i:8846;s:5:"upsi;";i:965;s:6:"upsih;";i:978;s:8:"upsilon;";i:965;s:11:"upuparrows;";i:8648;s:7:"urcorn;";i:8989;s:9:"urcorner;";i:8989;s:7:"urcrop;";i:8974;s:6:"uring;";i:367;s:6:"urtri;";i:9721;s:5:"uscr;";i:120010;s:6:"utdot;";i:8944;s:7:"utilde;";i:361;s:5:"utri;";i:9653;s:6:"utrif;";i:9652;s:6:"uuarr;";i:8648;s:5:"uuml;";i:252;s:4:"uuml";i:252;s:8:"uwangle;";i:10663;s:5:"vArr;";i:8661;s:5:"vBar;";i:10984;s:6:"vBarv;";i:10985;s:6:"vDash;";i:8872;s:7:"vangrt;";i:10652;s:11:"varepsilon;";i:949;s:9:"varkappa;";i:1008;s:11:"varnothing;";i:8709;s:7:"varphi;";i:966;s:6:"varpi;";i:982;s:10:"varpropto;";i:8733;s:5:"varr;";i:8597;s:7:"varrho;";i:1009;s:9:"varsigma;";i:962;s:9:"vartheta;";i:977;s:16:"vartriangleleft;";i:8882;s:17:"vartriangleright;";i:8883;s:4:"vcy;";i:1074;s:6:"vdash;";i:8866;s:4:"vee;";i:8744;s:7:"veebar;";i:8891;s:6:"veeeq;";i:8794;s:7:"vellip;";i:8942;s:7:"verbar;";i:124;s:5:"vert;";i:124;s:4:"vfr;";i:120115;s:6:"vltri;";i:8882;s:5:"vopf;";i:120167;s:6:"vprop;";i:8733;s:6:"vrtri;";i:8883;s:5:"vscr;";i:120011;s:8:"vzigzag;";i:10650;s:6:"wcirc;";i:373;s:7:"wedbar;";i:10847;s:6:"wedge;";i:8743;s:7:"wedgeq;";i:8793;s:7:"weierp;";i:8472;s:4:"wfr;";i:120116;s:5:"wopf;";i:120168;s:3:"wp;";i:8472;s:3:"wr;";i:8768;s:7:"wreath;";i:8768;s:5:"wscr;";i:120012;s:5:"xcap;";i:8898;s:6:"xcirc;";i:9711;s:5:"xcup;";i:8899;s:6:"xdtri;";i:9661;s:4:"xfr;";i:120117;s:6:"xhArr;";i:10234;s:6:"xharr;";i:10231;s:3:"xi;";i:958;s:6:"xlArr;";i:10232;s:6:"xlarr;";i:10229;s:5:"xmap;";i:10236;s:5:"xnis;";i:8955;s:6:"xodot;";i:10752;s:5:"xopf;";i:120169;s:7:"xoplus;";i:10753;s:7:"xotime;";i:10754;s:6:"xrArr;";i:10233;s:6:"xrarr;";i:10230;s:5:"xscr;";i:120013;s:7:"xsqcup;";i:10758;s:7:"xuplus;";i:10756;s:6:"xutri;";i:9651;s:5:"xvee;";i:8897;s:7:"xwedge;";i:8896;s:7:"yacute;";i:253;s:6:"yacute";i:253;s:5:"yacy;";i:1103;s:6:"ycirc;";i:375;s:4:"ycy;";i:1099;s:4:"yen;";i:165;s:3:"yen";i:165;s:4:"yfr;";i:120118;s:5:"yicy;";i:1111;s:5:"yopf;";i:120170;s:5:"yscr;";i:120014;s:5:"yucy;";i:1102;s:5:"yuml;";i:255;s:4:"yuml";i:255;s:7:"zacute;";i:378;s:7:"zcaron;";i:382;s:4:"zcy;";i:1079;s:5:"zdot;";i:380;s:7:"zeetrf;";i:8488;s:5:"zeta;";i:950;s:4:"zfr;";i:120119;s:5:"zhcy;";i:1078;s:8:"zigrarr;";i:8669;s:5:"zopf;";i:120171;s:5:"zscr;";i:120015;s:4:"zwj;";i:8205;s:5:"zwnj;";i:8204;} \ No newline at end of file
diff --git a/library/PHPGit.autoload.php b/library/PHPGit.autoload.php
deleted file mode 100644
index 7ad2971da..000000000
--- a/library/PHPGit.autoload.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-// autoload.php @generated by Composer
-
-require_once __DIR__ . '/composer' . '/autoload_real.php';
-
-return ComposerAutoloaderInit929ad7f4e2f44798d12d2ab06db7b39b::getLoader(); \ No newline at end of file
diff --git a/library/composer/ClassLoader.php b/library/composer/ClassLoader.php
deleted file mode 100644
index 4e05d3b15..000000000
--- a/library/composer/ClassLoader.php
+++ /dev/null
@@ -1,413 +0,0 @@
-<?php
-
-/*
- * This file is part of Composer.
- *
- * (c) Nils Adermann <naderman@naderman.de>
- * Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer\Autoload;
-
-/**
- * ClassLoader implements a PSR-0 class loader
- *
- * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
- *
- * $loader = new \Composer\Autoload\ClassLoader();
- *
- * // register classes with namespaces
- * $loader->add('Symfony\Component', __DIR__.'/component');
- * $loader->add('Symfony', __DIR__.'/framework');
- *
- * // activate the autoloader
- * $loader->register();
- *
- * // to enable searching the include path (eg. for PEAR packages)
- * $loader->setUseIncludePath(true);
- *
- * In this example, if you try to use a class in the Symfony\Component
- * namespace or one of its children (Symfony\Component\Console for instance),
- * the autoloader will first look for the class under the component/
- * directory, and it will then fallback to the framework/ directory if not
- * found before giving up.
- *
- * This class is loosely based on the Symfony UniversalClassLoader.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Jordi Boggiano <j.boggiano@seld.be>
- */
-class ClassLoader
-{
- // PSR-4
- private $prefixLengthsPsr4 = array();
- private $prefixDirsPsr4 = array();
- private $fallbackDirsPsr4 = array();
-
- // PSR-0
- private $prefixesPsr0 = array();
- private $fallbackDirsPsr0 = array();
-
- private $useIncludePath = false;
- private $classMap = array();
-
- private $classMapAuthoritative = false;
-
- public function getPrefixes()
- {
- if (!empty($this->prefixesPsr0)) {
- return call_user_func_array('array_merge', $this->prefixesPsr0);
- }
-
- return array();
- }
-
- public function getPrefixesPsr4()
- {
- return $this->prefixDirsPsr4;
- }
-
- public function getFallbackDirs()
- {
- return $this->fallbackDirsPsr0;
- }
-
- public function getFallbackDirsPsr4()
- {
- return $this->fallbackDirsPsr4;
- }
-
- public function getClassMap()
- {
- return $this->classMap;
- }
-
- /**
- * @param array $classMap Class to filename map
- */
- public function addClassMap(array $classMap)
- {
- if ($this->classMap) {
- $this->classMap = array_merge($this->classMap, $classMap);
- } else {
- $this->classMap = $classMap;
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix, either
- * appending or prepending to the ones previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param array|string $paths The PSR-0 root directories
- * @param bool $prepend Whether to prepend the directories
- */
- public function add($prefix, $paths, $prepend = false)
- {
- if (!$prefix) {
- if ($prepend) {
- $this->fallbackDirsPsr0 = array_merge(
- (array) $paths,
- $this->fallbackDirsPsr0
- );
- } else {
- $this->fallbackDirsPsr0 = array_merge(
- $this->fallbackDirsPsr0,
- (array) $paths
- );
- }
-
- return;
- }
-
- $first = $prefix[0];
- if (!isset($this->prefixesPsr0[$first][$prefix])) {
- $this->prefixesPsr0[$first][$prefix] = (array) $paths;
-
- return;
- }
- if ($prepend) {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- (array) $paths,
- $this->prefixesPsr0[$first][$prefix]
- );
- } else {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- $this->prefixesPsr0[$first][$prefix],
- (array) $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace, either
- * appending or prepending to the ones previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-0 base directories
- * @param bool $prepend Whether to prepend the directories
- *
- * @throws \InvalidArgumentException
- */
- public function addPsr4($prefix, $paths, $prepend = false)
- {
- if (!$prefix) {
- // Register directories for the root namespace.
- if ($prepend) {
- $this->fallbackDirsPsr4 = array_merge(
- (array) $paths,
- $this->fallbackDirsPsr4
- );
- } else {
- $this->fallbackDirsPsr4 = array_merge(
- $this->fallbackDirsPsr4,
- (array) $paths
- );
- }
- } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
- // Register directories for a new namespace.
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
- } elseif ($prepend) {
- // Prepend directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- (array) $paths,
- $this->prefixDirsPsr4[$prefix]
- );
- } else {
- // Append directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- $this->prefixDirsPsr4[$prefix],
- (array) $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix,
- * replacing any others previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param array|string $paths The PSR-0 base directories
- */
- public function set($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr0 = (array) $paths;
- } else {
- $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace,
- * replacing any others previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-4 base directories
- *
- * @throws \InvalidArgumentException
- */
- public function setPsr4($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr4 = (array) $paths;
- } else {
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
- }
- }
-
- /**
- * Turns on searching the include path for class files.
- *
- * @param bool $useIncludePath
- */
- public function setUseIncludePath($useIncludePath)
- {
- $this->useIncludePath = $useIncludePath;
- }
-
- /**
- * Can be used to check if the autoloader uses the include path to check
- * for classes.
- *
- * @return bool
- */
- public function getUseIncludePath()
- {
- return $this->useIncludePath;
- }
-
- /**
- * Turns off searching the prefix and fallback directories for classes
- * that have not been registered with the class map.
- *
- * @param bool $classMapAuthoritative
- */
- public function setClassMapAuthoritative($classMapAuthoritative)
- {
- $this->classMapAuthoritative = $classMapAuthoritative;
- }
-
- /**
- * Should class lookup fail if not found in the current class map?
- *
- * @return bool
- */
- public function isClassMapAuthoritative()
- {
- return $this->classMapAuthoritative;
- }
-
- /**
- * Registers this instance as an autoloader.
- *
- * @param bool $prepend Whether to prepend the autoloader or not
- */
- public function register($prepend = false)
- {
- spl_autoload_register(array($this, 'loadClass'), true, $prepend);
- }
-
- /**
- * Unregisters this instance as an autoloader.
- */
- public function unregister()
- {
- spl_autoload_unregister(array($this, 'loadClass'));
- }
-
- /**
- * Loads the given class or interface.
- *
- * @param string $class The name of the class
- * @return bool|null True if loaded, null otherwise
- */
- public function loadClass($class)
- {
- if ($file = $this->findFile($class)) {
- includeFile($file);
-
- return true;
- }
- }
-
- /**
- * Finds the path to the file where the class is defined.
- *
- * @param string $class The name of the class
- *
- * @return string|false The path if found, false otherwise
- */
- public function findFile($class)
- {
- // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
- if ('\\' == $class[0]) {
- $class = substr($class, 1);
- }
-
- // class map lookup
- if (isset($this->classMap[$class])) {
- return $this->classMap[$class];
- }
- if ($this->classMapAuthoritative) {
- return false;
- }
-
- $file = $this->findFileWithExtension($class, '.php');
-
- // Search for Hack files if we are running on HHVM
- if ($file === null && defined('HHVM_VERSION')) {
- $file = $this->findFileWithExtension($class, '.hh');
- }
-
- if ($file === null) {
- // Remember that this class does not exist.
- return $this->classMap[$class] = false;
- }
-
- return $file;
- }
-
- private function findFileWithExtension($class, $ext)
- {
- // PSR-4 lookup
- $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
-
- $first = $class[0];
- if (isset($this->prefixLengthsPsr4[$first])) {
- foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
- if (0 === strpos($class, $prefix)) {
- foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
- if (is_file($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-4 fallback dirs
- foreach ($this->fallbackDirsPsr4 as $dir) {
- if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
- return $file;
- }
- }
-
- // PSR-0 lookup
- if (false !== $pos = strrpos($class, '\\')) {
- // namespaced class name
- $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
- . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
- } else {
- // PEAR-like class name
- $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
- }
-
- if (isset($this->prefixesPsr0[$first])) {
- foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
- if (0 === strpos($class, $prefix)) {
- foreach ($dirs as $dir) {
- if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-0 fallback dirs
- foreach ($this->fallbackDirsPsr0 as $dir) {
- if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
-
- // PSR-0 include paths.
- if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
- return $file;
- }
- }
-}
-
-/**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- */
-function includeFile($file)
-{
- include $file;
-}
diff --git a/library/composer/autoload_classmap.php b/library/composer/autoload_classmap.php
deleted file mode 100644
index 7a91153b0..000000000
--- a/library/composer/autoload_classmap.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-// autoload_classmap.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
-);
diff --git a/library/composer/autoload_namespaces.php b/library/composer/autoload_namespaces.php
deleted file mode 100644
index 6c63a8ed1..000000000
--- a/library/composer/autoload_namespaces.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-// autoload_namespaces.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
- 'PHPGit' => array($baseDir . '/src'),
- '' => array($vendorDir . '/kzykhys/git/src'),
-);
diff --git a/library/composer/autoload_psr4.php b/library/composer/autoload_psr4.php
deleted file mode 100644
index 1ccbde8ed..000000000
--- a/library/composer/autoload_psr4.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-// autoload_psr4.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
- 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
- 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'),
-);
diff --git a/library/composer/autoload_real.php b/library/composer/autoload_real.php
deleted file mode 100644
index 59b376b09..000000000
--- a/library/composer/autoload_real.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-// autoload_real.php @generated by Composer
-
-class ComposerAutoloaderInit929ad7f4e2f44798d12d2ab06db7b39b
-{
- private static $loader;
-
- public static function loadClassLoader($class)
- {
- if ('Composer\Autoload\ClassLoader' === $class) {
- require __DIR__ . '/ClassLoader.php';
- }
- }
-
- public static function getLoader()
- {
- if (null !== self::$loader) {
- return self::$loader;
- }
-
- spl_autoload_register(array('ComposerAutoloaderInit929ad7f4e2f44798d12d2ab06db7b39b', 'loadClassLoader'), true, true);
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInit929ad7f4e2f44798d12d2ab06db7b39b', 'loadClassLoader'));
-
- $map = require __DIR__ . '/autoload_namespaces.php';
- foreach ($map as $namespace => $path) {
- $loader->set($namespace, $path);
- }
-
- $map = require __DIR__ . '/autoload_psr4.php';
- foreach ($map as $namespace => $path) {
- $loader->setPsr4($namespace, $path);
- }
-
- $classMap = require __DIR__ . '/autoload_classmap.php';
- if ($classMap) {
- $loader->addClassMap($classMap);
- }
-
- $loader->register(true);
-
- return $loader;
- }
-}
-
-function composerRequire929ad7f4e2f44798d12d2ab06db7b39b($file)
-{
- require $file;
-}
diff --git a/library/composer/installed.json b/library/composer/installed.json
deleted file mode 100644
index 23dbdb9c7..000000000
--- a/library/composer/installed.json
+++ /dev/null
@@ -1,157 +0,0 @@
-[
- {
- "name": "symfony/process",
- "version": "v2.8.0",
- "version_normalized": "2.8.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "1b988a88e3551102f3c2d9e1d47a18c3a78d6312"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/1b988a88e3551102f3c2d9e1d47a18c3a78d6312",
- "reference": "1b988a88e3551102f3c2d9e1d47a18c3a78d6312",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.9"
- },
- "time": "2015-11-30 12:35:10",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.8-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony Process Component",
- "homepage": "https://symfony.com"
- },
- {
- "name": "symfony/options-resolver",
- "version": "v2.8.0",
- "version_normalized": "2.8.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/options-resolver.git",
- "reference": "e7f62cf7d9e48238299cfa5d0556aee8cff1e075"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e7f62cf7d9e48238299cfa5d0556aee8cff1e075",
- "reference": "e7f62cf7d9e48238299cfa5d0556aee8cff1e075",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.9"
- },
- "time": "2015-11-18 13:45:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.8-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\OptionsResolver\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony OptionsResolver Component",
- "homepage": "https://symfony.com",
- "keywords": [
- "config",
- "configuration",
- "options"
- ]
- },
- {
- "name": "kzykhys/git",
- "version": "dev-master",
- "version_normalized": "9999999-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/kzykhys/PHPGit.git",
- "reference": "8b3ee3147d58e0aee62610f0aebcd30eb076ad5d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kzykhys/PHPGit/zipball/8b3ee3147d58e0aee62610f0aebcd30eb076ad5d",
- "reference": "8b3ee3147d58e0aee62610f0aebcd30eb076ad5d",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2",
- "symfony/options-resolver": ">=2.3",
- "symfony/process": ">=2.3"
- },
- "require-dev": {
- "symfony/filesystem": ">=2.3"
- },
- "time": "2014-02-27 13:14:59",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "installation-source": "source",
- "autoload": {
- "psr-0": {
- "": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Kazuyuki Hayashi",
- "email": "hayashi@valnur.net"
- }
- ],
- "description": "A Git wrapper for PHP5.3+"
- }
-]
diff --git a/library/epub-meta/LICENSE b/library/epub-meta/LICENSE
deleted file mode 100644
index 128bf1f66..000000000
--- a/library/epub-meta/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Andreas Gohr <andi@splitbrain.org>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/library/epub-meta/README b/library/epub-meta/README
deleted file mode 100644
index 21927dafe..000000000
--- a/library/epub-meta/README
+++ /dev/null
@@ -1,28 +0,0 @@
-====== PHP EPub Meta ======
-
-This project aims to create a PHP class for reading and writing metadata
-included in the EPub ebook format.
-
-It also includes a very basic web interface to edit book metadata.
-
-Please see the issue tracker for what's missing.
-
-Forks and pull requests welcome.
-
-===== About the EPub Manager Web Interface =====
-
-The manager expects your ebooks in a single flat directory (no subfolders). The
-location of that directory has to be configured at the top of the index.php file.
-
-All the epubs need to be read- and writable by the webserver.
-
-The manager also makes some assumption on how the files should be named. The
-format is: "<Author file-as>-<Title>.epub". Commas will be replaced by __ and
-spaces are replaced by _.
-
-Note that the manager will RENAME your files to that form when saving.
-
-Using the "Lookup Book Data" link will open a dialog that searches the book at
-Google Books you can use the found data using the "fill in" and "replace"
-buttons. The former will only fill empty fields, while the latter will replace
-all data. Author filling is missing currently.
diff --git a/library/epub-meta/assets/css/cleditor/images/buttons.gif b/library/epub-meta/assets/css/cleditor/images/buttons.gif
deleted file mode 100644
index 2e464d0c8..000000000
--- a/library/epub-meta/assets/css/cleditor/images/buttons.gif
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/cleditor/images/toolbar.gif b/library/epub-meta/assets/css/cleditor/images/toolbar.gif
deleted file mode 100644
index e6eb2da55..000000000
--- a/library/epub-meta/assets/css/cleditor/images/toolbar.gif
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/cleditor/jquery.cleditor.css b/library/epub-meta/assets/css/cleditor/jquery.cleditor.css
deleted file mode 100644
index 6ac490bcf..000000000
--- a/library/epub-meta/assets/css/cleditor/jquery.cleditor.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.cleditorMain {border:1px solid #999; padding:0 1px 1px; background-color:white}
-.cleditorMain iframe {border:none; margin:0; padding:0}
-.cleditorMain textarea {border:none; margin:0; padding:0; overflow-y:scroll; font:10pt Arial,Verdana; resize:none; outline:none /* webkit grip focus */}
-.cleditorToolbar {background: url('images/toolbar.gif') repeat}
-.cleditorGroup {float:left; height:26px}
-.cleditorButton {float:left; width:24px; height:24px; margin:1px 0 1px 0; background: url('images/buttons.gif')}
-.cleditorDisabled {opacity:0.3; filter:alpha(opacity=30)}
-.cleditorDivider {float:left; width:1px; height:23px; margin:1px 0 1px 0; background:#CCC}
-.cleditorPopup {border:solid 1px #999; background-color:white; position:absolute; font:10pt Arial,Verdana; cursor:default; z-index:10000}
-.cleditorList div {padding:2px 4px 2px 4px}
-.cleditorList p,
-.cleditorList h1,
-.cleditorList h2,
-.cleditorList h3,
-.cleditorList h4,
-.cleditorList h5,
-.cleditorList h6,
-.cleditorList font {padding:0; margin:0; background-color:Transparent}
-.cleditorColor {width:150px; padding:1px 0 0 1px}
-.cleditorColor div {float:left; width:14px; height:14px; margin:0 1px 1px 0}
-.cleditorPrompt {background-color:#F6F7F9; padding:4px; font-size:8.5pt}
-.cleditorPrompt input,
-.cleditorPrompt textarea {font:8.5pt Arial,Verdana;}
-.cleditorMsg {background-color:#FDFCEE; width:150px; padding:4px; font-size:8.5pt}
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 5b5dab2ab..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
deleted file mode 100644
index ac8b229af..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
deleted file mode 100644
index ad3d6346e..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index 42ccba269..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
deleted file mode 100644
index 5a46b47cb..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
deleted file mode 100644
index 86c2baa65..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
deleted file mode 100644
index 4443fdc1a..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/library/epub-meta/assets/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
deleted file mode 100644
index 7c9fa6c6e..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-icons_222222_256x240.png b/library/epub-meta/assets/css/smoothness/images/ui-icons_222222_256x240.png
deleted file mode 100644
index b273ff111..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-icons_2e83ff_256x240.png b/library/epub-meta/assets/css/smoothness/images/ui-icons_2e83ff_256x240.png
deleted file mode 100644
index 09d1cdc85..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-icons_2e83ff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-icons_454545_256x240.png b/library/epub-meta/assets/css/smoothness/images/ui-icons_454545_256x240.png
deleted file mode 100644
index 59bd45b90..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-icons_454545_256x240.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-icons_888888_256x240.png b/library/epub-meta/assets/css/smoothness/images/ui-icons_888888_256x240.png
deleted file mode 100644
index 6d02426c1..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-icons_888888_256x240.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/library/epub-meta/assets/css/smoothness/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100644
index 2ab019b73..000000000
--- a/library/epub-meta/assets/css/smoothness/images/ui-icons_cd0a0a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/assets/css/smoothness/jquery-ui-1.8.18.custom.css b/library/epub-meta/assets/css/smoothness/jquery-ui-1.8.18.custom.css
deleted file mode 100644
index 4cfb50a4a..000000000
--- a/library/epub-meta/assets/css/smoothness/jquery-ui-1.8.18.custom.css
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
-.ui-helper-clearfix:after { clear: both; }
-.ui-helper-clearfix { zoom: 1; }
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
-.ui-widget-content a { color: #222222; }
-.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-header a { color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.18
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
- list-style:none;
- padding: 2px;
- margin: 0;
- display:block;
- float: left;
-}
-.ui-menu .ui-menu {
- margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
- margin:0;
- padding: 0;
- zoom: 1;
- float: left;
- clear: left;
- width: 100%;
-}
-.ui-menu .ui-menu-item a {
- text-decoration:none;
- display:block;
- padding:.2em .4em;
- line-height:1.5;
- zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
- font-weight: normal;
- margin: -1px;
-}
-/*
- * jQuery UI Button 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: hidden; *overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
- display: none; /*sorry for IE5*/
- display/**/: block; /*sorry for IE5*/
- position: absolute; /*must have*/
- z-index: -1; /*must have*/
- filter: mask(); /*must have*/
- top: -4px; /*must have*/
- left: -4px; /*must have*/
- width: 200px; /*must have*/
- height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file
diff --git a/library/epub-meta/assets/css/style.css b/library/epub-meta/assets/css/style.css
deleted file mode 100644
index 0e46dd1b0..000000000
--- a/library/epub-meta/assets/css/style.css
+++ /dev/null
@@ -1,180 +0,0 @@
-body, td, th, input, textarea {
- font-family: "Arial", sans-serif;
- color: #333;
- font-size: 15px;
-}
-
-a {
- color: #4183C4;
- text-decoration: none;
-}
-
-a:hover,
-a:active {
- background-color: #efefef;
-}
-
-#wrapper {
- height: 95%;
- width: 920px;
- margin: auto;
- padding: 0;
- border: 1px solid #ccc;
-}
-
-#booklist {
- float: left;
- width: 300px;
- height: 100%;
- overflow: auto;
- list-style-type: none;
- padding: 0;
- margin: 0 25px 0 0;
- font-size: 13px;
-}
-
-#booklist li {
- padding: 5px;
-}
-
-#booklist li:hover {
- background-color: #efefef;
-}
-
-#booklist li span {
- display: block;
-}
-#booklist li span.author {
- padding-left: 5px;
- font-size: 11px;
-}
-
-#booklist li.active {
- background-color: #4183C4;
-}
-#booklist li.active a,
-#booklist li.active a:hover,
-#booklist li.active a:active {
- color: #efefef;
- background-color: #4183C4;
-}
-
-
-#bookpanel {
- float: left;
- width: 590px;
- height: 100%;
- overflow: auto;
-}
-
-.center {
- text-align: center;
-}
-
-table {
- margin-bottom: 20px;
-}
-
-table th,
-table td {
- vertical-align: top;
- padding: 0 0 5px 0;
-}
-
-table th {
- text-align: right;
- font-weight: bold;
- padding: 3px;
- padding-right: 20px;
-}
-
-table td textarea,
-table td input {
- width: 450px;
- border: none;
- padding: 3px;
- margin: 0;
- border-bottom: solid 1px #dfdfdf;
-}
-
-table td .cleditormain {
- border: solid 1px #dfdfdf;
-}
-
-table td textarea {
- height: 250px;
-}
-
-table td p {
- margin: 0;
- padding: 0;
-}
-
-table td p input {
- width: 200px;
-}
-
-table td textarea:focus,
-table td input:focus {
- border: 1px solid #4183C4;
-}
-
-table th img {
- margin-top: 20px;
-}
-
-a.addauthor {
- margin-top: -20px;
- float: right;
-}
-
-div.license {
- font-size: 11px;
- margin-top: 300px;
-}
-
-#bookapi-s {
- float: left;
-}
-
-#bookapi-q {
- width: 600px;
-}
-
-#bookapi {
- font-size: 12px;
-}
-
-#bookapi div.head {
- margin-bottom: 10px;
-}
-
-#bookapi div.result {
- clear: both;
- margin-bottom: 10px;
- border-bottom: 1px solid #ccc;
- min-height: 130px;
-}
-
-#bookapi div.result div {
- margin-left: 70px;
-}
-
-#bookapi div.result div.buttons {
- float: right;
- text-align: right;
-}
-
-#bookapi img {
- margin-top: 30px;
- width: 60px;
- float: left;
-}
-
-#bookapi h1.title {
- font-size: 14px;
-}
-
-#bookapi span.subjects {
- font-style: italic;
-}
diff --git a/library/epub-meta/assets/js/jquery-1.7.1.min.js b/library/epub-meta/assets/js/jquery-1.7.1.min.js
deleted file mode 100644
index 198b3ff07..000000000
--- a/library/epub-meta/assets/js/jquery-1.7.1.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement 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){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.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){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file
diff --git a/library/epub-meta/assets/js/jquery-ui-1.8.18.custom.min.js b/library/epub-meta/assets/js/jquery-ui-1.8.18.custom.min.js
deleted file mode 100644
index f00a62f13..000000000
--- a/library/epub-meta/assets/js/jquery-ui-1.8.18.custom.min.js
+++ /dev/null
@@ -1,356 +0,0 @@
-/*!
- * jQuery UI 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);/*!
- * jQuery UI Widget 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);/*!
- * jQuery UI Mouse 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- * jquery.ui.widget.js
- */(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);/*
- * jQuery UI Position 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1];return this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);/*
- * jQuery UI Draggable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!!this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute"));return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.18"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!!e.length){var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);/*
- * jQuery UI Droppable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.mouse.js
- * jquery.ui.draggable.js
- */(function(a,b){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var b=this.options,c=b.accept;this.isover=0,this.isout=1,this.accept=a.isFunction(c)?c:function(a){return a.is(c)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},a.ui.ddmanager.droppables[b.scope]=a.ui.ddmanager.droppables[b.scope]||[],a.ui.ddmanager.droppables[b.scope].push(this),b.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++)b[c]==this&&b.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(b,c){b=="accept"&&(this.accept=a.isFunction(c)?c:function(a){return a.is(c)}),a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var e=!1;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var b=a.data(this,"droppable");if(b.options.greedy&&!b.options.disabled&&b.options.scope==d.options.scope&&b.accept.call(b.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(b,{offset:b.element.offset()}),b.options.tolerance)){e=!0;return!1}});if(e)return!1;if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d));return this.element}return!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.extend(a.ui.droppable,{version:"1.8.18"}),a.ui.intersect=function(b,c,d){if(!c.offset)return!1;var e=(b.positionAbs||b.position.absolute).left,f=e+b.helperProportions.width,g=(b.positionAbs||b.position.absolute).top,h=g+b.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case"fit":return i<=e&&f<=j&&k<=g&&h<=l;case"intersect":return i<e+b.helperProportions.width/2&&f-b.helperProportions.width/2<j&&k<g+b.helperProportions.height/2&&h-b.helperProportions.height/2<l;case"pointer":var m=(b.positionAbs||b.position.absolute).left+(b.clickOffset||b.offset.click).left,n=(b.positionAbs||b.position.absolute).top+(b.clickOffset||b.offset.click).top,o=a.ui.isOver(n,m,k,i,c.proportions.height,c.proportions.width);return o;case"touch":return(g>=k&&g<=l||h>=k&&h<=l||g<k&&h>l)&&(e>=i&&e<=j||f>=i&&f<=j||e<i&&f>j);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();droppablesLoop:for(var g=0;g<d.length;g++){if(d[g].options.disabled||b&&!d[g].accept.call(d[g].element[0],b.currentItem||b.element))continue;for(var h=0;h<f.length;h++)if(f[h]==d[g].element[0]){d[g].proportions.height=0;continue droppablesLoop}d[g].visible=d[g].element.css("display")!="none";if(!d[g].visible)continue;e=="mousedown"&&d[g]._activate.call(d[g],c),d[g].offset=d[g].element.offset(),d[g].proportions={width:d[g].element[0].offsetWidth,height:d[g].element[0].offsetHeight}}},drop:function(b,c){var d=!1;a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){!this.options||(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,c)))});return d},dragStart:function(b,c){b.element.parents(":not(body,html)").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var d=a.ui.intersect(b,this,this.options.tolerance),e=!d&&this.isover==1?"isout":d&&this.isover==0?"isover":null;if(!e)return;var f;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");g.length&&(f=a.data(g[0],"droppable"),f.greedyChild=e=="isover"?1:0)}f&&e=="isover"&&(f.isover=0,f.isout=1,f._out.call(f,c)),this[e]=1,this[e=="isout"?"isover":"isout"]=0,this[e=="isover"?"_over":"_out"].call(this,c),f&&e=="isout"&&(f.isout=0,f.isover=1,f._over.call(f,c))}})},dragStop:function(b,c){b.element.parents(":not(body,html)").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}}})(jQuery);/*
- * jQuery UI Resizable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(":hidden")||!!a(c).parents(":hidden").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);/*
- * jQuery UI Selectable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy();return this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(!this.options.disabled){var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element});return!1}})}},_mouseDrag:function(b){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!!i&&i.element!=c.element[0]){var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.right<e||i.top>h||i.bottom<f):d.tolerance=="fit"&&(j=i.left>e&&i.right<g&&i.top>f&&i.bottom<h),j?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,c._trigger("selecting",b,{selecting:i.element}))):(i.selecting&&((b.metaKey||b.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),c._trigger("unselecting",b,{unselecting:i.element}))),i.selected&&!b.metaKey&&!b.ctrlKey&&!i.startselected&&(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,c._trigger("unselecting",b,{unselecting:i.element})))}});return!1}},_mouseStop:function(b){var c=this;this.dragged=!1;var d=this.options;a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove();return!1}}),a.extend(a.ui.selectable,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Sortable 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f){e=a(this);return!1}});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}this.currentItem=e,this._removeCurrentsFromItems();return!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b);return!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:b.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<c.scrollSensitivity?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:b.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed)):(b.pageY-a(document).scrollTop()<c.scrollSensitivity?d=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<c.scrollSensitivity&&(d=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed)),b.pageX-a(document).scrollLeft()<c.scrollSensitivity?d=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<c.scrollSensitivity&&(d=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed))),d!==!1&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(var e=this.items.length-1;e>=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(b,c){if(!!b){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1}},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"=");return d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")});return d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+j<i&&b+k>f&&b+k<g;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?l:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left,b.width),e=c&&d,f=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();if(!e)return!1;return this.floating?g&&g=="right"||f=="down"?2:1:f&&(f=="down"?2:1)},_intersectsWithSides:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top+b.height/2,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left+b.width/2,b.width),e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return this.floating&&f?f=="right"&&d||f=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a),this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(b){this.items=[],this.containers=[this];var c=this.items,d=this,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],f=this._connectWith();if(f&&this.ready)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i<m;i++){var n=a(l[i]);n.data(this.widgetName+"-item",k),c.push({item:n,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;c>=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];e||(b.style.visibility="hidden");return b},update:function(a,b){if(!e||!!d.forcePlaceholderSize)b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!!c)if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.items[i][this.containers[d].floating?"left":"top"];Math.abs(j-h)<f&&(f=Math.abs(j-h),g=this.items[i])}if(!g&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[d],g?this._rearrange(b,g,null,!0):this._rearrange(b,null,this.containers[d].element,!0),this._trigger("change",b,this._uiHash()),this.containers[d]._trigger("change",b,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(d[0].style.width==""||c.forceHelperSize)&&d.width(this.currentItem.width()),(d[0].style.height==""||c.forceHelperSize)&&d.height(this.currentItem.height());return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)){var c=a(b.containment)[0],d=a(b.containment).offset(),e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var f=b.pageX,g=b.pageY;if(this.originalPosition){this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.top<this.containment[1]||h-this.offset.click.top>this.containment[3]?h-this.offset.click.top<this.containment[1]?h+c.grid[1]:h-c.grid[1]:h:h;var i=this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0];f=this.containment?i-this.offset.click.left<this.containment[0]||i-this.offset.click.left>this.containment[2]?i-this.offset.click.left<this.containment[0]?i+c.grid[0]:i-c.grid[0]:i:i}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this,f=this.counter;window.setTimeout(function(){f==e.counter&&e.refreshPositions(!d)},0)},_clear:function(b,c){this.reverting=!1;var d=[],e=this;!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var f in this._storedCSS)if(this._storedCSS[f]=="auto"||this._storedCSS[f]=="static")this._storedCSS[f]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(a){this._trigger("update",a,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(a){this._trigger("remove",a,this._uiHash())});for(var f=this.containers.length-1;f>=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return!1}c||this._trigger("beforeStop",b,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!c){for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}this.fromOutside=!1;return!0},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.extend(a.ui.sortable,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Accordion 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(b.autoHeight||b.fillHeight)&&c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(!(this.options.disabled||b.altKey||b.ctrlKey)){var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}if(f){a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus();return!1}return!0}},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];this._clickHandler({target:b},b);return this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(!d.disabled){if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return}},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!!g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}}),a.extend(a.ui.accordion,{version:"1.8.18",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size())b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);else{if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})}},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);/*
- * jQuery UI Autocomplete 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.position.js
- */(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!b.options.disabled&&!b.element.propAttr("readOnly")){d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._move("previous",c),c.preventDefault();break;case e.DOWN:b._move("next",c),c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){b.options.disabled||(b.selectedItem=null,b.previous=b.element.val())}).bind("blur.autocomplete",function(a){b.options.disabled||(clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150))}),this._initSource(),this.response=function(){return b._response.apply(b,arguments)},this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,d,e;a.isArray(this.options.source)?(d=this.options.source,this.source=function(b,c){c(a.ui.autocomplete.filter(d,b.term))}):typeof this.options.source=="string"?(e=this.options.source,this.source=function(d,f){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:e,data:d,dataType:"json",context:{autocompleteRequest:++c},success:function(a,b){this.autocompleteRequest===c&&f(a)},error:function(){this.autocompleteRequest===c&&f([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==!1)return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this.response)},_response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close(),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){if(b.length&&b[0].label&&b[0].value)return b;return a.map(b,function(b){if(typeof b=="string")return{label:b,value:b};return a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible"))this.search(null,b);else{if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)}},widget:function(){return this.menu.element}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){!a(c.target).closest(".ui-menu-item a").length||(c.preventDefault(),b.select(c))}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){!this.active||(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active)this.activate(c,this.element.children(b));else{var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))}},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10}),result.length||(result=this.element.children(".ui-menu-item:first")),this.activate(b,result)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);/*
- * jQuery UI Button 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form}));return e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.propAttr("disabled"):this.element.propAttr("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){h.disabled||(a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active"))}).bind("mouseleave.button",function(){h.disabled||a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){f||b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){h.disabled||(f=!1,d=a.pageX,e=a.pageY)}).bind("mouseup.button",function(a){!h.disabled&&(d!==a.pageX||e!==a.pageY)&&(f=!0)})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);b==="disabled"?c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1):this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery);/*
- * jQuery UI Dialog 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.button.js
- * jquery.ui.draggable.js
- * jquery.ui.mouse.js
- * jquery.ui.position.js
- * jquery.ui.resizable.js
- */(function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||"&#160;",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){b.close(a);return!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("<span></span>").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1!==c._trigger("beforeClose",b)){c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d);return c}},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;if(e.modal&&!b||!e.stack&&!e.modal)return d._trigger("focus",c);e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c);return d},open:function(){if(!this._isOpen){var b=this,c=b.options,d=b.uiDialog;b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey){d.focus(1);return!1}if(b.target===d[0]&&b.shiftKey){e.focus(1);return!1}}}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open");return b}},_createButtons:function(b){var c=this,d=!1,e=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('<button type="button"></button>').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){a!=="click"&&(a in f?e[a](b):e.attr(a,b))}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||"&#160;"))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.18",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");b||(this.uuid+=1,b=this.uuid);return"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return!1})},1),a(document).bind("keydown.dialog-overlay",function(c){b.options.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}),a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&c.bgiframe(),this.instances.push(c);return c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;if(a.browser.msie&&a.browser.version<7){b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return b<c?a(window).height()+"px":b+"px"}return a(document).height()+"px"},width:function(){var b,c;if(a.browser.msie){b=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return b<c?a(window).width()+"px":b+"px"}return a(document).width()+"px"},resize:function(){var b=a([]);a.each(a.ui.dialog.overlay.instances,function(){b=b.add(this)}),b.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}}),a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);/*
- * jQuery UI Slider 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(!b.options.disabled){switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length)this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);else return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()}},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;a=this._trimAlignValue(a);return a},_values:function(a){var b,c,d;if(arguments.length){b=this.options.values[a],b=this._trimAlignValue(b);return b}c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Tabs 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){function f(){return++d}function e(){return++c}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash){e.selected=a;return!1}}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1){this.blur();return!1}e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected")){e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur();return!1}if(!f.length){e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur();return!1}}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$="+a+"]")));return a},destroy:function(){var b=this.options;this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie);return this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0]));return this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a])));return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup();return this},url:function(a,b){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.18"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){t=d.selected,e()}:function(a){a.clientX&&c.rotate(null)});a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate);return this}})})(jQuery);/*
- * jQuery UI Datepicker 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- * jquery.ui.core.js
- */(function($,undefined){function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);!c.length||c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);!$.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])&&!!d.length&&(d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover"))})}function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}$.extend($.ui,{datepicker:{version:"1.8.18"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){extendRemove(this._defaults,a||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);c.hasClass(this.markerClassName)||(this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a))},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$('<span class="'+this._appendClass+'">'+c+"</span>"),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('<button type="button"></button>').addClass(this._triggerClass).html(g==""?f:$("<img/>").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){$.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]);return!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;d<a.length;d++)a[d].length>b&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);c.hasClass(this.markerClassName)||(c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block"))},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+g+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f);return this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return!0;return!1},_getInst:function(a){try{return $.data(a,PROP_NAME)}catch(b){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(a,b,c){var d=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?$.extend({},$.datepicker._defaults):d?b=="all"?$.extend({},d.settings):this._get(d,b):null;var e=b||{};typeof b=="string"&&(e={},e[b]=c);if(d){this._curInst==d&&this._hideDatepicker();var f=this._getDateDatepicker(a,!0),g=this._getMinMaxDate(d,"min"),h=this._getMinMaxDate(d,"max");extendRemove(d.settings,e),g!==null&&e.dateFormat!==undefined&&e.minDate===undefined&&(d.settings.minDate=this._formatDate(d,g)),h!==null&&e.dateFormat!==undefined&&e.maxDate===undefined&&(d.settings.maxDate=this._formatDate(d,h)),this._attachments($(a),d),this._autoSize(d),this._setDate(d,f),this._updateAlternate(d),this._updateDatepicker(d)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);c&&!c.inline&&this._setDateFromField(c,b);return c?this._getDate(c):null},_doKeyDown:function(a){var b=$.datepicker._getInst(a.target),c=!0,d=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=!0;if($.datepicker._datepickerShowing)switch(a.keyCode){case 9:$.datepicker._hideDatepicker(),c=!1;break;case 13:var e=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",b.dpDiv);e[0]&&$.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,e[0]);var f=$.datepicker._get(b,"onSelect");if(f){var g=$.datepicker._formatDate(b);f.apply(b.input?b.input[0]:null,[g,b])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&$.datepicker._clearDate(a.target),c=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&$.datepicker._gotoToday(a.target),c=a.ctrlKey||a.metaKey;break;case 37:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?1:-1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,-7,"D"),c=a.ctrlKey||a.metaKey;break;case 39:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?-1:1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,7,"D"),c=a.ctrlKey||a.metaKey;break;default:c=!1}else a.keyCode==36&&a.ctrlKey?$.datepicker._showDatepicker(this):c=!1;c&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(a){var b=$.datepicker._getInst(a.target);if($.datepicker._get(b,"constrainInput")){var c=$.datepicker._possibleChars($.datepicker._get(b,"dateFormat")),d=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||d<" "||!c||c.indexOf(d)>-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(a){$.datepicker.log(a)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if(!$.datepicker._isDisabledDatepicker(a)&&$.datepicker._lastInput!=a){var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){e|=$(this).css("position")=="fixed";return!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+$(document).scrollLeft(),i=document.documentElement.clientHeight+$(document).scrollTop();b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0);return b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=$.data(a,PROP_NAME))&&this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=this,f=function(){$.datepicker._tidyDialog(b),e._curInst=null};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,f):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,f),c||f(),this._datepickerShowing=!1;var g=this._get(b,"onClose");g&&g.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!!$.datepicker._curInst){var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);this._isDisabledDatepicker(d[0])||(this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e))},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if(!$(d).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(e[0])){var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();b.setMonth(0),b.setDate(1);return Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1<a.length&&a.charAt(s+1)==b;c&&s++;return c},o=function(a){var c=n(a),d=a=="@"?14:a=="!"?20:a=="y"&&c?4:a=="o"?3:2,e=new RegExp("^\\d{1,"+d+"}"),f=b.substring(r).match(e);if(!f)throw"Missing number at position "+r;r+=f[0].length;return parseInt(f[0],10)},p=function(a,c,d){var e=$.map(n(a)?d:c,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),f=-1;$.each(e,function(a,c){var d=c[1];if(b.substr(r,d.length).toLowerCase()==d.toLowerCase()){f=c[0],r+=d.length;return!1}});if(f!=-1)return f+1;throw"Unknown name at position "+r},q=function(){if(b.charAt(r)!=a.charAt(s))throw"Unexpected literal at position "+r;r++},r=0;for(var s=0;s<a.length;s++)if(m)a.charAt(s)=="'"&&!n("'")?m=!1:q();else switch(a.charAt(s)){case"d":k=o("d");break;case"D":p("D",e,f);break;case"o":l=o("o");break;case"m":j=o("m");break;case"M":j=p("M",g,h);break;case"y":i=o("y");break;case"@":var t=new Date(o("@"));i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"!":var t=new Date((o("!")-this._ticksTo1970)/1e4);i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"'":n("'")?q():m=!0;break;default:q()}if(r<b.length)throw"Extra/unparsed characters found in date: "+b.substring(r);i==-1?i=(new Date).getFullYear():i<100&&(i+=(new Date).getFullYear()-(new Date).getFullYear()%100+(i<=d?0:-100));if(l>-1){j=1,k=l;for(;;){var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+1<a.length&&a.charAt(m+1)==b;c&&m++;return c},i=function(a,b,c){var d=""+b;if(h(a))while(d.length<c)d="0"+d;return d},j=function(a,b,c,d){return h(a)?d[b]:c[b]},k="",l=!1;if(b)for(var m=0;m<a.length;m++)if(l)a.charAt(m)=="'"&&!h("'")?l=!1:k+=a.charAt(m);else switch(a.charAt(m)){case"d":k+=i("d",b.getDate(),2);break;case"D":k+=j("D",b.getDay(),d,e);break;case"o":k+=i("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":k+=i("m",b.getMonth()+1,2);break;case"M":k+=j("M",b.getMonth(),f,g);break;case"y":k+=h("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":k+=b.getTime();break;case"!":k+=b.getTime()*1e4+this._ticksTo1970;break;case"'":h("'")?k+="'":l=!0;break;default:k+=a.charAt(m)}return k},_possibleChars:function(a){var b="",c=!1,d=function(b){var c=e+1<a.length&&a.charAt(e+1)==b;c&&e++;return c};for(var e=0;e<a.length;e++)if(c)a.charAt(e)=="'"&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case"d":case"m":case"y":case"@":b+="0123456789";break;case"D":case"M":return null;case"'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e,f;e=f=this._getDefaultDate(a);var g=this._getFormatConfig(a);try{e=this.parseDate(c,d,g)||f}catch(h){this.log(h),d=b?"":d}a.selectedDay=e.getDate(),a.drawMonth=a.selectedMonth=e.getMonth(),a.drawYear=a.selectedYear=e.getFullYear(),a.currentDay=d?e.getDate():0,a.currentMonth=d?e.getMonth():0,a.currentYear=d?e.getFullYear():0,this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var d=function(a){var b=new Date;b.setDate(b.getDate()+a);return b},e=function(b){try{return $.datepicker.parseDate($.datepicker._get(a,"dateFormat"),b,$.datepicker._getFormatConfig(a))}catch(c){}var d=(b.toLowerCase().match(/^c/)?$.datepicker._getDate(a):null)||new Date,e=d.getFullYear(),f=d.getMonth(),g=d.getDate(),h=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,i=h.exec(b);while(i){switch(i[2]||"d"){case"d":case"D":g+=parseInt(i[1],10);break;case"w":case"W":g+=parseInt(i[1],10)*7;break;case"m":case"M":f+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f));break;case"y":case"Y":e+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f))}i=h.exec(b)}return new Date(e,f,g)},f=b==null||b===""?c:typeof b=="string"?e(b):typeof b=="number"?isNaN(b)?c:d(b):new Date(b.getTime());f=f&&f.toString()=="Invalid Date"?c:f,f&&(f.setHours(0),f.setMinutes(0),f.setSeconds(0),f.setMilliseconds(0));return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&p<l?l:p;while(this._daylightSavingAdjust(new Date(o,n,1))>p)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', -"+i+", 'M');\""+' title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>":e?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', +"+i+", 'M');\""+' title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":e?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+dpuuid+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>",x=d?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?w:"")+(this._isInRange(a,v)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._gotoToday('#"+a.id+"');\""+">"+u+"</button>":"")+(c?"":w)+"</div>":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L<g[0];L++){var M="";this.maxRows=4;for(var N=0;N<g[1];N++){var O=this._daylightSavingAdjust(new Date(o,n,a.selectedDay)),P=" ui-corner-all",Q="";if(j){Q+='<div class="ui-datepicker-group';if(g[1]>1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+P+'">'+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var R=z?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="<th"+((S+y+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+A[T]+'">'+C[T]+"</span></th>"}Q+=R+"</tr></thead><tbody>";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z<X;Z++){Q+="<tr>";var _=z?'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(Y)+"</td>":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Y<l||m&&Y>m;_+='<td class="'+((S+y+6)%7>=5?" ui-datepicker-week-end":"")+(bb?" ui-datepicker-other-month":"")+(Y.getTime()==O.getTime()&&n==a.selectedMonth&&a._keyEvent||J.getTime()==Y.getTime()&&J.getTime()==O.getTime()?" "+this._dayOverClass:"")+(bc?" "+this._unselectableClass+" ui-state-disabled":"")+(bb&&!G?"":" "+ba[1]+(Y.getTime()==k.getTime()?" "+this._currentClass:"")+(Y.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!bb||G)&&ba[2]?' title="'+ba[2]+'"':"")+(bc?"":' onclick="DP_jQuery_'+dpuuid+".datepicker._selectDay('#"+a.id+"',"+Y.getMonth()+","+Y.getFullYear()+', this);return false;"')+">"+(bb&&!G?"&#xa0;":bc?'<span class="ui-state-default">'+Y.getDate()+"</span>":'<a class="ui-state-default'+(Y.getTime()==b.getTime()?" ui-state-highlight":"")+(Y.getTime()==k.getTime()?" ui-state-active":"")+(bb?" ui-priority-secondary":"")+'" href="#">'+Y.getDate()+"</a>")+"</td>",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+"</tr>"}n++,n>11&&(n=0,o++),Q+="</tbody></table>"+(j?"</div>"+(g[0]>0&&N==g[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),M+=Q}K+=M}K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),
-a._keyEvent=!1;return K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='<div class="ui-datepicker-title">',m="";if(f||!i)m+='<span class="ui-datepicker-month">'+g[b]+"</span>";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" "+">";for(var p=0;p<12;p++)(!n||p>=d.getMonth())&&(!o||p<=e.getMonth())&&(m+='<option value="'+p+'"'+(p==b?' selected="selected"':"")+">"+h[p]+"</option>");m+="</select>"}k||(l+=m+(f||!i||!j?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+='<span class="ui-datepicker-year">'+c+"</span>";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" "+">";for(;t<=u;t++)a.yearshtml+='<option value="'+t+'"'+(t==c?' selected="selected"':"")+">"+t+"</option>";a.yearshtml+="</select>",l+=a.yearshtml,a.yearshtml=null}}l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?"&#xa0;":"")+m),l+="</div>";return l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&b<c?c:b;e=d&&e>d?d:e;return e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth()));return this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)})},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.18",window["DP_jQuery_"+dpuuid]=$})(jQuery);/*
- * jQuery UI Progressbar 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===b)return this._value();this._setOption("value",a);return this},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;typeof a!="number"&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.18"})})(jQuery);/*
- * jQuery UI Effects 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */jQuery.effects||function(a,b){function l(b){if(!b||typeof b=="number"||a.fx.speeds[b])return!0;if(typeof b=="string"&&!a.effects[b])return!0;return!1}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete;return[b,c,d,e]}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function d(b,d){var e;do{e=a.curCSS(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function c(b){var c;if(b&&b.constructor==Array&&b.length==3)return b;if(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))return[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];if(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))return[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55];if(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];if(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];if(c=/rgba\(0, 0, 0, 0\)/.exec(b))return e.transparent;return e[a.trim(b).toLowerCase()]}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){a.isFunction(d)&&(e=d,d=null);return this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class");a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.18",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){b=="toggle"&&(b=a.is(":hidden")?"show":"hide");return b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;if(b.parent().is(".ui-effects-wrapper")){c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus();return c}return b},setTransition:function(b,c,d,e){e=e||{},a.each(c,function(a,c){unit=b.cssUnit(c),unit[0]>0&&(e[c]=unit[0]*d+unit[1])});return e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];if(a.fx.off||!i)return h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)});return i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])});return d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b+c;return-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b+c;return d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b+c;return-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b*b+c;return d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){if(b==0)return c;if(b==e)return c+d;if((b/=e/2)<1)return d/2*Math.pow(2,10*(b-1))+c;return d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){if((b/=e/2)<1)return-d/2*(Math.sqrt(1-b*b)-1)+c;return d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin((b*e-f)*2*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e/2)==2)return c+d;g||(g=e*.3*1.5);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);if(b<1)return-0.5*h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)+c;return h*Math.pow(2,-10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)*.5+d+c},easeInBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);if((c/=f/2)<1)return e/2*c*c*(((g*=1.525)+1)*c-g)+d;return e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(b,c,d,e,f){return e-a.easing.easeOutBounce(b,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(b,c,d,e,f){if(c<f/2)return a.easing.easeInBounce(b,c*2,0,e,f)*.5+d;return a.easing.easeOutBounce(b,c*2-f,0,e,f)*.5+e*.5+d}})}(jQuery);/*
- * jQuery UI Effects Blind 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
- * jQuery UI Effects Bounce 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m<h;m++){var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing),g=e=="hide"?g*2:g/2}if(e=="hide"){var l={opacity:0};l[j]=(k=="pos"?"-=":"+=")+g,c.animate(l,i/2,b.options.easing,function(){c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}else{var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
- * jQuery UI Effects Clip 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.clip=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","height","width"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=c[0].tagName=="IMG"?g:c,i={size:f=="vertical"?"height":"width",position:f=="vertical"?"top":"left"},j=f=="vertical"?h.height():h.width();e=="show"&&(h.css(i.size,0),h.css(i.position,j/2));var k={};k[i.size]=e=="show"?j:0,k[i.position]=e=="show"?0:j/2,h.animate(k,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Drop 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.drop=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","opacity"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);e=="show"&&c.css("opacity",0).css(g,h=="pos"?-i:i);var j={opacity:e=="show"?1:0};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Explode 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.explode=function(b){return this.queue(function(){var c=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3,d=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":b.options.mode;var e=a(this).show().css("visibility","hidden"),f=e.offset();f.top-=parseInt(e.css("marginTop"),10)||0,f.left-=parseInt(e.css("marginLeft"),10)||0;var g=e.outerWidth(!0),h=e.outerHeight(!0);for(var i=0;i<c;i++)for(var j=0;j<d;j++)e.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);/*
- * jQuery UI Effects Fade 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Fold 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
- * jQuery UI Effects Highlight 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Pulsate 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show");times=(b.options.times||5)*2-1,duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=c.is(":visible"),animateTo=0,isVisible||(c.css("opacity",0).show(),animateTo=1),(d=="hide"&&isVisible||d=="show"&&!isVisible)&&times--;for(var e=0;e<times;e++)c.animate({opacity:animateTo},duration,b.options.easing),animateTo=(animateTo+1)%2;c.animate({opacity:animateTo},duration,b.options.easing,function(){animateTo==0&&c.hide(),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);/*
- * jQuery UI Effects Scale 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.puff=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,f=e/100,g={height:c.height(),width:c.width()};a.extend(b.options,{fade:!0,mode:d,percent:d=="hide"?e:100,from:d=="hide"?g:{height:g.height*f,width:g.width*f}}),c.effect("scale",b.options,b.duration,b.callback),c.dequeue()})},a.effects.scale=function(b){return this.queue(function(){var c=a(this),d=a.extend(!0,{},b.options),e=a.effects.setMode(c,b.options.mode||"effect"),f=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:e=="hide"?0:100),g=b.options.direction||"both",h=b.options.origin;e!="effect"&&(d.origin=h||["middle","center"],d.restore=!0);var i={height:c.height(),width:c.width()};c.from=b.options.from||(e=="show"?{height:0,width:0}:i);var j={y:g!="horizontal"?f/100:1,x:g!="vertical"?f/100:1};c.to={height:i.height*j.y,width:i.width*j.x},b.options.fade&&(e=="show"&&(c.from.opacity=0,c.to.opacity=1),e=="hide"&&(c.from.opacity=1,c.to.opacity=0)),d.from=c.from,d.to=c.to,d.mode=e,c.effect("size",d,b.duration,b.callback),c.dequeue()})},a.effects.size=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","width","height","overflow","opacity"],e=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],g=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=a.effects.setMode(c,b.options.mode||"effect"),k=b.options.restore||!1,l=b.options.scale||"both",m=b.options.origin,n={height:c.height(),width:c.width()};c.from=b.options.from||n,c.to=b.options.to||n;if(m){var p=a.effects.getBaseline(m,n);c.from.top=(n.height-c.from.height)*p.y,c.from.left=(n.width-c.from.width)*p.x,c.to.top=(n.height-c.to.height)*p.y,c.to.left=(n.width-c.to.width)*p.x}var q={from:{y:c.from.height/n.height,x:c.from.width/n.width},to:{y:c.to.height/n.height,x:c.to.width/n.width}};if(l=="box"||l=="both")q.from.y!=q.to.y&&(d=d.concat(h),c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(d=d.concat(i),c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to));(l=="content"||l=="both")&&q.from.y!=q.to.y&&(d=d.concat(g),c.from=a.effects.setTransition(c,g,q.from.y,c.from),c.to=a.effects.setTransition(c,g,q.to.y,c.to)),a.effects.save(c,k?d:e),c.show(),a.effects.createWrapper(c),c.css("overflow","hidden").css(c.from);if(l=="content"||l=="both")h=h.concat(["marginTop","marginBottom"]).concat(g),i=i.concat(["marginLeft","marginRight"]),f=d.concat(h).concat(i),c.find("*[width]").each(function(){child=a(this),k&&a.effects.save(child,f);var c={height:child.height(),width:child.width()};child.from={height:c.height*q.from.y,width:c.width*q.from.x},child.to={height:c.height*q.to.y,width:c.width*q.to.x},q.from.y!=q.to.y&&(child.from=a.effects.setTransition(child,h,q.from.y,child.from),child.to=a.effects.setTransition(child,h,q.to.y,child.to)),q.from.x!=q.to.x&&(child.from=a.effects.setTransition(child,i,q.from.x,child.from),child.to=a.effects.setTransition(child,i,q.to.x,child.to)),child.css(child.from),child.animate(child.to,b.duration,b.options.easing,function(){k&&a.effects.restore(child,f)})});c.animate(c.to,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity),j=="hide"&&c.hide(),a.effects.restore(c,k?d:e),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Shake 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.shake=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"left",g=b.options.distance||20,h=b.options.times||3,i=b.duration||b.options.duration||140;a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",l={},m={},n={};l[j]=(k=="pos"?"-=":"+=")+g,m[j]=(k=="pos"?"+=":"-=")+g*2,n[j]=(k=="pos"?"-=":"+=")+g*2,c.animate(l,i,b.options.easing);for(var p=1;p<h;p++)c.animate(m,i,b.options.easing).animate(n,i,b.options.easing);c.animate(m,i,b.options.easing).animate(l,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
- * jQuery UI Effects Slide 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
- * jQuery UI Effects Transfer 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- * jquery.effects.core.js
- */(function(a,b){a.effects.transfer=function(b){return this.queue(function(){var c=a(this),d=a(b.options.to),e=d.offset(),f={top:e.top,left:e.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery); \ No newline at end of file
diff --git a/library/epub-meta/assets/js/jquery.cleditor.min.js b/library/epub-meta/assets/js/jquery.cleditor.min.js
deleted file mode 100644
index 5afec0488..000000000
--- a/library/epub-meta/assets/js/jquery.cleditor.min.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- CLEditor WYSIWYG HTML Editor v1.3.0
- http://premiumsoftware.net/cleditor
- requires jQuery v1.4.2 or later
-
- Copyright 2010, Chris Landowski, Premium Software, LLC
- Dual licensed under the MIT or GPL Version 2 licenses.
-*/
-(function(e){function aa(a){var b=this,c=a.target,d=e.data(c,x),h=s[d],f=h.popupName,i=p[f];if(!(b.disabled||e(c).attr(n)==n)){var g={editor:b,button:c,buttonName:d,popup:i,popupName:f,command:h.command,useCSS:b.options.useCSS};if(h.buttonClick&&h.buttonClick(a,g)===false)return false;if(d=="source"){if(t(b)){delete b.range;b.$area.hide();b.$frame.show();c.title=h.title}else{b.$frame.hide();b.$area.show();c.title="Show Rich Text"}setTimeout(function(){u(b)},100)}else if(!t(b))if(f){var j=e(i);if(f==
-"url"){if(d=="link"&&M(b)===""){z(b,"A selection is required when inserting a link.",c);return false}j.children(":button").unbind(q).bind(q,function(){var k=j.find(":text"),o=e.trim(k.val());o!==""&&v(b,g.command,o,null,g.button);k.val("http://");r();w(b)})}else f=="pastetext"&&j.children(":button").unbind(q).bind(q,function(){var k=j.find("textarea"),o=k.val().replace(/\n/g,"<br />");o!==""&&v(b,g.command,o,null,g.button);k.val("");r();w(b)});if(c!==e.data(i,A)){N(b,i,c);return false}return}else if(d==
-"print")b.$frame[0].contentWindow.print();else if(!v(b,g.command,g.value,g.useCSS,c))return false;w(b)}}function O(a){a=e(a.target).closest("div");a.css(H,a.data(x)?"#FFF":"#FFC")}function P(a){e(a.target).closest("div").css(H,"transparent")}function ba(a){var b=a.data.popup,c=a.target;if(!(b===p.msg||e(b).hasClass(B))){var d=e.data(b,A),h=e.data(d,x),f=s[h],i=f.command,g,j=this.options.useCSS;if(h=="font")g=c.style.fontFamily.replace(/"/g,"");else if(h=="size"){if(c.tagName=="DIV")c=c.children[0];
-g=c.innerHTML}else if(h=="style")g="<"+c.tagName+">";else if(h=="color")g=Q(c.style.backgroundColor);else if(h=="highlight"){g=Q(c.style.backgroundColor);if(l)i="backcolor";else j=true}b={editor:this,button:d,buttonName:h,popup:b,popupName:f.popupName,command:i,value:g,useCSS:j};if(!(f.popupClick&&f.popupClick(a,b)===false)){if(b.command&&!v(this,b.command,b.value,b.useCSS,d))return false;r();w(this)}}}function C(a){for(var b=1,c=0,d=0;d<a.length;++d){b=(b+a.charCodeAt(d))%65521;c=(c+b)%65521}return c<<
-16|b}function R(a,b,c,d,h){if(p[a])return p[a];var f=e(m).hide().addClass(ca).appendTo("body");if(d)f.html(d);else if(a=="color"){b=b.colors.split(" ");b.length<10&&f.width("auto");e.each(b,function(i,g){e(m).appendTo(f).css(H,"#"+g)});c=da}else if(a=="font")e.each(b.fonts.split(","),function(i,g){e(m).appendTo(f).css("fontFamily",g).html(g)});else if(a=="size")e.each(b.sizes.split(","),function(i,g){e(m).appendTo(f).html("<font size="+g+">"+g+"</font>")});else if(a=="style")e.each(b.styles,function(i,
-g){e(m).appendTo(f).html(g[1]+g[0]+g[1].replace("<","</"))});else if(a=="url"){f.html('Enter URL:<br><input type=text value="http://" size=35><br><input type=button value="Submit">');c=B}else if(a=="pastetext"){f.html("Paste your content here and click submit.<br /><textarea cols=40 rows=3></textarea><br /><input type=button value=Submit>");c=B}if(!c&&!d)c=S;f.addClass(c);l&&f.attr(I,"on").find("div,font,p,h1,h2,h3,h4,h5,h6").attr(I,"on");if(f.hasClass(S)||h===true)f.children().hover(O,P);p[a]=f[0];
-return f[0]}function T(a,b){if(b){a.$area.attr(n,n);a.disabled=true}else{a.$area.removeAttr(n);delete a.disabled}try{if(l)a.doc.body.contentEditable=!b;else a.doc.designMode=!b?"on":"off"}catch(c){}u(a)}function v(a,b,c,d,h){D(a);if(!l){if(d===undefined||d===null)d=a.options.useCSS;a.doc.execCommand("styleWithCSS",0,d.toString())}d=true;var f;if(l&&b.toLowerCase()=="inserthtml")y(a).pasteHTML(c);else{try{d=a.doc.execCommand(b,0,c||null)}catch(i){f=i.description;d=false}d||("cutcopypaste".indexOf(b)>
--1?z(a,"For security reasons, your browser does not support the "+b+" command. Try using the keyboard shortcut or context menu instead.",h):z(a,f?f:"Error executing the "+b+" command.",h))}u(a);return d}function w(a){setTimeout(function(){t(a)?a.$area.focus():a.$frame[0].contentWindow.focus();u(a)},0)}function y(a){if(l)return J(a).createRange();return J(a).getRangeAt(0)}function J(a){if(l)return a.doc.selection;return a.$frame[0].contentWindow.getSelection()}function Q(a){var b=/rgba?\((\d+), (\d+), (\d+)/.exec(a),
-c=a.split("");if(b)for(a=(b[1]<<16|b[2]<<8|b[3]).toString(16);a.length<6;)a="0"+a;return"#"+(a.length==6?a:c[1]+c[1]+c[2]+c[2]+c[3]+c[3])}function r(){e.each(p,function(a,b){e(b).hide().unbind(q).removeData(A)})}function U(){var a=e("link[href$='jquery.cleditor.css']").attr("href");return a.substr(0,a.length-19)+"images/"}function K(a){var b=a.$main,c=a.options;a.$frame&&a.$frame.remove();var d=a.$frame=e('<iframe frameborder="0" src="javascript:true;">').hide().appendTo(b),h=d[0].contentWindow,f=
-a.doc=h.document,i=e(f);f.open();f.write(c.docType+"<html>"+(c.docCSSFile===""?"":'<head><link rel="stylesheet" type="text/css" href="'+c.docCSSFile+'" /></head>')+'<body style="'+c.bodyStyle+'"></body></html>');f.close();l&&i.click(function(){w(a)});E(a);if(l){i.bind("beforedeactivate beforeactivate selectionchange keypress",function(g){if(g.type=="beforedeactivate")a.inactive=true;else if(g.type=="beforeactivate"){!a.inactive&&a.range&&a.range.length>1&&a.range.shift();delete a.inactive}else if(!a.inactive){if(!a.range)a.range=
-[];for(a.range.unshift(y(a));a.range.length>2;)a.range.pop()}});d.focus(function(){D(a)})}(e.browser.mozilla?i:e(h)).blur(function(){V(a,true)});i.click(r).bind("keyup mouseup",function(){u(a)});L?a.$area.show():d.show();e(function(){var g=a.$toolbar,j=g.children("div:last"),k=b.width();j=j.offset().top+j.outerHeight()-g.offset().top+1;g.height(j);j=(/%/.test(""+c.height)?b.height():parseInt(c.height))-j;d.width(k).height(j);a.$area.width(k).height(ea?j-2:j);T(a,a.disabled);u(a)})}function u(a){if(!L&&
-e.browser.webkit&&!a.focused){a.$frame[0].contentWindow.focus();window.focus();a.focused=true}var b=a.doc;if(l)b=y(a);var c=t(a);e.each(a.$toolbar.find("."+W),function(d,h){var f=e(h),i=e.cleditor.buttons[e.data(h,x)],g=i.command,j=true;if(a.disabled)j=false;else if(i.getEnabled){j=i.getEnabled({editor:a,button:h,buttonName:i.name,popup:p[i.popupName],popupName:i.popupName,command:i.command,useCSS:a.options.useCSS});if(j===undefined)j=true}else if((c||L)&&i.name!="source"||l&&(g=="undo"||g=="redo"))j=
-false;else if(g&&g!="print"){if(l&&g=="hilitecolor")g="backcolor";if(!l||g!="inserthtml")try{j=b.queryCommandEnabled(g)}catch(k){j=false}}if(j){f.removeClass(X);f.removeAttr(n)}else{f.addClass(X);f.attr(n,n)}})}function D(a){l&&a.range&&a.range[0].select()}function M(a){D(a);if(l)return y(a).text;return J(a).toString()}function z(a,b,c){var d=R("msg",a.options,fa);d.innerHTML=b;N(a,d,c)}function N(a,b,c){var d,h,f=e(b);if(c){var i=e(c);d=i.offset();h=--d.left;d=d.top+i.height()}else{i=a.$toolbar;
-d=i.offset();h=Math.floor((i.width()-f.width())/2)+d.left;d=d.top+i.height()-2}r();f.css({left:h,top:d}).show();if(c){e.data(b,A,c);f.bind(q,{popup:b},e.proxy(ba,a))}setTimeout(function(){f.find(":text,textarea").eq(0).focus().select()},100)}function t(a){return a.$area.is(":visible")}function E(a,b){var c=a.$area.val(),d=a.options,h=d.updateFrame,f=e(a.doc.body);if(h){var i=C(c);if(b&&a.areaChecksum==i)return;a.areaChecksum=i}c=h?h(c):c;c=c.replace(/<(?=\/?script)/ig,"&lt;");if(d.updateTextArea)a.frameChecksum=
-C(c);if(c!=f.html()){f.html(c);e(a).triggerHandler(F)}}function V(a,b){var c=e(a.doc.body).html(),d=a.options,h=d.updateTextArea,f=a.$area;if(h){var i=C(c);if(b&&a.frameChecksum==i)return;a.frameChecksum=i}c=h?h(c):c;if(d.updateFrame)a.areaChecksum=C(c);if(c!=f.val()){f.val(c);e(a).triggerHandler(F)}}e.cleditor={defaultOptions:{width:500,height:250,controls:"bold italic underline strikethrough subscript superscript | font size style | color highlight removeformat | bullets numbering | outdent indent | alignleft center alignright justify | undo redo | rule image link unlink | cut copy paste pastetext | print source",
-colors:"FFF FCC FC9 FF9 FFC 9F9 9FF CFF CCF FCF CCC F66 F96 FF6 FF3 6F9 3FF 6FF 99F F9F BBB F00 F90 FC6 FF0 3F3 6CC 3CF 66C C6C 999 C00 F60 FC3 FC0 3C0 0CC 36F 63F C3C 666 900 C60 C93 990 090 399 33F 60C 939 333 600 930 963 660 060 366 009 339 636 000 300 630 633 330 030 033 006 309 303",fonts:"Arial,Arial Black,Comic Sans MS,Courier New,Narrow,Garamond,Georgia,Impact,Sans Serif,Serif,Tahoma,Trebuchet MS,Verdana",sizes:"1,2,3,4,5,6,7",styles:[["Paragraph","<p>"],["Header 1","<h1>"],["Header 2","<h2>"],
-["Header 3","<h3>"],["Header 4","<h4>"],["Header 5","<h5>"],["Header 6","<h6>"]],useCSS:false,docType:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',docCSSFile:"",bodyStyle:"margin:4px; font:10pt Arial,Verdana; cursor:text"},buttons:{init:"bold,,|italic,,|underline,,|strikethrough,,|subscript,,|superscript,,|font,,fontname,|size,Font Size,fontsize,|style,,formatblock,|color,Font Color,forecolor,|highlight,Text Highlight Color,hilitecolor,color|removeformat,Remove Formatting,|bullets,,insertunorderedlist|numbering,,insertorderedlist|outdent,,|indent,,|alignleft,Align Text Left,justifyleft|center,,justifycenter|alignright,Align Text Right,justifyright|justify,,justifyfull|undo,,|redo,,|rule,Insert Horizontal Rule,inserthorizontalrule|image,Insert Image,insertimage,url|link,Insert Hyperlink,createlink,url|unlink,Remove Hyperlink,|cut,,|copy,,|paste,,|pastetext,Paste as Text,inserthtml,|print,,|source,Show Source"},
-imagesPath:function(){return U()}};e.fn.cleditor=function(a){var b=e([]);this.each(function(c,d){if(d.tagName=="TEXTAREA"){var h=e.data(d,Y);h||(h=new cleditor(d,a));b=b.add(h)}});return b};var H="backgroundColor",A="button",x="buttonName",F="change",Y="cleditor",q="click",n="disabled",m="<div>",I="unselectable",W="cleditorButton",X="cleditorDisabled",ca="cleditorPopup",S="cleditorList",da="cleditorColor",B="cleditorPrompt",fa="cleditorMsg",l=e.browser.msie,ea=/msie\s6/i.test(navigator.userAgent),
-L=/iphone|ipad|ipod/i.test(navigator.userAgent),p={},Z,s=e.cleditor.buttons;e.each(s.init.split("|"),function(a,b){var c=b.split(","),d=c[0];s[d]={stripIndex:a,name:d,title:c[1]===""?d.charAt(0).toUpperCase()+d.substr(1):c[1],command:c[2]===""?d:c[2],popupName:c[3]===""?d:c[3]}});delete s.init;cleditor=function(a,b){var c=this;c.options=b=e.extend({},e.cleditor.defaultOptions,b);var d=c.$area=e(a).hide().data(Y,c).blur(function(){E(c,true)}),h=c.$main=e(m).addClass("cleditorMain").width(b.width).height(b.height),
-f=c.$toolbar=e(m).addClass("cleditorToolbar").appendTo(h),i=e(m).addClass("cleditorGroup").appendTo(f);e.each(b.controls.split(" "),function(g,j){if(j==="")return true;if(j=="|"){e(m).addClass("cleditorDivider").appendTo(i);i=e(m).addClass("cleditorGroup").appendTo(f)}else{var k=s[j],o=e(m).data(x,k.name).addClass(W).attr("title",k.title).bind(q,e.proxy(aa,c)).appendTo(i).hover(O,P),G={};if(k.css)G=k.css;else if(k.image)G.backgroundImage="url("+U()+k.image+")";if(k.stripIndex)G.backgroundPosition=
-k.stripIndex*-24;o.css(G);l&&o.attr(I,"on");k.popupName&&R(k.popupName,b,k.popupClass,k.popupContent,k.popupHover)}});h.insertBefore(d).append(d);if(!Z){e(document).click(function(g){g=e(g.target);g.add(g.parents()).is("."+B)||r()});Z=true}/auto|%/.test(""+b.width+b.height)&&e(window).resize(function(){K(c)});K(c)};var $=cleditor.prototype;e.each([["clear",function(a){a.$area.val("");E(a)}],["disable",T],["execCommand",v],["focus",w],["hidePopups",r],["sourceMode",t,true],["refresh",K],["select",
-function(a){setTimeout(function(){t(a)?a.$area.select():v(a,"selectall")},0)}],["selectedHTML",function(a){D(a);a=y(a);if(l)return a.htmlText;var b=e("<layer>")[0];b.appendChild(a.cloneContents());return b.innerHTML},true],["selectedText",M,true],["showMessage",z],["updateFrame",E],["updateTextArea",V]],function(a,b){$[b[0]]=function(){for(var c=[this],d=0;d<arguments.length;d++)c.push(arguments[d]);c=b[1].apply(this,c);if(b[2])return c;return this}});$.change=function(a){var b=e(this);return a?b.bind(F,
-a):b.trigger(F)}})(jQuery); \ No newline at end of file
diff --git a/library/epub-meta/assets/js/script.js b/library/epub-meta/assets/js/script.js
deleted file mode 100644
index cf8b3f2a1..000000000
--- a/library/epub-meta/assets/js/script.js
+++ /dev/null
@@ -1,194 +0,0 @@
-
-var bookapi = {
- $dialog: null,
-
- resulttpl:
- '<div class="result">' +
- ' <img src="" />'+
- ' <div>' +
- ' <div class="buttons">' +
- ' <button class="btn-repl">replace</button><br />' +
- ' <button class="btn-fill">fill in</button>' +
- ' </div>' +
- ' <h1 class="title"></h1>' +
- ' <p class="authors"></p>' +
- ' <p class="description"></p>' +
- ' <p class="more">' +
- ' <span class="lang"></span>' +
- ' <span class="publisher"></span>' +
- ' <span class="subjects"></span>' +
- ' </p>' +
- ' </div>' +
- '</div>',
-
- init: function(){
- $('body').append('<div id="bookapi"></div>');
- bookapi.$dialog = $('#bookapi');
- bookapi.$dialog.dialog(
- {
- autoOpen: false,
- title: 'Lookup Book Data',
- width: 800,
- height: 500
- }
- );
- bookapi.$dialog.append('<div class="head">Lookup: <input type="text" id="bookapi-q" /></div>')
- .append('<div id="bookapi-out"></div>');
- bookapi.$out = $('#bookapi-out');
-
- $('#bookpanel').append('<a href="#" id="bookapi-s">Lookup Book Data</a>');
- $('#bookapi-s').attr('title','Search this book at Google Books');
- $('#bookapi-s').click(bookapi.open);
-
- $('#bookapi-q').keypress(
- function(event){
- if(event.which == 13){
- event.preventDefault();
- bookapi.search();
- }
- });
-
- },
-
- open: function(){
- bookapi.$dialog.dialog('open');
-
- var query = $('#bookpanel input[name=title]').val();
- $('#bookapi-q').val(query);
-
- bookapi.search();
- },
-
- search: function(){
- bookapi.$out.html('please wait...');
- $.ajax({
- type: 'GET',
- data: {'api':$('#bookapi-q').val()},
- success: bookapi.searchdone,
- dataType: 'json'
- });
- },
-
- searchdone: function(data){
- if(data.totalItems == 0){
- bookapi.$out.html('Found no results.<br />Try adjusting the query and retry.');
- return;
- }
-
- bookapi.$out.html('');
- for(i=0; i<data.items.length; i++){
- $res = $(bookapi.resulttpl);
- if(data.items[i].volumeInfo.title)
- $res.find('.title').html(data.items[i].volumeInfo.title);
- if(data.items[i].volumeInfo.authors)
- $res.find('.authors').html(data.items[i].volumeInfo.authors.join(', '));
- if(data.items[i].volumeInfo.description)
- $res.find('.description').html(data.items[i].volumeInfo.description);
- if(data.items[i].volumeInfo.language)
- $res.find('.lang').html('['+data.items[i].volumeInfo.language+']');
- if(data.items[i].volumeInfo.publisher)
- $res.find('.publisher').html(data.items[i].volumeInfo.publisher);
- if(data.items[i].volumeInfo.categories)
- $res.find('.subjects').html(data.items[i].volumeInfo.categories.join(', '));
- if(data.items[i].volumeInfo.imageLinks)
- if(data.items[i].volumeInfo.imageLinks.thumbnail)
- $res.find('img').attr('src',data.items[i].volumeInfo.imageLinks.thumbnail);
-
- $res.find('.btn-repl').click(data.items[i].volumeInfo,bookapi.replace);
- $res.find('.btn-fill').click(data.items[i].volumeInfo,bookapi.fillin);
-
- bookapi.$out.append($res);
- }
- },
-
- replace: function(event){
- item = event.data;
- if(item.title)
- $('#bookpanel input[name=title]').val(item.title);
- if(item.description)
- $('#bookpanel textarea[name=description]').val(item.description);
- $wysiwyg[0].updateFrame();
- if(item.language)
- $('#bookpanel input[name=language]').val(item.language);
- if(item.publisher)
- $('#bookpanel input[name=publisher]').val(item.publisher);
- if(item.categories)
- $('#bookpanel input[name=subjects]').val(item.categories.join(', '));
- if(item.imageLinks){
- $('#bookpanel input[name=coverurl]').val(item.imageLinks.thumbnail);
- $('#cover').attr('src',item.imageLinks.thumbnail);
- }
- bookapi.$dialog.dialog('close');
- },
-
- fillin: function(event){
- item = event.data;
-
- if(item.title && $('#bookpanel input[name=title]').val() == '')
- $('#bookpanel input[name=title]').val(item.title);
- if(item.description && $('#bookpanel textarea[name=description]').val() == '')
- $('#bookpanel textarea[name=description]').val(item.description);
- $wysiwyg[0].updateFrame();
- if(item.language && $('#bookpanel input[name=language]').val() == '')
- $('#bookpanel input[name=language]').val(item.language);
- if(item.publisher && $('#bookpanel input[name=publisher]').val() == '')
- $('#bookpanel input[name=publisher]').val(item.publisher);
- if(item.categories && $('#bookpanel input[name=subjects]').val() == '')
- $('#bookpanel input[name=subjects]').val(item.categories.join(', '));
- if(item.imageLinks && $('#cover').hasClass('noimg')){
- $('#bookpanel input[name=coverurl]').val(item.imageLinks.thumbnail);
- $('#cover').attr('src',item.imageLinks.thumbnail);
- }
- bookapi.$dialog.dialog('close');
- }
-
-};
-
-var author = {
- init: function(){
- $button = $(document.createElement('a'));
- $button.text('+').attr('href','#');
- $button.attr('title','add another author line');
- $button.click(author.add);
- $button.addClass('addauthor');
-
- $td = $('#authors');
- $td.append($button);
- },
-
- add: function(){
- $td = $('#authors');
-
- $ps = $td.find('p');
- $new = $ps.first().clone();
- $new.find('input').first().attr('name','authorname['+$ps.length+']').val('');
- $new.find('input').last().attr('name','authoras['+$ps.length+']').val('');
-
- $ps.last().after($new);
- }
-};
-
-var $wysiwg = null;
-$(function(){
- bookapi.init();
- author.init();
-
- // scroll to currently selected book
- $current = $('#booklist li.active');
- if($current.length){
- $current[0].scrollIntoView();
- }
-
- // initialize the WYSIWYG editor
- $wysiwyg = $('textarea').cleditor({
- width: 450,
- controls: // controls to add to the toolbar
- "bold italic underline strikethrough | " +
- "style removeformat | bullets numbering | " +
- "alignleft center alignright justify | undo redo | " +
- "link unlink | source",
- styles: // styles in the style popup
- [["Paragraph", "<p>"], ["Header 1", "<h1>"], ["Header 2", "<h2>"],
- ["Header 3", "<h3>"], ["Header 4","<h4>"], ["Header 5","<h5>"]]
- });
-});
diff --git a/library/epub-meta/epub.php b/library/epub-meta/epub.php
deleted file mode 100644
index 6895a6797..000000000
--- a/library/epub-meta/epub.php
+++ /dev/null
@@ -1,536 +0,0 @@
-<?php
-/**
- * PHP EPub Meta library
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-class EPub {
- public $xml; //FIXME change to protected, later
- protected $xpath;
- protected $file;
- protected $meta;
- protected $namespaces;
- protected $imagetoadd='';
-
- /**
- * Constructor
- *
- * @param string $file path to epub file to work on
- * @throws Exception if metadata could not be loaded
- */
- public function __construct($file){
- // open file
- $this->file = $file;
- $zip = new ZipArchive();
- if(!@$zip->open($this->file)){
- throw new Exception('Failed to read epub file');
- }
-
- // read container data
- $data = $zip->getFromName('META-INF/container.xml');
- if($data == false){
- throw new Exception('Failed to access epub container data');
- }
- $xml = new DOMDocument();
- $xml->registerNodeClass('DOMElement','EPubDOMElement');
- $xml->loadXML($data);
- $xpath = new EPubDOMXPath($xml);
- $nodes = $xpath->query('//n:rootfiles/n:rootfile[@media-type="application/oebps-package+xml"]');
- $this->meta = $nodes->item(0)->attr('full-path');
-
- // load metadata
- $data = $zip->getFromName($this->meta);
- if(!$data){
- throw new Exception('Failed to access epub metadata');
- }
- $this->xml = new DOMDocument();
- $this->xml->registerNodeClass('DOMElement','EPubDOMElement');
- $this->xml->loadXML($data);
- $this->xml->formatOutput = true;
- $this->xpath = new EPubDOMXPath($this->xml);
-
- $zip->close();
- }
-
- /**
- * file name getter
- */
- public function file(){
- return $this->file;
- }
-
- /**
- * Writes back all meta data changes
- */
- public function save(){
- $zip = new ZipArchive();
- $res = @$zip->open($this->file, ZipArchive::CREATE);
- if($res === false){
- throw new Exception('Failed to write back metadata');
- }
- $zip->addFromString($this->meta,$this->xml->saveXML());
- // add the cover image
- if($this->imagetoadd){
- $path = dirname('/'.$this->meta).'/php-epub-meta-cover.img'; // image path is relative to meta file
- $path = ltrim($path,'/');
-
- $zip->addFromString($path,file_get_contents($this->imagetoadd));
- $this->imagetoadd='';
- }
- $zip->close();
- }
-
- /**
- * Get or set the book author(s)
- *
- * Authors should be given with a "file-as" and a real name. The file as
- * is used for sorting in e-readers.
- *
- * Example:
- *
- * array(
- * 'Pratchett, Terry' => 'Terry Pratchett',
- * 'Simpson, Jacqeline' => 'Jacqueline Simpson',
- * )
- *
- * @params array $authors
- */
- public function Authors($authors=false){
- // set new data
- if($authors !== false){
- // Author where given as a comma separated list
- if(is_string($authors)){
- if($authors == ''){
- $authors = array();
- }else{
- $authors = explode(',',$authors);
- $authors = array_map('trim',$authors);
- }
- }
-
- // delete existing nodes
- $nodes = $this->xpath->query('//opf:metadata/dc:creator[@opf:role="aut"]');
- foreach($nodes as $node) $node->delete();
-
- // add new nodes
- $parent = $this->xpath->query('//opf:metadata')->item(0);
- foreach($authors as $as => $name){
- if(is_int($as)) $as = $name; //numeric array given
- $node = $parent->newChild('dc:creator',$name);
- $node->attr('opf:role', 'aut');
- $node->attr('opf:file-as', $as);
- }
-
- $this->reparse();
- }
-
- // read current data
- $rolefix = false;
- $authors = array();
- $nodes = $this->xpath->query('//opf:metadata/dc:creator[@opf:role="aut"]');
- if($nodes->length == 0){
- // no nodes where found, let's try again without role
- $nodes = $this->xpath->query('//opf:metadata/dc:creator');
- $rolefix = true;
- }
- foreach($nodes as $node){
- $name = $node->nodeValue;
- $as = $node->attr('opf:file-as');
- if(!$as){
- $as = $name;
- $node->attr('opf:file-as',$as);
- }
- if($rolefix){
- $node->attr('opf:role','aut');
- }
- $authors[$as] = $name;
- }
- return $authors;
- }
-
- /**
- * Set or get the book title
- *
- * @param string $title
- */
- public function Title($title=false){
- return $this->getset('dc:title',$title);
- }
-
- /**
- * Set or get the book's language
- *
- * @param string $lang
- */
- public function Language($lang=false){
- return $this->getset('dc:language',$lang);
- }
-
- /**
- * Set or get the book' publisher info
- *
- * @param string $publisher
- */
- public function Publisher($publisher=false){
- return $this->getset('dc:publisher',$publisher);
- }
-
- /**
- * Set or get the book's copyright info
- *
- * @param string $rights
- */
- public function Copyright($rights=false){
- return $this->getset('dc:rights',$rights);
- }
-
- /**
- * Set or get the book's description
- *
- * @param string $description
- */
- public function Description($description=false){
- return $this->getset('dc:description',$description);
- }
-
- /**
- * Set or get the book's ISBN number
- *
- * @param string $isbn
- */
- public function ISBN($isbn=false){
- return $this->getset('dc:identifier',$isbn,'opf:scheme','ISBN');
- }
-
- /**
- * Set or get the Google Books ID
- *
- * @param string $google
- */
- public function Google($google=false){
- return $this->getset('dc:identifier',$google,'opf:scheme','GOOGLE');
- }
-
- /**
- * Set or get the Amazon ID of the book
- *
- * @param string $amazon
- */
- public function Amazon($amazon=false){
- return $this->getset('dc:identifier',$amazon,'opf:scheme','AMAZON');
- }
-
- /**
- * Set or get the book's subjects (aka. tags)
- *
- * Subject should be given as array, but a comma separated string will also
- * be accepted.
- *
- * @param array $subjects
- */
- public function Subjects($subjects=false){
- // setter
- if($subjects !== false){
- if(is_string($subjects)){
- if($subjects === ''){
- $subjects = array();
- }else{
- $subjects = explode(',',$subjects);
- $subjects = array_map('trim',$subjects);
- }
- }
-
- // delete previous
- $nodes = $this->xpath->query('//opf:metadata/dc:subject');
- foreach($nodes as $node){
- $node->delete();
- }
- // add new ones
- $parent = $this->xpath->query('//opf:metadata')->item(0);
- foreach($subjects as $subj){
- $node = $this->xml->createElement('dc:subject',htmlspecialchars($subj));
- $node = $parent->appendChild($node);
- }
-
- $this->reparse();
- }
-
- //getter
- $subjects = array();
- $nodes = $this->xpath->query('//opf:metadata/dc:subject');
- foreach($nodes as $node){
- $subjects[] = $node->nodeValue;
- }
- return $subjects;
- }
-
- /**
- * Read the cover data
- *
- * Returns an associative array with the following keys:
- *
- * mime - filetype (usually image/jpeg)
- * data - the binary image data
- * found - the internal path, or false if no image is set in epub
- *
- * When no image is set in the epub file, the binary data for a transparent
- * GIF pixel is returned.
- *
- * When adding a new image this function return no or old data because the
- * image contents are not in the epub file, yet. The image will be added when
- * the save() method is called.
- *
- * @param string $path local filesystem path to a new cover image
- * @param string $mime mime type of the given file
- * @return array
- */
- public function Cover($path=false, $mime=false){
- // set cover
- if($path !== false){
- // remove current pointer
- $nodes = $this->xpath->query('//opf:metadata/opf:meta[@name="cover"]');
- foreach($nodes as $node) $node->delete();
- // remove previous manifest entries if they where made by us
- $nodes = $this->xpath->query('//opf:manifest/opf:item[@id="php-epub-meta-cover"]');
- foreach($nodes as $node) $node->delete();
-
- if($path){
- // add pointer
- $parent = $this->xpath->query('//opf:metadata')->item(0);
- $node = $parent->newChild('opf:meta');
- $node->attr('opf:name','cover');
- $node->attr('opf:content','php-epub-meta-cover');
-
- // add manifest
- $parent = $this->xpath->query('//opf:manifest')->item(0);
- $node = $parent->newChild('opf:item');
- $node->attr('id','php-epub-meta-cover');
- $node->attr('opf:href','php-epub-meta-cover.img');
- $node->attr('opf:media-type',$mime);
-
- // remember path for save action
- $this->imagetoadd = $path;
- }
-
- $this->reparse();
- }
-
- // load cover
- $nodes = $this->xpath->query('//opf:metadata/opf:meta[@name="cover"]');
- if(!$nodes->length) return $this->no_cover();
- $coverid = (String) $nodes->item(0)->attr('opf:content');
- if(!$coverid) return $this->no_cover();
-
- $nodes = $this->xpath->query('//opf:manifest/opf:item[@id="'.$coverid.'"]');
- if(!$nodes->length) return $this->no_cover();
- $mime = $nodes->item(0)->attr('opf:media-type');
- $path = $nodes->item(0)->attr('opf:href');
- $path = dirname('/'.$this->meta).'/'.$path; // image path is relative to meta file
- $path = ltrim($path,'/');
-
- $zip = new ZipArchive();
- if(!@$zip->open($this->file)){
- throw new Exception('Failed to read epub file');
- }
- $data = $zip->getFromName($path);
-
- return array(
- 'mime' => $mime,
- 'data' => $data,
- 'found' => $path
- );
- }
-
- /**
- * A simple getter/setter for simple meta attributes
- *
- * It should only be used for attributes that are expected to be unique
- *
- * @param string $item XML node to set/get
- * @param string $value New node value
- * @param string $att Attribute name
- * @param string $aval Attribute value
- */
- protected function getset($item,$value=false,$att=false,$aval=false){
- // construct xpath
- $xpath = '//opf:metadata/'.$item;
- if($att){
- $xpath .= "[@$att=\"$aval\"]";
- }
-
- // set value
- if($value !== false){
- $value = htmlspecialchars($value);
- $nodes = $this->xpath->query($xpath);
- if($nodes->length == 1 ){
- if($value === ''){
- // the user want's to empty this value -> delete the node
- $nodes->item(0)->delete();
- }else{
- // replace value
- $nodes->item(0)->nodeValue = $value;
- }
- }else{
- // if there are multiple matching nodes for some reason delete
- // them. we'll replace them all with our own single one
- foreach($nodes as $n) $n->delete();
- // readd them
- if($value){
- $parent = $this->xpath->query('//opf:metadata')->item(0);
- $node = $this->xml->createElement($item,$value);
- $node = $parent->appendChild($node);
- if($att) $node->attr($att,$aval);
- }
- }
-
- $this->reparse();
- }
-
- // get value
- $nodes = $this->xpath->query($xpath);
- if($nodes->length){
- return $nodes->item(0)->nodeValue;
- }else{
- return '';
- }
- }
-
- /**
- * Return a not found response for Cover()
- */
- protected function no_cover(){
- return array(
- 'data' => base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7'),
- 'mime' => 'image/gif',
- 'found' => false
- );
- }
-
- /**
- * Reparse the DOM tree
- *
- * I had to rely on this because otherwise xpath failed to find the newly
- * added nodes
- */
- protected function reparse() {
- $this->xml->loadXML($this->xml->saveXML());
- $this->xpath = new EPubDOMXPath($this->xml);
- }
-}
-
-class EPubDOMXPath extends DOMXPath {
- public function __construct(DOMDocument $doc){
- parent::__construct($doc);
-
- if(is_a($doc->documentElement, 'EPubDOMElement')){
- foreach($doc->documentElement->namespaces as $ns => $url){
- $this->registerNamespace($ns,$url);
- }
- }
- }
-}
-
-class EPubDOMElement extends DOMElement {
- public $namespaces = array(
- 'n' => 'urn:oasis:names:tc:opendocument:xmlns:container',
- 'opf' => 'http://www.idpf.org/2007/opf',
- 'dc' => 'http://purl.org/dc/elements/1.1/'
- );
-
-
- public function __construct($name, $value='', $namespaceURI=''){
- list($ns,$name) = $this->splitns($name);
- $value = htmlspecialchars($value);
- if(!$namespaceURI && $ns){
- $namespaceURI = $this->namespaces[$ns];
- }
- parent::__construct($name, $value, $namespaceURI);
- }
-
-
- /**
- * Create and append a new child
- *
- * Works with our epub namespaces and omits default namespaces
- */
- public function newChild($name, $value=''){
- list($ns,$local) = $this->splitns($name);
- if($ns){
- $nsuri = $this->namespaces[$ns];
- if($this->isDefaultNamespace($nsuri)){
- $name = $local;
- $nsuri = '';
- }
- }
-
- // this doesn't call the construcor: $node = $this->ownerDocument->createElement($name,$value);
- $node = new EPubDOMElement($name,$value,$nsuri);
- return $this->appendChild($node);
- }
-
- /**
- * Split given name in namespace prefix and local part
- *
- * @param string $name
- * @return array (namespace, name)
- */
- public function splitns($name){
- $list = explode(':',$name,2);
- if(count($list) < 2) array_unshift($list,'');
- return $list;
- }
-
- /**
- * Simple EPub namespace aware attribute accessor
- */
- public function attr($attr,$value=null){
- list($ns,$attr) = $this->splitns($attr);
-
- $nsuri = '';
- if($ns){
- $nsuri = $this->namespaces[$ns];
- if(!$this->namespaceURI){
- if($this->isDefaultNamespace($nsuri)){
- $nsuri = '';
- }
- }elseif($this->namespaceURI == $nsuri){
- $nsuri = '';
- }
- }
-
- if(!is_null($value)){
- if($value === false){
- // delete if false was given
- if($nsuri){
- $this->removeAttributeNS($nsuri,$attr);
- }else{
- $this->removeAttribute($attr);
- }
- }else{
- // modify if value was given
- if($nsuri){
- $this->setAttributeNS($nsuri,$attr,$value);
- }else{
- $this->setAttribute($attr,$value);
- }
- }
- }else{
- // return value if none was given
- if($nsuri){
- return $this->getAttributeNS($nsuri,$attr);
- }else{
- return $this->getAttribute($attr);
- }
- }
- }
-
- /**
- * Remove this node from the DOM
- */
- public function delete(){
- $this->parentNode->removeChild($this);
- }
-
-}
-
-
diff --git a/library/epub-meta/index.php b/library/epub-meta/index.php
deleted file mode 100644
index 57bb31b5c..000000000
--- a/library/epub-meta/index.php
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
- // modify this to point to your book directory
- $bookdir = '/home/andi/Dropbox/ebooks/';
-
-
- error_reporting(E_ALL ^ E_NOTICE);
-
- // proxy google requests
- if(isset($_GET['api'])){
- header('application/json; charset=UTF-8');
- echo file_get_contents('https://www.googleapis.com/books/v1/volumes?q='.rawurlencode($_GET['api']).'&maxResults=25&printType=books&projection=full');
- exit;
- }
-
- require('util.php');
-
- // load epub data
- require('epub.php');
- if(isset($_REQUEST['book'])){
- try{
- $book = $_REQUEST['book'];
- $book = str_replace('..','',$book); // no upper dirs, lowers might be supported later
- $epub = new EPub($bookdir.$book.'.epub');
- }catch (Exception $e){
- $error = $e->getMessage();
- }
- }
-
- // return image data
- if(isset($_REQUEST['img']) && isset($epub)){
- $img = $epub->Cover();
- header('Content-Type: '.$img['mime']);
- echo $img['data'];
- exit;
- }
-
- // save epub data
- if($_REQUEST['save'] && isset($epub)){
- $epub->Title($_POST['title']);
- $epub->Description($_POST['description']);
- $epub->Language($_POST['language']);
- $epub->Publisher($_POST['publisher']);
- $epub->Copyright($_POST['copyright']);
- $epub->ISBN($_POST['isbn']);
- $epub->Subjects($_POST['subjects']);
-
- $authors = array();
- foreach((array) $_POST['authorname'] as $num => $name){
- if($name){
- $as = $_POST['authoras'][$num];
- if(!$as) $as = $name;
- $authors[$as] = $name;
- }
- }
- $epub->Authors($authors);
-
- // handle image
- $cover = '';
- if(preg_match('/^https?:\/\//i',$_POST['coverurl'])){
- $data = @file_get_contents($_POST['coverurl']);
- if($data){
- $cover = tempnam(sys_get_temp_dir(), 'epubcover');
- file_put_contents($cover,$data);
- unset($data);
- }
- }elseif(is_uploaded_file($_FILES['coverfile']['tmp_name'])){
- $cover = $_FILES['coverfile']['tmp_name'];
- }
- if($cover){
- $info = @getimagesize($cover);
- if(preg_match('/^image\/(gif|jpe?g|png)$/',$info['mime'])){
- $epub->Cover($cover,$info['meta']);
- }else{
- $error = "Not a valid image file".$cover;
- }
- }
-
- // save the ebook
- try{
- $epub->save();
- }catch(Exception $e){
- $error = $e->getMessage();
- }
-
- // clean up temporary cover file
- if($cover) @unlink($cover);
-
- // rename
- $author = array_shift(array_keys($epub->Authors()));
- $title = $epub->Title();
- $new = to_file($author.'-'.$title);
- $new = $bookdir.$new.'.epub';
- $old = $epub->file();
- if(realpath($new) != realpath($old)){
- if(!@rename($old,$new)) $new = $old; //rename failed, stay here
- }
- $go = basename($new,'.epub');
- header('Location: ?book='.rawurlencode($go));
- exit;
- }
-
- header('Content-Type: text/html; charset=utf-8');
-?>
-<html>
-<head>
- <title>EPub Manager</title>
-
- <link rel="stylesheet" type="text/css" href="assets/css/smoothness/jquery-ui-1.8.18.custom.css" />
- <link rel="stylesheet" type="text/css" href="assets/css/cleditor/jquery.cleditor.css" />
- <link rel="stylesheet" type="text/css" href="assets/css/style.css" />
-
- <script type="text/javascript">
- <?php if($error) echo "alert('".htmlspecialchars($error)."');";?>
- </script>
-</head>
-<body>
-
-<div id="wrapper">
- <ul id="booklist">
- <?php
- $list = glob($bookdir.'/*.epub');
- foreach($list as $book){
- $base = basename($book,'.epub');
- $name = book_output($base);
- echo '<li '.($base == $_REQUEST['book'] ? 'class="active"' : '' ).'>';
- echo '<a href="?book='.htmlspecialchars($base).'">'.$name.'</a>';
- echo '</li>';
- }
- ?>
- </ul>
-
- <?php if($epub): ?>
- <form action="" method="post" id="bookpanel" enctype="multipart/form-data">
- <input type="hidden" name="book" value="<?php echo htmlspecialchars($_REQUEST['book'])?>" />
-
- <table>
- <tr>
- <th>Title</th>
- <td><input type="text" name="title" value="<?php echo htmlspecialchars($epub->Title())?>" /></td>
- </tr>
- <tr>
- <th>Authors</th>
- <td id="authors">
- <?php
- $count = 0;
- foreach($epub->Authors() as $as => $name){
- ?>
- <p>
- <input type="text" name="authorname[<?php echo $count?>]" value="<?php echo htmlspecialchars($name)?>" />
- (<input type="text" name="authoras[<?php echo $count?>]" value="<?php echo htmlspecialchars($as)?>" />)
- </p>
- <?php
- $count++;
- }
- ?>
- </td>
- </tr>
- <tr>
- <th>Description<br />
- <img src="?book=<?php echo htmlspecialchars($_REQUEST['book'])?>&amp;img=1" id="cover" width="90"
- class="<?php $c = $epub->Cover(); echo ($c['found']?'hasimg':'noimg')?>" />
- </th>
- <td><textarea name="description"><?php echo htmlspecialchars($epub->Description())?></textarea></td>
- </tr>
- <tr>
- <th>Subjects</th>
- <td><input type="text" name="subjects" value="<?php echo htmlspecialchars(join(', ',$epub->Subjects()))?>" /></td>
- </tr>
- <tr>
- <th>Publisher</th>
- <td><input type="text" name="publisher" value="<?php echo htmlspecialchars($epub->Publisher())?>" /></td>
- </tr>
- <tr>
- <th>Copyright</th>
- <td><input type="text" name="copyright" value="<?php echo htmlspecialchars($epub->Copyright())?>" /></td>
- </tr>
- <tr>
- <th>Language</th>
- <td><p><input type="text" name="language" value="<?php echo htmlspecialchars($epub->Language())?>" /></p></td>
- </tr>
- <tr>
- <th>ISBN</th>
- <td><p><input type="text" name="isbn" value="<?php echo htmlspecialchars($epub->ISBN())?>" /></p></td>
- </tr>
- <tr>
- <th>Cover Image</th>
- <td><p>
- <input type="file" name="coverfile" />
- URL: <input type="text" name="coverurl" value="" />
- </p></td>
- </table>
- <div class="center">
- <input name="save" type="submit" />
- </div>
- </form>
- <?php else: ?>
- <h1>EPub Manager</h1>
-
- <p>View and edit epub books stored in <code><?php echo htmlspecialchars($bookdir)?></code>.</p>
- <div class="license">
- <p><?php echo str_replace("\n\n",'</p><p>',htmlspecialchars(file_get_contents('LICENSE'))) ?></p>
- </div>
-
- <?php endif; ?>
-
- <!-- load at the end, for faster site load -->
- <script type="text/javascript" src="assets/js/jquery-1.7.1.min.js"></script>
- <script type="text/javascript" src="assets/js/jquery-ui-1.8.18.custom.min.js"></script>
- <script type="text/javascript" src="assets/js/jquery.cleditor.min.js"></script>
- <script type="text/javascript" src="assets/js/script.js"></script>
-
-</div>
-</body>
-</html>
diff --git a/library/epub-meta/test/test.epub b/library/epub-meta/test/test.epub
deleted file mode 100644
index 85d60aece..000000000
--- a/library/epub-meta/test/test.epub
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/test/test.jpg b/library/epub-meta/test/test.jpg
deleted file mode 100644
index 4ca4a685c..000000000
--- a/library/epub-meta/test/test.jpg
+++ /dev/null
Binary files differ
diff --git a/library/epub-meta/test/test.phpunit.php b/library/epub-meta/test/test.phpunit.php
deleted file mode 100644
index 88a9aa914..000000000
--- a/library/epub-meta/test/test.phpunit.php
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php
-
-require '../epub.php';
-
-
-class EPubTest extends PHPUnit_Framework_TestCase {
-
- protected $epub;
-
- protected function setUp(){
- // sometime I might have accidentally broken the test file
- if(filesize('test.epub') != 768780){
- die('test.epub has wrong size, make sure it\'s unmodified');
- }
-
- // we work on a copy to test saving
- if(!copy('test.epub','test.copy.epub')){
- die('failed to create copy of the test book');
- }
-
- $this->epub = new EPub('test.copy.epub');
- }
-
- protected function tearDown(){
- unlink('test.copy.epub');
- }
-
- public function testAuthors(){
- // read curent value
- $this->assertEquals(
- $this->epub->Authors(),
- array('Shakespeare, William' => 'William Shakespeare')
- );
-
- // remove value with string
- $this->assertEquals(
- $this->epub->Authors(''),
- array()
- );
-
- // set single value by String
-
- $this->assertEquals(
- $this->epub->Authors('John Doe'),
- array('John Doe' => 'John Doe')
- );
-
- // set single value by indexed array
- $this->assertEquals(
- $this->epub->Authors(array('John Doe')),
- array('John Doe' => 'John Doe')
- );
-
- // remove value with array
- $this->assertEquals(
- $this->epub->Authors(array()),
- array()
- );
-
- // set single value by associative array
- $this->assertEquals(
- $this->epub->Authors(array('Doe, John' => 'John Doe')),
- array('Doe, John' => 'John Doe')
- );
-
- // set multi value by string
- $this->assertEquals(
- $this->epub->Authors('John Doe, Jane Smith'),
- array('John Doe' => 'John Doe', 'Jane Smith' => 'Jane Smith')
- );
-
- // set multi value by indexed array
- $this->assertEquals(
- $this->epub->Authors(array('John Doe', 'Jane Smith')),
- array('John Doe' => 'John Doe', 'Jane Smith' => 'Jane Smith')
- );
-
- // set multi value by associative array
- $this->assertEquals(
- $this->epub->Authors(array('Doe, John' => 'John Doe', 'Smith, Jane' => 'Jane Smith')),
- array('Doe, John' => 'John Doe', 'Smith, Jane' => 'Jane Smith')
- );
-
- // check escaping
- $this->assertEquals(
- $this->epub->Authors(array('Doe, John&nbsp;' => 'John Doe&nbsp;')),
- array('Doe, John&nbsp;' => 'John Doe&nbsp;')
- );
- }
-
- public function testTitle(){
- // get current value
- $this->assertEquals(
- $this->epub->Title(),
- 'Romeo and Juliet'
- );
-
- // delete current value
- $this->assertEquals(
- $this->epub->Title(''),
- ''
- );
-
- // get current value
- $this->assertEquals(
- $this->epub->Title(),
- ''
- );
-
- // set new value
- $this->assertEquals(
- $this->epub->Title('Foo Bar'),
- 'Foo Bar'
- );
-
- // check escaping
- $this->assertEquals(
- $this->epub->Title('Foo&nbsp;Bar'),
- 'Foo&nbsp;Bar'
- );
- }
-
- public function testSubject(){
- // get current values
- $this->assertEquals(
- $this->epub->Subjects(),
- array('Fiction','Drama','Romance')
- );
-
- // delete current values with String
- $this->assertEquals(
- $this->epub->Subjects(''),
- array()
- );
-
- // set new values with String
- $this->assertEquals(
- $this->epub->Subjects('Fiction, Drama, Romance'),
- array('Fiction','Drama','Romance')
- );
-
- // delete current values with Array
- $this->assertEquals(
- $this->epub->Subjects(array()),
- array()
- );
-
- // set new values with array
- $this->assertEquals(
- $this->epub->Subjects(array('Fiction','Drama','Romance')),
- array('Fiction','Drama','Romance')
- );
-
- // check escaping
- $this->assertEquals(
- $this->epub->Subjects(array('Fiction','Drama&nbsp;','Romance')),
- array('Fiction','Drama&nbsp;','Romance')
- );
- }
-
-
- public function testCover(){
- // read current cover
- $cover = $this->epub->Cover();
- $this->assertEquals($cover['mime'],'image/png');
- $this->assertEquals($cover['found'],'OPS/images/cover.png');
- $this->assertEquals(strlen($cover['data']), 657911);
-
- // delete cover
- $cover = $this->epub->Cover('');
- $this->assertEquals($cover['mime'],'image/gif');
- $this->assertEquals($cover['found'],false);
- $this->assertEquals(strlen($cover['data']), 42);
-
- // set new cover (will return a not-found as it's not yet saved)
- $cover = $this->epub->Cover('test.jpg','image/jpeg');
- $this->assertEquals($cover['mime'],'image/jpeg');
- $this->assertEquals($cover['found'],'OPS/php-epub-meta-cover.img');
- $this->assertEquals(strlen($cover['data']), 0);
-
- // save
- $this->epub->save();
-
- // read now changed cover
- $cover = $this->epub->Cover();
- $this->assertEquals($cover['mime'],'image/jpeg');
- $this->assertEquals($cover['found'],'OPS/php-epub-meta-cover.img');
- $this->assertEquals(strlen($cover['data']), filesize('test.jpg'));
- }
-}
diff --git a/library/epub-meta/util.php b/library/epub-meta/util.php
deleted file mode 100644
index 75cb8a829..000000000
--- a/library/epub-meta/util.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-function to_file($input){
- $input = str_replace(' ','_',$input);
- $input = str_replace('__','_',$input);
- $input = str_replace(',_',',',$input);
- $input = str_replace('_,',',',$input);
- $input = str_replace('-_','-',$input);
- $input = str_replace('_-','-',$input);
- $input = str_replace(',','__',$input);
- return $input;
-}
-
-function book_output($input){
- $input = str_replace('__',',',$input);
- $input = str_replace('_',' ',$input);
- $input = str_replace(',',', ',$input);
- $input = str_replace('-',' - ',$input);
- list($author,$title) = explode('-',$input,2);
- $author = trim($author);
- $title = trim($title);
-
- if(!$title){
- $title = $author;
- $author = '';
- }
-
- return '<span class="title">'.htmlspecialchars($title).'</span>'.
- '<span class="author">'.htmlspecialchars($author).'</author>';
-}
diff --git a/library/jquery.timeago.js b/library/jquery.timeago.js
deleted file mode 100644
index f7b640149..000000000
--- a/library/jquery.timeago.js
+++ /dev/null
@@ -1,232 +0,0 @@
-/**
- * Timeago is a jQuery plugin that makes it easy to support automatically
- * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
- *
- * @name timeago
- * @version 1.6.3
- * @requires jQuery v1.2.3+
- * @author Ryan McGeary
- * @license MIT License - http://www.opensource.org/licenses/mit-license.php
- *
- * For usage and examples, visit:
- * http://timeago.yarp.com/
- *
- * Copyright (c) 2008-2017, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
- */
-
-(function (factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if (typeof module === 'object' && typeof module.exports === 'object') {
- factory(require('jquery'));
- } else {
- // Browser globals
- factory(jQuery);
- }
-}(function ($) {
- $.timeago = function(timestamp) {
- if (timestamp instanceof Date) {
- return inWords(timestamp);
- } else if (typeof timestamp === "string") {
- return inWords($.timeago.parse(timestamp));
- } else if (typeof timestamp === "number") {
- return inWords(new Date(timestamp));
- } else {
- return inWords($.timeago.datetime(timestamp));
- }
- };
- var $t = $.timeago;
-
- $.extend($.timeago, {
- settings: {
- refreshMillis: 60000,
- allowPast: true,
- allowFuture: false,
- localeTitle: false,
- cutoff: 0,
- autoDispose: true,
- strings: {
- prefixAgo: null,
- prefixFromNow: null,
- suffixAgo: "ago",
- suffixFromNow: "from now",
- inPast: 'any moment now',
- seconds: "less than a minute",
- minute: "about a minute",
- minutes: "%d minutes",
- hour: "about an hour",
- hours: "about %d hours",
- day: "a day",
- days: "%d days",
- month: "about a month",
- months: "%d months",
- year: "about a year",
- years: "%d years",
- wordSeparator: " ",
- numbers: []
- }
- },
-
- inWords: function(distanceMillis) {
- if (!this.settings.allowPast && ! this.settings.allowFuture) {
- throw 'timeago allowPast and allowFuture settings can not both be set to false.';
- }
-
- var $l = this.settings.strings;
- var prefix = $l.prefixAgo;
- var suffix = $l.suffixAgo;
- if (this.settings.allowFuture) {
- if (distanceMillis < 0) {
- prefix = $l.prefixFromNow;
- suffix = $l.suffixFromNow;
- }
- }
-
- if (!this.settings.allowPast && distanceMillis >= 0) {
- return this.settings.strings.inPast;
- }
-
- var seconds = Math.abs(distanceMillis) / 1000;
- var minutes = seconds / 60;
- var hours = minutes / 60;
- var days = hours / 24;
- var years = days / 365;
-
- function substitute(stringOrFunction, number) {
- var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
- var value = ($l.numbers && $l.numbers[number]) || number;
- return string.replace(/%d/i, value);
- }
-
- var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
- seconds < 90 && substitute($l.minute, 1) ||
- minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
- minutes < 90 && substitute($l.hour, 1) ||
- hours < 24 && substitute($l.hours, Math.round(hours)) ||
- hours < 42 && substitute($l.day, 1) ||
- days < 30 && substitute($l.days, Math.round(days)) ||
- days < 45 && substitute($l.month, 1) ||
- days < 365 && substitute($l.months, Math.round(days / 30)) ||
- years < 1.5 && substitute($l.year, 1) ||
- substitute($l.years, Math.round(years));
-
- var separator = $l.wordSeparator || "";
- if ($l.wordSeparator === undefined) { separator = " "; }
- return $.trim([prefix, words, suffix].join(separator));
- },
-
- parse: function(iso8601) {
- var s = $.trim(iso8601);
- s = s.replace(/\.\d+/,""); // remove milliseconds
- s = s.replace(/-/,"/").replace(/-/,"/");
- s = s.replace(/T/," ").replace(/Z/," UTC");
- s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
- s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
- return new Date(s);
- },
- datetime: function(elem) {
- var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
- return $t.parse(iso8601);
- },
- isTime: function(elem) {
- // jQuery's `is()` doesn't play well with HTML5 in IE
- return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
- }
- });
-
- // functions that can be called via $(el).timeago('action')
- // init is default when no action is given
- // functions are called with context of a single element
- var functions = {
- init: function() {
- functions.dispose.call(this);
- var refresh_el = $.proxy(refresh, this);
- refresh_el();
- var $s = $t.settings;
- if ($s.refreshMillis > 0) {
- this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
- }
- },
- update: function(timestamp) {
- var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
- $(this).data('timeago', { datetime: date });
- if ($t.settings.localeTitle) {
- $(this).attr("title", date.toLocaleString());
- }
- refresh.apply(this);
- },
- updateFromDOM: function() {
- $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
- refresh.apply(this);
- },
- dispose: function () {
- if (this._timeagoInterval) {
- window.clearInterval(this._timeagoInterval);
- this._timeagoInterval = null;
- }
- }
- };
-
- $.fn.timeago = function(action, options) {
- var fn = action ? functions[action] : functions.init;
- if (!fn) {
- throw new Error("Unknown function name '"+ action +"' for timeago");
- }
- // each over objects here and call the requested function
- this.each(function() {
- fn.call(this, options);
- });
- return this;
- };
-
- function refresh() {
- var $s = $t.settings;
-
- //check if it's still visible
- if ($s.autoDispose && !$.contains(document.documentElement,this)) {
- //stop if it has been removed
- $(this).timeago("dispose");
- return this;
- }
-
- var data = prepareData(this);
-
- if (!isNaN(data.datetime)) {
- if ( $s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
- $(this).text(inWords(data.datetime));
- } else {
- if ($(this).attr('title').length > 0) {
- $(this).text($(this).attr('title'));
- }
- }
- }
- return this;
- }
-
- function prepareData(element) {
- element = $(element);
- if (!element.data("timeago")) {
- element.data("timeago", { datetime: $t.datetime(element) });
- var text = $.trim(element.text());
- if ($t.settings.localeTitle) {
- element.attr("title", element.data('timeago').datetime.toLocaleString());
- } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
- element.attr("title", text);
- }
- }
- return element.data("timeago");
- }
-
- function inWords(date) {
- return $t.inWords(distance(date));
- }
-
- function distance(date) {
- return (new Date().getTime() - date.getTime());
- }
-
- // fix for IE6 suckage
- document.createElement("abbr");
- document.createElement("time");
-}));
diff --git a/library/kzykhys/git/.travis.yml b/library/kzykhys/git/.travis.yml
deleted file mode 100644
index ff4164104..000000000
--- a/library/kzykhys/git/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: php
-
-php:
- - 5.5
- - 5.4
- - 5.3
-
-before_script:
- - composer require --no-update satooshi/php-coveralls:dev-master@dev sensiolabs/security-checker:dev-master
- - composer update --dev --no-interaction
- - git config --global user.name "John Doe"
- - git config --global user.email "example@example.com"
-
-script:
- - mkdir -p build/logs
- - phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xml
- - php vendor/bin/security-checker security:check composer.lock
-
-after_script:
- - php vendor/bin/coveralls \ No newline at end of file
diff --git a/library/kzykhys/git/README.md b/library/kzykhys/git/README.md
deleted file mode 100644
index b2f6635af..000000000
--- a/library/kzykhys/git/README.md
+++ /dev/null
@@ -1,1347 +0,0 @@
-PHPGit - A Git wrapper for PHP5.3+
-==================================
-
-[![Latest Unstable Version](https://poser.pugx.org/kzykhys/git/v/unstable.png)](https://packagist.org/packages/kzykhys/git)
-[![Build Status](https://travis-ci.org/kzykhys/PHPGit.png?branch=master)](https://travis-ci.org/kzykhys/PHPGit)
-[![Coverage Status](https://coveralls.io/repos/kzykhys/PHPGit/badge.png)](https://coveralls.io/r/kzykhys/PHPGit)
-[![SensioLabsInsight](https://insight.sensiolabs.com/projects/04f10b57-a113-47ad-8dda-9a6dacbb079f/mini.png)](https://insight.sensiolabs.com/projects/04f10b57-a113-47ad-8dda-9a6dacbb079f)
-
-Requirements
-------------
-
-* PHP5.3
-* Git
-
-Installation
-------------
-
-Update your composer.json and run `composer update`
-
-``` json
-{
- "require": {
- "kzykhys/git": "dev-master"
- }
-}
-```
-
-Basic Usage
------------
-
-``` php
-<?php
-
-require __DIR__ . '/vendor/autoload.php';
-
-$git = new PHPGit\Git();
-$git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
-$git->setRepository('/path/to/repo');
-$git->remote->add('production', 'git://example.com/your/repo.git');
-$git->add('README.md');
-$git->commit('Adds README.md');
-$git->checkout('release');
-$git->merge('master');
-$git->push();
-$git->push('production', 'release');
-$git->tag->create('v1.0.1', 'release');
-
-foreach ($git->tree('release') as $object) {
- if ($object['type'] == 'blob') {
- echo $git->show($object['file']);
- }
-}
-```
-
-API
----
-
-### Git commands
-
-* [git add](#git-add)
- * $git->[add](#git-addstringarraytraversable-file-array-options--)(_string|array|\Traversable_ $file, _array_ $options = [])
-* [git archive](#git-archive)
- * $git->[archive](#git-archivestring-file-string-tree--null-stringarraytraversable-path--null-array-options--)(_string_ $file, _string_ $tree = null, _string|array|\Traversable_ $path = null, _array_ $options = [])
-* [git branch](#git-branch)
- * $git->[branch](#git-brancharray-options--)(_array_ $options = [])
- * $git->branch->[create](#git-branch-createstring-branch-string-startpoint--null-array-options--)(_string_ $branch, _string_ $startPoint = null, _array_ $options = [])
- * $git->branch->[move](#git-branch-movestring-branch-string-newbranch-array-options--)(_string_ $branch, _string_ $newBranch, _array_ $options = [])
- * $git->branch->[delete](#git-branch-deletestring-branch-array-options--)(_string_ $branch, _array_ $options = [])
-* [git cat-file](#git-cat-file)
- * $git->cat->[blob](#git-cat-blobstring-object)(_string_ $object)
- * $git->cat->[type](#git-cat-typestring-object)(_string_ $object)
- * $git->cat->[size](#git-cat-sizestring-object)(_string_ $object)
-* [git checkout](#git-checkout)
- * $git->[checkout](#git-checkoutstring-branch-array-options--)(_string_ $branch, _array_ $options = [])
- * $git->checkout->[create](#git-checkout-createstring-branch-string-startpoint--null-array-options--)(_string_ $branch, _string_ $startPoint = null, _array_ $options = [])
- * $git->checkout->[orphan](#git-checkout-orphanstring-branch-string-startpoint--null-array-options--)(_string_ $branch, _string_ $startPoint = null, _array_ $options = [])
-* [git clone](#git-clone)
- * $git->[clone](#git-clonestring-repository-string-path--null-array-options--)(_string_ $repository, _string_ $path = null, _array_ $options = [])
-* [git commit](#git-commit)
- * $git->[commit](#git-commitstring-message-array-options--)(_string_ $message, _array_ $options = [])
-* [git config](#git-config)
- * $git->[config](#git-configarray-options--)(_array_ $options = [])
- * $git->config->[set](#git-config-setstring-name-string-value-array-options--)(_string_ $name, _string_ $value, _array_ $options = [])
- * $git->config->[add](#git-config-addstring-name-string-value-array-options--)(_string_ $name, _string_ $value, _array_ $options = [])
-* [git describe](#git-describe)
- * $git->[describe](#git-describestring-committish--null-array-options--)(_string_ $committish = null, _array_ $options = [])
- * $git->describe->[tags](#git-describe-tagsstring-committish--null-array-options--)(_string_ $committish = null, _array_ $options = [])
-* [git fetch](#git-fetch)
- * $git->[fetch](#git-fetchstring-repository-string-refspec--null-array-options--)(_string_ $repository, _string_ $refspec = null, _array_ $options = [])
- * $git->fetch->[all](#git-fetch-allarray-options--)(_array_ $options = [])
-* [git init](#git-init)
- * $git->[init](#git-initstring-path-array-options--)(_string_ $path, _array_ $options = [])
-* [git log](#git-log)
- * $git->[log](#git-logstring-revrange---string-path--null-array-options--)(_string_ $revRange = '', _string_ $path = null, _array_ $options = [])
-* [git merge](#git-merge)
- * $git->[merge](#git-mergestringarraytraversable-commit-string-message--null-array-options--)(_string|array|\Traversable_ $commit, _string_ $message = null, _array_ $options = [])
- * $git->merge->[abort](#git-merge-abort)()
-* [git mv](#git-mv)
- * $git->[mv](#git-mvstringarrayiterator-source-string-destination-array-options--)(_string|array|\Iterator_ $source, _string_ $destination, _array_ $options = [])
-* [git pull](#git-pull)
- * $git->[pull](#git-pullstring-repository--null-string-refspec--null-array-options--)(_string_ $repository = null, _string_ $refspec = null, _array_ $options = [])
-* [git push](#git-push)
- * $git->[push](#git-pushstring-repository--null-string-refspec--null-array-options--)(_string_ $repository = null, _string_ $refspec = null, _array_ $options = [])
-* [git rebase](#git-rebase)
- * $git->[rebase](#git-rebasestring-upstream--null-string-branch--null-array-options--)(_string_ $upstream = null, _string_ $branch = null, _array_ $options = [])
- * $git->rebase->[continues](#git-rebase-continues)()
- * $git->rebase->[abort](#git-rebase-abort)()
- * $git->rebase->[skip](#git-rebase-skip)()
-* [git remote](#git-remote)
- * $git->[remote](#git-remote)()
- * $git->remote->[add](#git-remote-addstring-name-string-url-array-options--)(_string_ $name, _string_ $url, _array_ $options = [])
- * $git->remote->[rename](#git-remote-renamestring-name-string-newname)(_string_ $name, _string_ $newName)
- * $git->remote->[rm](#git-remote-rmstring-name)(_string_ $name)
- * $git->remote->[show](#git-remote-showstring-name)(_string_ $name)
- * $git->remote->[prune](#git-remote-prunestring-name--null)(_string_ $name = null)
- * $git->remote->[head](#git-remote-headstring-name-string-branch--null)(_string_ $name, _string_ $branch = null)
- * $git->remote->head->[set](#git-remote-head-setstring-name-string-branch)(_string_ $name, _string_ $branch)
- * $git->remote->head->[delete](#git-remote-head-deletestring-name)(_string_ $name)
- * $git->remote->head->[remote](#git-remote-head-remotestring-name)(_string_ $name)
- * $git->remote->[branches](#git-remote-branchesstring-name-array-branches)(_string_ $name, _array_ $branches)
- * $git->remote->branches->[set](#git-remote-branches-setstring-name-array-branches)(_string_ $name, _array_ $branches)
- * $git->remote->branches->[add](#git-remote-branches-addstring-name-array-branches)(_string_ $name, _array_ $branches)
- * $git->remote->[url](#git-remote-urlstring-name-string-newurl-string-oldurl--null-array-options--)(_string_ $name, _string_ $newUrl, _string_ $oldUrl = null, _array_ $options = [])
- * $git->remote->url->[set](#git-remote-url-setstring-name-string-newurl-string-oldurl--null-array-options--)(_string_ $name, _string_ $newUrl, _string_ $oldUrl = null, _array_ $options = [])
- * $git->remote->url->[add](#git-remote-url-addstring-name-string-newurl-array-options--)(_string_ $name, _string_ $newUrl, _array_ $options = [])
- * $git->remote->url->[delete](#git-remote-url-deletestring-name-string-url-array-options--)(_string_ $name, _string_ $url, _array_ $options = [])
-* [git reset](#git-reset)
- * $git->[reset](#git-resetstringarraytraversable-paths-string-commit--null)(_string|array|\Traversable_ $paths, _string_ $commit = null)
- * $git->reset->[soft](#git-reset-softstring-commit--null)(_string_ $commit = null)
- * $git->reset->[mixed](#git-reset-mixedstring-commit--null)(_string_ $commit = null)
- * $git->reset->[hard](#git-reset-hardstring-commit--null)(_string_ $commit = null)
- * $git->reset->[merge](#git-reset-mergestring-commit--null)(_string_ $commit = null)
- * $git->reset->[keep](#git-reset-keepstring-commit--null)(_string_ $commit = null)
- * $git->reset->[mode](#git-reset-modestring-mode-string-commit--null)(_string_ $mode, _string_ $commit = null)
-* [git rm](#git-rm)
- * $git->[rm](#git-rmstringarraytraversable-file-array-options--)(_string|array|\Traversable_ $file, _array_ $options = [])
- * $git->rm->[cached](#git-rm-cachedstringarraytraversable-file-array-options--)(_string|array|\Traversable_ $file, _array_ $options = [])
-* [git shortlog](#git-shortlog)
- * $git->[shortlog](#git-shortlogstringarraytraversable-commits--head)(_string|array|\Traversable_ $commits = HEAD)
- * $git->shortlog->[summary](#git-shortlog-summarystring-commits--head)(_string_ $commits = HEAD)
-* [git show](#git-show)
- * $git->[show](#git-showstring-object-array-options--)(_string_ $object, _array_ $options = [])
-* [git stash](#git-stash)
- * $git->[stash](#git-stash)()
- * $git->stash->[save](#git-stash-savestring-message--null-array-options--)(_string_ $message = null, _array_ $options = [])
- * $git->stash->[lists](#git-stash-listsarray-options--)(_array_ $options = [])
- * $git->stash->[show](#git-stash-showstring-stash--null)(_string_ $stash = null)
- * $git->stash->[drop](#git-stash-dropstring-stash--null)(_string_ $stash = null)
- * $git->stash->[pop](#git-stash-popstring-stash--null-array-options--)(_string_ $stash = null, _array_ $options = [])
- * $git->stash->[apply](#git-stash-applystring-stash--null-array-options--)(_string_ $stash = null, _array_ $options = [])
- * $git->stash->[branch](#git-stash-branchstring-name-string-stash--null)(_string_ $name, _string_ $stash = null)
- * $git->stash->[clear](#git-stash-clear)()
- * $git->stash->[create](#git-stash-create)()
-* [git status](#git-status)
- * $git->[status](#git-statusarray-options--)(_array_ $options = [])
-* [git tag](#git-tag)
- * $git->[tag](#git-tag)()
- * $git->tag->[create](#git-tag-createstring-tag-string-commit--null-array-options--)(_string_ $tag, _string_ $commit = null, _array_ $options = [])
- * $git->tag->[delete](#git-tag-deletestringarraytraversable-tag)(_string|array|\Traversable_ $tag)
- * $git->tag->[verify](#git-tag-verifystringarraytraversable-tag)(_string|array|\Traversable_ $tag)
-* [git ls-tree](#git-ls-tree)
- * $git->[tree](#git-treestring-branch--master-string-path--)(_string_ $branch = master, _string_ $path = '')
-
-* * * * *
-
-### git add
-
-#### $git->add(_string|array|\Traversable_ $file, _array_ $options = [])
-
-Add file contents to the index
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->add('file.txt');
-$git->add('file.txt', ['force' => false, 'ignore-errors' => false);
-```
-
-##### Options
-
-- **force** (_boolean_) Allow adding otherwise ignored files
-- **ignore-errors** (_boolean_) Do not abort the operation
-
-* * * * *
-
-### git archive
-
-#### $git->archive(_string_ $file, _string_ $tree = null, _string|array|\Traversable_ $path = null, _array_ $options = [])
-
-Create an archive of files from a named tree
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->archive('repo.zip', 'master', null, ['format' => 'zip']);
-```
-
-##### Options
-
-- **format** (_boolean_) Format of the resulting archive: tar or zip
-- **prefix** (_boolean_) Prepend prefix/ to each filename in the archive
-
-* * * * *
-
-### git branch
-
-#### $git->branch(_array_ $options = [])
-
-Returns an array of both remote-tracking branches and local branches
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$branches = $git->branch();
-```
-
-##### Output Example
-
-```
-[
- 'master' => ['current' => true, 'name' => 'master', 'hash' => 'bf231bb', 'title' => 'Initial Commit'],
- 'origin/master' => ['current' => false, 'name' => 'origin/master', 'alias' => 'remotes/origin/master']
-]
-```
-
-##### Options
-
-- **all** (_boolean_) List both remote-tracking branches and local branches
-- **remotes** (_boolean_) List the remote-tracking branches
-
-#### $git->branch->create(_string_ $branch, _string_ $startPoint = null, _array_ $options = [])
-
-Creates a new branch head named **$branch** which points to the current HEAD, or **$startPoint** if given
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->branch->create('bugfix'); // from current HEAD
-$git->branch->create('patch-1', 'a092bf7s'); // from commit
-$git->branch->create('1.0.x-fix', 'v1.0.2'); // from tag
-```
-
-##### Options
-
-- **force** (_boolean_) Reset **$branch** to **$startPoint** if **$branch** exists already
-
-#### $git->branch->move(_string_ $branch, _string_ $newBranch, _array_ $options = [])
-
-Move/rename a branch and the corresponding reflog
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->branch->move('bugfix', '2.0');
-```
-
-##### Options
-
-- **force** (_boolean_) Move/rename a branch even if the new branch name already exists
-
-#### $git->branch->delete(_string_ $branch, _array_ $options = [])
-
-Delete a branch
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->branch->delete('2.0');
-```
-
-The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set-upstream.
-
-##### Options
-
-- **force** (_boolean_) Delete a branch irrespective of its merged status
-
-* * * * *
-
-### git cat-file
-
-#### $git->cat->blob(_string_ $object)
-
-Returns the contents of blob object
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$contents = $git->cat->blob('e69de29bb2d1d6434b8b29ae775ad8');
-```
-
-#### $git->cat->type(_string_ $object)
-
-Returns the object type identified by **$object**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$type = $git->cat->type('e69de29bb2d1d6434b8b29ae775ad8');
-```
-
-#### $git->cat->size(_string_ $object)
-
-Returns the object size identified by **$object**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$type = $git->cat->size('e69de29bb2d1d6434b8b29ae775ad8');
-```
-
-* * * * *
-
-### git checkout
-
-#### $git->checkout(_string_ $branch, _array_ $options = [])
-
-Switches branches by updating the index, working tree, and HEAD to reflect the specified branch or commit
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->checkout('develop');
-```
-
-##### Options
-
-- **force** (_boolean_) Proceed even if the index or the working tree differs from HEAD
-- **merge** (_boolean_) Merges local modification
-
-#### $git->checkout->create(_string_ $branch, _string_ $startPoint = null, _array_ $options = [])
-
-Create a new branch and checkout
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->checkout->create('patch-1');
-$git->checkout->create('patch-2', 'develop');
-```
-
-##### Options
-
-- **force** (_boolean_) Proceed even if the index or the working tree differs from HEAD
-
-#### $git->checkout->orphan(_string_ $branch, _string_ $startPoint = null, _array_ $options = [])
-
-Create a new orphan branch, named <new_branch>, started from <start_point> and switch to it
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->checkout->orphan('gh-pages');
-```
-
-##### Options
-
-- **force** (_boolean_) Proceed even if the index or the working tree differs from HEAD
-
-* * * * *
-
-### git clone
-
-#### $git->clone(_string_ $repository, _string_ $path = null, _array_ $options = [])
-
-Clone a repository into a new directory
-
-``` php
-$git = new PHPGit\Git();
-$git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
-```
-
-##### Options
-
-- **shared** (_boolean_) Starts out without any object of its own
-- **bare** (_boolean_) Make a bare GIT repository
-
-* * * * *
-
-### git commit
-
-#### $git->commit(_string_ $message, _array_ $options = [])
-
-Record changes to the repository
-
-``` php
-$git = new PHPGit\Git();
-$git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
-$git->setRepository('/path/to/repo');
-$git->add('README.md');
-$git->commit('Fixes README.md');
-```
-
-##### Options
-
-- **all** (_boolean_) Stage files that have been modified and deleted
-- **reuse-message** (_string_) Take an existing commit object, and reuse the log message and the authorship information (including the timestamp) when creating the commit
-- **squash** (_string_) Construct a commit message for use with rebase --autosquash
-- **author** (_string_) Override the commit author
-- **date** (_string_) Override the author date used in the commit
-- **cleanup** (_string_) Can be one of verbatim, whitespace, strip, and default
-- **amend** (_boolean_) Used to amend the tip of the current branch
-
-* * * * *
-
-### git config
-
-#### $git->config(_array_ $options = [])
-
-Returns all variables set in config file
-
-
-##### Options
-
-- **global** (_boolean_) Read or write configuration options for the current user
-- **system** (_boolean_) Read or write configuration options for all users on the current machine
-
-#### $git->config->set(_string_ $name, _string_ $value, _array_ $options = [])
-
-Set an option
-
-##### Options
-
-- **global** (_boolean_) Read or write configuration options for the current user
-- **system** (_boolean_) Read or write configuration options for all users on the current machine
-
-#### $git->config->add(_string_ $name, _string_ $value, _array_ $options = [])
-
-Adds a new line to the option without altering any existing values
-
-##### Options
-
-- **global** (_boolean_) Read or write configuration options for the current user
-- **system** (_boolean_) Read or write configuration options for all users on the current machine
-
-* * * * *
-
-### git describe
-
-#### $git->describe(_string_ $committish = null, _array_ $options = [])
-
-Returns the most recent tag that is reachable from a commit
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->tag->create('v1.0.0');
-$git->commit('Fixes #14');
-echo $git->describe('HEAD', ['tags' => true]);
-```
-
-##### Output Example
-
-```
-v1.0.0-1-g7049efc
-```
-
-##### Options
-
-- **all** (_boolean_) Enables matching any known branch, remote-tracking branch, or lightweight tag
-- **tags** (_boolean_) Enables matching a lightweight (non-annotated) tag
-- **always** (_boolean_) Show uniquely abbreviated commit object as fallback
-
-#### $git->describe->tags(_string_ $committish = null, _array_ $options = [])
-
-Equivalent to $git->describe($committish, ['tags' => true]);
-
-* * * * *
-
-### git fetch
-
-#### $git->fetch(_string_ $repository, _string_ $refspec = null, _array_ $options = [])
-
-Fetches named heads or tags from one or more other repositories, along with the objects necessary to complete them
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'git://your/repo.git');
-$git->fetch('origin');
-```
-
-##### Options
-
-- **append** (_boolean_) Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD
-- **keep** (_boolean_) Keep downloaded pack
-- **prune** (_boolean_) After fetching, remove any remote-tracking branches which no longer exist on the remote
-
-#### $git->fetch->all(_array_ $options = [])
-
-Fetch all remotes
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'git://your/repo.git');
-$git->remote->add('release', 'git://your/another_repo.git');
-$git->fetch->all();
-```
-
-##### Options
-
-- **append** (_boolean_) Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD
-- **keep** (_boolean_) Keep downloaded pack
-- **prune** (_boolean_) After fetching, remove any remote-tracking branches which no longer exist on the remote
-
-* * * * *
-
-### git init
-
-#### $git->init(_string_ $path, _array_ $options = [])
-
-Create an empty git repository or reinitialize an existing one
-
-``` php
-$git = new PHPGit\Git();
-$git->init('/path/to/repo1');
-$git->init('/path/to/repo2', array('shared' => true, 'bare' => true));
-```
-
-##### Options
-
-- **shared** (_boolean_) Specify that the git repository is to be shared amongst several users
-- **bare** (_boolean_) Create a bare repository
-
-* * * * *
-
-### git log
-
-#### $git->log(_string_ $revRange = '', _string_ $path = null, _array_ $options = [])
-
-Returns the commit logs
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$logs = $git->log(array('limit' => 10));
-```
-
-##### Output Example
-
-``` php
-[
- 0 => [
- 'hash' => '1a821f3f8483747fd045eb1f5a31c3cc3063b02b',
- 'name' => 'John Doe',
- 'email' => 'john@example.com',
- 'date' => 'Fri Jan 17 16:32:49 2014 +0900',
- 'title' => 'Initial Commit'
- ],
- 1 => [
- //...
- ]
-]
-```
-
-##### Options
-
-- **limit** (_integer_) Limits the number of commits to show
-- **skip** (_integer_) Skip number commits before starting to show the commit output
-
-* * * * *
-
-### git merge
-
-#### $git->merge(_string|array|\Traversable_ $commit, _string_ $message = null, _array_ $options = [])
-
-Incorporates changes from the named commits into the current branch
-
-```php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->merge('1.0');
-$git->merge('1.1', 'Merge message', ['strategy' => 'ours']);
-```
-
-##### Options
-
-- **no-ff** (_boolean_) Do not generate a merge commit if the merge resolved as a fast-forward, only update the branch pointer
-- **rerere-autoupdate** (_boolean_) Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible
-- **squash** (_boolean_) Allows you to create a single commit on top of the current branch whose effect is the same as merging another branch
-- **strategy** (_string_) Use the given merge strategy
-- **strategy-option** (_string_) Pass merge strategy specific option through to the merge strategy
-
-#### $git->merge->abort()
-
-Abort the merge process and try to reconstruct the pre-merge state
-
-```php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-try {
- $git->merge('dev');
-} catch (PHPGit\Exception\GitException $e) {
- $git->merge->abort();
-}
-```
-
-* * * * *
-
-### git mv
-
-#### $git->mv(_string|array|\Iterator_ $source, _string_ $destination, _array_ $options = [])
-
-Move or rename a file, a directory, or a symlink
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->mv('UPGRADE-1.0.md', 'UPGRADE-1.1.md');
-```
-
-##### Options
-
-- **force** (_boolean_) Force renaming or moving of a file even if the target exists
-
-* * * * *
-
-### git pull
-
-#### $git->pull(_string_ $repository = null, _string_ $refspec = null, _array_ $options = [])
-
-Fetch from and merge with another repository or a local branch
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->pull('origin', 'master');
-```
-
-* * * * *
-
-### git push
-
-#### $git->push(_string_ $repository = null, _string_ $refspec = null, _array_ $options = [])
-
-Update remote refs along with associated objects
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->push('origin', 'master');
-```
-
-* * * * *
-
-### git rebase
-
-#### $git->rebase(_string_ $upstream = null, _string_ $branch = null, _array_ $options = [])
-
-Forward-port local commits to the updated upstream head
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->fetch('origin');
-$git->rebase('origin/master');
-```
-
-##### Options
-
-- **onto** (_string_) Starting point at which to create the new commits
-- **no-verify** (_boolean_) Bypasses the pre-rebase hook
-- **force-rebase** (_boolean_) Force the rebase even if the current branch is a descendant of the commit you are rebasing onto
-
-#### $git->rebase->continues()
-
-Restart the rebasing process after having resolved a merge conflict
-
-#### $git->rebase->abort()
-
-Abort the rebase operation and reset HEAD to the original branch
-
-#### $git->rebase->skip()
-
-Restart the rebasing process by skipping the current patch
-
-* * * * *
-
-### git remote
-
-#### $git->remote()
-
-Returns an array of existing remotes
-
-``` php
-$git = new PHPGit\Git();
-$git->clone('https://github.com/kzykhys/Text.git', '/path/to/repo');
-$git->setRepository('/path/to/repo');
-$remotes = $git->remote();
-```
-
-##### Output Example
-
-``` php
-[
- 'origin' => [
- 'fetch' => 'https://github.com/kzykhys/Text.git',
- 'push' => 'https://github.com/kzykhys/Text.git'
- ]
-]
-```
-
-#### $git->remote->add(_string_ $name, _string_ $url, _array_ $options = [])
-
-Adds a remote named **$name** for the repository at **$url**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->fetch('origin');
-```
-
-##### Options
-
-- **tags** (_boolean_) With this option, `git fetch <name>` imports every tag from the remote repository
-- **no-tags** (_boolean_) With this option, `git fetch <name>` does not import tags from the remote repository
-
-#### $git->remote->rename(_string_ $name, _string_ $newName)
-
-Rename the remote named **$name** to **$newName**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->rename('origin', 'upstream');
-```
-
-#### $git->remote->rm(_string_ $name)
-
-Remove the remote named **$name**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->rm('origin');
-```
-
-#### $git->remote->show(_string_ $name)
-
-Gives some information about the remote **$name**
-
-``` php
-$git = new PHPGit\Git();
-$git->clone('https://github.com/kzykhys/Text.git', '/path/to/repo');
-$git->setRepository('/path/to/repo');
-echo $git->remote->show('origin');
-```
-
-##### Output Example
-
-```
-\* remote origin
- Fetch URL: https://github.com/kzykhys/Text.git
- Push URL: https://github.com/kzykhys/Text.git
- HEAD branch: master
- Remote branch:
- master tracked
- Local branch configured for 'git pull':
- master merges with remote master
- Local ref configured for 'git push':
- master pushes to master (up to date)
-```
-
-#### $git->remote->prune(_string_ $name = null)
-
-Deletes all stale remote-tracking branches under **$name**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->prune('origin');
-```
-
-#### $git->remote->head(_string_ $name, _string_ $branch = null)
-
-Alias of set()
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->head('origin');
-```
-
-#### $git->remote->head->set(_string_ $name, _string_ $branch)
-
-Sets the default branch for the named remote
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->head->set('origin');
-```
-
-#### $git->remote->head->delete(_string_ $name)
-
-Deletes the default branch for the named remote
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->head->delete('origin');
-```
-
-#### $git->remote->head->remote(_string_ $name)
-
-Determine the default branch by querying remote
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->head->remote('origin');
-```
-
-#### $git->remote->branches(_string_ $name, _array_ $branches)
-
-Alias of set()
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->branches('origin', array('master', 'develop'));
-```
-
-#### $git->remote->branches->set(_string_ $name, _array_ $branches)
-
-Changes the list of branches tracked by the named remote
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->branches->set('origin', array('master', 'develop'));
-```
-
-#### $git->remote->branches->add(_string_ $name, _array_ $branches)
-
-Adds to the list of branches tracked by the named remote
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->branches->add('origin', array('master', 'develop'));
-```
-
-#### $git->remote->url(_string_ $name, _string_ $newUrl, _string_ $oldUrl = null, _array_ $options = [])
-
-Alias of set()
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->url('origin', 'https://github.com/text/Text.git');
-```
-
-##### Options
-
-- **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
-
-#### $git->remote->url->set(_string_ $name, _string_ $newUrl, _string_ $oldUrl = null, _array_ $options = [])
-
-Sets the URL remote to $newUrl
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->url->set('origin', 'https://github.com/text/Text.git');
-```
-
-##### Options
-
-- **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
-
-#### $git->remote->url->add(_string_ $name, _string_ $newUrl, _array_ $options = [])
-
-Adds new URL to remote
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->url->add('origin', 'https://github.com/text/Text.git');
-```
-
-##### Options
-
-- **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
-
-#### $git->remote->url->delete(_string_ $name, _string_ $url, _array_ $options = [])
-
-Deletes all URLs matching regex $url
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-$git->remote->url->delete('origin', 'https://github.com');
-```
-
-##### Options
-
-- **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
-
-* * * * *
-
-### git reset
-
-#### $git->reset(_string|array|\Traversable_ $paths, _string_ $commit = null)
-
-Resets the index entries for all **$paths** to their state at **$commit**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->reset();
-```
-
-#### $git->reset->soft(_string_ $commit = null)
-
-Resets the current branch head to **$commit**
-
-Does not touch the index file nor the working tree at all (but resets the head to **$commit**,
-just like all modes do).
-This leaves all your changed files "Changes to be committed", as git status would put it.
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->reset->soft();
-```
-
-#### $git->reset->mixed(_string_ $commit = null)
-
-Resets the current branch head to **$commit**
-
-Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit)
-and reports what has not been updated. This is the default action.
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->reset->mixed();
-```
-
-#### $git->reset->hard(_string_ $commit = null)
-
-Resets the current branch head to **$commit**
-
-Resets the index and working tree. Any changes to tracked files in the working tree since **$commit** are discarded
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->reset->hard();
-```
-
-#### $git->reset->merge(_string_ $commit = null)
-
-Resets the current branch head to **$commit**
-
-Resets the index and updates the files in the working tree that are different between **$commit** and HEAD,
-but keeps those which are different between the index and working tree
-(i.e. which have changes which have not been added). If a file that is different between **$commit** and
-the index has unstaged changes, reset is aborted
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->reset->merge();
-```
-
-#### $git->reset->keep(_string_ $commit = null)
-
-Resets the current branch head to **$commit**
-
-Resets index entries and updates files in the working tree that are different between **$commit** and HEAD.
-If a file that is different between **$commit** and HEAD has local changes, reset is aborted.
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->reset->keep();
-```
-
-#### $git->reset->mode(_string_ $mode, _string_ $commit = null)
-
-Resets the current branch head to **$commit**
-
-Possibly updates the index (resetting it to the tree of **$commit**) and the working tree depending on **$mode**
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->reset->mode('hard');
-```
-
-* * * * *
-
-### git rm
-
-#### $git->rm(_string|array|\Traversable_ $file, _array_ $options = [])
-
-Remove files from the working tree and from the index
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->rm('CHANGELOG-1.0-1.1.txt', ['force' => true]);
-```
-
-##### Options
-
-- **force** (_boolean_) Override the up-to-date check
-- **cached** (_boolean_) Unstage and remove paths only from the index
-- **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
-
-#### $git->rm->cached(_string|array|\Traversable_ $file, _array_ $options = [])
-
-Equivalent to $git->rm($file, ['cached' => true]);
-
-##### Options
-
-- **force** (_boolean_) Override the up-to-date check
-- **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
-
-* * * * *
-
-### git shortlog
-
-#### $git->shortlog(_string|array|\Traversable_ $commits = HEAD)
-
-Summarize 'git log' output
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$shortlog = $git->shortlog();
-```
-
-##### Output Example
-
-``` php
-[
- 'John Doe <john@example.com>' => [
- 0 => ['commit' => '589de67', 'date' => new \DateTime('2014-02-10 12:56:15 +0300'), 'subject' => 'Update README'],
- 1 => ['commit' => '589de67', 'date' => new \DateTime('2014-02-15 12:56:15 +0300'), 'subject' => 'Update README'],
- ],
- //...
-]
-```
-
-#### $git->shortlog->summary(_string_ $commits = HEAD)
-
-Suppress commit description and provide a commit count summary only
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$shortlog = $git->shortlog->summary();
-```
-
-##### Output Example
-
-``` php
-[
- 'John Doe <john@example.com>' => 153,
- //...
-]
-```
-
-* * * * *
-
-### git show
-
-#### $git->show(_string_ $object, _array_ $options = [])
-
-Shows one or more objects (blobs, trees, tags and commits)
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-echo $git->show('3ddee587e209661c8265d5bfd0df999836f6dfa2');
-```
-
-##### Options
-
-- **format** (_string_) Pretty-print the contents of the commit logs in a given format, where <format> can be one of oneline, short, medium, full, fuller, email, raw and format:<string>
-- **abbrev-commit** (_boolean_) Instead of showing the full 40-byte hexadecimal commit object name, show only a partial prefix
-
-* * * * *
-
-### git stash
-
-#### $git->stash()
-
-Save your local modifications to a new stash, and run git reset --hard to revert them
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->stash();
-```
-
-#### $git->stash->save(_string_ $message = null, _array_ $options = [])
-
-Save your local modifications to a new stash, and run git reset --hard to revert them.
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->stash->save('My stash');
-```
-
-#### $git->stash->lists(_array_ $options = [])
-
-Returns the stashes that you currently have
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$stashes = $git->stash->lists();
-```
-
-##### Output Example
-
-``` php
-[
- 0 => ['branch' => 'master', 'message' => '0e2f473 Fixes README.md'],
- 1 => ['branch' => 'master', 'message' => 'ce1ddde Initial commit'],
-]
-```
-
-#### $git->stash->show(_string_ $stash = null)
-
-Show the changes recorded in the stash as a diff between the stashed state and its original parent
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-echo $git->stash->show('stash@{0}');
-```
-
-##### Output Example
-
-```
- REAMDE.md | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-```
-
-#### $git->stash->drop(_string_ $stash = null)
-
-Remove a single stashed state from the stash list
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->stash->drop('stash@{0}');
-```
-
-#### $git->stash->pop(_string_ $stash = null, _array_ $options = [])
-
-Remove a single stashed state from the stash list and apply it on top of the current working tree state
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->stash->pop('stash@{0}');
-```
-
-#### $git->stash->apply(_string_ $stash = null, _array_ $options = [])
-
-Like pop, but do not remove the state from the stash list
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->stash->apply('stash@{0}');
-```
-
-#### $git->stash->branch(_string_ $name, _string_ $stash = null)
-
-Creates and checks out a new branch named <branchname> starting from the commit at which the <stash> was originally created, applies the changes recorded in <stash> to the new working tree and index
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->stash->branch('hotfix', 'stash@{0}');
-```
-
-#### $git->stash->clear()
-
-Remove all the stashed states
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->stash->clear();
-```
-
-#### $git->stash->create()
-
-Create a stash (which is a regular commit object) and return its object name, without storing it anywhere in the ref namespace
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$commit = $git->stash->create();
-```
-
-##### Output Example
-
-```
-877316ea6f95c43b7ccc2c2a362eeedfa78b597d
-```
-
-* * * * *
-
-### git status
-
-#### $git->status(_array_ $options = [])
-
-Returns the working tree status
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$status = $git->status();
-```
-
-##### Constants
-
-- StatusCommand::UNMODIFIED [=' '] unmodified
-- StatusCommand::MODIFIED [='M'] modified
-- StatusCommand::ADDED [='A'] added
-- StatusCommand::DELETED [='D'] deleted
-- StatusCommand::RENAMED [='R'] renamed
-- StatusCommand::COPIED [='C'] copied
-- StatusCommand::UPDATED_BUT_UNMERGED [='U'] updated but unmerged
-- StatusCommand::UNTRACKED [='?'] untracked
-- StatusCommand::IGNORED [='!'] ignored
-
-##### Output Example
-
-``` php
-[
- 'branch' => 'master',
- 'changes' => [
- ['file' => 'item1.txt', 'index' => 'A', 'work_tree' => 'M'],
- ['file' => 'item2.txt', 'index' => 'A', 'work_tree' => ' '],
- ['file' => 'item3.txt', 'index' => '?', 'work_tree' => '?'],
- ]
-]
-```
-
-##### Options
-
-- **ignored** (_boolean_) Show ignored files as well
-
-* * * * *
-
-### git tag
-
-#### $git->tag()
-
-Returns an array of tags
-
-``` php
-$git = new PHPGit\Git();
-$git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
-$git->setRepository('/path/to/repo');
-$tags = $git->tag();
-```
-
-##### Output Example
-
-```
-['v1.0.0', 'v1.0.1', 'v1.0.2']
-```
-
-#### $git->tag->create(_string_ $tag, _string_ $commit = null, _array_ $options = [])
-
-Creates a tag object
-
-``` php
-$git = new PHPGit\Git();
-$git->setRepository('/path/to/repo');
-$git->tag->create('v1.0.0');
-```
-
-##### Options
-
-- **annotate** (_boolean_) Make an unsigned, annotated tag object
-- **sign** (_boolean_) Make a GPG-signed tag, using the default e-mail address’s key
-- **force** (_boolean_) Replace an existing tag with the given name (instead of failing)
-
-#### $git->tag->delete(_string|array|\Traversable_ $tag)
-
-Delete existing tags with the given names
-
-#### $git->tag->verify(_string|array|\Traversable_ $tag)
-
-Verify the gpg signature of the given tag names
-
-* * * * *
-
-### git ls-tree
-
-#### $git->tree(_string_ $branch = master, _string_ $path = '')
-
-Returns the contents of a tree object
-
-``` php
-$git = new PHPGit\Git();
-$git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
-$git->setRepository('/path/to/repo');
-$tree = $git->tree('master');
-```
-
-##### Output Example
-
-``` php
-[
- ['mode' => '100644', 'type' => 'blob', 'hash' => '1f100ce9855b66111d34b9807e47a73a9e7359f3', 'file' => '.gitignore', 'sort' => '2:.gitignore'],
- ['mode' => '100644', 'type' => 'blob', 'hash' => 'e0bfe494537037451b09c32636c8c2c9795c05c0', 'file' => '.travis.yml', 'sort' => '2:.travis.yml'],
- ['mode' => '040000', 'type' => 'tree', 'hash' => '8d5438e79f77cd72de80c49a413f4edde1f3e291', 'file' => 'bin', 'sort' => '1:.bin'],
-]
-```
-
-License
--------
-
-The MIT License
-
-Author
-------
-
-Kazuyuki Hayashi (@kzykhys)
diff --git a/library/kzykhys/git/phpunit.xml.dist b/library/kzykhys/git/phpunit.xml.dist
deleted file mode 100644
index ad8dd7b00..000000000
--- a/library/kzykhys/git/phpunit.xml.dist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
-<phpunit
- backupGlobals = "false"
- backupStaticAttributes = "false"
- colors = "true"
- convertErrorsToExceptions = "true"
- convertNoticesToExceptions = "true"
- convertWarningsToExceptions = "true"
- processIsolation = "false"
- stopOnFailure = "false"
- syntaxCheck = "false"
- bootstrap = "vendor/autoload.php" >
-
- <testsuites>
- <testsuite name="Project Test Suite">
- <directory>test</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>src</directory>
- </whitelist>
- </filter>
-
-</phpunit> \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command.php b/library/kzykhys/git/src/PHPGit/Command.php
deleted file mode 100644
index 9238a5454..000000000
--- a/library/kzykhys/git/src/PHPGit/Command.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-
-namespace PHPGit;
-
-use Symfony\Component\OptionsResolver\OptionsResolver;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-use Symfony\Component\Process\ProcessBuilder;
-
-/**
- * Base class for git commands
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-abstract class Command
-{
-
- /**
- * @var Git
- */
- protected $git;
-
- /**
- * @param Git $git
- */
- public function __construct(Git $git)
- {
- $this->git = $git;
- }
-
- /**
- * Returns the combination of the default and the passed options
- *
- * @param array $options An array of options
- *
- * @return array
- */
- public function resolve(array $options = array())
- {
- $resolver = new OptionsResolver();
- $this->setDefaultOptions($resolver);
-
- return $resolver->resolve($options);
- }
-
- /**
- * Sets the default options
- *
- * @param OptionsResolverInterface $resolver The resolver for the options
- *
- * @codeCoverageIgnore
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- }
-
- /**
- * Split string by new line or null(\0)
- *
- * @param string $input The string to split
- * @param bool $useNull True to split by new line, otherwise null
- *
- * @return array
- */
- protected function split($input, $useNull = false)
- {
- if ($useNull) {
- $pattern = '/\0/';
- } else {
- $pattern = '/\r?\n/';
- }
-
- return preg_split($pattern, rtrim($input), -1, PREG_SPLIT_NO_EMPTY);
- }
-
- /**
- * Adds boolean options to command arguments
- *
- * @param ProcessBuilder $builder A ProcessBuilder object
- * @param array $options An array of options
- * @param array $optionNames The names of options to add
- */
- protected function addFlags(ProcessBuilder $builder, array $options = array(), array $optionNames = null)
- {
- if ($optionNames) {
- foreach ($optionNames as $name) {
- if (isset($options[$name]) && is_bool($options[$name]) && $options[$name]) {
- $builder->add('--' . $name);
- }
- }
- } else {
- foreach ($options as $name => $option) {
- if ($option) {
- $builder->add('--' . $name);
- }
- }
- }
- }
-
- /**
- * Adds options with values to command arguments
- *
- * @param ProcessBuilder $builder A ProcessBuilder object
- * @param array $options An array of options
- * @param array $optionNames The names of options to add
- */
- protected function addValues(ProcessBuilder $builder, array $options = array(), array $optionNames = null)
- {
- if ($optionNames) {
- foreach ($optionNames as $name) {
- if (isset($options[$name]) && $options[$name]) {
- $builder->add('--' . $name . '=' . $options[$name]);
- }
- }
- } else {
- foreach ($options as $name => $option) {
- if ($option) {
- $builder->add('--' . $name . '=' . $option);
- }
- }
- }
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/AddCommand.php b/library/kzykhys/git/src/PHPGit/Command/AddCommand.php
deleted file mode 100644
index c035b2412..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/AddCommand.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Add file contents to the index - `git add`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class AddCommand extends Command
-{
-
- /**
- * Add file contents to the index
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->add('file.txt');
- * $git->add('file.txt', ['force' => false, 'ignore-errors' => false);
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Allow adding otherwise ignored files
- * - **ignore-errors** (_boolean_) Do not abort the operation
- *
- * @param string|array|\Traversable $file Files to add content from
- * @param array $options [optional] An array of options {@see AddCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($file, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('add');
-
- $this->addFlags($builder, $options);
-
- if (!is_array($file) && !($file instanceof \Traversable)) {
- $file = array($file);
- }
-
- foreach ($file as $value) {
- $builder->add($value);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **force** (_boolean_) Allow adding otherwise ignored files
- * - **ignore-errors** (_boolean_) Do not abort the operation
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- //'dry-run' => false,
- 'force' => false,
- 'ignore-errors' => false,
- //'ignore-missing' => false,
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/ArchiveCommand.php b/library/kzykhys/git/src/PHPGit/Command/ArchiveCommand.php
deleted file mode 100644
index a6c9bd0d9..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/ArchiveCommand.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Create an archive of files from a named tree - `git archive`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class ArchiveCommand extends Command
-{
-
- /**
- * Create an archive of files from a named tree
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->archive('repo.zip', 'master', null, ['format' => 'zip']);
- * ```
- *
- * ##### Options
- *
- * - **format** (_boolean_) Format of the resulting archive: tar or zip
- * - **prefix** (_boolean_) Prepend prefix/ to each filename in the archive
- *
- * @param string $file The filename
- * @param string $tree [optional] The tree or commit to produce an archive for
- * @param string|array|\Traversable $path [optional] If one or more paths are specified, only these are included
- * @param array $options [optional] An array of options {@see ArchiveCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($file, $tree = null, $path = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('archive');
-
- if ($options['format']) {
- $builder->add('--format=' . $options['format']);
- }
-
- if ($options['prefix']) {
- $builder->add('--prefix=' . $options['prefix']);
- }
-
- $builder->add('-o')->add($file);
-
- if ($tree) {
- $builder->add($tree);
- }
-
- if (!is_array($path) && !($path instanceof \Traversable)) {
- $path = array($path);
- }
-
- foreach ($path as $value) {
- $builder->add($value);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **format** (_boolean_) Format of the resulting archive: tar or zip
- * - **prefix** (_boolean_) Prepend prefix/ to each filename in the archive
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'format' => null,
- 'prefix' => null
- ));
-
- $resolver->setAllowedTypes(array(
- 'format' => array('null', 'string'),
- 'prefix' => array('null', 'string')
- ));
-
- $resolver->setAllowedValues(array(
- 'format' => array('tar', 'zip')
- ));
- }
-
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/BranchCommand.php b/library/kzykhys/git/src/PHPGit/Command/BranchCommand.php
deleted file mode 100644
index 4b42f5048..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/BranchCommand.php
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * List, create, or delete branches - `git branch`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class BranchCommand extends Command
-{
-
- /**
- * Returns an array of both remote-tracking branches and local branches
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $branches = $git->branch();
- * ```
- *
- * ##### Output Example
- *
- * ```
- * [
- * 'master' => ['current' => true, 'name' => 'master', 'hash' => 'bf231bb', 'title' => 'Initial Commit'],
- * 'origin/master' => ['current' => false, 'name' => 'origin/master', 'alias' => 'remotes/origin/master']
- * ]
- * ```
- *
- * ##### Options
- *
- * - **all** (_boolean_) List both remote-tracking branches and local branches
- * - **remotes** (_boolean_) List the remote-tracking branches
- *
- * @param array $options [optional] An array of options {@see BranchCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return array
- */
- public function __invoke(array $options = array())
- {
- $options = $this->resolve($options);
- $branches = array();
- $builder = $this->getProcessBuilder()
- ->add('-v')->add('--abbrev=7');
-
- if ($options['remotes']) {
- $builder->add('--remotes');
- }
-
- if ($options['all']) {
- $builder->add('--all');
- }
-
- $process = $builder->getProcess();
- $this->git->run($process);
-
- $lines = preg_split('/\r?\n/', rtrim($process->getOutput()), -1, PREG_SPLIT_NO_EMPTY);
-
- foreach ($lines as $line) {
- $branch = array();
- preg_match('/(?<current>\*| ) (?<name>[^\s]+) +((?:->) (?<alias>[^\s]+)|(?<hash>[0-9a-z]{7}) (?<title>.*))/', $line, $matches);
-
- $branch['current'] = ($matches['current'] == '*');
- $branch['name'] = $matches['name'];
-
- if (isset($matches['hash'])) {
- $branch['hash'] = $matches['hash'];
- $branch['title'] = $matches['title'];
- } else {
- $branch['alias'] = $matches['alias'];
- }
-
- $branches[$matches['name']] = $branch;
- }
-
- return $branches;
- }
-
- /**
- * Creates a new branch head named **$branch** which points to the current HEAD, or **$startPoint** if given
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->branch->create('bugfix'); // from current HEAD
- * $git->branch->create('patch-1', 'a092bf7s'); // from commit
- * $git->branch->create('1.0.x-fix', 'v1.0.2'); // from tag
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Reset **$branch** to **$startPoint** if **$branch** exists already
- *
- * @param string $branch The name of the branch to create
- * @param string $startPoint [optional] The new branch head will point to this commit.
- * It may be given as a branch name, a commit-id, or a tag.
- * If this option is omitted, the current HEAD will be used instead.
- * @param array $options [optional] An array of options {@see BranchCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function create($branch, $startPoint = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->getProcessBuilder();
-
- if ($options['force']) {
- $builder->add('-f');
- }
-
- $builder->add($branch);
-
- if ($startPoint) {
- $builder->add($startPoint);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Move/rename a branch and the corresponding reflog
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->branch->move('bugfix', '2.0');
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Move/rename a branch even if the new branch name already exists
- *
- * @param string $branch The name of an existing branch to rename
- * @param string $newBranch The new name for an existing branch
- * @param array $options [optional] An array of options {@see BranchCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function move($branch, $newBranch, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->getProcessBuilder();
-
- if ($options['force']) {
- $builder->add('-M');
- } else {
- $builder->add('-m');
- }
-
- $builder->add($branch)->add($newBranch);
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Delete a branch
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->branch->delete('2.0');
- * ```
- *
- * The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set-upstream.
- *
- * ##### Options
- *
- * - **force** (_boolean_) Delete a branch irrespective of its merged status
- *
- * @param string $branch The name of the branch to delete
- * @param array $options [optional] An array of options {@see BranchCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function delete($branch, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->getProcessBuilder();
-
- if ($options['force']) {
- $builder->add('-D');
- } else {
- $builder->add('-d');
- }
-
- $builder->add($branch);
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **force** (_boolean_) Reset <branchname> to <startpoint> if <branchname> exists already
- * - **all** (_boolean_) List both remote-tracking branches and local branches
- * - **remotes** (_boolean_) List or delete (if used with delete()) the remote-tracking branches
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'force' => false,
- 'all' => false,
- 'remotes' => false,
- ));
- }
-
- /**
- * @return \Symfony\Component\Process\ProcessBuilder
- */
- protected function getProcessBuilder()
- {
- return $this->git->getProcessBuilder()
- ->add('branch');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/CatCommand.php b/library/kzykhys/git/src/PHPGit/Command/CatCommand.php
deleted file mode 100644
index 0c4fc1f41..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/CatCommand.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-
-/**
- * Provide content or type and size information for repository objects - `git cat-file`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class CatCommand extends Command
-{
-
- /**
- * Returns the contents of blob object
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $contents = $git->cat->blob('e69de29bb2d1d6434b8b29ae775ad8');
- * ```
- *
- * @param string $object The name of the blob object to show
- *
- * @throws GitException
- * @return string
- */
- public function blob($object)
- {
- $process = $this->git->getProcessBuilder()
- ->add('cat-file')
- ->add('blob')
- ->add($object)
- ->getProcess();
-
- return $this->git->run($process);
- }
-
- /**
- * Returns the object type identified by **$object**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $type = $git->cat->type('e69de29bb2d1d6434b8b29ae775ad8');
- * ```
- *
- * @param string $object The name of the object to show
- *
- * @throws GitException
- * @return string
- */
- public function type($object)
- {
- $process = $this->git->getProcessBuilder()
- ->add('cat-file')
- ->add('-t')
- ->add($object)
- ->getProcess();
-
- return trim($this->git->run($process));
- }
-
- /**
- * Returns the object size identified by **$object**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $type = $git->cat->size('e69de29bb2d1d6434b8b29ae775ad8');
- * ```
- *
- * @param string $object The name of the object to show
- *
- * @throws GitException
- * @return string
- */
- public function size($object)
- {
- $process = $this->git->getProcessBuilder()
- ->add('cat-file')
- ->add('-s')
- ->add($object)
- ->getProcess();
-
- return trim($this->git->run($process));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/CheckoutCommand.php b/library/kzykhys/git/src/PHPGit/Command/CheckoutCommand.php
deleted file mode 100644
index caddf07bd..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/CheckoutCommand.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Checkout a branch or paths to the working tree - `git checkout`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class CheckoutCommand extends Command
-{
-
- /**
- * Switches branches by updating the index, working tree, and HEAD to reflect the specified branch or commit
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->checkout('develop');
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Proceed even if the index or the working tree differs from HEAD
- * - **merge** (_boolean_) Merges local modification
- *
- * @param string $branch Branch to checkout
- * @param array $options [optional] An array of options {@see CheckoutCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($branch, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('checkout');
-
- $this->addFlags($builder, $options, array('force', 'merge'));
-
- $builder->add($branch);
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Create a new branch and checkout
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->checkout->create('patch-1');
- * $git->checkout->create('patch-2', 'develop');
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Proceed even if the index or the working tree differs from HEAD
- *
- * @param string $branch Branch to checkout
- * @param string $startPoint The name of a commit at which to start the new branch
- * @param array $options [optional] An array of options {@see CheckoutCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function create($branch, $startPoint = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('checkout')
- ->add('-b');
-
- $this->addFlags($builder, $options, array('force', 'merge'));
-
- $builder->add($branch);
-
- if ($startPoint) {
- $builder->add($startPoint);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Create a new orphan branch, named <new_branch>, started from <start_point> and switch to it
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->checkout->orphan('gh-pages');
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Proceed even if the index or the working tree differs from HEAD
- *
- * @param string $branch Branch to checkout
- * @param string $startPoint [optional] The name of a commit at which to start the new branch
- * @param array $options [optional] An array of options {@see CheckoutCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function orphan($branch, $startPoint = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('checkout');
-
- $this->addFlags($builder, $options, array('force', 'merge'));
-
- $builder->add('--orphan')->add($branch);
-
- if ($startPoint) {
- $builder->add($startPoint);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **force** (_boolean_) Proceed even if the index or the working tree differs from HEAD
- * - **merge** (_boolean_) Merges local modification
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'force' => false,
- 'merge' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/CloneCommand.php b/library/kzykhys/git/src/PHPGit/Command/CloneCommand.php
deleted file mode 100644
index cc6b4ab37..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/CloneCommand.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Clone a repository into a new directory - `git clone`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class CloneCommand extends Command
-{
-
- /**
- * Clone a repository into a new directory
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
- * ```
- *
- * ##### Options
- *
- * - **shared** (_boolean_) Starts out without any object of its own
- * - **bare** (_boolean_) Make a bare GIT repository
- *
- * @param string $repository The repository to clone from
- * @param string $path [optional] The name of a new directory to clone into
- * @param array $options [optional] An array of options {@see CloneCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($repository, $path = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('clone')
- ->add('--quiet');
-
- $this->addFlags($builder, $options);
-
- $builder->add($repository);
-
- if ($path) {
- $builder->add($path);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **shared** (_boolean_) Starts out without any object of its own
- * - **bare** (_boolean_) Make a bare GIT repository
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'shared' => false,
- 'bare' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/CommitCommand.php b/library/kzykhys/git/src/PHPGit/Command/CommitCommand.php
deleted file mode 100644
index a4f2bdd95..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/CommitCommand.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Record changes to the repository - `git commit`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class CommitCommand extends Command
-{
-
- /**
- * Record changes to the repository
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
- * $git->setRepository('/path/to/repo');
- * $git->add('README.md');
- * $git->commit('Fixes README.md');
- * ```
- *
- * ##### Options
- *
- * - **all** (_boolean_) Stage files that have been modified and deleted
- * - **reuse-message** (_string_) Take an existing commit object, and reuse the log message and the authorship information (including the timestamp) when creating the commit
- * - **squash** (_string_) Construct a commit message for use with rebase --autosquash
- * - **author** (_string_) Override the commit author
- * - **date** (_string_) Override the author date used in the commit
- * - **cleanup** (_string_) Can be one of verbatim, whitespace, strip, and default
- * - **amend** (_boolean_) Used to amend the tip of the current branch
- *
- * @param string $message Use the given <$msg> as the commit message
- * @param array $options [optional] An array of options {@see CloneCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($message, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('commit')
- ->add('-m')->add($message);
-
- $this->addFlags($builder, $options, array('all', 'amend'));
- $this->addValues($builder, $options, array('reuse-message', 'squash', 'author', 'date', 'cleanup'));
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **all** (_boolean_) Stage files that have been modified and deleted
- * - **reuse-message** (_string_) Take an existing commit object, and reuse the log message and the authorship information (including the timestamp) when creating the commit
- * - **squash** (_string_) Construct a commit message for use with rebase --autosquash
- * - **author** (_string_) Override the commit author
- * - **date** (_string_) Override the author date used in the commit
- * - **cleanup** (_string_) Can be one of verbatim, whitespace, strip, and default
- * - **amend** (_boolean_) Used to amend the tip of the current branch
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'all' => false,
- 'reuse-message' => null,
- 'squash' => null,
- 'author' => null,
- 'date' => null,
- 'cleanup' => null,
- 'amend' => false
- ));
-
- $resolver->setAllowedValues(array(
- 'cleanup' => array(null, 'default', 'verbatim', 'whitespace', 'strip')
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/ConfigCommand.php b/library/kzykhys/git/src/PHPGit/Command/ConfigCommand.php
deleted file mode 100644
index cb8bb625f..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/ConfigCommand.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Get and set repository or global options - `git config`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class ConfigCommand extends Command
-{
-
- /**
- * Returns all variables set in config file
- *
- *
- * ##### Options
- *
- * - **global** (_boolean_) Read or write configuration options for the current user
- * - **system** (_boolean_) Read or write configuration options for all users on the current machine
- *
- * @param array $options [optional] An array of options {@see ConfigCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return array
- */
- public function __invoke(array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('config')
- ->add('--list')
- ->add('--null');
-
- $this->addFlags($builder, $options, array('global', 'system'));
-
- $config = array();
- $output = $this->git->run($builder->getProcess());
- $lines = $this->split($output, true);
-
- foreach ($lines as $line) {
- list($name, $value) = explode("\n", $line, 2);
-
- if (isset($config[$name])) {
- $config[$name] .= "\n" . $value;
- } else {
- $config[$name] = $value;
- }
- }
-
- return $config;
- }
-
- /**
- * Set an option
- *
- * ##### Options
- *
- * - **global** (_boolean_) Read or write configuration options for the current user
- * - **system** (_boolean_) Read or write configuration options for all users on the current machine
- *
- * @param string $name The name of the option
- * @param string $value The value to set
- * @param array $options [optional] An array of options {@see ConfigCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function set($name, $value, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('config');
-
- $this->addFlags($builder, $options, array('global', 'system'));
-
- $builder->add($name)->add($value);
- $process = $builder->getProcess();
- $this->git->run($process);
-
- return true;
- }
-
- /**
- * Adds a new line to the option without altering any existing values
- *
- * ##### Options
- *
- * - **global** (_boolean_) Read or write configuration options for the current user
- * - **system** (_boolean_) Read or write configuration options for all users on the current machine
- *
- * @param string $name The name of the option
- * @param string $value The value to add
- * @param array $options [optional] An array of options {@see ConfigCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function add($name, $value, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('config');
-
- $this->addFlags($builder, $options, array('global', 'system'));
-
- $builder->add('--add')->add($name)->add($value);
- $process = $builder->getProcess();
- $this->git->run($process);
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **global** (_boolean_) Read or write configuration options for the current user
- * - **system** (_boolean_) Read or write configuration options for all users on the current machine
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'global' => false,
- 'system' => false,
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/DescribeCommand.php b/library/kzykhys/git/src/PHPGit/Command/DescribeCommand.php
deleted file mode 100644
index affdd009b..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/DescribeCommand.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Show the most recent tag that is reachable from a commit - `git describe`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class DescribeCommand extends Command
-{
-
- /**
- * Returns the most recent tag that is reachable from a commit
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->tag->create('v1.0.0');
- * $git->commit('Fixes #14');
- * echo $git->describe('HEAD', ['tags' => true]);
- * ```
- *
- * ##### Output Example
- *
- * ```
- * v1.0.0-1-g7049efc
- * ```
- *
- * ##### Options
- *
- * - **all** (_boolean_) Enables matching any known branch, remote-tracking branch, or lightweight tag
- * - **tags** (_boolean_) Enables matching a lightweight (non-annotated) tag
- * - **always** (_boolean_) Show uniquely abbreviated commit object as fallback
- *
- * @param string $committish [optional] Committish object names to describe.
- * @param array $options [optional] An array of options {@see DescribeCommand::setDefaultOptions}
- *
- * @return string
- */
- public function __invoke($committish = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('describe');
-
- $this->addFlags($builder, $options, array());
-
- if ($committish) {
- $builder->add($committish);
- }
-
- return trim($this->git->run($builder->getProcess()));
- }
-
- /**
- * Equivalent to $git->describe($committish, ['tags' => true]);
- *
- * @param string $committish [optional] Committish object names to describe.
- * @param array $options [optional] An array of options {@see DescribeCommand::setDefaultOptions}
- *
- * @return string
- */
- public function tags($committish = null, array $options = array())
- {
- $options['tags'] = true;
-
- return $this->__invoke($committish, $options);
- }
-
- /**
- * {@inheritdoc}
- *
- * - **all** (_boolean_) Enables matching any known branch, remote-tracking branch, or lightweight tag
- * - **tags** (_boolean_) Enables matching a lightweight (non-annotated) tag
- * - **always** (_boolean_) Show uniquely abbreviated commit object as fallback
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'all' => false,
- 'tags' => false,
- 'always' => false,
- ));
- }
-
-}
diff --git a/library/kzykhys/git/src/PHPGit/Command/FetchCommand.php b/library/kzykhys/git/src/PHPGit/Command/FetchCommand.php
deleted file mode 100644
index 1302038e8..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/FetchCommand.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Download objects and refs from another repository - `git fetch`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class FetchCommand extends Command
-{
-
- /**
- * Fetches named heads or tags from one or more other repositories, along with the objects necessary to complete them
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'git://your/repo.git');
- * $git->fetch('origin');
- * ```
- *
- * ##### Options
- *
- * - **append** (_boolean_) Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD
- * - **keep** (_boolean_) Keep downloaded pack
- * - **prune** (_boolean_) After fetching, remove any remote-tracking branches which no longer exist on the remote
- *
- * @param string $repository The "remote" repository that is the source of a fetch or pull operation
- * @param string $refspec The format of a <refspec> parameter is an optional plus +, followed by the source ref <src>,
- * followed by a colon :, followed by the destination ref <dst>
- * @param array $options [optional] An array of options {@see FetchCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($repository, $refspec = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('fetch');
-
- $this->addFlags($builder, $options);
- $builder->add($repository);
-
- if ($refspec) {
- $builder->add($refspec);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Fetch all remotes
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'git://your/repo.git');
- * $git->remote->add('release', 'git://your/another_repo.git');
- * $git->fetch->all();
- * ```
- *
- * ##### Options
- *
- * - **append** (_boolean_) Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD
- * - **keep** (_boolean_) Keep downloaded pack
- * - **prune** (_boolean_) After fetching, remove any remote-tracking branches which no longer exist on the remote
- *
- * @param array $options [optional] An array of options {@see FetchCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function all(array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('fetch')
- ->add('--all');
-
- $this->addFlags($builder, $options);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **append** (_boolean_) Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD
- * - **keep** (_boolean_) Keep downloaded pack
- * - **prune** (_boolean_) After fetching, remove any remote-tracking branches which no longer exist on the remote
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'append' => false,
- //'force' => false,
- 'keep' => false,
- 'prune' => false,
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/InitCommand.php b/library/kzykhys/git/src/PHPGit/Command/InitCommand.php
deleted file mode 100644
index 1ff56fa5b..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/InitCommand.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Create an empty git repository or reinitialize an existing one - `git init`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class InitCommand extends Command
-{
-
- /**
- * Create an empty git repository or reinitialize an existing one
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->init('/path/to/repo1');
- * $git->init('/path/to/repo2', array('shared' => true, 'bare' => true));
- * ```
- *
- * ##### Options
- *
- * - **shared** (_boolean_) Specify that the git repository is to be shared amongst several users
- * - **bare** (_boolean_) Create a bare repository
- *
- * @param string $path The directory to create an empty repository
- * @param array $options [optional] An array of options {@see InitCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($path, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('init');
-
- $this->addFlags($builder, $options, array('shared', 'bare'));
-
- $process = $builder->add($path)->getProcess();
- $this->git->run($process);
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **shared** (_boolean_) Specify that the git repository is to be shared amongst several users
- * - **bare** (_boolean_) Create a bare repository
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'shared' => false,
- 'bare' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/LogCommand.php b/library/kzykhys/git/src/PHPGit/Command/LogCommand.php
deleted file mode 100644
index c116550f7..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/LogCommand.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Show commit logs - `git log`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class LogCommand extends Command
-{
-
- /**
- * Returns the commit logs
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $logs = $git->log(array('limit' => 10));
- * ```
- *
- * ##### Output Example
- *
- * ``` php
- * [
- * 0 => [
- * 'hash' => '1a821f3f8483747fd045eb1f5a31c3cc3063b02b',
- * 'name' => 'John Doe',
- * 'email' => 'john@example.com',
- * 'date' => 'Fri Jan 17 16:32:49 2014 +0900',
- * 'title' => 'Initial Commit'
- * ],
- * 1 => [
- * //...
- * ]
- * ]
- * ```
- *
- * ##### Options
- *
- * - **limit** (_integer_) Limits the number of commits to show
- * - **skip** (_integer_) Skip number commits before starting to show the commit output
- *
- * @param string $revRange [optional] Show only commits in the specified revision range
- * @param string $path [optional] Show only commits that are enough to explain how the files that match the specified paths came to be
- * @param array $options [optional] An array of options {@see LogCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return array
- */
- public function __invoke($revRange = '', $path = null, array $options = array())
- {
- $commits = array();
- $options = $this->resolve($options);
-
- $builder = $this->git->getProcessBuilder()
- ->add('log')
- ->add('-n')->add($options['limit'])
- ->add('--skip=' . $options['skip'])
- ->add('--format=%H||%aN||%aE||%aD||%s');
-
- if ($revRange) {
- $builder->add($revRange);
- }
-
- if ($path) {
- $builder->add('--')->add($path);
- }
-
- $output = $this->git->run($builder->getProcess());
- $lines = $this->split($output);
-
- foreach ($lines as $line) {
- list($hash, $name, $email, $date, $title) = preg_split('/\|\|/', $line, -1, PREG_SPLIT_NO_EMPTY);
- $commits[] = array(
- 'hash' => $hash,
- 'name' => $name,
- 'email' => $email,
- 'date' => $date,
- 'title' => $title
- );
- }
-
- return $commits;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **limit** (_integer_) Limits the number of commits to show
- * - **skip** (_integer_) Skip number commits before starting to show the commit output
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'limit' => 10,
- 'skip' => 0
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/MergeCommand.php b/library/kzykhys/git/src/PHPGit/Command/MergeCommand.php
deleted file mode 100644
index e1987151f..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/MergeCommand.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Join two or more development histories together - `git merge`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class MergeCommand extends Command
-{
-
- /**
- * Incorporates changes from the named commits into the current branch
- *
- * ```php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->merge('1.0');
- * $git->merge('1.1', 'Merge message', ['strategy' => 'ours']);
- * ```
- *
- * ##### Options
- *
- * - **no-ff** (_boolean_) Do not generate a merge commit if the merge resolved as a fast-forward, only update the branch pointer
- * - **rerere-autoupdate** (_boolean_) Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible
- * - **squash** (_boolean_) Allows you to create a single commit on top of the current branch whose effect is the same as merging another branch
- * - **strategy** (_string_) Use the given merge strategy
- * - **strategy-option** (_string_) Pass merge strategy specific option through to the merge strategy
- *
- * @param string|array|\Traversable $commit Commits to merge into our branch
- * @param string $message [optional] Commit message to be used for the merge commit
- * @param array $options [optional] An array of options {@see MergeCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function __invoke($commit, $message = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('merge');
-
- $this->addFlags($builder, $options, array('no-ff', 'rerere-autoupdate', 'squash'));
-
- if (!is_array($commit) && !($commit instanceof \Traversable)) {
- $commit = array($commit);
- }
- foreach ($commit as $value) {
- $builder->add($value);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Abort the merge process and try to reconstruct the pre-merge state
- *
- * ```php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * try {
- * $git->merge('dev');
- * } catch (PHPGit\Exception\GitException $e) {
- * $git->merge->abort();
- * }
- * ```
- *
- * @throws GitException
- * @return bool
- */
- public function abort()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('merge')
- ->add('--abort');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **no-ff** (_boolean_) Do not generate a merge commit if the merge resolved as a fast-forward, only update the branch pointer
- * - **rerere-autoupdate** (_boolean_) Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible
- * - **squash** (_boolean_) Allows you to create a single commit on top of the current branch whose effect is the same as merging another branch
- * - **strategy** (_string_) Use the given merge strategy
- * - **strategy-option** (_string_) Pass merge strategy specific option through to the merge strategy
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'no-ff' => false,
- 'rerere-autoupdate' => false,
- 'squash' => false,
-
- 'strategy' => null,
- 'strategy-option' => null
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/MvCommand.php b/library/kzykhys/git/src/PHPGit/Command/MvCommand.php
deleted file mode 100644
index fe7ce6af6..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/MvCommand.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Move or rename a file, a directory, or a symlink - `git mv`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class MvCommand extends Command
-{
-
- /**
- * Move or rename a file, a directory, or a symlink
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->mv('UPGRADE-1.0.md', 'UPGRADE-1.1.md');
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Force renaming or moving of a file even if the target exists
- *
- * @param string|array|\Iterator $source The files to move
- * @param string $destination The destination
- * @param array $options [optional] An array of options {@see MvCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function __invoke($source, $destination, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('mv');
-
- $this->addFlags($builder, $options, array('force'));
-
- if (!is_array($source) && !($source instanceof \Traversable)) {
- $source = array($source);
- }
-
- foreach ($source as $value) {
- $builder->add($value);
- }
-
- $builder->add($destination);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **force** (_boolean_) Force renaming or moving of a file even if the target exists
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'force' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/PullCommand.php b/library/kzykhys/git/src/PHPGit/Command/PullCommand.php
deleted file mode 100644
index a7cea0025..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/PullCommand.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Fetch from and merge with another repository or a local branch - `git pull`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class PullCommand extends Command
-{
-
- /**
- * Fetch from and merge with another repository or a local branch
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->pull('origin', 'master');
- * ```
- *
- * @param string $repository The "remote" repository that is the source of a fetch or pull operation
- * @param string $refspec The format of a <refspec> parameter is an optional plus +,
- * followed by the source ref <src>, followed by a colon :, followed by the destination ref <dst>
- * @param array $options [optional] An array of options {@see PullCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function __invoke($repository = null, $refspec = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('pull');
-
- if ($repository) {
- $builder->add($repository);
-
- if ($refspec) {
- $builder->add($refspec);
- }
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
-
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/PushCommand.php b/library/kzykhys/git/src/PHPGit/Command/PushCommand.php
deleted file mode 100644
index d0665d735..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/PushCommand.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Update remote refs along with associated objects - `git push`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class PushCommand extends Command
-{
-
- /**
- * Update remote refs along with associated objects
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->push('origin', 'master');
- * ```
- *
- * @param string $repository The "remote" repository that is destination of a push operation
- * @param string $refspec Specify what destination ref to update with what source object
- * @param array $options [optional] An array of options {@see PushCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function __invoke($repository = null, $refspec = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('push');
-
- $this->addFlags($builder, $options);
-
- if ($repository) {
- $builder->add($repository);
-
- if ($refspec) {
- $builder->add($refspec);
- }
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'all' => false,
- 'mirror' => false,
- 'tags' => false,
- 'force' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/RebaseCommand.php b/library/kzykhys/git/src/PHPGit/Command/RebaseCommand.php
deleted file mode 100644
index 7516b360c..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/RebaseCommand.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Forward-port local commits to the updated upstream head - `git rebase`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class RebaseCommand extends Command
-{
-
- /**
- * Forward-port local commits to the updated upstream head
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->fetch('origin');
- * $git->rebase('origin/master');
- * ```
- *
- * ##### Options
- *
- * - **onto** (_string_) Starting point at which to create the new commits
- * - **no-verify** (_boolean_) Bypasses the pre-rebase hook
- * - **force-rebase** (_boolean_) Force the rebase even if the current branch is a descendant of the commit you are rebasing onto
- *
- * @param string $upstream [optional] Upstream branch to compare against
- * @param string $branch [optional] Working branch; defaults to HEAD
- * @param array $options [optional] An array of options {@see RebaseCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function __invoke($upstream = null, $branch = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('rebase');
-
- if ($options['onto']) {
- $builder->add('--onto')->add($options['onto']);
- }
-
- if ($upstream) {
- $builder->add($upstream);
- }
-
- if ($branch) {
- $builder->add($branch);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Restart the rebasing process after having resolved a merge conflict
- *
- * @return bool
- */
- public function continues()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('rebase')
- ->add('--continue');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Abort the rebase operation and reset HEAD to the original branch
- *
- * @return bool
- */
- public function abort()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('rebase')
- ->add('--abort');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Restart the rebasing process by skipping the current patch
- *
- * @return bool
- */
- public function skip()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('rebase')
- ->add('--skip');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **onto** (_string_) Starting point at which to create the new commits
- * - **no-verify** (_boolean_) Bypasses the pre-rebase hook
- * - **force-rebase** (_boolean_) Force the rebase even if the current branch is a descendant of the commit you are rebasing onto
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'onto' => null,
- 'no-verify' => false,
- 'force-rebase' => false
- ));
-
- $resolver->setAllowedTypes(array(
- 'onto' => array('null', 'string')
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/Remote/SetBranchesCommand.php b/library/kzykhys/git/src/PHPGit/Command/Remote/SetBranchesCommand.php
deleted file mode 100644
index 4e17a4d48..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/Remote/SetBranchesCommand.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-namespace PHPGit\Command\Remote;
-
-use PHPGit\Command;
-
-/**
- * Changes the list of branches tracked by the named remote
- *
- * @author Kazuyuki Hayashi
- */
-class SetBranchesCommand extends Command
-{
-
- /**
- * Alias of set()
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->branches('origin', array('master', 'develop'));
- * ```
- *
- * @param string $name The remote name
- * @param array $branches The names of the tracked branch
- *
- * @return bool
- */
- public function __invoke($name, array $branches)
- {
- return $this->set($name, $branches);
- }
-
- /**
- * Changes the list of branches tracked by the named remote
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->branches->set('origin', array('master', 'develop'));
- * ```
- *
- * @param string $name The remote name
- * @param array $branches The names of the tracked branch
- *
- * @return bool
- */
- public function set($name, array $branches)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-branches')
- ->add($name);
-
- foreach ($branches as $branch) {
- $builder->add($branch);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Adds to the list of branches tracked by the named remote
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->branches->add('origin', array('master', 'develop'));
- * ```
- *
- * @param string $name The remote name
- * @param array $branches The names of the tracked branch
- *
- * @return bool
- */
- public function add($name, array $branches)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-branches')
- ->add($name)
- ->add('--add');
-
- foreach ($branches as $branch) {
- $builder->add($branch);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/Remote/SetHeadCommand.php b/library/kzykhys/git/src/PHPGit/Command/Remote/SetHeadCommand.php
deleted file mode 100644
index 9241ef5b7..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/Remote/SetHeadCommand.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-namespace PHPGit\Command\Remote;
-
-use PHPGit\Command;
-
-/**
- * Sets or deletes the default branch (i.e. the target of the symbolic-ref refs/remotes/<name>/HEAD) for the named remote
- *
- * @author Kazuyuki Hayashi
- */
-class SetHeadCommand extends Command
-{
-
- /**
- * Alias of set()
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->head('origin');
- * ```
- *
- * @param string $name The remote name
- * @param string $branch [optional] The symbolic-ref to set
- *
- * @return bool
- */
- public function __invoke($name, $branch = null)
- {
- return $this->set($name, $branch);
- }
-
- /**
- * Sets the default branch for the named remote
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->head->set('origin');
- * ```
- *
- * @param string $name The remote name
- * @param string $branch [optional] The symbolic-ref to set
- *
- * @return bool
- */
- public function set($name, $branch)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-head')
- ->add($name);
-
- if ($branch) {
- $builder->add($branch);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Deletes the default branch for the named remote
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->head->delete('origin');
- * ```
- *
- * @param string $name The remote name
- *
- * @return bool
- */
- public function delete($name)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-head')
- ->add($name)
- ->add('-d');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Determine the default branch by querying remote
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->head->remote('origin');
- * ```
- *
- * @param string $name The remote name
- *
- * @return bool
- */
- public function remote($name)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-head')
- ->add($name)
- ->add('-a');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/Remote/SetUrlCommand.php b/library/kzykhys/git/src/PHPGit/Command/Remote/SetUrlCommand.php
deleted file mode 100644
index 7b7d84ff5..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/Remote/SetUrlCommand.php
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-
-namespace PHPGit\Command\Remote;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Changes URL remote points to
- *
- * @author Kazuyuki Hayashi
- */
-class SetUrlCommand extends Command
-{
-
- /**
- * Alias of set()
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->url('origin', 'https://github.com/text/Text.git');
- * ```
- *
- * ##### Options
- *
- * - **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
- *
- * @param string $name The name of remote
- * @param string $newUrl The new URL
- * @param string $oldUrl [optional] The old URL
- * @param array $options [optional] An array of options {@see SetUrlCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function __invoke($name, $newUrl, $oldUrl = null, array $options = array())
- {
- return $this->set($name, $newUrl, $oldUrl, $options);
- }
-
- /**
- * Sets the URL remote to $newUrl
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->url->set('origin', 'https://github.com/text/Text.git');
- * ```
- *
- * ##### Options
- *
- * - **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
- *
- * @param string $name The name of remote
- * @param string $newUrl The new URL
- * @param string $oldUrl [optional] The old URL
- * @param array $options [optional] An array of options {@see SetUrlCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function set($name, $newUrl, $oldUrl = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-url');
-
- $this->addFlags($builder, $options);
-
- $builder
- ->add($name)
- ->add($newUrl);
-
- if ($oldUrl) {
- $builder->add($oldUrl);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Adds new URL to remote
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->url->add('origin', 'https://github.com/text/Text.git');
- * ```
- *
- * ##### Options
- *
- * - **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
- *
- * @param string $name The name of remote
- * @param string $newUrl The new URL
- * @param array $options [optional] An array of options {@see SetUrlCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function add($name, $newUrl, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-url')
- ->add('--add');
-
- $this->addFlags($builder, $options);
-
- $builder
- ->add($name)
- ->add($newUrl);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Deletes all URLs matching regex $url
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->url->delete('origin', 'https://github.com');
- * ```
- *
- * ##### Options
- *
- * - **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
- *
- * @param string $name The remote name
- * @param string $url The URL to delete
- * @param array $options [optional] An array of options {@see SetUrlCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function delete($name, $url, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('set-url')
- ->add('--delete');
-
- $this->addFlags($builder, $options);
-
- $builder
- ->add($name)
- ->add($url);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **push** (_boolean_) Push URLs are manipulated instead of fetch URLs
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'push' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/RemoteCommand.php b/library/kzykhys/git/src/PHPGit/Command/RemoteCommand.php
deleted file mode 100644
index 08220a551..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/RemoteCommand.php
+++ /dev/null
@@ -1,278 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Git;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Manage set of tracked repositories - `git remote`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- *
- * @method head($name, $branch) Sets the default branch for the named remote
- * @method branches($name, $branches) Changes the list of branches tracked by the named remote
- * @method url($name, $newUrl, $oldUrl = null, $options = array()) Sets the URL remote to $newUrl
- */
-class RemoteCommand extends Command
-{
-
- /** @var Remote\SetHeadCommand */
- public $head;
-
- /** @var Remote\SetBranchesCommand */
- public $branches;
-
- /** @var Remote\SetUrlCommand */
- public $url;
-
- /**
- * @param Git $git
- */
- public function __construct(Git $git)
- {
- parent::__construct($git);
-
- $this->head = new Remote\SetHeadCommand($git);
- $this->branches = new Remote\SetBranchesCommand($git);
- $this->url = new Remote\SetUrlCommand($git);
- }
-
- /**
- * Calls sub-commands
- *
- * @param string $name The name of a property
- * @param array $arguments An array of arguments
- *
- * @throws \BadMethodCallException
- * @return mixed
- */
- public function __call($name, $arguments)
- {
- if (isset($this->{$name}) && is_callable($this->{$name})) {
- return call_user_func_array($this->{$name}, $arguments);
- }
-
- throw new \BadMethodCallException(sprintf('Call to undefined method %s::%s()', __CLASS__, $name));
- }
-
- /**
- * Returns an array of existing remotes
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->clone('https://github.com/kzykhys/Text.git', '/path/to/repo');
- * $git->setRepository('/path/to/repo');
- * $remotes = $git->remote();
- * ```
- *
- * ##### Output Example
- *
- * ``` php
- * [
- * 'origin' => [
- * 'fetch' => 'https://github.com/kzykhys/Text.git',
- * 'push' => 'https://github.com/kzykhys/Text.git'
- * ]
- * ]
- * ```
- *
- * @return array
- */
- public function __invoke()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('-v');
-
- $remotes = array();
- $output = $this->git->run($builder->getProcess());
- $lines = $this->split($output);
-
- foreach ($lines as $line) {
- if (preg_match('/^(.*)\t(.*)\s\((.*)\)$/', $line, $matches)) {
- if (!isset($remotes[$matches[1]])) {
- $remotes[$matches[1]] = array();
- }
-
- $remotes[$matches[1]][$matches[3]] = $matches[2];
- }
- }
-
- return $remotes;
- }
-
- /**
- * Adds a remote named **$name** for the repository at **$url**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->fetch('origin');
- * ```
- *
- * ##### Options
- *
- * - **tags** (_boolean_) With this option, `git fetch <name>` imports every tag from the remote repository
- * - **no-tags** (_boolean_) With this option, `git fetch <name>` does not import tags from the remote repository
- *
- * @param string $name The name of the remote
- * @param string $url The url of the remote
- * @param array $options [optional] An array of options {@see RemoteCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function add($name, $url, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('add');
-
- $this->addFlags($builder, $options, array('tags', 'no-tags'));
-
- $builder->add($name)->add($url);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Rename the remote named **$name** to **$newName**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->rename('origin', 'upstream');
- * ```
- *
- * @param string $name The remote name to rename
- * @param string $newName The new remote name
- *
- * @return bool
- */
- public function rename($name, $newName)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('rename')
- ->add($name)
- ->add($newName);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Remove the remote named **$name**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- * $git->remote->rm('origin');
- * ```
- *
- * @param string $name The remote name to remove
- *
- * @return bool
- */
- public function rm($name)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('rm')
- ->add($name);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Gives some information about the remote **$name**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->clone('https://github.com/kzykhys/Text.git', '/path/to/repo');
- * $git->setRepository('/path/to/repo');
- * echo $git->remote->show('origin');
- * ```
- *
- * ##### Output Example
- *
- * ```
- * \* remote origin
- * Fetch URL: https://github.com/kzykhys/Text.git
- * Push URL: https://github.com/kzykhys/Text.git
- * HEAD branch: master
- * Remote branch:
- * master tracked
- * Local branch configured for 'git pull':
- * master merges with remote master
- * Local ref configured for 'git push':
- * master pushes to master (up to date)
- * ```
- *
- * @param string $name The remote name to show
- *
- * @return string
- */
- public function show($name)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('show')
- ->add($name);
-
- return $this->git->run($builder->getProcess());
- }
-
- /**
- * Deletes all stale remote-tracking branches under **$name**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->remote->prune('origin');
- * ```
- *
- * @param string $name The remote name
- *
- * @return bool
- */
- public function prune($name = null)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('remote')
- ->add('prune');
-
- if ($name) {
- $builder->add($name);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **tags** (_boolean_) With this option, `git fetch <name>` imports every tag from the remote repository
- * - **no-tags** (_boolean_) With this option, `git fetch <name>` does not import tags from the remote repository
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'tags' => false,
- 'no-tags' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/ResetCommand.php b/library/kzykhys/git/src/PHPGit/Command/ResetCommand.php
deleted file mode 100644
index f70f53e2e..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/ResetCommand.php
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-
-/**
- * Reset current HEAD to the specified state - `git reset`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class ResetCommand extends Command
-{
-
- /**
- * Resets the index entries for all **$paths** to their state at **$commit**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->reset();
- * ```
- *
- * @param string|array|\Traversable $paths The paths to reset
- * @param string $commit The commit
- *
- * @return bool
- */
- public function __invoke($paths, $commit = null)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('reset');
-
- if ($commit) {
- $builder->add($commit)->add('--');
- }
-
- if (!is_array($paths) && !($paths instanceof \Traversable)) {
- $paths = array($paths);
- }
-
- foreach ($paths as $path) {
- $builder->add($path);
- }
-
- try {
- $this->git->run($builder->getProcess());
- } catch (GitException $e) {
- // Confirm exit code
- }
-
- return true;
- }
-
- /**
- * Resets the current branch head to **$commit**
- *
- * Does not touch the index file nor the working tree at all (but resets the head to **$commit**,
- * just like all modes do).
- * This leaves all your changed files "Changes to be committed", as git status would put it.
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->reset->soft();
- * ```
- *
- * @param string $commit The commit
- *
- * @return bool
- */
- public function soft($commit = null)
- {
- return $this->mode('soft', $commit);
- }
-
- /**
- * Resets the current branch head to **$commit**
- *
- * Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit)
- * and reports what has not been updated. This is the default action.
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->reset->mixed();
- * ```
- *
- * @param string $commit The commit
- *
- * @return bool
- */
- public function mixed($commit = null)
- {
- return $this->mode('mixed', $commit);
- }
-
- /**
- * Resets the current branch head to **$commit**
- *
- * Resets the index and working tree. Any changes to tracked files in the working tree since **$commit** are discarded
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->reset->hard();
- * ```
- *
- * @param string $commit The commit
- *
- * @return bool
- */
- public function hard($commit = null)
- {
- return $this->mode('hard', $commit);
- }
-
- /**
- * Resets the current branch head to **$commit**
- *
- * Resets the index and updates the files in the working tree that are different between **$commit** and HEAD,
- * but keeps those which are different between the index and working tree
- * (i.e. which have changes which have not been added). If a file that is different between **$commit** and
- * the index has unstaged changes, reset is aborted
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->reset->merge();
- * ```
- *
- * @param string $commit The commit
- *
- * @return bool
- */
- public function merge($commit = null)
- {
- return $this->mode('merge', $commit);
- }
-
- /**
- * Resets the current branch head to **$commit**
- *
- * Resets index entries and updates files in the working tree that are different between **$commit** and HEAD.
- * If a file that is different between **$commit** and HEAD has local changes, reset is aborted.
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->reset->keep();
- * ```
- *
- * @param string $commit The commit
- *
- * @return bool
- */
- public function keep($commit = null)
- {
- return $this->mode('keep', $commit);
- }
-
- /**
- * Resets the current branch head to **$commit**
- *
- * Possibly updates the index (resetting it to the tree of **$commit**) and the working tree depending on **$mode**
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->reset->mode('hard');
- * ```
- *
- * @param string $mode --<mode>
- * @param string $commit The commit
- *
- * @throws \InvalidArgumentException
- * @return bool
- */
- public function mode($mode, $commit = null)
- {
- if (!in_array($mode, array('soft', 'mixed', 'hard', 'merge', 'keep'))) {
- throw new \InvalidArgumentException('$mode must be one of the following: soft, mixed, hard, merge, keep');
- }
-
- $builder = $this->git->getProcessBuilder()
- ->add('reset')
- ->add('--' . $mode);
-
- if ($commit) {
- $builder->add($commit);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/RmCommand.php b/library/kzykhys/git/src/PHPGit/Command/RmCommand.php
deleted file mode 100644
index d6da31230..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/RmCommand.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Remove files from the working tree and from the index - `git rm`
- *
- * @author Kazuyuki Hayashi
- */
-class RmCommand extends Command
-{
-
- /**
- * Remove files from the working tree and from the index
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->rm('CHANGELOG-1.0-1.1.txt', ['force' => true]);
- * ```
- *
- * ##### Options
- *
- * - **force** (_boolean_) Override the up-to-date check
- * - **cached** (_boolean_) Unstage and remove paths only from the index
- * - **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
- *
- * @param string|array|\Traversable $file Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files.
- * @param array $options [optional] An array of options {@see RmCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function __invoke($file, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('rm');
-
- $this->addFlags($builder, $options, array('force', 'cached'));
-
- if ($options['recursive']) {
- $builder->add('-r');
- }
-
- if (!is_array($file) && !($file instanceof \Traversable)) {
- $file = array($file);
- }
-
- foreach ($file as $value) {
- $builder->add($value);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Equivalent to $git->rm($file, ['cached' => true]);
- *
- * ##### Options
- *
- * - **force** (_boolean_) Override the up-to-date check
- * - **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
- *
- * @param string|array|\Traversable $file Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files.
- * @param array $options [optional] An array of options {@see RmCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function cached($file, array $options = array())
- {
- $options['cached'] = true;
-
- return $this->__invoke($file, $options);
- }
-
- /**
- * {@inheritdoc}
- *
- * - **force** (_boolean_) Override the up-to-date check
- * - **cached** (_boolean_) Unstage and remove paths only from the index
- * - **recursive** (_boolean_) Allow recursive removal when a leading directory name is given
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'force' => false,
- 'cached' => false,
- 'recursive' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/ShortlogCommand.php b/library/kzykhys/git/src/PHPGit/Command/ShortlogCommand.php
deleted file mode 100644
index 23c66e464..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/ShortlogCommand.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-
-/**
- * Summarize 'git log' output - `git shortlog`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class ShortlogCommand extends Command
-{
-
- /**
- * Summarize 'git log' output
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $shortlog = $git->shortlog();
- * ```
- *
- * ##### Output Example
- *
- * ``` php
- * [
- * 'John Doe <john@example.com>' => [
- * 0 => ['commit' => '589de67', 'date' => new \DateTime('2014-02-10 12:56:15 +0300'), 'subject' => 'Update README'],
- * 1 => ['commit' => '589de67', 'date' => new \DateTime('2014-02-15 12:56:15 +0300'), 'subject' => 'Update README'],
- * ],
- * //...
- * ]
- * ```
- * @param string|array|\Traversable $commits [optional] Defaults to HEAD
- *
- * @return array
- */
- public function __invoke($commits = 'HEAD')
- {
- $builder = $this->git->getProcessBuilder()
- ->add('shortlog')
- ->add('--numbered')
- ->add('--format=')
- ->add('-w256,2,2')
- ->add('-e');
-
- if (!is_array($commits) && !($commits instanceof \Traversable)) {
- $commits = array($commits);
- }
-
- foreach ($commits as $commit) {
- $builder->add($commit);
- }
-
- $process = $builder->getProcess();
- $process->setCommandLine(str_replace('--format=', '--format=%h|%ci|%s', $process->getCommandLine()));
-
- $output = $this->git->run($process);
- $lines = $this->split($output);
- $result = array();
- $author = null;
-
- foreach ($lines as $line) {
- if (substr($line, 0, 1) != ' ') {
- if (preg_match('/([^<>]*? <[^<>]+>)/', $line, $matches)) {
- $author = $matches[1];
- $result[$author] = array();
- }
- continue;
- }
-
- list ($commit, $date, $subject) = explode('|', trim($line), 3);
- $result[$author][] = array(
- 'commit' => $commit,
- 'date' => new \DateTime($date),
- 'subject' => $subject
- );
- }
-
- return $result;
- }
-
- /**
- * Suppress commit description and provide a commit count summary only
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $shortlog = $git->shortlog->summary();
- * ```
- *
- * ##### Output Example
- *
- * ``` php
- * [
- * 'John Doe <john@example.com>' => 153,
- * //...
- * ]
- * ```
- *
- * @param string $commits [optional] Defaults to HEAD
- *
- * @return array
- */
- public function summary($commits = 'HEAD')
- {
- $builder = $this->git->getProcessBuilder()
- ->add('shortlog')
- ->add('--numbered')
- ->add('--summary')
- ->add('-e');
-
- if (!is_array($commits) && !($commits instanceof \Traversable)) {
- $commits = array($commits);
- }
-
- foreach ($commits as $commit) {
- $builder->add($commit);
- }
-
- $output = $this->git->run($builder->getProcess());
- $lines = $this->split($output);
- $result = array();
-
- foreach ($lines as $line) {
- list ($commits, $author) = explode("\t", trim($line), 2);
- $result[$author] = (int) $commits;
- }
-
- return $result;
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/ShowCommand.php b/library/kzykhys/git/src/PHPGit/Command/ShowCommand.php
deleted file mode 100644
index 866388357..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/ShowCommand.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Show various types of objects - `git show`
- *
- * @author Kazuyuki Hayashi
- */
-class ShowCommand extends Command
-{
-
- /**
- * Shows one or more objects (blobs, trees, tags and commits)
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * echo $git->show('3ddee587e209661c8265d5bfd0df999836f6dfa2');
- * ```
- *
- * ##### Options
- *
- * - **format** (_string_) Pretty-print the contents of the commit logs in a given format, where <format> can be one of oneline, short, medium, full, fuller, email, raw and format:<string>
- * - **abbrev-commit** (_boolean_) Instead of showing the full 40-byte hexadecimal commit object name, show only a partial prefix
- *
- * @param string $object The names of objects to show
- * @param array $options [optional] An array of options {@see ShowCommand::setDefaultOptions}
- *
- * @return string
- */
- public function __invoke($object, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('show');
-
- $this->addFlags($builder, $options, array('abbrev-commit'));
-
- if ($options['format']) {
- $builder->add('--format=' . $options['format']);
- }
-
- $builder->add($object);
-
- return $this->git->run($builder->getProcess());
- }
-
- /**
- * {@inheritdoc}
- *
- * - **format** (_string_) Pretty-print the contents of the commit logs in a given format, where <format> can be one of oneline, short, medium, full, fuller, email, raw and format:<string>
- * - **abbrev-commit** (_boolean_) Instead of showing the full 40-byte hexadecimal commit object name, show only a partial prefix
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'format' => null,
- 'abbrev-commit' => false
- ));
-
- $resolver->setAllowedTypes(array(
- 'format' => array('null', 'string'),
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/StashCommand.php b/library/kzykhys/git/src/PHPGit/Command/StashCommand.php
deleted file mode 100644
index 52dceaa6b..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/StashCommand.php
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-
-/**
- * Stash the changes in a dirty working directory away - `git stash`
- *
- * @author Kazuyuki Hayashi
- */
-class StashCommand extends Command
-{
-
- /**
- * Save your local modifications to a new stash, and run git reset --hard to revert them
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->stash();
- * ```
- *
- * @return bool
- */
- public function __invoke()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('stash');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Save your local modifications to a new stash, and run git reset --hard to revert them.
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->stash->save('My stash');
- * ```
- *
- * @param string $message [optional] The description along with the stashed state
- * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function save($message = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('save');
-
- $builder->add($message);
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Returns the stashes that you currently have
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $stashes = $git->stash->lists();
- * ```
- *
- * ##### Output Example
- *
- * ``` php
- * [
- * 0 => ['branch' => 'master', 'message' => '0e2f473 Fixes README.md'],
- * 1 => ['branch' => 'master', 'message' => 'ce1ddde Initial commit'],
- * ]
- * ```
- *
- * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions}
- *
- * @return array
- */
- public function lists(array $options = array())
- {
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('list');
-
- $output = $this->git->run($builder->getProcess());
- $lines = $this->split($output);
- $list = array();
-
- foreach ($lines as $line) {
- if (preg_match('/stash@{(\d+)}:.* [Oo]n (.*): (.*)/', $line, $matches)) {
- $list[$matches[1]] = array(
- 'branch' => $matches[2],
- 'message' => $matches[3]
- );
- }
- }
-
- return $list;
- }
-
- /**
- * Show the changes recorded in the stash as a diff between the stashed state and its original parent
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * echo $git->stash->show('stash@{0}');
- * ```
- *
- * ##### Output Example
- *
- * ```
- * REAMDE.md | 2 +-
- * 1 files changed, 1 insertions(+), 1 deletions(-)
- * ```
- *
- * @param string $stash The stash to show
- *
- * @return string
- */
- public function show($stash = null)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('show');
-
- if ($stash) {
- $builder->add($stash);
- }
-
- return $this->git->run($builder->getProcess());
- }
-
- /**
- * Remove a single stashed state from the stash list
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->stash->drop('stash@{0}');
- * ```
- *
- * @param string $stash The stash to drop
- *
- * @return mixed
- */
- public function drop($stash = null)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('drop');
-
- if ($stash) {
- $builder->add($stash);
- }
-
- return $this->git->run($builder->getProcess());
- }
-
- /**
- * Remove a single stashed state from the stash list and apply it on top of the current working tree state
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->stash->pop('stash@{0}');
- * ```
- *
- * @param string $stash The stash to pop
- * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function pop($stash = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('pop');
-
- $this->addFlags($builder, $options, array('index'));
-
- if ($stash) {
- $builder->add($stash);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Like pop, but do not remove the state from the stash list
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->stash->apply('stash@{0}');
- * ```
- *
- * @param string $stash The stash to apply
- * @param array $options [optional] An array of options {@see StashCommand::setDefaultOptions}
- *
- * @return bool
- */
- public function apply($stash = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('apply');
-
- $this->addFlags($builder, $options, array('index'));
-
- if ($stash) {
- $builder->add($stash);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Creates and checks out a new branch named <branchname> starting from the commit at which the <stash> was originally created, applies the changes recorded in <stash> to the new working tree and index
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->stash->branch('hotfix', 'stash@{0}');
- * ```
- *
- * @param string $name The name of the branch
- * @param string $stash The stash
- *
- * @return bool
- */
- public function branch($name, $stash = null)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('branch')
- ->add($name);
-
- if ($stash) {
- $builder->add($stash);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Remove all the stashed states
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->stash->clear();
- * ```
- *
- * @return bool
- */
- public function clear()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('clear');
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Create a stash (which is a regular commit object) and return its object name, without storing it anywhere in the ref namespace
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $commit = $git->stash->create();
- * ```
- *
- * ##### Output Example
- *
- * ```
- * 877316ea6f95c43b7ccc2c2a362eeedfa78b597d
- * ```
- *
- * @return string
- */
- public function create()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('stash')
- ->add('create');
-
- return $this->git->run($builder->getProcess());
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/StatusCommand.php b/library/kzykhys/git/src/PHPGit/Command/StatusCommand.php
deleted file mode 100644
index c2bc983fe..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/StatusCommand.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Show the working tree status - `git status`
- *
- * = unmodified
- * M = modified
- * A = added
- * D = deleted
- * R = renamed
- * C = copied
- * U = updated but unmerged
- *
- * X Y Meaning
- * -------------------------------------------------
- * [MD] not updated
- * M [ MD] updated in index
- * A [ MD] added to index
- * D [ M] deleted from index
- * R [ MD] renamed in index
- * C [ MD] copied in index
- * [MARC] index and work tree matches
- * [ MARC] M work tree changed since index
- * [ MARC] D deleted in work tree
- * -------------------------------------------------
- * D D unmerged, both deleted
- * A U unmerged, added by us
- * U D unmerged, deleted by them
- * U A unmerged, added by them
- * D U unmerged, deleted by us
- * A A unmerged, both added
- * U U unmerged, both modified
- * -------------------------------------------------
- * ? ? untracked
- * ! ! ignored
- * -------------------------------------------------
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class StatusCommand extends Command
-{
-
- const UNMODIFIED = ' ';
- const MODIFIED = 'M';
- const ADDED = 'A';
- const DELETED = 'D';
- const RENAMED = 'R';
- const COPIED = 'C';
- const UPDATED_BUT_UNMERGED = 'U';
- const UNTRACKED = '?';
- const IGNORED = '!';
-
- /**
- * Returns the working tree status
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $status = $git->status();
- * ```
- *
- * ##### Constants
- *
- * - StatusCommand::UNMODIFIED [=' '] unmodified
- * - StatusCommand::MODIFIED [='M'] modified
- * - StatusCommand::ADDED [='A'] added
- * - StatusCommand::DELETED [='D'] deleted
- * - StatusCommand::RENAMED [='R'] renamed
- * - StatusCommand::COPIED [='C'] copied
- * - StatusCommand::UPDATED_BUT_UNMERGED [='U'] updated but unmerged
- * - StatusCommand::UNTRACKED [='?'] untracked
- * - StatusCommand::IGNORED [='!'] ignored
- *
- * ##### Output Example
- *
- * ``` php
- * [
- * 'branch' => 'master',
- * 'changes' => [
- * ['file' => 'item1.txt', 'index' => 'A', 'work_tree' => 'M'],
- * ['file' => 'item2.txt', 'index' => 'A', 'work_tree' => ' '],
- * ['file' => 'item3.txt', 'index' => '?', 'work_tree' => '?'],
- * ]
- * ]
- * ```
- *
- * ##### Options
- *
- * - **ignored** (_boolean_) Show ignored files as well
- *
- * @param array $options [optional] An array of options {@see StatusCommand::setDefaultOptions}
- *
- * @return mixed
- */
- public function __invoke(array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('status')
- ->add('--porcelain')->add('-s')->add('-b')->add('--null');
-
- $this->addFlags($builder, $options);
-
- $process = $builder->getProcess();
- $result = array('branch' => null, 'changes' => array());
- $output = $this->git->run($process);
-
- list($branch, $changes) = preg_split('/(\0|\n)/', $output, 2);
- $lines = $this->split($changes, true);
-
- if (substr($branch, -11) == '(no branch)') {
- $result['branch'] = null;
- } elseif (preg_match('/([^ ]*)\.\.\..*?\[.*?\]$/', $branch, $matches)) {
- $result['branch'] = $matches[1];
- } elseif (preg_match('/ ([^ ]*)$/', $branch, $matches)) {
- $result['branch'] = $matches[1];
- }
-
- foreach ($lines as $line) {
- $result['changes'][] = array(
- 'file' => substr($line, 3),
- 'index' => substr($line, 0, 1),
- 'work_tree' => substr($line, 1, 1)
- );
- }
-
- return $result;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **ignored** (_boolean_) Show ignored files as well
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'ignored' => false
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/TagCommand.php b/library/kzykhys/git/src/PHPGit/Command/TagCommand.php
deleted file mode 100644
index 197d3e887..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/TagCommand.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
-/**
- * Create, list, delete or verify a tag object signed with GPG - `git tag`
- *
- * @author Kazuyuki Hayashi
- */
-class TagCommand extends Command
-{
-
- /**
- * Returns an array of tags
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
- * $git->setRepository('/path/to/repo');
- * $tags = $git->tag();
- * ```
- *
- * ##### Output Example
- *
- * ```
- * ['v1.0.0', 'v1.0.1', 'v1.0.2']
- * ```
- *
- * @throws GitException
- * @return array
- */
- public function __invoke()
- {
- $builder = $this->git->getProcessBuilder()
- ->add('tag');
-
- $output = $this->git->run($builder->getProcess());
-
- return $this->split($output);
- }
-
- /**
- * Creates a tag object
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->setRepository('/path/to/repo');
- * $git->tag->create('v1.0.0');
- * ```
- *
- * ##### Options
- *
- * - **annotate** (_boolean_) Make an unsigned, annotated tag object
- * - **sign** (_boolean_) Make a GPG-signed tag, using the default e-mail address’s key
- * - **force** (_boolean_) Replace an existing tag with the given name (instead of failing)
- *
- * @param string $tag The name of the tag to create
- * @param string $commit The SHA1 object name of the commit object
- * @param array $options [optional] An array of options {@see TagCommand::setDefaultOptions}
- *
- * @throws GitException
- * @return bool
- */
- public function create($tag, $commit = null, array $options = array())
- {
- $options = $this->resolve($options);
- $builder = $this->git->getProcessBuilder()
- ->add('tag')
- ->add($tag);
-
- $this->addFlags($builder, $options, array('annotate', 'sign', 'force'));
-
- if ($commit) {
- $builder->add($commit);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Delete existing tags with the given names
- *
- * @param string|array|\Traversable $tag The name of the tag to create
- *
- * @throws GitException
- * @return bool
- */
- public function delete($tag)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('tag')
- ->add('-d');
-
- if (!is_array($tag) && !($tag instanceof \Traversable)) {
- $tag = array($tag);
- }
-
- foreach ($tag as $value) {
- $builder->add($value);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * Verify the gpg signature of the given tag names
- *
- * @param string|array|\Traversable $tag The name of the tag to create
- *
- * @throws GitException
- * @return bool
- */
- public function verify($tag)
- {
- $builder = $this->git->getProcessBuilder()
- ->add('tag')
- ->add('-v');
-
- if (!is_array($tag) && !($tag instanceof \Traversable)) {
- $tag = array($tag);
- }
-
- foreach ($tag as $value) {
- $builder->add($value);
- }
-
- $this->git->run($builder->getProcess());
-
- return true;
- }
-
- /**
- * {@inheritdoc}
- *
- * - **annotate** (_boolean_) Make an unsigned, annotated tag object
- * - **sign** (_boolean_) Make a GPG-signed tag, using the default e-mail address’s key
- * - **force** (_boolean_) Replace an existing tag with the given name (instead of failing)
- */
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'annotate' => false,
- 'sign' => false,
- 'force' => false,
- ));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Command/TreeCommand.php b/library/kzykhys/git/src/PHPGit/Command/TreeCommand.php
deleted file mode 100644
index ea1040a6a..000000000
--- a/library/kzykhys/git/src/PHPGit/Command/TreeCommand.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace PHPGit\Command;
-
-use PHPGit\Command;
-
-/**
- * List the contents of a tree object - `git ls-tree`
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class TreeCommand extends Command
-{
-
- /**
- * Returns the contents of a tree object
- *
- * ``` php
- * $git = new PHPGit\Git();
- * $git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
- * $git->setRepository('/path/to/repo');
- * $tree = $git->tree('master');
- * ```
- *
- * ##### Output Example
- *
- * ``` php
- * [
- * ['mode' => '100644', 'type' => 'blob', 'hash' => '1f100ce9855b66111d34b9807e47a73a9e7359f3', 'file' => '.gitignore', 'sort' => '2:.gitignore'],
- * ['mode' => '100644', 'type' => 'blob', 'hash' => 'e0bfe494537037451b09c32636c8c2c9795c05c0', 'file' => '.travis.yml', 'sort' => '2:.travis.yml'],
- * ['mode' => '040000', 'type' => 'tree', 'hash' => '8d5438e79f77cd72de80c49a413f4edde1f3e291', 'file' => 'bin', 'sort' => '1:.bin'],
- * ]
- * ```
- *
- * @param string $branch The commit
- * @param string $path The path
- *
- * @return array
- */
- public function __invoke($branch = 'master', $path = '')
- {
- $objects = array();
- $builder = $this->git->getProcessBuilder();
- $process = $builder->add('ls-tree')->add($branch . ':' . $path)->getProcess();
- $output = $this->git->run($process);
- $lines = $this->split($output);
-
- $types = array(
- 'submodule' => 0,
- 'tree' => 1,
- 'blob' => 2
- );
-
- foreach ($lines as $line) {
- list($meta, $file) = explode("\t", $line);
- list($mode, $type, $hash) = explode(" ", $meta);
-
- $objects[] = array(
- 'sort' => sprintf('%d:%s', $types[$type], $file),
- 'mode' => $mode,
- 'type' => $type,
- 'hash' => $hash,
- 'file' => $file
- );
- }
-
- return $objects;
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Exception/GitException.php b/library/kzykhys/git/src/PHPGit/Exception/GitException.php
deleted file mode 100644
index f5901010c..000000000
--- a/library/kzykhys/git/src/PHPGit/Exception/GitException.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace PHPGit\Exception;
-
-/**
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class GitException extends \Exception
-{
-
- /**
- * @var string
- */
- protected $commandLine;
-
- /**
- * Construct the exception. Note: The message is NOT binary safe.
- *
- * @param string $message [optional] The Exception message to throw.
- * @param int $code [optional] The Exception code.
- * @param string $commandLine [optional] Command-line
- * @param \Exception $previous [optional] The previous exception used for the exception chaining. Since 5.3.0
- */
- public function __construct($message = "", $code = 0, $commandLine = null, \Exception $previous = null)
- {
- parent::__construct($message, $code, $previous);
-
- $this->commandLine = $commandLine;
- }
-
- /**
- * @return null|string
- */
- public function getCommandLine()
- {
- return $this->commandLine;
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/src/PHPGit/Git.php b/library/kzykhys/git/src/PHPGit/Git.php
deleted file mode 100644
index f952d6f1f..000000000
--- a/library/kzykhys/git/src/PHPGit/Git.php
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-
-namespace PHPGit;
-
-use PHPGit\Command;
-use PHPGit\Exception\GitException;
-use Symfony\Component\Process\Process;
-use Symfony\Component\Process\ProcessBuilder;
-
-/**
- * PHPGit - A Git wrapper for PHP5.3+
- * ==================================
- *
- * [![Latest Unstable Version](https://poser.pugx.org/kzykhys/git/v/unstable.png)](https://packagist.org/packages/kzykhys/git)
- * [![Build Status](https://travis-ci.org/kzykhys/PHPGit.png?branch=master)](https://travis-ci.org/kzykhys/PHPGit)
- * [![Coverage Status](https://coveralls.io/repos/kzykhys/PHPGit/badge.png)](https://coveralls.io/r/kzykhys/PHPGit)
- * [![SensioLabsInsight](https://insight.sensiolabs.com/projects/04f10b57-a113-47ad-8dda-9a6dacbb079f/mini.png)](https://insight.sensiolabs.com/projects/04f10b57-a113-47ad-8dda-9a6dacbb079f)
- *
- * Requirements
- * ------------
- *
- * * PHP5.3
- * * Git
- *
- * Installation
- * ------------
- *
- * Update your composer.json and run `composer update`
- *
- * ``` json
- * {
- * "require": {
- * "kzykhys/git": "dev-master"
- * }
- * }
- * ```
- *
- * Basic Usage
- * -----------
- *
- * ``` php
- * <?php
- *
- * require __DIR__ . '/vendor/autoload.php';
- *
- * $git = new PHPGit\Git();
- * $git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
- * $git->setRepository('/path/to/repo');
- * $git->remote->add('production', 'git://example.com/your/repo.git');
- * $git->add('README.md');
- * $git->commit('Adds README.md');
- * $git->checkout('release');
- * $git->merge('master');
- * $git->push();
- * $git->push('production', 'release');
- * $git->tag->create('v1.0.1', 'release');
- *
- * foreach ($git->tree('release') as $object) {
- * if ($object['type'] == 'blob') {
- * echo $git->show($object['file']);
- * }
- * }
- * ```
- *
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- * @license MIT
- *
- * @method add($file, $options = array()) Add file contents to the index
- * @method archive($file, $tree = null, $path = null, $options = array()) Create an archive of files from a named tree
- * @method branch($options = array()) List both remote-tracking branches and local branches
- * @method checkout($branch, $options = array()) Checkout a branch or paths to the working tree
- * @method clone($repository, $path = null, $options = array()) Clone a repository into a new directory
- * @method commit($message = '', $options = array()) Record changes to the repository
- * @method config($options = array()) List all variables set in config file
- * @method describe($committish = null, $options = array()) Returns the most recent tag that is reachable from a commit
- * @method fetch($repository, $refspec = null, $options = array()) Fetches named heads or tags from one or more other repositories
- * @method init($path, $options = array()) Create an empty git repository or reinitialize an existing one
- * @method log($path = null, $options = array()) Returns the commit logs
- * @method merge($commit, $message = null, $options = array()) Incorporates changes from the named commits into the current branch
- * @method mv($source, $destination, $options = array()) Move or rename a file, a directory, or a symlink
- * @method pull($repository = null, $refspec = null, $options = array()) Fetch from and merge with another repository or a local branch
- * @method push($repository = null, $refspec = null, $options = array()) Update remote refs along with associated objects
- * @method rebase($upstream = null, $branch = null, $options = array()) Forward-port local commits to the updated upstream head
- * @method remote() Returns an array of existing remotes
- * @method reset($commit = null, $paths = array()) Resets the index entries for all <paths> to their state at <commit>
- * @method rm($file, $options = array()) Remove files from the working tree and from the index
- * @method shortlog($commits = array()) Summarize 'git log' output
- * @method show($object, $options = array()) Shows one or more objects (blobs, trees, tags and commits)
- * @method stash() Save your local modifications to a new stash, and run git reset --hard to revert them
- * @method status($options = array()) Show the working tree status
- * @method tag() Returns an array of tags
- * @method tree($branch = 'master', $path = '') List the contents of a tree object
- */
-class Git
-{
-
- /** @var Command\AddCommand */
- public $add;
-
- /** @var Command\ArchiveCommand */
- public $archive;
-
- /** @var Command\BranchCommand */
- public $branch;
-
- /** @var Command\CatCommand */
- public $cat;
-
- /** @var Command\CheckoutCommand */
- public $checkout;
-
- /** @var Command\CloneCommand */
- public $clone;
-
- /** @var Command\CommitCommand */
- public $commit;
-
- /** @var Command\ConfigCommand */
- public $config;
-
- /** @var Command\DescribeCommand */
- public $describe;
-
- // Not implemented yet
- public $diff;
-
- /** @var Command\FetchCommand */
- public $fetch;
-
- /** @var Command\InitCommand */
- public $init;
-
- /** @var Command\LogCommand */
- public $log;
-
- /** @var Command\MergeCommand */
- public $merge;
-
- /** @var Command\MvCommand */
- public $mv;
-
- /** @var Command\PullCommand */
- public $pull;
-
- /** @var Command\PushCommand */
- public $push;
-
- /** @var Command\RebaseCommand */
- public $rebase;
-
- /** @var Command\RemoteCommand */
- public $remote;
-
- /** @var Command\ResetCommand */
- public $reset;
-
- /** @var Command\RmCommand */
- public $rm;
-
- /** @var Command\ShortlogCommand */
- public $shortlog;
-
- /** @var Command\ShowCommand */
- public $show;
-
- /** @var Command\StashCommand */
- public $stash;
-
- /** @var Command\StatusCommand */
- public $status;
-
- /** @var Command\TagCommand */
- public $tag;
-
- /** @var Command\TreeCommand */
- public $tree;
-
- /** @var string */
- private $bin = 'git';
-
- /** @var string */
- private $directory = '.';
-
- /**
- * Initializes sub-commands
- */
- public function __construct()
- {
- $this->add = new Command\AddCommand($this);
- $this->archive = new Command\ArchiveCommand($this);
- $this->branch = new Command\BranchCommand($this);
- $this->cat = new Command\CatCommand($this);
- $this->checkout = new Command\CheckoutCommand($this);
- $this->clone = new Command\CloneCommand($this);
- $this->commit = new Command\CommitCommand($this);
- $this->config = new Command\ConfigCommand($this);
- $this->describe = new Command\DescribeCommand($this);
- $this->fetch = new Command\FetchCommand($this);
- $this->init = new Command\InitCommand($this);
- $this->log = new Command\LogCommand($this);
- $this->merge = new Command\MergeCommand($this);
- $this->mv = new Command\MvCommand($this);
- $this->pull = new Command\PullCommand($this);
- $this->push = new Command\PushCommand($this);
- $this->rebase = new Command\RebaseCommand($this);
- $this->remote = new Command\RemoteCommand($this);
- $this->reset = new Command\ResetCommand($this);
- $this->rm = new Command\RmCommand($this);
- $this->shortlog = new Command\ShortlogCommand($this);
- $this->show = new Command\ShowCommand($this);
- $this->stash = new Command\StashCommand($this);
- $this->status = new Command\StatusCommand($this);
- $this->tag = new Command\TagCommand($this);
- $this->tree = new Command\TreeCommand($this);
- }
-
- /**
- * Calls sub-commands
- *
- * @param string $name The name of a property
- * @param array $arguments An array of arguments
- *
- * @throws \BadMethodCallException
- * @return mixed
- */
- public function __call($name, $arguments)
- {
- if (isset($this->{$name}) && is_callable($this->{$name})) {
- return call_user_func_array($this->{$name}, $arguments);
- }
-
- throw new \BadMethodCallException(sprintf('Call to undefined method PHPGit\Git::%s()', $name));
- }
-
- /**
- * Sets the Git binary path
- *
- * @param string $bin
- *
- * @return Git
- */
- public function setBin($bin)
- {
- $this->bin = $bin;
-
- return $this;
- }
-
- /**
- * Sets the Git repository path
- *
- * @var string $directory
- *
- * @return Git
- */
- public function setRepository($directory)
- {
- $this->directory = $directory;
-
- return $this;
- }
-
- /**
- * Returns version number
- *
- * @return mixed
- */
- public function getVersion()
- {
- $process = $this->getProcessBuilder()
- ->add('--version')
- ->getProcess();
-
- return $this->run($process);
- }
-
- /**
- * Returns an instance of ProcessBuilder
- *
- * @return ProcessBuilder
- */
- public function getProcessBuilder()
- {
- return ProcessBuilder::create()
- ->setPrefix($this->bin)
- ->setWorkingDirectory($this->directory);
- }
-
- /**
- * Executes a process
- *
- * @param Process $process The process to run
- *
- * @throws Exception\GitException
- * @return mixed
- */
- public function run(Process $process)
- {
- $process->run();
-
- if (!$process->isSuccessful()) {
- throw new GitException($process->getErrorOutput(), $process->getExitCode(), $process->getCommandLine());
- }
-
- return $process->getOutput();
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/BaseTestCase.php b/library/kzykhys/git/test/PHPGit/BaseTestCase.php
deleted file mode 100644
index df69b216e..000000000
--- a/library/kzykhys/git/test/PHPGit/BaseTestCase.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-use Symfony\Component\Filesystem\Filesystem;
-
-/**
- * @author Kazuyuki Hayashi <hayashi@siance.co.jp>
- */
-abstract class BaseTestCase extends PHPUnit_Framework_TestCase
-{
-
- /**
- * @var string
- */
- protected $directory;
-
- /**
- * {@inheritdoc}
- */
- public function setUp()
- {
- $this->directory = __DIR__.'/../../build/' . strtolower(get_class($this));
- }
-
- /**
- * {@inheritdoc}
- */
- public function tearDown()
- {
- $filesystem = new Filesystem();
- $filesystem->remove($this->directory);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/AddCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/AddCommandTest.php
deleted file mode 100644
index 1fad08417..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/AddCommandTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-/**
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class AddCommandTest extends BaseTestCase
-{
-
- public function testAdd()
- {
- $filesystem = new Filesystem();
- $filesystem->mkdir($this->directory);
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $filesystem->dumpFile($this->directory . '/test.md', '**foo**');
-
- $this->assertTrue($git->add('test.txt'));
- $this->assertTrue($git->add(array('test.md'), array('force' => true)));
- }
-
- /**
- * @expectedException \PHPGit\Exception\GitException
- * @expectedExceptionCode 128
- */
- public function testException()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->add('foo');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/ArchiveCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/ArchiveCommandTest.php
deleted file mode 100644
index 982c8f7c7..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/ArchiveCommandTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-/**
- * @author Kazuyuki Hayashi <hayashi@valnur.net>
- */
-class ArchiveCommandTest extends BaseTestCase
-{
-
- public function testArchive()
- {
- $filesystem = new Filesystem();
- $filesystem->mkdir($this->directory);
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'hello');
- $git->add('test.txt');
- $git->commit('Initial commit');
-
- $git->archive($this->directory . '/test.zip', 'master', null, array('format' => 'zip', 'prefix' => 'test/'));
-
- $this->assertFileExists($this->directory . '/test.zip');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/BranchCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/BranchCommandTest.php
deleted file mode 100644
index 4deeea367..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/BranchCommandTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class BranchCommandTest extends BaseTestCase
-{
-
- public function setUp()
- {
- parent::setUp();
-
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', '');
- $git->add('test.txt');
- $git->commit('Initial commit');
- }
-
- public function testBranch()
- {
- $git = new Git();
- $git->setRepository($this->directory);
-
- $branches = $git->branch();
-
- $this->assertCount(1, $branches);
- $this->assertEquals('master', $branches['master']['name']);
- $this->assertTrue($branches['master']['current']);
- $this->assertEquals('Initial commit', $branches['master']['title']);
- }
-
- public function testAllBranch()
- {
- $git = new Git();
- $git->clone('file://' . realpath($this->directory), $this->directory.'2');
- $git->setRepository($this->directory.'2');
-
- $branches = $git->branch(array('remotes' => true));
- $this->assertArrayHasKey('origin/master', $branches);
-
- $branches = $git->branch(array('all' => true));
- $this->assertArrayHasKey('master', $branches);
- $this->assertArrayHasKey('remotes/origin/master', $branches);
-
- $filesystem = new Filesystem();
- $filesystem->remove($this->directory.'2');
- }
-
- public function testBranchCreate()
- {
- $git = new Git();
- $git->setRepository($this->directory);
-
- $git->branch->create('1.0');
- $branches = $git->branch();
- $this->assertCount(2, $branches);
-
- $git->branch->create('1.0-fix', '1.0', array('force' => true));
- $branches = $git->branch();
- $this->assertCount(3, $branches);
- $this->assertArrayHasKey('1.0', $branches);
- $this->assertArrayHasKey('1.0-fix', $branches);
- }
-
- public function testBranchMove()
- {
- $git = new Git();
- $git->setRepository($this->directory);
- $git->branch->create('1.0');
- $git->branch->move('1.0', '1.0.x');
- $branches = $git->branch();
- $this->assertCount(2, $branches);
- $this->assertArrayHasKey('1.0.x', $branches);
-
- $git->branch->move('1.0.x', '2.x', array('force' => true));
- $branches = $git->branch();
- $this->assertCount(2, $branches);
- $this->assertArrayHasKey('2.x', $branches);
- }
-
- public function testBranchDelete()
- {
- $git = new Git();
- $git->setRepository($this->directory);
- $git->branch->create('1.0');
- $git->branch->create('2.0');
- $branches = $git->branch();
- $this->assertCount(3, $branches);
-
- $git->branch->delete('1.0');
- $branches = $git->branch();
- $this->assertCount(2, $branches);
-
- $git->branch->delete('2.0', array('force' => true));
- $branches = $git->branch();
- $this->assertCount(1, $branches);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/CatCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/CatCommandTest.php
deleted file mode 100644
index 945924ccb..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/CatCommandTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class CatCommandTest extends BaseTestCase
-{
-
- public function testCatBlob()
- {
- $filesystem = new Filesystem();
- $filesystem->mkdir($this->directory);
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('Initial commit');
-
- $tree = $git->tree();
-
- $this->assertEquals('foo', $git->cat->blob($tree[0]['hash']));
- }
-
- public function testCatType()
- {
- $filesystem = new Filesystem();
- $filesystem->mkdir($this->directory);
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('Initial commit');
-
- $tree = $git->tree();
-
- $this->assertEquals('blob', $git->cat->type($tree[0]['hash']));
- }
-
- public function testCatSize()
- {
- $filesystem = new Filesystem();
- $filesystem->mkdir($this->directory);
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('Initial commit');
-
- $tree = $git->tree();
-
- $this->assertEquals(3, $git->cat->size($tree[0]['hash']));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/CheckoutCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/CheckoutCommandTest.php
deleted file mode 100644
index c306ea407..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/CheckoutCommandTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class CheckoutCommandTest extends BaseTestCase
-{
-
- public function setUp()
- {
- parent::setUp();
-
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', '');
- $git->add('test.txt');
- $git->commit('Initial commit');
- }
-
- public function testCheckout()
- {
- $git = new Git();
- $git->setRepository($this->directory);
- $git->branch->create('next');
- $git->checkout('next');
-
- $branches = $git->branch();
- $this->assertArrayHasKey('next', $branches);
- $this->assertTrue($branches['next']['current']);
- }
-
- public function testCheckoutCreate()
- {
- $git = new Git();
- $git->setRepository($this->directory);
- $git->checkout->create('next');
-
- $branches = $git->branch();
- $this->assertArrayHasKey('next', $branches);
- $this->assertTrue($branches['next']['current']);
-
- $git->checkout->create('develop', 'next');
-
- $branches = $git->branch();
- $this->assertArrayHasKey('develop', $branches);
- $this->assertTrue($branches['develop']['current']);
- }
-
- public function testCheckoutOrphan()
- {
- $git = new Git();
- $git->setRepository($this->directory);
- $git->checkout->orphan('gh-pages', 'master', array('force' => true));
-
- $status = $git->status();
- $this->assertEquals('gh-pages', $status['branch']);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/CloneCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/CloneCommandTest.php
deleted file mode 100644
index d6a4d26ff..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/CloneCommandTest.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class CloneCommandTest extends BaseTestCase
-{
-
- public function testClone()
- {
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $this->assertFileExists($this->directory . '/.git');
-
- $filesystem = new Filesystem();
- $filesystem->remove($this->directory);
-
- $git->setRepository('.');
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory, array('shared' => true));
-
- $this->assertFileExists($this->directory . '/.git');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/CommitCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/CommitCommandTest.php
deleted file mode 100644
index 01b50ad8d..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/CommitCommandTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class CommitCommandTest extends BaseTestCase
-{
-
- public function testCommit()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem = new Filesystem();
- $filesystem->dumpFile($this->directory . '/test.txt', '');
- $git->add('test.txt');
- $git->commit('Initial commit');
- $logs = $git->log('test.txt');
-
- $this->assertCount(1, $logs);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/ConfigCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/ConfigCommandTest.php
deleted file mode 100644
index fba2fbf76..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/ConfigCommandTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class ConfigCommandTest extends BaseTestCase
-{
-
- public function testConfigSetAndList()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $before = $git->config();
-
- $git->config->set('user.name', 'John Doe');
-
- $config = $git->config();
- $this->assertArrayHasKey('user.name', $config);
-
- $expected = 'John Doe';
-
- if (isset($before['user.name'])) {
- $expected = $before['user.name'] . "\n" . $expected;
- }
-
- $this->assertEquals($expected, $config['user.name']);
- }
-
- public function testConfigAdd()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $before = $git->config();
-
- $git->config->set('user.name', 'John Doe');
- $git->config->add('user.name', 'Foo');
-
- $config = $git->config();
- $this->assertArrayHasKey('user.name', $config);
-
- $expected = "John Doe\nFoo";
-
- if (isset($before['user.name'])) {
- $expected = $before['user.name'] . "\n" . $expected;
- }
-
- $this->assertEquals($expected, $config['user.name']);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/DescribeCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/DescribeCommandTest.php
deleted file mode 100644
index 04d3bd3b0..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/DescribeCommandTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class DescribeCommandTest extends BaseTestCase
-{
-
- public function testDescribeTags()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('README.md');
- $git->commit('Initial commit');
- $git->tag->create('v1.0.0');
- $version = $git->describe->tags('HEAD');
-
- $this->assertEquals('v1.0.0', $version);
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello2');
- $git->add('README.md');
- $git->commit('Fixes README');
- $version = $git->describe->tags('HEAD');
-
- $this->assertStringStartsWith('v1.0.0', $version);
- $this->assertStringEndsNotWith('v1.0.0', $version);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/FetchCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/FetchCommandTest.php
deleted file mode 100644
index f52943099..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/FetchCommandTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class FetchCommandTest extends BaseTestCase
-{
-
- public function testFetch()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- $git->fetch('origin', '+refs/heads/*:refs/remotes/origin/*');
-
- $tags = $git->tag();
- $this->assertContains('v1.0.0', $tags);
- }
-
- public function testFetchAll()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- $git->fetch->all();
-
- $tags = $git->tag();
- $this->assertContains('v1.0.0', $tags);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/MergeCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/MergeCommandTest.php
deleted file mode 100644
index 208461523..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/MergeCommandTest.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class MergeCommandTest extends BaseTestCase
-{
-
- public function testMerge()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('master');
-
- $git->checkout->create('develop');
- $filesystem->dumpFile($this->directory . '/test.txt', 'bar');
- $git->add('test.txt');
- $git->commit('develop');
-
- $git->checkout('master');
-
- $this->assertEquals('foo', file_get_contents($this->directory . '/test.txt'));
-
- $git->merge('develop');
-
- $this->assertEquals('bar', file_get_contents($this->directory . '/test.txt'));
- }
-
- /**
- * @expectedException \PHPGit\Exception\GitException
- */
- public function testMergeFail()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- // branch:master
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('master');
-
- // branch:develop
- $git->checkout->create('develop');
- $filesystem->dumpFile($this->directory . '/test.txt', 'bar');
- $git->add('test.txt');
- $git->commit('develop');
-
- // branch:master
- $git->checkout('master');
- $filesystem->dumpFile($this->directory . '/test.txt', 'baz');
- $git->merge('develop');
- }
-
- public function testMergeAbort()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- // branch:master
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('master');
-
- // branch:develop
- $git->checkout->create('develop');
- $filesystem->dumpFile($this->directory . '/test.txt', 'bar');
- $git->add('test.txt');
- $git->commit('develop');
-
- // branch:master
- $git->checkout('master');
- $filesystem->dumpFile($this->directory . '/test.txt', 'baz');
- $git->add('test.txt');
- $git->commit('master');
-
- try {
- $git->merge('develop');
- $this->fail('$git->merge("develop") should fail');
- } catch (Exception $e) {
- }
-
- $git->merge->abort();
-
- $this->assertEquals('baz', file_get_contents($this->directory . '/test.txt'));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/MvCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/MvCommandTest.php
deleted file mode 100644
index dd5f46c55..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/MvCommandTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class MvCommandTest extends BaseTestCase
-{
-
- public function testMv()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('Initial commit');
- $git->mv('test.txt', 'test2.txt');
-
- $this->assertFileExists($this->directory . '/test2.txt');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/PullCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/PullCommandTest.php
deleted file mode 100644
index 89dec75a9..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/PullCommandTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class PullCommandTest extends BaseTestCase
-{
-
- public function testPull()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- $git->pull('origin', 'master');
-
- $this->assertFileExists($this->directory . '/README.md');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/PushCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/PushCommandTest.php
deleted file mode 100644
index 11424cebc..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/PushCommandTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class PushCommandTest extends BaseTestCase
-{
-
- public function testPush()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory, array('shared' => true, 'bare' => true));
-
- $git->clone('file://' . realpath($this->directory), $this->directory.'2');
- $git->setRepository($this->directory.'2');
-
- $filesystem->dumpFile($this->directory.'2/test.txt', 'foobar');
- $git->add('test.txt');
- $git->commit('test');
- $git->push('origin', 'master');
-
- $git->clone('file://' . realpath($this->directory), $this->directory.'3');
-
- $this->assertFileExists($this->directory.'3/test.txt');
-
- $filesystem->remove($this->directory.'2');
- $filesystem->remove($this->directory.'3');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/RebaseCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/RebaseCommandTest.php
deleted file mode 100644
index af7e87a19..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/RebaseCommandTest.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class RebaseCommandTest extends BaseTestCase
-{
-
- public function testRebase()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', '123');
- $git->add('test.txt');
- $git->commit('initial commit');
-
- $git->checkout->create('next');
- $filesystem->dumpFile($this->directory . '/test2.txt', '123');
- $git->add('test2.txt');
- $git->commit('test');
-
- $git->checkout('master');
- $git->rebase('next', 'master');
-
- $this->assertFileExists($this->directory. '/test2.txt');
- }
-
- public function testRebaseOnto()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/test.txt', '123');
- $git->add('test.txt');
- $git->commit('initial commit');
-
- $git->checkout->create('next');
- $filesystem->dumpFile($this->directory . '/test2.txt', '123');
- $git->add('test2.txt');
- $git->commit('test');
-
- $git->checkout->create('topic', 'next');
- $filesystem->dumpFile($this->directory . '/test3.txt', '123');
- $git->add('test3.txt');
- $git->commit('test');
-
- $git->rebase('next', null, array('onto' => 'master'));
- $this->assertFileNotExists($this->directory . '/test2.txt');
- }
-
- public function testRebaseContinue()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('initial commit');
-
- $git->checkout->create('next');
- $filesystem->dumpFile($this->directory . '/test.txt', 'bar');
- $git->add('test.txt');
- $git->commit('next commit');
-
- $git->checkout('master');
- $filesystem->dumpFile($this->directory . '/test.txt', 'baz');
- $git->add('test.txt');
- $git->commit('master commit');
-
- try {
- $git->rebase('next');
- $this->fail('GitException should be thrown');
- } catch (\PHPGit\Exception\GitException $e) {
- }
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foobar');
- $git->add('test.txt');
- $git->rebase->continues();
- }
-
- public function testRebaseAbort()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('initial commit');
-
- $git->checkout->create('next');
- $filesystem->dumpFile($this->directory . '/test.txt', 'bar');
- $git->add('test.txt');
- $git->commit('next commit');
-
- $git->checkout('master');
- $filesystem->dumpFile($this->directory . '/test.txt', 'baz');
- $git->add('test.txt');
- $git->commit('master commit');
-
- try {
- $git->rebase('next');
- $this->fail('GitException should be thrown');
- } catch (\PHPGit\Exception\GitException $e) {
- }
-
- $git->rebase->abort();
- }
-
- public function testRebaseSkip()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', 'foo');
- $git->add('test.txt');
- $git->commit('initial commit');
-
- $git->checkout->create('next');
- $filesystem->dumpFile($this->directory . '/test.txt', 'bar');
- $git->add('test.txt');
- $git->commit('next commit');
-
- $git->checkout('master');
- $filesystem->dumpFile($this->directory . '/test.txt', 'baz');
- $git->add('test.txt');
- $git->commit('master commit');
-
- try {
- $git->rebase('next');
- $this->fail('GitException should be thrown');
- } catch (\PHPGit\Exception\GitException $e) {
- }
-
- $git->rebase->skip();
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/Remote/SetBranchesCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/Remote/SetBranchesCommandTest.php
deleted file mode 100644
index 4f428f832..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/Remote/SetBranchesCommandTest.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-require_once __DIR__ . '/../../BaseTestCase.php';
-
-class SetBranchesCommandTest extends BaseTestCase
-{
-
- public function testSetBranches()
- {
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $git->remote->branches('origin', array('master'));
- }
-
- public function testSetBranchesAdd()
- {
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $git->remote->branches->add('origin', array('gh-pages'));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/Remote/SetHeadCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/Remote/SetHeadCommandTest.php
deleted file mode 100644
index 679c2976f..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/Remote/SetHeadCommandTest.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-require_once __DIR__ . '/../../BaseTestCase.php';
-
-class SetHeadCommandTest extends BaseTestCase
-{
-
- public function testSetHead()
- {
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $before = $git->branch(array('all' => true));
-
- $git->remote->head('origin', 'master');
-
- $after = $git->branch(array('all' => true));
-
- $this->assertEquals($before, $after);
- }
-
- public function testSetHeadDelete()
- {
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $before = $git->branch(array('all' => true));
-
- $git->remote->head->delete('origin');
-
- $after = $git->branch(array('all' => true));
-
- $this->assertNotEquals($before, $after);
- }
-
- public function testSetHeadRemote()
- {
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $before = $git->branch(array('all' => true));
-
- $git->remote->head->delete('origin');
- $git->remote->head->remote('origin');
-
- $after = $git->branch(array('all' => true));
-
- $this->assertEquals($before, $after);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/Remote/SetUrlCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/Remote/SetUrlCommandTest.php
deleted file mode 100644
index b70b67d40..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/Remote/SetUrlCommandTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-require_once __DIR__ . '/../../BaseTestCase.php';
-
-class SetUrlCommandTest extends BaseTestCase
-{
-
- public function testSetUrl()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'http://example.com/test.git');
- $git->remote->url('origin', 'https://github.com/kzykhys/Text.git', 'http://example.com/test.git');
-
- $remotes = $git->remote();
-
- $this->assertEquals('https://github.com/kzykhys/Text.git', $remotes['origin']['fetch']);
- }
-
- public function testSetUrlAdd()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'http://example.com/test.git');
- $git->remote->url->add('origin', 'https://github.com/kzykhys/Text.git');
- }
-
- public function testSetUrlDelete()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'http://example.com/test.git');
- $git->remote->url->add('origin', 'https://github.com/kzykhys/Text.git');
- $git->remote->url->delete('origin', 'https://github.com');
-
- $remotes = $git->remote();
-
- $this->assertEquals('http://example.com/test.git', $remotes['origin']['fetch']);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/RemoteCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/RemoteCommandTest.php
deleted file mode 100644
index 78aa81309..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/RemoteCommandTest.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class RemoteCommandTest extends BaseTestCase
-{
-
- public function testRemote()
- {
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $remotes = $git->remote();
-
- $this->assertEquals(array(
- 'origin' => array(
- 'fetch' => 'https://github.com/kzykhys/Text.git',
- 'push' => 'https://github.com/kzykhys/Text.git'
- )
- ), $remotes);
- }
-
- public function testRemoteAdd()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-
- $remotes = $git->remote();
-
- $this->assertEquals(array(
- 'origin' => array(
- 'fetch' => 'https://github.com/kzykhys/Text.git',
- 'push' => 'https://github.com/kzykhys/Text.git'
- )
- ), $remotes);
- }
-
- public function testRemoteRename()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- $git->remote->rename('origin', 'upstream');
-
- $remotes = $git->remote();
- $this->assertEquals(array(
- 'upstream' => array(
- 'fetch' => 'https://github.com/kzykhys/Text.git',
- 'push' => 'https://github.com/kzykhys/Text.git'
- )
- ), $remotes);
- }
-
- public function testRemoteRm()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- $git->remote->rm('origin');
-
- $remotes = $git->remote();
- $this->assertEquals(array(), $remotes);
- }
-
- public function testRemoteShow()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
-
- $this->assertNotEmpty($git->remote->show('origin'));
- }
-
- public function testRemotePrune()
- {
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->remote->add('origin', 'https://github.com/kzykhys/Text.git');
- $git->remote->prune('origin');
- }
-
- /**
- * @expectedException \BadMethodCallException
- */
- public function testBadMethodCall()
- {
- $git = new Git();
- $git->remote->foo();
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/ResetCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/ResetCommandTest.php
deleted file mode 100644
index 777e48512..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/ResetCommandTest.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-
-class ResetCommandTest extends BaseTestCase
-{
-
- public function testReset()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('README.md');
-
- $git->reset('README.md', 'HEAD');
- }
-
- public function testResetSoft()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
-
- $git->reset->soft();
- }
-
- public function testResetMixed()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
-
- $git->reset->mixed();
- }
-
- public function testResetHard()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
-
- $git->reset->hard('HEAD');
- }
-
- public function testResetMerge()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
-
- $git->reset->merge();
- }
-
- public function testResetKeep()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
-
- $git->reset->keep();
- }
-
- /**
- * @expectedException InvalidArgumentException
- */
- public function testResetInvalidMode()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
-
- $git->reset->mode('foo');
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/RmCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/RmCommandTest.php
deleted file mode 100644
index 34996cc12..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/RmCommandTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class RmCommandTest extends BaseTestCase
-{
-
- public function testRm()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $filesystem->dumpFile($this->directory . '/bin/test.php', 'foo');
- $git->add(array('README.md', 'bin/test.php'));
- $git->commit('Initial commit');
-
- $git->rm('README.md');
- $git->rm('bin', array('recursive' => true));
-
- $this->assertFileNotExists($this->directory . '/README.md');
- }
-
- public function testRmCached()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/README.md', 'foo');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $git->rm->cached('README.md');
- $git->commit('Delete README.md');
-
- $this->assertFileExists($this->directory . '/README.md');
-
- $tree = $git->tree();
- $this->assertEquals(array(), $tree);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/ShortlogCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/ShortlogCommandTest.php
deleted file mode 100644
index 48967cab1..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/ShortlogCommandTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class ShortlogCommandTest extends BaseTestCase
-{
-
- public function testShortlog()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->config->set('user.name', 'Name One');
- $git->config->set('user.email', 'one@example.com');
- $filesystem->dumpFile($this->directory . '/test.txt', '');
- $git->add('test.txt');
- $git->commit('1');
- $filesystem->dumpFile($this->directory . '/test2.txt', '');
- $git->add('test2.txt');
- $git->commit('2');
-
- $git->config->set('user.name', 'Name Two');
- $git->config->set('user.email', 'two@example.com');
- $filesystem->dumpFile($this->directory . '/test3.txt', '');
- $git->add('test3.txt');
- $git->commit('3');
-
- $shortlog = $git->shortlog();
-
- $this->assertCount(2, $shortlog);
- $this->assertCount(2, $shortlog['Name One <one@example.com>']);
- $this->assertCount(1, $shortlog['Name Two <two@example.com>']);
- $this->assertEquals('1', $shortlog['Name One <one@example.com>'][0]['subject']);
- }
-
- public function testShortlogSummary()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $git->config->set('user.name', 'Name One');
- $git->config->set('user.email', 'one@example.com');
- $filesystem->dumpFile($this->directory . '/test.txt', '');
- $git->add('test.txt');
- $git->commit('1');
- $filesystem->dumpFile($this->directory . '/test2.txt', '');
- $git->add('test2.txt');
- $git->commit('2');
-
- $git->config->set('user.name', 'Name Two');
- $git->config->set('user.email', 'two@example.com');
- $filesystem->dumpFile($this->directory . '/test3.txt', '');
- $git->add('test3.txt');
- $git->commit('3');
-
- $summary = $git->shortlog->summary();
-
- $this->assertEquals(array(
- 'Name One <one@example.com>' => 2,
- 'Name Two <two@example.com>' => 1
- ), $summary);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/ShowCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/ShowCommandTest.php
deleted file mode 100644
index 25b22fe4f..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/ShowCommandTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class ShowCommandTest extends BaseTestCase
-{
-
- public function testShow()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/README.md', 'foobar');
- $git->add('README.md');
- $git->commit('Initial commit');
-
- $git->show('master', array('format' => 'oneline'));
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/StashCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/StashCommandTest.php
deleted file mode 100644
index bb87e48ea..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/StashCommandTest.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class StashCommandTest extends BaseTestCase
-{
-
- public function testStash()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash();
-
- $this->assertEquals('hello', file_get_contents($this->directory.'/README.md'));
- }
-
- public function testStashSave()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash->save('stash test');
-
- $this->assertEquals('hello', file_get_contents($this->directory.'/README.md'));
- }
-
- public function testStashList()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash();
-
- $stashes = $git->stash->lists();
-
- $this->assertCount(1, $stashes);
- $this->assertEquals('master', $stashes[0]['branch']);
- $this->assertStringEndsWith('Initial commit', $stashes[0]['message']);
- }
-
- public function testStashShow()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash();
- $git->stash->show('stash@{0}');
- }
-
- public function testStashDrop()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash();
- $git->stash->drop();
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash();
- $git->stash->drop('stash@{0}');
-
- $this->assertCount(0, $git->stash->lists());
- }
-
- public function testStashPop()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash->save('stash#1');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'bar');
- $git->stash->save('stash#2');
- $git->stash->pop('stash@{1}');
-
- $this->assertEquals('hi!', file_get_contents($this->directory.'/README.md'));
- $this->assertCount(1, $git->stash->lists());
- }
-
- public function testStashApply()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash->save('stash#1');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'bar');
- $git->stash->save('stash#2');
- $git->stash->apply('stash@{1}');
-
- $this->assertEquals('hi!', file_get_contents($this->directory.'/README.md'));
- $this->assertCount(2, $git->stash->lists());
- }
-
- public function testStashBranch()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash();
-
- $git->stash->branch('dev', 'stash@{0}');
- $status = $git->status();
-
- $this->assertEquals('dev', $status['branch']);
- $this->assertEquals('hi!', file_get_contents($this->directory.'/README.md'));
- }
-
- public function testStashClear()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $git->stash();
- $git->stash->clear();
-
- $this->assertCount(0, $git->stash->lists());
- }
-
- public function testStashCreate()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
-
- $filesystem->dumpFile($this->directory . '/README.md', 'hi!');
- $object = $git->stash->create();
-
- $this->assertNotEmpty($object);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/StatusCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/StatusCommandTest.php
deleted file mode 100644
index ad04a74c0..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/StatusCommandTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-use PHPGit\Command\StatusCommand;
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class StatusCommandTest extends BaseTestCase
-{
-
- public function testStatus()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/item1.txt', '1');
- $filesystem->dumpFile($this->directory . '/item2.txt', '2');
- $filesystem->dumpFile($this->directory . '/item3.txt', '3');
-
- $git->add('item1.txt');
- $git->add('item2.txt');
-
- $filesystem->dumpFile($this->directory . '/item1.txt', '1-1');
-
- $status = $git->status();
-
- $this->assertEquals(array(
- 'branch' => 'master',
- 'changes' => array(
- array('file' => 'item1.txt', 'index' => StatusCommand::ADDED, 'work_tree' => StatusCommand::MODIFIED),
- array('file' => 'item2.txt', 'index' => StatusCommand::ADDED, 'work_tree' => StatusCommand::UNMODIFIED),
- array('file' => 'item3.txt', 'index' => StatusCommand::UNTRACKED, 'work_tree' => StatusCommand::UNTRACKED),
- )
- ), $status);
- }
-
- public function testDetachedHeadStatus()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/item1.txt', '1');
- $git->add('item1.txt');
- $git->commit('initial commit');
- $logs = $git->log();
- $hash = $logs[0]['hash'];
-
- $git->checkout($hash);
- $status = $git->status();
- $this->assertEquals(null, $status['branch']);
- }
-
- public function testTrackingBranchStatus()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->clone('https://github.com/kzykhys/Text.git', $this->directory);
- $git->setRepository($this->directory);
-
- $filesystem->dumpFile($this->directory . '/test.txt', '1');
- $git->add('test.txt');
- $git->commit('test');
-
- $status = $git->status();
- $this->assertEquals('master', $status['branch']);
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Command/TagCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/TagCommandTest.php
deleted file mode 100644
index 5715ba92e..000000000
--- a/library/kzykhys/git/test/PHPGit/Command/TagCommandTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-use PHPGit\Git;
-use Symfony\Component\Filesystem\Filesystem;
-
-require_once __DIR__ . '/../BaseTestCase.php';
-
-class TagCommandTest extends BaseTestCase
-{
-
- public function testTagDelete()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
- $git->tag->create('v1.0.0');
- $git->tag->delete('v1.0.0');
- $this->assertCount(0, $git->tag());
- }
-
- /**
- * @expectedException \PHPGit\Exception\GitException
- */
- public function testTagVerify()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
- $git->tag->create('v1.0.0');
- $git->tag->verify('v1.0.0');
- }
-
- public function testCreateTagFromCommit()
- {
- $filesystem = new Filesystem();
-
- $git = new Git();
- $git->init($this->directory);
- $git->setRepository($this->directory);
- $filesystem->dumpFile($this->directory . '/README.md', 'hello');
- $git->add('.');
- $git->commit('Initial commit');
- $log = $git->log(null, null, array('limit' => 1));
- $git->tag->create('v1.0.0', $log[0]['hash']);
- $this->assertCount(1, $git->tag());
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/Exception/GitExceptionTest.php b/library/kzykhys/git/test/PHPGit/Exception/GitExceptionTest.php
deleted file mode 100644
index 154d6b906..000000000
--- a/library/kzykhys/git/test/PHPGit/Exception/GitExceptionTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-use PHPGit\Exception\GitException;
-use PHPGit\Git;
-
-class GitExceptionTest extends PHPUnit_Framework_TestCase
-{
-
- public function testException()
- {
- $git = new Git();
- $git->setRepository(sys_get_temp_dir());
- try {
- $git->status();
- $this->fail('Previous operation should fail');
- } catch (GitException $e) {
- $command = $e->getCommandLine();
- $command = str_replace(array('"', "'"), '', $command);
- $this->assertStringEndsWith('status --porcelain -s -b --null', $command);
- }
- }
-
-} \ No newline at end of file
diff --git a/library/kzykhys/git/test/PHPGit/GitTest.php b/library/kzykhys/git/test/PHPGit/GitTest.php
deleted file mode 100644
index c9aceeb13..000000000
--- a/library/kzykhys/git/test/PHPGit/GitTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-use PHPGit\Git;
-
-class GitTest extends PHPUnit_Framework_TestCase
-{
-
- public function testGetVersion()
- {
- $git = new Git();
- $this->assertNotEmpty($git->getVersion());
- }
-
- /**
- * @expectedException \PHPGit\Exception\GitException
- */
- public function testInvalidGitBinary()
- {
- $git = new Git();
- $git->setBin('/foo/bar');
- $git->getVersion();
- }
-
- /**
- * @expectedException \BadMethodCallException
- */
- public function testBadMethodCall()
- {
- $git = new Git();
- $git->foo();
- }
-
-} \ No newline at end of file
diff --git a/library/sticky-kit/sticky-kit.js b/library/sticky-kit/sticky-kit.js
deleted file mode 100644
index 00b1ea2ff..000000000
--- a/library/sticky-kit/sticky-kit.js
+++ /dev/null
@@ -1,265 +0,0 @@
-// Generated by CoffeeScript 1.10.0
-
-/**
-@license Sticky-kit v1.1.3 | MIT | Leaf Corcoran 2015 | http://leafo.net
- */
-
-(function() {
- var $, win;
-
- $ = window.jQuery;
-
- win = $(window);
-
- $.fn.stick_in_parent = function(opts) {
- var doc, elm, enable_bottoming, fn, i, inner_scrolling, len, manual_spacer, offset_top, outer_width, parent_selector, recalc_every, sticky_class;
- if (opts == null) {
- opts = {};
- }
- sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming;
- if (offset_top == null) {
- offset_top = 0;
- }
- if (parent_selector == null) {
- parent_selector = void 0;
- }
- if (inner_scrolling == null) {
- inner_scrolling = true;
- }
- if (sticky_class == null) {
- sticky_class = "is_stuck";
- }
- doc = $(document);
- if (enable_bottoming == null) {
- enable_bottoming = true;
- }
- outer_width = function(el) {
- var _el, computed, w;
- if (window.getComputedStyle) {
- _el = el[0];
- computed = window.getComputedStyle(el[0]);
- w = parseFloat(computed.getPropertyValue("width")) + parseFloat(computed.getPropertyValue("margin-left")) + parseFloat(computed.getPropertyValue("margin-right"));
- if (computed.getPropertyValue("box-sizing") !== "border-box") {
- w += parseFloat(computed.getPropertyValue("border-left-width")) + parseFloat(computed.getPropertyValue("border-right-width")) + parseFloat(computed.getPropertyValue("padding-left")) + parseFloat(computed.getPropertyValue("padding-right"));
- }
- return w;
- } else {
- return el.outerWidth(true);
- }
- };
- fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) {
- var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick;
- if (elm.data("sticky_kit")) {
- return;
- }
- elm.data("sticky_kit", true);
- last_scroll_height = doc.height();
- parent = elm.parent();
- if (parent_selector != null) {
- parent = parent.closest(parent_selector);
- }
- if (!parent.length) {
- throw "failed to find stick parent";
- }
- fixed = false;
- bottomed = false;
- spacer = manual_spacer != null ? manual_spacer && elm.closest(manual_spacer) : $("<div />");
- if (spacer) {
- spacer.css('position', elm.css('position'));
- }
- recalc = function() {
- var border_top, padding_top, restore;
- if (detached) {
- return;
- }
- last_scroll_height = doc.height();
- border_top = parseInt(parent.css("border-top-width"), 10);
- padding_top = parseInt(parent.css("padding-top"), 10);
- padding_bottom = parseInt(parent.css("padding-bottom"), 10);
- parent_top = parent.offset().top + border_top + padding_top;
- parent_height = parent.height();
- if (fixed) {
- fixed = false;
- bottomed = false;
- if (manual_spacer == null) {
- elm.insertAfter(spacer);
- spacer.detach();
- }
- elm.css({
- position: "",
- top: "",
- width: "",
- bottom: ""
- }).removeClass(sticky_class);
- restore = true;
- }
- top = elm.offset().top - (parseInt(elm.css("margin-top"), 10) || 0) - offset_top;
- height = elm.outerHeight(true);
- el_float = elm.css("float");
- if (spacer) {
- spacer.css({
- width: outer_width(elm),
- height: height,
- display: elm.css("display"),
- "vertical-align": elm.css("vertical-align"),
- "float": el_float
- });
- }
- if (restore) {
- return tick();
- }
- };
- recalc();
- if (height === parent_height) {
- return;
- }
- last_pos = void 0;
- offset = offset_top;
- recalc_counter = recalc_every;
- tick = function() {
- var css, delta, recalced, scroll, will_bottom, win_height;
- if (detached) {
- return;
- }
- recalced = false;
- if (recalc_counter != null) {
- recalc_counter -= 1;
- if (recalc_counter <= 0) {
- recalc_counter = recalc_every;
- recalc();
- recalced = true;
- }
- }
- if (!recalced && doc.height() !== last_scroll_height) {
- recalc();
- recalced = true;
- }
- scroll = win.scrollTop();
- if (last_pos != null) {
- delta = scroll - last_pos;
- }
- last_pos = scroll;
- if (fixed) {
- if (enable_bottoming) {
- will_bottom = scroll + height + offset > parent_height + parent_top;
- if (bottomed && !will_bottom) {
- bottomed = false;
- elm.css({
- position: "fixed",
- bottom: "",
- top: offset
- }).trigger("sticky_kit:unbottom");
- }
- }
- if (scroll < top) {
- fixed = false;
- offset = offset_top;
- if (manual_spacer == null) {
- if (el_float === "left" || el_float === "right") {
- elm.insertAfter(spacer);
- }
- spacer.detach();
- }
- css = {
- position: "",
- width: "",
- top: ""
- };
- elm.css(css).removeClass(sticky_class).trigger("sticky_kit:unstick");
- }
- if (inner_scrolling) {
- win_height = win.height();
- if (height + offset_top > win_height) {
- if (!bottomed) {
- offset -= delta;
- offset = Math.max(win_height - height, offset);
- offset = Math.min(offset_top, offset);
- if (fixed) {
- elm.css({
- top: offset + "px"
- });
- }
- }
- }
- }
- } else {
- if (scroll > top) {
- fixed = true;
- css = {
- position: "fixed",
- top: offset
- };
- css.width = elm.css("box-sizing") === "border-box" ? elm.outerWidth() + "px" : elm.width() + "px";
- elm.css(css).addClass(sticky_class);
- if (manual_spacer == null) {
- elm.after(spacer);
- if (el_float === "left" || el_float === "right") {
- spacer.append(elm);
- }
- }
- elm.trigger("sticky_kit:stick");
- }
- }
- if (fixed && enable_bottoming) {
- if (will_bottom == null) {
- will_bottom = scroll + height + offset > parent_height + parent_top;
- }
- if (!bottomed && will_bottom) {
- bottomed = true;
- if (parent.css("position") === "static") {
- parent.css({
- position: "relative"
- });
- }
- return elm.css({
- position: "absolute",
- bottom: padding_bottom,
- top: "auto"
- }).trigger("sticky_kit:bottom");
- }
- }
- };
- recalc_and_tick = function() {
- recalc();
- return tick();
- };
- detach = function() {
- detached = true;
- win.off("touchmove", tick);
- win.off("scroll", tick);
- win.off("resize", recalc_and_tick);
- $(document.body).off("sticky_kit:recalc", recalc_and_tick);
- elm.off("sticky_kit:detach", detach);
- elm.removeData("sticky_kit");
- elm.css({
- position: "",
- bottom: "",
- top: "",
- width: ""
- });
- parent.position("position", "");
- if (fixed) {
- if (manual_spacer == null) {
- if (el_float === "left" || el_float === "right") {
- elm.insertAfter(spacer);
- }
- spacer.remove();
- }
- return elm.removeClass(sticky_class);
- }
- };
- win.on("touchmove", tick);
- win.on("scroll", tick);
- win.on("resize", recalc_and_tick);
- $(document.body).on("sticky_kit:recalc", recalc_and_tick);
- elm.on("sticky_kit:detach", detach);
- return setTimeout(tick, 0);
- };
- for (i = 0, len = this.length; i < len; i++) {
- elm = this[i];
- fn($(elm));
- }
- return this;
- };
-
-}).call(this);
diff --git a/library/sticky-kit/sticky-kit.min.js b/library/sticky-kit/sticky-kit.min.js
deleted file mode 100644
index c4d7f2e3b..000000000
--- a/library/sticky-kit/sticky-kit.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Sticky-kit v1.1.3 | MIT | Leaf Corcoran 2015 | http://leafo.net
-*/
-(function(){var c,f;c=window.jQuery;f=c(window);c.fn.stick_in_parent=function(b){var A,w,J,n,B,K,p,q,L,k,E,t;null==b&&(b={});t=b.sticky_class;B=b.inner_scrolling;E=b.recalc_every;k=b.parent;q=b.offset_top;p=b.spacer;w=b.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=c(document);null==w&&(w=!0);L=function(a){var b;return window.getComputedStyle?(a=window.getComputedStyle(a[0]),b=parseFloat(a.getPropertyValue("width"))+parseFloat(a.getPropertyValue("margin-left"))+
-parseFloat(a.getPropertyValue("margin-right")),"border-box"!==a.getPropertyValue("box-sizing")&&(b+=parseFloat(a.getPropertyValue("border-left-width"))+parseFloat(a.getPropertyValue("border-right-width"))+parseFloat(a.getPropertyValue("padding-left"))+parseFloat(a.getPropertyValue("padding-right"))),b):a.outerWidth(!0)};J=function(a,b,n,C,F,u,r,G){var v,H,m,D,I,d,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k));if(!g.length)throw"failed to find stick parent";
-v=m=!1;(h=null!=p?p&&a.closest(p):c("<div />"))&&h.css("position",a.css("position"));x=function(){var d,f,e;if(!G&&(I=A.height(),d=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),b=parseInt(g.css("padding-bottom"),10),n=g.offset().top+d+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q,u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:L(a),
-height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,d=q,z=E,l=function(){var c,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+d>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:d}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,d=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.detach()),c={position:"",width:"",top:""},a.css(c).removeClass(t).trigger("sticky_kit:unstick")),
-B&&(c=f.height(),u+q>c&&!v&&(d-=l,d=Math.max(c-u,d),d=Math.min(q,d),m&&a.css({top:d+"px"})))):e>F&&(m=!0,c={position:"fixed",top:d},c.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(c).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+d>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}),a.css({position:"absolute",bottom:b,top:"auto"}).trigger("sticky_kit:bottom")},
-y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);c(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize",y),c(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,
-0)}};n=0;for(K=this.length;n<K;n++)b=this[n],J(c(b));return this}}).call(this);
diff --git a/library/symfony/options-resolver/CHANGELOG.md b/library/symfony/options-resolver/CHANGELOG.md
deleted file mode 100644
index 5f6d15b2c..000000000
--- a/library/symfony/options-resolver/CHANGELOG.md
+++ /dev/null
@@ -1,46 +0,0 @@
-CHANGELOG
-=========
-
-2.6.0
------
-
- * deprecated OptionsResolverInterface
- * [BC BREAK] removed "array" type hint from OptionsResolverInterface methods
- setRequired(), setAllowedValues(), addAllowedValues(), setAllowedTypes() and
- addAllowedTypes()
- * added OptionsResolver::setDefault()
- * added OptionsResolver::hasDefault()
- * added OptionsResolver::setNormalizer()
- * added OptionsResolver::isRequired()
- * added OptionsResolver::getRequiredOptions()
- * added OptionsResolver::isMissing()
- * added OptionsResolver::getMissingOptions()
- * added OptionsResolver::setDefined()
- * added OptionsResolver::isDefined()
- * added OptionsResolver::getDefinedOptions()
- * added OptionsResolver::remove()
- * added OptionsResolver::clear()
- * deprecated OptionsResolver::replaceDefaults()
- * deprecated OptionsResolver::setOptional() in favor of setDefined()
- * deprecated OptionsResolver::isKnown() in favor of isDefined()
- * [BC BREAK] OptionsResolver::isRequired() returns true now if a required
- option has a default value set
- * [BC BREAK] merged Options into OptionsResolver and turned Options into an
- interface
- * deprecated Options::overload() (now in OptionsResolver)
- * deprecated Options::set() (now in OptionsResolver)
- * deprecated Options::get() (now in OptionsResolver)
- * deprecated Options::has() (now in OptionsResolver)
- * deprecated Options::replace() (now in OptionsResolver)
- * [BC BREAK] Options::get() (now in OptionsResolver) can only be used within
- lazy option/normalizer closures now
- * [BC BREAK] removed Traversable interface from Options since using within
- lazy option/normalizer closures resulted in exceptions
- * [BC BREAK] removed Options::all() since using within lazy option/normalizer
- closures resulted in exceptions
- * [BC BREAK] OptionDefinitionException now extends LogicException instead of
- RuntimeException
- * [BC BREAK] normalizers are not executed anymore for unset options
- * normalizers are executed after validating the options now
- * [BC BREAK] an UndefinedOptionsException is now thrown instead of an
- InvalidOptionsException when non-existing options are passed
diff --git a/library/symfony/options-resolver/Exception/AccessException.php b/library/symfony/options-resolver/Exception/AccessException.php
deleted file mode 100644
index c12b68064..000000000
--- a/library/symfony/options-resolver/Exception/AccessException.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Thrown when trying to read an option outside of or write it inside of
- * {@link \Symfony\Component\OptionsResolver\Options::resolve()}.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class AccessException extends \LogicException implements ExceptionInterface
-{
-}
diff --git a/library/symfony/options-resolver/Exception/ExceptionInterface.php b/library/symfony/options-resolver/Exception/ExceptionInterface.php
deleted file mode 100644
index b62bb51d4..000000000
--- a/library/symfony/options-resolver/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Marker interface for all exceptions thrown by the OptionsResolver component.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-interface ExceptionInterface
-{
-}
diff --git a/library/symfony/options-resolver/Exception/InvalidArgumentException.php b/library/symfony/options-resolver/Exception/InvalidArgumentException.php
deleted file mode 100644
index 6d421d68b..000000000
--- a/library/symfony/options-resolver/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Thrown when an argument is invalid.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/library/symfony/options-resolver/Exception/InvalidOptionsException.php b/library/symfony/options-resolver/Exception/InvalidOptionsException.php
deleted file mode 100644
index 6fd4f125f..000000000
--- a/library/symfony/options-resolver/Exception/InvalidOptionsException.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Thrown when the value of an option does not match its validation rules.
- *
- * You should make sure a valid value is passed to the option.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class InvalidOptionsException extends InvalidArgumentException
-{
-}
diff --git a/library/symfony/options-resolver/Exception/MissingOptionsException.php b/library/symfony/options-resolver/Exception/MissingOptionsException.php
deleted file mode 100644
index faa487f16..000000000
--- a/library/symfony/options-resolver/Exception/MissingOptionsException.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Exception thrown when a required option is missing.
- *
- * Add the option to the passed options array.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class MissingOptionsException extends InvalidArgumentException
-{
-}
diff --git a/library/symfony/options-resolver/Exception/NoSuchOptionException.php b/library/symfony/options-resolver/Exception/NoSuchOptionException.php
deleted file mode 100644
index 4c3280f4c..000000000
--- a/library/symfony/options-resolver/Exception/NoSuchOptionException.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Thrown when trying to read an option that has no value set.
- *
- * When accessing optional options from within a lazy option or normalizer you should first
- * check whether the optional option is set. You can do this with `isset($options['optional'])`.
- * In contrast to the {@link UndefinedOptionsException}, this is a runtime exception that can
- * occur when evaluating lazy options.
- *
- * @author Tobias Schultze <http://tobion.de>
- */
-class NoSuchOptionException extends \OutOfBoundsException implements ExceptionInterface
-{
-}
diff --git a/library/symfony/options-resolver/Exception/OptionDefinitionException.php b/library/symfony/options-resolver/Exception/OptionDefinitionException.php
deleted file mode 100644
index e8e339d44..000000000
--- a/library/symfony/options-resolver/Exception/OptionDefinitionException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Thrown when two lazy options have a cyclic dependency.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class OptionDefinitionException extends \LogicException implements ExceptionInterface
-{
-}
diff --git a/library/symfony/options-resolver/Exception/UndefinedOptionsException.php b/library/symfony/options-resolver/Exception/UndefinedOptionsException.php
deleted file mode 100644
index 6ca3fce47..000000000
--- a/library/symfony/options-resolver/Exception/UndefinedOptionsException.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Exception;
-
-/**
- * Exception thrown when an undefined option is passed.
- *
- * You should remove the options in question from your code or define them
- * beforehand.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- */
-class UndefinedOptionsException extends InvalidArgumentException
-{
-}
diff --git a/library/symfony/options-resolver/Options.php b/library/symfony/options-resolver/Options.php
deleted file mode 100644
index d444ec423..000000000
--- a/library/symfony/options-resolver/Options.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver;
-
-/**
- * Contains resolved option values.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @author Tobias Schultze <http://tobion.de>
- */
-interface Options extends \ArrayAccess, \Countable
-{
-}
diff --git a/library/symfony/options-resolver/OptionsResolver.php b/library/symfony/options-resolver/OptionsResolver.php
deleted file mode 100644
index e0578af71..000000000
--- a/library/symfony/options-resolver/OptionsResolver.php
+++ /dev/null
@@ -1,1218 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver;
-
-use Symfony\Component\OptionsResolver\Exception\AccessException;
-use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
-use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
-use Symfony\Component\OptionsResolver\Exception\NoSuchOptionException;
-use Symfony\Component\OptionsResolver\Exception\OptionDefinitionException;
-use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException;
-
-/**
- * Validates options and merges them with default values.
- *
- * @author Bernhard Schussek <bschussek@gmail.com>
- * @author Tobias Schultze <http://tobion.de>
- */
-class OptionsResolver implements Options, OptionsResolverInterface
-{
- /**
- * The fully qualified name of the {@link Options} interface.
- *
- * @internal
- */
- const OPTIONS_INTERFACE = 'Symfony\\Component\\OptionsResolver\\Options';
-
- /**
- * The names of all defined options.
- *
- * @var array
- */
- private $defined = array();
-
- /**
- * The default option values.
- *
- * @var array
- */
- private $defaults = array();
-
- /**
- * The names of required options.
- *
- * @var array
- */
- private $required = array();
-
- /**
- * The resolved option values.
- *
- * @var array
- */
- private $resolved = array();
-
- /**
- * A list of normalizer closures.
- *
- * @var \Closure[]
- */
- private $normalizers = array();
-
- /**
- * A list of accepted values for each option.
- *
- * @var array
- */
- private $allowedValues = array();
-
- /**
- * A list of accepted types for each option.
- *
- * @var array
- */
- private $allowedTypes = array();
-
- /**
- * A list of closures for evaluating lazy options.
- *
- * @var array
- */
- private $lazy = array();
-
- /**
- * A list of lazy options whose closure is currently being called.
- *
- * This list helps detecting circular dependencies between lazy options.
- *
- * @var array
- */
- private $calling = array();
-
- /**
- * Whether the instance is locked for reading.
- *
- * Once locked, the options cannot be changed anymore. This is
- * necessary in order to avoid inconsistencies during the resolving
- * process. If any option is changed after being read, all evaluated
- * lazy options that depend on this option would become invalid.
- *
- * @var bool
- */
- private $locked = false;
-
- private static $typeAliases = array(
- 'boolean' => 'bool',
- 'integer' => 'int',
- 'double' => 'float',
- );
-
- /**
- * Sets the default value of a given option.
- *
- * If the default value should be set based on other options, you can pass
- * a closure with the following signature:
- *
- * function (Options $options) {
- * // ...
- * }
- *
- * The closure will be evaluated when {@link resolve()} is called. The
- * closure has access to the resolved values of other options through the
- * passed {@link Options} instance:
- *
- * function (Options $options) {
- * if (isset($options['port'])) {
- * // ...
- * }
- * }
- *
- * If you want to access the previously set default value, add a second
- * argument to the closure's signature:
- *
- * $options->setDefault('name', 'Default Name');
- *
- * $options->setDefault('name', function (Options $options, $previousValue) {
- * // 'Default Name' === $previousValue
- * });
- *
- * This is mostly useful if the configuration of the {@link Options} object
- * is spread across different locations of your code, such as base and
- * sub-classes.
- *
- * @param string $option The name of the option
- * @param mixed $value The default value of the option
- *
- * @return OptionsResolver This instance
- *
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function setDefault($option, $value)
- {
- // Setting is not possible once resolving starts, because then lazy
- // options could manipulate the state of the object, leading to
- // inconsistent results.
- if ($this->locked) {
- throw new AccessException('Default values cannot be set from a lazy option or normalizer.');
- }
-
- // If an option is a closure that should be evaluated lazily, store it
- // in the "lazy" property.
- if ($value instanceof \Closure) {
- $reflClosure = new \ReflectionFunction($value);
- $params = $reflClosure->getParameters();
-
- if (isset($params[0]) && null !== ($class = $params[0]->getClass()) && self::OPTIONS_INTERFACE === $class->name) {
- // Initialize the option if no previous value exists
- if (!isset($this->defaults[$option])) {
- $this->defaults[$option] = null;
- }
-
- // Ignore previous lazy options if the closure has no second parameter
- if (!isset($this->lazy[$option]) || !isset($params[1])) {
- $this->lazy[$option] = array();
- }
-
- // Store closure for later evaluation
- $this->lazy[$option][] = $value;
- $this->defined[$option] = true;
-
- // Make sure the option is processed
- unset($this->resolved[$option]);
-
- return $this;
- }
- }
-
- // This option is not lazy anymore
- unset($this->lazy[$option]);
-
- // Yet undefined options can be marked as resolved, because we only need
- // to resolve options with lazy closures, normalizers or validation
- // rules, none of which can exist for undefined options
- // If the option was resolved before, update the resolved value
- if (!isset($this->defined[$option]) || array_key_exists($option, $this->resolved)) {
- $this->resolved[$option] = $value;
- }
-
- $this->defaults[$option] = $value;
- $this->defined[$option] = true;
-
- return $this;
- }
-
- /**
- * Sets a list of default values.
- *
- * @param array $defaults The default values to set
- *
- * @return OptionsResolver This instance
- *
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function setDefaults(array $defaults)
- {
- foreach ($defaults as $option => $value) {
- $this->setDefault($option, $value);
- }
-
- return $this;
- }
-
- /**
- * Returns whether a default value is set for an option.
- *
- * Returns true if {@link setDefault()} was called for this option.
- * An option is also considered set if it was set to null.
- *
- * @param string $option The option name
- *
- * @return bool Whether a default value is set
- */
- public function hasDefault($option)
- {
- return array_key_exists($option, $this->defaults);
- }
-
- /**
- * Marks one or more options as required.
- *
- * @param string|string[] $optionNames One or more option names
- *
- * @return OptionsResolver This instance
- *
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function setRequired($optionNames)
- {
- if ($this->locked) {
- throw new AccessException('Options cannot be made required from a lazy option or normalizer.');
- }
-
- foreach ((array) $optionNames as $option) {
- $this->defined[$option] = true;
- $this->required[$option] = true;
- }
-
- return $this;
- }
-
- /**
- * Returns whether an option is required.
- *
- * An option is required if it was passed to {@link setRequired()}.
- *
- * @param string $option The name of the option
- *
- * @return bool Whether the option is required
- */
- public function isRequired($option)
- {
- return isset($this->required[$option]);
- }
-
- /**
- * Returns the names of all required options.
- *
- * @return string[] The names of the required options
- *
- * @see isRequired()
- */
- public function getRequiredOptions()
- {
- return array_keys($this->required);
- }
-
- /**
- * Returns whether an option is missing a default value.
- *
- * An option is missing if it was passed to {@link setRequired()}, but not
- * to {@link setDefault()}. This option must be passed explicitly to
- * {@link resolve()}, otherwise an exception will be thrown.
- *
- * @param string $option The name of the option
- *
- * @return bool Whether the option is missing
- */
- public function isMissing($option)
- {
- return isset($this->required[$option]) && !array_key_exists($option, $this->defaults);
- }
-
- /**
- * Returns the names of all options missing a default value.
- *
- * @return string[] The names of the missing options
- *
- * @see isMissing()
- */
- public function getMissingOptions()
- {
- return array_keys(array_diff_key($this->required, $this->defaults));
- }
-
- /**
- * Defines a valid option name.
- *
- * Defines an option name without setting a default value. The option will
- * be accepted when passed to {@link resolve()}. When not passed, the
- * option will not be included in the resolved options.
- *
- * @param string|string[] $optionNames One or more option names
- *
- * @return OptionsResolver This instance
- *
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function setDefined($optionNames)
- {
- if ($this->locked) {
- throw new AccessException('Options cannot be defined from a lazy option or normalizer.');
- }
-
- foreach ((array) $optionNames as $option) {
- $this->defined[$option] = true;
- }
-
- return $this;
- }
-
- /**
- * Returns whether an option is defined.
- *
- * Returns true for any option passed to {@link setDefault()},
- * {@link setRequired()} or {@link setDefined()}.
- *
- * @param string $option The option name
- *
- * @return bool Whether the option is defined
- */
- public function isDefined($option)
- {
- return isset($this->defined[$option]);
- }
-
- /**
- * Returns the names of all defined options.
- *
- * @return string[] The names of the defined options
- *
- * @see isDefined()
- */
- public function getDefinedOptions()
- {
- return array_keys($this->defined);
- }
-
- /**
- * Sets the normalizer for an option.
- *
- * The normalizer should be a closure with the following signature:
- *
- * ```php
- * function (Options $options, $value) {
- * // ...
- * }
- * ```
- *
- * The closure is invoked when {@link resolve()} is called. The closure
- * has access to the resolved values of other options through the passed
- * {@link Options} instance.
- *
- * The second parameter passed to the closure is the value of
- * the option.
- *
- * The resolved option value is set to the return value of the closure.
- *
- * @param string $option The option name
- * @param \Closure $normalizer The normalizer
- *
- * @return OptionsResolver This instance
- *
- * @throws UndefinedOptionsException If the option is undefined
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function setNormalizer($option, \Closure $normalizer)
- {
- if ($this->locked) {
- throw new AccessException('Normalizers cannot be set from a lazy option or normalizer.');
- }
-
- if (!isset($this->defined[$option])) {
- throw new UndefinedOptionsException(sprintf(
- 'The option "%s" does not exist. Defined options are: "%s".',
- $option,
- implode('", "', array_keys($this->defined))
- ));
- }
-
- $this->normalizers[$option] = $normalizer;
-
- // Make sure the option is processed
- unset($this->resolved[$option]);
-
- return $this;
- }
-
- /**
- * Sets the normalizers for an array of options.
- *
- * @param array $normalizers An array of closures
- *
- * @return OptionsResolver This instance
- *
- * @throws UndefinedOptionsException If the option is undefined
- * @throws AccessException If called from a lazy option or normalizer
- *
- * @see setNormalizer()
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function setNormalizers(array $normalizers)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use setNormalizer() instead.', E_USER_DEPRECATED);
-
- foreach ($normalizers as $option => $normalizer) {
- $this->setNormalizer($option, $normalizer);
- }
-
- return $this;
- }
-
- /**
- * Sets allowed values for an option.
- *
- * Instead of passing values, you may also pass a closures with the
- * following signature:
- *
- * function ($value) {
- * // return true or false
- * }
- *
- * The closure receives the value as argument and should return true to
- * accept the value and false to reject the value.
- *
- * @param string $option The option name
- * @param mixed $allowedValues One or more acceptable values/closures
- *
- * @return OptionsResolver This instance
- *
- * @throws UndefinedOptionsException If the option is undefined
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function setAllowedValues($option, $allowedValues = null)
- {
- if ($this->locked) {
- throw new AccessException('Allowed values cannot be set from a lazy option or normalizer.');
- }
-
- // BC
- if (is_array($option) && null === $allowedValues) {
- @trigger_error('Calling the '.__METHOD__.' method with an array of options is deprecated since version 2.6 and will be removed in 3.0. Use the new signature with a single option instead.', E_USER_DEPRECATED);
-
- foreach ($option as $optionName => $optionValues) {
- $this->setAllowedValues($optionName, $optionValues);
- }
-
- return $this;
- }
-
- if (!isset($this->defined[$option])) {
- throw new UndefinedOptionsException(sprintf(
- 'The option "%s" does not exist. Defined options are: "%s".',
- $option,
- implode('", "', array_keys($this->defined))
- ));
- }
-
- $this->allowedValues[$option] = is_array($allowedValues) ? $allowedValues : array($allowedValues);
-
- // Make sure the option is processed
- unset($this->resolved[$option]);
-
- return $this;
- }
-
- /**
- * Adds allowed values for an option.
- *
- * The values are merged with the allowed values defined previously.
- *
- * Instead of passing values, you may also pass a closures with the
- * following signature:
- *
- * function ($value) {
- * // return true or false
- * }
- *
- * The closure receives the value as argument and should return true to
- * accept the value and false to reject the value.
- *
- * @param string $option The option name
- * @param mixed $allowedValues One or more acceptable values/closures
- *
- * @return OptionsResolver This instance
- *
- * @throws UndefinedOptionsException If the option is undefined
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function addAllowedValues($option, $allowedValues = null)
- {
- if ($this->locked) {
- throw new AccessException('Allowed values cannot be added from a lazy option or normalizer.');
- }
-
- // BC
- if (is_array($option) && null === $allowedValues) {
- @trigger_error('Calling the '.__METHOD__.' method with an array of options is deprecated since version 2.6 and will be removed in 3.0. Use the new signature with a single option instead.', E_USER_DEPRECATED);
-
- foreach ($option as $optionName => $optionValues) {
- $this->addAllowedValues($optionName, $optionValues);
- }
-
- return $this;
- }
-
- if (!isset($this->defined[$option])) {
- throw new UndefinedOptionsException(sprintf(
- 'The option "%s" does not exist. Defined options are: "%s".',
- $option,
- implode('", "', array_keys($this->defined))
- ));
- }
-
- if (!is_array($allowedValues)) {
- $allowedValues = array($allowedValues);
- }
-
- if (!isset($this->allowedValues[$option])) {
- $this->allowedValues[$option] = $allowedValues;
- } else {
- $this->allowedValues[$option] = array_merge($this->allowedValues[$option], $allowedValues);
- }
-
- // Make sure the option is processed
- unset($this->resolved[$option]);
-
- return $this;
- }
-
- /**
- * Sets allowed types for an option.
- *
- * Any type for which a corresponding is_<type>() function exists is
- * acceptable. Additionally, fully-qualified class or interface names may
- * be passed.
- *
- * @param string $option The option name
- * @param string|string[] $allowedTypes One or more accepted types
- *
- * @return OptionsResolver This instance
- *
- * @throws UndefinedOptionsException If the option is undefined
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function setAllowedTypes($option, $allowedTypes = null)
- {
- if ($this->locked) {
- throw new AccessException('Allowed types cannot be set from a lazy option or normalizer.');
- }
-
- // BC
- if (is_array($option) && null === $allowedTypes) {
- @trigger_error('Calling the '.__METHOD__.' method with an array of options is deprecated since version 2.6 and will be removed in 3.0. Use the new signature with a single option instead.', E_USER_DEPRECATED);
-
- foreach ($option as $optionName => $optionTypes) {
- $this->setAllowedTypes($optionName, $optionTypes);
- }
-
- return $this;
- }
-
- if (!isset($this->defined[$option])) {
- throw new UndefinedOptionsException(sprintf(
- 'The option "%s" does not exist. Defined options are: "%s".',
- $option,
- implode('", "', array_keys($this->defined))
- ));
- }
-
- $this->allowedTypes[$option] = (array) $allowedTypes;
-
- // Make sure the option is processed
- unset($this->resolved[$option]);
-
- return $this;
- }
-
- /**
- * Adds allowed types for an option.
- *
- * The types are merged with the allowed types defined previously.
- *
- * Any type for which a corresponding is_<type>() function exists is
- * acceptable. Additionally, fully-qualified class or interface names may
- * be passed.
- *
- * @param string $option The option name
- * @param string|string[] $allowedTypes One or more accepted types
- *
- * @return OptionsResolver This instance
- *
- * @throws UndefinedOptionsException If the option is undefined
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function addAllowedTypes($option, $allowedTypes = null)
- {
- if ($this->locked) {
- throw new AccessException('Allowed types cannot be added from a lazy option or normalizer.');
- }
-
- // BC
- if (is_array($option) && null === $allowedTypes) {
- @trigger_error('Calling the '.__METHOD__.' method with an array of options is deprecated since version 2.6 and will be removed in 3.0. Use the new signature with a single option instead.', E_USER_DEPRECATED);
-
- foreach ($option as $optionName => $optionTypes) {
- $this->addAllowedTypes($optionName, $optionTypes);
- }
-
- return $this;
- }
-
- if (!isset($this->defined[$option])) {
- throw new UndefinedOptionsException(sprintf(
- 'The option "%s" does not exist. Defined options are: "%s".',
- $option,
- implode('", "', array_keys($this->defined))
- ));
- }
-
- if (!isset($this->allowedTypes[$option])) {
- $this->allowedTypes[$option] = (array) $allowedTypes;
- } else {
- $this->allowedTypes[$option] = array_merge($this->allowedTypes[$option], (array) $allowedTypes);
- }
-
- // Make sure the option is processed
- unset($this->resolved[$option]);
-
- return $this;
- }
-
- /**
- * Removes the option with the given name.
- *
- * Undefined options are ignored.
- *
- * @param string|string[] $optionNames One or more option names
- *
- * @return OptionsResolver This instance
- *
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function remove($optionNames)
- {
- if ($this->locked) {
- throw new AccessException('Options cannot be removed from a lazy option or normalizer.');
- }
-
- foreach ((array) $optionNames as $option) {
- unset($this->defined[$option], $this->defaults[$option], $this->required[$option], $this->resolved[$option]);
- unset($this->lazy[$option], $this->normalizers[$option], $this->allowedTypes[$option], $this->allowedValues[$option]);
- }
-
- return $this;
- }
-
- /**
- * Removes all options.
- *
- * @return OptionsResolver This instance
- *
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function clear()
- {
- if ($this->locked) {
- throw new AccessException('Options cannot be cleared from a lazy option or normalizer.');
- }
-
- $this->defined = array();
- $this->defaults = array();
- $this->required = array();
- $this->resolved = array();
- $this->lazy = array();
- $this->normalizers = array();
- $this->allowedTypes = array();
- $this->allowedValues = array();
-
- return $this;
- }
-
- /**
- * Merges options with the default values stored in the container and
- * validates them.
- *
- * Exceptions are thrown if:
- *
- * - Undefined options are passed;
- * - Required options are missing;
- * - Options have invalid types;
- * - Options have invalid values.
- *
- * @param array $options A map of option names to values
- *
- * @return array The merged and validated options
- *
- * @throws UndefinedOptionsException If an option name is undefined
- * @throws InvalidOptionsException If an option doesn't fulfill the
- * specified validation rules
- * @throws MissingOptionsException If a required option is missing
- * @throws OptionDefinitionException If there is a cyclic dependency between
- * lazy options and/or normalizers
- * @throws NoSuchOptionException If a lazy option reads an unavailable option
- * @throws AccessException If called from a lazy option or normalizer
- */
- public function resolve(array $options = array())
- {
- if ($this->locked) {
- throw new AccessException('Options cannot be resolved from a lazy option or normalizer.');
- }
-
- // Allow this method to be called multiple times
- $clone = clone $this;
-
- // Make sure that no unknown options are passed
- $diff = array_diff_key($options, $clone->defined);
-
- if (count($diff) > 0) {
- ksort($clone->defined);
- ksort($diff);
-
- throw new UndefinedOptionsException(sprintf(
- (count($diff) > 1 ? 'The options "%s" do not exist.' : 'The option "%s" does not exist.').' Defined options are: "%s".',
- implode('", "', array_keys($diff)),
- implode('", "', array_keys($clone->defined))
- ));
- }
-
- // Override options set by the user
- foreach ($options as $option => $value) {
- $clone->defaults[$option] = $value;
- unset($clone->resolved[$option], $clone->lazy[$option]);
- }
-
- // Check whether any required option is missing
- $diff = array_diff_key($clone->required, $clone->defaults);
-
- if (count($diff) > 0) {
- ksort($diff);
-
- throw new MissingOptionsException(sprintf(
- count($diff) > 1 ? 'The required options "%s" are missing.' : 'The required option "%s" is missing.',
- implode('", "', array_keys($diff))
- ));
- }
-
- // Lock the container
- $clone->locked = true;
-
- // Now process the individual options. Use offsetGet(), which resolves
- // the option itself and any options that the option depends on
- foreach ($clone->defaults as $option => $_) {
- $clone->offsetGet($option);
- }
-
- return $clone->resolved;
- }
-
- /**
- * Returns the resolved value of an option.
- *
- * @param string $option The option name
- *
- * @return mixed The option value
- *
- * @throws AccessException If accessing this method outside of
- * {@link resolve()}
- * @throws NoSuchOptionException If the option is not set
- * @throws InvalidOptionsException If the option doesn't fulfill the
- * specified validation rules
- * @throws OptionDefinitionException If there is a cyclic dependency between
- * lazy options and/or normalizers
- */
- public function offsetGet($option)
- {
- if (!$this->locked) {
- throw new AccessException('Array access is only supported within closures of lazy options and normalizers.');
- }
-
- // Shortcut for resolved options
- if (array_key_exists($option, $this->resolved)) {
- return $this->resolved[$option];
- }
-
- // Check whether the option is set at all
- if (!array_key_exists($option, $this->defaults)) {
- if (!isset($this->defined[$option])) {
- throw new NoSuchOptionException(sprintf(
- 'The option "%s" does not exist. Defined options are: "%s".',
- $option,
- implode('", "', array_keys($this->defined))
- ));
- }
-
- throw new NoSuchOptionException(sprintf(
- 'The optional option "%s" has no value set. You should make sure it is set with "isset" before reading it.',
- $option
- ));
- }
-
- $value = $this->defaults[$option];
-
- // Resolve the option if the default value is lazily evaluated
- if (isset($this->lazy[$option])) {
- // If the closure is already being called, we have a cyclic
- // dependency
- if (isset($this->calling[$option])) {
- throw new OptionDefinitionException(sprintf(
- 'The options "%s" have a cyclic dependency.',
- implode('", "', array_keys($this->calling))
- ));
- }
-
- // The following section must be protected from cyclic
- // calls. Set $calling for the current $option to detect a cyclic
- // dependency
- // BEGIN
- $this->calling[$option] = true;
- try {
- foreach ($this->lazy[$option] as $closure) {
- $value = $closure($this, $value);
- }
- } catch (\Exception $e) {
- unset($this->calling[$option]);
- throw $e;
- }
- unset($this->calling[$option]);
- // END
- }
-
- // Validate the type of the resolved option
- if (isset($this->allowedTypes[$option])) {
- $valid = false;
-
- foreach ($this->allowedTypes[$option] as $type) {
- $type = isset(self::$typeAliases[$type]) ? self::$typeAliases[$type] : $type;
-
- if (function_exists($isFunction = 'is_'.$type)) {
- if ($isFunction($value)) {
- $valid = true;
- break;
- }
-
- continue;
- }
-
- if ($value instanceof $type) {
- $valid = true;
- break;
- }
- }
-
- if (!$valid) {
- throw new InvalidOptionsException(sprintf(
- 'The option "%s" with value %s is expected to be of type '.
- '"%s", but is of type "%s".',
- $option,
- $this->formatValue($value),
- implode('" or "', $this->allowedTypes[$option]),
- $this->formatTypeOf($value)
- ));
- }
- }
-
- // Validate the value of the resolved option
- if (isset($this->allowedValues[$option])) {
- $success = false;
- $printableAllowedValues = array();
-
- foreach ($this->allowedValues[$option] as $allowedValue) {
- if ($allowedValue instanceof \Closure) {
- if ($allowedValue($value)) {
- $success = true;
- break;
- }
-
- // Don't include closures in the exception message
- continue;
- } elseif ($value === $allowedValue) {
- $success = true;
- break;
- }
-
- $printableAllowedValues[] = $allowedValue;
- }
-
- if (!$success) {
- $message = sprintf(
- 'The option "%s" with value %s is invalid.',
- $option,
- $this->formatValue($value)
- );
-
- if (count($printableAllowedValues) > 0) {
- $message .= sprintf(
- ' Accepted values are: %s.',
- $this->formatValues($printableAllowedValues)
- );
- }
-
- throw new InvalidOptionsException($message);
- }
- }
-
- // Normalize the validated option
- if (isset($this->normalizers[$option])) {
- // If the closure is already being called, we have a cyclic
- // dependency
- if (isset($this->calling[$option])) {
- throw new OptionDefinitionException(sprintf(
- 'The options "%s" have a cyclic dependency.',
- implode('", "', array_keys($this->calling))
- ));
- }
-
- $normalizer = $this->normalizers[$option];
-
- // The following section must be protected from cyclic
- // calls. Set $calling for the current $option to detect a cyclic
- // dependency
- // BEGIN
- $this->calling[$option] = true;
- try {
- $value = $normalizer($this, $value);
- } catch (\Exception $e) {
- unset($this->calling[$option]);
- throw $e;
- }
- unset($this->calling[$option]);
- // END
- }
-
- // Mark as resolved
- $this->resolved[$option] = $value;
-
- return $value;
- }
-
- /**
- * Returns whether a resolved option with the given name exists.
- *
- * @param string $option The option name
- *
- * @return bool Whether the option is set
- *
- * @throws AccessException If accessing this method outside of {@link resolve()}
- *
- * @see \ArrayAccess::offsetExists()
- */
- public function offsetExists($option)
- {
- if (!$this->locked) {
- throw new AccessException('Array access is only supported within closures of lazy options and normalizers.');
- }
-
- return array_key_exists($option, $this->defaults);
- }
-
- /**
- * Not supported.
- *
- * @throws AccessException
- */
- public function offsetSet($option, $value)
- {
- throw new AccessException('Setting options via array access is not supported. Use setDefault() instead.');
- }
-
- /**
- * Not supported.
- *
- * @throws AccessException
- */
- public function offsetUnset($option)
- {
- throw new AccessException('Removing options via array access is not supported. Use remove() instead.');
- }
-
- /**
- * Returns the number of set options.
- *
- * This may be only a subset of the defined options.
- *
- * @return int Number of options
- *
- * @throws AccessException If accessing this method outside of {@link resolve()}
- *
- * @see \Countable::count()
- */
- public function count()
- {
- if (!$this->locked) {
- throw new AccessException('Counting is only supported within closures of lazy options and normalizers.');
- }
-
- return count($this->defaults);
- }
-
- /**
- * Alias of {@link setDefault()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function set($option, $value)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the setDefaults() method instead.', E_USER_DEPRECATED);
-
- return $this->setDefault($option, $value);
- }
-
- /**
- * Shortcut for {@link clear()} and {@link setDefaults()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function replace(array $defaults)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the clear() and setDefaults() methods instead.', E_USER_DEPRECATED);
-
- $this->clear();
-
- return $this->setDefaults($defaults);
- }
-
- /**
- * Alias of {@link setDefault()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function overload($option, $value)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the setDefault() method instead.', E_USER_DEPRECATED);
-
- return $this->setDefault($option, $value);
- }
-
- /**
- * Alias of {@link offsetGet()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function get($option)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the ArrayAccess syntax instead to get an option value.', E_USER_DEPRECATED);
-
- return $this->offsetGet($option);
- }
-
- /**
- * Alias of {@link offsetExists()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function has($option)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the ArrayAccess syntax instead to get an option value.', E_USER_DEPRECATED);
-
- return $this->offsetExists($option);
- }
-
- /**
- * Shortcut for {@link clear()} and {@link setDefaults()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function replaceDefaults(array $defaultValues)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the clear() and setDefaults() methods instead.', E_USER_DEPRECATED);
-
- $this->clear();
-
- return $this->setDefaults($defaultValues);
- }
-
- /**
- * Alias of {@link setDefined()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function setOptional(array $optionNames)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the setDefined() method instead.', E_USER_DEPRECATED);
-
- return $this->setDefined($optionNames);
- }
-
- /**
- * Alias of {@link isDefined()}.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- */
- public function isKnown($option)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the isDefined() method instead.', E_USER_DEPRECATED);
-
- return $this->isDefined($option);
- }
-
- /**
- * Returns a string representation of the type of the value.
- *
- * This method should be used if you pass the type of a value as
- * message parameter to a constraint violation. Note that such
- * parameters should usually not be included in messages aimed at
- * non-technical people.
- *
- * @param mixed $value The value to return the type of
- *
- * @return string The type of the value
- */
- private function formatTypeOf($value)
- {
- return is_object($value) ? get_class($value) : gettype($value);
- }
-
- /**
- * Returns a string representation of the value.
- *
- * This method returns the equivalent PHP tokens for most scalar types
- * (i.e. "false" for false, "1" for 1 etc.). Strings are always wrapped
- * in double quotes (").
- *
- * @param mixed $value The value to format as string
- *
- * @return string The string representation of the passed value
- */
- private function formatValue($value)
- {
- if (is_object($value)) {
- return get_class($value);
- }
-
- if (is_array($value)) {
- return 'array';
- }
-
- if (is_string($value)) {
- return '"'.$value.'"';
- }
-
- if (is_resource($value)) {
- return 'resource';
- }
-
- if (null === $value) {
- return 'null';
- }
-
- if (false === $value) {
- return 'false';
- }
-
- if (true === $value) {
- return 'true';
- }
-
- return (string) $value;
- }
-
- /**
- * Returns a string representation of a list of values.
- *
- * Each of the values is converted to a string using
- * {@link formatValue()}. The values are then concatenated with commas.
- *
- * @param array $values A list of values
- *
- * @return string The string representation of the value list
- *
- * @see formatValue()
- */
- private function formatValues(array $values)
- {
- foreach ($values as $key => $value) {
- $values[$key] = $this->formatValue($value);
- }
-
- return implode(', ', $values);
- }
-}
diff --git a/library/symfony/options-resolver/OptionsResolverInterface.php b/library/symfony/options-resolver/OptionsResolverInterface.php
deleted file mode 100644
index aebc8df22..000000000
--- a/library/symfony/options-resolver/OptionsResolverInterface.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver;
-
-use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
-use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
-use Symfony\Component\OptionsResolver\Exception\OptionDefinitionException;
-
-/**
- * @author Bernhard Schussek <bschussek@gmail.com>
- *
- * @deprecated since version 2.6, to be removed in 3.0. Use {@link OptionsResolver} instead.
- */
-interface OptionsResolverInterface
-{
- /**
- * Sets default option values.
- *
- * The options can either be values of any types or closures that
- * evaluate the option value lazily. These closures must have one
- * of the following signatures:
- *
- * <code>
- * function (Options $options)
- * function (Options $options, $value)
- * </code>
- *
- * The second parameter passed to the closure is the previously
- * set default value, in case you are overwriting an existing
- * default value.
- *
- * The closures should return the lazily created option value.
- *
- * @param array $defaultValues A list of option names as keys and default
- * values or closures as values.
- *
- * @return OptionsResolverInterface The resolver instance.
- */
- public function setDefaults(array $defaultValues);
-
- /**
- * Replaces default option values.
- *
- * Old defaults are erased, which means that closures passed here cannot
- * access the previous default value. This may be useful to improve
- * performance if the previous default value is calculated by an expensive
- * closure.
- *
- * @param array $defaultValues A list of option names as keys and default
- * values or closures as values.
- *
- * @return OptionsResolverInterface The resolver instance.
- */
- public function replaceDefaults(array $defaultValues);
-
- /**
- * Sets optional options.
- *
- * This method declares valid option names without setting default values for them.
- * If these options are not passed to {@link resolve()} and no default has been set
- * for them, they will be missing in the final options array. This can be helpful
- * if you want to determine whether an option has been set or not because otherwise
- * {@link resolve()} would trigger an exception for unknown options.
- *
- * @param array $optionNames A list of option names.
- *
- * @return OptionsResolverInterface The resolver instance.
- */
- public function setOptional(array $optionNames);
-
- /**
- * Sets required options.
- *
- * If these options are not passed to {@link resolve()} and no default has been set for
- * them, an exception will be thrown.
- *
- * @param array $optionNames A list of option names.
- *
- * @return OptionsResolverInterface The resolver instance.
- */
- public function setRequired($optionNames);
-
- /**
- * Sets allowed values for a list of options.
- *
- * @param array $allowedValues A list of option names as keys and arrays
- * with values acceptable for that option as
- * values.
- *
- * @return OptionsResolverInterface The resolver instance.
- *
- * @throws InvalidOptionsException If an option has not been defined
- * (see {@link isKnown()}) for which
- * an allowed value is set.
- */
- public function setAllowedValues($allowedValues);
-
- /**
- * Adds allowed values for a list of options.
- *
- * The values are merged with the allowed values defined previously.
- *
- * @param array $allowedValues A list of option names as keys and arrays
- * with values acceptable for that option as
- * values.
- *
- * @return OptionsResolverInterface The resolver instance.
- *
- * @throws InvalidOptionsException If an option has not been defined
- * (see {@link isKnown()}) for which
- * an allowed value is set.
- */
- public function addAllowedValues($allowedValues);
-
- /**
- * Sets allowed types for a list of options.
- *
- * @param array $allowedTypes A list of option names as keys and type
- * names passed as string or array as values.
- *
- * @return OptionsResolverInterface The resolver instance.
- *
- * @throws InvalidOptionsException If an option has not been defined for
- * which an allowed type is set.
- */
- public function setAllowedTypes($allowedTypes);
-
- /**
- * Adds allowed types for a list of options.
- *
- * The types are merged with the allowed types defined previously.
- *
- * @param array $allowedTypes A list of option names as keys and type
- * names passed as string or array as values.
- *
- * @return OptionsResolverInterface The resolver instance.
- *
- * @throws InvalidOptionsException If an option has not been defined for
- * which an allowed type is set.
- */
- public function addAllowedTypes($allowedTypes);
-
- /**
- * Sets normalizers that are applied on resolved options.
- *
- * The normalizers should be closures with the following signature:
- *
- * <code>
- * function (Options $options, $value)
- * </code>
- *
- * The second parameter passed to the closure is the value of
- * the option.
- *
- * The closure should return the normalized value.
- *
- * @param array $normalizers An array of closures.
- *
- * @return OptionsResolverInterface The resolver instance.
- */
- public function setNormalizers(array $normalizers);
-
- /**
- * Returns whether an option is known.
- *
- * An option is known if it has been passed to either {@link setDefaults()},
- * {@link setRequired()} or {@link setOptional()} before.
- *
- * @param string $option The name of the option.
- *
- * @return bool Whether the option is known.
- */
- public function isKnown($option);
-
- /**
- * Returns whether an option is required.
- *
- * An option is required if it has been passed to {@link setRequired()},
- * but not to {@link setDefaults()}. That is, the option has been declared
- * as required and no default value has been set.
- *
- * @param string $option The name of the option.
- *
- * @return bool Whether the option is required.
- */
- public function isRequired($option);
-
- /**
- * Returns the combination of the default and the passed options.
- *
- * @param array $options The custom option values.
- *
- * @return array A list of options and their values.
- *
- * @throws InvalidOptionsException If any of the passed options has not
- * been defined or does not contain an
- * allowed value.
- * @throws MissingOptionsException If a required option is missing.
- * @throws OptionDefinitionException If a cyclic dependency is detected
- * between two lazy options.
- */
- public function resolve(array $options = array());
-}
diff --git a/library/symfony/options-resolver/README.md b/library/symfony/options-resolver/README.md
deleted file mode 100644
index cd7a7405d..000000000
--- a/library/symfony/options-resolver/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-OptionsResolver Component
-=========================
-
-This component processes and validates option arrays.
-
-Documentation
--------------
-
-The documentation for the component can be found [online] [1].
-
-Resources
----------
-
-You can run the unit tests with the following command:
-
- $ cd path/to/Symfony/Component/OptionsResolver/
- $ composer install
- $ phpunit
-
-[1]: https://symfony.com/doc/current/components/options_resolver.html
diff --git a/library/symfony/options-resolver/Tests/LegacyOptionsResolverTest.php b/library/symfony/options-resolver/Tests/LegacyOptionsResolverTest.php
deleted file mode 100644
index ee89f5279..000000000
--- a/library/symfony/options-resolver/Tests/LegacyOptionsResolverTest.php
+++ /dev/null
@@ -1,733 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Tests;
-
-use Symfony\Component\OptionsResolver\OptionsResolver;
-use Symfony\Component\OptionsResolver\Options;
-
-/**
- * @group legacy
- */
-class LegacyOptionsResolverTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * @var OptionsResolver
- */
- private $resolver;
-
- protected function setUp()
- {
- $this->resolver = new OptionsResolver();
- }
-
- public function testResolve()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- 'two' => '2',
- ));
-
- $options = array(
- 'two' => '20',
- );
-
- $this->assertEquals(array(
- 'one' => '1',
- 'two' => '20',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveNumericOptions()
- {
- $this->resolver->setDefaults(array(
- '1' => '1',
- '2' => '2',
- ));
-
- $options = array(
- '2' => '20',
- );
-
- $this->assertEquals(array(
- '1' => '1',
- '2' => '20',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveLazy()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- 'two' => function (Options $options) {
- return '20';
- },
- ));
-
- $this->assertEquals(array(
- 'one' => '1',
- 'two' => '20',
- ), $this->resolver->resolve(array()));
- }
-
- public function testTypeAliasesForAllowedTypes()
- {
- $this->resolver->setDefaults(array(
- 'force' => false,
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'force' => 'boolean',
- ));
-
- $this->resolver->resolve(array(
- 'force' => true,
- ));
- }
-
- public function testResolveLazyDependencyOnOptional()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- 'two' => function (Options $options) {
- return $options['one'].'2';
- },
- ));
-
- $options = array(
- 'one' => '10',
- );
-
- $this->assertEquals(array(
- 'one' => '10',
- 'two' => '102',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveLazyDependencyOnMissingOptionalWithoutDefault()
- {
- $test = $this;
-
- $this->resolver->setOptional(array(
- 'one',
- ));
-
- $this->resolver->setDefaults(array(
- 'two' => function (Options $options) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertFalse(isset($options['one']));
-
- return '2';
- },
- ));
-
- $options = array();
-
- $this->assertEquals(array(
- 'two' => '2',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveLazyDependencyOnOptionalWithoutDefault()
- {
- $test = $this;
-
- $this->resolver->setOptional(array(
- 'one',
- ));
-
- $this->resolver->setDefaults(array(
- 'two' => function (Options $options) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertTrue(isset($options['one']));
-
- return $options['one'].'2';
- },
- ));
-
- $options = array(
- 'one' => '10',
- );
-
- $this->assertEquals(array(
- 'one' => '10',
- 'two' => '102',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveLazyDependencyOnRequired()
- {
- $this->resolver->setRequired(array(
- 'one',
- ));
- $this->resolver->setDefaults(array(
- 'two' => function (Options $options) {
- return $options['one'].'2';
- },
- ));
-
- $options = array(
- 'one' => '10',
- );
-
- $this->assertEquals(array(
- 'one' => '10',
- 'two' => '102',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveLazyReplaceDefaults()
- {
- $test = $this;
-
- $this->resolver->setDefaults(array(
- 'one' => function (Options $options) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->fail('Previous closure should not be executed');
- },
- ));
-
- $this->resolver->replaceDefaults(array(
- 'one' => function (Options $options, $previousValue) {
- return '1';
- },
- ));
-
- $this->assertEquals(array(
- 'one' => '1',
- ), $this->resolver->resolve(array()));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- * @expectedExceptionMessage The option "foo" does not exist. Defined options are: "one", "three", "two".
- */
- public function testResolveFailsIfNonExistingOption()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setRequired(array(
- 'two',
- ));
-
- $this->resolver->setOptional(array(
- 'three',
- ));
-
- $this->resolver->resolve(array(
- 'foo' => 'bar',
- ));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\MissingOptionsException
- */
- public function testResolveFailsIfMissingRequiredOption()
- {
- $this->resolver->setRequired(array(
- 'one',
- ));
-
- $this->resolver->setDefaults(array(
- 'two' => '2',
- ));
-
- $this->resolver->resolve(array(
- 'two' => '20',
- ));
- }
-
- public function testResolveSucceedsIfOptionValueAllowed()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedValues(array(
- 'one' => array('1', 'one'),
- ));
-
- $options = array(
- 'one' => 'one',
- );
-
- $this->assertEquals(array(
- 'one' => 'one',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfOptionValueAllowed2()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- 'two' => '2',
- ));
-
- $this->resolver->setAllowedValues(array(
- 'one' => '1',
- 'two' => '2',
- ));
- $this->resolver->addAllowedValues(array(
- 'one' => 'one',
- 'two' => 'two',
- ));
-
- $options = array(
- 'one' => '1',
- 'two' => 'two',
- );
-
- $this->assertEquals(array(
- 'one' => '1',
- 'two' => 'two',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfOptionalWithAllowedValuesNotSet()
- {
- $this->resolver->setRequired(array(
- 'one',
- ));
-
- $this->resolver->setOptional(array(
- 'two',
- ));
-
- $this->resolver->setAllowedValues(array(
- 'one' => array('1', 'one'),
- 'two' => array('2', 'two'),
- ));
-
- $options = array(
- 'one' => '1',
- );
-
- $this->assertEquals(array(
- 'one' => '1',
- ), $this->resolver->resolve($options));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfOptionValueNotAllowed()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedValues(array(
- 'one' => array('1', 'one'),
- ));
-
- $this->resolver->resolve(array(
- 'one' => '2',
- ));
- }
-
- public function testResolveSucceedsIfOptionTypeAllowed()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => 'string',
- ));
-
- $options = array(
- 'one' => 'one',
- );
-
- $this->assertEquals(array(
- 'one' => 'one',
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfOptionTypeAllowedPassArray()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => array('string', 'bool'),
- ));
-
- $options = array(
- 'one' => true,
- );
-
- $this->assertEquals(array(
- 'one' => true,
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfOptionTypeAllowedPassObject()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => 'object',
- ));
-
- $object = new \stdClass();
- $options = array(
- 'one' => $object,
- );
-
- $this->assertEquals(array(
- 'one' => $object,
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfOptionTypeAllowedPassClass()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => '\stdClass',
- ));
-
- $object = new \stdClass();
- $options = array(
- 'one' => $object,
- );
-
- $this->assertEquals(array(
- 'one' => $object,
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfOptionTypeAllowedAddTypes()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- 'two' => '2',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => 'string',
- 'two' => 'bool',
- ));
- $this->resolver->addAllowedTypes(array(
- 'one' => 'float',
- 'two' => 'integer',
- ));
-
- $options = array(
- 'one' => 1.23,
- 'two' => false,
- );
-
- $this->assertEquals(array(
- 'one' => 1.23,
- 'two' => false,
- ), $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfOptionalWithTypeAndWithoutValue()
- {
- $this->resolver->setOptional(array(
- 'one',
- 'two',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => 'string',
- 'two' => 'int',
- ));
-
- $options = array(
- 'two' => 1,
- );
-
- $this->assertEquals(array(
- 'two' => 1,
- ), $this->resolver->resolve($options));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfOptionTypeNotAllowed()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => array('string', 'bool'),
- ));
-
- $this->resolver->resolve(array(
- 'one' => 1.23,
- ));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfOptionTypeNotAllowedMultipleOptions()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- 'two' => '2',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => 'string',
- 'two' => 'bool',
- ));
-
- $this->resolver->resolve(array(
- 'one' => 'foo',
- 'two' => 1.23,
- ));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfOptionTypeNotAllowedAddTypes()
- {
- $this->resolver->setDefaults(array(
- 'one' => '1',
- ));
-
- $this->resolver->setAllowedTypes(array(
- 'one' => 'string',
- ));
- $this->resolver->addAllowedTypes(array(
- 'one' => 'bool',
- ));
-
- $this->resolver->resolve(array(
- 'one' => 1.23,
- ));
- }
-
- public function testFluidInterface()
- {
- $this->resolver->setDefaults(array('one' => '1'))
- ->replaceDefaults(array('one' => '2'))
- ->setAllowedValues(array('one' => array('1', '2')))
- ->addAllowedValues(array('one' => array('3')))
- ->setRequired(array('two'))
- ->setOptional(array('three'));
-
- $options = array(
- 'two' => '2',
- );
-
- $this->assertEquals(array(
- 'one' => '2',
- 'two' => '2',
- ), $this->resolver->resolve($options));
- }
-
- public function testKnownIfDefaultWasSet()
- {
- $this->assertFalse($this->resolver->isKnown('foo'));
-
- $this->resolver->setDefaults(array(
- 'foo' => 'bar',
- ));
-
- $this->assertTrue($this->resolver->isKnown('foo'));
- }
-
- public function testKnownIfRequired()
- {
- $this->assertFalse($this->resolver->isKnown('foo'));
-
- $this->resolver->setRequired(array(
- 'foo',
- ));
-
- $this->assertTrue($this->resolver->isKnown('foo'));
- }
-
- public function testKnownIfOptional()
- {
- $this->assertFalse($this->resolver->isKnown('foo'));
-
- $this->resolver->setOptional(array(
- 'foo',
- ));
-
- $this->assertTrue($this->resolver->isKnown('foo'));
- }
-
- public function testRequiredIfRequired()
- {
- $this->assertFalse($this->resolver->isRequired('foo'));
-
- $this->resolver->setRequired(array(
- 'foo',
- ));
-
- $this->assertTrue($this->resolver->isRequired('foo'));
- }
-
- public function testNormalizersTransformFinalOptions()
- {
- $this->resolver->setDefaults(array(
- 'foo' => 'bar',
- 'bam' => 'baz',
- ));
- $this->resolver->setNormalizers(array(
- 'foo' => function (Options $options, $value) {
- return $options['bam'].'['.$value.']';
- },
- ));
-
- $expected = array(
- 'foo' => 'baz[bar]',
- 'bam' => 'baz',
- );
-
- $this->assertEquals($expected, $this->resolver->resolve(array()));
-
- $expected = array(
- 'foo' => 'boo[custom]',
- 'bam' => 'boo',
- );
-
- $this->assertEquals($expected, $this->resolver->resolve(array(
- 'foo' => 'custom',
- 'bam' => 'boo',
- )));
- }
-
- public function testResolveWithoutOptionSucceedsIfRequiredAndDefaultValue()
- {
- $this->resolver->setRequired(array(
- 'foo',
- ));
- $this->resolver->setDefaults(array(
- 'foo' => 'bar',
- ));
-
- $this->assertEquals(array(
- 'foo' => 'bar',
- ), $this->resolver->resolve(array()));
- }
-
- public function testResolveWithoutOptionSucceedsIfDefaultValueAndRequired()
- {
- $this->resolver->setDefaults(array(
- 'foo' => 'bar',
- ));
- $this->resolver->setRequired(array(
- 'foo',
- ));
-
- $this->assertEquals(array(
- 'foo' => 'bar',
- ), $this->resolver->resolve(array()));
- }
-
- public function testResolveSucceedsIfOptionRequiredAndValueAllowed()
- {
- $this->resolver->setRequired(array(
- 'one', 'two',
- ));
- $this->resolver->setAllowedValues(array(
- 'two' => array('2'),
- ));
-
- $options = array(
- 'one' => '1',
- 'two' => '2',
- );
-
- $this->assertEquals($options, $this->resolver->resolve($options));
- }
-
- public function testResolveSucceedsIfValueAllowedCallbackReturnsTrue()
- {
- $this->resolver->setRequired(array(
- 'test',
- ));
- $this->resolver->setAllowedValues(array(
- 'test' => function ($value) {
- return true;
- },
- ));
-
- $options = array(
- 'test' => true,
- );
-
- $this->assertEquals($options, $this->resolver->resolve($options));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfValueAllowedCallbackReturnsFalse()
- {
- $this->resolver->setRequired(array(
- 'test',
- ));
- $this->resolver->setAllowedValues(array(
- 'test' => function ($value) {
- return false;
- },
- ));
-
- $options = array(
- 'test' => true,
- );
-
- $this->assertEquals($options, $this->resolver->resolve($options));
- }
-
- public function testClone()
- {
- $this->resolver->setDefaults(array('one' => '1'));
-
- $clone = clone $this->resolver;
-
- // Changes after cloning don't affect each other
- $this->resolver->setDefaults(array('two' => '2'));
- $clone->setDefaults(array('three' => '3'));
-
- $this->assertEquals(array(
- 'one' => '1',
- 'two' => '2',
- ), $this->resolver->resolve());
-
- $this->assertEquals(array(
- 'one' => '1',
- 'three' => '3',
- ), $clone->resolve());
- }
-
- public function testOverloadReturnsThis()
- {
- $this->assertSame($this->resolver, $this->resolver->overload('foo', 'bar'));
- }
-
- public function testOverloadCallsSet()
- {
- $this->resolver->overload('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-}
diff --git a/library/symfony/options-resolver/Tests/LegacyOptionsTest.php b/library/symfony/options-resolver/Tests/LegacyOptionsTest.php
deleted file mode 100644
index b65a09002..000000000
--- a/library/symfony/options-resolver/Tests/LegacyOptionsTest.php
+++ /dev/null
@@ -1,337 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Tests;
-
-use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolver;
-
-/**
- * @group legacy
- */
-class LegacyOptionsTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * @var OptionsResolver
- */
- private $options;
-
- protected function setUp()
- {
- $this->options = new OptionsResolver();
- }
-
- public function testSetLazyOption()
- {
- $test = $this;
-
- $this->options->set('foo', function (Options $options) use ($test) {
- return 'dynamic';
- });
-
- $this->assertEquals(array('foo' => 'dynamic'), $this->options->resolve());
- }
-
- public function testOverloadKeepsPreviousValue()
- {
- $test = $this;
-
- // defined by superclass
- $this->options->set('foo', 'bar');
-
- // defined by subclass
- $this->options->overload('foo', function (Options $options, $previousValue) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertEquals('bar', $previousValue);
-
- return 'dynamic';
- });
-
- $this->assertEquals(array('foo' => 'dynamic'), $this->options->resolve());
- }
-
- public function testPreviousValueIsEvaluatedIfLazy()
- {
- $test = $this;
-
- // defined by superclass
- $this->options->set('foo', function (Options $options) {
- return 'bar';
- });
-
- // defined by subclass
- $this->options->overload('foo', function (Options $options, $previousValue) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertEquals('bar', $previousValue);
-
- return 'dynamic';
- });
-
- $this->assertEquals(array('foo' => 'dynamic'), $this->options->resolve());
- }
-
- public function testPreviousValueIsNotEvaluatedIfNoSecondArgument()
- {
- $test = $this;
-
- // defined by superclass
- $this->options->set('foo', function (Options $options) use ($test) {
- $test->fail('Should not be called');
- });
-
- // defined by subclass, no $previousValue argument defined!
- $this->options->overload('foo', function (Options $options) use ($test) {
- return 'dynamic';
- });
-
- $this->assertEquals(array('foo' => 'dynamic'), $this->options->resolve());
- }
-
- public function testLazyOptionCanAccessOtherOptions()
- {
- $test = $this;
-
- $this->options->set('foo', 'bar');
-
- $this->options->set('bam', function (Options $options) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertEquals('bar', $options->get('foo'));
-
- return 'dynamic';
- });
-
- $this->assertEquals(array('foo' => 'bar', 'bam' => 'dynamic'), $this->options->resolve());
- }
-
- public function testLazyOptionCanAccessOtherLazyOptions()
- {
- $test = $this;
-
- $this->options->set('foo', function (Options $options) {
- return 'bar';
- });
-
- $this->options->set('bam', function (Options $options) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertEquals('bar', $options->get('foo'));
-
- return 'dynamic';
- });
-
- $this->assertEquals(array('foo' => 'bar', 'bam' => 'dynamic'), $this->options->resolve());
- }
-
- public function testNormalizer()
- {
- $this->options->set('foo', 'bar');
-
- $this->options->setNormalizer('foo', function () {
- return 'normalized';
- });
-
- $this->assertEquals(array('foo' => 'normalized'), $this->options->resolve());
- }
-
- public function testNormalizerReceivesUnnormalizedValue()
- {
- $this->options->set('foo', 'bar');
-
- $this->options->setNormalizer('foo', function (Options $options, $value) {
- return 'normalized['.$value.']';
- });
-
- $this->assertEquals(array('foo' => 'normalized[bar]'), $this->options->resolve());
- }
-
- public function testNormalizerCanAccessOtherOptions()
- {
- $test = $this;
-
- $this->options->set('foo', 'bar');
- $this->options->set('bam', 'baz');
-
- $this->options->setNormalizer('bam', function (Options $options) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertEquals('bar', $options->get('foo'));
-
- return 'normalized';
- });
-
- $this->assertEquals(array('foo' => 'bar', 'bam' => 'normalized'), $this->options->resolve());
- }
-
- public function testNormalizerCanAccessOtherLazyOptions()
- {
- $test = $this;
-
- $this->options->set('foo', function (Options $options) {
- return 'bar';
- });
- $this->options->set('bam', 'baz');
-
- $this->options->setNormalizer('bam', function (Options $options) use ($test) {
- /* @var \PHPUnit_Framework_TestCase $test */
- $test->assertEquals('bar', $options->get('foo'));
-
- return 'normalized';
- });
-
- $this->assertEquals(array('foo' => 'bar', 'bam' => 'normalized'), $this->options->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException
- */
- public function testFailForCyclicDependencies()
- {
- $this->options->set('foo', function (Options $options) {
- $options->get('bam');
- });
-
- $this->options->set('bam', function (Options $options) {
- $options->get('foo');
- });
-
- $this->options->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException
- */
- public function testFailForCyclicDependenciesBetweenNormalizers()
- {
- $this->options->set('foo', 'bar');
- $this->options->set('bam', 'baz');
-
- $this->options->setNormalizer('foo', function (Options $options) {
- $options->get('bam');
- });
-
- $this->options->setNormalizer('bam', function (Options $options) {
- $options->get('foo');
- });
-
- $this->options->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException
- */
- public function testFailForCyclicDependenciesBetweenNormalizerAndLazyOption()
- {
- $this->options->set('foo', function (Options $options) {
- $options->get('bam');
- });
- $this->options->set('bam', 'baz');
-
- $this->options->setNormalizer('bam', function (Options $options) {
- $options->get('foo');
- });
-
- $this->options->resolve();
- }
-
- public function testReplaceClearsAndSets()
- {
- $this->options->set('one', '1');
-
- $this->options->replace(array(
- 'two' => '2',
- 'three' => function (Options $options) {
- return '2' === $options['two'] ? '3' : 'foo';
- },
- ));
-
- $this->assertEquals(array(
- 'two' => '2',
- 'three' => '3',
- ), $this->options->resolve());
- }
-
- public function testClearRemovesAllOptions()
- {
- $this->options->set('one', 1);
- $this->options->set('two', 2);
-
- $this->options->clear();
-
- $this->assertEmpty($this->options->resolve());
- }
-
- public function testOverloadCannotBeEvaluatedLazilyWithoutExpectedClosureParams()
- {
- $this->options->set('foo', 'bar');
-
- $this->options->overload('foo', function () {
- return 'test';
- });
-
- $resolved = $this->options->resolve();
- $this->assertTrue(is_callable($resolved['foo']));
- }
-
- public function testOverloadCannotBeEvaluatedLazilyWithoutFirstParamTypeHint()
- {
- $this->options->set('foo', 'bar');
-
- $this->options->overload('foo', function ($object) {
- return 'test';
- });
-
- $resolved = $this->options->resolve();
- $this->assertTrue(is_callable($resolved['foo']));
- }
-
- public function testRemoveOptionAndNormalizer()
- {
- $this->options->set('foo1', 'bar');
- $this->options->setNormalizer('foo1', function (Options $options) {
- return '';
- });
- $this->options->set('foo2', 'bar');
- $this->options->setNormalizer('foo2', function (Options $options) {
- return '';
- });
-
- $this->options->remove('foo2');
- $this->assertEquals(array('foo1' => ''), $this->options->resolve());
- }
-
- public function testReplaceOptionAndNormalizer()
- {
- $this->options->set('foo1', 'bar');
- $this->options->setNormalizer('foo1', function (Options $options) {
- return '';
- });
- $this->options->set('foo2', 'bar');
- $this->options->setNormalizer('foo2', function (Options $options) {
- return '';
- });
-
- $this->options->replace(array('foo1' => 'new'));
- $this->assertEquals(array('foo1' => 'new'), $this->options->resolve());
- }
-
- public function testClearOptionAndNormalizer()
- {
- $this->options->set('foo1', 'bar');
- $this->options->setNormalizer('foo1', function (Options $options) {
- return '';
- });
- $this->options->set('foo2', 'bar');
- $this->options->setNormalizer('foo2', function (Options $options) {
- return '';
- });
-
- $this->options->clear();
- $this->assertEmpty($this->options->resolve());
- }
-}
diff --git a/library/symfony/options-resolver/Tests/OptionsResolver2Dot6Test.php b/library/symfony/options-resolver/Tests/OptionsResolver2Dot6Test.php
deleted file mode 100644
index 9158c5ba0..000000000
--- a/library/symfony/options-resolver/Tests/OptionsResolver2Dot6Test.php
+++ /dev/null
@@ -1,1550 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\OptionsResolver\Tests;
-
-use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
-use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolver;
-
-class OptionsResolver2Dot6Test extends \PHPUnit_Framework_TestCase
-{
- /**
- * @var OptionsResolver
- */
- private $resolver;
-
- protected function setUp()
- {
- $this->resolver = new OptionsResolver();
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // resolve()
- ////////////////////////////////////////////////////////////////////////////
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- * @expectedExceptionMessage The option "foo" does not exist. Defined options are: "a", "z".
- */
- public function testResolveFailsIfNonExistingOption()
- {
- $this->resolver->setDefault('z', '1');
- $this->resolver->setDefault('a', '2');
-
- $this->resolver->resolve(array('foo' => 'bar'));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- * @expectedExceptionMessage The options "baz", "foo", "ping" do not exist. Defined options are: "a", "z".
- */
- public function testResolveFailsIfMultipleNonExistingOptions()
- {
- $this->resolver->setDefault('z', '1');
- $this->resolver->setDefault('a', '2');
-
- $this->resolver->resolve(array('ping' => 'pong', 'foo' => 'bar', 'baz' => 'bam'));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testResolveFailsFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->resolve(array());
- });
-
- $this->resolver->resolve();
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // setDefault()/hasDefault()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testSetDefaultReturnsThis()
- {
- $this->assertSame($this->resolver, $this->resolver->setDefault('foo', 'bar'));
- }
-
- public function testSetDefault()
- {
- $this->resolver->setDefault('one', '1');
- $this->resolver->setDefault('two', '20');
-
- $this->assertEquals(array(
- 'one' => '1',
- 'two' => '20',
- ), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfSetDefaultFromLazyOption()
- {
- $this->resolver->setDefault('lazy', function (Options $options) {
- $options->setDefault('default', 42);
- });
-
- $this->resolver->resolve();
- }
-
- public function testHasDefault()
- {
- $this->assertFalse($this->resolver->hasDefault('foo'));
- $this->resolver->setDefault('foo', 42);
- $this->assertTrue($this->resolver->hasDefault('foo'));
- }
-
- public function testHasDefaultWithNullValue()
- {
- $this->assertFalse($this->resolver->hasDefault('foo'));
- $this->resolver->setDefault('foo', null);
- $this->assertTrue($this->resolver->hasDefault('foo'));
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // lazy setDefault()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testSetLazyReturnsThis()
- {
- $this->assertSame($this->resolver, $this->resolver->setDefault('foo', function (Options $options) {}));
- }
-
- public function testSetLazyClosure()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- return 'lazy';
- });
-
- $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve());
- }
-
- public function testClosureWithoutTypeHintNotInvoked()
- {
- $closure = function ($options) {
- \PHPUnit_Framework_Assert::fail('Should not be called');
- };
-
- $this->resolver->setDefault('foo', $closure);
-
- $this->assertSame(array('foo' => $closure), $this->resolver->resolve());
- }
-
- public function testClosureWithoutParametersNotInvoked()
- {
- $closure = function () {
- \PHPUnit_Framework_Assert::fail('Should not be called');
- };
-
- $this->resolver->setDefault('foo', $closure);
-
- $this->assertSame(array('foo' => $closure), $this->resolver->resolve());
- }
-
- public function testAccessPreviousDefaultValue()
- {
- // defined by superclass
- $this->resolver->setDefault('foo', 'bar');
-
- // defined by subclass
- $this->resolver->setDefault('foo', function (Options $options, $previousValue) {
- \PHPUnit_Framework_Assert::assertEquals('bar', $previousValue);
-
- return 'lazy';
- });
-
- $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve());
- }
-
- public function testAccessPreviousLazyDefaultValue()
- {
- // defined by superclass
- $this->resolver->setDefault('foo', function (Options $options) {
- return 'bar';
- });
-
- // defined by subclass
- $this->resolver->setDefault('foo', function (Options $options, $previousValue) {
- \PHPUnit_Framework_Assert::assertEquals('bar', $previousValue);
-
- return 'lazy';
- });
-
- $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve());
- }
-
- public function testPreviousValueIsNotEvaluatedIfNoSecondArgument()
- {
- // defined by superclass
- $this->resolver->setDefault('foo', function () {
- \PHPUnit_Framework_Assert::fail('Should not be called');
- });
-
- // defined by subclass, no $previousValue argument defined!
- $this->resolver->setDefault('foo', function (Options $options) {
- return 'lazy';
- });
-
- $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve());
- }
-
- public function testOverwrittenLazyOptionNotEvaluated()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- \PHPUnit_Framework_Assert::fail('Should not be called');
- });
-
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testInvokeEachLazyOptionOnlyOnce()
- {
- $calls = 0;
-
- $this->resolver->setDefault('lazy1', function (Options $options) use (&$calls) {
- \PHPUnit_Framework_Assert::assertSame(1, ++$calls);
-
- $options['lazy2'];
- });
-
- $this->resolver->setDefault('lazy2', function (Options $options) use (&$calls) {
- \PHPUnit_Framework_Assert::assertSame(2, ++$calls);
- });
-
- $this->resolver->resolve();
-
- $this->assertSame(2, $calls);
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // setRequired()/isRequired()/getRequiredOptions()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testSetRequiredReturnsThis()
- {
- $this->assertSame($this->resolver, $this->resolver->setRequired('foo'));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfSetRequiredFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->setRequired('bar');
- });
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\MissingOptionsException
- */
- public function testResolveFailsIfRequiredOptionMissing()
- {
- $this->resolver->setRequired('foo');
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfRequiredOptionSet()
- {
- $this->resolver->setRequired('foo');
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- public function testResolveSucceedsIfRequiredOptionPassed()
- {
- $this->resolver->setRequired('foo');
-
- $this->assertNotEmpty($this->resolver->resolve(array('foo' => 'bar')));
- }
-
- public function testIsRequired()
- {
- $this->assertFalse($this->resolver->isRequired('foo'));
- $this->resolver->setRequired('foo');
- $this->assertTrue($this->resolver->isRequired('foo'));
- }
-
- public function testRequiredIfSetBefore()
- {
- $this->assertFalse($this->resolver->isRequired('foo'));
-
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setRequired('foo');
-
- $this->assertTrue($this->resolver->isRequired('foo'));
- }
-
- public function testStillRequiredAfterSet()
- {
- $this->assertFalse($this->resolver->isRequired('foo'));
-
- $this->resolver->setRequired('foo');
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertTrue($this->resolver->isRequired('foo'));
- }
-
- public function testIsNotRequiredAfterRemove()
- {
- $this->assertFalse($this->resolver->isRequired('foo'));
- $this->resolver->setRequired('foo');
- $this->resolver->remove('foo');
- $this->assertFalse($this->resolver->isRequired('foo'));
- }
-
- public function testIsNotRequiredAfterClear()
- {
- $this->assertFalse($this->resolver->isRequired('foo'));
- $this->resolver->setRequired('foo');
- $this->resolver->clear();
- $this->assertFalse($this->resolver->isRequired('foo'));
- }
-
- public function testGetRequiredOptions()
- {
- $this->resolver->setRequired(array('foo', 'bar'));
- $this->resolver->setDefault('bam', 'baz');
- $this->resolver->setDefault('foo', 'boo');
-
- $this->assertSame(array('foo', 'bar'), $this->resolver->getRequiredOptions());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // isMissing()/getMissingOptions()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testIsMissingIfNotSet()
- {
- $this->assertFalse($this->resolver->isMissing('foo'));
- $this->resolver->setRequired('foo');
- $this->assertTrue($this->resolver->isMissing('foo'));
- }
-
- public function testIsNotMissingIfSet()
- {
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertFalse($this->resolver->isMissing('foo'));
- $this->resolver->setRequired('foo');
- $this->assertFalse($this->resolver->isMissing('foo'));
- }
-
- public function testIsNotMissingAfterRemove()
- {
- $this->resolver->setRequired('foo');
- $this->resolver->remove('foo');
- $this->assertFalse($this->resolver->isMissing('foo'));
- }
-
- public function testIsNotMissingAfterClear()
- {
- $this->resolver->setRequired('foo');
- $this->resolver->clear();
- $this->assertFalse($this->resolver->isRequired('foo'));
- }
-
- public function testGetMissingOptions()
- {
- $this->resolver->setRequired(array('foo', 'bar'));
- $this->resolver->setDefault('bam', 'baz');
- $this->resolver->setDefault('foo', 'boo');
-
- $this->assertSame(array('bar'), $this->resolver->getMissingOptions());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // setDefined()/isDefined()/getDefinedOptions()
- ////////////////////////////////////////////////////////////////////////////
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfSetDefinedFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->setDefined('bar');
- });
-
- $this->resolver->resolve();
- }
-
- public function testDefinedOptionsNotIncludedInResolvedOptions()
- {
- $this->resolver->setDefined('foo');
-
- $this->assertSame(array(), $this->resolver->resolve());
- }
-
- public function testDefinedOptionsIncludedIfDefaultSetBefore()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setDefined('foo');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testDefinedOptionsIncludedIfDefaultSetAfter()
- {
- $this->resolver->setDefined('foo');
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testDefinedOptionsIncludedIfPassedToResolve()
- {
- $this->resolver->setDefined('foo');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve(array('foo' => 'bar')));
- }
-
- public function testIsDefined()
- {
- $this->assertFalse($this->resolver->isDefined('foo'));
- $this->resolver->setDefined('foo');
- $this->assertTrue($this->resolver->isDefined('foo'));
- }
-
- public function testLazyOptionsAreDefined()
- {
- $this->assertFalse($this->resolver->isDefined('foo'));
- $this->resolver->setDefault('foo', function (Options $options) {});
- $this->assertTrue($this->resolver->isDefined('foo'));
- }
-
- public function testRequiredOptionsAreDefined()
- {
- $this->assertFalse($this->resolver->isDefined('foo'));
- $this->resolver->setRequired('foo');
- $this->assertTrue($this->resolver->isDefined('foo'));
- }
-
- public function testSetOptionsAreDefined()
- {
- $this->assertFalse($this->resolver->isDefined('foo'));
- $this->resolver->setDefault('foo', 'bar');
- $this->assertTrue($this->resolver->isDefined('foo'));
- }
-
- public function testGetDefinedOptions()
- {
- $this->resolver->setDefined(array('foo', 'bar'));
- $this->resolver->setDefault('baz', 'bam');
- $this->resolver->setRequired('boo');
-
- $this->assertSame(array('foo', 'bar', 'baz', 'boo'), $this->resolver->getDefinedOptions());
- }
-
- public function testRemovedOptionsAreNotDefined()
- {
- $this->assertFalse($this->resolver->isDefined('foo'));
- $this->resolver->setDefined('foo');
- $this->assertTrue($this->resolver->isDefined('foo'));
- $this->resolver->remove('foo');
- $this->assertFalse($this->resolver->isDefined('foo'));
- }
-
- public function testClearedOptionsAreNotDefined()
- {
- $this->assertFalse($this->resolver->isDefined('foo'));
- $this->resolver->setDefined('foo');
- $this->assertTrue($this->resolver->isDefined('foo'));
- $this->resolver->clear();
- $this->assertFalse($this->resolver->isDefined('foo'));
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // setAllowedTypes()
- ////////////////////////////////////////////////////////////////////////////
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- */
- public function testSetAllowedTypesFailsIfUnknownOption()
- {
- $this->resolver->setAllowedTypes('foo', 'string');
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfSetAllowedTypesFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->setAllowedTypes('bar', 'string');
- });
-
- $this->resolver->setDefault('bar', 'baz');
-
- $this->resolver->resolve();
- }
-
- /**
- * @dataProvider provideInvalidTypes
- */
- public function testResolveFailsIfInvalidType($actualType, $allowedType, $exceptionMessage)
- {
- $this->resolver->setDefined('option');
- $this->resolver->setAllowedTypes('option', $allowedType);
- $this->setExpectedException('Symfony\Component\OptionsResolver\Exception\InvalidOptionsException', $exceptionMessage);
- $this->resolver->resolve(array('option' => $actualType));
- }
-
- public function provideInvalidTypes()
- {
- return array(
- array(true, 'string', 'The option "option" with value true is expected to be of type "string", but is of type "boolean".'),
- array(false, 'string', 'The option "option" with value false is expected to be of type "string", but is of type "boolean".'),
- array(fopen(__FILE__, 'r'), 'string', 'The option "option" with value resource is expected to be of type "string", but is of type "resource".'),
- array(array(), 'string', 'The option "option" with value array is expected to be of type "string", but is of type "array".'),
- array(new OptionsResolver(), 'string', 'The option "option" with value Symfony\Component\OptionsResolver\OptionsResolver is expected to be of type "string", but is of type "Symfony\Component\OptionsResolver\OptionsResolver".'),
- array(42, 'string', 'The option "option" with value 42 is expected to be of type "string", but is of type "integer".'),
- array(null, 'string', 'The option "option" with value null is expected to be of type "string", but is of type "NULL".'),
- array('bar', '\stdClass', 'The option "option" with value "bar" is expected to be of type "\stdClass", but is of type "string".'),
- );
- }
-
- public function testResolveSucceedsIfValidType()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedTypes('foo', 'string');
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- * @expectedExceptionMessage The option "foo" with value 42 is expected to be of type "string" or "bool", but is of type "integer".
- */
- public function testResolveFailsIfInvalidTypeMultiple()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->setAllowedTypes('foo', array('string', 'bool'));
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfValidTypeMultiple()
- {
- $this->resolver->setDefault('foo', true);
- $this->resolver->setAllowedTypes('foo', array('string', 'bool'));
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- public function testResolveSucceedsIfInstanceOfClass()
- {
- $this->resolver->setDefault('foo', new \stdClass());
- $this->resolver->setAllowedTypes('foo', '\stdClass');
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // addAllowedTypes()
- ////////////////////////////////////////////////////////////////////////////
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- */
- public function testAddAllowedTypesFailsIfUnknownOption()
- {
- $this->resolver->addAllowedTypes('foo', 'string');
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfAddAllowedTypesFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->addAllowedTypes('bar', 'string');
- });
-
- $this->resolver->setDefault('bar', 'baz');
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfInvalidAddedType()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->addAllowedTypes('foo', 'string');
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfValidAddedType()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->addAllowedTypes('foo', 'string');
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfInvalidAddedTypeMultiple()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->addAllowedTypes('foo', array('string', 'bool'));
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfValidAddedTypeMultiple()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->addAllowedTypes('foo', array('string', 'bool'));
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- public function testAddAllowedTypesDoesNotOverwrite()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedTypes('foo', 'string');
- $this->resolver->addAllowedTypes('foo', 'bool');
-
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- public function testAddAllowedTypesDoesNotOverwrite2()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedTypes('foo', 'string');
- $this->resolver->addAllowedTypes('foo', 'bool');
-
- $this->resolver->setDefault('foo', false);
-
- $this->assertNotEmpty($this->resolver->resolve());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // setAllowedValues()
- ////////////////////////////////////////////////////////////////////////////
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- */
- public function testSetAllowedValuesFailsIfUnknownOption()
- {
- $this->resolver->setAllowedValues('foo', 'bar');
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfSetAllowedValuesFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->setAllowedValues('bar', 'baz');
- });
-
- $this->resolver->setDefault('bar', 'baz');
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- * @expectedExceptionMessage The option "foo" with value 42 is invalid. Accepted values are: "bar".
- */
- public function testResolveFailsIfInvalidValue()
- {
- $this->resolver->setDefined('foo');
- $this->resolver->setAllowedValues('foo', 'bar');
-
- $this->resolver->resolve(array('foo' => 42));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- * @expectedExceptionMessage The option "foo" with value null is invalid. Accepted values are: "bar".
- */
- public function testResolveFailsIfInvalidValueIsNull()
- {
- $this->resolver->setDefault('foo', null);
- $this->resolver->setAllowedValues('foo', 'bar');
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfInvalidValueStrict()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->setAllowedValues('foo', '42');
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfValidValue()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', 'bar');
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testResolveSucceedsIfValidValueIsNull()
- {
- $this->resolver->setDefault('foo', null);
- $this->resolver->setAllowedValues('foo', null);
-
- $this->assertEquals(array('foo' => null), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- * @expectedExceptionMessage The option "foo" with value 42 is invalid. Accepted values are: "bar", false, null.
- */
- public function testResolveFailsIfInvalidValueMultiple()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->setAllowedValues('foo', array('bar', false, null));
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfValidValueMultiple()
- {
- $this->resolver->setDefault('foo', 'baz');
- $this->resolver->setAllowedValues('foo', array('bar', 'baz'));
-
- $this->assertEquals(array('foo' => 'baz'), $this->resolver->resolve());
- }
-
- public function testResolveFailsIfClosureReturnsFalse()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->setAllowedValues('foo', function ($value) use (&$passedValue) {
- $passedValue = $value;
-
- return false;
- });
-
- try {
- $this->resolver->resolve();
- $this->fail('Should fail');
- } catch (InvalidOptionsException $e) {
- }
-
- $this->assertSame(42, $passedValue);
- }
-
- public function testResolveSucceedsIfClosureReturnsTrue()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', function ($value) use (&$passedValue) {
- $passedValue = $value;
-
- return true;
- });
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- $this->assertSame('bar', $passedValue);
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfAllClosuresReturnFalse()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->setAllowedValues('foo', array(
- function () { return false; },
- function () { return false; },
- function () { return false; },
- ));
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfAnyClosureReturnsTrue()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', array(
- function () { return false; },
- function () { return true; },
- function () { return false; },
- ));
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // addAllowedValues()
- ////////////////////////////////////////////////////////////////////////////
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- */
- public function testAddAllowedValuesFailsIfUnknownOption()
- {
- $this->resolver->addAllowedValues('foo', 'bar');
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfAddAllowedValuesFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->addAllowedValues('bar', 'baz');
- });
-
- $this->resolver->setDefault('bar', 'baz');
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfInvalidAddedValue()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->addAllowedValues('foo', 'bar');
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfValidAddedValue()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->addAllowedValues('foo', 'bar');
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testResolveSucceedsIfValidAddedValueIsNull()
- {
- $this->resolver->setDefault('foo', null);
- $this->resolver->addAllowedValues('foo', null);
-
- $this->assertEquals(array('foo' => null), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfInvalidAddedValueMultiple()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->addAllowedValues('foo', array('bar', 'baz'));
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfValidAddedValueMultiple()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->addAllowedValues('foo', array('bar', 'baz'));
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testAddAllowedValuesDoesNotOverwrite()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', 'bar');
- $this->resolver->addAllowedValues('foo', 'baz');
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testAddAllowedValuesDoesNotOverwrite2()
- {
- $this->resolver->setDefault('foo', 'baz');
- $this->resolver->setAllowedValues('foo', 'bar');
- $this->resolver->addAllowedValues('foo', 'baz');
-
- $this->assertEquals(array('foo' => 'baz'), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testResolveFailsIfAllAddedClosuresReturnFalse()
- {
- $this->resolver->setDefault('foo', 42);
- $this->resolver->setAllowedValues('foo', function () { return false; });
- $this->resolver->addAllowedValues('foo', function () { return false; });
-
- $this->resolver->resolve();
- }
-
- public function testResolveSucceedsIfAnyAddedClosureReturnsTrue()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', function () { return false; });
- $this->resolver->addAllowedValues('foo', function () { return true; });
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testResolveSucceedsIfAnyAddedClosureReturnsTrue2()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', function () { return true; });
- $this->resolver->addAllowedValues('foo', function () { return false; });
-
- $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // setNormalizer()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testSetNormalizerReturnsThis()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->assertSame($this->resolver, $this->resolver->setNormalizer('foo', function () {}));
- }
-
- public function testSetNormalizerClosure()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setNormalizer('foo', function () {
- return 'normalized';
- });
-
- $this->assertEquals(array('foo' => 'normalized'), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException
- */
- public function testSetNormalizerFailsIfUnknownOption()
- {
- $this->resolver->setNormalizer('foo', function () {});
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfSetNormalizerFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->setNormalizer('foo', function () {});
- });
-
- $this->resolver->setDefault('bar', 'baz');
-
- $this->resolver->resolve();
- }
-
- public function testNormalizerReceivesSetOption()
- {
- $this->resolver->setDefault('foo', 'bar');
-
- $this->resolver->setNormalizer('foo', function (Options $options, $value) {
- return 'normalized['.$value.']';
- });
-
- $this->assertEquals(array('foo' => 'normalized[bar]'), $this->resolver->resolve());
- }
-
- public function testNormalizerReceivesPassedOption()
- {
- $this->resolver->setDefault('foo', 'bar');
-
- $this->resolver->setNormalizer('foo', function (Options $options, $value) {
- return 'normalized['.$value.']';
- });
-
- $resolved = $this->resolver->resolve(array('foo' => 'baz'));
-
- $this->assertEquals(array('foo' => 'normalized[baz]'), $resolved);
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testValidateTypeBeforeNormalization()
- {
- $this->resolver->setDefault('foo', 'bar');
-
- $this->resolver->setAllowedTypes('foo', 'int');
-
- $this->resolver->setNormalizer('foo', function () {
- \PHPUnit_Framework_Assert::fail('Should not be called.');
- });
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
- */
- public function testValidateValueBeforeNormalization()
- {
- $this->resolver->setDefault('foo', 'bar');
-
- $this->resolver->setAllowedValues('foo', 'baz');
-
- $this->resolver->setNormalizer('foo', function () {
- \PHPUnit_Framework_Assert::fail('Should not be called.');
- });
-
- $this->resolver->resolve();
- }
-
- public function testNormalizerCanAccessOtherOptions()
- {
- $this->resolver->setDefault('default', 'bar');
- $this->resolver->setDefault('norm', 'baz');
-
- $this->resolver->setNormalizer('norm', function (Options $options) {
- /* @var \PHPUnit_Framework_TestCase $test */
- \PHPUnit_Framework_Assert::assertSame('bar', $options['default']);
-
- return 'normalized';
- });
-
- $this->assertEquals(array(
- 'default' => 'bar',
- 'norm' => 'normalized',
- ), $this->resolver->resolve());
- }
-
- public function testNormalizerCanAccessLazyOptions()
- {
- $this->resolver->setDefault('lazy', function (Options $options) {
- return 'bar';
- });
- $this->resolver->setDefault('norm', 'baz');
-
- $this->resolver->setNormalizer('norm', function (Options $options) {
- /* @var \PHPUnit_Framework_TestCase $test */
- \PHPUnit_Framework_Assert::assertEquals('bar', $options['lazy']);
-
- return 'normalized';
- });
-
- $this->assertEquals(array(
- 'lazy' => 'bar',
- 'norm' => 'normalized',
- ), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException
- */
- public function testFailIfCyclicDependencyBetweenNormalizers()
- {
- $this->resolver->setDefault('norm1', 'bar');
- $this->resolver->setDefault('norm2', 'baz');
-
- $this->resolver->setNormalizer('norm1', function (Options $options) {
- $options['norm2'];
- });
-
- $this->resolver->setNormalizer('norm2', function (Options $options) {
- $options['norm1'];
- });
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException
- */
- public function testFailIfCyclicDependencyBetweenNormalizerAndLazyOption()
- {
- $this->resolver->setDefault('lazy', function (Options $options) {
- $options['norm'];
- });
-
- $this->resolver->setDefault('norm', 'baz');
-
- $this->resolver->setNormalizer('norm', function (Options $options) {
- $options['lazy'];
- });
-
- $this->resolver->resolve();
- }
-
- public function testCatchedExceptionFromNormalizerDoesNotCrashOptionResolver()
- {
- $throw = true;
-
- $this->resolver->setDefaults(array('catcher' => null, 'thrower' => null));
-
- $this->resolver->setNormalizer('catcher', function (Options $options) {
- try {
- return $options['thrower'];
- } catch(\Exception $e) {
- return false;
- }
- });
-
- $this->resolver->setNormalizer('thrower', function (Options $options) use (&$throw) {
- if ($throw) {
- $throw = false;
- throw new \UnexpectedValueException('throwing');
- }
-
- return true;
- });
-
- $this->resolver->resolve();
- }
-
- public function testCatchedExceptionFromLazyDoesNotCrashOptionResolver()
- {
- $throw = true;
-
- $this->resolver->setDefault('catcher', function (Options $options) {
- try {
- return $options['thrower'];
- } catch(\Exception $e) {
- return false;
- }
- });
-
- $this->resolver->setDefault('thrower', function (Options $options) use (&$throw) {
- if ($throw) {
- $throw = false;
- throw new \UnexpectedValueException('throwing');
- }
-
- return true;
- });
-
- $this->resolver->resolve();
- }
-
- public function testInvokeEachNormalizerOnlyOnce()
- {
- $calls = 0;
-
- $this->resolver->setDefault('norm1', 'bar');
- $this->resolver->setDefault('norm2', 'baz');
-
- $this->resolver->setNormalizer('norm1', function ($options) use (&$calls) {
- \PHPUnit_Framework_Assert::assertSame(1, ++$calls);
-
- $options['norm2'];
- });
- $this->resolver->setNormalizer('norm2', function () use (&$calls) {
- \PHPUnit_Framework_Assert::assertSame(2, ++$calls);
- });
-
- $this->resolver->resolve();
-
- $this->assertSame(2, $calls);
- }
-
- public function testNormalizerNotCalledForUnsetOptions()
- {
- $this->resolver->setDefined('norm');
-
- $this->resolver->setNormalizer('norm', function () {
- \PHPUnit_Framework_Assert::fail('Should not be called.');
- });
-
- $this->assertEmpty($this->resolver->resolve());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // setDefaults()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testSetDefaultsReturnsThis()
- {
- $this->assertSame($this->resolver, $this->resolver->setDefaults(array('foo', 'bar')));
- }
-
- public function testSetDefaults()
- {
- $this->resolver->setDefault('one', '1');
- $this->resolver->setDefault('two', 'bar');
-
- $this->resolver->setDefaults(array(
- 'two' => '2',
- 'three' => '3',
- ));
-
- $this->assertEquals(array(
- 'one' => '1',
- 'two' => '2',
- 'three' => '3',
- ), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfSetDefaultsFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->setDefaults(array('two' => '2'));
- });
-
- $this->resolver->resolve();
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // remove()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testRemoveReturnsThis()
- {
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame($this->resolver, $this->resolver->remove('foo'));
- }
-
- public function testRemoveSingleOption()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setDefault('baz', 'boo');
- $this->resolver->remove('foo');
-
- $this->assertSame(array('baz' => 'boo'), $this->resolver->resolve());
- }
-
- public function testRemoveMultipleOptions()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setDefault('baz', 'boo');
- $this->resolver->setDefault('doo', 'dam');
-
- $this->resolver->remove(array('foo', 'doo'));
-
- $this->assertSame(array('baz' => 'boo'), $this->resolver->resolve());
- }
-
- public function testRemoveLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- return 'lazy';
- });
- $this->resolver->remove('foo');
-
- $this->assertSame(array(), $this->resolver->resolve());
- }
-
- public function testRemoveNormalizer()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setNormalizer('foo', function (Options $options, $value) {
- return 'normalized';
- });
- $this->resolver->remove('foo');
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testRemoveAllowedTypes()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedTypes('foo', 'int');
- $this->resolver->remove('foo');
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testRemoveAllowedValues()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', array('baz', 'boo'));
- $this->resolver->remove('foo');
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfRemoveFromLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->remove('bar');
- });
-
- $this->resolver->setDefault('bar', 'baz');
-
- $this->resolver->resolve();
- }
-
- public function testRemoveUnknownOptionIgnored()
- {
- $this->assertNotNull($this->resolver->remove('foo'));
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // clear()
- ////////////////////////////////////////////////////////////////////////////
-
- public function testClearReturnsThis()
- {
- $this->assertSame($this->resolver, $this->resolver->clear());
- }
-
- public function testClearRemovesAllOptions()
- {
- $this->resolver->setDefault('one', 1);
- $this->resolver->setDefault('two', 2);
-
- $this->resolver->clear();
-
- $this->assertEmpty($this->resolver->resolve());
- }
-
- public function testClearLazyOption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- return 'lazy';
- });
- $this->resolver->clear();
-
- $this->assertSame(array(), $this->resolver->resolve());
- }
-
- public function testClearNormalizer()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setNormalizer('foo', function (Options $options, $value) {
- return 'normalized';
- });
- $this->resolver->clear();
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testClearAllowedTypes()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedTypes('foo', 'int');
- $this->resolver->clear();
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- public function testClearAllowedValues()
- {
- $this->resolver->setDefault('foo', 'bar');
- $this->resolver->setAllowedValues('foo', 'baz');
- $this->resolver->clear();
- $this->resolver->setDefault('foo', 'bar');
-
- $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve());
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testFailIfClearFromLazyption()
- {
- $this->resolver->setDefault('foo', function (Options $options) {
- $options->clear();
- });
-
- $this->resolver->setDefault('bar', 'baz');
-
- $this->resolver->resolve();
- }
-
- public function testClearOptionAndNormalizer()
- {
- $this->resolver->setDefault('foo1', 'bar');
- $this->resolver->setNormalizer('foo1', function (Options $options) {
- return '';
- });
- $this->resolver->setDefault('foo2', 'bar');
- $this->resolver->setNormalizer('foo2', function (Options $options) {
- return '';
- });
-
- $this->resolver->clear();
- $this->assertEmpty($this->resolver->resolve());
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // ArrayAccess
- ////////////////////////////////////////////////////////////////////////////
-
- public function testArrayAccess()
- {
- $this->resolver->setDefault('default1', 0);
- $this->resolver->setDefault('default2', 1);
- $this->resolver->setRequired('required');
- $this->resolver->setDefined('defined');
- $this->resolver->setDefault('lazy1', function (Options $options) {
- return 'lazy';
- });
-
- $this->resolver->setDefault('lazy2', function (Options $options) {
- \PHPUnit_Framework_Assert::assertTrue(isset($options['default1']));
- \PHPUnit_Framework_Assert::assertTrue(isset($options['default2']));
- \PHPUnit_Framework_Assert::assertTrue(isset($options['required']));
- \PHPUnit_Framework_Assert::assertTrue(isset($options['lazy1']));
- \PHPUnit_Framework_Assert::assertTrue(isset($options['lazy2']));
- \PHPUnit_Framework_Assert::assertFalse(isset($options['defined']));
-
- \PHPUnit_Framework_Assert::assertSame(0, $options['default1']);
- \PHPUnit_Framework_Assert::assertSame(42, $options['default2']);
- \PHPUnit_Framework_Assert::assertSame('value', $options['required']);
- \PHPUnit_Framework_Assert::assertSame('lazy', $options['lazy1']);
-
- // Obviously $options['lazy'] and $options['defined'] cannot be
- // accessed
- });
-
- $this->resolver->resolve(array('default2' => 42, 'required' => 'value'));
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testArrayAccessGetFailsOutsideResolve()
- {
- $this->resolver->setDefault('default', 0);
-
- $this->resolver['default'];
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testArrayAccessExistsFailsOutsideResolve()
- {
- $this->resolver->setDefault('default', 0);
-
- isset($this->resolver['default']);
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testArrayAccessSetNotSupported()
- {
- $this->resolver['default'] = 0;
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testArrayAccessUnsetNotSupported()
- {
- $this->resolver->setDefault('default', 0);
-
- unset($this->resolver['default']);
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\NoSuchOptionException
- * @expectedExceptionMessage The option "undefined" does not exist. Defined options are: "foo", "lazy".
- */
- public function testFailIfGetNonExisting()
- {
- $this->resolver->setDefault('foo', 'bar');
-
- $this->resolver->setDefault('lazy', function (Options $options) {
- $options['undefined'];
- });
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\NoSuchOptionException
- * @expectedExceptionMessage The optional option "defined" has no value set. You should make sure it is set with "isset" before reading it.
- */
- public function testFailIfGetDefinedButUnset()
- {
- $this->resolver->setDefined('defined');
-
- $this->resolver->setDefault('lazy', function (Options $options) {
- $options['defined'];
- });
-
- $this->resolver->resolve();
- }
-
- /**
- * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException
- */
- public function testFailIfCyclicDependency()
- {
- $this->resolver->setDefault('lazy1', function (Options $options) {
- $options['lazy2'];
- });
-
- $this->resolver->setDefault('lazy2', function (Options $options) {
- $options['lazy1'];
- });
-
- $this->resolver->resolve();
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Countable
- ////////////////////////////////////////////////////////////////////////////
-
- public function testCount()
- {
- $this->resolver->setDefault('default', 0);
- $this->resolver->setRequired('required');
- $this->resolver->setDefined('defined');
- $this->resolver->setDefault('lazy1', function () {});
-
- $this->resolver->setDefault('lazy2', function (Options $options) {
- \PHPUnit_Framework_Assert::assertCount(4, $options);
- });
-
- $this->assertCount(4, $this->resolver->resolve(array('required' => 'value')));
- }
-
- /**
- * In resolve() we count the options that are actually set (which may be
- * only a subset of the defined options). Outside of resolve(), it's not
- * clear what is counted.
- *
- * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException
- */
- public function testCountFailsOutsideResolve()
- {
- $this->resolver->setDefault('foo', 0);
- $this->resolver->setRequired('bar');
- $this->resolver->setDefined('bar');
- $this->resolver->setDefault('lazy1', function () {});
-
- count($this->resolver);
- }
-}
diff --git a/library/symfony/options-resolver/phpunit.xml.dist b/library/symfony/options-resolver/phpunit.xml.dist
deleted file mode 100644
index abf84614b..000000000
--- a/library/symfony/options-resolver/phpunit.xml.dist
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
- backupGlobals="false"
- colors="true"
- bootstrap="vendor/autoload.php"
->
- <php>
- <ini name="error_reporting" value="-1" />
- </php>
-
- <testsuites>
- <testsuite name="Symfony OptionsResolver Component Test Suite">
- <directory>./Tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./</directory>
- <exclude>
- <directory>./Resources</directory>
- <directory>./Tests</directory>
- <directory>./vendor</directory>
- </exclude>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/library/symfony/process/CHANGELOG.md b/library/symfony/process/CHANGELOG.md
deleted file mode 100644
index 2f3c1beb7..000000000
--- a/library/symfony/process/CHANGELOG.md
+++ /dev/null
@@ -1,40 +0,0 @@
-CHANGELOG
-=========
-
-2.5.0
------
-
- * added support for PTY mode
- * added the convenience method "mustRun"
- * deprecation: Process::setStdin() is deprecated in favor of Process::setInput()
- * deprecation: Process::getStdin() is deprecated in favor of Process::getInput()
- * deprecation: Process::setInput() and ProcessBuilder::setInput() do not accept non-scalar types
-
-2.4.0
------
-
- * added the ability to define an idle timeout
-
-2.3.0
------
-
- * added ProcessUtils::escapeArgument() to fix the bug in escapeshellarg() function on Windows
- * added Process::signal()
- * added Process::getPid()
- * added support for a TTY mode
-
-2.2.0
------
-
- * added ProcessBuilder::setArguments() to reset the arguments on a builder
- * added a way to retrieve the standard and error output incrementally
- * added Process:restart()
-
-2.1.0
------
-
- * added support for non-blocking processes (start(), wait(), isRunning(), stop())
- * enhanced Windows compatibility
- * added Process::getExitCodeText() that returns a string representation for
- the exit code returned by the process
- * added ProcessBuilder
diff --git a/library/symfony/process/Exception/ExceptionInterface.php b/library/symfony/process/Exception/ExceptionInterface.php
deleted file mode 100644
index 75c1c9e5d..000000000
--- a/library/symfony/process/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Exception;
-
-/**
- * Marker Interface for the Process Component.
- *
- * @author Johannes M. Schmitt <schmittjoh@gmail.com>
- */
-interface ExceptionInterface
-{
-}
diff --git a/library/symfony/process/Exception/InvalidArgumentException.php b/library/symfony/process/Exception/InvalidArgumentException.php
deleted file mode 100644
index 926ee2118..000000000
--- a/library/symfony/process/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Exception;
-
-/**
- * InvalidArgumentException for the Process Component.
- *
- * @author Romain Neutron <imprec@gmail.com>
- */
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/library/symfony/process/Exception/LogicException.php b/library/symfony/process/Exception/LogicException.php
deleted file mode 100644
index be3d490dd..000000000
--- a/library/symfony/process/Exception/LogicException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Exception;
-
-/**
- * LogicException for the Process Component.
- *
- * @author Romain Neutron <imprec@gmail.com>
- */
-class LogicException extends \LogicException implements ExceptionInterface
-{
-}
diff --git a/library/symfony/process/Exception/ProcessFailedException.php b/library/symfony/process/Exception/ProcessFailedException.php
deleted file mode 100644
index 328acfde5..000000000
--- a/library/symfony/process/Exception/ProcessFailedException.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Exception;
-
-use Symfony\Component\Process\Process;
-
-/**
- * Exception for failed processes.
- *
- * @author Johannes M. Schmitt <schmittjoh@gmail.com>
- */
-class ProcessFailedException extends RuntimeException
-{
- private $process;
-
- public function __construct(Process $process)
- {
- if ($process->isSuccessful()) {
- throw new InvalidArgumentException('Expected a failed process, but the given process was successful.');
- }
-
- $error = sprintf('The command "%s" failed.'."\n\nExit Code: %s(%s)\n\nWorking directory: %s",
- $process->getCommandLine(),
- $process->getExitCode(),
- $process->getExitCodeText(),
- $process->getWorkingDirectory()
- );
-
- if (!$process->isOutputDisabled()) {
- $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s",
- $process->getOutput(),
- $process->getErrorOutput()
- );
- }
-
- parent::__construct($error);
-
- $this->process = $process;
- }
-
- public function getProcess()
- {
- return $this->process;
- }
-}
diff --git a/library/symfony/process/Exception/ProcessTimedOutException.php b/library/symfony/process/Exception/ProcessTimedOutException.php
deleted file mode 100644
index d45114696..000000000
--- a/library/symfony/process/Exception/ProcessTimedOutException.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Exception;
-
-use Symfony\Component\Process\Process;
-
-/**
- * Exception that is thrown when a process times out.
- *
- * @author Johannes M. Schmitt <schmittjoh@gmail.com>
- */
-class ProcessTimedOutException extends RuntimeException
-{
- const TYPE_GENERAL = 1;
- const TYPE_IDLE = 2;
-
- private $process;
- private $timeoutType;
-
- public function __construct(Process $process, $timeoutType)
- {
- $this->process = $process;
- $this->timeoutType = $timeoutType;
-
- parent::__construct(sprintf(
- 'The process "%s" exceeded the timeout of %s seconds.',
- $process->getCommandLine(),
- $this->getExceededTimeout()
- ));
- }
-
- public function getProcess()
- {
- return $this->process;
- }
-
- public function isGeneralTimeout()
- {
- return $this->timeoutType === self::TYPE_GENERAL;
- }
-
- public function isIdleTimeout()
- {
- return $this->timeoutType === self::TYPE_IDLE;
- }
-
- public function getExceededTimeout()
- {
- switch ($this->timeoutType) {
- case self::TYPE_GENERAL:
- return $this->process->getTimeout();
-
- case self::TYPE_IDLE:
- return $this->process->getIdleTimeout();
-
- default:
- throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType));
- }
- }
-}
diff --git a/library/symfony/process/Exception/RuntimeException.php b/library/symfony/process/Exception/RuntimeException.php
deleted file mode 100644
index adead2536..000000000
--- a/library/symfony/process/Exception/RuntimeException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Exception;
-
-/**
- * RuntimeException for the Process Component.
- *
- * @author Johannes M. Schmitt <schmittjoh@gmail.com>
- */
-class RuntimeException extends \RuntimeException implements ExceptionInterface
-{
-}
diff --git a/library/symfony/process/ExecutableFinder.php b/library/symfony/process/ExecutableFinder.php
deleted file mode 100644
index fa11cb6e4..000000000
--- a/library/symfony/process/ExecutableFinder.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-/**
- * Generic executable finder.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Johannes M. Schmitt <schmittjoh@gmail.com>
- */
-class ExecutableFinder
-{
- private $suffixes = array('.exe', '.bat', '.cmd', '.com');
-
- /**
- * Replaces default suffixes of executable.
- *
- * @param array $suffixes
- */
- public function setSuffixes(array $suffixes)
- {
- $this->suffixes = $suffixes;
- }
-
- /**
- * Adds new possible suffix to check for executable.
- *
- * @param string $suffix
- */
- public function addSuffix($suffix)
- {
- $this->suffixes[] = $suffix;
- }
-
- /**
- * Finds an executable by name.
- *
- * @param string $name The executable name (without the extension)
- * @param string $default The default to return if no executable is found
- * @param array $extraDirs Additional dirs to check into
- *
- * @return string The executable path or default value
- */
- public function find($name, $default = null, array $extraDirs = array())
- {
- if (ini_get('open_basedir')) {
- $searchPath = explode(PATH_SEPARATOR, ini_get('open_basedir'));
- $dirs = array();
- foreach ($searchPath as $path) {
- // Silencing against https://bugs.php.net/69240
- if (@is_dir($path)) {
- $dirs[] = $path;
- } else {
- if (basename($path) == $name && is_executable($path)) {
- return $path;
- }
- }
- }
- } else {
- $dirs = array_merge(
- explode(PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')),
- $extraDirs
- );
- }
-
- $suffixes = array('');
- if ('\\' === DIRECTORY_SEPARATOR) {
- $pathExt = getenv('PATHEXT');
- $suffixes = $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes;
- }
- foreach ($suffixes as $suffix) {
- foreach ($dirs as $dir) {
- if (is_file($file = $dir.DIRECTORY_SEPARATOR.$name.$suffix) && ('\\' === DIRECTORY_SEPARATOR || is_executable($file))) {
- return $file;
- }
- }
- }
-
- return $default;
- }
-}
diff --git a/library/symfony/process/PhpExecutableFinder.php b/library/symfony/process/PhpExecutableFinder.php
deleted file mode 100644
index fb297825f..000000000
--- a/library/symfony/process/PhpExecutableFinder.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-/**
- * An executable finder specifically designed for the PHP executable.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Johannes M. Schmitt <schmittjoh@gmail.com>
- */
-class PhpExecutableFinder
-{
- private $executableFinder;
-
- public function __construct()
- {
- $this->executableFinder = new ExecutableFinder();
- }
-
- /**
- * Finds The PHP executable.
- *
- * @param bool $includeArgs Whether or not include command arguments
- *
- * @return string|false The PHP executable path or false if it cannot be found
- */
- public function find($includeArgs = true)
- {
- $args = $this->findArguments();
- $args = $includeArgs && $args ? ' '.implode(' ', $args) : '';
-
- // HHVM support
- if (defined('HHVM_VERSION')) {
- return (getenv('PHP_BINARY') ?: PHP_BINARY).$args;
- }
-
- // PHP_BINARY return the current sapi executable
- if (defined('PHP_BINARY') && PHP_BINARY && in_array(PHP_SAPI, array('cli', 'cli-server', 'phpdbg')) && is_file(PHP_BINARY)) {
- return PHP_BINARY.$args;
- }
-
- if ($php = getenv('PHP_PATH')) {
- if (!is_executable($php)) {
- return false;
- }
-
- return $php;
- }
-
- if ($php = getenv('PHP_PEAR_PHP_BIN')) {
- if (is_executable($php)) {
- return $php;
- }
- }
-
- $dirs = array(PHP_BINDIR);
- if ('\\' === DIRECTORY_SEPARATOR) {
- $dirs[] = 'C:\xampp\php\\';
- }
-
- return $this->executableFinder->find('php', false, $dirs);
- }
-
- /**
- * Finds the PHP executable arguments.
- *
- * @return array The PHP executable arguments
- */
- public function findArguments()
- {
- $arguments = array();
-
- if (defined('HHVM_VERSION')) {
- $arguments[] = '--php';
- } elseif ('phpdbg' === PHP_SAPI) {
- $arguments[] = '-qrr';
- }
-
- return $arguments;
- }
-}
diff --git a/library/symfony/process/PhpProcess.php b/library/symfony/process/PhpProcess.php
deleted file mode 100644
index 8333412f4..000000000
--- a/library/symfony/process/PhpProcess.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-use Symfony\Component\Process\Exception\RuntimeException;
-
-/**
- * PhpProcess runs a PHP script in an independent process.
- *
- * $p = new PhpProcess('<?php echo "foo"; ?>');
- * $p->run();
- * print $p->getOutput()."\n";
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-class PhpProcess extends Process
-{
- /**
- * Constructor.
- *
- * @param string $script The PHP script to run (as a string)
- * @param string|null $cwd The working directory or null to use the working dir of the current PHP process
- * @param array|null $env The environment variables or null to use the same environment as the current PHP process
- * @param int $timeout The timeout in seconds
- * @param array $options An array of options for proc_open
- */
- public function __construct($script, $cwd = null, array $env = null, $timeout = 120, array $options = array())
- {
- $executableFinder = new PhpExecutableFinder();
- if (false === $php = $executableFinder->find()) {
- $php = null;
- }
- if ('phpdbg' === PHP_SAPI) {
- $file = tempnam(sys_get_temp_dir(), 'dbg');
- file_put_contents($file, $script);
- register_shutdown_function('unlink', $file);
- $php .= ' '.ProcessUtils::escapeArgument($file);
- $script = null;
- }
-
- parent::__construct($php, $cwd, $env, $script, $timeout, $options);
- }
-
- /**
- * Sets the path to the PHP binary to use.
- */
- public function setPhpBinary($php)
- {
- $this->setCommandLine($php);
- }
-
- /**
- * {@inheritdoc}
- */
- public function start($callback = null)
- {
- if (null === $this->getCommandLine()) {
- throw new RuntimeException('Unable to find the PHP executable.');
- }
-
- parent::start($callback);
- }
-}
diff --git a/library/symfony/process/Pipes/AbstractPipes.php b/library/symfony/process/Pipes/AbstractPipes.php
deleted file mode 100644
index 1ca85739f..000000000
--- a/library/symfony/process/Pipes/AbstractPipes.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Pipes;
-
-/**
- * @author Romain Neutron <imprec@gmail.com>
- *
- * @internal
- */
-abstract class AbstractPipes implements PipesInterface
-{
- /** @var array */
- public $pipes = array();
-
- /** @var string */
- protected $inputBuffer = '';
- /** @var resource|null */
- protected $input;
-
- /** @var bool */
- private $blocked = true;
-
- /**
- * {@inheritdoc}
- */
- public function close()
- {
- foreach ($this->pipes as $pipe) {
- fclose($pipe);
- }
- $this->pipes = array();
- }
-
- /**
- * Returns true if a system call has been interrupted.
- *
- * @return bool
- */
- protected function hasSystemCallBeenInterrupted()
- {
- $lastError = error_get_last();
-
- // stream_select returns false when the `select` system call is interrupted by an incoming signal
- return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call');
- }
-
- /**
- * Unblocks streams.
- */
- protected function unblock()
- {
- if (!$this->blocked) {
- return;
- }
-
- foreach ($this->pipes as $pipe) {
- stream_set_blocking($pipe, 0);
- }
- if (null !== $this->input) {
- stream_set_blocking($this->input, 0);
- }
-
- $this->blocked = false;
- }
-}
diff --git a/library/symfony/process/Pipes/PipesInterface.php b/library/symfony/process/Pipes/PipesInterface.php
deleted file mode 100644
index 09d3f61d6..000000000
--- a/library/symfony/process/Pipes/PipesInterface.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Pipes;
-
-/**
- * PipesInterface manages descriptors and pipes for the use of proc_open.
- *
- * @author Romain Neutron <imprec@gmail.com>
- *
- * @internal
- */
-interface PipesInterface
-{
- const CHUNK_SIZE = 16384;
-
- /**
- * Returns an array of descriptors for the use of proc_open.
- *
- * @return array
- */
- public function getDescriptors();
-
- /**
- * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
- *
- * @return string[]
- */
- public function getFiles();
-
- /**
- * Reads data in file handles and pipes.
- *
- * @param bool $blocking Whether to use blocking calls or not.
- * @param bool $close Whether to close pipes if they've reached EOF.
- *
- * @return string[] An array of read data indexed by their fd.
- */
- public function readAndWrite($blocking, $close = false);
-
- /**
- * Returns if the current state has open file handles or pipes.
- *
- * @return bool
- */
- public function areOpen();
-
- /**
- * Closes file handles and pipes.
- */
- public function close();
-}
diff --git a/library/symfony/process/Pipes/UnixPipes.php b/library/symfony/process/Pipes/UnixPipes.php
deleted file mode 100644
index f8a0d1997..000000000
--- a/library/symfony/process/Pipes/UnixPipes.php
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Pipes;
-
-use Symfony\Component\Process\Process;
-
-/**
- * UnixPipes implementation uses unix pipes as handles.
- *
- * @author Romain Neutron <imprec@gmail.com>
- *
- * @internal
- */
-class UnixPipes extends AbstractPipes
-{
- /** @var bool */
- private $ttyMode;
- /** @var bool */
- private $ptyMode;
- /** @var bool */
- private $disableOutput;
-
- public function __construct($ttyMode, $ptyMode, $input, $disableOutput)
- {
- $this->ttyMode = (bool) $ttyMode;
- $this->ptyMode = (bool) $ptyMode;
- $this->disableOutput = (bool) $disableOutput;
-
- if (is_resource($input)) {
- $this->input = $input;
- } else {
- $this->inputBuffer = (string) $input;
- }
- }
-
- public function __destruct()
- {
- $this->close();
- }
-
- /**
- * {@inheritdoc}
- */
- public function getDescriptors()
- {
- if ($this->disableOutput) {
- $nullstream = fopen('/dev/null', 'c');
-
- return array(
- array('pipe', 'r'),
- $nullstream,
- $nullstream,
- );
- }
-
- if ($this->ttyMode) {
- return array(
- array('file', '/dev/tty', 'r'),
- array('file', '/dev/tty', 'w'),
- array('file', '/dev/tty', 'w'),
- );
- }
-
- if ($this->ptyMode && Process::isPtySupported()) {
- return array(
- array('pty'),
- array('pty'),
- array('pty'),
- );
- }
-
- return array(
- array('pipe', 'r'),
- array('pipe', 'w'), // stdout
- array('pipe', 'w'), // stderr
- );
- }
-
- /**
- * {@inheritdoc}
- */
- public function getFiles()
- {
- return array();
- }
-
- /**
- * {@inheritdoc}
- */
- public function readAndWrite($blocking, $close = false)
- {
- // only stdin is left open, job has been done !
- // we can now close it
- if (1 === count($this->pipes) && array(0) === array_keys($this->pipes)) {
- fclose($this->pipes[0]);
- unset($this->pipes[0]);
- }
-
- if (empty($this->pipes)) {
- return array();
- }
-
- $this->unblock();
-
- $read = array();
-
- if (null !== $this->input) {
- // if input is a resource, let's add it to stream_select argument to
- // fill a buffer
- $r = array_merge($this->pipes, array('input' => $this->input));
- } else {
- $r = $this->pipes;
- }
- // discard read on stdin
- unset($r[0]);
-
- $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null;
- $e = null;
-
- // let's have a look if something changed in streams
- if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
- // if a system call has been interrupted, forget about it, let's try again
- // otherwise, an error occurred, let's reset pipes
- if (!$this->hasSystemCallBeenInterrupted()) {
- $this->pipes = array();
- }
-
- return $read;
- }
-
- // nothing has changed
- if (0 === $n) {
- return $read;
- }
-
- foreach ($r as $pipe) {
- // prior PHP 5.4 the array passed to stream_select is modified and
- // lose key association, we have to find back the key
- $type = (false !== $found = array_search($pipe, $this->pipes)) ? $found : 'input';
- $data = '';
- while ('' !== $dataread = (string) fread($pipe, self::CHUNK_SIZE)) {
- $data .= $dataread;
- }
-
- if ('' !== $data) {
- if ($type === 'input') {
- $this->inputBuffer .= $data;
- } else {
- $read[$type] = $data;
- }
- }
-
- if (false === $data || (true === $close && feof($pipe) && '' === $data)) {
- if ($type === 'input') {
- // no more data to read on input resource
- // use an empty buffer in the next reads
- $this->input = null;
- } else {
- fclose($this->pipes[$type]);
- unset($this->pipes[$type]);
- }
- }
- }
-
- if (null !== $w && 0 < count($w)) {
- while (strlen($this->inputBuffer)) {
- $written = fwrite($w[0], $this->inputBuffer, 2 << 18); // write 512k
- if ($written > 0) {
- $this->inputBuffer = (string) substr($this->inputBuffer, $written);
- } else {
- break;
- }
- }
- }
-
- // no input to read on resource, buffer is empty and stdin still open
- if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) {
- fclose($this->pipes[0]);
- unset($this->pipes[0]);
- }
-
- return $read;
- }
-
- /**
- * {@inheritdoc}
- */
- public function areOpen()
- {
- return (bool) $this->pipes;
- }
-
- /**
- * Creates a new UnixPipes instance.
- *
- * @param Process $process
- * @param string|resource $input
- *
- * @return UnixPipes
- */
- public static function create(Process $process, $input)
- {
- return new static($process->isTty(), $process->isPty(), $input, $process->isOutputDisabled());
- }
-}
diff --git a/library/symfony/process/Pipes/WindowsPipes.php b/library/symfony/process/Pipes/WindowsPipes.php
deleted file mode 100644
index 1472f8c6c..000000000
--- a/library/symfony/process/Pipes/WindowsPipes.php
+++ /dev/null
@@ -1,253 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Pipes;
-
-use Symfony\Component\Process\Process;
-use Symfony\Component\Process\Exception\RuntimeException;
-
-/**
- * WindowsPipes implementation uses temporary files as handles.
- *
- * @see https://bugs.php.net/bug.php?id=51800
- * @see https://bugs.php.net/bug.php?id=65650
- *
- * @author Romain Neutron <imprec@gmail.com>
- *
- * @internal
- */
-class WindowsPipes extends AbstractPipes
-{
- /** @var array */
- private $files = array();
- /** @var array */
- private $fileHandles = array();
- /** @var array */
- private $readBytes = array(
- Process::STDOUT => 0,
- Process::STDERR => 0,
- );
- /** @var bool */
- private $disableOutput;
-
- public function __construct($disableOutput, $input)
- {
- $this->disableOutput = (bool) $disableOutput;
-
- if (!$this->disableOutput) {
- // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
- // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
- //
- // @see https://bugs.php.net/bug.php?id=51800
- $this->files = array(
- Process::STDOUT => tempnam(sys_get_temp_dir(), 'out_sf_proc'),
- Process::STDERR => tempnam(sys_get_temp_dir(), 'err_sf_proc'),
- );
- foreach ($this->files as $offset => $file) {
- if (false === $file || false === $this->fileHandles[$offset] = fopen($file, 'rb')) {
- throw new RuntimeException('A temporary file could not be opened to write the process output to, verify that your TEMP environment variable is writable');
- }
- }
- }
-
- if (is_resource($input)) {
- $this->input = $input;
- } else {
- $this->inputBuffer = $input;
- }
- }
-
- public function __destruct()
- {
- $this->close();
- $this->removeFiles();
- }
-
- /**
- * {@inheritdoc}
- */
- public function getDescriptors()
- {
- if ($this->disableOutput) {
- $nullstream = fopen('NUL', 'c');
-
- return array(
- array('pipe', 'r'),
- $nullstream,
- $nullstream,
- );
- }
-
- // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800)
- // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650
- // So we redirect output within the commandline and pass the nul device to the process
- return array(
- array('pipe', 'r'),
- array('file', 'NUL', 'w'),
- array('file', 'NUL', 'w'),
- );
- }
-
- /**
- * {@inheritdoc}
- */
- public function getFiles()
- {
- return $this->files;
- }
-
- /**
- * {@inheritdoc}
- */
- public function readAndWrite($blocking, $close = false)
- {
- $this->write($blocking, $close);
-
- $read = array();
- $fh = $this->fileHandles;
- foreach ($fh as $type => $fileHandle) {
- if (0 !== fseek($fileHandle, $this->readBytes[$type])) {
- continue;
- }
- $data = '';
- $dataread = null;
- while (!feof($fileHandle)) {
- if (false !== $dataread = fread($fileHandle, self::CHUNK_SIZE)) {
- $data .= $dataread;
- }
- }
- if (0 < $length = strlen($data)) {
- $this->readBytes[$type] += $length;
- $read[$type] = $data;
- }
-
- if (false === $dataread || (true === $close && feof($fileHandle) && '' === $data)) {
- fclose($this->fileHandles[$type]);
- unset($this->fileHandles[$type]);
- }
- }
-
- return $read;
- }
-
- /**
- * {@inheritdoc}
- */
- public function areOpen()
- {
- return (bool) $this->pipes && (bool) $this->fileHandles;
- }
-
- /**
- * {@inheritdoc}
- */
- public function close()
- {
- parent::close();
- foreach ($this->fileHandles as $handle) {
- fclose($handle);
- }
- $this->fileHandles = array();
- }
-
- /**
- * Creates a new WindowsPipes instance.
- *
- * @param Process $process The process
- * @param $input
- *
- * @return WindowsPipes
- */
- public static function create(Process $process, $input)
- {
- return new static($process->isOutputDisabled(), $input);
- }
-
- /**
- * Removes temporary files.
- */
- private function removeFiles()
- {
- foreach ($this->files as $filename) {
- if (file_exists($filename)) {
- @unlink($filename);
- }
- }
- $this->files = array();
- }
-
- /**
- * Writes input to stdin.
- *
- * @param bool $blocking
- * @param bool $close
- */
- private function write($blocking, $close)
- {
- if (empty($this->pipes)) {
- return;
- }
-
- $this->unblock();
-
- $r = null !== $this->input ? array('input' => $this->input) : null;
- $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null;
- $e = null;
-
- // let's have a look if something changed in streams
- if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
- // if a system call has been interrupted, forget about it, let's try again
- // otherwise, an error occurred, let's reset pipes
- if (!$this->hasSystemCallBeenInterrupted()) {
- $this->pipes = array();
- }
-
- return;
- }
-
- // nothing has changed
- if (0 === $n) {
- return;
- }
-
- if (null !== $w && 0 < count($r)) {
- $data = '';
- while ($dataread = fread($r['input'], self::CHUNK_SIZE)) {
- $data .= $dataread;
- }
-
- $this->inputBuffer .= $data;
-
- if (false === $data || (true === $close && feof($r['input']) && '' === $data)) {
- // no more data to read on input resource
- // use an empty buffer in the next reads
- $this->input = null;
- }
- }
-
- if (null !== $w && 0 < count($w)) {
- while (strlen($this->inputBuffer)) {
- $written = fwrite($w[0], $this->inputBuffer, 2 << 18);
- if ($written > 0) {
- $this->inputBuffer = (string) substr($this->inputBuffer, $written);
- } else {
- break;
- }
- }
- }
-
- // no input to read on resource, buffer is empty and stdin still open
- if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) {
- fclose($this->pipes[0]);
- unset($this->pipes[0]);
- }
- }
-}
diff --git a/library/symfony/process/Process.php b/library/symfony/process/Process.php
deleted file mode 100644
index 003b6b7e5..000000000
--- a/library/symfony/process/Process.php
+++ /dev/null
@@ -1,1515 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-use Symfony\Component\Process\Exception\InvalidArgumentException;
-use Symfony\Component\Process\Exception\LogicException;
-use Symfony\Component\Process\Exception\ProcessFailedException;
-use Symfony\Component\Process\Exception\ProcessTimedOutException;
-use Symfony\Component\Process\Exception\RuntimeException;
-use Symfony\Component\Process\Pipes\PipesInterface;
-use Symfony\Component\Process\Pipes\UnixPipes;
-use Symfony\Component\Process\Pipes\WindowsPipes;
-
-/**
- * Process is a thin wrapper around proc_* functions to easily
- * start independent PHP processes.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Romain Neutron <imprec@gmail.com>
- */
-class Process
-{
- const ERR = 'err';
- const OUT = 'out';
-
- const STATUS_READY = 'ready';
- const STATUS_STARTED = 'started';
- const STATUS_TERMINATED = 'terminated';
-
- const STDIN = 0;
- const STDOUT = 1;
- const STDERR = 2;
-
- // Timeout Precision in seconds.
- const TIMEOUT_PRECISION = 0.2;
-
- private $callback;
- private $commandline;
- private $cwd;
- private $env;
- private $input;
- private $starttime;
- private $lastOutputTime;
- private $timeout;
- private $idleTimeout;
- private $options;
- private $exitcode;
- private $fallbackExitcode;
- private $processInformation;
- private $outputDisabled = false;
- private $stdout;
- private $stderr;
- private $enhanceWindowsCompatibility = true;
- private $enhanceSigchildCompatibility;
- private $process;
- private $status = self::STATUS_READY;
- private $incrementalOutputOffset = 0;
- private $incrementalErrorOutputOffset = 0;
- private $tty;
- private $pty;
-
- private $useFileHandles = false;
- /** @var PipesInterface */
- private $processPipes;
-
- private $latestSignal;
-
- private static $sigchild;
-
- /**
- * Exit codes translation table.
- *
- * User-defined errors must use exit codes in the 64-113 range.
- *
- * @var array
- */
- public static $exitCodes = array(
- 0 => 'OK',
- 1 => 'General error',
- 2 => 'Misuse of shell builtins',
-
- 126 => 'Invoked command cannot execute',
- 127 => 'Command not found',
- 128 => 'Invalid exit argument',
-
- // signals
- 129 => 'Hangup',
- 130 => 'Interrupt',
- 131 => 'Quit and dump core',
- 132 => 'Illegal instruction',
- 133 => 'Trace/breakpoint trap',
- 134 => 'Process aborted',
- 135 => 'Bus error: "access to undefined portion of memory object"',
- 136 => 'Floating point exception: "erroneous arithmetic operation"',
- 137 => 'Kill (terminate immediately)',
- 138 => 'User-defined 1',
- 139 => 'Segmentation violation',
- 140 => 'User-defined 2',
- 141 => 'Write to pipe with no one reading',
- 142 => 'Signal raised by alarm',
- 143 => 'Termination (request to terminate)',
- // 144 - not defined
- 145 => 'Child process terminated, stopped (or continued*)',
- 146 => 'Continue if stopped',
- 147 => 'Stop executing temporarily',
- 148 => 'Terminal stop signal',
- 149 => 'Background process attempting to read from tty ("in")',
- 150 => 'Background process attempting to write to tty ("out")',
- 151 => 'Urgent data available on socket',
- 152 => 'CPU time limit exceeded',
- 153 => 'File size limit exceeded',
- 154 => 'Signal raised by timer counting virtual time: "virtual timer expired"',
- 155 => 'Profiling timer expired',
- // 156 - not defined
- 157 => 'Pollable event',
- // 158 - not defined
- 159 => 'Bad syscall',
- );
-
- /**
- * Constructor.
- *
- * @param string $commandline The command line to run
- * @param string|null $cwd The working directory or null to use the working dir of the current PHP process
- * @param array|null $env The environment variables or null to use the same environment as the current PHP process
- * @param string|null $input The input
- * @param int|float|null $timeout The timeout in seconds or null to disable
- * @param array $options An array of options for proc_open
- *
- * @throws RuntimeException When proc_open is not installed
- */
- public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 120, array $options = array())
- {
- if (!function_exists('proc_open')) {
- throw new RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.');
- }
-
- $this->commandline = $commandline;
- $this->cwd = $cwd;
-
- // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started
- // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
- // @see : https://bugs.php.net/bug.php?id=51800
- // @see : https://bugs.php.net/bug.php?id=50524
- if (null === $this->cwd && (defined('ZEND_THREAD_SAFE') || '\\' === DIRECTORY_SEPARATOR)) {
- $this->cwd = getcwd();
- }
- if (null !== $env) {
- $this->setEnv($env);
- }
-
- $this->input = $input;
- $this->setTimeout($timeout);
- $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR;
- $this->pty = false;
- $this->enhanceWindowsCompatibility = true;
- $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled();
- $this->options = array_replace(array('suppress_errors' => true, 'binary_pipes' => true), $options);
- }
-
- public function __destruct()
- {
- // stop() will check if we have a process running.
- $this->stop();
- }
-
- public function __clone()
- {
- $this->resetProcessData();
- }
-
- /**
- * Runs the process.
- *
- * The callback receives the type of output (out or err) and
- * some bytes from the output in real-time. It allows to have feedback
- * from the independent process during execution.
- *
- * The STDOUT and STDERR are also available after the process is finished
- * via the getOutput() and getErrorOutput() methods.
- *
- * @param callable|null $callback A PHP callback to run whenever there is some
- * output available on STDOUT or STDERR
- *
- * @return int The exit status code
- *
- * @throws RuntimeException When process can't be launched
- * @throws RuntimeException When process stopped after receiving signal
- * @throws LogicException In case a callback is provided and output has been disabled
- */
- public function run($callback = null)
- {
- $this->start($callback);
-
- return $this->wait();
- }
-
- /**
- * Runs the process.
- *
- * This is identical to run() except that an exception is thrown if the process
- * exits with a non-zero exit code.
- *
- * @param callable|null $callback
- *
- * @return self
- *
- * @throws RuntimeException if PHP was compiled with --enable-sigchild and the enhanced sigchild compatibility mode is not enabled
- * @throws ProcessFailedException if the process didn't terminate successfully
- */
- public function mustRun($callback = null)
- {
- if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) {
- throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.');
- }
-
- if (0 !== $this->run($callback)) {
- throw new ProcessFailedException($this);
- }
-
- return $this;
- }
-
- /**
- * Starts the process and returns after writing the input to STDIN.
- *
- * This method blocks until all STDIN data is sent to the process then it
- * returns while the process runs in the background.
- *
- * The termination of the process can be awaited with wait().
- *
- * The callback receives the type of output (out or err) and some bytes from
- * the output in real-time while writing the standard input to the process.
- * It allows to have feedback from the independent process during execution.
- * If there is no callback passed, the wait() method can be called
- * with true as a second parameter then the callback will get all data occurred
- * in (and since) the start call.
- *
- * @param callable|null $callback A PHP callback to run whenever there is some
- * output available on STDOUT or STDERR
- *
- * @throws RuntimeException When process can't be launched
- * @throws RuntimeException When process is already running
- * @throws LogicException In case a callback is provided and output has been disabled
- */
- public function start($callback = null)
- {
- if ($this->isRunning()) {
- throw new RuntimeException('Process is already running');
- }
- if ($this->outputDisabled && null !== $callback) {
- throw new LogicException('Output has been disabled, enable it to allow the use of a callback.');
- }
-
- $this->resetProcessData();
- $this->starttime = $this->lastOutputTime = microtime(true);
- $this->callback = $this->buildCallback($callback);
- $descriptors = $this->getDescriptors();
-
- $commandline = $this->commandline;
-
- if ('\\' === DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) {
- $commandline = 'cmd /V:ON /E:ON /D /C "('.$commandline.')';
- foreach ($this->processPipes->getFiles() as $offset => $filename) {
- $commandline .= ' '.$offset.'>'.ProcessUtils::escapeArgument($filename);
- }
- $commandline .= '"';
-
- if (!isset($this->options['bypass_shell'])) {
- $this->options['bypass_shell'] = true;
- }
- }
-
- $ptsWorkaround = null;
-
- if (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
- // Workaround for the bug, when PTS functionality is enabled.
- // @see : https://bugs.php.net/69442
- $ptsWorkaround = fopen(__FILE__, 'r');
- }
-
- $this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options);
-
- if ($ptsWorkaround) {
- fclose($ptsWorkaround);
- }
-
- if (!is_resource($this->process)) {
- throw new RuntimeException('Unable to launch a new process.');
- }
- $this->status = self::STATUS_STARTED;
-
- if ($this->tty) {
- return;
- }
-
- $this->updateStatus(false);
- $this->checkTimeout();
- }
-
- /**
- * Restarts the process.
- *
- * Be warned that the process is cloned before being started.
- *
- * @param callable|null $callback A PHP callback to run whenever there is some
- * output available on STDOUT or STDERR
- *
- * @return Process The new process
- *
- * @throws RuntimeException When process can't be launched
- * @throws RuntimeException When process is already running
- *
- * @see start()
- */
- public function restart($callback = null)
- {
- if ($this->isRunning()) {
- throw new RuntimeException('Process is already running');
- }
-
- $process = clone $this;
- $process->start($callback);
-
- return $process;
- }
-
- /**
- * Waits for the process to terminate.
- *
- * The callback receives the type of output (out or err) and some bytes
- * from the output in real-time while writing the standard input to the process.
- * It allows to have feedback from the independent process during execution.
- *
- * @param callable|null $callback A valid PHP callback
- *
- * @return int The exitcode of the process
- *
- * @throws RuntimeException When process timed out
- * @throws RuntimeException When process stopped after receiving signal
- * @throws LogicException When process is not yet started
- */
- public function wait($callback = null)
- {
- $this->requireProcessIsStarted(__FUNCTION__);
-
- $this->updateStatus(false);
- if (null !== $callback) {
- $this->callback = $this->buildCallback($callback);
- }
-
- do {
- $this->checkTimeout();
- $running = '\\' === DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
- $close = '\\' !== DIRECTORY_SEPARATOR || !$running;
- $this->readPipes(true, $close);
- } while ($running);
-
- while ($this->isRunning()) {
- usleep(1000);
- }
-
- if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) {
- throw new RuntimeException(sprintf('The process has been signaled with signal "%s".', $this->processInformation['termsig']));
- }
-
- return $this->exitcode;
- }
-
- /**
- * Returns the Pid (process identifier), if applicable.
- *
- * @return int|null The process id if running, null otherwise
- *
- * @throws RuntimeException In case --enable-sigchild is activated
- */
- public function getPid()
- {
- if ($this->isSigchildEnabled()) {
- throw new RuntimeException('This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.');
- }
-
- $this->updateStatus(false);
-
- return $this->isRunning() ? $this->processInformation['pid'] : null;
- }
-
- /**
- * Sends a POSIX signal to the process.
- *
- * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
- *
- * @return Process
- *
- * @throws LogicException In case the process is not running
- * @throws RuntimeException In case --enable-sigchild is activated
- * @throws RuntimeException In case of failure
- */
- public function signal($signal)
- {
- $this->doSignal($signal, true);
-
- return $this;
- }
-
- /**
- * Disables fetching output and error output from the underlying process.
- *
- * @return Process
- *
- * @throws RuntimeException In case the process is already running
- * @throws LogicException if an idle timeout is set
- */
- public function disableOutput()
- {
- if ($this->isRunning()) {
- throw new RuntimeException('Disabling output while the process is running is not possible.');
- }
- if (null !== $this->idleTimeout) {
- throw new LogicException('Output can not be disabled while an idle timeout is set.');
- }
-
- $this->outputDisabled = true;
-
- return $this;
- }
-
- /**
- * Enables fetching output and error output from the underlying process.
- *
- * @return Process
- *
- * @throws RuntimeException In case the process is already running
- */
- public function enableOutput()
- {
- if ($this->isRunning()) {
- throw new RuntimeException('Enabling output while the process is running is not possible.');
- }
-
- $this->outputDisabled = false;
-
- return $this;
- }
-
- /**
- * Returns true in case the output is disabled, false otherwise.
- *
- * @return bool
- */
- public function isOutputDisabled()
- {
- return $this->outputDisabled;
- }
-
- /**
- * Returns the current output of the process (STDOUT).
- *
- * @return string The process output
- *
- * @throws LogicException in case the output has been disabled
- * @throws LogicException In case the process is not started
- */
- public function getOutput()
- {
- if ($this->outputDisabled) {
- throw new LogicException('Output has been disabled.');
- }
-
- $this->requireProcessIsStarted(__FUNCTION__);
-
- $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true);
-
- return $this->stdout;
- }
-
- /**
- * Returns the output incrementally.
- *
- * In comparison with the getOutput method which always return the whole
- * output, this one returns the new output since the last call.
- *
- * @throws LogicException in case the output has been disabled
- * @throws LogicException In case the process is not started
- *
- * @return string The process output since the last call
- */
- public function getIncrementalOutput()
- {
- $this->requireProcessIsStarted(__FUNCTION__);
-
- $data = $this->getOutput();
-
- $latest = substr($data, $this->incrementalOutputOffset);
-
- if (false === $latest) {
- return '';
- }
-
- $this->incrementalOutputOffset = strlen($data);
-
- return $latest;
- }
-
- /**
- * Clears the process output.
- *
- * @return Process
- */
- public function clearOutput()
- {
- $this->stdout = '';
- $this->incrementalOutputOffset = 0;
-
- return $this;
- }
-
- /**
- * Returns the current error output of the process (STDERR).
- *
- * @return string The process error output
- *
- * @throws LogicException in case the output has been disabled
- * @throws LogicException In case the process is not started
- */
- public function getErrorOutput()
- {
- if ($this->outputDisabled) {
- throw new LogicException('Output has been disabled.');
- }
-
- $this->requireProcessIsStarted(__FUNCTION__);
-
- $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true);
-
- return $this->stderr;
- }
-
- /**
- * Returns the errorOutput incrementally.
- *
- * In comparison with the getErrorOutput method which always return the
- * whole error output, this one returns the new error output since the last
- * call.
- *
- * @throws LogicException in case the output has been disabled
- * @throws LogicException In case the process is not started
- *
- * @return string The process error output since the last call
- */
- public function getIncrementalErrorOutput()
- {
- $this->requireProcessIsStarted(__FUNCTION__);
-
- $data = $this->getErrorOutput();
-
- $latest = substr($data, $this->incrementalErrorOutputOffset);
-
- if (false === $latest) {
- return '';
- }
-
- $this->incrementalErrorOutputOffset = strlen($data);
-
- return $latest;
- }
-
- /**
- * Clears the process output.
- *
- * @return Process
- */
- public function clearErrorOutput()
- {
- $this->stderr = '';
- $this->incrementalErrorOutputOffset = 0;
-
- return $this;
- }
-
- /**
- * Returns the exit code returned by the process.
- *
- * @return null|int The exit status code, null if the Process is not terminated
- *
- * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled
- */
- public function getExitCode()
- {
- if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) {
- throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.');
- }
-
- $this->updateStatus(false);
-
- return $this->exitcode;
- }
-
- /**
- * Returns a string representation for the exit code returned by the process.
- *
- * This method relies on the Unix exit code status standardization
- * and might not be relevant for other operating systems.
- *
- * @return null|string A string representation for the exit status code, null if the Process is not terminated.
- *
- * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled
- *
- * @see http://tldp.org/LDP/abs/html/exitcodes.html
- * @see http://en.wikipedia.org/wiki/Unix_signal
- */
- public function getExitCodeText()
- {
- if (null === $exitcode = $this->getExitCode()) {
- return;
- }
-
- return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : 'Unknown error';
- }
-
- /**
- * Checks if the process ended successfully.
- *
- * @return bool true if the process ended successfully, false otherwise
- */
- public function isSuccessful()
- {
- return 0 === $this->getExitCode();
- }
-
- /**
- * Returns true if the child process has been terminated by an uncaught signal.
- *
- * It always returns false on Windows.
- *
- * @return bool
- *
- * @throws RuntimeException In case --enable-sigchild is activated
- * @throws LogicException In case the process is not terminated
- */
- public function hasBeenSignaled()
- {
- $this->requireProcessIsTerminated(__FUNCTION__);
-
- if ($this->isSigchildEnabled()) {
- throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.');
- }
-
- $this->updateStatus(false);
-
- return $this->processInformation['signaled'];
- }
-
- /**
- * Returns the number of the signal that caused the child process to terminate its execution.
- *
- * It is only meaningful if hasBeenSignaled() returns true.
- *
- * @return int
- *
- * @throws RuntimeException In case --enable-sigchild is activated
- * @throws LogicException In case the process is not terminated
- */
- public function getTermSignal()
- {
- $this->requireProcessIsTerminated(__FUNCTION__);
-
- if ($this->isSigchildEnabled()) {
- throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.');
- }
-
- $this->updateStatus(false);
-
- return $this->processInformation['termsig'];
- }
-
- /**
- * Returns true if the child process has been stopped by a signal.
- *
- * It always returns false on Windows.
- *
- * @return bool
- *
- * @throws LogicException In case the process is not terminated
- */
- public function hasBeenStopped()
- {
- $this->requireProcessIsTerminated(__FUNCTION__);
-
- $this->updateStatus(false);
-
- return $this->processInformation['stopped'];
- }
-
- /**
- * Returns the number of the signal that caused the child process to stop its execution.
- *
- * It is only meaningful if hasBeenStopped() returns true.
- *
- * @return int
- *
- * @throws LogicException In case the process is not terminated
- */
- public function getStopSignal()
- {
- $this->requireProcessIsTerminated(__FUNCTION__);
-
- $this->updateStatus(false);
-
- return $this->processInformation['stopsig'];
- }
-
- /**
- * Checks if the process is currently running.
- *
- * @return bool true if the process is currently running, false otherwise
- */
- public function isRunning()
- {
- if (self::STATUS_STARTED !== $this->status) {
- return false;
- }
-
- $this->updateStatus(false);
-
- return $this->processInformation['running'];
- }
-
- /**
- * Checks if the process has been started with no regard to the current state.
- *
- * @return bool true if status is ready, false otherwise
- */
- public function isStarted()
- {
- return $this->status != self::STATUS_READY;
- }
-
- /**
- * Checks if the process is terminated.
- *
- * @return bool true if process is terminated, false otherwise
- */
- public function isTerminated()
- {
- $this->updateStatus(false);
-
- return $this->status == self::STATUS_TERMINATED;
- }
-
- /**
- * Gets the process status.
- *
- * The status is one of: ready, started, terminated.
- *
- * @return string The current process status
- */
- public function getStatus()
- {
- $this->updateStatus(false);
-
- return $this->status;
- }
-
- /**
- * Stops the process.
- *
- * @param int|float $timeout The timeout in seconds
- * @param int $signal A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL (9)
- *
- * @return int The exit-code of the process
- */
- public function stop($timeout = 10, $signal = null)
- {
- $timeoutMicro = microtime(true) + $timeout;
- if ($this->isRunning()) {
- // given `SIGTERM` may not be defined and that `proc_terminate` uses the constant value and not the constant itself, we use the same here
- $this->doSignal(15, false);
- do {
- usleep(1000);
- } while ($this->isRunning() && microtime(true) < $timeoutMicro);
-
- if ($this->isRunning() && !$this->isSigchildEnabled()) {
- // Avoid exception here: process is supposed to be running, but it might have stopped just
- // after this line. In any case, let's silently discard the error, we cannot do anything.
- $this->doSignal($signal ?: 9, false);
- }
- }
-
- $this->updateStatus(false);
- if ($this->processInformation['running']) {
- $this->close();
- }
-
- return $this->exitcode;
- }
-
- /**
- * Adds a line to the STDOUT stream.
- *
- * @param string $line The line to append
- */
- public function addOutput($line)
- {
- $this->lastOutputTime = microtime(true);
- $this->stdout .= $line;
- }
-
- /**
- * Adds a line to the STDERR stream.
- *
- * @param string $line The line to append
- */
- public function addErrorOutput($line)
- {
- $this->lastOutputTime = microtime(true);
- $this->stderr .= $line;
- }
-
- /**
- * Gets the command line to be executed.
- *
- * @return string The command to execute
- */
- public function getCommandLine()
- {
- return $this->commandline;
- }
-
- /**
- * Sets the command line to be executed.
- *
- * @param string $commandline The command to execute
- *
- * @return self The current Process instance
- */
- public function setCommandLine($commandline)
- {
- $this->commandline = $commandline;
-
- return $this;
- }
-
- /**
- * Gets the process timeout (max. runtime).
- *
- * @return float|null The timeout in seconds or null if it's disabled
- */
- public function getTimeout()
- {
- return $this->timeout;
- }
-
- /**
- * Gets the process idle timeout (max. time since last output).
- *
- * @return float|null The timeout in seconds or null if it's disabled
- */
- public function getIdleTimeout()
- {
- return $this->idleTimeout;
- }
-
- /**
- * Sets the process timeout (max. runtime).
- *
- * To disable the timeout, set this value to null.
- *
- * @param int|float|null $timeout The timeout in seconds
- *
- * @return self The current Process instance
- *
- * @throws InvalidArgumentException if the timeout is negative
- */
- public function setTimeout($timeout)
- {
- $this->timeout = $this->validateTimeout($timeout);
-
- return $this;
- }
-
- /**
- * Sets the process idle timeout (max. time since last output).
- *
- * To disable the timeout, set this value to null.
- *
- * @param int|float|null $timeout The timeout in seconds
- *
- * @return self The current Process instance.
- *
- * @throws LogicException if the output is disabled
- * @throws InvalidArgumentException if the timeout is negative
- */
- public function setIdleTimeout($timeout)
- {
- if (null !== $timeout && $this->outputDisabled) {
- throw new LogicException('Idle timeout can not be set while the output is disabled.');
- }
-
- $this->idleTimeout = $this->validateTimeout($timeout);
-
- return $this;
- }
-
- /**
- * Enables or disables the TTY mode.
- *
- * @param bool $tty True to enabled and false to disable
- *
- * @return self The current Process instance
- *
- * @throws RuntimeException In case the TTY mode is not supported
- */
- public function setTty($tty)
- {
- if ('\\' === DIRECTORY_SEPARATOR && $tty) {
- throw new RuntimeException('TTY mode is not supported on Windows platform.');
- }
- if ($tty && (!file_exists('/dev/tty') || !is_readable('/dev/tty'))) {
- throw new RuntimeException('TTY mode requires /dev/tty to be readable.');
- }
-
- $this->tty = (bool) $tty;
-
- return $this;
- }
-
- /**
- * Checks if the TTY mode is enabled.
- *
- * @return bool true if the TTY mode is enabled, false otherwise
- */
- public function isTty()
- {
- return $this->tty;
- }
-
- /**
- * Sets PTY mode.
- *
- * @param bool $bool
- *
- * @return self
- */
- public function setPty($bool)
- {
- $this->pty = (bool) $bool;
-
- return $this;
- }
-
- /**
- * Returns PTY state.
- *
- * @return bool
- */
- public function isPty()
- {
- return $this->pty;
- }
-
- /**
- * Gets the working directory.
- *
- * @return string|null The current working directory or null on failure
- */
- public function getWorkingDirectory()
- {
- if (null === $this->cwd) {
- // getcwd() will return false if any one of the parent directories does not have
- // the readable or search mode set, even if the current directory does
- return getcwd() ?: null;
- }
-
- return $this->cwd;
- }
-
- /**
- * Sets the current working directory.
- *
- * @param string $cwd The new working directory
- *
- * @return self The current Process instance
- */
- public function setWorkingDirectory($cwd)
- {
- $this->cwd = $cwd;
-
- return $this;
- }
-
- /**
- * Gets the environment variables.
- *
- * @return array The current environment variables
- */
- public function getEnv()
- {
- return $this->env;
- }
-
- /**
- * Sets the environment variables.
- *
- * An environment variable value should be a string.
- * If it is an array, the variable is ignored.
- *
- * That happens in PHP when 'argv' is registered into
- * the $_ENV array for instance.
- *
- * @param array $env The new environment variables
- *
- * @return self The current Process instance
- */
- public function setEnv(array $env)
- {
- // Process can not handle env values that are arrays
- $env = array_filter($env, function ($value) {
- return !is_array($value);
- });
-
- $this->env = array();
- foreach ($env as $key => $value) {
- $this->env[$key] = (string) $value;
- }
-
- return $this;
- }
-
- /**
- * Gets the contents of STDIN.
- *
- * @return string|null The current contents
- *
- * @deprecated since version 2.5, to be removed in 3.0.
- * Use setInput() instead.
- * This method is deprecated in favor of getInput.
- */
- public function getStdin()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getInput() method instead.', E_USER_DEPRECATED);
-
- return $this->getInput();
- }
-
- /**
- * Gets the Process input.
- *
- * @return null|string The Process input
- */
- public function getInput()
- {
- return $this->input;
- }
-
- /**
- * Sets the contents of STDIN.
- *
- * @param string|null $stdin The new contents
- *
- * @return self The current Process instance
- *
- * @deprecated since version 2.5, to be removed in 3.0.
- * Use setInput() instead.
- *
- * @throws LogicException In case the process is running
- * @throws InvalidArgumentException In case the argument is invalid
- */
- public function setStdin($stdin)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the setInput() method instead.', E_USER_DEPRECATED);
-
- return $this->setInput($stdin);
- }
-
- /**
- * Sets the input.
- *
- * This content will be passed to the underlying process standard input.
- *
- * @param mixed $input The content
- *
- * @return self The current Process instance
- *
- * @throws LogicException In case the process is running
- *
- * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.
- */
- public function setInput($input)
- {
- if ($this->isRunning()) {
- throw new LogicException('Input can not be set while the process is running.');
- }
-
- $this->input = ProcessUtils::validateInput(sprintf('%s::%s', __CLASS__, __FUNCTION__), $input);
-
- return $this;
- }
-
- /**
- * Gets the options for proc_open.
- *
- * @return array The current options
- */
- public function getOptions()
- {
- return $this->options;
- }
-
- /**
- * Sets the options for proc_open.
- *
- * @param array $options The new options
- *
- * @return self The current Process instance
- */
- public function setOptions(array $options)
- {
- $this->options = $options;
-
- return $this;
- }
-
- /**
- * Gets whether or not Windows compatibility is enabled.
- *
- * This is true by default.
- *
- * @return bool
- */
- public function getEnhanceWindowsCompatibility()
- {
- return $this->enhanceWindowsCompatibility;
- }
-
- /**
- * Sets whether or not Windows compatibility is enabled.
- *
- * @param bool $enhance
- *
- * @return self The current Process instance
- */
- public function setEnhanceWindowsCompatibility($enhance)
- {
- $this->enhanceWindowsCompatibility = (bool) $enhance;
-
- return $this;
- }
-
- /**
- * Returns whether sigchild compatibility mode is activated or not.
- *
- * @return bool
- */
- public function getEnhanceSigchildCompatibility()
- {
- return $this->enhanceSigchildCompatibility;
- }
-
- /**
- * Activates sigchild compatibility mode.
- *
- * Sigchild compatibility mode is required to get the exit code and
- * determine the success of a process when PHP has been compiled with
- * the --enable-sigchild option
- *
- * @param bool $enhance
- *
- * @return self The current Process instance
- */
- public function setEnhanceSigchildCompatibility($enhance)
- {
- $this->enhanceSigchildCompatibility = (bool) $enhance;
-
- return $this;
- }
-
- /**
- * Performs a check between the timeout definition and the time the process started.
- *
- * In case you run a background process (with the start method), you should
- * trigger this method regularly to ensure the process timeout
- *
- * @throws ProcessTimedOutException In case the timeout was reached
- */
- public function checkTimeout()
- {
- if ($this->status !== self::STATUS_STARTED) {
- return;
- }
-
- if (null !== $this->timeout && $this->timeout < microtime(true) - $this->starttime) {
- $this->stop(0);
-
- throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_GENERAL);
- }
-
- if (null !== $this->idleTimeout && $this->idleTimeout < microtime(true) - $this->lastOutputTime) {
- $this->stop(0);
-
- throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_IDLE);
- }
- }
-
- /**
- * Returns whether PTY is supported on the current operating system.
- *
- * @return bool
- */
- public static function isPtySupported()
- {
- static $result;
-
- if (null !== $result) {
- return $result;
- }
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- return $result = false;
- }
-
- $proc = @proc_open('echo 1', array(array('pty'), array('pty'), array('pty')), $pipes);
- if (is_resource($proc)) {
- proc_close($proc);
-
- return $result = true;
- }
-
- return $result = false;
- }
-
- /**
- * Creates the descriptors needed by the proc_open.
- *
- * @return array
- */
- private function getDescriptors()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->processPipes = WindowsPipes::create($this, $this->input);
- } else {
- $this->processPipes = UnixPipes::create($this, $this->input);
- }
- $descriptors = $this->processPipes->getDescriptors($this->outputDisabled);
-
- if (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
- // last exit code is output on the fourth pipe and caught to work around --enable-sigchild
- $descriptors = array_merge($descriptors, array(array('pipe', 'w')));
-
- $this->commandline = '('.$this->commandline.') 3>/dev/null; code=$?; echo $code >&3; exit $code';
- }
-
- return $descriptors;
- }
-
- /**
- * Builds up the callback used by wait().
- *
- * The callbacks adds all occurred output to the specific buffer and calls
- * the user callback (if present) with the received output.
- *
- * @param callable|null $callback The user defined PHP callback
- *
- * @return \Closure A PHP closure
- */
- protected function buildCallback($callback)
- {
- $that = $this;
- $out = self::OUT;
- $callback = function ($type, $data) use ($that, $callback, $out) {
- if ($out == $type) {
- $that->addOutput($data);
- } else {
- $that->addErrorOutput($data);
- }
-
- if (null !== $callback) {
- call_user_func($callback, $type, $data);
- }
- };
-
- return $callback;
- }
-
- /**
- * Updates the status of the process, reads pipes.
- *
- * @param bool $blocking Whether to use a blocking read call.
- */
- protected function updateStatus($blocking)
- {
- if (self::STATUS_STARTED !== $this->status) {
- return;
- }
-
- $this->processInformation = proc_get_status($this->process);
- $this->captureExitCode();
-
- $this->readPipes($blocking, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true);
-
- if (!$this->processInformation['running']) {
- $this->close();
- }
- }
-
- /**
- * Returns whether PHP has been compiled with the '--enable-sigchild' option or not.
- *
- * @return bool
- */
- protected function isSigchildEnabled()
- {
- if (null !== self::$sigchild) {
- return self::$sigchild;
- }
-
- if (!function_exists('phpinfo')) {
- return self::$sigchild = false;
- }
-
- ob_start();
- phpinfo(INFO_GENERAL);
-
- return self::$sigchild = false !== strpos(ob_get_clean(), '--enable-sigchild');
- }
-
- /**
- * Validates and returns the filtered timeout.
- *
- * @param int|float|null $timeout
- *
- * @return float|null
- *
- * @throws InvalidArgumentException if the given timeout is a negative number
- */
- private function validateTimeout($timeout)
- {
- $timeout = (float) $timeout;
-
- if (0.0 === $timeout) {
- $timeout = null;
- } elseif ($timeout < 0) {
- throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.');
- }
-
- return $timeout;
- }
-
- /**
- * Reads pipes, executes callback.
- *
- * @param bool $blocking Whether to use blocking calls or not.
- * @param bool $close Whether to close file handles or not.
- */
- private function readPipes($blocking, $close)
- {
- $result = $this->processPipes->readAndWrite($blocking, $close);
-
- $callback = $this->callback;
- foreach ($result as $type => $data) {
- if (3 == $type) {
- $this->fallbackExitcode = (int) $data;
- } else {
- $callback($type === self::STDOUT ? self::OUT : self::ERR, $data);
- }
- }
- }
-
- /**
- * Captures the exitcode if mentioned in the process information.
- */
- private function captureExitCode()
- {
- if (isset($this->processInformation['exitcode']) && -1 != $this->processInformation['exitcode']) {
- $this->exitcode = $this->processInformation['exitcode'];
- }
- }
-
- /**
- * Closes process resource, closes file handles, sets the exitcode.
- *
- * @return int The exitcode
- */
- private function close()
- {
- $this->processPipes->close();
- if (is_resource($this->process)) {
- $exitcode = proc_close($this->process);
- } else {
- $exitcode = -1;
- }
-
- $this->exitcode = -1 !== $exitcode ? $exitcode : (null !== $this->exitcode ? $this->exitcode : -1);
- $this->status = self::STATUS_TERMINATED;
-
- if (-1 === $this->exitcode && null !== $this->fallbackExitcode) {
- $this->exitcode = $this->fallbackExitcode;
- } elseif (-1 === $this->exitcode && $this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) {
- // if process has been signaled, no exitcode but a valid termsig, apply Unix convention
- $this->exitcode = 128 + $this->processInformation['termsig'];
- }
-
- return $this->exitcode;
- }
-
- /**
- * Resets data related to the latest run of the process.
- */
- private function resetProcessData()
- {
- $this->starttime = null;
- $this->callback = null;
- $this->exitcode = null;
- $this->fallbackExitcode = null;
- $this->processInformation = null;
- $this->stdout = null;
- $this->stderr = null;
- $this->process = null;
- $this->latestSignal = null;
- $this->status = self::STATUS_READY;
- $this->incrementalOutputOffset = 0;
- $this->incrementalErrorOutputOffset = 0;
- }
-
- /**
- * Sends a POSIX signal to the process.
- *
- * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
- * @param bool $throwException Whether to throw exception in case signal failed
- *
- * @return bool True if the signal was sent successfully, false otherwise
- *
- * @throws LogicException In case the process is not running
- * @throws RuntimeException In case --enable-sigchild is activated
- * @throws RuntimeException In case of failure
- */
- private function doSignal($signal, $throwException)
- {
- if (!$this->isRunning()) {
- if ($throwException) {
- throw new LogicException('Can not send signal on a non running process.');
- }
-
- return false;
- }
-
- if ($this->isSigchildEnabled()) {
- if ($throwException) {
- throw new RuntimeException('This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
- }
-
- return false;
- }
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- exec(sprintf('taskkill /F /T /PID %d 2>&1', $this->getPid()), $output, $exitCode);
- if ($exitCode) {
- if ($throwException) {
- throw new RuntimeException(sprintf('Unable to kill the process (%s).', implode(' ', $output)));
- }
-
- return false;
- }
- }
-
- if (true !== @proc_terminate($this->process, $signal) && '\\' !== DIRECTORY_SEPARATOR) {
- if ($throwException) {
- throw new RuntimeException(sprintf('Error while sending signal `%s`.', $signal));
- }
-
- return false;
- }
-
- $this->latestSignal = $signal;
-
- return true;
- }
-
- /**
- * Ensures the process is running or terminated, throws a LogicException if the process has a not started.
- *
- * @param string $functionName The function name that was called.
- *
- * @throws LogicException If the process has not run.
- */
- private function requireProcessIsStarted($functionName)
- {
- if (!$this->isStarted()) {
- throw new LogicException(sprintf('Process must be started before calling %s.', $functionName));
- }
- }
-
- /**
- * Ensures the process is terminated, throws a LogicException if the process has a status different than `terminated`.
- *
- * @param string $functionName The function name that was called.
- *
- * @throws LogicException If the process is not yet terminated.
- */
- private function requireProcessIsTerminated($functionName)
- {
- if (!$this->isTerminated()) {
- throw new LogicException(sprintf('Process must be terminated before calling %s.', $functionName));
- }
- }
-}
diff --git a/library/symfony/process/ProcessBuilder.php b/library/symfony/process/ProcessBuilder.php
deleted file mode 100644
index a782fd69e..000000000
--- a/library/symfony/process/ProcessBuilder.php
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-use Symfony\Component\Process\Exception\InvalidArgumentException;
-use Symfony\Component\Process\Exception\LogicException;
-
-/**
- * Process builder.
- *
- * @author Kris Wallsmith <kris@symfony.com>
- */
-class ProcessBuilder
-{
- private $arguments;
- private $cwd;
- private $env = array();
- private $input;
- private $timeout = 60;
- private $options = array();
- private $inheritEnv = true;
- private $prefix = array();
- private $outputDisabled = false;
-
- /**
- * Constructor.
- *
- * @param string[] $arguments An array of arguments
- */
- public function __construct(array $arguments = array())
- {
- $this->arguments = $arguments;
- }
-
- /**
- * Creates a process builder instance.
- *
- * @param string[] $arguments An array of arguments
- *
- * @return ProcessBuilder
- */
- public static function create(array $arguments = array())
- {
- return new static($arguments);
- }
-
- /**
- * Adds an unescaped argument to the command string.
- *
- * @param string $argument A command argument
- *
- * @return ProcessBuilder
- */
- public function add($argument)
- {
- $this->arguments[] = $argument;
-
- return $this;
- }
-
- /**
- * Adds a prefix to the command string.
- *
- * The prefix is preserved when resetting arguments.
- *
- * @param string|array $prefix A command prefix or an array of command prefixes
- *
- * @return ProcessBuilder
- */
- public function setPrefix($prefix)
- {
- $this->prefix = is_array($prefix) ? $prefix : array($prefix);
-
- return $this;
- }
-
- /**
- * Sets the arguments of the process.
- *
- * Arguments must not be escaped.
- * Previous arguments are removed.
- *
- * @param string[] $arguments
- *
- * @return ProcessBuilder
- */
- public function setArguments(array $arguments)
- {
- $this->arguments = $arguments;
-
- return $this;
- }
-
- /**
- * Sets the working directory.
- *
- * @param null|string $cwd The working directory
- *
- * @return ProcessBuilder
- */
- public function setWorkingDirectory($cwd)
- {
- $this->cwd = $cwd;
-
- return $this;
- }
-
- /**
- * Sets whether environment variables will be inherited or not.
- *
- * @param bool $inheritEnv
- *
- * @return ProcessBuilder
- */
- public function inheritEnvironmentVariables($inheritEnv = true)
- {
- $this->inheritEnv = $inheritEnv;
-
- return $this;
- }
-
- /**
- * Sets an environment variable.
- *
- * Setting a variable overrides its previous value. Use `null` to unset a
- * defined environment variable.
- *
- * @param string $name The variable name
- * @param null|string $value The variable value
- *
- * @return ProcessBuilder
- */
- public function setEnv($name, $value)
- {
- $this->env[$name] = $value;
-
- return $this;
- }
-
- /**
- * Adds a set of environment variables.
- *
- * Already existing environment variables with the same name will be
- * overridden by the new values passed to this method. Pass `null` to unset
- * a variable.
- *
- * @param array $variables The variables
- *
- * @return ProcessBuilder
- */
- public function addEnvironmentVariables(array $variables)
- {
- $this->env = array_replace($this->env, $variables);
-
- return $this;
- }
-
- /**
- * Sets the input of the process.
- *
- * @param mixed $input The input as a string
- *
- * @return ProcessBuilder
- *
- * @throws InvalidArgumentException In case the argument is invalid
- *
- * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.
- */
- public function setInput($input)
- {
- $this->input = ProcessUtils::validateInput(sprintf('%s::%s', __CLASS__, __FUNCTION__), $input);
-
- return $this;
- }
-
- /**
- * Sets the process timeout.
- *
- * To disable the timeout, set this value to null.
- *
- * @param float|null $timeout
- *
- * @return ProcessBuilder
- *
- * @throws InvalidArgumentException
- */
- public function setTimeout($timeout)
- {
- if (null === $timeout) {
- $this->timeout = null;
-
- return $this;
- }
-
- $timeout = (float) $timeout;
-
- if ($timeout < 0) {
- throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.');
- }
-
- $this->timeout = $timeout;
-
- return $this;
- }
-
- /**
- * Adds a proc_open option.
- *
- * @param string $name The option name
- * @param string $value The option value
- *
- * @return ProcessBuilder
- */
- public function setOption($name, $value)
- {
- $this->options[$name] = $value;
-
- return $this;
- }
-
- /**
- * Disables fetching output and error output from the underlying process.
- *
- * @return ProcessBuilder
- */
- public function disableOutput()
- {
- $this->outputDisabled = true;
-
- return $this;
- }
-
- /**
- * Enables fetching output and error output from the underlying process.
- *
- * @return ProcessBuilder
- */
- public function enableOutput()
- {
- $this->outputDisabled = false;
-
- return $this;
- }
-
- /**
- * Creates a Process instance and returns it.
- *
- * @return Process
- *
- * @throws LogicException In case no arguments have been provided
- */
- public function getProcess()
- {
- if (0 === count($this->prefix) && 0 === count($this->arguments)) {
- throw new LogicException('You must add() command arguments before calling getProcess().');
- }
-
- $options = $this->options;
-
- $arguments = array_merge($this->prefix, $this->arguments);
- $script = implode(' ', array_map(array(__NAMESPACE__.'\\ProcessUtils', 'escapeArgument'), $arguments));
-
- if ($this->inheritEnv) {
- // include $_ENV for BC purposes
- $env = array_replace($_ENV, $_SERVER, $this->env);
- } else {
- $env = $this->env;
- }
-
- $process = new Process($script, $this->cwd, $env, $this->input, $this->timeout, $options);
-
- if ($this->outputDisabled) {
- $process->disableOutput();
- }
-
- return $process;
- }
-}
diff --git a/library/symfony/process/ProcessUtils.php b/library/symfony/process/ProcessUtils.php
deleted file mode 100644
index 4f30b630d..000000000
--- a/library/symfony/process/ProcessUtils.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-use Symfony\Component\Process\Exception\InvalidArgumentException;
-
-/**
- * ProcessUtils is a bunch of utility methods.
- *
- * This class contains static methods only and is not meant to be instantiated.
- *
- * @author Martin Hasoň <martin.hason@gmail.com>
- */
-class ProcessUtils
-{
- /**
- * This class should not be instantiated.
- */
- private function __construct()
- {
- }
-
- /**
- * Escapes a string to be used as a shell argument.
- *
- * @param string $argument The argument that will be escaped
- *
- * @return string The escaped argument
- */
- public static function escapeArgument($argument)
- {
- //Fix for PHP bug #43784 escapeshellarg removes % from given string
- //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows
- //@see https://bugs.php.net/bug.php?id=43784
- //@see https://bugs.php.net/bug.php?id=49446
- if ('\\' === DIRECTORY_SEPARATOR) {
- if ('' === $argument) {
- return escapeshellarg($argument);
- }
-
- $escapedArgument = '';
- $quote = false;
- foreach (preg_split('/(")/', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) {
- if ('"' === $part) {
- $escapedArgument .= '\\"';
- } elseif (self::isSurroundedBy($part, '%')) {
- // Avoid environment variable expansion
- $escapedArgument .= '^%"'.substr($part, 1, -1).'"^%';
- } else {
- // escape trailing backslash
- if ('\\' === substr($part, -1)) {
- $part .= '\\';
- }
- $quote = true;
- $escapedArgument .= $part;
- }
- }
- if ($quote) {
- $escapedArgument = '"'.$escapedArgument.'"';
- }
-
- return $escapedArgument;
- }
-
- return escapeshellarg($argument);
- }
-
- /**
- * Validates and normalizes a Process input.
- *
- * @param string $caller The name of method call that validates the input
- * @param mixed $input The input to validate
- *
- * @return string The validated input
- *
- * @throws InvalidArgumentException In case the input is not valid
- *
- * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.
- */
- public static function validateInput($caller, $input)
- {
- if (null !== $input) {
- if (is_resource($input)) {
- return $input;
- }
- if (is_scalar($input)) {
- return (string) $input;
- }
- // deprecated as of Symfony 2.5, to be removed in 3.0
- if (is_object($input) && method_exists($input, '__toString')) {
- @trigger_error('Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
-
- return (string) $input;
- }
-
- throw new InvalidArgumentException(sprintf('%s only accepts strings or stream resources.', $caller));
- }
-
- return $input;
- }
-
- private static function isSurroundedBy($arg, $char)
- {
- return 2 < strlen($arg) && $char === $arg[0] && $char === $arg[strlen($arg) - 1];
- }
-}
diff --git a/library/symfony/process/README.md b/library/symfony/process/README.md
deleted file mode 100644
index 7222fe895..000000000
--- a/library/symfony/process/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-Process Component
-=================
-
-Process executes commands in sub-processes.
-
-In this example, we run a simple directory listing and get the result back:
-
-```php
-use Symfony\Component\Process\Process;
-use Symfony\Component\Process\Exception\ProcessFailedException;
-
-$process = new Process('ls -lsa');
-$process->setTimeout(3600);
-$process->run();
-if (!$process->isSuccessful()) {
- throw new ProcessFailedException($process);
-}
-
-print $process->getOutput();
-```
-
-You can think that this is easy to achieve with plain PHP but it's not especially
-if you want to take care of the subtle differences between the different platforms.
-
-You can simplify the code by using `mustRun()` instead of `run()`, which will
-throw a `ProcessFailedException` automatically in case of a problem:
-
-```php
-use Symfony\Component\Process\Process;
-
-$process = new Process('ls -lsa');
-$process->setTimeout(3600);
-$process->mustRun();
-
-print $process->getOutput();
-```
-
-And if you want to be able to get some feedback in real-time, just pass an
-anonymous function to the ``run()`` method and you will get the output buffer
-as it becomes available:
-
-```php
-use Symfony\Component\Process\Process;
-
-$process = new Process('ls -lsa');
-$process->run(function ($type, $buffer) {
- if (Process::ERR === $type) {
- echo 'ERR > '.$buffer;
- } else {
- echo 'OUT > '.$buffer;
- }
-});
-```
-
-That's great if you want to execute a long running command (like rsync-ing files to a
-remote server) and give feedback to the user in real-time.
-
-Resources
----------
-
-You can run the unit tests with the following command:
-
- $ cd path/to/Symfony/Component/Process/
- $ composer install
- $ phpunit
diff --git a/library/symfony/process/Tests/AbstractProcessTest.php b/library/symfony/process/Tests/AbstractProcessTest.php
deleted file mode 100644
index fca3729be..000000000
--- a/library/symfony/process/Tests/AbstractProcessTest.php
+++ /dev/null
@@ -1,1196 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\Exception\LogicException;
-use Symfony\Component\Process\Exception\ProcessTimedOutException;
-use Symfony\Component\Process\Exception\RuntimeException;
-use Symfony\Component\Process\PhpExecutableFinder;
-use Symfony\Component\Process\Pipes\PipesInterface;
-use Symfony\Component\Process\Process;
-
-/**
- * @author Robert Schönthal <seroscho@googlemail.com>
- */
-abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
-{
- protected static $phpBin;
-
- public static function setUpBeforeClass()
- {
- $phpBin = new PhpExecutableFinder();
- self::$phpBin = 'phpdbg' === PHP_SAPI ? 'php' : $phpBin->find();
- }
-
- public function testThatProcessDoesNotThrowWarningDuringRun()
- {
- @trigger_error('Test Error', E_USER_NOTICE);
- $process = $this->getProcess(self::$phpBin." -r 'sleep(3)'");
- $process->run();
- $actualError = error_get_last();
- $this->assertEquals('Test Error', $actualError['message']);
- $this->assertEquals(E_USER_NOTICE, $actualError['type']);
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
- */
- public function testNegativeTimeoutFromConstructor()
- {
- $this->getProcess('', null, null, null, -1);
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
- */
- public function testNegativeTimeoutFromSetter()
- {
- $p = $this->getProcess('');
- $p->setTimeout(-1);
- }
-
- public function testFloatAndNullTimeout()
- {
- $p = $this->getProcess('');
-
- $p->setTimeout(10);
- $this->assertSame(10.0, $p->getTimeout());
-
- $p->setTimeout(null);
- $this->assertNull($p->getTimeout());
-
- $p->setTimeout(0.0);
- $this->assertNull($p->getTimeout());
- }
-
- public function testStopWithTimeoutIsActuallyWorking()
- {
- if (!extension_loaded('pcntl')) {
- $this->markTestSkipped('Extension pcntl is required.');
- }
-
- // exec is mandatory here since we send a signal to the process
- // see https://github.com/symfony/symfony/issues/5030 about prepending
- // command with exec
- $p = $this->getProcess('exec '.self::$phpBin.' '.__DIR__.'/NonStopableProcess.php 3');
- $p->start();
- usleep(100000);
- $start = microtime(true);
- $p->stop(1.1, SIGKILL);
- while ($p->isRunning()) {
- usleep(1000);
- }
- $duration = microtime(true) - $start;
-
- $this->assertLessThan(4, $duration);
- }
-
- public function testAllOutputIsActuallyReadOnTermination()
- {
- // this code will result in a maximum of 2 reads of 8192 bytes by calling
- // start() and isRunning(). by the time getOutput() is called the process
- // has terminated so the internal pipes array is already empty. normally
- // the call to start() will not read any data as the process will not have
- // generated output, but this is non-deterministic so we must count it as
- // a possibility. therefore we need 2 * PipesInterface::CHUNK_SIZE plus
- // another byte which will never be read.
- $expectedOutputSize = PipesInterface::CHUNK_SIZE * 2 + 2;
-
- $code = sprintf('echo str_repeat(\'*\', %d);', $expectedOutputSize);
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)));
-
- $p->start();
- // Let's wait enough time for process to finish...
- // Here we don't call Process::run or Process::wait to avoid any read of pipes
- usleep(500000);
-
- if ($p->isRunning()) {
- $this->markTestSkipped('Process execution did not complete in the required time frame');
- }
-
- $o = $p->getOutput();
-
- $this->assertEquals($expectedOutputSize, strlen($o));
- }
-
- public function testCallbacksAreExecutedWithStart()
- {
- $data = '';
-
- $process = $this->getProcess('echo foo && php -r "sleep(1);" && echo foo');
- $process->start(function ($type, $buffer) use (&$data) {
- $data .= $buffer;
- });
-
- while ($process->isRunning()) {
- usleep(10000);
- }
-
- $this->assertEquals(2, preg_match_all('/foo/', $data, $matches));
- }
-
- /**
- * tests results from sub processes.
- *
- * @dataProvider responsesCodeProvider
- */
- public function testProcessResponses($expected, $getter, $code)
- {
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)));
- $p->run();
-
- $this->assertSame($expected, $p->$getter());
- }
-
- /**
- * tests results from sub processes.
- *
- * @dataProvider pipesCodeProvider
- */
- public function testProcessPipes($code, $size)
- {
- $expected = str_repeat(str_repeat('*', 1024), $size).'!';
- $expectedLength = (1024 * $size) + 1;
-
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)));
- $p->setInput($expected);
- $p->run();
-
- $this->assertEquals($expectedLength, strlen($p->getOutput()));
- $this->assertEquals($expectedLength, strlen($p->getErrorOutput()));
- }
-
- /**
- * @dataProvider pipesCodeProvider
- */
- public function testSetStreamAsInput($code, $size)
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestIncomplete('This test fails with a timeout on Windows, can someone investigate please?');
- }
- $expected = str_repeat(str_repeat('*', 1024), $size).'!';
- $expectedLength = (1024 * $size) + 1;
-
- $stream = fopen('php://temporary', 'w+');
- fwrite($stream, $expected);
- rewind($stream);
-
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)), null, null, null, 5);
- $p->setInput($stream);
- $p->run();
-
- fclose($stream);
-
- $this->assertEquals($expectedLength, strlen($p->getOutput()));
- $this->assertEquals($expectedLength, strlen($p->getErrorOutput()));
- }
-
- public function testSetInputWhileRunningThrowsAnException()
- {
- $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $process->start();
- try {
- $process->setInput('foobar');
- $process->stop();
- $this->fail('A LogicException should have been raised.');
- } catch (LogicException $e) {
- $this->assertEquals('Input can not be set while the process is running.', $e->getMessage());
- }
- $process->stop();
- }
-
- /**
- * @dataProvider provideInvalidInputValues
- * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
- * @expectedExceptionMessage Symfony\Component\Process\Process::setInput only accepts strings or stream resources.
- */
- public function testInvalidInput($value)
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->setInput($value);
- }
-
- public function provideInvalidInputValues()
- {
- return array(
- array(array()),
- array(new NonStringifiable()),
- );
- }
-
- /**
- * @dataProvider provideInputValues
- */
- public function testValidInput($expected, $value)
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->setInput($value);
- $this->assertSame($expected, $process->getInput());
- }
-
- public function provideInputValues()
- {
- return array(
- array(null, null),
- array('24.5', 24.5),
- array('input data', 'input data'),
- );
- }
-
- /**
- * @dataProvider provideLegacyInputValues
- * @group legacy
- */
- public function testLegacyValidInput($expected, $value)
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->setInput($value);
- $this->assertSame($expected, $process->getInput());
- }
-
- public function provideLegacyInputValues()
- {
- return array(
- array('stringifiable', new Stringifiable()),
- );
- }
-
- public function chainedCommandsOutputProvider()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- return array(
- array("2 \r\n2\r\n", '&&', '2'),
- );
- }
-
- return array(
- array("1\n1\n", ';', '1'),
- array("2\n2\n", '&&', '2'),
- );
- }
-
- /**
- * @dataProvider chainedCommandsOutputProvider
- */
- public function testChainedCommandsOutput($expected, $operator, $input)
- {
- $process = $this->getProcess(sprintf('echo %s %s echo %s', $input, $operator, $input));
- $process->run();
- $this->assertEquals($expected, $process->getOutput());
- }
-
- public function testCallbackIsExecutedForOutput()
- {
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('echo \'foo\';')));
-
- $called = false;
- $p->run(function ($type, $buffer) use (&$called) {
- $called = $buffer === 'foo';
- });
-
- $this->assertTrue($called, 'The callback should be executed with the output');
- }
-
- public function testGetErrorOutput()
- {
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }')));
-
- $p->run();
- $this->assertEquals(3, preg_match_all('/ERROR/', $p->getErrorOutput(), $matches));
- }
-
- public function testGetIncrementalErrorOutput()
- {
- // use a lock file to toggle between writing ("W") and reading ("R") the
- // error stream
- $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
- file_put_contents($lock, 'W');
-
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
-
- $p->start();
- while ($p->isRunning()) {
- if ('R' === file_get_contents($lock)) {
- $this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalErrorOutput(), $matches));
- file_put_contents($lock, 'W');
- }
- usleep(100);
- }
-
- unlink($lock);
- }
-
- public function testFlushErrorOutput()
- {
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }')));
-
- $p->run();
- $p->clearErrorOutput();
- $this->assertEmpty($p->getErrorOutput());
- }
-
- public function testGetEmptyIncrementalErrorOutput()
- {
- // use a lock file to toggle between writing ("W") and reading ("R") the
- // output stream
- $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
- file_put_contents($lock, 'W');
-
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
-
- $p->start();
-
- $shouldWrite = false;
-
- while ($p->isRunning()) {
- if ('R' === file_get_contents($lock)) {
- if (!$shouldWrite) {
- $this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalOutput(), $matches));
- $shouldWrite = true;
- } else {
- $this->assertSame('', $p->getIncrementalOutput());
-
- file_put_contents($lock, 'W');
- $shouldWrite = false;
- }
- }
- usleep(100);
- }
-
- unlink($lock);
- }
-
- public function testGetOutput()
- {
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { echo \' foo \'; $n++; }')));
-
- $p->run();
- $this->assertEquals(3, preg_match_all('/foo/', $p->getOutput(), $matches));
- }
-
- public function testGetIncrementalOutput()
- {
- // use a lock file to toggle between writing ("W") and reading ("R") the
- // output stream
- $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
- file_put_contents($lock, 'W');
-
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
-
- $p->start();
- while ($p->isRunning()) {
- if ('R' === file_get_contents($lock)) {
- $this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches));
- file_put_contents($lock, 'W');
- }
- usleep(100);
- }
-
- unlink($lock);
- }
-
- public function testFlushOutput()
- {
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n=0;while ($n<3) {echo \' foo \';$n++;}')));
-
- $p->run();
- $p->clearOutput();
- $this->assertEmpty($p->getOutput());
- }
-
- public function testGetEmptyIncrementalOutput()
- {
- // use a lock file to toggle between writing ("W") and reading ("R") the
- // output stream
- $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
- file_put_contents($lock, 'W');
-
- $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
-
- $p->start();
-
- $shouldWrite = false;
-
- while ($p->isRunning()) {
- if ('R' === file_get_contents($lock)) {
- if (!$shouldWrite) {
- $this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches));
- $shouldWrite = true;
- } else {
- $this->assertSame('', $p->getIncrementalOutput());
-
- file_put_contents($lock, 'W');
- $shouldWrite = false;
- }
- }
- usleep(100);
- }
-
- unlink($lock);
- }
-
- public function testZeroAsOutput()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- // see http://stackoverflow.com/questions/7105433/windows-batch-echo-without-new-line
- $p = $this->getProcess('echo | set /p dummyName=0');
- } else {
- $p = $this->getProcess('printf 0');
- }
-
- $p->run();
- $this->assertSame('0', $p->getOutput());
- }
-
- public function testExitCodeCommandFailed()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support POSIX exit code');
- }
-
- // such command run in bash return an exitcode 127
- $process = $this->getProcess('nonexistingcommandIhopeneversomeonewouldnameacommandlikethis');
- $process->run();
-
- $this->assertGreaterThan(0, $process->getExitCode());
- }
-
- public function testTTYCommand()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does have /dev/tty support');
- }
-
- $process = $this->getProcess('echo "foo" >> /dev/null && '.self::$phpBin.' -r "usleep(100000);"');
- $process->setTty(true);
- $process->start();
- $this->assertTrue($process->isRunning());
- $process->wait();
-
- $this->assertSame(Process::STATUS_TERMINATED, $process->getStatus());
- }
-
- public function testTTYCommandExitCode()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does have /dev/tty support');
- }
-
- $process = $this->getProcess('echo "foo" >> /dev/null');
- $process->setTty(true);
- $process->run();
-
- $this->assertTrue($process->isSuccessful());
- }
-
- public function testTTYInWindowsEnvironment()
- {
- if ('\\' !== DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('This test is for Windows platform only');
- }
-
- $process = $this->getProcess('echo "foo" >> /dev/null');
- $process->setTty(false);
- $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'TTY mode is not supported on Windows platform.');
- $process->setTty(true);
- }
-
- public function testExitCodeTextIsNullWhenExitCodeIsNull()
- {
- $process = $this->getProcess('');
- $this->assertNull($process->getExitCodeText());
- }
-
- public function testPTYCommand()
- {
- if (!Process::isPtySupported()) {
- $this->markTestSkipped('PTY is not supported on this operating system.');
- }
-
- $process = $this->getProcess('echo "foo"');
- $process->setPty(true);
- $process->run();
-
- $this->assertSame(Process::STATUS_TERMINATED, $process->getStatus());
- $this->assertEquals("foo\r\n", $process->getOutput());
- }
-
- public function testMustRun()
- {
- $process = $this->getProcess('echo foo');
-
- $this->assertSame($process, $process->mustRun());
- $this->assertEquals('foo'.PHP_EOL, $process->getOutput());
- }
-
- public function testSuccessfulMustRunHasCorrectExitCode()
- {
- $process = $this->getProcess('echo foo')->mustRun();
- $this->assertEquals(0, $process->getExitCode());
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\ProcessFailedException
- */
- public function testMustRunThrowsException()
- {
- $process = $this->getProcess('exit 1');
- $process->mustRun();
- }
-
- public function testExitCodeText()
- {
- $process = $this->getProcess('');
- $r = new \ReflectionObject($process);
- $p = $r->getProperty('exitcode');
- $p->setAccessible(true);
-
- $p->setValue($process, 2);
- $this->assertEquals('Misuse of shell builtins', $process->getExitCodeText());
- }
-
- public function testStartIsNonBlocking()
- {
- $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $start = microtime(true);
- $process->start();
- $end = microtime(true);
- $this->assertLessThan(0.4, $end - $start);
- $process->wait();
- }
-
- public function testUpdateStatus()
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $this->assertTrue(strlen($process->getOutput()) > 0);
- }
-
- public function testGetExitCodeIsNullOnStart()
- {
- $process = $this->getProcess(self::$phpBin.' -r "usleep(200000);"');
- $this->assertNull($process->getExitCode());
- $process->start();
- $this->assertNull($process->getExitCode());
- $process->wait();
- $this->assertEquals(0, $process->getExitCode());
- }
-
- public function testGetExitCodeIsNullOnWhenStartingAgain()
- {
- $process = $this->getProcess(self::$phpBin.' -r "usleep(200000);"');
- $process->run();
- $this->assertEquals(0, $process->getExitCode());
- $process->start();
- $this->assertNull($process->getExitCode());
- $process->wait();
- $this->assertEquals(0, $process->getExitCode());
- }
-
- public function testGetExitCode()
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $this->assertSame(0, $process->getExitCode());
- }
-
- public function testStatus()
- {
- $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $this->assertFalse($process->isRunning());
- $this->assertFalse($process->isStarted());
- $this->assertFalse($process->isTerminated());
- $this->assertSame(Process::STATUS_READY, $process->getStatus());
- $process->start();
- $this->assertTrue($process->isRunning());
- $this->assertTrue($process->isStarted());
- $this->assertFalse($process->isTerminated());
- $this->assertSame(Process::STATUS_STARTED, $process->getStatus());
- $process->wait();
- $this->assertFalse($process->isRunning());
- $this->assertTrue($process->isStarted());
- $this->assertTrue($process->isTerminated());
- $this->assertSame(Process::STATUS_TERMINATED, $process->getStatus());
- }
-
- public function testStop()
- {
- $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"');
- $process->start();
- $this->assertTrue($process->isRunning());
- $process->stop();
- $this->assertFalse($process->isRunning());
- }
-
- public function testIsSuccessful()
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $this->assertTrue($process->isSuccessful());
- }
-
- public function testIsSuccessfulOnlyAfterTerminated()
- {
- $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"');
- $process->start();
-
- $this->assertFalse($process->isSuccessful());
-
- while ($process->isRunning()) {
- usleep(300000);
- }
-
- $this->assertTrue($process->isSuccessful());
- }
-
- public function testIsNotSuccessful()
- {
- $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);throw new \Exception(\'BOUM\');"');
- $process->start();
- $this->assertTrue($process->isRunning());
- $process->wait();
- $this->assertFalse($process->isSuccessful());
- }
-
- public function testProcessIsNotSignaled()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support POSIX signals');
- }
-
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $this->assertFalse($process->hasBeenSignaled());
- }
-
- public function testProcessWithoutTermSignalIsNotSignaled()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support POSIX signals');
- }
-
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $this->assertFalse($process->hasBeenSignaled());
- }
-
- public function testProcessWithoutTermSignal()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support POSIX signals');
- }
-
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $this->assertEquals(0, $process->getTermSignal());
- }
-
- public function testProcessIsSignaledIfStopped()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support POSIX signals');
- }
-
- $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"');
- $process->start();
- $process->stop();
- $this->assertTrue($process->hasBeenSignaled());
- }
-
- public function testProcessWithTermSignal()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support POSIX signals');
- }
-
- // SIGTERM is only defined if pcntl extension is present
- $termSignal = defined('SIGTERM') ? SIGTERM : 15;
-
- $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"');
- $process->start();
- $process->stop();
-
- $this->assertEquals($termSignal, $process->getTermSignal());
- }
-
- public function testProcessThrowsExceptionWhenExternallySignaled()
- {
- if (!function_exists('posix_kill')) {
- $this->markTestSkipped('Function posix_kill is required.');
- }
-
- $termSignal = defined('SIGKILL') ? SIGKILL : 9;
-
- $process = $this->getProcess('exec '.self::$phpBin.' -r "while (true) {}"');
- $process->start();
- posix_kill($process->getPid(), $termSignal);
-
- $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'The process has been signaled with signal "9".');
- $process->wait();
- }
-
- public function testRestart()
- {
- $process1 = $this->getProcess(self::$phpBin.' -r "echo getmypid();"');
- $process1->run();
- $process2 = $process1->restart();
-
- $process2->wait(); // wait for output
-
- // Ensure that both processed finished and the output is numeric
- $this->assertFalse($process1->isRunning());
- $this->assertFalse($process2->isRunning());
- $this->assertTrue(is_numeric($process1->getOutput()));
- $this->assertTrue(is_numeric($process2->getOutput()));
-
- // Ensure that restart returned a new process by check that the output is different
- $this->assertNotEquals($process1->getOutput(), $process2->getOutput());
- }
-
- public function testRunProcessWithTimeout()
- {
- $timeout = 0.5;
- $process = $this->getProcess(self::$phpBin.' -r "usleep(600000);"');
- $process->setTimeout($timeout);
- $start = microtime(true);
- try {
- $process->run();
- $this->fail('A RuntimeException should have been raised');
- } catch (RuntimeException $e) {
- }
- $duration = microtime(true) - $start;
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- // Windows is a bit slower as it read file handles, then allow twice the precision
- $maxDuration = $timeout + 2 * Process::TIMEOUT_PRECISION;
- } else {
- $maxDuration = $timeout + Process::TIMEOUT_PRECISION;
- }
-
- $this->assertLessThan($maxDuration, $duration);
- }
-
- public function testCheckTimeoutOnNonStartedProcess()
- {
- $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
- $process->checkTimeout();
- }
-
- public function testCheckTimeoutOnTerminatedProcess()
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $process->checkTimeout();
- }
-
- public function testCheckTimeoutOnStartedProcess()
- {
- $timeout = 0.5;
- $precision = 100000;
- $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
- $process->setTimeout($timeout);
- $start = microtime(true);
-
- $process->start();
-
- try {
- while ($process->isRunning()) {
- $process->checkTimeout();
- usleep($precision);
- }
- $this->fail('A RuntimeException should have been raised');
- } catch (RuntimeException $e) {
- }
- $duration = microtime(true) - $start;
-
- $this->assertLessThan($timeout + $precision, $duration);
- $this->assertFalse($process->isSuccessful());
- }
-
- public function testIdleTimeout()
- {
- $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
- $process->setTimeout(10);
- $process->setIdleTimeout(0.5);
-
- try {
- $process->run();
-
- $this->fail('A timeout exception was expected.');
- } catch (ProcessTimedOutException $ex) {
- $this->assertTrue($ex->isIdleTimeout());
- $this->assertFalse($ex->isGeneralTimeout());
- $this->assertEquals(0.5, $ex->getExceededTimeout());
- }
- }
-
- public function testIdleTimeoutNotExceededWhenOutputIsSent()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestIncomplete('This test fails with a timeout on Windows, can someone investigate please?');
- }
- $process = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 30; while ($n--) {echo "foo\n"; usleep(100000); }')));
- $process->setTimeout(2);
- $process->setIdleTimeout(1);
-
- try {
- $process->run();
- $this->fail('A timeout exception was expected.');
- } catch (ProcessTimedOutException $ex) {
- $this->assertTrue($ex->isGeneralTimeout(), 'A general timeout is expected.');
- $this->assertFalse($ex->isIdleTimeout(), 'No idle timeout is expected.');
- $this->assertEquals(2, $ex->getExceededTimeout());
- }
- }
-
- public function testStartAfterATimeout()
- {
- $process = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 1000; while ($n--) {echo \'\'; usleep(1000); }')));
- $process->setTimeout(0.1);
-
- try {
- $process->run();
- $this->fail('A RuntimeException should have been raised.');
- } catch (RuntimeException $e) {
- }
- $process->start();
- usleep(1000);
- $process->stop();
- }
-
- public function testGetPid()
- {
- $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $process->start();
- $this->assertGreaterThan(0, $process->getPid());
- $process->wait();
- }
-
- public function testGetPidIsNullBeforeStart()
- {
- $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"');
- $this->assertNull($process->getPid());
- }
-
- public function testGetPidIsNullAfterRun()
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->run();
- $this->assertNull($process->getPid());
- }
-
- public function testSignal()
- {
- if (!extension_loaded('pcntl')) {
- $this->markTestSkipped('Extension pcntl is required.');
- }
-
- $process = $this->getProcess('exec php -f '.__DIR__.'/SignalListener.php');
- $process->start();
- usleep(500000);
- $process->signal(SIGUSR1);
-
- while ($process->isRunning() && false === strpos($process->getOutput(), 'Caught SIGUSR1')) {
- usleep(10000);
- }
-
- $this->assertEquals('Caught SIGUSR1', $process->getOutput());
- }
-
- public function testExitCodeIsAvailableAfterSignal()
- {
- if (!extension_loaded('pcntl')) {
- $this->markTestSkipped('Extension pcntl is required.');
- }
-
- $process = $this->getProcess('sleep 4');
- $process->start();
- $process->signal(SIGKILL);
-
- while ($process->isRunning()) {
- usleep(10000);
- }
-
- $this->assertFalse($process->isRunning());
- $this->assertTrue($process->hasBeenSignaled());
- $this->assertFalse($process->isSuccessful());
- $this->assertEquals(137, $process->getExitCode());
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\LogicException
- */
- public function testSignalProcessNotRunning()
- {
- if (!extension_loaded('pcntl')) {
- $this->markTestSkipped('Extension pcntl is required.');
- }
-
- $process = $this->getProcess(self::$phpBin.' -v');
- $process->signal(SIGHUP);
- }
-
- /**
- * @dataProvider provideMethodsThatNeedARunningProcess
- */
- public function testMethodsThatNeedARunningProcess($method)
- {
- $process = $this->getProcess(self::$phpBin.' -v');
- $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', sprintf('Process must be started before calling %s.', $method));
- $process->{$method}();
- }
-
- public function provideMethodsThatNeedARunningProcess()
- {
- return array(
- array('getOutput'),
- array('getIncrementalOutput'),
- array('getErrorOutput'),
- array('getIncrementalErrorOutput'),
- array('wait'),
- );
- }
-
- /**
- * @dataProvider provideMethodsThatNeedATerminatedProcess
- */
- public function testMethodsThatNeedATerminatedProcess($method)
- {
- $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"');
- $process->start();
- try {
- $process->{$method}();
- $process->stop(0);
- $this->fail('A LogicException must have been thrown');
- } catch (\Exception $e) {
- $this->assertInstanceOf('Symfony\Component\Process\Exception\LogicException', $e);
- $this->assertEquals(sprintf('Process must be terminated before calling %s.', $method), $e->getMessage());
- }
- $process->stop(0);
- }
-
- public function provideMethodsThatNeedATerminatedProcess()
- {
- return array(
- array('hasBeenSignaled'),
- array('getTermSignal'),
- array('hasBeenStopped'),
- array('getStopSignal'),
- );
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- */
- public function testSignalWithWrongIntSignal()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('POSIX signals do not work on Windows');
- }
-
- $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
- $process->start();
- $process->signal(-4);
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- */
- public function testSignalWithWrongNonIntSignal()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('POSIX signals do not work on Windows');
- }
-
- $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
- $process->start();
- $process->signal('Céphalopodes');
- }
-
- public function testDisableOutputDisablesTheOutput()
- {
- $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $this->assertFalse($p->isOutputDisabled());
- $p->disableOutput();
- $this->assertTrue($p->isOutputDisabled());
- $p->enableOutput();
- $this->assertFalse($p->isOutputDisabled());
- }
-
- public function testDisableOutputWhileRunningThrowsException()
- {
- $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $p->start();
- $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Disabling output while the process is running is not possible.');
- $p->disableOutput();
- }
-
- public function testEnableOutputWhileRunningThrowsException()
- {
- $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $p->disableOutput();
- $p->start();
- $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Enabling output while the process is running is not possible.');
- $p->enableOutput();
- }
-
- public function testEnableOrDisableOutputAfterRunDoesNotThrowException()
- {
- $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $p->disableOutput();
- $p->start();
- $p->wait();
- $p->enableOutput();
- $p->disableOutput();
- }
-
- public function testDisableOutputWhileIdleTimeoutIsSet()
- {
- $process = $this->getProcess('sleep 3');
- $process->setIdleTimeout(1);
- $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Output can not be disabled while an idle timeout is set.');
- $process->disableOutput();
- }
-
- public function testSetIdleTimeoutWhileOutputIsDisabled()
- {
- $process = $this->getProcess('sleep 3');
- $process->disableOutput();
- $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Idle timeout can not be set while the output is disabled.');
- $process->setIdleTimeout(1);
- }
-
- public function testSetNullIdleTimeoutWhileOutputIsDisabled()
- {
- $process = $this->getProcess('sleep 3');
- $process->disableOutput();
- $process->setIdleTimeout(null);
- }
-
- /**
- * @dataProvider provideStartMethods
- */
- public function testStartWithACallbackAndDisabledOutput($startMethod, $exception, $exceptionMessage)
- {
- $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $p->disableOutput();
- $this->setExpectedException($exception, $exceptionMessage);
- $p->{$startMethod}(function () {});
- }
-
- public function provideStartMethods()
- {
- return array(
- array('start', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
- array('run', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
- array('mustRun', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
- );
- }
-
- /**
- * @dataProvider provideOutputFetchingMethods
- */
- public function testGetOutputWhileDisabled($fetchMethod)
- {
- $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
- $p->disableOutput();
- $p->start();
- $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Output has been disabled.');
- $p->{$fetchMethod}();
- }
-
- public function provideOutputFetchingMethods()
- {
- return array(
- array('getOutput'),
- array('getIncrementalOutput'),
- array('getErrorOutput'),
- array('getIncrementalErrorOutput'),
- );
- }
-
- public function responsesCodeProvider()
- {
- return array(
- //expected output / getter / code to execute
- //array(1,'getExitCode','exit(1);'),
- //array(true,'isSuccessful','exit();'),
- array('output', 'getOutput', 'echo \'output\';'),
- );
- }
-
- public function pipesCodeProvider()
- {
- $variations = array(
- 'fwrite(STDOUT, $in = file_get_contents(\'php://stdin\')); fwrite(STDERR, $in);',
- 'include \''.__DIR__.'/PipeStdinInStdoutStdErrStreamSelect.php\';',
- );
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- // Avoid XL buffers on Windows because of https://bugs.php.net/bug.php?id=65650
- $sizes = array(1, 2, 4, 8);
- } else {
- $sizes = array(1, 16, 64, 1024, 4096);
- }
-
- $codes = array();
- foreach ($sizes as $size) {
- foreach ($variations as $code) {
- $codes[] = array($code, $size);
- }
- }
-
- return $codes;
- }
-
- /**
- * provides default method names for simple getter/setter.
- */
- public function methodProvider()
- {
- $defaults = array(
- array('CommandLine'),
- array('Timeout'),
- array('WorkingDirectory'),
- array('Env'),
- array('Stdin'),
- array('Input'),
- array('Options'),
- );
-
- return $defaults;
- }
-
- /**
- * @param string $commandline
- * @param null|string $cwd
- * @param null|array $env
- * @param null|string $input
- * @param int $timeout
- * @param array $options
- *
- * @return Process
- */
- abstract protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array());
-}
-
-class Stringifiable
-{
- public function __toString()
- {
- return 'stringifiable';
- }
-}
-
-class NonStringifiable
-{
-}
diff --git a/library/symfony/process/Tests/ExecutableFinderTest.php b/library/symfony/process/Tests/ExecutableFinderTest.php
deleted file mode 100644
index 812429e88..000000000
--- a/library/symfony/process/Tests/ExecutableFinderTest.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\ExecutableFinder;
-
-/**
- * @author Chris Smith <chris@cs278.org>
- */
-class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
-{
- private $path;
-
- protected function tearDown()
- {
- if ($this->path) {
- // Restore path if it was changed.
- putenv('PATH='.$this->path);
- }
- }
-
- private function setPath($path)
- {
- $this->path = getenv('PATH');
- putenv('PATH='.$path);
- }
-
- /**
- * @requires PHP 5.4
- */
- public function testFind()
- {
- if (ini_get('open_basedir')) {
- $this->markTestSkipped('Cannot test when open_basedir is set');
- }
-
- $this->setPath(dirname(PHP_BINARY));
-
- $finder = new ExecutableFinder();
- $result = $finder->find($this->getPhpBinaryName());
-
- $this->assertSamePath(PHP_BINARY, $result);
- }
-
- public function testFindWithDefault()
- {
- if (ini_get('open_basedir')) {
- $this->markTestSkipped('Cannot test when open_basedir is set');
- }
-
- $expected = 'defaultValue';
-
- $this->setPath('');
-
- $finder = new ExecutableFinder();
- $result = $finder->find('foo', $expected);
-
- $this->assertEquals($expected, $result);
- }
-
- /**
- * @requires PHP 5.4
- */
- public function testFindWithExtraDirs()
- {
- if (ini_get('open_basedir')) {
- $this->markTestSkipped('Cannot test when open_basedir is set');
- }
-
- $this->setPath('');
-
- $extraDirs = array(dirname(PHP_BINARY));
-
- $finder = new ExecutableFinder();
- $result = $finder->find($this->getPhpBinaryName(), null, $extraDirs);
-
- $this->assertSamePath(PHP_BINARY, $result);
- }
-
- /**
- * @requires PHP 5.4
- */
- public function testFindWithOpenBaseDir()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Cannot run test on windows');
- }
-
- if (ini_get('open_basedir')) {
- $this->markTestSkipped('Cannot test when open_basedir is set');
- }
-
- $this->iniSet('open_basedir', dirname(PHP_BINARY).(!defined('HHVM_VERSION') ? PATH_SEPARATOR.'/' : ''));
-
- $finder = new ExecutableFinder();
- $result = $finder->find($this->getPhpBinaryName());
-
- $this->assertSamePath(PHP_BINARY, $result);
- }
-
- /**
- * @requires PHP 5.4
- */
- public function testFindProcessInOpenBasedir()
- {
- if (ini_get('open_basedir')) {
- $this->markTestSkipped('Cannot test when open_basedir is set');
- }
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Cannot run test on windows');
- }
-
- $this->setPath('');
- $this->iniSet('open_basedir', PHP_BINARY.(!defined('HHVM_VERSION') ? PATH_SEPARATOR.'/' : ''));
-
- $finder = new ExecutableFinder();
- $result = $finder->find($this->getPhpBinaryName(), false);
-
- $this->assertSamePath(PHP_BINARY, $result);
- }
-
- private function assertSamePath($expected, $tested)
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertEquals(strtolower($expected), strtolower($tested));
- } else {
- $this->assertEquals($expected, $tested);
- }
- }
-
- private function getPhpBinaryName()
- {
- return basename(PHP_BINARY, '\\' === DIRECTORY_SEPARATOR ? '.exe' : '');
- }
-}
diff --git a/library/symfony/process/Tests/NonStopableProcess.php b/library/symfony/process/Tests/NonStopableProcess.php
deleted file mode 100644
index 54510c16a..000000000
--- a/library/symfony/process/Tests/NonStopableProcess.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/**
- * Runs a PHP script that can be stopped only with a SIGKILL (9) signal for 3 seconds.
- *
- * @args duration Run this script with a custom duration
- *
- * @example `php NonStopableProcess.php 42` will run the script for 42 seconds
- */
-function handleSignal($signal)
-{
- switch ($signal) {
- case SIGTERM:
- $name = 'SIGTERM';
- break;
- case SIGINT:
- $name = 'SIGINT';
- break;
- default:
- $name = $signal.' (unknown)';
- break;
- }
-
- echo "received signal $name\n";
-}
-
-declare (ticks = 1);
-pcntl_signal(SIGTERM, 'handleSignal');
-pcntl_signal(SIGINT, 'handleSignal');
-
-$duration = isset($argv[1]) ? (int) $argv[1] : 3;
-$start = microtime(true);
-
-while ($duration > (microtime(true) - $start)) {
- usleep(1000);
-}
diff --git a/library/symfony/process/Tests/PhpExecutableFinderTest.php b/library/symfony/process/Tests/PhpExecutableFinderTest.php
deleted file mode 100644
index 87d0efe9e..000000000
--- a/library/symfony/process/Tests/PhpExecutableFinderTest.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\PhpExecutableFinder;
-
-/**
- * @author Robert Schönthal <seroscho@googlemail.com>
- */
-class PhpExecutableFinderTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * tests find() with the env var PHP_PATH.
- */
- public function testFindWithPhpPath()
- {
- if (defined('PHP_BINARY')) {
- $this->markTestSkipped('The PHP binary is easily available as of PHP 5.4');
- }
-
- $f = new PhpExecutableFinder();
-
- $current = $f->find();
-
- //not executable PHP_PATH
- putenv('PHP_PATH=/not/executable/php');
- $this->assertFalse($f->find(), '::find() returns false for not executable PHP');
- $this->assertFalse($f->find(false), '::find() returns false for not executable PHP');
-
- //executable PHP_PATH
- putenv('PHP_PATH='.$current);
- $this->assertEquals($f->find(), $current, '::find() returns the executable PHP');
- $this->assertEquals($f->find(false), $current, '::find() returns the executable PHP');
- }
-
- /**
- * tests find() with the constant PHP_BINARY.
- *
- * @requires PHP 5.4
- */
- public function testFind()
- {
- if (defined('HHVM_VERSION')) {
- $this->markTestSkipped('Should not be executed in HHVM context.');
- }
-
- $f = new PhpExecutableFinder();
-
- $current = PHP_BINARY;
- $args = 'phpdbg' === PHP_SAPI ? ' -qrr' : '';
-
- $this->assertEquals($current.$args, $f->find(), '::find() returns the executable PHP');
- $this->assertEquals($current, $f->find(false), '::find() returns the executable PHP');
- }
-
- /**
- * tests find() with the env var / constant PHP_BINARY with HHVM.
- */
- public function testFindWithHHVM()
- {
- if (!defined('HHVM_VERSION')) {
- $this->markTestSkipped('Should be executed in HHVM context.');
- }
-
- $f = new PhpExecutableFinder();
-
- $current = getenv('PHP_BINARY') ?: PHP_BINARY;
-
- $this->assertEquals($current.' --php', $f->find(), '::find() returns the executable PHP');
- $this->assertEquals($current, $f->find(false), '::find() returns the executable PHP');
- }
-
- /**
- * tests find() with the env var PHP_PATH.
- */
- public function testFindArguments()
- {
- $f = new PhpExecutableFinder();
-
- if (defined('HHVM_VERSION')) {
- $this->assertEquals($f->findArguments(), array('--php'), '::findArguments() returns HHVM arguments');
- } elseif ('phpdbg' === PHP_SAPI) {
- $this->assertEquals($f->findArguments(), array('-qrr'), '::findArguments() returns phpdbg arguments');
- } else {
- $this->assertEquals($f->findArguments(), array(), '::findArguments() returns no arguments');
- }
- }
-
- /**
- * tests find() with default executable.
- */
- public function testFindWithSuffix()
- {
- if (defined('PHP_BINARY')) {
- $this->markTestSkipped('The PHP binary is easily available as of PHP 5.4');
- }
-
- putenv('PHP_PATH=');
- putenv('PHP_PEAR_PHP_BIN=');
- $f = new PhpExecutableFinder();
-
- $current = $f->find();
-
- //TODO maybe php executable is custom or even Windows
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertTrue(is_executable($current));
- $this->assertTrue((bool) preg_match('/'.addslashes(DIRECTORY_SEPARATOR).'php\.(exe|bat|cmd|com)$/i', $current), '::find() returns the executable PHP with suffixes');
- }
- }
-}
diff --git a/library/symfony/process/Tests/PhpProcessTest.php b/library/symfony/process/Tests/PhpProcessTest.php
deleted file mode 100644
index 2cf79aa1a..000000000
--- a/library/symfony/process/Tests/PhpProcessTest.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\PhpExecutableFinder;
-use Symfony\Component\Process\PhpProcess;
-
-class PhpProcessTest extends \PHPUnit_Framework_TestCase
-{
- public function testNonBlockingWorks()
- {
- $expected = 'hello world!';
- $process = new PhpProcess(<<<PHP
-<?php echo '$expected';
-PHP
- );
- $process->start();
- $process->wait();
- $this->assertEquals($expected, $process->getOutput());
- }
-
- public function testCommandLine()
- {
- if ('phpdbg' === PHP_SAPI) {
- $this->markTestSkipped('phpdbg SAPI is not supported by this test.');
- }
-
- $process = new PhpProcess(<<<PHP
-<?php echo 'foobar';
-PHP
- );
-
- $f = new PhpExecutableFinder();
- $commandLine = $f->find();
-
- $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP before start');
-
- $process->start();
- $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after start');
-
- $process->wait();
- $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after wait');
- }
-}
diff --git a/library/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php b/library/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
deleted file mode 100644
index bbd7ddfeb..000000000
--- a/library/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-define('ERR_SELECT_FAILED', 1);
-define('ERR_TIMEOUT', 2);
-define('ERR_READ_FAILED', 3);
-define('ERR_WRITE_FAILED', 4);
-
-$read = array(STDIN);
-$write = array(STDOUT, STDERR);
-
-stream_set_blocking(STDIN, 0);
-stream_set_blocking(STDOUT, 0);
-stream_set_blocking(STDERR, 0);
-
-$out = $err = '';
-while ($read || $write) {
- $r = $read;
- $w = $write;
- $e = null;
- $n = stream_select($r, $w, $e, 5);
-
- if (false === $n) {
- die(ERR_SELECT_FAILED);
- } elseif ($n < 1) {
- die(ERR_TIMEOUT);
- }
-
- if (in_array(STDOUT, $w) && strlen($out) > 0) {
- $written = fwrite(STDOUT, (binary) $out, 32768);
- if (false === $written) {
- die(ERR_WRITE_FAILED);
- }
- $out = (binary) substr($out, $written);
- }
- if (null === $read && '' === $out) {
- $write = array_diff($write, array(STDOUT));
- }
-
- if (in_array(STDERR, $w) && strlen($err) > 0) {
- $written = fwrite(STDERR, (binary) $err, 32768);
- if (false === $written) {
- die(ERR_WRITE_FAILED);
- }
- $err = (binary) substr($err, $written);
- }
- if (null === $read && '' === $err) {
- $write = array_diff($write, array(STDERR));
- }
-
- if ($r) {
- $str = fread(STDIN, 32768);
- if (false !== $str) {
- $out .= $str;
- $err .= $str;
- }
- if (false === $str || feof(STDIN)) {
- $read = null;
- if (!feof(STDIN)) {
- die(ERR_READ_FAILED);
- }
- }
- }
-}
diff --git a/library/symfony/process/Tests/ProcessBuilderTest.php b/library/symfony/process/Tests/ProcessBuilderTest.php
deleted file mode 100644
index 1b5056d1b..000000000
--- a/library/symfony/process/Tests/ProcessBuilderTest.php
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\ProcessBuilder;
-
-class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
-{
- public function testInheritEnvironmentVars()
- {
- $_ENV['MY_VAR_1'] = 'foo';
-
- $proc = ProcessBuilder::create()
- ->add('foo')
- ->getProcess();
-
- unset($_ENV['MY_VAR_1']);
-
- $env = $proc->getEnv();
- $this->assertArrayHasKey('MY_VAR_1', $env);
- $this->assertEquals('foo', $env['MY_VAR_1']);
- }
-
- public function testAddEnvironmentVariables()
- {
- $pb = new ProcessBuilder();
- $env = array(
- 'foo' => 'bar',
- 'foo2' => 'bar2',
- );
- $proc = $pb
- ->add('command')
- ->setEnv('foo', 'bar2')
- ->addEnvironmentVariables($env)
- ->inheritEnvironmentVariables(false)
- ->getProcess()
- ;
-
- $this->assertSame($env, $proc->getEnv());
- }
-
- public function testProcessShouldInheritAndOverrideEnvironmentVars()
- {
- $_ENV['MY_VAR_1'] = 'foo';
-
- $proc = ProcessBuilder::create()
- ->setEnv('MY_VAR_1', 'bar')
- ->add('foo')
- ->getProcess();
-
- unset($_ENV['MY_VAR_1']);
-
- $env = $proc->getEnv();
- $this->assertArrayHasKey('MY_VAR_1', $env);
- $this->assertEquals('bar', $env['MY_VAR_1']);
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
- */
- public function testNegativeTimeoutFromSetter()
- {
- $pb = new ProcessBuilder();
- $pb->setTimeout(-1);
- }
-
- public function testNullTimeout()
- {
- $pb = new ProcessBuilder();
- $pb->setTimeout(10);
- $pb->setTimeout(null);
-
- $r = new \ReflectionObject($pb);
- $p = $r->getProperty('timeout');
- $p->setAccessible(true);
-
- $this->assertNull($p->getValue($pb));
- }
-
- public function testShouldSetArguments()
- {
- $pb = new ProcessBuilder(array('initial'));
- $pb->setArguments(array('second'));
-
- $proc = $pb->getProcess();
-
- $this->assertContains('second', $proc->getCommandLine());
- }
-
- public function testPrefixIsPrependedToAllGeneratedProcess()
- {
- $pb = new ProcessBuilder();
- $pb->setPrefix('/usr/bin/php');
-
- $proc = $pb->setArguments(array('-v'))->getProcess();
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertEquals('"/usr/bin/php" "-v"', $proc->getCommandLine());
- } else {
- $this->assertEquals("'/usr/bin/php' '-v'", $proc->getCommandLine());
- }
-
- $proc = $pb->setArguments(array('-i'))->getProcess();
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertEquals('"/usr/bin/php" "-i"', $proc->getCommandLine());
- } else {
- $this->assertEquals("'/usr/bin/php' '-i'", $proc->getCommandLine());
- }
- }
-
- public function testArrayPrefixesArePrependedToAllGeneratedProcess()
- {
- $pb = new ProcessBuilder();
- $pb->setPrefix(array('/usr/bin/php', 'composer.phar'));
-
- $proc = $pb->setArguments(array('-v'))->getProcess();
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertEquals('"/usr/bin/php" "composer.phar" "-v"', $proc->getCommandLine());
- } else {
- $this->assertEquals("'/usr/bin/php' 'composer.phar' '-v'", $proc->getCommandLine());
- }
-
- $proc = $pb->setArguments(array('-i'))->getProcess();
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertEquals('"/usr/bin/php" "composer.phar" "-i"', $proc->getCommandLine());
- } else {
- $this->assertEquals("'/usr/bin/php' 'composer.phar' '-i'", $proc->getCommandLine());
- }
- }
-
- public function testShouldEscapeArguments()
- {
- $pb = new ProcessBuilder(array('%path%', 'foo " bar', '%baz%baz'));
- $proc = $pb->getProcess();
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertSame('^%"path"^% "foo \\" bar" "%baz%baz"', $proc->getCommandLine());
- } else {
- $this->assertSame("'%path%' 'foo \" bar' '%baz%baz'", $proc->getCommandLine());
- }
- }
-
- public function testShouldEscapeArgumentsAndPrefix()
- {
- $pb = new ProcessBuilder(array('arg'));
- $pb->setPrefix('%prefix%');
- $proc = $pb->getProcess();
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertSame('^%"prefix"^% "arg"', $proc->getCommandLine());
- } else {
- $this->assertSame("'%prefix%' 'arg'", $proc->getCommandLine());
- }
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\LogicException
- */
- public function testShouldThrowALogicExceptionIfNoPrefixAndNoArgument()
- {
- ProcessBuilder::create()->getProcess();
- }
-
- public function testShouldNotThrowALogicExceptionIfNoArgument()
- {
- $process = ProcessBuilder::create()
- ->setPrefix('/usr/bin/php')
- ->getProcess();
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertEquals('"/usr/bin/php"', $process->getCommandLine());
- } else {
- $this->assertEquals("'/usr/bin/php'", $process->getCommandLine());
- }
- }
-
- public function testShouldNotThrowALogicExceptionIfNoPrefix()
- {
- $process = ProcessBuilder::create(array('/usr/bin/php'))
- ->getProcess();
-
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->assertEquals('"/usr/bin/php"', $process->getCommandLine());
- } else {
- $this->assertEquals("'/usr/bin/php'", $process->getCommandLine());
- }
- }
-
- public function testShouldReturnProcessWithDisabledOutput()
- {
- $process = ProcessBuilder::create(array('/usr/bin/php'))
- ->disableOutput()
- ->getProcess();
-
- $this->assertTrue($process->isOutputDisabled());
- }
-
- public function testShouldReturnProcessWithEnabledOutput()
- {
- $process = ProcessBuilder::create(array('/usr/bin/php'))
- ->disableOutput()
- ->enableOutput()
- ->getProcess();
-
- $this->assertFalse($process->isOutputDisabled());
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
- * @expectedExceptionMessage Symfony\Component\Process\ProcessBuilder::setInput only accepts strings or stream resources.
- */
- public function testInvalidInput()
- {
- $builder = ProcessBuilder::create();
- $builder->setInput(array());
- }
-}
diff --git a/library/symfony/process/Tests/ProcessFailedExceptionTest.php b/library/symfony/process/Tests/ProcessFailedExceptionTest.php
deleted file mode 100644
index 0d763a470..000000000
--- a/library/symfony/process/Tests/ProcessFailedExceptionTest.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\Exception\ProcessFailedException;
-
-/**
- * @author Sebastian Marek <proofek@gmail.com>
- */
-class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * tests ProcessFailedException throws exception if the process was successful.
- */
- public function testProcessFailedExceptionThrowsException()
- {
- $process = $this->getMock(
- 'Symfony\Component\Process\Process',
- array('isSuccessful'),
- array('php')
- );
- $process->expects($this->once())
- ->method('isSuccessful')
- ->will($this->returnValue(true));
-
- $this->setExpectedException(
- '\InvalidArgumentException',
- 'Expected a failed process, but the given process was successful.'
- );
-
- new ProcessFailedException($process);
- }
-
- /**
- * tests ProcessFailedException uses information from process output
- * to generate exception message.
- */
- public function testProcessFailedExceptionPopulatesInformationFromProcessOutput()
- {
- $cmd = 'php';
- $exitCode = 1;
- $exitText = 'General error';
- $output = 'Command output';
- $errorOutput = 'FATAL: Unexpected error';
- $workingDirectory = getcwd();
-
- $process = $this->getMock(
- 'Symfony\Component\Process\Process',
- array('isSuccessful', 'getOutput', 'getErrorOutput', 'getExitCode', 'getExitCodeText', 'isOutputDisabled', 'getWorkingDirectory'),
- array($cmd)
- );
- $process->expects($this->once())
- ->method('isSuccessful')
- ->will($this->returnValue(false));
-
- $process->expects($this->once())
- ->method('getOutput')
- ->will($this->returnValue($output));
-
- $process->expects($this->once())
- ->method('getErrorOutput')
- ->will($this->returnValue($errorOutput));
-
- $process->expects($this->once())
- ->method('getExitCode')
- ->will($this->returnValue($exitCode));
-
- $process->expects($this->once())
- ->method('getExitCodeText')
- ->will($this->returnValue($exitText));
-
- $process->expects($this->once())
- ->method('isOutputDisabled')
- ->will($this->returnValue(false));
-
- $process->expects($this->once())
- ->method('getWorkingDirectory')
- ->will($this->returnValue($workingDirectory));
-
- $exception = new ProcessFailedException($process);
-
- $this->assertEquals(
- "The command \"$cmd\" failed.\n\nExit Code: $exitCode($exitText)\n\nWorking directory: {$workingDirectory}\n\nOutput:\n================\n{$output}\n\nError Output:\n================\n{$errorOutput}",
- $exception->getMessage()
- );
- }
-
- /**
- * Tests that ProcessFailedException does not extract information from
- * process output if it was previously disabled.
- */
- public function testDisabledOutputInFailedExceptionDoesNotPopulateOutput()
- {
- $cmd = 'php';
- $exitCode = 1;
- $exitText = 'General error';
- $workingDirectory = getcwd();
-
- $process = $this->getMock(
- 'Symfony\Component\Process\Process',
- array('isSuccessful', 'isOutputDisabled', 'getExitCode', 'getExitCodeText', 'getOutput', 'getErrorOutput', 'getWorkingDirectory'),
- array($cmd)
- );
- $process->expects($this->once())
- ->method('isSuccessful')
- ->will($this->returnValue(false));
-
- $process->expects($this->never())
- ->method('getOutput');
-
- $process->expects($this->never())
- ->method('getErrorOutput');
-
- $process->expects($this->once())
- ->method('getExitCode')
- ->will($this->returnValue($exitCode));
-
- $process->expects($this->once())
- ->method('getExitCodeText')
- ->will($this->returnValue($exitText));
-
- $process->expects($this->once())
- ->method('isOutputDisabled')
- ->will($this->returnValue(true));
-
- $process->expects($this->once())
- ->method('getWorkingDirectory')
- ->will($this->returnValue($workingDirectory));
-
- $exception = new ProcessFailedException($process);
-
- $this->assertEquals(
- "The command \"$cmd\" failed.\n\nExit Code: $exitCode($exitText)\n\nWorking directory: {$workingDirectory}",
- $exception->getMessage()
- );
- }
-}
diff --git a/library/symfony/process/Tests/ProcessInSigchildEnvironment.php b/library/symfony/process/Tests/ProcessInSigchildEnvironment.php
deleted file mode 100644
index 3977bcdcf..000000000
--- a/library/symfony/process/Tests/ProcessInSigchildEnvironment.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\Process;
-
-class ProcessInSigchildEnvironment extends Process
-{
- protected function isSigchildEnabled()
- {
- return true;
- }
-}
diff --git a/library/symfony/process/Tests/ProcessUtilsTest.php b/library/symfony/process/Tests/ProcessUtilsTest.php
deleted file mode 100644
index e6564cde5..000000000
--- a/library/symfony/process/Tests/ProcessUtilsTest.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\ProcessUtils;
-
-class ProcessUtilsTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * @dataProvider dataArguments
- */
- public function testEscapeArgument($result, $argument)
- {
- $this->assertSame($result, ProcessUtils::escapeArgument($argument));
- }
-
- public function dataArguments()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- return array(
- array('"\"php\" \"-v\""', '"php" "-v"'),
- array('"foo bar"', 'foo bar'),
- array('^%"path"^%', '%path%'),
- array('"<|>\\" \\"\'f"', '<|>" "\'f'),
- array('""', ''),
- array('"with\trailingbs\\\\"', 'with\trailingbs\\'),
- );
- }
-
- return array(
- array("'\"php\" \"-v\"'", '"php" "-v"'),
- array("'foo bar'", 'foo bar'),
- array("'%path%'", '%path%'),
- array("'<|>\" \"'\\''f'", '<|>" "\'f'),
- array("''", ''),
- array("'with\\trailingbs\\'", 'with\trailingbs\\'),
- );
- }
-}
diff --git a/library/symfony/process/Tests/SigchildDisabledProcessTest.php b/library/symfony/process/Tests/SigchildDisabledProcessTest.php
deleted file mode 100644
index fdae5ec25..000000000
--- a/library/symfony/process/Tests/SigchildDisabledProcessTest.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-class SigchildDisabledProcessTest extends AbstractProcessTest
-{
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testGetExitCode()
- {
- parent::testGetExitCode();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testGetExitCodeIsNullOnStart()
- {
- parent::testGetExitCodeIsNullOnStart();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testGetExitCodeIsNullOnWhenStartingAgain()
- {
- parent::testGetExitCodeIsNullOnWhenStartingAgain();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testExitCodeCommandFailed()
- {
- parent::testExitCodeCommandFailed();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testMustRun()
- {
- parent::testMustRun();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testSuccessfulMustRunHasCorrectExitCode()
- {
- parent::testSuccessfulMustRunHasCorrectExitCode();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- */
- public function testMustRunThrowsException()
- {
- parent::testMustRunThrowsException();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- */
- public function testProcessIsSignaledIfStopped()
- {
- parent::testProcessIsSignaledIfStopped();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessWithTermSignal()
- {
- parent::testProcessWithTermSignal();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessIsNotSignaled()
- {
- parent::testProcessIsNotSignaled();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessWithoutTermSignal()
- {
- parent::testProcessWithoutTermSignal();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testCheckTimeoutOnStartedProcess()
- {
- parent::testCheckTimeoutOnStartedProcess();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.
- */
- public function testGetPid()
- {
- parent::testGetPid();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.
- */
- public function testGetPidIsNullBeforeStart()
- {
- parent::testGetPidIsNullBeforeStart();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.
- */
- public function testGetPidIsNullAfterRun()
- {
- parent::testGetPidIsNullAfterRun();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testExitCodeText()
- {
- $process = $this->getProcess('qdfsmfkqsdfmqmsd');
- $process->run();
-
- $process->getExitCodeText();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testExitCodeTextIsNullWhenExitCodeIsNull()
- {
- parent::testExitCodeTextIsNullWhenExitCodeIsNull();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testIsSuccessful()
- {
- parent::testIsSuccessful();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testIsSuccessfulOnlyAfterTerminated()
- {
- parent::testIsSuccessfulOnlyAfterTerminated();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testIsNotSuccessful()
- {
- parent::testIsNotSuccessful();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
- */
- public function testTTYCommandExitCode()
- {
- parent::testTTYCommandExitCode();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process can not be signaled.
- */
- public function testSignal()
- {
- parent::testSignal();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessWithoutTermSignalIsNotSignaled()
- {
- parent::testProcessWithoutTermSignalIsNotSignaled();
- }
-
- public function testStopWithTimeoutIsActuallyWorking()
- {
- $this->markTestSkipped('Stopping with signal is not supported in sigchild environment');
- }
-
- public function testProcessThrowsExceptionWhenExternallySignaled()
- {
- $this->markTestSkipped('Retrieving Pid is not supported in sigchild environment');
- }
-
- public function testExitCodeIsAvailableAfterSignal()
- {
- $this->markTestSkipped('Signal is not supported in sigchild environment');
- }
-
- public function testRunProcessWithTimeout()
- {
- $this->markTestSkipped('Signal (required for timeout) is not supported in sigchild environment');
- }
-
- public function provideStartMethods()
- {
- return array(
- array('start', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
- array('run', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
- array('mustRun', 'Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'),
- );
- }
-
- /**
- * {@inheritdoc}
- */
- protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array())
- {
- $process = new ProcessInSigchildEnvironment($commandline, $cwd, $env, $input, $timeout, $options);
- $process->setEnhanceSigchildCompatibility(false);
-
- return $process;
- }
-}
diff --git a/library/symfony/process/Tests/SigchildEnabledProcessTest.php b/library/symfony/process/Tests/SigchildEnabledProcessTest.php
deleted file mode 100644
index 2668a9b4b..000000000
--- a/library/symfony/process/Tests/SigchildEnabledProcessTest.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-class SigchildEnabledProcessTest extends AbstractProcessTest
-{
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessIsSignaledIfStopped()
- {
- parent::testProcessIsSignaledIfStopped();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessWithTermSignal()
- {
- parent::testProcessWithTermSignal();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessIsNotSignaled()
- {
- parent::testProcessIsNotSignaled();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessWithoutTermSignal()
- {
- parent::testProcessWithoutTermSignal();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.
- */
- public function testGetPid()
- {
- parent::testGetPid();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.
- */
- public function testGetPidIsNullBeforeStart()
- {
- parent::testGetPidIsNullBeforeStart();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.
- */
- public function testGetPidIsNullAfterRun()
- {
- parent::testGetPidIsNullAfterRun();
- }
-
- public function testExitCodeText()
- {
- $process = $this->getProcess('qdfsmfkqsdfmqmsd');
- $process->run();
-
- $this->assertInternalType('string', $process->getExitCodeText());
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process can not be signaled.
- */
- public function testSignal()
- {
- parent::testSignal();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\RuntimeException
- * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
- */
- public function testProcessWithoutTermSignalIsNotSignaled()
- {
- parent::testProcessWithoutTermSignalIsNotSignaled();
- }
-
- public function testProcessThrowsExceptionWhenExternallySignaled()
- {
- $this->markTestSkipped('Retrieving Pid is not supported in sigchild environment');
- }
-
- public function testExitCodeIsAvailableAfterSignal()
- {
- $this->markTestSkipped('Signal is not supported in sigchild environment');
- }
-
- public function testStartAfterATimeout()
- {
- if ('\\' === DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Restarting a timed-out process on Windows is not supported in sigchild environment');
- }
- parent::testStartAfterATimeout();
- }
-
- public function testStopWithTimeoutIsActuallyWorking()
- {
- $this->markTestSkipped('Stopping with signal is not supported in sigchild environment');
- }
-
- public function testRunProcessWithTimeout()
- {
- $this->markTestSkipped('Signal (required for timeout) is not supported in sigchild environment');
- }
-
- public function testCheckTimeoutOnStartedProcess()
- {
- $this->markTestSkipped('Signal (required for timeout) is not supported in sigchild environment');
- }
-
- /**
- * {@inheritdoc}
- */
- protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array())
- {
- $process = new ProcessInSigchildEnvironment($commandline, $cwd, $env, $input, $timeout, $options);
- $process->setEnhanceSigchildCompatibility(true);
-
- return $process;
- }
-}
diff --git a/library/symfony/process/Tests/SignalListener.php b/library/symfony/process/Tests/SignalListener.php
deleted file mode 100644
index 4206550f5..000000000
--- a/library/symfony/process/Tests/SignalListener.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-// required for signal handling
-declare (ticks = 1);
-
-pcntl_signal(SIGUSR1, function () {echo 'Caught SIGUSR1'; exit;});
-
-$n = 0;
-
-// ticks require activity to work - sleep(4); does not work
-while ($n < 400) {
- usleep(10000);
- ++$n;
-}
-
-return;
diff --git a/library/symfony/process/Tests/SimpleProcessTest.php b/library/symfony/process/Tests/SimpleProcessTest.php
deleted file mode 100644
index 78f20eb10..000000000
--- a/library/symfony/process/Tests/SimpleProcessTest.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process\Tests;
-
-use Symfony\Component\Process\Process;
-
-class SimpleProcessTest extends AbstractProcessTest
-{
- private $enabledSigchild = false;
-
- protected function setUp()
- {
- ob_start();
- phpinfo(INFO_GENERAL);
-
- $this->enabledSigchild = false !== strpos(ob_get_clean(), '--enable-sigchild');
- }
-
- public function testGetExitCode()
- {
- $this->skipIfPHPSigchild(); // This test use exitcode that is not available in this case
- parent::testGetExitCode();
- }
-
- public function testExitCodeCommandFailed()
- {
- $this->skipIfPHPSigchild(); // This test use exitcode that is not available in this case
- parent::testExitCodeCommandFailed();
- }
-
- public function testProcessIsSignaledIfStopped()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved');
- parent::testProcessIsSignaledIfStopped();
- }
-
- public function testProcessWithTermSignal()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved');
- parent::testProcessWithTermSignal();
- }
-
- public function testProcessIsNotSignaled()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved');
- parent::testProcessIsNotSignaled();
- }
-
- public function testProcessWithoutTermSignal()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved');
- parent::testProcessWithoutTermSignal();
- }
-
- public function testExitCodeText()
- {
- $this->skipIfPHPSigchild(); // This test use exitcode that is not available in this case
- parent::testExitCodeText();
- }
-
- public function testIsSuccessful()
- {
- $this->skipIfPHPSigchild(); // This test use PID that is not available in this case
- parent::testIsSuccessful();
- }
-
- public function testIsNotSuccessful()
- {
- $this->skipIfPHPSigchild(); // This test use PID that is not available in this case
- parent::testIsNotSuccessful();
- }
-
- public function testGetPid()
- {
- $this->skipIfPHPSigchild(); // This test use PID that is not available in this case
- parent::testGetPid();
- }
-
- public function testGetPidIsNullBeforeStart()
- {
- $this->skipIfPHPSigchild(); // This test use PID that is not available in this case
- parent::testGetPidIsNullBeforeStart();
- }
-
- public function testGetPidIsNullAfterRun()
- {
- $this->skipIfPHPSigchild(); // This test use PID that is not available in this case
- parent::testGetPidIsNullAfterRun();
- }
-
- public function testSignal()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
- parent::testSignal();
- }
-
- public function testProcessWithoutTermSignalIsNotSignaled()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved');
- parent::testProcessWithoutTermSignalIsNotSignaled();
- }
-
- public function testProcessThrowsExceptionWhenExternallySignaled()
- {
- $this->skipIfPHPSigchild(); // This test use PID that is not available in this case
- parent::testProcessThrowsExceptionWhenExternallySignaled();
- }
-
- public function testExitCodeIsAvailableAfterSignal()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
- parent::testExitCodeIsAvailableAfterSignal();
- }
-
- /**
- * @expectedException \Symfony\Component\Process\Exception\LogicException
- * @expectedExceptionMessage Can not send signal on a non running process.
- */
- public function testSignalProcessNotRunning()
- {
- parent::testSignalProcessNotRunning();
- }
-
- public function testSignalWithWrongIntSignal()
- {
- if ($this->enabledSigchild) {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
- } else {
- $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Error while sending signal `-4`.');
- }
- parent::testSignalWithWrongIntSignal();
- }
-
- public function testSignalWithWrongNonIntSignal()
- {
- if ($this->enabledSigchild) {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
- } else {
- $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Error while sending signal `Céphalopodes`.');
- }
- parent::testSignalWithWrongNonIntSignal();
- }
-
- public function testStopTerminatesProcessCleanly()
- {
- $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"');
- $process->run(function () use ($process) {
- $process->stop();
- });
- $this->assertTrue(true, 'A call to stop() is not expected to cause wait() to throw a RuntimeException');
- }
-
- public function testKillSignalTerminatesProcessCleanly()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
-
- $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"');
- $process->run(function () use ($process) {
- if ($process->isRunning()) {
- $process->signal(defined('SIGKILL') ? SIGKILL : 9);
- }
- });
- $this->assertTrue(true, 'A call to signal() is not expected to cause wait() to throw a RuntimeException');
- }
-
- public function testTermSignalTerminatesProcessCleanly()
- {
- $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
-
- $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"');
- $process->run(function () use ($process) {
- if ($process->isRunning()) {
- $process->signal(defined('SIGTERM') ? SIGTERM : 15);
- }
- });
- $this->assertTrue(true, 'A call to signal() is not expected to cause wait() to throw a RuntimeException');
- }
-
- public function testStopWithTimeoutIsActuallyWorking()
- {
- $this->skipIfPHPSigchild();
-
- parent::testStopWithTimeoutIsActuallyWorking();
- }
-
- /**
- * {@inheritdoc}
- */
- protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array())
- {
- return new Process($commandline, $cwd, $env, $input, $timeout, $options);
- }
-
- private function skipIfPHPSigchild()
- {
- if ($this->enabledSigchild) {
- $this->markTestSkipped('Your PHP has been compiled with --enable-sigchild, this test can not be executed');
- }
- }
-
- private function expectExceptionIfPHPSigchild($classname, $message)
- {
- if ($this->enabledSigchild) {
- $this->setExpectedException($classname, $message);
- }
- }
-}
diff --git a/library/symfony/process/phpunit.xml.dist b/library/symfony/process/phpunit.xml.dist
deleted file mode 100644
index 788500084..000000000
--- a/library/symfony/process/phpunit.xml.dist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
- backupGlobals="false"
- colors="true"
- bootstrap="vendor/autoload.php"
->
- <php>
- <ini name="error_reporting" value="-1" />
- </php>
-
- <testsuites>
- <testsuite name="Symfony Process Component Test Suite">
- <directory>./Tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./</directory>
- <exclude>
- <directory>./Tests</directory>
- <directory>./vendor</directory>
- </exclude>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/library/tiptip/README b/library/tiptip/README
deleted file mode 100644
index a83cfba3e..000000000
--- a/library/tiptip/README
+++ /dev/null
@@ -1,30 +0,0 @@
-http://code.drewwilson.com/entry/tiptip-jquery-plugin
-
-License
-This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses.
-
-
-ChangeLog
-Version 1.3 (Mar. 23, 2010)
-
- Added defaultPoistion option that enables you to set the default orientation TipTip should show up as.
- Added attribute option that enables you to set the HTML attribute that TipTip should pull it's content from.
- Added content option. This will be used as the content for the TipTip and will overwrite any content pulled form any HTML attribute.
- Added activation option enables you to specify the jQuery method TipTip is activated with: hover, focus or click. Now you can use TipTip on forms and for validation!
- Added keepAlive option that when set to true the TipTip will only fadeout when you hover over the actual TipTip and then hover off of it. Allowing for hyperlinks inside your TipTip content to be accessible.
-
-Version 1.2 (Jan. 13, 2010)
-
- Added HTML support with Tip Tip. You can now add HTML into the Title attribute (though this is not recommended if you want strictly valid code).
- Tightened up spacing margins in JS.
- Updated margins in CSS file.
-
-Version 1.1 (Jan. 03, 2010)
-
- Swapped dynamically added orientation CSS class names ('_left' & '_right') to make better sense.
- Added in some tighter spacing for the tooltip in JS.
-
-Version 1.0 (Jan. 02, 2010)
-
- Initial release.
-
diff --git a/library/tiptip/README.txt b/library/tiptip/README.txt
deleted file mode 100644
index 740d11a50..000000000
--- a/library/tiptip/README.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-TipTip
-
-*******
-small modification to work with jQuery 1.6.4
-(works also with jQuery 1.7b1)
-*******
-
-Copyright 2010 Drew Wilson
-
-http://www.drewwilson.com
-http://code.drewwilson.com/entry/tiptip-jquery-plugin
-
-Version 1.3 - Updated: Mar. 23, 2010
-
-This Plug-In will create a custom tooltip to replace the default
-browser tooltip. It is extremely lightweight and very smart in
-that it detects the edges of the browser window and will make sure
-the tooltip stays within the current window size. As a result the
-tooltip will adjust itself to be displayed above, below, to the left
-or to the right depending on what is necessary to stay within the
-browser window. It is completely customizable as well via CSS.
-
-This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
-http://www.opensource.org/licenses/mit-license.php
-http://www.gnu.org/licenses/gpl.html \ No newline at end of file
diff --git a/library/tiptip/jquery.tipTip.js b/library/tiptip/jquery.tipTip.js
deleted file mode 100644
index a05315dd7..000000000
--- a/library/tiptip/jquery.tipTip.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/*!
- * TipTip
- * Copyright 2010 Drew Wilson
- * www.drewwilson.com
- * code.drewwilson.com/entry/tiptip-jquery-plugin
- *
- * Version 1.3 - Updated: Mar. 23, 2010
- *
- * This Plug-In will create a custom tooltip to replace the default
- * browser tooltip. It is extremely lightweight and very smart in
- * that it detects the edges of the browser window and will make sure
- * the tooltip stays within the current window size. As a result the
- * tooltip will adjust itself to be displayed above, below, to the left
- * or to the right depending on what is necessary to stay within the
- * browser window. It is completely customizable as well via CSS.
- *
- * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-
-(function($){
- $.fn.tipTip = function(options) {
- var defaults = {
- activation: "hover",
- keepAlive: false,
- maxWidth: "200px",
- edgeOffset: 3,
- defaultPosition: "bottom",
- delay: 400,
- fadeIn: 200,
- fadeOut: 200,
- attribute: "title",
- content: false, // HTML or String to fill TipTIp with
- enter: function(){},
- exit: function(){}
- };
- var opts = $.extend(defaults, options);
-
- // Setup tip tip elements and render them to the DOM
- if($("#tiptip_holder").length <= 0){
- var tiptip_holder = $('<div id="tiptip_holder" style="max-width:'+ opts.maxWidth +';"></div>');
- var tiptip_content = $('<div id="tiptip_content"></div>');
- var tiptip_arrow = $('<div id="tiptip_arrow"></div>');
- $("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')));
- } else {
- var tiptip_holder = $("#tiptip_holder");
- var tiptip_content = $("#tiptip_content");
- var tiptip_arrow = $("#tiptip_arrow");
- }
-
- return this.each(function(){
- var org_elem = $(this);
- if(opts.content){
- var org_title = opts.content;
- } else {
- var org_title = org_elem.attr(opts.attribute);
- }
- if(org_title && org_title != ""){
- if(!opts.content){
- org_elem.removeAttr(opts.attribute); //remove original Attribute
- }
- var timeout = false;
-
- if(opts.activation == "hover"){
- org_elem.hover(function(){
- active_tiptip();
- }, function(){
- if(!opts.keepAlive){
- deactive_tiptip();
- }
- });
- if(opts.keepAlive){
- tiptip_holder.hover(function(){}, function(){
- deactive_tiptip();
- });
- }
- } else if(opts.activation == "focus"){
- org_elem.focus(function(){
- active_tiptip();
- }).blur(function(){
- deactive_tiptip();
- });
- } else if(opts.activation == "click"){
- org_elem.click(function(){
- active_tiptip();
- return false;
- }).hover(function(){},function(){
- if(!opts.keepAlive){
- deactive_tiptip();
- }
- });
- if(opts.keepAlive){
- tiptip_holder.hover(function(){}, function(){
- deactive_tiptip();
- });
- }
- }
-
- function active_tiptip(){
- opts.enter.call(this);
- tiptip_content.html(org_title);
- tiptip_holder.hide().removeAttr("class").css("margin","0");
- tiptip_arrow.removeAttr("style");
-
- var top = parseInt(org_elem.offset()['top']);
- var left = parseInt(org_elem.offset()['left']);
- var org_width = parseInt(org_elem.outerWidth());
- var org_height = parseInt(org_elem.outerHeight());
- var tip_w = tiptip_holder.outerWidth();
- var tip_h = tiptip_holder.outerHeight();
- var w_compare = Math.round((org_width - tip_w) / 2);
- var h_compare = Math.round((org_height - tip_h) / 2);
- var marg_left = Math.round(left + w_compare);
- var marg_top = Math.round(top + org_height + opts.edgeOffset);
- var t_class = "";
- var arrow_top = "";
- var arrow_left = Math.round(tip_w - 12) / 2;
-
- if(opts.defaultPosition == "bottom"){
- t_class = "_bottom";
- } else if(opts.defaultPosition == "top"){
- t_class = "_top";
- } else if(opts.defaultPosition == "left"){
- t_class = "_left";
- } else if(opts.defaultPosition == "right"){
- t_class = "_right";
- }
-
- var right_compare = (w_compare + left) < parseInt($(window).scrollLeft());
- var left_compare = (tip_w + left) > parseInt($(window).width());
-
- if((right_compare && w_compare < 0) || (t_class == "_right" && !left_compare) || (t_class == "_left" && left < (tip_w + opts.edgeOffset + 5))){
- t_class = "_right";
- arrow_top = Math.round(tip_h - 13) / 2;
- arrow_left = -12;
- marg_left = Math.round(left + org_width + opts.edgeOffset);
- marg_top = Math.round(top + h_compare);
- } else if((left_compare && w_compare < 0) || (t_class == "_left" && !right_compare)){
- t_class = "_left";
- arrow_top = Math.round(tip_h - 13) / 2;
- arrow_left = Math.round(tip_w);
- marg_left = Math.round(left - (tip_w + opts.edgeOffset + 5));
- marg_top = Math.round(top + h_compare);
- }
-
- var top_compare = (top + org_height + opts.edgeOffset + tip_h + 8) > parseInt($(window).height() + $(window).scrollTop());
- var bottom_compare = ((top + org_height) - (opts.edgeOffset + tip_h + 8)) < 0;
-
- if(top_compare || (t_class == "_bottom" && top_compare) || (t_class == "_top" && !bottom_compare)){
- if(t_class == "_top" || t_class == "_bottom"){
- t_class = "_top";
- } else {
- t_class = t_class+"_top";
- }
- arrow_top = tip_h;
- marg_top = Math.round(top - (tip_h + 5 + opts.edgeOffset));
- } else if(bottom_compare | (t_class == "_top" && bottom_compare) || (t_class == "_bottom" && !top_compare)){
- if(t_class == "_top" || t_class == "_bottom"){
- t_class = "_bottom";
- } else {
- t_class = t_class+"_bottom";
- }
- arrow_top = -12;
- marg_top = Math.round(top + org_height + opts.edgeOffset);
- }
-
- if(t_class == "_right_top" || t_class == "_left_top"){
- marg_top = marg_top + 5;
- } else if(t_class == "_right_bottom" || t_class == "_left_bottom"){
- marg_top = marg_top - 5;
- }
- if(t_class == "_left_top" || t_class == "_left_bottom"){
- marg_left = marg_left + 5;
- }
- tiptip_arrow.css({"margin-left": arrow_left+"px", "margin-top": arrow_top+"px"});
- tiptip_holder.css({"margin-left": marg_left+"px", "margin-top": marg_top+"px"}).attr("class","tip"+t_class);
-
- if (timeout){ clearTimeout(timeout); }
- timeout = setTimeout(function(){ tiptip_holder.stop(true,true).fadeIn(opts.fadeIn); }, opts.delay);
- }
-
- function deactive_tiptip(){
- opts.exit.call(this);
- if (timeout){ clearTimeout(timeout); }
- tiptip_holder.fadeOut(opts.fadeOut);
- }
- }
- });
- }
-})(jQuery); \ No newline at end of file
diff --git a/library/tiptip/jquery.tipTip.minified.js b/library/tiptip/jquery.tipTip.minified.js
deleted file mode 100644
index 79e58f7ad..000000000
--- a/library/tiptip/jquery.tipTip.minified.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*!
- * TipTip
- * Copyright 2010 Drew Wilson
- * www.drewwilson.com
- * code.drewwilson.com/entry/tiptip-jquery-plugin
- *
- * Version 1.3 - Updated: Mar. 23, 2010
- *
- * This Plug-In will create a custom tooltip to replace the default
- * browser tooltip. It is extremely lightweight and very smart in
- * that it detects the edges of the browser window and will make sure
- * the tooltip stays within the current window size. As a result the
- * tooltip will adjust itself to be displayed above, below, to the left
- * or to the right depending on what is necessary to stay within the
- * browser window. It is completely customizable as well via CSS.
- *
- * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-(function(a){a.fn.tipTip=function(c){var g={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var e=a.extend(g,c);if(a("#tiptip_holder").length<=0){var b=a('<div id="tiptip_holder" style="max-width:'+e.maxWidth+';"></div>');var d=a('<div id="tiptip_content"></div>');var f=a('<div id="tiptip_arrow"></div>');a("body").append(b.html(d).prepend(f.html('<div id="tiptip_arrow_inner"></div>')))}else{var b=a("#tiptip_holder");var d=a("#tiptip_content");var f=a("#tiptip_arrow")}return this.each(function(){var i=a(this);if(e.content){var l=e.content}else{var l=i.attr(e.attribute)}if(l&&l!=""){if(!e.content){i.removeAttr(e.attribute)}var h=false;if(e.activation=="hover"){i.hover(function(){k()},function(){if(!e.keepAlive){j()}});if(e.keepAlive){b.hover(function(){},function(){j()})}}else{if(e.activation=="focus"){i.focus(function(){k()}).blur(function(){j()})}else{if(e.activation=="click"){i.click(function(){k();return false}).hover(function(){},function(){if(!e.keepAlive){j()}});if(e.keepAlive){b.hover(function(){},function(){j()})}}}}function k(){e.enter.call(this);d.html(l);b.hide().removeAttr("class").css("margin","0");f.removeAttr("style");var y=parseInt(i.offset()["top"]);var p=parseInt(i.offset()["left"]);var v=parseInt(i.outerWidth());var A=parseInt(i.outerHeight());var x=b.outerWidth();var s=b.outerHeight();var w=Math.round((v-x)/2);var o=Math.round((A-s)/2);var n=Math.round(p+w);var m=Math.round(y+A+e.edgeOffset);var t="";var C="";var u=Math.round(x-12)/2;if(e.defaultPosition=="bottom"){t="_bottom"}else{if(e.defaultPosition=="top"){t="_top"}else{if(e.defaultPosition=="left"){t="_left"}else{if(e.defaultPosition=="right"){t="_right"}}}}var r=(w+p)<parseInt(a(window).scrollLeft());var q=(x+p)>parseInt(a(window).width());if((r&&w<0)||(t=="_right"&&!q)||(t=="_left"&&p<(x+e.edgeOffset+5))){t="_right";C=Math.round(s-13)/2;u=-12;n=Math.round(p+v+e.edgeOffset);m=Math.round(y+o)}else{if((q&&w<0)||(t=="_left"&&!r)){t="_left";C=Math.round(s-13)/2;u=Math.round(x);n=Math.round(p-(x+e.edgeOffset+5));m=Math.round(y+o)}}var z=(y+A+e.edgeOffset+s+8)>parseInt(a(window).height()+a(window).scrollTop());var B=((y+A)-(e.edgeOffset+s+8))<0;if(z||(t=="_bottom"&&z)||(t=="_top"&&!B)){if(t=="_top"||t=="_bottom"){t="_top"}else{t=t+"_top"}C=s;m=Math.round(y-(s+5+e.edgeOffset))}else{if(B|(t=="_top"&&B)||(t=="_bottom"&&!z)){if(t=="_top"||t=="_bottom"){t="_bottom"}else{t=t+"_bottom"}C=-12;m=Math.round(y+A+e.edgeOffset)}}if(t=="_right_top"||t=="_left_top"){m=m+5}else{if(t=="_right_bottom"||t=="_left_bottom"){m=m-5}}if(t=="_left_top"||t=="_left_bottom"){n=n+5}f.css({"margin-left":u+"px","margin-top":C+"px"});b.css({"margin-left":n+"px","margin-top":m+"px"}).attr("class","tip"+t);if(h){clearTimeout(h)}h=setTimeout(function(){b.stop(true,true).fadeIn(e.fadeIn)},e.delay)}function j(){e.exit.call(this);if(h){clearTimeout(h)}b.fadeOut(e.fadeOut)}}})}})(jQuery);
diff --git a/library/tiptip/tipTip.css b/library/tiptip/tipTip.css
deleted file mode 100644
index 4fb95d376..000000000
--- a/library/tiptip/tipTip.css
+++ /dev/null
@@ -1,113 +0,0 @@
-/* TipTip CSS - Version 1.2 */
-
-#tiptip_holder {
- display: none;
- position: absolute;
- top: 0;
- left: 0;
- z-index: 99999;
-}
-
-#tiptip_holder.tip_top {
- padding-bottom: 5px;
-}
-
-#tiptip_holder.tip_bottom {
- padding-top: 5px;
-}
-
-#tiptip_holder.tip_right {
- padding-left: 5px;
-}
-
-#tiptip_holder.tip_left {
- padding-right: 5px;
-}
-
-#tiptip_content {
- font-size: 11px;
- color: #fff;
- text-shadow: 0 0 2px #000;
- padding: 4px 8px;
- border: 1px solid rgba(255,255,255,0.25);
- background-color: rgb(25,25,25);
- background-color: rgba(25,25,25,0.92);
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000));
- border-radius: 3px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- box-shadow: 0 0 3px #555;
- -webkit-box-shadow: 0 0 3px #555;
- -moz-box-shadow: 0 0 3px #555;
-}
-
-#tiptip_arrow, #tiptip_arrow_inner {
- position: absolute;
- border-color: transparent;
- border-style: solid;
- border-width: 6px;
- height: 0;
- width: 0;
-}
-
-#tiptip_holder.tip_top #tiptip_arrow {
- border-top-color: #fff;
- border-top-color: rgba(255,255,255,0.35);
-}
-
-#tiptip_holder.tip_bottom #tiptip_arrow {
- border-bottom-color: #fff;
- border-bottom-color: rgba(255,255,255,0.35);
-}
-
-#tiptip_holder.tip_right #tiptip_arrow {
- border-right-color: #fff;
- border-right-color: rgba(255,255,255,0.35);
-}
-
-#tiptip_holder.tip_left #tiptip_arrow {
- border-left-color: #fff;
- border-left-color: rgba(255,255,255,0.35);
-}
-
-#tiptip_holder.tip_top #tiptip_arrow_inner {
- margin-top: -7px;
- margin-left: -6px;
- border-top-color: rgb(25,25,25);
- border-top-color: rgba(25,25,25,0.92);
-}
-
-#tiptip_holder.tip_bottom #tiptip_arrow_inner {
- margin-top: -5px;
- margin-left: -6px;
- border-bottom-color: rgb(25,25,25);
- border-bottom-color: rgba(25,25,25,0.92);
-}
-
-#tiptip_holder.tip_right #tiptip_arrow_inner {
- margin-top: -6px;
- margin-left: -5px;
- border-right-color: rgb(25,25,25);
- border-right-color: rgba(25,25,25,0.92);
-}
-
-#tiptip_holder.tip_left #tiptip_arrow_inner {
- margin-top: -6px;
- margin-left: -7px;
- border-left-color: rgb(25,25,25);
- border-left-color: rgba(25,25,25,0.92);
-}
-
-/* Webkit Hacks */
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- #tiptip_content {
- padding: 4px 8px 5px 8px;
- background-color: rgba(45,45,45,0.88);
- }
- #tiptip_holder.tip_bottom #tiptip_arrow_inner {
- border-bottom-color: rgba(45,45,45,0.88);
- }
- #tiptip_holder.tip_top #tiptip_arrow_inner {
- border-top-color: rgba(20,20,20,0.92);
- }
-} \ No newline at end of file
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
new file mode 100644
index 000000000..4a083851d
--- /dev/null
+++ b/phpstan.neon.dist
@@ -0,0 +1,11 @@
+parameters:
+ level: 0
+ paths:
+ - boot.php
+ - include
+ - util
+ - Zotlabs
+ scanDirectories:
+ - library
+ ignoreErrors:
+ - '#Method [\w:()_\\]+ should return (object|string) but return statement is missing.#'
diff --git a/tests/create_test_db.sh b/tests/create_test_db.sh
index b98f5e2a5..dc9122aa0 100755
--- a/tests/create_test_db.sh
+++ b/tests/create_test_db.sh
@@ -40,6 +40,7 @@ case $HZ_TEST_DB_TYPE in
mariadb | mysql )
db_type="mysql"
+ db_binary=$HZ_TEST_DB_TYPE
default_charset="utf8mb4"
root_user="root"
root_passwd="root"
@@ -90,11 +91,11 @@ else
echo -e "\n--------------"
echo "Client version:"
echo -e "--------------\n"
- mysql --version
+ $db_binary --version
- mysql -v -u $HZ_TEST_DB_ROOT_USER -p$HZ_TEST_DB_ROOT_PASS -Ns -e "SELECT VERSION();"
+ $db_binary -v -u $HZ_TEST_DB_ROOT_USER -p$HZ_TEST_DB_ROOT_PASS -Ns -e "SELECT VERSION();"
- mysql -u $HZ_TEST_DB_ROOT_USER -p$HZ_TEST_DB_ROOT_PASS <<-EOSQL
+ $db_binary -u $HZ_TEST_DB_ROOT_USER -p$HZ_TEST_DB_ROOT_PASS <<-EOSQL
DROP DATABASE IF EXISTS $HZ_TEST_DB_NAME;
CREATE DATABASE $HZ_TEST_DB_NAME CHARACTER SET $HZ_TEST_DB_CHARSET;
@@ -107,7 +108,7 @@ else
echo -e "\n--------------"
echo "Importing schema..."
echo -e "--------------\n"
- mysql -u $HZ_TEST_DB_USER -p$HZ_TEST_DB_PASS $HZ_TEST_DB_NAME < ./install/schema_mysql.sql
- mysql -v -u $HZ_TEST_DB_ROOT_USER -p$HZ_TEST_DB_ROOT_PASS -Ns -e "show databases"
- mysql -v -u $HZ_TEST_DB_USER -p$HZ_TEST_DB_PASS $HZ_TEST_DB_NAME -Ns -e "show tables"
+ $db_binary -u $HZ_TEST_DB_USER -p$HZ_TEST_DB_PASS $HZ_TEST_DB_NAME < ./install/schema_mysql.sql
+ $db_binary -v -u $HZ_TEST_DB_ROOT_USER -p$HZ_TEST_DB_ROOT_PASS -Ns -e "show databases"
+ $db_binary -v -u $HZ_TEST_DB_USER -p$HZ_TEST_DB_PASS $HZ_TEST_DB_NAME -Ns -e "show tables"
fi
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 3531cd05c..44ee9c2ee 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="../boot.php" colors="true" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" cacheDirectory=".phpunit.cache">
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="unit/bootstrap.php" colors="true" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" cacheDirectory=".phpunit.cache">
<php>
<includePath>..</includePath>
<!-- env name="HZ_TEST_DB_HOST" value=""/-->
diff --git a/tests/unit/CleanupBBCodeTest.php b/tests/unit/CleanupBBCodeTest.php
new file mode 100644
index 000000000..8e19b1d7e
--- /dev/null
+++ b/tests/unit/CleanupBBCodeTest.php
@@ -0,0 +1,27 @@
+<?php
+/*
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit;
+
+use PHPUnit\Framework\Attributes\DataProvider;
+
+class CleanupBBCodeTest extends UnitTestCase {
+ #[DataProvider("cleanup_bbcode_provider")]
+ public function test_cleanup_bbcode(string $expected, string $input): void {
+ $this->assertEquals($expected, cleanup_bbcode($input));
+ }
+
+ public static function cleanup_bbcode_provider(): array {
+ return [
+ 'url followed by newline' => [
+ "#^[url=https://example.com]https://example.com[/url]\na test link",
+ "https://example.com\na test link",
+ ]
+ ];
+ }
+}
diff --git a/tests/unit/Lib/ActivityStreamsTest.php b/tests/unit/Lib/ActivityStreamsTest.php
new file mode 100644
index 000000000..38be1792e
--- /dev/null
+++ b/tests/unit/Lib/ActivityStreamsTest.php
@@ -0,0 +1,136 @@
+<?php
+/**
+ * Unit tests for Zotlabs\Lib\ActivityStreams.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Lib;
+
+use phpmock\phpunit\PHPMock;
+use Zotlabs\Lib\ActivityStreams;
+use Zotlabs\Tests\Unit\UnitTestCase;
+
+class ActivityStreamsTest extends UnitTestCase {
+
+ // Import PHPMock methods into this class
+ use PHPMock;
+
+ /**
+ * Test parsing an announce activity of a like from a remote server of
+ * a note from a third server.
+ *
+ * Also test that we fetch the referenced objects when the received
+ * activity is parsed,
+ */
+ public function test_parse_announce_of_like(): void {
+ $payload = <<<JSON
+ {
+ "actor": "https://lemmy.test/c/technology",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "object": {
+ "id": "https://lemmy.test/activities/like/e6e38c8b-beee-406f-9523-9da7ec97a823",
+ "actor": "https://lemmy.test/u/SomePerson",
+ "object": "https://somesite.test/post/1197552",
+ "type": "Like",
+ "audience": "https://lemmy.test/c/technology"
+ },
+ "cc": [
+ "https://lemmy.test/c/technology/followers"
+ ],
+ "type": "Announce",
+ "id": "https://lemmy.test/activities/announce/like/9e583a54-e4e0-4436-9726-975a14f923ed"
+ }
+ JSON;
+
+ //
+ // Mock z_fetch_url to prevent us from spamming real servers during test runs
+ //
+ // We just create some sample ActivityStreams objects to return for the various
+ // URL's to make it a somewhat realistic test. Each object will have it's URL as
+ // it's id and only specify the object type as laid out in the $urlmap below.
+
+ $urlmap = [
+ 'https://lemmy.test/c/technology' => [ 'type' => 'Group' ],
+ 'https://lemmy.test/u/SomePerson' => [ 'type' => 'Person' ],
+ 'https://somesite.test/post/1197552' => [ 'type' => 'Note' ],
+ ];
+
+ $z_fetch_url_stub = $this->getFunctionMock('Zotlabs\Lib', 'z_fetch_url');
+ $z_fetch_url_stub
+ ->expects($this->any())
+ ->willReturnCallback(function ($url) use ($urlmap) {
+ if (isset($urlmap[$url])) {
+ $body = json_encode(
+ array_merge([ 'id' => $url ], $urlmap[$url]),
+ JSON_FORCE_OBJECT,
+ );
+
+ return [
+ 'success' => true,
+ 'body' => $body,
+ ];
+ } else {
+ // We should perhaps throw an error here to fail the test,
+ // as we're receiving an unexpected URL.
+ return [
+ 'success' => false,
+ ];
+ }
+ });
+
+ // Make sure we have a sys channel before we start
+ create_sys_channel();
+
+ $as = new ActivityStreams($payload);
+
+ $this->assertTrue($as->valid);
+
+ $this->assertEquals(
+ 'https://lemmy.test/activities/announce/like/9e583a54-e4e0-4436-9726-975a14f923ed',
+ $as->id
+ );
+
+ $this->assertEquals('Announce', $as->type);
+
+ $this->assertIsArray($as->actor);
+ $this->assertArrayHasKey('id', $as->actor);
+ $this->assertEquals('https://lemmy.test/c/technology', $as->actor['id']);
+ $this->assertArrayHasKey('type', $as->actor);
+ $this->assertEquals('Group', $as->actor['type']);
+
+ $this->assertIsArray($as->recips);
+ $this->assertContains('https://www.w3.org/ns/activitystreams#Public', $as->recips);
+ $this->assertContains('https://lemmy.test/c/technology/followers', $as->recips);
+ $this->assertContains('https://lemmy.test/c/technology', $as->recips);
+
+ $this->assertIsArray($as->obj);
+ $this->assertArrayHasKey('id', $as->obj);
+ $this->assertEquals(
+ 'https://lemmy.test/activities/like/e6e38c8b-beee-406f-9523-9da7ec97a823',
+ $as->obj['id']
+ );
+ $this->assertArrayHasKey('type', $as->obj);
+ $this->assertEquals('Like', $as->obj['type']);
+ $this->assertArrayHasKey('object', $as->obj);
+
+ $this->assertIsArray($as->obj['object']);
+
+ $this->assertArrayHasKey('id', $as->obj['object']);
+ $this->assertEquals('https://somesite.test/post/1197552', $as->obj['object']['id']);
+
+ $this->assertArrayHasKey('type', $as->obj['object']);
+ $this->assertEquals('Note', $as->obj['object']['type']);
+
+ $this->assertIsArray($as->obj['actor']);
+ $this->assertArrayHasKey('id', $as->obj['actor']);
+ $this->assertEquals('https://lemmy.test/u/SomePerson', $as->obj['actor']['id']);
+ $this->assertArrayHasKey('type', $as->obj['actor']);
+ $this->assertEquals('Person', $as->obj['actor']['type']);
+ }
+}
diff --git a/tests/unit/Lib/MailerTest.php b/tests/unit/Lib/MailerTest.php
new file mode 100644
index 000000000..038c7ef4c
--- /dev/null
+++ b/tests/unit/Lib/MailerTest.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ * Tests for the Zotlabs\LibM̀ailer class.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Lib;
+
+use App;
+use phpmock\phpunit\PHPMock;
+use Zotlabs\Lib\Mailer;
+use Zotlabs\Tests\Unit\UnitTestCase;
+
+class MailerTest extends UnitTestCase {
+
+ use PHPMock;
+
+ public function test_optional_params_replaced_by_defaults(): void {
+ $hostname = App::get_hostname();
+ $recipient = 'recipient@somesite.test';
+ $subject = 'A test email';
+ $body = <<<EOF
+ Dear recipient,
+
+ This is an test email message for you.
+
+ Sincerely,
+ Hubzilla
+ EOF;
+
+ //
+ // Catch calls to the php mail function, and verify
+ // that it is called with the args we're expecting
+ //
+ $this->getFunctionMock('Zotlabs\Lib', 'mail')
+ ->expects($this->once())
+ ->with(
+ $this->identicalTo($recipient),
+ $this->identicalTo($subject),
+ $this->identicalTo($body),
+ $this->identicalTo(<<<EOF
+ From: <Administrator@{$hostname}>
+ Reply-To: <noreply@{$hostname}>
+ Content-Type: text/plain; charset=UTF-8
+ EOF
+ )
+ )
+ ->willReturn(true);
+
+ $mailer = new Mailer([
+ 'toEmail' => $recipient,
+ 'messageSubject' => $subject,
+ 'textVersion' => $body,
+ ]);
+
+ $mailer->deliver();
+ }
+}
diff --git a/tests/unit/Module/AdminAccountEditTest.php b/tests/unit/Module/AdminAccountEditTest.php
new file mode 100644
index 000000000..818f30f26
--- /dev/null
+++ b/tests/unit/Module/AdminAccountEditTest.php
@@ -0,0 +1,222 @@
+<?php
+/* Tests for Account_edit module
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Module;
+
+use DateTimeImmutable;
+use PHPUnit\Framework\Attributes\{Before, After};
+
+class AdminAccountEditTest extends TestCase {
+
+ private $stub_is_site_admin;
+ private $stub_info;
+ private $stub_notice;
+ private $stub_check_security;
+ private $stub_get_form_security_token;
+
+ private array $info;
+ private array $notice;
+
+ #[Before]
+ public function setup_mocks(): void {
+ /*
+ * As we're testing pages that should only be reachable by the
+ * site admin, it makes no sense to have it return anything else
+ * than true.
+ */
+ $this->stub_is_site_admin =
+ $this->getFunctionMock('Zotlabs\Module', 'is_site_admin')
+ ->expects($this->once())
+ ->willReturn(true);
+
+ $this->info = [];
+ $this->stub_info =
+ $this->getFunctionMock('Zotlabs\Module\Admin', 'info')
+ ->expects($this->any())
+ ->willReturnCallback(function (string $arg) {
+ $this->info[] = $arg;
+ });
+
+ $this->notice = [];
+ $this->stub_notice =
+ $this->getFunctionMock('Zotlabs\Module\Admin', 'notice')
+ ->expects($this->any())
+ ->willReturnCallback(function (string $arg) {
+ $this->notice[] = $arg;
+ });
+
+ }
+
+ #[After]
+ public function tear_down_mocks(): void {
+ $this->stub_is_site_admin = null;
+ $this->stub_info = null;
+ $this->stub_notice = null;
+ $this->stub_check_security = null;
+ $this->stub_get_form_security_token = null;
+ }
+
+ public function test_rendering_admin_account_edit_page(): void {
+ $this->stub_get_form_security_token =
+ $this->getFunctionMock('Zotlabs\Module\Admin', 'get_form_security_token')
+ ->expects($this->once())
+ ->willReturn('the-csrf-token');
+
+ $account = $this->fixtures['account'][0];
+
+ $this->get("admin/account_edit/{$account['account_id']}");
+
+ $this->assertPageContains("<form action=\"admin/account_edit/{$account['account_id']}\" method=\"post\"");
+ $this->assertPageContains($account['account_email']);
+
+ // Check that we generate a CSRF token for the form
+ $this->assertPageContains("<input type=\"hidden\" name=\"security\" value=\"the-csrf-token\"");
+ }
+
+ public function test_rendering_admin_account_edit_page_fails_if_id_is_not_found(): void {
+ $this->get("admin/account_edit/666");
+
+ $this->assertEquals('', \App::$page['content']);
+ }
+
+ public function test_rendering_admin_account_edit_page_fails_if_id_is_not_numeric(): void {
+ $this->get("admin/account_edit/66invalid");
+
+ $this->assertEquals('', \App::$page['content']);
+ }
+
+ public function test_post_empty_form_does_not_modify_account(): void {
+ $this->stub_goaway();
+ $this->stub_check_form_security(true);
+
+ $account = get_account_by_id($this->fixtures['account'][0]['account_id']);
+
+ try {
+ $this->post(
+ "admin/account_edit/{$account['account_id']}",
+ [],
+ [
+ 'aid' => $account['account_id'],
+ 'pass1' => '',
+ 'pass2' => '',
+ 'service_class' => $account['account_service_class'],
+ 'account_language' => $account['account_language'],
+ 'security' => 'The security token',
+ ]
+ );
+ } catch (RedirectException $ex) {
+ $this->assertEquals(z_root() . '/admin/accounts', $ex->getMessage());
+ }
+
+ $reloaded = get_account_by_id($account['account_id']);
+
+ $this->assertEquals($account, $reloaded);
+
+ // Not sure if this is expected behaviour, but this is how it is today.
+ $this->assertContains('Account settings updated.' . EOL, $this->info);
+ }
+
+ public function test_post_form_changes_account(): void {
+ $this->stub_goaway();
+ $this->stub_check_form_security(true);
+
+ // clone account from fixture, to ensure it's not replaced with
+ // the reloaded one below.
+ $account = get_account_by_id($this->fixtures['account'][0]['account_id']);
+
+ try {
+ $this->post(
+ "admin/account_edit/{$account['account_id']}",
+ [],
+ [
+ 'aid' => $account['account_id'],
+ 'pass1' => 'hunter2',
+ 'pass2' => 'hunter2',
+ 'service_class' => 'Some other class',
+ 'account_language' => 'nn',
+ 'security' => 'The security token',
+ ]
+ );
+ } catch (RedirectException $ex) {
+ $this->assertEquals(z_root() . '/admin/accounts', $ex->getMessage());
+ }
+
+ $reloaded = get_account_by_id($account['account_id']);
+
+ $this->assertNotEquals($account, $reloaded);
+ $this->assertEquals('Some other class', $reloaded['account_service_class']);
+ $this->assertEquals('nn', $reloaded['account_language']);
+
+ $now = new DateTimeImmutable('now');
+ $this->assertEquals($now->format('Y-m-d H:i:s'), $reloaded['account_password_changed']);
+
+ $this->assertContains('Account settings updated.' . EOL, $this->info);
+ $this->assertContains("Password changed for account {$account['account_id']}." . EOL, $this->info);
+ }
+
+ public function test_form_with_missing_or_incalid_csrf_token_is_rejected(): void {
+ $this->expectException(KillmeException::class);
+
+ // Emulate a failed CSRF check
+ $this->stub_check_form_security(false);
+
+ $account_id = $this->fixtures['account'][0]['account_id'];
+
+ $this->post(
+ "admin/account_edit/{$account_id}",
+ [],
+ [
+ 'aid' => $account_id,
+ 'pass1' => 'hunter2',
+ 'pass2' => 'hunter2',
+ 'service_class' => 'Some other class',
+ 'account_language' => 'nn',
+ 'security' => 'Invalid security token',
+ ]
+ );
+ }
+
+ /*
+ * Override the stub_goaway method because we need the stub to live in the
+ * Admin namespace.
+ */
+ protected function stub_goaway(): void {
+ $this->goaway_stub = $this->getFunctionMock('Zotlabs\Module\Admin', 'goaway')
+ ->expects($this->once())
+ ->willReturnCallback(
+ function (string $uri) {
+ throw new RedirectException($uri);
+ }
+ );
+ }
+
+ /**
+ * Stub the check_form_security_token_ForbiddenOnErr.
+ *
+ * In these tests we're not really interested in _how_ the form security
+ * tokens work, but that the code under test perform the checks. This stub
+ * allows us to do that without having to worry if everything is set up so
+ * that the real function would work or not.
+ *
+ * @param bool $valid true if emulating a valid token, false otherwise.
+ */
+ protected function stub_check_form_security(bool $valid): void {
+ $this->stub_check_security =
+ $this->getFunctionMock('Zotlabs\Module\Admin', 'check_form_security_token_ForbiddenOnErr')
+ ->expects($this->once())
+ ->with(
+ $this->identicalTo('admin_account_edit'),
+ $this->identicalTo('security'))
+ ->willReturnCallback(function () use ($valid) {
+ if (! $valid) {
+ throw new KillmeException();
+ }
+ });
+ }
+}
diff --git a/tests/unit/Module/AdminAccountsTest.php b/tests/unit/Module/AdminAccountsTest.php
new file mode 100644
index 000000000..2c76f2779
--- /dev/null
+++ b/tests/unit/Module/AdminAccountsTest.php
@@ -0,0 +1,173 @@
+<?php
+/*
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Module;
+
+use PHPUnit\Framework\Attributes\Before;
+
+class AdminAccountsTest extends TestCase {
+
+ protected $stub_check_security;
+ protected $stub_is_site_admin;
+ protected $stub_goaway;
+ protected $stub_notice;
+
+ protected array $notice;
+
+ /**
+ * Set up the stubs common for the tests.
+ */
+ #[Before]
+ public function setup_stubs(): void {
+ $this->stub_check_form_security();
+ $this->stub_is_site_admin();
+ $this->stub_goaway();
+ $this->stub_notice();
+ }
+
+ public function test_blocking_accounts_marks_selected_accounts_as_blocked(): void {
+ $params = [
+ 'user' => [ 42 ],
+ 'blocked' => [ false ],
+ 'page_accounts_block' => true,
+ ];
+
+ try {
+ $this->post('admin/accounts', [], $params);
+ } catch (RedirectException $redirect) {
+ $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
+ }
+
+ $account = get_account_by_id(42);
+ $this->assertEquals(ACCOUNT_BLOCKED, $account['account_flags'] & ACCOUNT_BLOCKED);
+
+ $this->assertEquals('1 account blocked/unblocked', $this->notice[0]);
+ }
+
+ public function test_unblocking_accounts_clears_the_blocked_flag(): void {
+ // Pass two users to the module, one that is not blocked,
+ // and one that is.
+ $params = [
+ 'user' => [ 42, 44 ],
+ 'blocked' => [ false, true ],
+ 'page_accounts_block' => true,
+ ];
+
+ try {
+ $this->post('admin/accounts', [], $params);
+ } catch (RedirectException $redirect) {
+ $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
+ }
+
+ // We expect the previously unblocked account to be blocked.
+ $account = get_account_by_id(42);
+ $this->assertEquals(ACCOUNT_BLOCKED, $account['account_flags'] & ACCOUNT_BLOCKED);
+
+ // We expect the previously blocked account to be unblocked.
+ $blocked_account = get_account_by_id(44);
+ $this->assertEquals(0, $blocked_account['account_flags'] & ACCOUNT_BLOCKED);
+
+ $this->assertEquals('2 account blocked/unblocked', $this->notice[0]);
+ }
+
+ public function test_deleting_accouns_remove_them_from_db(): void {
+ $params = [
+ 'user' => [ 42, 44 ],
+ 'page_accounts_delete' => true,
+ ];
+
+ try {
+ $this->post('admin/accounts', [], $params);
+ } catch (RedirectException $redirect) {
+ $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
+ }
+
+ $this->assertEquals(null, get_account_by_id(42));
+ $this->assertEquals(null, get_account_by_id(44));
+ }
+
+ public function test_approving_pending_accounts_clears_pending_flag(): void {
+
+ // Catch calls to the php mail function
+ //
+ // This is just to get it out of the way, we don't care about
+ // how many times it's called, or with what args here.
+ $this->getFunctionMock('Zotlabs\Lib', 'mail')
+ ->expects($this->any())
+ ->willReturn(true);
+
+ $params = [
+ 'pending' => [
+ $this->fixtures['register'][0]['reg_hash'],
+ $this->fixtures['register'][1]['reg_hash']
+ ],
+ 'page_accounts_approve' => true,
+ ];
+
+ try {
+ $this->post('admin/accounts', [], $params);
+ } catch (RedirectException $redirect) {
+ $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
+ }
+
+ foreach ([45, 46] as $id) {
+ $account = get_account_by_id($id);
+ $this->assertEquals(0, $account['account_flags'] & ACCOUNT_PENDING);
+ }
+ }
+
+ /**
+ * Stub the check_form_security_token_ForbiddenOnErr.
+ */
+ protected function stub_check_form_security(): void {
+ $this->stub_check_security =
+ $this->getFunctionMock('Zotlabs\Module\Admin', 'check_form_security_token_redirectOnErr')
+ ->expects($this->once())
+ ->with(
+ $this->identicalTo('/admin/accounts'),
+ $this->identicalTo('admin_accounts'))
+ ->willReturn(true);
+ }
+
+ /**
+ * Stub the call to is_site_admin in the Admin main module.
+ */
+ protected function stub_is_site_admin(): void {
+ $this->stub_is_site_admin =
+ $this->getFunctionMock('Zotlabs\Module', 'is_site_admin')
+ ->expects($this->once())
+ ->willReturn(true);
+ }
+
+ /**
+ * Stub the goaway function.
+ *
+ * Will throw an RedirectException with the URL being redirected to
+ * as the exception message.
+ *
+ * @throws RedirectException
+ */
+ protected function stub_goaway(): void {
+ $this->stub_goaway =
+ $this->getFunctionMock('Zotlabs\Module\Admin', 'goaway')
+ ->expects($this->once())
+ ->willReturnCallback(function (string $uri) {
+ throw new RedirectException($uri);
+ });
+ }
+
+ protected function stub_notice(): void {
+ $this->notice = [];
+ $this->stub_notice =
+ $this->getFunctionMock('Zotlabs\Module\Admin', 'notice')
+ ->expects($this->any())
+ ->willReturnCallback(function (string $arg) {
+ $this->notice[] = $arg;
+ });
+ }
+}
diff --git a/tests/unit/Module/ItemTest.php b/tests/unit/Module/ItemTest.php
new file mode 100644
index 000000000..b461a3685
--- /dev/null
+++ b/tests/unit/Module/ItemTest.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Module;
+
+use PHPUnit\Framework\Attributes\TestWith;
+
+class ItemTest extends TestCase {
+
+ #[TestWith(['application/x-zot+json'])]
+ #[TestWith(['application/x-zot-activity+json'])]
+ public function test_request_with_no_args_return_404(string $type): void {
+ $this->expect_status(404, 'Not found');
+
+ $_SERVER['HTTP_ACCEPT'] = $type;
+ $this->get('item');
+ }
+
+ #[TestWith(['application/x-zot+json'])]
+ #[TestWith(['application/x-zot-activity+json'])]
+ public function test_request_with_non_exiting_idem_id(string $type): void {
+ $this->expect_status(404, 'Not found');
+
+ $_SERVER['HTTP_ACCEPT'] = $type;
+ $this->get('item/non-existing-id');
+ }
+
+ /**
+ * Helper function to mock the `http_status_exit` function.
+ *
+ * The request will be terminated by throwing an exception, which
+ * will also terminate the test case. Iow. control will not return
+ * to the test case after the request has been made.
+ *
+ * @param int $status The expected HTTP status code.
+ * @param string $description The expected HTTP status description
+ */
+ private function expect_status(int $status, string $description): void {
+ $this->getFunctionMock('Zotlabs\Module', 'http_status_exit')
+ ->expects($this->once())
+ ->with($this->identicalTo($status), $this->identicalTo($description))
+ ->willReturnCallback(
+ function () {
+ throw new KillmeException();
+ }
+ );
+
+ $this->expectException(KillmeException::class);
+
+ }
+}
diff --git a/tests/unit/Module/MagicTest.php b/tests/unit/Module/MagicTest.php
new file mode 100644
index 000000000..4a03d9d57
--- /dev/null
+++ b/tests/unit/Module/MagicTest.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Tests for the Magic module
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Module;
+
+use PHPUnit\Framework\Attributes\BackupStaticProperties;
+use Zotlabs\Module\Magic;
+use App;
+
+class MagicTest extends TestCase {
+
+ public function test_init_with_no_args(): void {
+
+ // We expect the request to end with a status 400, as we do not
+ // pass any of the required params.
+ //
+ // To catch that, we have to mock the call to `http_status_exit`
+ // made by the code under test.
+ $this->getFunctionMock('Zotlabs\Module', 'http_status_exit')
+ ->expects($this->once()) // Expect the function to be called only once!
+ ->with( // ... with the following two arguments
+ $this->identicalTo(400),
+ $this->identicalTo('Bad Request')
+ )
+ ->willReturnCallback(function () { // Run this function instead when called
+ throw new KillmeException; // Throw an exception to terminate processing
+ });
+
+ // Tell the test system we excpect this exception to be thrown
+ $this->expectException(KillmeException::class);
+
+ $this->get('magic');
+ }
+
+ #[BackupStaticProperties(App::class)]
+ public function test_local_request_without_delegate(): void {
+ $baseurl = 'https://hubzilla.test';
+ $dest_url = $baseurl . '/channel/testuser';
+
+ App::set_baseurl($baseurl);
+
+ App::$observer = [
+ 'xchan_hash' => 'the hash',
+ ];
+
+ // We pass a local URL, and have a valid observer, but as the
+ // delegate param is not passed, nothing will be done except
+ // redirecting to the passed dest url.
+ //
+ // This should probably return a 400 Invalid Request instead.
+ $this->expectRedirectTo($dest_url);
+
+ $this->get('magic', [ 'bdest' => bin2hex($dest_url) ]);
+ }
+
+ #[BackupStaticProperties(App::class)]
+ public function test_delegate_request_switches_channel_when_allowed(): void {
+ $baseurl = 'https://hubzilla.test';
+ $dest_url = $baseurl . '/channel/testuser';
+
+ // Set the stage:
+ // Populate the global static App class with necessary values for the
+ // code under test
+ App::set_baseurl($baseurl);
+ App::$timezone = 'UTC';
+
+ // Simulate a foreign (to this hub) observer,
+ App::$observer = [
+ 'xchan_hash' => 'foreign hash',
+ ];
+
+ // Create the channel the foreign observer wants to access
+ $result = create_identity([
+ 'account_id' => $this->fixtures['account'][0]['account_id'],
+ 'nickname' => 'testuser',
+ 'name' => 'Trish Testuser',
+ ]);
+
+ // Shortcut the permission checks, by saying this observer is allowed
+ // the delegate privilege over the target channel
+ insert_hook('perm_is_allowed', function (array &$perm) {
+ $perm['result'] = true;
+ });
+
+ // Add some dummy session data, so we can check that it's being
+ // pushed to the delegate session.
+ $original_session = [
+ 'data' => 'Just some test session data',
+ ];
+
+ $_SESSION = $original_session;
+
+ // Handle redirects manually, since we want to be able to check some
+ // assertions after the redirect is thrown.
+ $this->stub_goaway();
+
+ try {
+ // Send a request to get delegate privileges for the `testuser` channel
+ // on the local hub.
+ $this->get('magic', [
+ 'bdest' => bin2hex($dest_url),
+ 'delegate' => 'testuser@hubzilla.test']
+ );
+ } catch (RedirectException $e) {
+ $this->assertEquals($dest_url, $e->getMessage());
+ $this->assertEquals($result['channel']['channel_id'], App::$channel['channel_id']);
+ $this->assertEquals($original_session, $_SESSION['delegate_push']);
+ $this->assertEquals($result['channel']['channel_id'], $_SESSION['delegate_channel']);
+ $this->assertEquals('foreign hash', $_SESSION['delegate']);
+ $this->assertEquals($this->fixtures['account'][0]['account_id'], $_SESSION['account_id']);
+ }
+ }
+}
diff --git a/tests/unit/Module/OwaTest.php b/tests/unit/Module/OwaTest.php
new file mode 100644
index 000000000..dbb25c0b5
--- /dev/null
+++ b/tests/unit/Module/OwaTest.php
@@ -0,0 +1,64 @@
+<?php
+/*
+ * SPDX-FileCopyrightText: 2025 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Module;
+
+class OwaTest extends TestCase
+{
+ public function testShouldReturnErrorIfNoAuthorizationHeader(): void
+ {
+ // Expect the call to return error
+ $this->expectJsonResponse([
+ 'success' => false,
+ 'message' => 'Missing or invalid authorization header.'
+ ]);
+
+ $this->get('owa');
+ }
+
+ public function testShouldReturnErrorIfWrongAuthorizationHeader(): void
+ {
+ // Expect the call to return error
+ $this->expectJsonResponse([
+ 'success' => false,
+ 'message' => 'Missing or invalid authorization header.'
+ ]);
+
+ $_SERVER['HTTP_AUTHORIZATION'] = 'Bearer kjkjhkjhkjh';
+ $this->get('owa');
+ }
+
+ public function testShouldReturnErrorIfInvalidAuthorizationHeader(): void
+ {
+ // Expect the call to return error
+ $this->expectJsonResponse(['success' => false]);
+
+ $_SERVER['HTTP_AUTHORIZATION'] = 'Signature kjkjhkjhkjh';
+ $this->get('owa');
+ }
+
+ /**
+ * Expect the request to be terminated and return a json response.
+ */
+ private function expectJsonResponse(array $data): void
+ {
+ $this->getFunctionMock('Zotlabs\Module', 'json_return_and_die')
+ ->expects($this->once())
+ ->with(
+ $this->identicalTo($data),
+ $this->identicalTo('application/x-zot+json')
+ )
+ ->willReturnCallback(
+ function() {
+ throw new KillmeException();
+ }
+ );
+
+ $this->expectException(KillmeException::class);
+ }
+}
diff --git a/tests/unit/Module/TestCase.php b/tests/unit/Module/TestCase.php
index e92bc7083..1a4cf52fc 100644
--- a/tests/unit/Module/TestCase.php
+++ b/tests/unit/Module/TestCase.php
@@ -10,6 +10,7 @@
namespace Zotlabs\Tests\Unit\Module;
+use PHPUnit\Framework\Attributes\After;
use Zotlabs\Tests\Unit\UnitTestCase;
use App;
@@ -25,26 +26,25 @@ class TestCase extends UnitTestCase {
// Import PHPMock methods into this class
use \phpmock\phpunit\PHPMock;
- /**
- * Emulate a GET request.
- *
- * @param string $uri The URI to request. Typically this will be the module
- * name, followed by any req args separated by slashes.
- * @param array $query Assciative array of query args, with the parameters
- * as keys.
- */
- protected function get(string $uri, array $query = []): void {
- $_GET['q'] = $uri;
+ protected $killme_stub;
+ protected $goaway_stub;
+
+ #[After]
+ public function cleanup_stubs(): void {
+ $this->killme_stub = null;
+ $this->goaway_stub = null;
+ }
- if (!empty($query)) {
- $_GET = array_merge($_GET, $query);
- }
+ protected function do_request(string $method, string $uri, array $query = [], array $params = []): void {
+ $_GET['q'] = $uri;
+ $_GET = array_merge($_GET, $query);
+ $_POST = $params;
- $_SERVER['REQUEST_METHOD'] = 'GET';
+ $_SERVER['REQUEST_METHOD'] = $method;
$_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1';
$_SERVER['QUERY_STRING'] = "q={$uri}";
// phpcs:disable Generic.PHP.DisallowRequestSuperglobal.Found
- $_REQUEST = $_GET;
+ $_REQUEST = array_merge($_GET, $_POST);
// phpcs::enable
\App::init();
@@ -55,6 +55,32 @@ class TestCase extends UnitTestCase {
}
/**
+ * Emulate a GET request.
+ *
+ * @param string $uri The URI to request. Typically this will be the module
+ * name, followed by any req args separated by slashes.
+ * @param array $query Assciative array of query args, with the parameters
+ * as keys.
+ */
+ protected function get(string $uri, array $query = []): void {
+ $this->do_request('GET', $uri, $query);
+ }
+
+ /**
+ * Emulate a POST request.
+ *
+ * @param string $uri The URI to request. Typically this will be the module
+ * name, followed by any req args separated by slashes.
+ * @param array $query Associative array of query args, with the parameters
+ * as keys.
+ * @param array $params Associative array of POST params, with the param names
+ * as keys.
+ */
+ protected function post(string $uri, array $query = [], array $params = []): void {
+ $this->do_request('POST', $uri, $query, $params);
+ }
+
+ /**
* Helper to simplify asserting contents in the rendered page.
*
* @param string $needle The expected string to find.
@@ -100,8 +126,7 @@ class TestCase extends UnitTestCase {
* @throws KillmeException
*/
protected function stub_killme(): void {
- $killme_stub = $this->getFunctionMock('Zotlabs\Module', 'killme');
- $killme_stub
+ $this->killme_stub = $this->getFunctionMock('Zotlabs\Module', 'killme')
->expects($this->once())
->willReturnCallback(
function () {
@@ -147,8 +172,7 @@ class TestCase extends UnitTestCase {
* @throws RedirectException
*/
protected function stub_goaway(): void {
- $goaway_stub = $this->getFunctionMock('Zotlabs\Module', 'goaway');
- $goaway_stub
+ $this->goaway_stub = $this->getFunctionMock('Zotlabs\Module', 'goaway')
->expects($this->once())
->willReturnCallback(
function (string $uri) {
diff --git a/tests/unit/Thumb/EpubthumbTest.php b/tests/unit/Thumb/EpubthumbTest.php
new file mode 100644
index 000000000..d381d940e
--- /dev/null
+++ b/tests/unit/Thumb/EpubthumbTest.php
@@ -0,0 +1,158 @@
+<?php
+/*
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Thumbs;
+
+use PHPUnit\Framework\Attributes\{AfterClass, Before, BeforeClass};
+use Zotlabs\Thumbs\Epubthumb;
+use Zotlabs\Tests\Unit\UnitTestCase;
+
+use ZipArchive;
+
+class EpubthumbTest extends UnitTestCase {
+ private const TMPDIR = __DIR__ . '/tmp';
+
+ private Epubthumb $thumbnailer;
+
+ /**
+ * Create a temp dir to use for the tests in this class.
+ */
+ #[BeforeClass]
+ static function setupTmpDir(): void {
+ if (!is_dir(self::TMPDIR)) {
+ mkdir(self::TMPDIR);
+ }
+ }
+
+ /**
+ * Clean up and remove the temp dir after the tests.
+ */
+ #[AfterClass]
+ static function cleanupTmpDir(): void {
+ $files = scandir(self::TMPDIR);
+ if ($files !== false) {
+ foreach($files as $f) {
+ if ($f[0] !== '.') {
+ unlink(self::TMPDIR . '/' . $f);
+ }
+ }
+ }
+ rmdir(self::TMPDIR);
+ }
+
+ /**
+ * Create the thumbnailer object for tests.
+ *
+ * This is run before each test, so that each test has it's own
+ * instance of the thumbnailer.
+ */
+ #[Before]
+ function createThumbnailer(): void {
+ $this->thumbnailer = new Epubthumb();
+ }
+
+ /*
+ * Tests
+ */
+
+ public function testEpubThumbMatch(): void {
+ $this->assertTrue($this->thumbnailer->Match('application/epub+zip'));
+ $this->assertFalse($this->thumbnailer->Match('application/zip'));
+ }
+
+ public function testNoThumbnailCreatedForFileThatDontExist(): void {
+ $this->checkCreateThumbnail(self::TMPDIR . '/nonexisting.epub', false);
+ }
+
+ public function testNoThumbnailCreatedIfNotAZipArchive(): void {
+ $filename = self::TMPDIR . '/notazip.epub';
+
+ file_put_contents($filename, 'This is not a ZIP file!');
+
+ $this->checkCreateThumbnail($filename, false);
+ }
+
+ public function testNoThumbnailCreatedIfInvalidEpub(): void {
+ $filename = self::TMPDIR . '/nocontainer.epub';
+
+ $epub = new ZipArchive();
+ $epub->open($filename, ZipArchive::CREATE);
+ $epub->addFromString('somefile.txt', 'It was a dark an stormy night...');
+ $epub->close();
+
+ $this->checkCreateThumbnail($filename, false);
+ }
+
+ public function testNoThumbnailCreatedIfCoverFileMissing(): void {
+ $filename = self::TMPDIR . '/good.epub';
+
+ $epub = new ZipArchive();
+ $epub->open($filename, ZipArchive::CREATE);
+ $this->addEpubContainer($epub);
+ $this->addEpubPackage($epub);
+ $epub->close();
+
+ $this->checkCreateThumbnail($filename, false);
+ }
+
+ public function testCreateCoverFromEpub(): void {
+ $filename = self::TMPDIR . '/good.epub';
+
+ $epub = new ZipArchive();
+ $epub->open($filename, ZipArchive::CREATE);
+ $this->addEpubContainer($epub);
+ $this->addEpubPackage($epub);
+ $epub->addFile(PROJECT_BASE . '/images/red-koala.png', 'EPUB/cover.png');
+ $epub->close();
+
+ $this->checkCreateThumbnail($filename, true);
+ }
+
+ /*
+ * Helper functions
+ */
+
+ private function checkCreateThumbnail(string $filename, bool $expectThumbnail): void {
+ $attach = [ 'content' => $filename ];
+ $this->thumbnailer->Thumb($attach, 0);
+
+ $this->assertEquals($expectThumbnail, file_exists($filename . '.thumb'));
+ }
+
+ private function addEpubContainer(ZipArchive $epub): void {
+ $xml = <<<XML
+ <?xml version="1.0" encoding="UTF-8"?>
+ <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+ <rootfiles>
+ <rootfile full-path="EPUB/package.opf" media-type="application/oebps-package+xml"/>
+ </rootfiles>
+ </container>
+ XML;
+
+ $epub->addEmptyDir('META-INF');
+ $epub->addFromString('META-INF/container.xml', $xml);
+ }
+
+ private function addEpubPackage(ZipArchive $epub): void {
+ $xml = <<<XML
+ <?xml version="1.0" encoding="UTF-8"?>
+ <package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="pub-identifier">
+ <manifest>
+ <item
+ properties="cover-image"
+ id="ci"
+ href="cover.png"
+ media-type="image/png" />
+ </manifest>
+ </package>
+ XML;
+
+ $epub->addEmptyDir('EPUB');
+ $epub->addFromString('EPUB/package.opf', $xml);
+ }
+}
diff --git a/tests/unit/UnitTestCase.php b/tests/unit/UnitTestCase.php
index afc309205..e3cd22b63 100644
--- a/tests/unit/UnitTestCase.php
+++ b/tests/unit/UnitTestCase.php
@@ -47,7 +47,7 @@ require_once 'include/dba/dba_transaction.php';
*/
class UnitTestCase extends TestCase {
protected array $fixtures = array();
- protected ?\DbaTransaction $db_transacton = null;
+ protected ?\DbaTransaction $db_transaction = null;
/**
* Connect to the test db, load fixtures and global config.
@@ -75,6 +75,14 @@ class UnitTestCase extends TestCase {
}
/**
+ * Initialize the global App properties.
+ */
+ #[Before]
+ protected function init_app(): void {
+ \App::set_hostname('hubzilla.test');
+ }
+
+ /**
* Roll back test database to it's original state, cleaning up
* any changes from the test.
*
diff --git a/tests/unit/Widget/HelpindexTest.php b/tests/unit/Widget/HelpindexTest.php
index 26aa34104..87042c559 100644
--- a/tests/unit/Widget/HelpindexTest.php
+++ b/tests/unit/Widget/HelpindexTest.php
@@ -8,6 +8,8 @@
* SPDX-License-Identifier: MIT
*/
+use PHPUnit\Framework\Attributes\Before;
+
/**
* Test class for testing the Helpindex widget.
*/
@@ -15,6 +17,8 @@ class HelpindexTest extends \Zotlabs\Tests\Unit\Module\TestCase {
use \phpmock\phpunit\PHPMock;
+ private string $output;
+
/**
* Define the stubs to make sure they work later in the test.
*
@@ -27,6 +31,12 @@ class HelpindexTest extends \Zotlabs\Tests\Unit\Module\TestCase {
self::defineFunctionMock('Zotlabs\Widget', 'file_get_contents');
}
+ #[Before]
+ public function setup_state(): void {
+ // Make sure the output is cleared before running the test
+ $this->output = '';
+ }
+
public function test_loading_toc(): void {
// Stub `file_get_contents` to plant our own content.
$fgc_stub = $this->getFunctionMock('Zotlabs\Widget', 'file_get_contents');
diff --git a/tests/unit/bootstrap.php b/tests/unit/bootstrap.php
new file mode 100644
index 000000000..296e1b9b6
--- /dev/null
+++ b/tests/unit/bootstrap.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Bootstrapping unit test framework
+ *
+ */
+
+require_once __dir__ . '/../../boot.php';
+require_once __dir__ . '/UnitTestCase.php';
+require_once __dir__ . '/Module/TestCase.php';
diff --git a/tests/unit/includes/BBCodeTest.php b/tests/unit/includes/BBCodeTest.php
index c6a60f35b..136fc6e0e 100644
--- a/tests/unit/includes/BBCodeTest.php
+++ b/tests/unit/includes/BBCodeTest.php
@@ -143,6 +143,14 @@ class BBCodeTest extends UnitTestCase {
'example url: https://example.com',
'example url: <a href="https://example.com" target="_blank" rel="nofollow noopener">https://example.com</a>'
],
+ 'naked url followed by newline' => [
+ "https://www.example.com\nhave a great day.",
+ '<a href="https://www.example.com" target="_blank" rel="nofollow noopener">https://www.example.com</a><br />have a great day.',
+ ],
+ 'inline naked url' => [
+ "This is a link https://example.com/some/path more info.",
+ 'This is a link <a href="https://example.com/some/path" target="_blank" rel="nofollow noopener">https://example.com/some/path</a> more info.',
+ ],
'naked url within code block is not converted to link' => [
"[code]\nhttp://example.com\n[/code]",
"<pre><code>http://example.com</code></pre>"
diff --git a/tests/unit/includes/DatetimeTest.php b/tests/unit/includes/DatetimeTest.php
new file mode 100644
index 000000000..f8c480449
--- /dev/null
+++ b/tests/unit/includes/DatetimeTest.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * tests function from include/datetime.php
+ *
+ * @package test.util
+ */
+
+use Zotlabs\Tests\Unit\UnitTestCase;
+
+class DatetimeTest extends UnitTestCase {
+
+ // Test when the timestamp is in the past
+ public function test_relative_time_past() {
+ $now = new DateTime('2024-12-07 00:00:00');
+ $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2023-12-05 10:30:00');
+ $result = relative_time($timestamp, $now);
+ $this->assertEquals('1 year ago', $result);
+ }
+
+ // Test when the timestamp is in the future
+ public function test_relative_time_future() {
+ $now = new DateTime('2024-12-07 00:00:00');
+ $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-09 12:00:00');
+ $result = relative_time($timestamp, $now);
+ $this->assertEquals('in 2 days', $result);
+ }
+
+ // Test for "now" case (timestamp exactly equal to current time)
+ public function test_relative_time_now() {
+ $now = new DateTime('2024-12-07 00:00:00');
+ $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-07 00:00:00');
+ $result = relative_time($timestamp, $now);
+ $this->assertEquals('now', $result);
+ }
+
+ // Test for future time with smaller units (e.g., minutes)
+ public function test_relative_time_future_minutes() {
+ $now = new DateTime('2024-12-07 10:30:00');
+ $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-07 10:35:00');
+ $result = relative_time($timestamp, $now);
+ $this->assertEquals('in 5 minutes', $result);
+ }
+
+ // Test for past time with smaller units (e.g., seconds)
+ public function test_relative_time_past_seconds() {
+ $now = new DateTime('2024-12-07 10:30:00');
+ $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-07 10:29:58');
+ $result = relative_time($timestamp, $now);
+ $this->assertEquals('2 seconds ago', $result);
+ }
+}
+
+
diff --git a/tests/unit/includes/ItemsTest.php b/tests/unit/includes/ItemsTest.php
new file mode 100644
index 000000000..1c2fb6725
--- /dev/null
+++ b/tests/unit/includes/ItemsTest.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * tests function from include/items.php
+ *
+ * @package test.util
+ */
+
+use Zotlabs\Tests\Unit\UnitTestCase;
+
+class ItemsTest extends UnitTestCase {
+ /**
+ * Data provider for item_forwardable function.
+ *
+ * @return array
+ */
+ public static function itemForwardableDataProvider()
+ {
+ return [
+ // Test case: item is unpublished
+ [
+ [
+ 'item_unpublished' => 1,
+ 'item_delayed' => 0,
+ 'item_blocked' => 0,
+ 'item_hidden' => 0,
+ 'item_restrict' => 0,
+ 'verb' => 'Create',
+ 'postopts' => '',
+ 'author' => ['xchan_network' => '']
+ ],
+ false // Expected result
+ ],
+ // Test case: item is delayed
+ [
+ [
+ 'item_unpublished' => 0,
+ 'item_delayed' => 1,
+ 'item_blocked' => 0,
+ 'item_hidden' => 0,
+ 'item_restrict' => 0,
+ 'verb' => 'Create',
+ 'postopts' => '',
+ 'author' => ['xchan_network' => '']
+ ],
+ false
+ ],
+ // Test case: item is blocked
+ [
+ [
+ 'item_unpublished' => 0,
+ 'item_delayed' => 0,
+ 'item_blocked' => 1,
+ 'item_hidden' => 0,
+ 'item_restrict' => 0,
+ 'verb' => 'Create',
+ 'postopts' => '',
+ 'author' => ['xchan_network' => '']
+ ],
+ false
+ ],
+ // Test case: verb is 'Follow' (forbidden verb)
+ [
+ [
+ 'item_unpublished' => 0,
+ 'item_delayed' => 0,
+ 'item_blocked' => 0,
+ 'item_hidden' => 0,
+ 'item_restrict' => 0,
+ 'verb' => 'Follow',
+ 'postopts' => '',
+ 'author' => ['xchan_network' => '']
+ ],
+ false
+ ],
+ // Test case: postopts contains 'nodeliver'
+ [
+ [
+ 'item_unpublished' => 0,
+ 'item_delayed' => 0,
+ 'item_blocked' => 0,
+ 'item_hidden' => 0,
+ 'item_restrict' => 0,
+ 'verb' => 'Create',
+ 'postopts' => 'nodeliver',
+ 'author' => ['xchan_network' => '']
+ ],
+ false
+ ],
+ // Test case: actor's network is 'rss' (restricted network)
+ [
+ [
+ 'item_unpublished' => 0,
+ 'item_delayed' => 0,
+ 'item_blocked' => 0,
+ 'item_hidden' => 0,
+ 'item_restrict' => 0,
+ 'verb' => 'Create',
+ 'postopts' => '',
+ 'author' => ['xchan_network' => 'rss']
+ ],
+ false
+ ],
+ // Test case: no conditions met (should forward)
+ [
+ [
+ 'item_unpublished' => 0,
+ 'item_delayed' => 0,
+ 'item_blocked' => 0,
+ 'item_hidden' => 0,
+ 'item_restrict' => 0,
+ 'verb' => 'Create',
+ 'postopts' => '',
+ 'author' => ['xchan_network' => 'other']
+ ],
+ true
+ ]
+ ];
+ }
+
+ /**
+ * Test item_forwardable with various data.
+ *
+ * @dataProvider itemForwardableDataProvider
+ */
+ public function testItemForwardable($item, $expected)
+ {
+ $this->assertSame($expected, item_forwardable($item));
+ }
+
+}
+
+
diff --git a/tests/unit/includes/MarkdownTest.php b/tests/unit/includes/MarkdownTest.php
index 217d12ca2..55dbb4445 100644
--- a/tests/unit/includes/MarkdownTest.php
+++ b/tests/unit/includes/MarkdownTest.php
@@ -36,7 +36,7 @@ class MarkdownTest extends UnitTestCase {
* @dataProvider markdown_to_bbcode_provider
*/
public function test_markdown_to_bbcode(string $expected, string $src): void {
- $this->assertEquals($expected, markdown_to_bb($src));
+ $this->assertEquals($expected, markdown_to_bb($src, true, ['preserve_lf' => true]));
}
public static function markdown_to_bbcode_provider(): array {
@@ -54,11 +54,14 @@ class MarkdownTest extends UnitTestCase {
'This is a test of **bold text**, *italic text* and ***bold and italic text***'
],
'multiline text' => [
- 'This text is text wrapped over multiple lines.',
+ // This is not as expected in markdown, but may be needed
+ // for compatibility with bbcode behaviour.
+ "This text is\ntext wrapped\nover multiple\nlines.",
"This text is\ntext wrapped\nover multiple\nlines."
],
'text with hard linebreak' => [
- "Line one\nLine two",
+ // An extra line break is inserted here...
+ "Line one\n\nLine two",
"Line one \nLine two"
],
'paragraphs' => [
@@ -78,29 +81,39 @@ class MarkdownTest extends UnitTestCase {
'`some code`'
],
'inline code with wrapped text' => [
- '[code]some code unwrapped[/code]',
+ // Not sure if the newline should be preseved here?
+ "[code]some code\nunwrapped[/code]",
"`some code\n unwrapped`"
],
'code block no language' => [
- "[code]some code\nover multiple lines[/code]",
+ "[code]some code\nover multiple lines\n[/code]",
"```\nsome code\nover multiple lines\n```"
],
'code block no language indented' => [
- "[code]some code\n over multiple lines\n with indentation[/code]",
+ // For some reason one space char is eaten on indented lines.
+ "[code]some code\n over multiple lines\n with indentation\n[/code]",
"```\nsome code\n over multiple lines\n with indentation\n```"
],
'code block with language' => [
- "[code=php]&lt;?php\necho phpinfo();[/code]",
+ "[code=php]&lt;?php\necho phpinfo();\n[/code]",
"```php\n<?php\necho phpinfo();\n```"
],
'code block with URL' => [
- "[code]an example url https://example.com[/code]",
+ "[code]an example url https://example.com\n[/code]",
"```\nan example url https://example.com\n```"
],
'bbcode code block with URL' => [
- "[code] proxy_pass http://example.com; [/code]",
+ "[code]\nproxy_pass http://example.com;\n[/code]",
"[code]\nproxy_pass http://example.com;\n[/code]"
- ]
+ ],
+ 'naked url followed by newline' => [
+ "https://example.com\nhave a great day.",
+ "https://example.com\nhave a great day.",
+ ],
+ 'inline naked url' => [
+ 'This is a link https://example.com/some/path more info.',
+ 'This is a link https://example.com/some/path more info.',
+ ],
];
}
diff --git a/tests/unit/includes/NetworkTest.php b/tests/unit/includes/NetworkTest.php
index a41075f25..0d99fc9c3 100644
--- a/tests/unit/includes/NetworkTest.php
+++ b/tests/unit/includes/NetworkTest.php
@@ -60,7 +60,63 @@ class NetworkTest extends Zotlabs\Tests\Unit\UnitTestCase {
['some.email@example.cancerresearch', true],
// And internationalized TLD's
- ['some.email@example.شبكة', true]
+ ['some.email@example.شبكة', true],
+
+ // Allow plus/minus addressing
+ ['address+tag@example.com', true],
+ ['address-tag@example.com', true],
+ ];
+ }
+
+ /**
+ * Test the unparse_url function.
+ *
+ */
+ public function test_unparse_url_full()
+ {
+ $parsed_url = [
+ 'scheme' => 'https',
+ 'host' => 'www.example.com',
+ 'port' => '8080',
+ 'user' => 'username',
+ 'pass' => 'password',
+ 'path' => '/path',
+ 'query' => 'param=value',
+ 'fragment' => 'section'
+ ];
+
+ $expected = 'https://username:password@www.example.com:8080/path?param=value#section';
+ $this->assertEquals($expected, unparse_url($parsed_url));
+ }
+
+ public function test_unparse_url_partial()
+ {
+ $parsed_url = [
+ 'scheme' => 'http',
+ 'host' => 'example.com',
+ 'path' => '/index.php'
];
+
+ $expected = 'http://example.com/index.php';
+ $this->assertEquals($expected, unparse_url($parsed_url));
+ }
+
+ public function test_unparse_url_custom()
+ {
+ $parsed_url = [
+ 'scheme' => 'https',
+ 'host' => 'www.example.com',
+ 'port' => '443',
+ 'path' => '/api'
+ ];
+
+ $parts = ['scheme', 'host'];
+ $expected = 'https://www.example.com';
+ $this->assertEquals($expected, unparse_url($parsed_url, $parts));
+ }
+
+ public function test_unparse_url_empty()
+ {
+ $this->assertEquals('', unparse_url([]));
}
}
diff --git a/tests/unit/includes/dba/DbaPdoTest.php b/tests/unit/includes/dba/DbaPdoTest.php
new file mode 100644
index 000000000..8a1a2b197
--- /dev/null
+++ b/tests/unit/includes/dba/DbaPdoTest.php
@@ -0,0 +1,140 @@
+<?php
+/**
+ * Tests for `includes/dba_pdo.php`.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\includes;
+
+use DBA;
+use PDO;
+use PDOStatement;
+use PHPUnit\Framework\Attributes\DataProvider;
+use Zotlabs\Tests\Unit\UnitTestCase;
+
+class DbaPdoTest extends UnitTestCase
+{
+ public function testInsertingRowWithRturningClauseReturnsInsertedRow(): void
+ {
+ // MySQL does not support the `returning` clause, so we skip the test
+ // for that DB backend.
+ $this->skipIfMySQL();
+
+ // Let's manually insert a row in the config table.
+ // This is just because it's a conventient table to test
+ // against
+ $res = q(<<<SQL
+ INSERT INTO config (cat, k, v)
+ VALUES ('test', 'a key', 'A value')
+ RETURNING *
+ SQL);
+
+ $this->assertIsArray($res);
+ $this->assertIsArray($res[0]);
+ $this->assertTrue($res[0]['id'] > 0);
+ $this->assertEquals('test', $res[0]['cat']);
+ $this->assertEquals('a key', $res[0]['k']);
+ $this->assertEquals('A value', $res[0]['v']);
+ }
+
+ #[DataProvider('insertRowProvider')]
+ public function testInsertRow(string $table, array $data, string $id): void
+ {
+ $res = DBA::$dba->insert($table, $data, $id);
+
+ $this->assertIsArray($res);
+
+ // Make sure the result contains the expected id
+ $this->assertArrayHasKey($id, $res);
+
+ foreach ($data as $key => $value) {
+ $this->assertEquals($value, $res[$key]);
+ }
+ }
+
+ #[DataProvider('insertRowProvider')]
+ public function testInsertShouldReturnFalseIfInsertFails(
+ string $table,
+ array $data,
+ string $id
+ ): void
+ {
+ $res1 = DBA::$dba->insert($table, $data, $id);
+ $this->assertIsArray($res1);
+
+ // Inserting the same row again should fail.
+ $res2 = DBA::$dba->insert($table, $data, $id);
+ $this->assertFalse($res2);
+ }
+
+ /**
+ * Dataprovider for testInertRow.
+ *
+ * @return array An array of [ $table, $data, $id ] elements.
+ */
+ public static function insertRowProvider(): array
+ {
+ return [
+ 'table with numeric primary id' => [
+ 'config',
+ [ 'cat' => 'test', 'k' => 'a key', 'v' => 'A value' ],
+ 'id',
+ ],
+ 'table with text primary id' => [
+ 'cache',
+ [ 'k' => 'some key', 'v' => 'cached value', 'updated' => date('Y-m-d H:i:s')],
+ 'k',
+ ],
+ ];
+ }
+
+ public function testUpdateRow(): void
+ {
+ // Let's fetch a row from the config table
+ $res = q("SELECT * FROM config WHERE cat = 'system' AND k = 'baseurl'");
+
+ $this->assertIsArray($res);
+ $this->assertIsArray($res[0]);
+
+ $row = $res[0];
+
+ // Update the baseurl
+ $updated = DBA::$dba->update(
+ 'config',
+ [ 'v' => 'https://some.other_site.test/' ],
+ 'id',
+ $row['id']
+ );
+
+ $this->assertTrue($updated);
+
+ // Verify that the record was updated
+ $updated_res = q("SELECT * FROM config WHERE cat = 'system' AND k = 'baseurl'");
+ $this->assertIsArray($updated_res);
+
+ $updated_row = $updated_res[0];
+
+ $this->assertIsArray($updated_row);
+ $this->assertEquals($row['id'], $updated_row['id']);
+ $this->assertEquals('system', $updated_row['cat']);
+ $this->assertEquals('baseurl', $updated_row['k']);
+ $this->assertEquals('https://some.other_site.test/', $updated_row['v']);
+ }
+
+ /**
+ * Mark the test as skipped if the current db is MySQL.
+ */
+ private function skipIfMySQL(): void {
+ $driver = DBA::$dba->db->getAttribute(PDO::ATTR_DRIVER_NAME);
+ $version = DBA::$dba->db->getAttribute(PDO::ATTR_SERVER_VERSION);
+
+ if ($driver === 'mysql' && stripos($version, 'mariadb') === false) {
+ $this->markTestSkipped("RETURNING clause not supported for {$driver}");
+ }
+
+ }
+}
diff --git a/tests/unit/includes/dba/_files/account.yml b/tests/unit/includes/dba/_files/account.yml
index 88e59056e..9c3d00ec8 100644
--- a/tests/unit/includes/dba/_files/account.yml
+++ b/tests/unit/includes/dba/_files/account.yml
@@ -3,9 +3,26 @@ account:
account_id: 42
account_email: "hubzilla@example.com"
account_language: "no"
+ account_level: 5
account_flags: 0
-
account_id: 43
account_email: "hubzilla@example.org"
account_language: "de"
+ account_level: 5
account_flags: 1
+ -
+ account_id: 44
+ account_email: "blocked@example.org"
+ account_level: 5
+ account_flags: 2
+ -
+ account_id: 45
+ account_email: "pending@example.org"
+ account_level: 5
+ account_flags: 0x10
+ -
+ account_id: 46
+ account_email: "unverified@example.org"
+ account_level: 5
+ account_flags: 0x11
diff --git a/tests/unit/includes/dba/_files/register.yml b/tests/unit/includes/dba/_files/register.yml
new file mode 100644
index 000000000..2ef1a5365
--- /dev/null
+++ b/tests/unit/includes/dba/_files/register.yml
@@ -0,0 +1,20 @@
+---
+register:
+ -
+ reg_vital: 1
+ reg_flags: 0x10
+ reg_did2: 'verified@example.com'
+ reg_email: 'verified@example.com'
+ reg_hash: '123'
+ reg_uid: 45
+ reg_pass: 'verify'
+ reg_stuff: ''
+ -
+ reg_vital: 1
+ reg_flags: 0x11
+ reg_did2: 'unverified@example.com'
+ reg_email: 'unverified@example.com'
+ reg_hash: '666'
+ reg_uid: 46
+ reg_pass: 'verify'
+ reg_stuff: ''
diff --git a/util/hmessages.po b/util/hmessages.po
index 7088da197..8ef51a278 100644
--- a/util/hmessages.po
+++ b/util/hmessages.po
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 9.4RC\n"
+"Project-Id-Version: 10.2RC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-09-20 12:31+0200\n"
+"POT-Creation-Date: 2025-03-05 10:11+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,85 +17,633 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../../include/bbcode.php:234 ../../include/bbcode.php:994
-#: ../../include/bbcode.php:1659 ../../include/bbcode.php:1667
-msgid "Image/photo"
+#: ../../util/nconfig.php:34
+msgid "Source channel not found."
msgstr ""
-#: ../../include/bbcode.php:286
-msgid "Encrypted content"
+#: ../../view/theme/redbasic/php/config.php:18 ../../include/text.php:3518
+#: ../../addon/cart/submodules/orderoptions.php:335
+#: ../../addon/cart/submodules/orderoptions.php:359
+#: ../../addon/cart/submodules/orderoptions.php:435
+#: ../../addon/cart/submodules/orderoptions.php:459
+#: ../../Zotlabs/Module/Admin/Site.php:233
+msgid "Default"
msgstr ""
-#: ../../include/bbcode.php:342
+#: ../../view/theme/redbasic/php/config.php:19
+#: ../../view/theme/redbasic/php/config.php:22
+msgid "Focus (Hubzilla default)"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:188 ../../include/js_strings.php:23
+#: ../../addon/irc/irc.php:45 ../../addon/socialauth/Mod_SocialAuth.php:341
+#: ../../addon/hubwall/hubwall.php:96
+#: ../../addon/openclipatar/openclipatar.php:54
+#: ../../addon/hzfiles/hzfiles.php:86 ../../addon/piwik/piwik.php:95
+#: ../../addon/redphotos/redphotos.php:136
+#: ../../addon/pageheader/Mod_Pageheader.php:52
+#: ../../addon/ijpost/Mod_Ijpost.php:72 ../../addon/redred/Mod_Redred.php:88
+#: ../../addon/startpage/Mod_Startpage.php:75
+#: ../../addon/libertree/Mod_Libertree.php:68 ../../addon/logrot/logrot.php:35
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:61
+#: ../../addon/dwpost/Mod_Dwpost.php:78 ../../addon/diaspora/diaspora.php:90
+#: ../../addon/diaspora/Mod_Diaspora.php:101
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54 ../../addon/mailtest/mailtest.php:100
+#: ../../addon/nsfw/Mod_Nsfw.php:59 ../../addon/pumpio/Mod_Pumpio.php:113
+#: ../../addon/wppost/Mod_Wppost.php:107 ../../addon/wiki/Mod_Wiki.php:218
+#: ../../addon/wiki/Mod_Wiki.php:907 ../../addon/wiki/Widget/Wiki_pages.php:72
+#: ../../addon/xmpp/Mod_Xmpp.php:70 ../../addon/statusnet/statusnet.php:602
+#: ../../addon/statusnet/Mod_Statusnet.php:191
+#: ../../addon/statusnet/Mod_Statusnet.php:249
+#: ../../addon/statusnet/Mod_Statusnet.php:304
+#: ../../addon/flashcards/Mod_Flashcards.php:269
+#: ../../addon/ljpost/Mod_Ljpost.php:80 ../../addon/faces/Mod_Faces.php:141
+#: ../../addon/cart/submodules/hzservices.php:645
+#: ../../addon/cart/submodules/subscriptions.php:410
+#: ../../addon/cart/submodules/manualcat.php:248
+#: ../../addon/cart/submodules/orderoptions.php:312
+#: ../../addon/cart/submodules/orderoptions.php:412
+#: ../../addon/cart/cart.php:1424 ../../addon/cart/Settings/Cart.php:132
+#: ../../addon/cart/Settings/Cart.php:142
+#: ../../addon/twitter/Mod_Twitter.php:182
+#: ../../addon/redfiles/redfiles.php:124
+#: ../../addon/openstreetmap/openstreetmap.php:147
+#: ../../addon/workflow/workflow.php:1490
+#: ../../addon/workflow/workflow.php:1549
+#: ../../addon/workflow/workflow.php:1668
+#: ../../addon/workflow/workflow.php:2815
+#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94
+#: ../../addon/skeleton/Mod_Skeleton.php:49
+#: ../../addon/content_import/Mod_content_import.php:140
+#: ../../addon/rtof/Mod_Rtof.php:70 ../../addon/nofed/Mod_Nofed.php:51
+#: ../../addon/photocache/Mod_Photocache.php:63
+#: ../../addon/likebanner/likebanner.php:57
+#: ../../Zotlabs/Lib/ThreadItem.php:799 ../../Zotlabs/Storage/Browser.php:386
+#: ../../Zotlabs/Module/Oauth.php:110 ../../Zotlabs/Module/Import_items.php:125
+#: ../../Zotlabs/Module/Thing.php:364 ../../Zotlabs/Module/Thing.php:414
+#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Pdledit.php:137
+#: ../../Zotlabs/Module/Connect.php:107
+#: ../../Zotlabs/Module/Filestorage.php:208
+#: ../../Zotlabs/Module/Contactedit.php:415
+#: ../../Zotlabs/Module/Contactedit.php:448
+#: ../../Zotlabs/Module/Pconfig.php:117 ../../Zotlabs/Module/Appman.php:230
+#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Defperms.php:262
+#: ../../Zotlabs/Module/Locs.php:125
+#: ../../Zotlabs/Module/Admin/Accounts.php:209
+#: ../../Zotlabs/Module/Admin/Themes.php:174
+#: ../../Zotlabs/Module/Admin/Addons.php:193
+#: ../../Zotlabs/Module/Admin/Features.php:67
+#: ../../Zotlabs/Module/Admin/Profs.php:179
+#: ../../Zotlabs/Module/Admin/Channels.php:169
+#: ../../Zotlabs/Module/Admin/Account_edit.php:78
+#: ../../Zotlabs/Module/Admin/Logs.php:85
+#: ../../Zotlabs/Module/Admin/Site.php:403
+#: ../../Zotlabs/Module/Admin/Security.php:130
+#: ../../Zotlabs/Module/Affinity.php:84 ../../Zotlabs/Module/Permcats.php:257
+#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Group.php:151
+#: ../../Zotlabs/Module/Group.php:160 ../../Zotlabs/Module/Invite.php:564
+#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:1056
+#: ../../Zotlabs/Module/Photos.php:1095 ../../Zotlabs/Module/Photos.php:1208
+#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
+#: ../../Zotlabs/Module/Profiles.php:738 ../../Zotlabs/Module/Chat.php:208
+#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Regate.php:408
+#: ../../Zotlabs/Module/Setup.php:322 ../../Zotlabs/Module/Setup.php:362
+#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Oauth2.php:115
+#: ../../Zotlabs/Module/Settings/Display.php:188
+#: ../../Zotlabs/Module/Settings/Network.php:62
+#: ../../Zotlabs/Module/Settings/Channel_home.php:91
+#: ../../Zotlabs/Module/Settings/Account.php:109
+#: ../../Zotlabs/Module/Settings/Editor.php:42
+#: ../../Zotlabs/Module/Settings/Features.php:48
+#: ../../Zotlabs/Module/Settings/Directory.php:42
+#: ../../Zotlabs/Module/Settings/Manage.php:43
+#: ../../Zotlabs/Module/Settings/Privacy.php:123
+#: ../../Zotlabs/Module/Settings/Events.php:42
+#: ../../Zotlabs/Module/Settings/Photos.php:42
+#: ../../Zotlabs/Module/Settings/Conversation.php:44
+#: ../../Zotlabs/Module/Settings/Channel.php:230
+#: ../../Zotlabs/Module/Settings/Profiles.php:52
+#: ../../Zotlabs/Module/Settings/Connections.php:42
+#: ../../Zotlabs/Module/Settings/Calendar.php:42
+#: ../../Zotlabs/Module/Settings/Multifactor.php:85
+#: ../../Zotlabs/Module/Email_validation.php:41
+#: ../../Zotlabs/Module/Import.php:623
+msgid "Submit"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:192
+msgid "Theme settings"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:193
+msgid "Dark style"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:194
+msgid "Light style"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:195
+msgid "Common settings"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:196
+msgid "Primary theme color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:196
+#: ../../view/theme/redbasic/php/config.php:197
+#: ../../view/theme/redbasic/php/config.php:198
+#: ../../view/theme/redbasic/php/config.php:199
+#: ../../view/theme/redbasic/php/config.php:200
+msgid "Current color, leave empty for default"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:197
+msgid "Success theme color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:198
+msgid "Info theme color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:199
+msgid "Warning theme color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:200
+msgid "Danger theme color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:201
+msgid "Default to dark mode"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:201
+#: ../../view/theme/redbasic/php/config.php:202
+#: ../../view/theme/redbasic/php/config.php:203
+#: ../../view/theme/redbasic/php/config.php:215
+#: ../../include/conversation.php:1274
+#: ../../addon/socialauth/Mod_SocialAuth.php:218
+#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
+#: ../../addon/libertree/Mod_Libertree.php:57
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:45
+#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
+#: ../../addon/diaspora/Mod_Diaspora.php:70
+#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96
+#: ../../addon/pumpio/Mod_Pumpio.php:100 ../../addon/wppost/Mod_Wppost.php:84
+#: ../../addon/wppost/Mod_Wppost.php:88 ../../addon/wppost/Mod_Wppost.php:92
+#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
+#: ../../addon/statusnet/Mod_Statusnet.php:258
+#: ../../addon/statusnet/Mod_Statusnet.php:280
+#: ../../addon/statusnet/Mod_Statusnet.php:289
+#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
+#: ../../addon/ljpost/Mod_Ljpost.php:69
+#: ../../addon/cart/submodules/hzservices.php:67
+#: ../../addon/cart/submodules/hzservices.php:651
+#: ../../addon/cart/submodules/hzservices.php:655
+#: ../../addon/cart/submodules/subscriptions.php:153
+#: ../../addon/cart/submodules/subscriptions.php:425
+#: ../../addon/cart/submodules/paypalbuttonV2.php:88
+#: ../../addon/cart/submodules/paypalbuttonV2.php:98
+#: ../../addon/cart/submodules/paypalbutton.php:87
+#: ../../addon/cart/submodules/paypalbutton.php:95
+#: ../../addon/cart/submodules/manualcat.php:63
+#: ../../addon/cart/submodules/manualcat.php:254
+#: ../../addon/cart/submodules/manualcat.php:258
+#: ../../addon/cart/submodules/orderoptions.php:72
+#: ../../addon/cart/submodules/orderoptions.php:338
+#: ../../addon/cart/submodules/orderoptions.php:362
+#: ../../addon/cart/submodules/orderoptions.php:438
+#: ../../addon/cart/submodules/orderoptions.php:462
+#: ../../addon/cart/cart.php:1418 ../../addon/cart/Settings/Cart.php:61
+#: ../../addon/cart/Settings/Cart.php:73
+#: ../../addon/twitter/Mod_Twitter.php:160
+#: ../../addon/twitter/Mod_Twitter.php:169
+#: ../../addon/content_import/Mod_content_import.php:135
+#: ../../addon/content_import/Mod_content_import.php:136
+#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
+#: ../../boot.php:1759 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:558
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Contactedit.php:270
+#: ../../Zotlabs/Module/Contactedit.php:315
+#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Api.php:101
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+#: ../../Zotlabs/Module/Admin/Site.php:307
+#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:254
+#: ../../Zotlabs/Module/Mitem.php:255 ../../Zotlabs/Module/Photos.php:666
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684
+#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696
+#: ../../Zotlabs/Module/Settings/Display.php:87
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Channel.php:225
+#: ../../Zotlabs/Module/Settings/Multifactor.php:82
+#: ../../Zotlabs/Module/Import.php:612 ../../Zotlabs/Module/Import.php:616
+#: ../../Zotlabs/Module/Import.php:617
+msgid "No"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:201
+#: ../../view/theme/redbasic/php/config.php:202
+#: ../../view/theme/redbasic/php/config.php:203
+#: ../../view/theme/redbasic/php/config.php:215
+#: ../../include/conversation.php:1274
+#: ../../addon/socialauth/Mod_SocialAuth.php:218
+#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
+#: ../../addon/libertree/Mod_Libertree.php:57
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:45
+#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
+#: ../../addon/diaspora/Mod_Diaspora.php:70
+#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96
+#: ../../addon/pumpio/Mod_Pumpio.php:100 ../../addon/wppost/Mod_Wppost.php:84
+#: ../../addon/wppost/Mod_Wppost.php:88 ../../addon/wppost/Mod_Wppost.php:92
+#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
+#: ../../addon/statusnet/Mod_Statusnet.php:258
+#: ../../addon/statusnet/Mod_Statusnet.php:280
+#: ../../addon/statusnet/Mod_Statusnet.php:289
+#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
+#: ../../addon/ljpost/Mod_Ljpost.php:69
+#: ../../addon/cart/submodules/hzservices.php:67
+#: ../../addon/cart/submodules/hzservices.php:651
+#: ../../addon/cart/submodules/hzservices.php:655
+#: ../../addon/cart/submodules/subscriptions.php:153
+#: ../../addon/cart/submodules/subscriptions.php:425
+#: ../../addon/cart/submodules/paypalbuttonV2.php:88
+#: ../../addon/cart/submodules/paypalbuttonV2.php:98
+#: ../../addon/cart/submodules/paypalbutton.php:87
+#: ../../addon/cart/submodules/paypalbutton.php:95
+#: ../../addon/cart/submodules/manualcat.php:63
+#: ../../addon/cart/submodules/manualcat.php:254
+#: ../../addon/cart/submodules/manualcat.php:258
+#: ../../addon/cart/submodules/orderoptions.php:72
+#: ../../addon/cart/submodules/orderoptions.php:337
+#: ../../addon/cart/submodules/orderoptions.php:361
+#: ../../addon/cart/submodules/orderoptions.php:437
+#: ../../addon/cart/submodules/orderoptions.php:461
+#: ../../addon/cart/cart.php:1418 ../../addon/cart/Settings/Cart.php:61
+#: ../../addon/cart/Settings/Cart.php:73
+#: ../../addon/twitter/Mod_Twitter.php:160
+#: ../../addon/twitter/Mod_Twitter.php:169
+#: ../../addon/content_import/Mod_content_import.php:135
+#: ../../addon/content_import/Mod_content_import.php:136
+#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
+#: ../../boot.php:1759 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:558
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Contactedit.php:270
+#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Defperms.php:195
+#: ../../Zotlabs/Module/Api.php:100 ../../Zotlabs/Module/Menu.php:163
+#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:309
+#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:254
+#: ../../Zotlabs/Module/Mitem.php:255 ../../Zotlabs/Module/Photos.php:666
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684
+#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696
+#: ../../Zotlabs/Module/Settings/Display.php:87
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Channel.php:225
+#: ../../Zotlabs/Module/Settings/Multifactor.php:82
+#: ../../Zotlabs/Module/Import.php:612 ../../Zotlabs/Module/Import.php:616
+#: ../../Zotlabs/Module/Import.php:617
+msgid "Yes"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:202
+msgid "Always use light icons for navbar"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:202
+msgid "Enable this option if you use a dark navbar color in light mode"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:203
+msgid "Narrow navbar"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:204
+msgid "Navigation bar background color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:205
+msgid "Dark navigation bar background color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:206
+msgid "Set the background color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:207
+msgid "Set the dark background color"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:208
+msgid "Set the background image"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:209
+msgid "Set the dark background image"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:210
+msgid "Set font-size for the entire application"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:210
+msgid "Examples: 1rem, 100%, 16px"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:211
+msgid "Set radius of corners in rem"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:211
+msgid "Leave empty for default radius"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:212
+msgid "Set maximum width of content region in rem"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:212
+msgid "Leave empty for default width"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:213
+msgid "Set size of conversation author photo"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:213
+#: ../../view/theme/redbasic/php/config.php:214
+msgid "Leave empty for default size"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:214
+msgid "Set size of followup author photos"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:215
+msgid "Show advanced settings"
+msgstr ""
+
+#: ../../include/bookmarks.php:34
#, php-format
-msgid "Install %1$s element %2$s"
+msgid "%1$s's bookmarks"
msgstr ""
-#: ../../include/bbcode.php:346
+#: ../../include/opengraph.php:56
#, php-format
-msgid ""
-"This post contains an installable %s element, however you lack permissions "
-"to install it on this site."
+msgid "This is the home page of %s."
msgstr ""
-#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:47
-msgid "webpage"
+#: ../../include/auth.php:232
+msgid "Delegation session ended."
msgstr ""
-#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:57
-msgid "layout"
+#: ../../include/auth.php:236
+msgid "Logged out."
msgstr ""
-#: ../../include/bbcode.php:362 ../../Zotlabs/Module/Impel.php:52
-msgid "block"
+#: ../../include/auth.php:342
+msgid "Email validation is incomplete. Please check your email."
msgstr ""
-#: ../../include/bbcode.php:365 ../../Zotlabs/Module/Impel.php:64
-msgid "menu"
+#: ../../include/auth.php:358
+msgid "Failed authentication"
msgstr ""
-#: ../../include/bbcode.php:568
-msgid "card"
+#: ../../include/auth.php:368 ../../addon/openid/Mod_Openid.php:189
+msgid "Login failed."
msgstr ""
-#: ../../include/bbcode.php:570
-msgid "article"
+#: ../../include/oembed.php:159
+msgid "View PDF"
msgstr ""
-#: ../../include/bbcode.php:572 ../../include/conversation.php:180
-#: ../../include/text.php:2364 ../../include/markdown.php:208
-#: ../../Zotlabs/Module/Tagger.php:79
-msgid "post"
+#: ../../include/oembed.php:394
+msgid " by "
+msgstr ""
+
+#: ../../include/oembed.php:395
+msgid " on "
+msgstr ""
+
+#: ../../include/oembed.php:428
+msgid "Embedded content"
+msgstr ""
+
+#: ../../include/oembed.php:437
+msgid "Embedding disabled"
+msgstr ""
+
+#: ../../include/event.php:35 ../../include/event.php:141
+msgid "l F d, Y \\@ g:i A"
+msgstr ""
+
+#: ../../include/event.php:43
+msgid "Starts:"
+msgstr ""
+
+#: ../../include/event.php:53
+msgid "Finishes:"
+msgstr ""
+
+#: ../../include/event.php:67 ../../include/event.php:159
+#: ../../include/channel.php:1642 ../../Zotlabs/Module/Directory.php:354
+msgid "Location:"
+msgstr ""
+
+#: ../../include/event.php:141
+msgid "l F d, Y"
+msgstr ""
+
+#: ../../include/event.php:145
+msgid "Start:"
+msgstr ""
+
+#: ../../include/event.php:149
+msgid "End:"
+msgstr ""
+
+#: ../../include/event.php:154 ../../addon/openid/MysqlProvider.php:67
+msgid "Timezone"
+msgstr ""
+
+#: ../../include/event.php:1246
+msgid "This event has been added to your calendar."
+msgstr ""
+
+#: ../../include/event.php:1366 ../../include/conversation.php:153
+#: ../../include/text.php:2359 ../../Zotlabs/Module/Tagger.php:77
+#: ../../Zotlabs/Module/Like.php:453
+#: ../../Zotlabs/Module/Channel_calendar.php:209
+msgid "event"
+msgstr ""
+
+#: ../../include/event.php:1450
+msgid "Not specified"
+msgstr ""
+
+#: ../../include/event.php:1451
+msgid "Needs Action"
+msgstr ""
+
+#: ../../include/event.php:1452
+msgid "Completed"
+msgstr ""
+
+#: ../../include/event.php:1453
+msgid "In Process"
+msgstr ""
+
+#: ../../include/event.php:1454
+msgid "Cancelled"
msgstr ""
-#: ../../include/bbcode.php:576 ../../include/markdown.php:206
+#: ../../include/event.php:1535 ../../include/connections.php:790
+#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377
+msgid "Mobile"
+msgstr ""
+
+#: ../../include/event.php:1536 ../../include/connections.php:791
+#: ../../Zotlabs/Widget/Notifications.php:43
+#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378
+msgid "Home"
+msgstr ""
+
+#: ../../include/event.php:1537 ../../include/connections.php:792
+msgid "Home, Voice"
+msgstr ""
+
+#: ../../include/event.php:1538 ../../include/connections.php:793
+msgid "Home, Fax"
+msgstr ""
+
+#: ../../include/event.php:1539 ../../include/connections.php:794
+#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379
+msgid "Work"
+msgstr ""
+
+#: ../../include/event.php:1540 ../../include/connections.php:795
+msgid "Work, Voice"
+msgstr ""
+
+#: ../../include/event.php:1541 ../../include/connections.php:796
+msgid "Work, Fax"
+msgstr ""
+
+#: ../../include/event.php:1542 ../../include/event.php:1549
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/selectors.php:119 ../../include/selectors.php:155
+#: ../../include/connections.php:797 ../../include/connections.php:804
+#: ../../Zotlabs/Access/PermissionRoles.php:362
+#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1380
+msgid "Other"
+msgstr ""
+
+#: ../../include/feedutils.php:863 ../../include/text.php:1580
+msgid "unknown"
+msgstr ""
+
+#: ../../include/items.php:481 ../../addon/hzfiles/hzfiles.php:75
+#: ../../addon/redphotos/redphotos.php:119
+#: ../../addon/redfiles/redfiles.php:109
+#: ../../Zotlabs/Module/Import_items.php:116
+#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:60
+#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:109
+#: ../../Zotlabs/Module/Like.php:344 ../../Zotlabs/Module/Profperm.php:29
+#: ../../Zotlabs/Web/WebServer.php:120
+msgid "Permission denied"
+msgstr ""
+
+#: ../../include/items.php:1275
+msgid "Visible to anybody on the internet."
+msgstr ""
+
+#: ../../include/items.php:1277
+msgid "Visible to you only."
+msgstr ""
+
+#: ../../include/items.php:1279
+msgid "Visible to anybody in this network."
+msgstr ""
+
+#: ../../include/items.php:1281
+msgid "Visible to anybody authenticated."
+msgstr ""
+
+#: ../../include/items.php:1283
#, php-format
-msgid "%1$s wrote the following %2$s %3$s"
+msgid "Visible to anybody on %s."
msgstr ""
-#: ../../include/bbcode.php:653 ../../include/bbcode.php:661
-msgid "Click to open/close"
+#: ../../include/items.php:1285
+msgid "Visible to all connections."
msgstr ""
-#: ../../include/bbcode.php:661 ../../include/markdown.php:278
-msgid "spoiler"
+#: ../../include/items.php:1287
+msgid "Visible to approved connections."
msgstr ""
-#: ../../include/bbcode.php:674
-msgid "View article"
+#: ../../include/items.php:1289
+msgid "Visible to specific connections."
msgstr ""
-#: ../../include/bbcode.php:674
-msgid "View summary"
+#: ../../include/items.php:3491 ../../Zotlabs/Lib/Activity.php:2282
+#: ../../Zotlabs/Module/Share.php:124
+#, php-format
+msgid "&#x1f501; Repeated %1$s's %2$s"
msgstr ""
-#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1312
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:630
-msgid "Different viewers will see this text differently"
+#: ../../include/items.php:4568 ../../Zotlabs/Module/Group.php:63
+#: ../../Zotlabs/Module/Group.php:207
+msgid "Privacy group not found."
msgstr ""
-#: ../../include/bbcode.php:1635
-msgid "$1 wrote:"
+#: ../../include/items.php:4584
+msgid "Privacy group is empty."
+msgstr ""
+
+#: ../../include/items.php:4591
+#, php-format
+msgid "Privacy group: %s"
+msgstr ""
+
+#: ../../include/items.php:4601
+#, php-format
+msgid "Connection: %s"
+msgstr ""
+
+#: ../../include/items.php:4603
+msgid "Connection not found."
msgstr ""
#: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55
@@ -151,11 +699,11 @@ msgstr ""
msgid "Provide a personal tag cloud on your channel page"
msgstr ""
-#: ../../include/features.php:122 ../../include/features.php:356
+#: ../../include/features.php:122 ../../include/features.php:364
msgid "Use blog/list mode"
msgstr ""
-#: ../../include/features.php:123 ../../include/features.php:357
+#: ../../include/features.php:123 ../../include/features.php:365
msgid "Comments will be displayed separately"
msgstr ""
@@ -197,322 +745,319 @@ msgid "Star Posts"
msgstr ""
#: ../../include/features.php:173
-msgid "Ability to mark special posts with a star indicator"
+msgid "Ability to mark conversations with a star"
msgstr ""
#: ../../include/features.php:180
-msgid "Reply on comment"
+msgid "File Posts"
msgstr ""
#: ../../include/features.php:181
+msgid "Ability to file posts"
+msgstr ""
+
+#: ../../include/features.php:188
+msgid "Reply on comment"
+msgstr ""
+
+#: ../../include/features.php:189
msgid "Ability to reply on selected comment"
msgstr ""
-#: ../../include/features.php:190 ../../Zotlabs/Lib/Apps.php:353
+#: ../../include/features.php:198 ../../Zotlabs/Lib/Apps.php:353
msgid "Directory"
msgstr ""
-#: ../../include/features.php:194
+#: ../../include/features.php:202
msgid "Advanced Directory Search"
msgstr ""
-#: ../../include/features.php:195
+#: ../../include/features.php:203
msgid "Allows creation of complex directory search queries"
msgstr ""
-#: ../../include/features.php:204
+#: ../../include/features.php:212
msgid "Editor"
msgstr ""
-#: ../../include/features.php:208
+#: ../../include/features.php:216
msgid "Post Categories"
msgstr ""
-#: ../../include/features.php:209
+#: ../../include/features.php:217
msgid "Add categories to your posts"
msgstr ""
-#: ../../include/features.php:216
+#: ../../include/features.php:224
msgid "Large Photos"
msgstr ""
-#: ../../include/features.php:217
+#: ../../include/features.php:225
msgid ""
"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
"(640px) photo thumbnails"
msgstr ""
-#: ../../include/features.php:224
+#: ../../include/features.php:232
msgid "Even More Encryption"
msgstr ""
-#: ../../include/features.php:225
+#: ../../include/features.php:233
msgid ""
"Allow optional encryption of content end-to-end with a shared secret key"
msgstr ""
-#: ../../include/features.php:232
+#: ../../include/features.php:240
msgid "Disable Comments"
msgstr ""
-#: ../../include/features.php:233
+#: ../../include/features.php:241
msgid "Provide the option to disable comments for a post"
msgstr ""
-#: ../../include/features.php:240
+#: ../../include/features.php:248
msgid "Delayed Posting"
msgstr ""
-#: ../../include/features.php:241
+#: ../../include/features.php:249
msgid "Allow posts to be published at a later date"
msgstr ""
-#: ../../include/features.php:248
+#: ../../include/features.php:256
msgid "Content Expiration"
msgstr ""
-#: ../../include/features.php:249
+#: ../../include/features.php:257
msgid "Remove posts/comments and/or private messages at a future time"
msgstr ""
-#: ../../include/features.php:256
+#: ../../include/features.php:264
msgid "Suppress Duplicate Posts/Comments"
msgstr ""
-#: ../../include/features.php:257
+#: ../../include/features.php:265
msgid ""
"Prevent posts with identical content to be published with less than two "
"minutes in between submissions."
msgstr ""
-#: ../../include/features.php:264
+#: ../../include/features.php:272
msgid "Auto-save drafts of posts and comments"
msgstr ""
-#: ../../include/features.php:265
+#: ../../include/features.php:273
msgid ""
"Automatically saves post and comment drafts in local browser storage to help "
"prevent accidental loss of compositions"
msgstr ""
-#: ../../include/features.php:274
+#: ../../include/features.php:282
msgid "Manage"
msgstr ""
-#: ../../include/features.php:278
+#: ../../include/features.php:286
msgid "Navigation Channel Select"
msgstr ""
-#: ../../include/features.php:279
+#: ../../include/features.php:287
msgid "Change channels directly from within the navigation dropdown menu"
msgstr ""
-#: ../../include/features.php:288 ../../Zotlabs/Module/Connections.php:347
-#: ../../Zotlabs/Widget/Notifications.php:23
+#: ../../include/features.php:296 ../../Zotlabs/Widget/Notifications.php:23
+#: ../../Zotlabs/Module/Connections.php:347
msgid "Network"
msgstr ""
-#: ../../include/features.php:292
+#: ../../include/features.php:300
msgid "Events Filter"
msgstr ""
-#: ../../include/features.php:293
+#: ../../include/features.php:301
msgid "Ability to display only events"
msgstr ""
-#: ../../include/features.php:300
+#: ../../include/features.php:308
msgid "Polls Filter"
msgstr ""
-#: ../../include/features.php:301
+#: ../../include/features.php:309
msgid "Ability to display only polls"
msgstr ""
-#: ../../include/features.php:308 ../../Zotlabs/Widget/Savedsearch.php:89
+#: ../../include/features.php:316 ../../Zotlabs/Widget/Savedsearch.php:89
msgid "Saved Searches"
msgstr ""
-#: ../../include/features.php:309
+#: ../../include/features.php:317
msgid "Save search terms for re-use"
msgstr ""
-#: ../../include/features.php:316 ../../include/contact_widgets.php:55
-#: ../../Zotlabs/Widget/Filer.php:33
+#: ../../include/features.php:324 ../../include/contact_widgets.php:55
#: ../../Zotlabs/Widget/Activity_filter.php:196
+#: ../../Zotlabs/Widget/Filer.php:33
msgid "Saved Folders"
msgstr ""
-#: ../../include/features.php:317
+#: ../../include/features.php:325
msgid "Ability to file posts under folders"
msgstr ""
-#: ../../include/features.php:324
+#: ../../include/features.php:332
msgid "Alternate Stream Order"
msgstr ""
-#: ../../include/features.php:325
+#: ../../include/features.php:333
msgid ""
"Ability to order the stream by last post date, last comment date or "
"unthreaded activities"
msgstr ""
-#: ../../include/features.php:332
+#: ../../include/features.php:340
msgid "Contact Filter"
msgstr ""
-#: ../../include/features.php:333
+#: ../../include/features.php:341
msgid "Ability to display only posts of a selected contact"
msgstr ""
-#: ../../include/features.php:340
+#: ../../include/features.php:348
msgid "Forum Filter"
msgstr ""
-#: ../../include/features.php:341
+#: ../../include/features.php:349
msgid "Ability to display only posts of a specific forum"
msgstr ""
-#: ../../include/features.php:348
+#: ../../include/features.php:356
msgid "Personal Posts Filter"
msgstr ""
-#: ../../include/features.php:349
+#: ../../include/features.php:357
msgid "Ability to display only posts that you've interacted on"
msgstr ""
-#: ../../include/features.php:366 ../../include/nav.php:470
-#: ../../Zotlabs/Lib/Apps.php:351 ../../Zotlabs/Module/Fbrowser.php:29
+#: ../../include/features.php:374 ../../include/nav.php:470
+#: ../../Zotlabs/Lib/Apps.php:351
#: ../../Zotlabs/Widget/Channel_activities.php:93
+#: ../../Zotlabs/Module/Fbrowser.php:31
msgid "Photos"
msgstr ""
-#: ../../include/features.php:370
+#: ../../include/features.php:378
msgid "Photo Location"
msgstr ""
-#: ../../include/features.php:371
+#: ../../include/features.php:379
msgid "If location data is available on uploaded photos, link this to a map."
msgstr ""
-#: ../../include/features.php:378
+#: ../../include/features.php:386
msgid "Flag Adult Photos"
msgstr ""
-#: ../../include/features.php:379
+#: ../../include/features.php:387
msgid ""
"Provide photo edit option to hide inappropriate photos from default album "
"view"
msgstr ""
-#: ../../include/features.php:388 ../../Zotlabs/Lib/Apps.php:367
+#: ../../include/features.php:396 ../../Zotlabs/Lib/Apps.php:367
#: ../../Zotlabs/Module/Contactedit.php:430
msgid "Profiles"
msgstr ""
-#: ../../include/features.php:392
+#: ../../include/features.php:400
msgid "Advanced Profiles"
msgstr ""
-#: ../../include/features.php:393
+#: ../../include/features.php:401
msgid "Additional profile sections and selections"
msgstr ""
-#: ../../include/features.php:400
+#: ../../include/features.php:408
msgid "Profile Import/Export"
msgstr ""
-#: ../../include/features.php:401
+#: ../../include/features.php:409
msgid "Save and load profile details across sites/channels"
msgstr ""
-#: ../../include/features.php:408
+#: ../../include/features.php:416
msgid "Multiple Profiles"
msgstr ""
-#: ../../include/features.php:409
+#: ../../include/features.php:417
msgid "Ability to create multiple profiles"
msgstr ""
-#: ../../include/bookmarks.php:34
-#, php-format
-msgid "%1$s's bookmarks"
-msgstr ""
-
-#: ../../include/feedutils.php:851 ../../include/text.php:1580
-msgid "unknown"
-msgstr ""
-
#: ../../include/attach.php:156 ../../include/attach.php:205
#: ../../include/attach.php:278 ../../include/attach.php:329
#: ../../include/attach.php:431 ../../include/attach.php:445
#: ../../include/attach.php:452 ../../include/attach.php:534
#: ../../include/attach.php:1106 ../../include/attach.php:1179
-#: ../../include/attach.php:1344 ../../include/photos.php:31
-#: ../../include/items.php:3928 ../../Zotlabs/Lib/Chatroom.php:135
-#: ../../Zotlabs/Web/WebServer.php:119 ../../Zotlabs/Module/Menu.php:130
-#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Editblock.php:67
-#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Channel.php:391
-#: ../../Zotlabs/Module/Channel.php:429
-#: ../../Zotlabs/Module/New_channel.php:106
-#: ../../Zotlabs/Module/New_channel.php:131 ../../Zotlabs/Module/Block.php:24
-#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Setup.php:220
-#: ../../Zotlabs/Module/Bookmarks.php:70 ../../Zotlabs/Module/Api.php:26
-#: ../../Zotlabs/Module/Channel_calendar.php:232
-#: ../../Zotlabs/Module/Editlayout.php:67
-#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Photos.php:71
-#: ../../Zotlabs/Module/Viewconnections.php:28
-#: ../../Zotlabs/Module/Viewconnections.php:33
-#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Common.php:38
-#: ../../Zotlabs/Module/Profiles.php:168 ../../Zotlabs/Module/Profiles.php:611
-#: ../../Zotlabs/Module/Network.php:18 ../../Zotlabs/Module/Authtest.php:13
-#: ../../Zotlabs/Module/Invite.php:65 ../../Zotlabs/Module/Invite.php:316
-#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Suggest.php:32
-#: ../../Zotlabs/Module/Group.php:15 ../../Zotlabs/Module/Group.php:31
-#: ../../Zotlabs/Module/Settings.php:59 ../../Zotlabs/Module/Layouts.php:71
-#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
-#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Cover_photo.php:299
-#: ../../Zotlabs/Module/Cover_photo.php:312 ../../Zotlabs/Module/Chat.php:111
-#: ../../Zotlabs/Module/Chat.php:116 ../../Zotlabs/Module/Achievements.php:34
-#: ../../Zotlabs/Module/Appman.php:163
-#: ../../Zotlabs/Module/Service_limits.php:11
-#: ../../Zotlabs/Module/Connedit.php:299
+#: ../../include/attach.php:1344 ../../include/photos.php:32
+#: ../../addon/openid/Mod_Id.php:53 ../../addon/keepout/keepout.php:36
+#: ../../addon/cards/Mod_Cards.php:89 ../../addon/cards/Mod_Card_edit.php:51
+#: ../../addon/pumpio/pumpio.php:44
+#: ../../addon/articles/Mod_Article_edit.php:51
+#: ../../addon/articles/Mod_Articles.php:94 ../../addon/wiki/Mod_Wiki.php:63
+#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425
+#: ../../Zotlabs/Lib/Chatroom.php:135 ../../Zotlabs/Module/Page.php:34
+#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Display.php:392
+#: ../../Zotlabs/Module/Cover_photo.php:299
+#: ../../Zotlabs/Module/Cover_photo.php:312
#: ../../Zotlabs/Module/Editwebpage.php:68
#: ../../Zotlabs/Module/Editwebpage.php:89
#: ../../Zotlabs/Module/Editwebpage.php:107
#: ../../Zotlabs/Module/Editwebpage.php:121
-#: ../../Zotlabs/Module/Register.php:201 ../../Zotlabs/Module/Thing.php:309
-#: ../../Zotlabs/Module/Thing.php:331 ../../Zotlabs/Module/Thing.php:372
-#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
-#: ../../Zotlabs/Module/Defperms.php:181 ../../Zotlabs/Module/Locs.php:98
-#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133
-#: ../../Zotlabs/Module/Vote.php:19 ../../Zotlabs/Module/Profile_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:421
-#: ../../Zotlabs/Module/Webpages.php:131
-#: ../../Zotlabs/Module/Connections.php:32
+#: ../../Zotlabs/Module/Webpages.php:130 ../../Zotlabs/Module/Network.php:18
+#: ../../Zotlabs/Module/Service_limits.php:11
+#: ../../Zotlabs/Module/Thing.php:316 ../../Zotlabs/Module/Thing.php:338
+#: ../../Zotlabs/Module/Thing.php:377 ../../Zotlabs/Module/Pdledit.php:35
#: ../../Zotlabs/Module/Filestorage.php:20
#: ../../Zotlabs/Module/Filestorage.php:78
#: ../../Zotlabs/Module/Filestorage.php:96
#: ../../Zotlabs/Module/Filestorage.php:119
-#: ../../Zotlabs/Module/Filestorage.php:165 ../../Zotlabs/Module/Pdledit.php:35
-#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Regmod.php:20
+#: ../../Zotlabs/Module/Filestorage.php:165
+#: ../../Zotlabs/Module/Register.php:201 ../../Zotlabs/Module/Appman.php:163
+#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Item.php:288
+#: ../../Zotlabs/Module/Item.php:307 ../../Zotlabs/Module/Item.php:317
+#: ../../Zotlabs/Module/Item.php:1276 ../../Zotlabs/Module/Achievements.php:34
+#: ../../Zotlabs/Module/Connedit.php:299 ../../Zotlabs/Module/Defperms.php:181
+#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Regmod.php:20
+#: ../../Zotlabs/Module/Profile_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:421
+#: ../../Zotlabs/Module/Viewconnections.php:28
+#: ../../Zotlabs/Module/Viewconnections.php:33
+#: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74
+#: ../../Zotlabs/Module/Api.php:26 ../../Zotlabs/Module/Layouts.php:71
+#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
+#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Locs.php:98
+#: ../../Zotlabs/Module/Menu.php:130 ../../Zotlabs/Module/Menu.php:141
+#: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Bookmarks.php:70
#: ../../Zotlabs/Module/Attach_edit.php:90
#: ../../Zotlabs/Module/Attach_edit.php:99
-#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Item.php:512
-#: ../../Zotlabs/Module/Item.php:531 ../../Zotlabs/Module/Item.php:541
-#: ../../Zotlabs/Module/Item.php:1463 ../../Zotlabs/Module/Display.php:387
-#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Sharedwithme.php:19
-#: ../../Zotlabs/Module/Like.php:242 ../../Zotlabs/Module/Manage.php:10
-#: ../../Zotlabs/Module/Profile.php:99 ../../Zotlabs/Module/Profile.php:114
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:51
-#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:94
-#: ../../extend/addon/hzaddons/pumpio/pumpio.php:44
-#: ../../extend/addon/hzaddons/keepout/keepout.php:36
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:63
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:288
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:425
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:51
-#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:89
-#: ../../extend/addon/hzaddons/openid/Mod_Id.php:53
+#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Group.php:15
+#: ../../Zotlabs/Module/Group.php:31 ../../Zotlabs/Module/Invite.php:65
+#: ../../Zotlabs/Module/Invite.php:316 ../../Zotlabs/Module/Like.php:242
+#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
+#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/New_channel.php:106
+#: ../../Zotlabs/Module/New_channel.php:131 ../../Zotlabs/Module/Photos.php:71
+#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Channel.php:391
+#: ../../Zotlabs/Module/Channel.php:429 ../../Zotlabs/Module/Profile.php:99
+#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Moderate.php:15
+#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:168
+#: ../../Zotlabs/Module/Profiles.php:611
+#: ../../Zotlabs/Module/Sharedwithme.php:19
+#: ../../Zotlabs/Module/Authtest.php:13
+#: ../../Zotlabs/Module/Channel_calendar.php:220
+#: ../../Zotlabs/Module/Chat.php:111 ../../Zotlabs/Module/Chat.php:116
+#: ../../Zotlabs/Module/Editlayout.php:67
+#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Settings.php:59
+#: ../../Zotlabs/Module/Setup.php:220 ../../Zotlabs/Module/Editpost.php:17
+#: ../../Zotlabs/Module/Connections.php:32
+#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Vote.php:19
+#: ../../Zotlabs/Web/WebServer.php:121
msgid "Permission denied."
msgstr ""
@@ -583,560 +1128,525 @@ msgstr ""
msgid "Empty path"
msgstr ""
-#: ../../include/attach.php:1984
+#: ../../include/attach.php:1992
#, php-format
msgid "%s shared an %s with you"
msgstr ""
-#: ../../include/attach.php:1984
+#: ../../include/attach.php:1992
#, php-format
msgid "%s shared a %s with you"
msgstr ""
-#: ../../include/attach.php:1984 ../../Zotlabs/Module/Like.php:447
+#: ../../include/attach.php:1992 ../../Zotlabs/Module/Like.php:450
msgid "image"
msgstr ""
-#: ../../include/attach.php:1984
-#: ../../extend/addon/hzaddons/redfiles/redfilehelper.php:64
+#: ../../include/attach.php:1992 ../../addon/redfiles/redfilehelper.php:64
msgid "file"
msgstr ""
-#: ../../include/network.php:413
-msgid "url: "
-msgstr ""
-
-#: ../../include/network.php:414
-msgid "error_code: "
+#: ../../include/selectors.php:17
+msgid "Select a profile to assign to this contact"
msgstr ""
-#: ../../include/network.php:415
-msgid "error_string: "
+#: ../../include/selectors.php:45
+msgid "Frequently"
msgstr ""
-#: ../../include/network.php:416
-msgid "content-type: "
+#: ../../include/selectors.php:46
+msgid "Hourly"
msgstr ""
-#: ../../include/network.php:1774 ../../include/network.php:1775
-msgid "Friendica"
+#: ../../include/selectors.php:47
+msgid "Twice daily"
msgstr ""
-#: ../../include/network.php:1776
-msgid "OStatus"
+#: ../../include/selectors.php:48
+msgid "Daily"
msgstr ""
-#: ../../include/network.php:1777
-msgid "GNU-Social"
+#: ../../include/selectors.php:49
+msgid "Weekly"
msgstr ""
-#: ../../include/network.php:1778
-msgid "RSS/Atom"
+#: ../../include/selectors.php:50
+msgid "Monthly"
msgstr ""
-#: ../../include/network.php:1779
-msgid "ActivityPub"
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/channel.php:1731 ../../addon/openid/Mod_Id.php:85
+msgid "Male"
msgstr ""
-#: ../../include/network.php:1780 ../../Zotlabs/Module/Connedit.php:736
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-#: ../../Zotlabs/Module/Admin/Accounts.php:330
-#: ../../Zotlabs/Module/Cdav.php:1372
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:55
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:69
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:56
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:57
-msgid "Email"
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/channel.php:1729 ../../addon/openid/Mod_Id.php:87
+msgid "Female"
msgstr ""
-#: ../../include/network.php:1781
-msgid "Diaspora"
+#: ../../include/selectors.php:64
+msgid "Currently Male"
msgstr ""
-#: ../../include/network.php:1782
-msgid "Facebook"
+#: ../../include/selectors.php:64
+msgid "Currently Female"
msgstr ""
-#: ../../include/network.php:1783
-msgid "Zot"
+#: ../../include/selectors.php:64
+msgid "Mostly Male"
msgstr ""
-#: ../../include/network.php:1784
-msgid "LinkedIn"
+#: ../../include/selectors.php:64
+msgid "Mostly Female"
msgstr ""
-#: ../../include/network.php:1785
-msgid "XMPP/IM"
+#: ../../include/selectors.php:64
+msgid "Transgender"
msgstr ""
-#: ../../include/network.php:1786
-msgid "MySpace"
+#: ../../include/selectors.php:64
+msgid "Intersex"
msgstr ""
-#: ../../include/auth.php:232
-msgid "Delegation session ended."
+#: ../../include/selectors.php:64
+msgid "Transsexual"
msgstr ""
-#: ../../include/auth.php:236
-msgid "Logged out."
+#: ../../include/selectors.php:64
+msgid "Hermaphrodite"
msgstr ""
-#: ../../include/auth.php:342
-msgid "Email validation is incomplete. Please check your email."
+#: ../../include/selectors.php:64 ../../include/channel.php:1735
+msgid "Neuter"
msgstr ""
-#: ../../include/auth.php:358
-msgid "Failed authentication"
+#: ../../include/selectors.php:64 ../../include/channel.php:1737
+msgid "Non-specific"
msgstr ""
-#: ../../include/auth.php:368
-#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:189
-msgid "Login failed."
+#: ../../include/selectors.php:64
+msgid "Undecided"
msgstr ""
-#: ../../include/opengraph.php:56
-#, php-format
-msgid "This is the home page of %s."
+#: ../../include/selectors.php:100 ../../include/selectors.php:119
+msgid "Males"
msgstr ""
-#: ../../include/nav.php:109
-msgid "Remote authentication"
+#: ../../include/selectors.php:100 ../../include/selectors.php:119
+msgid "Females"
msgstr ""
-#: ../../include/nav.php:109
-msgid "Click to authenticate to your home hub"
+#: ../../include/selectors.php:100
+msgid "Gay"
msgstr ""
-#: ../../include/nav.php:115 ../../Zotlabs/Module/Admin/Channels.php:168
-#: ../../Zotlabs/Module/Admin.php:118 ../../Zotlabs/Module/Manage.php:162
-#: ../../Zotlabs/Widget/Channel_activities.php:239
-#: ../../Zotlabs/Widget/Admin.php:29
-msgid "Channels"
+#: ../../include/selectors.php:100
+msgid "Lesbian"
msgstr ""
-#: ../../include/nav.php:115
-msgid "Manage your channels"
+#: ../../include/selectors.php:100
+msgid "No Preference"
msgstr ""
-#: ../../include/nav.php:118 ../../Zotlabs/Lib/Apps.php:345
-#: ../../Zotlabs/Module/Admin/Addons.php:349
-#: ../../Zotlabs/Module/Admin/Themes.php:141
-#: ../../Zotlabs/Widget/Settings_menu.php:71
-#: ../../Zotlabs/Widget/Newmember.php:60
-msgid "Settings"
+#: ../../include/selectors.php:100
+msgid "Bisexual"
msgstr ""
-#: ../../include/nav.php:118
-msgid "Account/Channel Settings"
+#: ../../include/selectors.php:100
+msgid "Autosexual"
msgstr ""
-#: ../../include/nav.php:124 ../../include/nav.php:154
-#: ../../include/nav.php:175 ../../boot.php:1759
-msgid "Logout"
+#: ../../include/selectors.php:100
+msgid "Abstinent"
msgstr ""
-#: ../../include/nav.php:124 ../../include/nav.php:154
-msgid "End this session"
+#: ../../include/selectors.php:100
+msgid "Virgin"
msgstr ""
-#: ../../include/nav.php:127 ../../include/conversation.php:902
-#: ../../Zotlabs/Lib/Apps.php:350 ../../Zotlabs/Module/Connedit.php:480
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:58
-msgid "View Profile"
+#: ../../include/selectors.php:100
+msgid "Deviant"
msgstr ""
-#: ../../include/nav.php:127
-msgid "Your profile page"
+#: ../../include/selectors.php:100
+msgid "Fetish"
msgstr ""
-#: ../../include/nav.php:130 ../../include/channel.php:1539
-#: ../../Zotlabs/Module/Profiles.php:851
-msgid "Edit Profiles"
+#: ../../include/selectors.php:100
+msgid "Oodles"
msgstr ""
-#: ../../include/nav.php:130
-msgid "Manage/Edit profiles"
+#: ../../include/selectors.php:100
+msgid "Nonsexual"
msgstr ""
-#: ../../include/nav.php:132 ../../include/channel.php:1543
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:59
-msgid "Edit Profile"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Single"
msgstr ""
-#: ../../include/nav.php:132 ../../Zotlabs/Widget/Newmember.php:42
-msgid "Edit your profile"
+#: ../../include/selectors.php:138
+msgid "Lonely"
msgstr ""
-#: ../../include/nav.php:139 ../../include/nav.php:143 ../../boot.php:1760
-#: ../../Zotlabs/Lib/Apps.php:342
-msgid "Login"
+#: ../../include/selectors.php:138
+msgid "Available"
msgstr ""
-#: ../../include/nav.php:139 ../../include/nav.php:143
-msgid "Sign in"
+#: ../../include/selectors.php:138
+msgid "Unavailable"
msgstr ""
-#: ../../include/nav.php:173
-msgid "Take me home"
+#: ../../include/selectors.php:138
+msgid "Has crush"
msgstr ""
-#: ../../include/nav.php:175
-msgid "Log me out of this site"
+#: ../../include/selectors.php:138
+msgid "Infatuated"
msgstr ""
-#: ../../include/nav.php:180 ../../boot.php:1737
-#: ../../Zotlabs/Module/Register.php:543
-msgid "Register"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Dating"
msgstr ""
-#: ../../include/nav.php:180
-msgid "Create an account"
+#: ../../include/selectors.php:138
+msgid "Unfaithful"
msgstr ""
-#: ../../include/nav.php:194 ../../include/nav.php:341
-#: ../../Zotlabs/Lib/Apps.php:354 ../../Zotlabs/Module/Layouts.php:184
-msgid "Help"
+#: ../../include/selectors.php:138
+msgid "Sex Addict"
msgstr ""
-#: ../../include/nav.php:194
-msgid "Help and documentation"
+#: ../../include/selectors.php:138 ../../include/channel.php:467
+#: ../../include/channel.php:470 ../../Zotlabs/Widget/Affinity.php:38
+#: ../../Zotlabs/Module/Contactedit.php:283
+#: ../../Zotlabs/Module/Connedit.php:581
+msgid "Friends"
msgstr ""
-#: ../../include/nav.php:208 ../../include/text.php:1190
-#: ../../include/text.php:1202 ../../include/acl_selectors.php:149
-#: ../../Zotlabs/Lib/Apps.php:357 ../../Zotlabs/Module/Connections.php:403
-#: ../../Zotlabs/Module/Search.php:47 ../../Zotlabs/Widget/Sitesearch.php:37
-#: ../../Zotlabs/Widget/Activity_filter.php:210
-msgid "Search"
+#: ../../include/selectors.php:138
+msgid "Friends/Benefits"
msgstr ""
-#: ../../include/nav.php:208
-msgid "Search site @name, !forum, #tag, ?docs, content"
+#: ../../include/selectors.php:138
+msgid "Casual"
msgstr ""
-#: ../../include/nav.php:214 ../../Zotlabs/Widget/Admin.php:61
-msgid "Admin"
+#: ../../include/selectors.php:138
+msgid "Engaged"
msgstr ""
-#: ../../include/nav.php:214
-msgid "Site Setup and Configuration"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Married"
msgstr ""
-#: ../../include/nav.php:345 ../../Zotlabs/Module/New_channel.php:158
-#: ../../Zotlabs/Module/New_channel.php:165
-#: ../../Zotlabs/Module/Defperms.php:254 ../../Zotlabs/Widget/Messages.php:36
-#: ../../Zotlabs/Widget/Notifications.php:175
-msgid "Loading"
+#: ../../include/selectors.php:138
+msgid "Imaginarily married"
msgstr ""
-#: ../../include/nav.php:350
-msgid "@name, #tag, ?doc, content"
+#: ../../include/selectors.php:138
+msgid "Partners"
msgstr ""
-#: ../../include/nav.php:351
-msgid "Please wait..."
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Cohabiting"
msgstr ""
-#: ../../include/nav.php:357 ../../Zotlabs/Lib/Apps.php:329
-msgid "Apps"
+#: ../../include/selectors.php:138
+msgid "Common law"
msgstr ""
-#: ../../include/nav.php:358
-msgid "Channel Apps"
+#: ../../include/selectors.php:138
+msgid "Happy"
msgstr ""
-#: ../../include/nav.php:359
-msgid "System Apps"
+#: ../../include/selectors.php:138
+msgid "Not looking"
msgstr ""
-#: ../../include/nav.php:360
-msgid "Pinned Apps"
+#: ../../include/selectors.php:138
+msgid "Swinger"
msgstr ""
-#: ../../include/nav.php:361
-msgid "Featured Apps"
+#: ../../include/selectors.php:138
+msgid "Betrayed"
msgstr ""
-#: ../../include/nav.php:447 ../../Zotlabs/Lib/Apps.php:349
-#: ../../Zotlabs/Module/Admin/Channels.php:176
-msgid "Channel"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Separated"
msgstr ""
-#: ../../include/nav.php:450
-msgid "Status Messages and Posts"
+#: ../../include/selectors.php:138
+msgid "Unstable"
msgstr ""
-#: ../../include/nav.php:460 ../../Zotlabs/Module/Help.php:239
-msgid "About"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Divorced"
msgstr ""
-#: ../../include/nav.php:463
-msgid "Profile Details"
+#: ../../include/selectors.php:138
+msgid "Imaginarily divorced"
msgstr ""
-#: ../../include/nav.php:473 ../../include/photos.php:722
-msgid "Photo Albums"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Widowed"
msgstr ""
-#: ../../include/nav.php:478 ../../Zotlabs/Lib/Apps.php:346
-#: ../../Zotlabs/Storage/Browser.php:351 ../../Zotlabs/Module/Fbrowser.php:85
-#: ../../Zotlabs/Widget/Channel_activities.php:125
-#: ../../Zotlabs/Widget/Notifications.php:108
-msgid "Files"
+#: ../../include/selectors.php:138
+msgid "Uncertain"
msgstr ""
-#: ../../include/nav.php:481
-msgid "Files and Storage"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "It's complicated"
msgstr ""
-#: ../../include/nav.php:503 ../../include/nav.php:506
-#: ../../Zotlabs/Lib/Apps.php:336 ../../Zotlabs/Widget/Chatroom_list.php:22
-msgid "Chatrooms"
+#: ../../include/selectors.php:138
+msgid "Don't care"
msgstr ""
-#: ../../include/nav.php:516 ../../Zotlabs/Lib/Apps.php:335
-#: ../../Zotlabs/Module/Bookmarks.php:90
-msgid "Bookmarks"
+#: ../../include/selectors.php:138
+msgid "Ask me"
msgstr ""
-#: ../../include/nav.php:519
-msgid "Saved Bookmarks"
+#: ../../include/activities.php:30
+msgid " and "
msgstr ""
-#: ../../include/nav.php:527 ../../Zotlabs/Lib/Apps.php:347
-#: ../../Zotlabs/Module/Webpages.php:247
-#: ../../Zotlabs/Widget/Channel_activities.php:168
-msgid "Webpages"
+#: ../../include/activities.php:32
+msgid ", "
msgstr ""
-#: ../../include/nav.php:530
-msgid "View Webpages"
+#: ../../include/activities.php:36 ../../include/activities.php:38
+#: ../../addon/openid/MysqlProvider.php:58
+#: ../../addon/openid/MysqlProvider.php:59
+#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:365
+#: ../../Zotlabs/Module/Profile_photo.php:227
+msgid "Profile Photo"
msgstr ""
-#: ../../include/event.php:35 ../../include/event.php:133
-msgid "l F d, Y \\@ g:i A"
+#: ../../include/activities.php:36 ../../Zotlabs/Module/Cover_photo.php:230
+msgid "Cover Photo"
msgstr ""
-#: ../../include/event.php:43
-msgid "Starts:"
+#: ../../include/activities.php:45
+msgid "public profile"
msgstr ""
-#: ../../include/event.php:53
-msgid "Finishes:"
+#: ../../include/activities.php:62
+#, php-format
+msgid "%1$s %2$s has been updated to %3$s."
msgstr ""
-#: ../../include/event.php:67 ../../include/event.php:158
-#: ../../include/channel.php:1640 ../../Zotlabs/Module/Directory.php:354
-msgid "Location:"
+#: ../../include/activities.php:65
+#, php-format
+msgid "%1$s updated the %2$s. Changed %3$s."
msgstr ""
-#: ../../include/event.php:133
-msgid "l F d, Y"
-msgstr ""
+#: ../../include/contact_widgets.php:13
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../include/event.php:137
-msgid "Start:"
+#: ../../include/contact_widgets.php:18 ../../include/acl_selectors.php:145
+#: ../../Zotlabs/Module/Admin/Site.php:407
+msgid "Advanced"
msgstr ""
-#: ../../include/event.php:141
-msgid "End:"
+#: ../../include/contact_widgets.php:21
+msgid "Find Channels"
msgstr ""
-#: ../../include/event.php:146
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:67
-msgid "Timezone"
+#: ../../include/contact_widgets.php:22
+msgid "Enter name or interest"
msgstr ""
-#: ../../include/event.php:1246
-msgid "This event has been added to your calendar."
+#: ../../include/contact_widgets.php:23
+msgid "Connect/Follow"
msgstr ""
-#: ../../include/event.php:1400 ../../include/conversation.php:153
-#: ../../include/text.php:2361 ../../Zotlabs/Module/Channel_calendar.php:221
-#: ../../Zotlabs/Module/Tagger.php:75 ../../Zotlabs/Module/Like.php:450
-msgid "event"
+#: ../../include/contact_widgets.php:24
+msgid "Examples: Robert Morgenstein, Fishing"
msgstr ""
-#: ../../include/event.php:1479
-msgid "Not specified"
+#: ../../include/contact_widgets.php:25 ../../Zotlabs/Module/Directory.php:435
+#: ../../Zotlabs/Module/Directory.php:440
+#: ../../Zotlabs/Module/Connections.php:407
+msgid "Find"
msgstr ""
-#: ../../include/event.php:1480
-msgid "Needs Action"
+#: ../../include/contact_widgets.php:26 ../../Zotlabs/Module/Suggest.php:77
+#: ../../Zotlabs/Module/Directory.php:439
+msgid "Channel Suggestions"
msgstr ""
-#: ../../include/event.php:1481
-msgid "Completed"
+#: ../../include/contact_widgets.php:28
+msgid "Random Profile"
msgstr ""
-#: ../../include/event.php:1482
-msgid "In Process"
+#: ../../include/contact_widgets.php:29
+msgid "Invite Friends"
msgstr ""
-#: ../../include/event.php:1483
-msgid "Cancelled"
+#: ../../include/contact_widgets.php:31
+msgid "Advanced example: name=fred and country=iceland"
msgstr ""
-#: ../../include/event.php:1564 ../../include/connections.php:790
-#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377
-msgid "Mobile"
+#: ../../include/contact_widgets.php:58 ../../include/contact_widgets.php:121
+#: ../../include/contact_widgets.php:155
+#: ../../addon/cards/Widget/Cards_categories.php:83
+#: ../../addon/articles/Widget/Articles_categories.php:83
+#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
+msgid "Everything"
msgstr ""
-#: ../../include/event.php:1565 ../../include/connections.php:791
-#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378
-#: ../../Zotlabs/Widget/Notifications.php:43
-msgid "Home"
+#: ../../include/contact_widgets.php:118 ../../include/contact_widgets.php:152
+#: ../../include/taxonomy.php:425 ../../include/taxonomy.php:507
+#: ../../include/taxonomy.php:527 ../../include/taxonomy.php:548
+#: ../../addon/cards/Widget/Cards_categories.php:80
+#: ../../addon/articles/Widget/Articles_categories.php:80
+#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:392
+#: ../../Zotlabs/Storage/Browser.php:406 ../../Zotlabs/Module/Cdav.php:1062
+msgid "Categories"
msgstr ""
-#: ../../include/event.php:1566 ../../include/connections.php:792
-msgid "Home, Voice"
+#: ../../include/contact_widgets.php:185
+msgid "Common Connections"
msgstr ""
-#: ../../include/event.php:1567 ../../include/connections.php:793
-msgid "Home, Fax"
+#: ../../include/contact_widgets.php:189
+#, php-format
+msgid "View all %d common connections"
msgstr ""
-#: ../../include/event.php:1568 ../../include/connections.php:794
-#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379
-msgid "Work"
+#: ../../include/cdav.php:157
+msgid "INVALID EVENT DISMISSED!"
msgstr ""
-#: ../../include/event.php:1569 ../../include/connections.php:795
-msgid "Work, Voice"
+#: ../../include/cdav.php:158
+msgid "Summary: "
msgstr ""
-#: ../../include/event.php:1570 ../../include/connections.php:796
-msgid "Work, Fax"
+#: ../../include/cdav.php:158 ../../include/cdav.php:159
+#: ../../include/cdav.php:167 ../../include/conversation.php:1006
+#: ../../Zotlabs/Lib/Apps.php:1168 ../../Zotlabs/Lib/Apps.php:1252
+#: ../../Zotlabs/Lib/Activity.php:1726 ../../Zotlabs/Widget/Album.php:90
+#: ../../Zotlabs/Widget/Pinned.php:256 ../../Zotlabs/Widget/Portfolio.php:99
+#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Module/Photos.php:788
+#: ../../Zotlabs/Module/Photos.php:1246
+msgid "Unknown"
msgstr ""
-#: ../../include/event.php:1571 ../../include/event.php:1578
-#: ../../include/connections.php:797 ../../include/connections.php:804
-#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/selectors.php:119 ../../include/selectors.php:155
-#: ../../Zotlabs/Access/PermissionRoles.php:362
-#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1380
-msgid "Other"
+#: ../../include/cdav.php:159
+msgid "Date: "
msgstr ""
-#: ../../include/photos.php:153
-#, php-format
-msgid "Image exceeds website size limit of %lu bytes"
+#: ../../include/cdav.php:160 ../../include/cdav.php:168
+msgid "Reason: "
msgstr ""
-#: ../../include/photos.php:164
-msgid "Image file is empty."
+#: ../../include/cdav.php:166
+msgid "INVALID CARD DISMISSED!"
msgstr ""
-#: ../../include/photos.php:198 ../../Zotlabs/Module/Cover_photo.php:240
-#: ../../Zotlabs/Module/Profile_photo.php:275
-msgid "Unable to process image"
+#: ../../include/cdav.php:167
+msgid "Name: "
msgstr ""
-#: ../../include/photos.php:324
-msgid "Photo storage failed."
+#: ../../include/group.php:23
+msgid ""
+"A deleted group with this name was revived. Existing item permissions "
+"<strong>may</strong> apply to this group and any future members. If this is "
+"not what you intended, please create another group with a different name."
msgstr ""
-#: ../../include/photos.php:373
-msgid "a new photo"
+#: ../../include/group.php:271
+msgid "Add new connections to this privacy group"
msgstr ""
-#: ../../include/photos.php:377
-#, php-format
-msgctxt "photo_upload"
-msgid "%1$s posted %2$s to %3$s"
+#: ../../include/group.php:305
+msgid "edit"
msgstr ""
-#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1339
-#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1353
-msgid "Recent Photos"
+#: ../../include/group.php:327 ../../include/acl_selectors.php:87
+#: ../../Zotlabs/Lib/Apps.php:368 ../../Zotlabs/Widget/Activity_filter.php:95
+#: ../../Zotlabs/Module/Group.php:144
+msgid "Privacy Groups"
msgstr ""
-#: ../../include/photos.php:727
-msgid "Upload New Photos"
+#: ../../include/group.php:328
+msgid "Edit group"
msgstr ""
-#: ../../include/items.php:456 ../../Zotlabs/Web/WebServer.php:118
-#: ../../Zotlabs/Module/Import_items.php:116 ../../Zotlabs/Module/Group.php:109
-#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:54
-#: ../../Zotlabs/Module/Profperm.php:29 ../../Zotlabs/Module/Subthread.php:89
-#: ../../Zotlabs/Module/Like.php:344
-#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:75
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:119
-#: ../../extend/addon/hzaddons/redfiles/redfiles.php:109
-msgid "Permission denied"
+#: ../../include/group.php:329
+msgid "Manage privacy groups"
msgstr ""
-#: ../../include/items.php:1241
-msgid "Visible to anybody on the internet."
+#: ../../include/group.php:330
+msgid "Channels not in any privacy group"
msgstr ""
-#: ../../include/items.php:1243
-msgid "Visible to you only."
+#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
+msgid "add"
msgstr ""
-#: ../../include/items.php:1245
-msgid "Visible to anybody in this network."
+#: ../../include/taxonomy.php:326
+msgid "Trending"
msgstr ""
-#: ../../include/items.php:1247
-msgid "Visible to anybody authenticated."
+#: ../../include/taxonomy.php:326 ../../include/taxonomy.php:465
+#: ../../include/taxonomy.php:486 ../../Zotlabs/Widget/Tagcloud.php:26
+msgid "Tags"
msgstr ""
-#: ../../include/items.php:1249
-#, php-format
-msgid "Visible to anybody on %s."
+#: ../../include/taxonomy.php:566
+msgid "Keywords"
msgstr ""
-#: ../../include/items.php:1251
-msgid "Visible to all connections."
+#: ../../include/taxonomy.php:587
+msgid "have"
msgstr ""
-#: ../../include/items.php:1253
-msgid "Visible to approved connections."
+#: ../../include/taxonomy.php:587
+msgid "has"
msgstr ""
-#: ../../include/items.php:1255
-msgid "Visible to specific connections."
+#: ../../include/taxonomy.php:588
+msgid "want"
msgstr ""
-#: ../../include/items.php:3345 ../../Zotlabs/Lib/Activity.php:2196
-#: ../../Zotlabs/Module/Share.php:124
-#, php-format
-msgid "&#x1f501; Repeated %1$s's %2$s"
+#: ../../include/taxonomy.php:588
+msgid "wants"
msgstr ""
-#: ../../include/items.php:3848 ../../Zotlabs/Module/Viewsrc.php:25
-#: ../../Zotlabs/Module/Thing.php:113 ../../Zotlabs/Module/Filestorage.php:29
-#: ../../Zotlabs/Module/Admin/Addons.php:264
-#: ../../Zotlabs/Module/Admin/Themes.php:73 ../../Zotlabs/Module/Display.php:59
-#: ../../Zotlabs/Module/Display.php:120 ../../Zotlabs/Module/Display.php:391
-#: ../../Zotlabs/Module/Admin.php:63
-#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:291
-#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:292
-msgid "Item not found."
+#: ../../include/taxonomy.php:589 ../../Zotlabs/Lib/ThreadItem.php:296
+msgid "like"
msgstr ""
-#: ../../include/items.php:4430 ../../Zotlabs/Module/Group.php:63
-#: ../../Zotlabs/Module/Group.php:207
-msgid "Privacy group not found."
+#: ../../include/taxonomy.php:589
+msgid "likes"
msgstr ""
-#: ../../include/items.php:4446
-msgid "Privacy group is empty."
+#: ../../include/taxonomy.php:590 ../../Zotlabs/Lib/ThreadItem.php:297
+msgid "dislike"
msgstr ""
-#: ../../include/items.php:4453
-#, php-format
-msgid "Privacy group: %s"
+#: ../../include/taxonomy.php:590
+msgid "dislikes"
msgstr ""
-#: ../../include/items.php:4463
-#, php-format
-msgid "Connection: %s"
-msgstr ""
+#: ../../include/taxonomy.php:677 ../../include/conversation.php:1561
+#: ../../Zotlabs/Module/Photos.php:1129
+msgctxt "noun"
+msgid "Like"
+msgid_plural "Likes"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../include/items.php:4465
-msgid "Connection not found."
+#: ../../include/photo/photo_driver.php:458
+#: ../../Zotlabs/Module/Profile_photo.php:168
+#: ../../Zotlabs/Module/Profile_photo.php:337
+msgid "Profile Photos"
msgstr ""
#: ../../include/account.php:39
@@ -1188,262 +1698,442 @@ msgstr ""
msgid "your registration password"
msgstr ""
-#: ../../include/account.php:607 ../../include/account.php:696
+#: ../../include/account.php:607 ../../include/account.php:680
#, php-format
msgid "Registration details for %s"
msgstr ""
-#: ../../include/account.php:707
+#: ../../include/account.php:695
msgid "Account approved."
msgstr ""
-#: ../../include/account.php:763
+#: ../../include/account.php:747
#, php-format
msgid "Registration revoked for %s"
msgstr ""
-#: ../../include/account.php:770
+#: ../../include/account.php:754
#, php-format
msgid "Could not revoke registration for %s"
msgstr ""
-#: ../../include/account.php:1187 ../../include/account.php:1189
+#: ../../include/account.php:1171 ../../include/account.php:1173
msgid "Click here to upgrade."
msgstr ""
-#: ../../include/account.php:1195
+#: ../../include/account.php:1179
msgid "This action exceeds the limits set by your subscription plan."
msgstr ""
-#: ../../include/account.php:1200
+#: ../../include/account.php:1184
msgid "This action is not available under your subscription plan."
msgstr ""
-#: ../../include/account.php:1260
+#: ../../include/account.php:1244
msgid "open"
msgstr ""
-#: ../../include/account.php:1260
+#: ../../include/account.php:1244
msgid "closed"
msgstr ""
-#: ../../include/account.php:1267
+#: ../../include/account.php:1251
msgid "Registration is currently"
msgstr ""
-#: ../../include/account.php:1276
+#: ../../include/account.php:1260
msgid "please come back"
msgstr ""
-#: ../../include/photo/photo_driver.php:458
-#: ../../Zotlabs/Module/Profile_photo.php:168
-#: ../../Zotlabs/Module/Profile_photo.php:337
-msgid "Profile Photos"
+#: ../../include/js_strings.php:5
+msgid "Delete this item?"
msgstr ""
-#: ../../include/activities.php:30
-msgid " and "
+#: ../../include/js_strings.php:6 ../../Zotlabs/Module/Moderate.php:78
+msgid "Item deleted"
msgstr ""
-#: ../../include/activities.php:32
-msgid ", "
+#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:798
+#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Module/Photos.php:1207
+msgid "Comment"
msgstr ""
-#: ../../include/activities.php:36 ../../include/activities.php:38
-#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Module/Profile_photo.php:227
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:58
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:59
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:60
-msgid "Profile Photo"
+#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:507
+msgid "show all"
msgstr ""
-#: ../../include/activities.php:36 ../../Zotlabs/Module/Cover_photo.php:230
-msgid "Cover Photo"
+#: ../../include/js_strings.php:9
+msgid "show less"
msgstr ""
-#: ../../include/activities.php:45
-msgid "public profile"
+#: ../../include/js_strings.php:10
+msgid "expand"
msgstr ""
-#: ../../include/activities.php:62
-#, php-format
-msgid "%1$s %2$s has been updated to %3$s."
+#: ../../include/js_strings.php:11
+msgid "collapse"
msgstr ""
-#: ../../include/activities.php:65
-#, php-format
-msgid "%1$s updated the %2$s. Changed %3$s."
+#: ../../include/js_strings.php:12
+msgid "Password too short"
msgstr ""
-#: ../../include/group.php:23
-msgid ""
-"A deleted group with this name was revived. Existing item permissions "
-"<strong>may</strong> apply to this group and any future members. If this is "
-"not what you intended, please create another group with a different name."
+#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:162
+msgid "Passwords do not match"
msgstr ""
-#: ../../include/group.php:271
-msgid "Add new connections to this privacy group"
+#: ../../include/js_strings.php:14
+msgid "everybody"
msgstr ""
-#: ../../include/group.php:305
-msgid "edit"
+#: ../../include/js_strings.php:15
+msgid "Secret Passphrase"
msgstr ""
-#: ../../include/group.php:327 ../../include/acl_selectors.php:87
-#: ../../Zotlabs/Lib/Apps.php:368 ../../Zotlabs/Module/Group.php:144
-#: ../../Zotlabs/Widget/Activity_filter.php:95
-msgid "Privacy Groups"
+#: ../../include/js_strings.php:16
+msgid "Passphrase hint"
msgstr ""
-#: ../../include/group.php:328
-msgid "Edit group"
+#: ../../include/js_strings.php:17
+msgid "Notice: Permissions have changed but have not yet been submitted."
msgstr ""
-#: ../../include/group.php:329
-msgid "Manage privacy groups"
+#: ../../include/js_strings.php:18
+msgid "close all"
msgstr ""
-#: ../../include/group.php:330
-msgid "Channels not in any privacy group"
+#: ../../include/js_strings.php:19
+msgid "Nothing new here"
msgstr ""
-#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
-msgid "add"
+#: ../../include/js_strings.php:20
+msgid "Rate This Channel (this is public)"
msgstr ""
-#: ../../include/language.php:423 ../../include/text.php:2199
-msgid "default"
+#: ../../include/js_strings.php:21
+msgid "Rating"
msgstr ""
-#: ../../include/language.php:436
-msgid "Select an alternate language"
+#: ../../include/js_strings.php:22
+msgid "Describe (optional)"
msgstr ""
-#: ../../include/import.php:31
-msgid "Unable to import a removed channel."
+#: ../../include/js_strings.php:24
+msgid "Please enter a link URL"
msgstr ""
-#: ../../include/import.php:57
-msgid ""
-"Cannot create a duplicate channel identifier on this system. Import failed."
+#: ../../include/js_strings.php:25
+msgid "Unsaved changes. Are you sure you wish to leave this page?"
msgstr ""
-#: ../../include/import.php:78
-#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:43
-msgid "Unable to create a unique channel address. Import failed."
+#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Locs.php:121
+#: ../../Zotlabs/Module/Pubsites.php:55 ../../Zotlabs/Module/Profiles.php:476
+#: ../../Zotlabs/Module/Profiles.php:749 ../../Zotlabs/Module/Cdav.php:1006
+msgid "Location"
msgstr ""
-#: ../../include/import.php:129
-msgid "Cloned channel not found. Import failed."
+#: ../../include/js_strings.php:27
+msgid "lovely"
msgstr ""
-#: ../../include/datetime.php:58 ../../Zotlabs/Module/Profiles.php:751
-#: ../../Zotlabs/Widget/Newmember.php:58
-msgid "Miscellaneous"
+#: ../../include/js_strings.php:28
+msgid "wonderful"
msgstr ""
-#: ../../include/datetime.php:140
-msgid "Birthday"
+#: ../../include/js_strings.php:29
+msgid "fantastic"
msgstr ""
-#: ../../include/datetime.php:140
-msgid "Age: "
+#: ../../include/js_strings.php:30
+msgid "great"
msgstr ""
-#: ../../include/datetime.php:140
-msgid "YYYY-MM-DD or MM-DD"
+#: ../../include/js_strings.php:31
+msgid ""
+"Your chosen nickname was either already taken or not valid. Please use our "
+"suggestion ("
msgstr ""
-#: ../../include/datetime.php:211 ../../include/js_strings.php:124
-#: ../../Zotlabs/Module/Profiles.php:760 ../../Zotlabs/Module/Profiles.php:764
-#: ../../Zotlabs/Module/Appman.php:218 ../../Zotlabs/Module/Appman.php:219
-#: ../../Zotlabs/Module/Register.php:501
-#: ../../Zotlabs/Module/Settings/Multifactor.php:84
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:334
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:358
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:434
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:458
-msgid "Required"
+#: ../../include/js_strings.php:32
+msgid ") or enter a new one."
msgstr ""
-#: ../../include/datetime.php:238 ../../boot.php:2774
-msgid "never"
+#: ../../include/js_strings.php:33
+msgid "Thank you, this nickname is valid."
msgstr ""
-#: ../../include/datetime.php:244
-msgid "less than a second ago"
+#: ../../include/js_strings.php:34
+msgid "A channel name is required."
msgstr ""
-#: ../../include/datetime.php:262
-#, php-format
-msgctxt "e.g. 22 hours ago, 1 minute ago"
-msgid "%1$d %2$s ago"
+#: ../../include/js_strings.php:35
+msgid "This is a "
msgstr ""
-#: ../../include/datetime.php:273
-msgctxt "relative_date"
-msgid "year"
-msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../include/js_strings.php:36
+msgid " channel name"
+msgstr ""
-#: ../../include/datetime.php:276
-msgctxt "relative_date"
-msgid "month"
-msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../include/js_strings.php:37
+msgid "Back to reply"
+msgstr ""
-#: ../../include/datetime.php:279
-msgctxt "relative_date"
-msgid "week"
-msgid_plural "weeks"
+#: ../../include/js_strings.php:38
+msgid "Pinned"
+msgstr ""
+
+#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:457
+msgid "Pin to the top"
+msgstr ""
+
+#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:457
+#: ../../Zotlabs/Widget/Pinned.php:150
+msgid "Unpin from the top"
+msgstr ""
+
+#: ../../include/js_strings.php:46
+#, php-format
+msgid "%d minutes"
+msgid_plural "%d minutes"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/datetime.php:282
-msgctxt "relative_date"
-msgid "day"
-msgid_plural "days"
+#: ../../include/js_strings.php:47
+#, php-format
+msgid "about %d hours"
+msgid_plural "about %d hours"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/datetime.php:285
-msgctxt "relative_date"
-msgid "hour"
-msgid_plural "hours"
+#: ../../include/js_strings.php:48
+#, php-format
+msgid "%d days"
+msgid_plural "%d days"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/datetime.php:288
-msgctxt "relative_date"
-msgid "minute"
-msgid_plural "minutes"
+#: ../../include/js_strings.php:49
+#, php-format
+msgid "%d months"
+msgid_plural "%d months"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/datetime.php:291
-msgctxt "relative_date"
-msgid "second"
-msgid_plural "seconds"
+#: ../../include/js_strings.php:50
+#, php-format
+msgid "%d years"
+msgid_plural "%d years"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/datetime.php:520
-#, php-format
-msgid "%1$s's birthday"
+#: ../../include/js_strings.php:52 ../../include/text.php:1503
+msgid "January"
msgstr ""
-#: ../../include/datetime.php:521
+#: ../../include/js_strings.php:53 ../../include/text.php:1503
+msgid "February"
+msgstr ""
+
+#: ../../include/js_strings.php:54 ../../include/text.php:1503
+msgid "March"
+msgstr ""
+
+#: ../../include/js_strings.php:55 ../../include/text.php:1503
+msgid "April"
+msgstr ""
+
+#: ../../include/js_strings.php:56
+msgctxt "long"
+msgid "May"
+msgstr ""
+
+#: ../../include/js_strings.php:57 ../../include/text.php:1503
+msgid "June"
+msgstr ""
+
+#: ../../include/js_strings.php:58 ../../include/text.php:1503
+msgid "July"
+msgstr ""
+
+#: ../../include/js_strings.php:59 ../../include/text.php:1503
+msgid "August"
+msgstr ""
+
+#: ../../include/js_strings.php:60 ../../include/text.php:1503
+msgid "September"
+msgstr ""
+
+#: ../../include/js_strings.php:61 ../../include/text.php:1503
+msgid "October"
+msgstr ""
+
+#: ../../include/js_strings.php:62 ../../include/text.php:1503
+msgid "November"
+msgstr ""
+
+#: ../../include/js_strings.php:63 ../../include/text.php:1503
+msgid "December"
+msgstr ""
+
+#: ../../include/js_strings.php:64
+msgid "Jan"
+msgstr ""
+
+#: ../../include/js_strings.php:65
+msgid "Feb"
+msgstr ""
+
+#: ../../include/js_strings.php:66
+msgid "Mar"
+msgstr ""
+
+#: ../../include/js_strings.php:67
+msgid "Apr"
+msgstr ""
+
+#: ../../include/js_strings.php:68
+msgctxt "short"
+msgid "May"
+msgstr ""
+
+#: ../../include/js_strings.php:69
+msgid "Jun"
+msgstr ""
+
+#: ../../include/js_strings.php:70
+msgid "Jul"
+msgstr ""
+
+#: ../../include/js_strings.php:71
+msgid "Aug"
+msgstr ""
+
+#: ../../include/js_strings.php:72
+msgid "Sep"
+msgstr ""
+
+#: ../../include/js_strings.php:73
+msgid "Oct"
+msgstr ""
+
+#: ../../include/js_strings.php:74
+msgid "Nov"
+msgstr ""
+
+#: ../../include/js_strings.php:75
+msgid "Dec"
+msgstr ""
+
+#: ../../include/js_strings.php:76 ../../include/text.php:1499
+msgid "Sunday"
+msgstr ""
+
+#: ../../include/js_strings.php:77 ../../include/text.php:1499
+msgid "Monday"
+msgstr ""
+
+#: ../../include/js_strings.php:78 ../../include/text.php:1499
+msgid "Tuesday"
+msgstr ""
+
+#: ../../include/js_strings.php:79 ../../include/text.php:1499
+msgid "Wednesday"
+msgstr ""
+
+#: ../../include/js_strings.php:80 ../../include/text.php:1499
+msgid "Thursday"
+msgstr ""
+
+#: ../../include/js_strings.php:81 ../../include/text.php:1499
+msgid "Friday"
+msgstr ""
+
+#: ../../include/js_strings.php:82 ../../include/text.php:1499
+msgid "Saturday"
+msgstr ""
+
+#: ../../include/js_strings.php:83
+msgid "Sun"
+msgstr ""
+
+#: ../../include/js_strings.php:84
+msgid "Mon"
+msgstr ""
+
+#: ../../include/js_strings.php:85
+msgid "Tue"
+msgstr ""
+
+#: ../../include/js_strings.php:86
+msgid "Wed"
+msgstr ""
+
+#: ../../include/js_strings.php:87
+msgid "Thu"
+msgstr ""
+
+#: ../../include/js_strings.php:88
+msgid "Fri"
+msgstr ""
+
+#: ../../include/js_strings.php:89
+msgid "Sat"
+msgstr ""
+
+#: ../../include/js_strings.php:90
+msgctxt "calendar"
+msgid "today"
+msgstr ""
+
+#: ../../include/js_strings.php:91
+msgctxt "calendar"
+msgid "month"
+msgstr ""
+
+#: ../../include/js_strings.php:92
+msgctxt "calendar"
+msgid "week"
+msgstr ""
+
+#: ../../include/js_strings.php:93
+msgctxt "calendar"
+msgid "day"
+msgstr ""
+
+#: ../../include/js_strings.php:94
+msgctxt "calendar"
+msgid "All day"
+msgstr ""
+
+#: ../../include/js_strings.php:97
+msgid "Please stand by while your download is being prepared."
+msgstr ""
+
+#: ../../include/js_strings.php:100
+msgid "Email address not valid"
+msgstr ""
+
+#: ../../include/js_strings.php:101 ../../include/datetime.php:211
+#: ../../addon/cart/submodules/orderoptions.php:334
+#: ../../addon/cart/submodules/orderoptions.php:358
+#: ../../addon/cart/submodules/orderoptions.php:434
+#: ../../addon/cart/submodules/orderoptions.php:458
+#: ../../Zotlabs/Module/Register.php:501 ../../Zotlabs/Module/Appman.php:218
+#: ../../Zotlabs/Module/Appman.php:219 ../../Zotlabs/Module/Profiles.php:760
+#: ../../Zotlabs/Module/Profiles.php:764
+#: ../../Zotlabs/Module/Settings/Multifactor.php:84
+msgid "Required"
+msgstr ""
+
+#: ../../include/zid.php:420
#, php-format
-msgid "Happy Birthday %1$s"
+msgid "OpenWebAuth: %1$s welcomes %2$s"
msgstr ""
-#: ../../include/conversation.php:149 ../../include/text.php:2358
-#: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Subthread.php:112
-#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1693
-#: ../../extend/addon/hzaddons/redphotos/redphotohelper.php:71
+#: ../../include/conversation.php:149 ../../include/text.php:2356
+#: ../../addon/redphotos/redphotohelper.php:71
+#: ../../addon/diaspora/Receiver.php:1704
+#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Tagger.php:73
msgid "photo"
msgstr ""
@@ -1451,13 +2141,19 @@ msgstr ""
msgid "channel"
msgstr ""
-#: ../../include/conversation.php:182 ../../include/text.php:2366
+#: ../../include/conversation.php:180 ../../include/markdown.php:192
+#: ../../include/text.php:2362 ../../include/bbcode.php:572
#: ../../Zotlabs/Module/Tagger.php:81
+msgid "post"
+msgstr ""
+
+#: ../../include/conversation.php:182 ../../include/text.php:2364
+#: ../../Zotlabs/Module/Tagger.php:83
msgid "comment"
msgstr ""
-#: ../../include/conversation.php:196 ../../Zotlabs/Module/Like.php:483
-#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1628
+#: ../../include/conversation.php:196 ../../addon/diaspora/Receiver.php:1639
+#: ../../Zotlabs/Module/Like.php:486
#, php-format
msgid "%1$s likes %2$s's %3$s"
msgstr ""
@@ -1467,7 +2163,7 @@ msgstr ""
msgid "likes %1$s's %2$s"
msgstr ""
-#: ../../include/conversation.php:201 ../../Zotlabs/Module/Like.php:485
+#: ../../include/conversation.php:201 ../../Zotlabs/Module/Like.php:488
#, php-format
msgid "%1$s doesn't like %2$s's %3$s"
msgstr ""
@@ -1487,7 +2183,7 @@ msgstr ""
msgid "repeated %1$s's %2$s"
msgstr ""
-#: ../../include/conversation.php:334 ../../Zotlabs/Lib/ThreadItem.php:536
+#: ../../include/conversation.php:334 ../../Zotlabs/Lib/ThreadItem.php:474
msgid "This is an unsaved preview"
msgstr ""
@@ -1501,20 +2197,20 @@ msgctxt "title"
msgid "Dislikes"
msgstr ""
-#: ../../include/conversation.php:473 ../../Zotlabs/Module/Photos.php:1111
-#: ../../Zotlabs/Widget/Pinned.php:73
+#: ../../include/conversation.php:473 ../../Zotlabs/Widget/Pinned.php:73
+#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Attending"
msgstr ""
-#: ../../include/conversation.php:474 ../../Zotlabs/Module/Photos.php:1111
-#: ../../Zotlabs/Widget/Pinned.php:74
+#: ../../include/conversation.php:474 ../../Zotlabs/Widget/Pinned.php:74
+#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Not attending"
msgstr ""
-#: ../../include/conversation.php:475 ../../Zotlabs/Module/Photos.php:1111
-#: ../../Zotlabs/Widget/Pinned.php:75
+#: ../../include/conversation.php:475 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Might attend"
msgstr ""
@@ -1529,26 +2225,27 @@ msgid "Select"
msgstr ""
#: ../../include/conversation.php:547 ../../include/conversation.php:608
-#: ../../Zotlabs/Lib/Apps.php:618 ../../Zotlabs/Lib/ThreadItem.php:183
-#: ../../Zotlabs/Lib/ThreadItem.php:544 ../../Zotlabs/Storage/Browser.php:388
-#: ../../Zotlabs/Module/Editblock.php:139
-#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Photos.php:1173
-#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Group.php:252
-#: ../../Zotlabs/Module/Oauth2.php:193 ../../Zotlabs/Module/Connedit.php:540
-#: ../../Zotlabs/Module/Connedit.php:749
-#: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Thing.php:295
-#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Webpages.php:252
-#: ../../Zotlabs/Module/Admin/Accounts.php:320
+#: ../../addon/cards/Mod_Card_edit.php:124
+#: ../../addon/articles/Mod_Article_edit.php:124 ../../Zotlabs/Lib/Apps.php:618
+#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Lib/ThreadItem.php:482
+#: ../../Zotlabs/Storage/Browser.php:388
+#: ../../Zotlabs/Module/Editwebpage.php:167
+#: ../../Zotlabs/Module/Webpages.php:251 ../../Zotlabs/Module/Oauth.php:172
+#: ../../Zotlabs/Module/Thing.php:302 ../../Zotlabs/Module/Tokens.php:295
+#: ../../Zotlabs/Module/Contactedit.php:651
+#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Connedit.php:749
+#: ../../Zotlabs/Module/Admin/Accounts.php:220
+#: ../../Zotlabs/Module/Admin/Profs.php:177
#: ../../Zotlabs/Module/Admin/Channels.php:171
-#: ../../Zotlabs/Module/Admin/Profs.php:177 ../../Zotlabs/Module/Tokens.php:295
-#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Cdav.php:1047
-#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Contactedit.php:651
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:128
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:130
+#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Group.php:252
+#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Photos.php:1173
+#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Cdav.php:1047
+#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Oauth2.php:193
+#: ../../Zotlabs/Module/Editblock.php:139
msgid "Delete"
msgstr ""
-#: ../../include/conversation.php:553 ../../Zotlabs/Lib/ThreadItem.php:287
+#: ../../include/conversation.php:553 ../../Zotlabs/Lib/ThreadItem.php:248
msgid "Toggle Star Status"
msgstr ""
@@ -1556,20 +2253,20 @@ msgstr ""
msgid "Private Message"
msgstr ""
-#: ../../include/conversation.php:568 ../../Zotlabs/Lib/ThreadItem.php:297
+#: ../../include/conversation.php:568 ../../Zotlabs/Lib/ThreadItem.php:258
#: ../../Zotlabs/Widget/Pinned.php:84
msgid "Message signature validated"
msgstr ""
-#: ../../include/conversation.php:569 ../../Zotlabs/Lib/ThreadItem.php:298
+#: ../../include/conversation.php:569 ../../Zotlabs/Lib/ThreadItem.php:259
#: ../../Zotlabs/Widget/Pinned.php:85
msgid "Message signature incorrect"
msgstr ""
-#: ../../include/conversation.php:607 ../../Zotlabs/Lib/ThreadItem.php:543
+#: ../../include/conversation.php:607 ../../Zotlabs/Lib/ThreadItem.php:481
+#: ../../Zotlabs/Module/Admin/Accounts.php:218
#: ../../Zotlabs/Module/Connections.php:358
#: ../../Zotlabs/Module/Connections.php:409
-#: ../../Zotlabs/Module/Admin/Accounts.php:318
msgid "Approve"
msgstr ""
@@ -1586,31 +2283,28 @@ msgstr ""
msgid "Filed under:"
msgstr ""
-#: ../../include/conversation.php:642 ../../Zotlabs/Lib/ThreadItem.php:455
-#: ../../Zotlabs/Widget/Pinned.php:128
+#: ../../include/conversation.php:642 ../../Zotlabs/Lib/ThreadItem.php:414
+#: ../../Zotlabs/Widget/Pinned.php:127
#, php-format
msgid "from %s"
msgstr ""
-#: ../../include/conversation.php:645 ../../Zotlabs/Lib/ThreadItem.php:458
-#: ../../Zotlabs/Widget/Pinned.php:131
+#: ../../include/conversation.php:645 ../../Zotlabs/Widget/Pinned.php:130
#, php-format
msgid "last edited: %s"
msgstr ""
-#: ../../include/conversation.php:646 ../../Zotlabs/Lib/ThreadItem.php:459
-#: ../../Zotlabs/Widget/Pinned.php:132
+#: ../../include/conversation.php:646 ../../Zotlabs/Widget/Pinned.php:131
#, php-format
msgid "Expires: %s"
msgstr ""
-#: ../../include/conversation.php:661
-#: ../../extend/addon/hzaddons/articles/articles.php:83
-#: ../../extend/addon/hzaddons/cards/cards.php:82
+#: ../../include/conversation.php:661 ../../addon/cards/cards.php:82
+#: ../../addon/articles/articles.php:83
msgid "View in context"
msgstr ""
-#: ../../include/conversation.php:663 ../../Zotlabs/Lib/ThreadItem.php:537
+#: ../../include/conversation.php:663 ../../Zotlabs/Lib/ThreadItem.php:475
#: ../../Zotlabs/Module/Photos.php:1077
msgid "Please wait"
msgstr ""
@@ -1623,7 +2317,7 @@ msgstr ""
msgid "Loading..."
msgstr ""
-#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:314
+#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:275
msgid "Conversation Features"
msgstr ""
@@ -1643,15 +2337,21 @@ msgstr ""
msgid "Unfollow Thread"
msgstr ""
+#: ../../include/conversation.php:902 ../../include/nav.php:127
+#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:350
+#: ../../Zotlabs/Module/Connedit.php:480
+msgid "View Profile"
+msgstr ""
+
#: ../../include/conversation.php:914 ../../Zotlabs/Module/Connedit.php:501
msgid "Recent Activity"
msgstr ""
-#: ../../include/conversation.php:926 ../../include/channel.php:1625
-#: ../../include/connections.php:150 ../../Zotlabs/Module/Suggest.php:69
+#: ../../include/conversation.php:926 ../../include/connections.php:150
+#: ../../include/channel.php:1627 ../../Zotlabs/Widget/Suggestions.php:51
+#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Suggest.php:69
#: ../../Zotlabs/Module/Directory.php:371
#: ../../Zotlabs/Module/Connections.php:365
-#: ../../Zotlabs/Widget/Suggestions.php:51 ../../Zotlabs/Widget/Follow.php:37
msgid "Connect"
msgstr ""
@@ -1659,16 +2359,6 @@ msgstr ""
msgid "Edit Connection"
msgstr ""
-#: ../../include/conversation.php:1006 ../../include/cdav.php:158
-#: ../../include/cdav.php:159 ../../include/cdav.php:167
-#: ../../Zotlabs/Lib/Apps.php:1168 ../../Zotlabs/Lib/Apps.php:1252
-#: ../../Zotlabs/Lib/Activity.php:1684 ../../Zotlabs/Module/Photos.php:788
-#: ../../Zotlabs/Module/Photos.php:1246
-#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Widget/Pinned.php:257
-#: ../../Zotlabs/Widget/Album.php:90 ../../Zotlabs/Widget/Portfolio.php:99
-msgid "Unknown"
-msgstr ""
-
#: ../../include/conversation.php:1008
msgid "Approve this item"
msgstr ""
@@ -1722,91 +2412,78 @@ msgstr ""
msgid "%s don't like this."
msgstr ""
-#: ../../include/conversation.php:1129
-#: ../../extend/addon/hzaddons/hsse/hsse.php:82
+#: ../../include/conversation.php:1129 ../../addon/hsse/hsse.php:82
msgid "Set your location"
msgstr ""
-#: ../../include/conversation.php:1130
-#: ../../extend/addon/hzaddons/hsse/hsse.php:83
+#: ../../include/conversation.php:1130 ../../addon/hsse/hsse.php:83
msgid "Clear browser location"
msgstr ""
-#: ../../include/conversation.php:1142 ../../Zotlabs/Module/Editblock.php:116
-#: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Module/Editwebpage.php:143
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:99
-#: ../../extend/addon/hzaddons/hsse/hsse.php:95
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:101
+#: ../../include/conversation.php:1142 ../../addon/cards/Mod_Card_edit.php:94
+#: ../../addon/articles/Mod_Article_edit.php:94 ../../addon/hsse/hsse.php:95
+#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:219
+#: ../../Zotlabs/Module/Editblock.php:116
msgid "Insert web link"
msgstr ""
-#: ../../include/conversation.php:1146
-#: ../../extend/addon/hzaddons/hsse/hsse.php:99
+#: ../../include/conversation.php:1146 ../../addon/hsse/hsse.php:99
msgid "Embed (existing) photo from your photo albums"
msgstr ""
-#: ../../include/conversation.php:1179 ../../Zotlabs/Module/Chat.php:217
-#: ../../extend/addon/hzaddons/hsse/hsse.php:134
+#: ../../include/conversation.php:1179 ../../addon/hsse/hsse.php:134
+#: ../../Zotlabs/Module/Chat.php:217
msgid "Please enter a link URL:"
msgstr ""
-#: ../../include/conversation.php:1180
-#: ../../extend/addon/hzaddons/hsse/hsse.php:135
+#: ../../include/conversation.php:1180 ../../addon/hsse/hsse.php:135
msgid "Tag term:"
msgstr ""
-#: ../../include/conversation.php:1181
-#: ../../extend/addon/hzaddons/hsse/hsse.php:136
+#: ../../include/conversation.php:1181 ../../addon/hsse/hsse.php:136
msgid "Where are you right now?"
msgstr ""
-#: ../../include/conversation.php:1184 ../../Zotlabs/Module/Cover_photo.php:388
+#: ../../include/conversation.php:1184 ../../addon/wiki/Mod_Wiki.php:400
+#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:388
#: ../../Zotlabs/Module/Profile_photo.php:555
-#: ../../extend/addon/hzaddons/hsse/hsse.php:139
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:400
msgid "Choose images to embed"
msgstr ""
-#: ../../include/conversation.php:1185 ../../Zotlabs/Module/Cover_photo.php:389
+#: ../../include/conversation.php:1185 ../../addon/wiki/Mod_Wiki.php:401
+#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:389
#: ../../Zotlabs/Module/Profile_photo.php:556
-#: ../../extend/addon/hzaddons/hsse/hsse.php:140
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:401
msgid "Choose an album"
msgstr ""
-#: ../../include/conversation.php:1186
-#: ../../extend/addon/hzaddons/hsse/hsse.php:141
+#: ../../include/conversation.php:1186 ../../addon/hsse/hsse.php:141
msgid "Choose a different album..."
msgstr ""
-#: ../../include/conversation.php:1187 ../../Zotlabs/Module/Cover_photo.php:391
+#: ../../include/conversation.php:1187 ../../addon/wiki/Mod_Wiki.php:403
+#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:391
#: ../../Zotlabs/Module/Profile_photo.php:558
-#: ../../extend/addon/hzaddons/hsse/hsse.php:142
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:403
msgid "Error getting album list"
msgstr ""
-#: ../../include/conversation.php:1188 ../../Zotlabs/Module/Cover_photo.php:392
+#: ../../include/conversation.php:1188 ../../addon/wiki/Mod_Wiki.php:404
+#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:392
#: ../../Zotlabs/Module/Profile_photo.php:559
-#: ../../extend/addon/hzaddons/hsse/hsse.php:143
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:404
msgid "Error getting photo link"
msgstr ""
-#: ../../include/conversation.php:1189 ../../Zotlabs/Module/Cover_photo.php:393
+#: ../../include/conversation.php:1189 ../../addon/wiki/Mod_Wiki.php:405
+#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:393
#: ../../Zotlabs/Module/Profile_photo.php:560
-#: ../../extend/addon/hzaddons/hsse/hsse.php:144
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:405
msgid "Error getting album"
msgstr ""
-#: ../../include/conversation.php:1190
-#: ../../extend/addon/hzaddons/hsse/hsse.php:145
+#: ../../include/conversation.php:1190 ../../addon/hsse/hsse.php:145
msgid "Comments enabled"
msgstr ""
-#: ../../include/conversation.php:1191
-#: ../../extend/addon/hzaddons/hsse/hsse.php:146
+#: ../../include/conversation.php:1191 ../../addon/hsse/hsse.php:146
+#: ../../Zotlabs/Lib/ThreadItem.php:472
msgid "Comments disabled"
msgstr ""
@@ -1814,1223 +2491,1003 @@ msgstr ""
msgid "Confirm delete"
msgstr ""
-#: ../../include/conversation.php:1209 ../../Zotlabs/Lib/ThreadItem.php:878
-#: ../../Zotlabs/Module/Photos.php:1096 ../../Zotlabs/Module/Webpages.php:257
-#: ../../extend/addon/hzaddons/hsse/hsse.php:153
+#: ../../include/conversation.php:1209 ../../addon/hsse/hsse.php:153
+#: ../../Zotlabs/Lib/ThreadItem.php:810 ../../Zotlabs/Module/Webpages.php:256
+#: ../../Zotlabs/Module/Photos.php:1096
msgid "Preview"
msgstr ""
-#: ../../include/conversation.php:1242 ../../Zotlabs/Lib/ThreadItem.php:344
-#: ../../Zotlabs/Module/Photos.php:1076 ../../Zotlabs/Module/Layouts.php:192
-#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Webpages.php:251
-#: ../../Zotlabs/Widget/Cdav.php:142
-#: ../../extend/addon/hzaddons/hsse/hsse.php:186
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:304
+#: ../../include/conversation.php:1242 ../../addon/wiki/Mod_Wiki.php:304
+#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Lib/ThreadItem.php:305
+#: ../../Zotlabs/Widget/Cdav.php:142 ../../Zotlabs/Module/Webpages.php:250
+#: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Blocks.php:159
+#: ../../Zotlabs/Module/Photos.php:1076
msgid "Share"
msgstr ""
-#: ../../include/conversation.php:1251
-#: ../../extend/addon/hzaddons/hsse/hsse.php:195
+#: ../../include/conversation.php:1251 ../../addon/hsse/hsse.php:195
msgid "Page link name"
msgstr ""
-#: ../../include/conversation.php:1254
-#: ../../extend/addon/hzaddons/hsse/hsse.php:198
+#: ../../include/conversation.php:1254 ../../addon/hsse/hsse.php:198
msgid "Post as"
msgstr ""
-#: ../../include/conversation.php:1256 ../../Zotlabs/Lib/ThreadItem.php:869
-#: ../../extend/addon/hzaddons/hsse/hsse.php:200
+#: ../../include/conversation.php:1256 ../../addon/hsse/hsse.php:200
+#: ../../Zotlabs/Lib/ThreadItem.php:800
msgid "Bold"
msgstr ""
-#: ../../include/conversation.php:1257 ../../Zotlabs/Lib/ThreadItem.php:870
-#: ../../extend/addon/hzaddons/hsse/hsse.php:201
+#: ../../include/conversation.php:1257 ../../addon/hsse/hsse.php:201
+#: ../../Zotlabs/Lib/ThreadItem.php:801
msgid "Italic"
msgstr ""
-#: ../../include/conversation.php:1258 ../../Zotlabs/Lib/ThreadItem.php:871
-#: ../../extend/addon/hzaddons/hsse/hsse.php:202
+#: ../../include/conversation.php:1258 ../../Zotlabs/Lib/ThreadItem.php:802
+msgid "Highlight selected text"
+msgstr ""
+
+#: ../../include/conversation.php:1259 ../../addon/hsse/hsse.php:202
+#: ../../Zotlabs/Lib/ThreadItem.php:803
msgid "Underline"
msgstr ""
-#: ../../include/conversation.php:1259 ../../Zotlabs/Lib/ThreadItem.php:872
-#: ../../extend/addon/hzaddons/hsse/hsse.php:203
+#: ../../include/conversation.php:1260 ../../addon/hsse/hsse.php:203
+#: ../../Zotlabs/Lib/ThreadItem.php:804
msgid "Quote"
msgstr ""
-#: ../../include/conversation.php:1260 ../../Zotlabs/Lib/ThreadItem.php:873
-#: ../../extend/addon/hzaddons/hsse/hsse.php:204
+#: ../../include/conversation.php:1261 ../../addon/hsse/hsse.php:204
+#: ../../Zotlabs/Lib/ThreadItem.php:805
msgid "Code"
msgstr ""
-#: ../../include/conversation.php:1261 ../../Zotlabs/Lib/ThreadItem.php:875
-#: ../../extend/addon/hzaddons/hsse/hsse.php:205
+#: ../../include/conversation.php:1262 ../../addon/hsse/hsse.php:205
+#: ../../Zotlabs/Lib/ThreadItem.php:807
msgid "Attach/Upload file"
msgstr ""
-#: ../../include/conversation.php:1264
-#: ../../extend/addon/hzaddons/hsse/hsse.php:208
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:397
+#: ../../include/conversation.php:1265 ../../addon/wiki/Mod_Wiki.php:397
+#: ../../addon/hsse/hsse.php:208
msgid "Embed an image from your albums"
msgstr ""
-#: ../../include/conversation.php:1265 ../../include/conversation.php:1320
-#: ../../Zotlabs/Storage/Browser.php:387 ../../Zotlabs/Module/Editblock.php:141
-#: ../../Zotlabs/Module/Editlayout.php:140 ../../Zotlabs/Module/Oauth.php:110
-#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Editpost.php:114
-#: ../../Zotlabs/Module/Oauth2.php:115 ../../Zotlabs/Module/Oauth2.php:143
-#: ../../Zotlabs/Module/Cover_photo.php:386 ../../Zotlabs/Module/Tagrm.php:15
-#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Connedit.php:750
-#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Filer.php:56
-#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
-#: ../../Zotlabs/Module/Profile_photo.php:553
-#: ../../Zotlabs/Module/Admin/Addons.php:431 ../../Zotlabs/Module/Cdav.php:1049
-#: ../../Zotlabs/Module/Cdav.php:1386
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:130
-#: ../../extend/addon/hzaddons/hsse/hsse.php:209
-#: ../../extend/addon/hzaddons/hsse/hsse.php:258
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:365
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:398
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:132
+#: ../../include/conversation.php:1266 ../../include/conversation.php:1321
+#: ../../addon/cards/Mod_Card_edit.php:126
+#: ../../addon/articles/Mod_Article_edit.php:126
+#: ../../addon/wiki/Mod_Wiki.php:365 ../../addon/wiki/Mod_Wiki.php:398
+#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
+#: ../../Zotlabs/Storage/Browser.php:387
+#: ../../Zotlabs/Module/Cover_photo.php:386
+#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Oauth.php:111
+#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Connedit.php:750
+#: ../../Zotlabs/Module/Profile_photo.php:553 ../../Zotlabs/Module/Tagrm.php:15
+#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Fbrowser.php:68
+#: ../../Zotlabs/Module/Fbrowser.php:90 ../../Zotlabs/Module/Editlayout.php:140
+#: ../../Zotlabs/Module/Editpost.php:115 ../../Zotlabs/Module/Cdav.php:1049
+#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Oauth2.php:116
+#: ../../Zotlabs/Module/Oauth2.php:143 ../../Zotlabs/Module/Editblock.php:141
+#: ../../Zotlabs/Module/Filer.php:67
msgid "Cancel"
msgstr ""
-#: ../../include/conversation.php:1266 ../../include/conversation.php:1319
-#: ../../Zotlabs/Module/Cover_photo.php:387
+#: ../../include/conversation.php:1267 ../../include/conversation.php:1320
+#: ../../addon/wiki/Mod_Wiki.php:399 ../../addon/hsse/hsse.php:210
+#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:387
#: ../../Zotlabs/Module/Profile_photo.php:554
-#: ../../extend/addon/hzaddons/hsse/hsse.php:210
-#: ../../extend/addon/hzaddons/hsse/hsse.php:257
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:399
msgid "OK"
msgstr ""
-#: ../../include/conversation.php:1268
-#: ../../extend/addon/hzaddons/hsse/hsse.php:212
+#: ../../include/conversation.php:1269 ../../addon/hsse/hsse.php:212
msgid "Toggle voting"
msgstr ""
-#: ../../include/conversation.php:1269
+#: ../../include/conversation.php:1270
msgid "Toggle poll"
msgstr ""
-#: ../../include/conversation.php:1270
+#: ../../include/conversation.php:1271
msgid "Option"
msgstr ""
-#: ../../include/conversation.php:1271
+#: ../../include/conversation.php:1272
msgid "Add option"
msgstr ""
-#: ../../include/conversation.php:1272
+#: ../../include/conversation.php:1273
msgid "Minutes"
msgstr ""
-#: ../../include/conversation.php:1272
+#: ../../include/conversation.php:1273
msgid "Hours"
msgstr ""
-#: ../../include/conversation.php:1272
+#: ../../include/conversation.php:1273
msgid "Days"
msgstr ""
-#: ../../include/conversation.php:1273
+#: ../../include/conversation.php:1274
msgid "Allow multiple answers"
msgstr ""
-#: ../../include/conversation.php:1273
-#: ../../view/theme/redbasic/php/config.php:201
-#: ../../view/theme/redbasic/php/config.php:202
-#: ../../view/theme/redbasic/php/config.php:203
-#: ../../view/theme/redbasic/php/config.php:215 ../../boot.php:1765
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:167
-#: ../../Zotlabs/Lib/Libzotdir.php:169 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312
-#: ../../Zotlabs/Storage/Browser.php:393 ../../Zotlabs/Storage/Browser.php:395
-#: ../../Zotlabs/Storage/Browser.php:559 ../../Zotlabs/Module/Menu.php:163
-#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Api.php:101
-#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:674
-#: ../../Zotlabs/Module/Profiles.php:684 ../../Zotlabs/Module/Profiles.php:692
-#: ../../Zotlabs/Module/Profiles.php:696 ../../Zotlabs/Module/Sources.php:122
-#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Group.php:138
-#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
-#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
-#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Import.php:615
-#: ../../Zotlabs/Module/Import.php:616 ../../Zotlabs/Module/Register.php:515
-#: ../../Zotlabs/Module/Defperms.php:195
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Admin/Site.php:306 ../../Zotlabs/Module/Mitem.php:176
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
-#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
-#: ../../Zotlabs/Module/Settings/Channel.php:225
-#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Settings/Privacy.php:138
-#: ../../Zotlabs/Module/Settings/Display.php:87
-#: ../../Zotlabs/Module/Contactedit.php:270
-#: ../../Zotlabs/Module/Contactedit.php:315
-#: ../../extend/addon/hzaddons/cart/cart.php:1418
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:72
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:338
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:362
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:438
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:462
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:153
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:425
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:63
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:254
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:258
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:88
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:98
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:87
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:95
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:67
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:651
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:655
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:61
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:73
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:218
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69
-#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:70
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:45
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92
-msgid "No"
-msgstr ""
-
-#: ../../include/conversation.php:1273
-#: ../../view/theme/redbasic/php/config.php:201
-#: ../../view/theme/redbasic/php/config.php:202
-#: ../../view/theme/redbasic/php/config.php:203
-#: ../../view/theme/redbasic/php/config.php:215 ../../boot.php:1765
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:167
-#: ../../Zotlabs/Lib/Libzotdir.php:169 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312
-#: ../../Zotlabs/Storage/Browser.php:393 ../../Zotlabs/Storage/Browser.php:395
-#: ../../Zotlabs/Storage/Browser.php:559 ../../Zotlabs/Module/Menu.php:163
-#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Api.php:100
-#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:674
-#: ../../Zotlabs/Module/Profiles.php:684 ../../Zotlabs/Module/Profiles.php:692
-#: ../../Zotlabs/Module/Profiles.php:696 ../../Zotlabs/Module/Sources.php:122
-#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Group.php:138
-#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
-#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
-#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Import.php:611
-#: ../../Zotlabs/Module/Import.php:615 ../../Zotlabs/Module/Import.php:616
-#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Defperms.php:195
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Admin/Site.php:308 ../../Zotlabs/Module/Mitem.php:176
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
-#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
-#: ../../Zotlabs/Module/Settings/Channel.php:225
-#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Settings/Privacy.php:138
-#: ../../Zotlabs/Module/Settings/Display.php:87
-#: ../../Zotlabs/Module/Contactedit.php:270
-#: ../../extend/addon/hzaddons/cart/cart.php:1418
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:72
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:337
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:361
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:437
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:461
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:153
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:425
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:63
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:254
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:258
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:88
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:98
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:87
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:95
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:67
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:651
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:655
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:61
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:73
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:218
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69
-#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:70
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:45
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92
-msgid "Yes"
-msgstr ""
-
-#: ../../include/conversation.php:1275
-#: ../../extend/addon/hzaddons/hsse/hsse.php:215
+#: ../../include/conversation.php:1276 ../../addon/hsse/hsse.php:215
msgid "Disable comments"
msgstr ""
-#: ../../include/conversation.php:1276
-#: ../../extend/addon/hzaddons/hsse/hsse.php:216
+#: ../../include/conversation.php:1277 ../../addon/hsse/hsse.php:216
msgid "Toggle comments"
msgstr ""
-#: ../../include/conversation.php:1282 ../../Zotlabs/Module/Editblock.php:129
+#: ../../include/conversation.php:1283 ../../addon/cards/Mod_Card_edit.php:111
+#: ../../addon/articles/Mod_Article_edit.php:111 ../../addon/hsse/hsse.php:221
#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1042
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:116
-#: ../../extend/addon/hzaddons/hsse/hsse.php:221
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:118
+#: ../../Zotlabs/Module/Editblock.php:129
msgid "Title (optional)"
msgstr ""
-#: ../../include/conversation.php:1283
+#: ../../include/conversation.php:1284
msgid "Summary (optional)"
msgstr ""
-#: ../../include/conversation.php:1286
-#: ../../extend/addon/hzaddons/hsse/hsse.php:224
+#: ../../include/conversation.php:1287 ../../addon/hsse/hsse.php:224
msgid "Categories (optional, comma-separated list)"
msgstr ""
-#: ../../include/conversation.php:1287
-#: ../../extend/addon/hzaddons/hsse/hsse.php:225
+#: ../../include/conversation.php:1288 ../../addon/hsse/hsse.php:225
msgid "Permission settings"
msgstr ""
-#: ../../include/conversation.php:1309
-#: ../../extend/addon/hzaddons/hsse/hsse.php:247
+#: ../../include/conversation.php:1310 ../../addon/hsse/hsse.php:247
msgid "Other networks and post services"
msgstr ""
-#: ../../include/conversation.php:1312
-#: ../../extend/addon/hzaddons/hsse/hsse.php:250
+#: ../../include/conversation.php:1313 ../../addon/hsse/hsse.php:250
msgid "Set expiration date"
msgstr ""
-#: ../../include/conversation.php:1315
-#: ../../extend/addon/hzaddons/hsse/hsse.php:253
+#: ../../include/conversation.php:1316 ../../addon/hsse/hsse.php:253
msgid "Set publish date"
msgstr ""
-#: ../../include/conversation.php:1317 ../../Zotlabs/Lib/ThreadItem.php:881
-#: ../../Zotlabs/Module/Chat.php:218
-#: ../../extend/addon/hzaddons/hsse/hsse.php:255
+#: ../../include/conversation.php:1318 ../../addon/hsse/hsse.php:255
+#: ../../Zotlabs/Lib/ThreadItem.php:813 ../../Zotlabs/Module/Chat.php:218
msgid "Encrypt text"
msgstr ""
-#: ../../include/conversation.php:1560 ../../include/taxonomy.php:677
-#: ../../Zotlabs/Module/Photos.php:1129
-msgctxt "noun"
-msgid "Like"
-msgid_plural "Likes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1563
+#: ../../include/conversation.php:1564
msgctxt "noun"
msgid "Repeat"
msgid_plural "Repeats"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1566 ../../Zotlabs/Module/Photos.php:1134
+#: ../../include/conversation.php:1567 ../../Zotlabs/Module/Photos.php:1134
msgctxt "noun"
msgid "Dislike"
msgid_plural "Dislikes"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1569
+#: ../../include/conversation.php:1570
msgctxt "noun"
msgid "Attending"
msgid_plural "Attending"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1572
+#: ../../include/conversation.php:1573
msgctxt "noun"
msgid "Not Attending"
msgid_plural "Not Attending"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1575
+#: ../../include/conversation.php:1576
msgctxt "noun"
msgid "Undecided"
msgid_plural "Undecided"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/text.php:562
-msgid "prev"
+#: ../../include/nav.php:109
+msgid "Remote authentication"
msgstr ""
-#: ../../include/text.php:564
-msgid "first"
+#: ../../include/nav.php:109
+msgid "Click to authenticate to your home hub"
msgstr ""
-#: ../../include/text.php:593
-msgid "last"
+#: ../../include/nav.php:115 ../../Zotlabs/Widget/Channel_activities.php:239
+#: ../../Zotlabs/Widget/Admin.php:29
+#: ../../Zotlabs/Module/Admin/Channels.php:168
+#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:118
+msgid "Channels"
msgstr ""
-#: ../../include/text.php:596
-msgid "next"
+#: ../../include/nav.php:115
+msgid "Manage your channels"
msgstr ""
-#: ../../include/text.php:614
-msgid "older"
+#: ../../include/nav.php:118 ../../Zotlabs/Lib/Apps.php:345
+#: ../../Zotlabs/Widget/Newmember.php:60
+#: ../../Zotlabs/Widget/Settings_menu.php:71
+#: ../../Zotlabs/Module/Admin/Themes.php:141
+#: ../../Zotlabs/Module/Admin/Addons.php:127
+msgid "Settings"
msgstr ""
-#: ../../include/text.php:616
-msgid "newer"
+#: ../../include/nav.php:118
+msgid "Account/Channel Settings"
msgstr ""
-#: ../../include/text.php:1086 ../../Zotlabs/Module/Viewconnections.php:80
-#: ../../Zotlabs/Module/Connections.php:306
-msgid "Accepts"
+#: ../../include/nav.php:124 ../../include/nav.php:154
+#: ../../include/nav.php:175 ../../boot.php:1753
+msgid "Logout"
msgstr ""
-#: ../../include/text.php:1089 ../../Zotlabs/Module/Viewconnections.php:83
-#: ../../Zotlabs/Module/Connections.php:309
-msgid "Comments"
+#: ../../include/nav.php:124 ../../include/nav.php:154
+msgid "End this session"
msgstr ""
-#: ../../include/text.php:1094 ../../Zotlabs/Module/Viewconnections.php:88
-#: ../../Zotlabs/Module/Connections.php:314
-msgid "Stream items"
+#: ../../include/nav.php:127
+msgid "Your profile page"
msgstr ""
-#: ../../include/text.php:1099 ../../Zotlabs/Module/Viewconnections.php:93
-#: ../../Zotlabs/Module/Connections.php:319
-msgid "Wall posts"
+#: ../../include/nav.php:130 ../../include/channel.php:1541
+#: ../../Zotlabs/Module/Profiles.php:851
+msgid "Edit Profiles"
msgstr ""
-#: ../../include/text.php:1103 ../../Zotlabs/Module/Viewconnections.php:97
-#: ../../Zotlabs/Module/Connections.php:323
-msgid "Nothing"
+#: ../../include/nav.php:130
+msgid "Manage/Edit profiles"
msgstr ""
-#: ../../include/text.php:1116
-#, php-format
-msgid "View all %s connections"
+#: ../../include/nav.php:132 ../../include/channel.php:1545
+#: ../../addon/openclipatar/openclipatar.php:59
+msgid "Edit Profile"
msgstr ""
-#: ../../include/text.php:1179
-#, php-format
-msgid "Network: %s"
+#: ../../include/nav.php:132 ../../Zotlabs/Widget/Newmember.php:42
+msgid "Edit your profile"
msgstr ""
-#: ../../include/text.php:1191 ../../include/text.php:1203
-#: ../../Zotlabs/Module/Rbmark.php:29 ../../Zotlabs/Module/Rbmark.php:85
-#: ../../Zotlabs/Module/Filer.php:54
-#: ../../Zotlabs/Module/Admin/Queueworker.php:115
-#: ../../Zotlabs/Module/Admin/Profs.php:95
-#: ../../Zotlabs/Module/Admin/Profs.php:115
-#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:120
-#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:116
-msgid "Save"
+#: ../../include/nav.php:139 ../../include/nav.php:143 ../../boot.php:1754
+#: ../../Zotlabs/Lib/Apps.php:342
+msgid "Login"
msgstr ""
-#: ../../include/text.php:1499 ../../include/js_strings.php:100
-msgid "Monday"
+#: ../../include/nav.php:139 ../../include/nav.php:143
+msgid "Sign in"
msgstr ""
-#: ../../include/text.php:1499 ../../include/js_strings.php:101
-msgid "Tuesday"
+#: ../../include/nav.php:173
+msgid "Take me home"
msgstr ""
-#: ../../include/text.php:1499 ../../include/js_strings.php:102
-msgid "Wednesday"
+#: ../../include/nav.php:175
+msgid "Log me out of this site"
msgstr ""
-#: ../../include/text.php:1499 ../../include/js_strings.php:103
-msgid "Thursday"
+#: ../../include/nav.php:180 ../../boot.php:1731
+#: ../../Zotlabs/Module/Register.php:543
+msgid "Register"
msgstr ""
-#: ../../include/text.php:1499 ../../include/js_strings.php:104
-msgid "Friday"
+#: ../../include/nav.php:180
+msgid "Create an account"
msgstr ""
-#: ../../include/text.php:1499 ../../include/js_strings.php:105
-msgid "Saturday"
+#: ../../include/nav.php:194 ../../include/nav.php:341
+#: ../../Zotlabs/Lib/Apps.php:354 ../../Zotlabs/Module/Layouts.php:184
+msgid "Help"
msgstr ""
-#: ../../include/text.php:1499 ../../include/js_strings.php:99
-msgid "Sunday"
+#: ../../include/nav.php:194
+msgid "Help and documentation"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:75
-msgid "January"
+#: ../../include/nav.php:208 ../../include/acl_selectors.php:149
+#: ../../include/text.php:1190 ../../include/text.php:1202
+#: ../../Zotlabs/Lib/Apps.php:357 ../../Zotlabs/Widget/Sitesearch.php:37
+#: ../../Zotlabs/Widget/Activity_filter.php:210
+#: ../../Zotlabs/Module/Search.php:47 ../../Zotlabs/Module/Connections.php:403
+msgid "Search"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:76
-msgid "February"
+#: ../../include/nav.php:208
+msgid "Search site @name, !forum, #tag, ?docs, content"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:77
-msgid "March"
+#: ../../include/nav.php:214 ../../Zotlabs/Widget/Admin.php:61
+msgid "Admin"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:78
-msgid "April"
+#: ../../include/nav.php:214
+msgid "Site Setup and Configuration"
msgstr ""
-#: ../../include/text.php:1503
-msgid "May"
+#: ../../include/nav.php:345 ../../Zotlabs/Widget/Notifications.php:175
+#: ../../Zotlabs/Widget/Messages.php:50 ../../Zotlabs/Module/Defperms.php:254
+#: ../../Zotlabs/Module/New_channel.php:158
+#: ../../Zotlabs/Module/New_channel.php:165
+msgid "Loading"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:80
-msgid "June"
+#: ../../include/nav.php:350
+msgid "@name, #tag, ?doc, content"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:81
-msgid "July"
+#: ../../include/nav.php:351
+msgid "Please wait..."
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:82
-msgid "August"
+#: ../../include/nav.php:357 ../../Zotlabs/Lib/Apps.php:329
+msgid "Apps"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:83
-msgid "September"
+#: ../../include/nav.php:358
+msgid "Channel Apps"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:84
-msgid "October"
+#: ../../include/nav.php:359
+msgid "System Apps"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:85
-msgid "November"
+#: ../../include/nav.php:360
+msgid "Pinned Apps"
msgstr ""
-#: ../../include/text.php:1503 ../../include/js_strings.php:86
-msgid "December"
+#: ../../include/nav.php:361
+msgid "Featured Apps"
msgstr ""
-#: ../../include/text.php:1577
-msgid "Unknown attachment"
+#: ../../include/nav.php:447 ../../Zotlabs/Lib/Apps.php:349
+#: ../../Zotlabs/Module/Admin/Channels.php:176
+msgid "Channel"
msgstr ""
-#: ../../include/text.php:1580 ../../Zotlabs/Storage/Browser.php:383
-#: ../../Zotlabs/Module/Sharedwithme.php:109
-msgid "Size"
+#: ../../include/nav.php:450
+msgid "Status Messages and Posts"
msgstr ""
-#: ../../include/text.php:1623
-msgid "remove category"
+#: ../../include/nav.php:460 ../../Zotlabs/Module/Help.php:240
+msgid "About"
msgstr ""
-#: ../../include/text.php:1701
-msgid "remove from file"
+#: ../../include/nav.php:463
+msgid "Profile Details"
msgstr ""
-#: ../../include/text.php:1888
-msgid "Download binary/encrypted content"
+#: ../../include/nav.php:473 ../../include/photos.php:747
+msgid "Photo Albums"
msgstr ""
-#: ../../include/text.php:1946 ../../include/text.php:1955
-#: ../../include/text.php:1982 ../../include/text.php:1991
-#, php-format
-msgctxt "noun"
-msgid "%d Vote"
-msgid_plural "%d Votes"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../include/nav.php:478 ../../Zotlabs/Lib/Apps.php:346
+#: ../../Zotlabs/Widget/Notifications.php:108
+#: ../../Zotlabs/Widget/Channel_activities.php:125
+#: ../../Zotlabs/Storage/Browser.php:351 ../../Zotlabs/Module/Fbrowser.php:87
+msgid "Files"
+msgstr ""
-#: ../../include/text.php:1998
-#, php-format
-msgctxt "noun"
-msgid "%d Vote in total"
-msgid_plural "%d Votes in total"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../include/nav.php:481
+msgid "Files and Storage"
+msgstr ""
-#: ../../include/text.php:2004
-msgid "Poll has ended"
+#: ../../include/nav.php:503 ../../include/nav.php:506
+#: ../../Zotlabs/Lib/Apps.php:336 ../../Zotlabs/Widget/Chatroom_list.php:22
+msgid "Chatrooms"
msgstr ""
-#: ../../include/text.php:2007
-#, php-format
-msgid "Poll ends in %s"
+#: ../../include/nav.php:516 ../../Zotlabs/Lib/Apps.php:335
+#: ../../Zotlabs/Module/Bookmarks.php:90
+msgid "Bookmarks"
msgstr ""
-#: ../../include/text.php:2014 ../../Zotlabs/Lib/ThreadItem.php:471
-msgid "Vote"
+#: ../../include/nav.php:519
+msgid "Saved Bookmarks"
msgstr ""
-#: ../../include/text.php:2174
-msgid "Link to Source"
+#: ../../include/nav.php:527 ../../Zotlabs/Lib/Apps.php:347
+#: ../../Zotlabs/Widget/Channel_activities.php:168
+#: ../../Zotlabs/Module/Webpages.php:246
+msgid "Webpages"
msgstr ""
-#: ../../include/text.php:2207
-msgid "Page layout"
+#: ../../include/nav.php:530
+msgid "View Webpages"
msgstr ""
-#: ../../include/text.php:2207
-msgid "You can create your own with the layouts tool"
+#: ../../include/security.php:633
+msgid ""
+"The form security token was not correct. This probably happened because the "
+"form has been opened for too long (>3 hours) before submitting it."
msgstr ""
-#: ../../include/text.php:2217
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:368
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68
-msgid "BBcode"
+#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:58
+#: ../../Zotlabs/Module/Profiles.php:751
+msgid "Miscellaneous"
msgstr ""
-#: ../../include/text.php:2218
-msgid "HTML"
+#: ../../include/datetime.php:140
+msgid "Birthday"
msgstr ""
-#: ../../include/text.php:2219
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:368
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68
-#: ../../extend/addon/hzaddons/mdpost/mdpost.php:41
-msgid "Markdown"
+#: ../../include/datetime.php:140
+msgid "Age: "
msgstr ""
-#: ../../include/text.php:2220
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68
-msgid "Text"
+#: ../../include/datetime.php:140
+msgid "YYYY-MM-DD or MM-DD"
msgstr ""
-#: ../../include/text.php:2221
-msgid "Comanche Layout"
+#: ../../include/datetime.php:238 ../../boot.php:2768
+msgid "never"
msgstr ""
-#: ../../include/text.php:2226
-msgid "PHP"
+#: ../../include/datetime.php:244
+msgid "less than a second ago"
msgstr ""
-#: ../../include/text.php:2238
-msgid "Page content type"
+#: ../../include/datetime.php:262
+#, php-format
+msgctxt "e.g. 22 hours ago, 1 minute ago"
+msgid "%1$d %2$s ago"
msgstr ""
-#: ../../include/text.php:2371
-msgid "activity"
+#: ../../include/datetime.php:284
+msgid "ago"
msgstr ""
-#: ../../include/text.php:2374
-msgid "poll"
+#: ../../include/datetime.php:287
+msgid "in"
msgstr ""
-#: ../../include/text.php:2487
-msgid "a-z, 0-9, -, and _ only"
+#: ../../include/datetime.php:304
+msgid "now"
msgstr ""
-#: ../../include/text.php:2795
-msgid "Design Tools"
+#: ../../include/datetime.php:312
+msgctxt "relative_date"
+msgid "year"
+msgid_plural "years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/datetime.php:315
+msgctxt "relative_date"
+msgid "month"
+msgid_plural "months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/datetime.php:318
+msgctxt "relative_date"
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/datetime.php:321
+msgctxt "relative_date"
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/datetime.php:324
+msgctxt "relative_date"
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/datetime.php:327
+msgctxt "relative_date"
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/datetime.php:330
+msgctxt "relative_date"
+msgid "second"
+msgid_plural "seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/datetime.php:559
+#, php-format
+msgid "%1$s's birthday"
msgstr ""
-#: ../../include/text.php:2798 ../../Zotlabs/Module/Blocks.php:152
-msgid "Blocks"
+#: ../../include/datetime.php:560
+#, php-format
+msgid "Happy Birthday %1$s"
msgstr ""
-#: ../../include/text.php:2799 ../../Zotlabs/Module/Menu.php:171
-msgid "Menus"
+#: ../../include/photos.php:154
+#, php-format
+msgid "Image exceeds website size limit of %lu bytes"
msgstr ""
-#: ../../include/text.php:2800 ../../Zotlabs/Module/Layouts.php:182
-msgid "Layouts"
+#: ../../include/photos.php:165
+msgid "Image file is empty."
msgstr ""
-#: ../../include/text.php:2801
-msgid "Pages"
+#: ../../include/photos.php:199 ../../Zotlabs/Module/Cover_photo.php:240
+#: ../../Zotlabs/Module/Profile_photo.php:275
+msgid "Unable to process image"
msgstr ""
-#: ../../include/text.php:2813
-msgid "Import"
+#: ../../include/photos.php:325
+msgid "Photo storage failed."
msgstr ""
-#: ../../include/text.php:2814
-msgid "Import website..."
+#: ../../include/photos.php:374
+msgid "a new photo"
msgstr ""
-#: ../../include/text.php:2815
-msgid "Select folder to import"
+#: ../../include/photos.php:378
+#, php-format
+msgctxt "photo_upload"
+msgid "%1$s posted %2$s to %3$s"
msgstr ""
-#: ../../include/text.php:2816
-msgid "Import from a zipped folder:"
+#: ../../include/photos.php:748 ../../Zotlabs/Module/Photos.php:1339
+#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1353
+msgid "Recent Photos"
msgstr ""
-#: ../../include/text.php:2817
-msgid "Import from cloud files:"
+#: ../../include/photos.php:752
+msgid "Upload New Photos"
msgstr ""
-#: ../../include/text.php:2818
-msgid "/cloud/channel/path/to/folder"
+#: ../../include/connections.php:174
+msgid "New window"
msgstr ""
-#: ../../include/text.php:2819
-msgid "Enter path to website files"
+#: ../../include/connections.php:175
+msgid "Open the selected location in a different window or browser tab"
msgstr ""
-#: ../../include/text.php:2820
-msgid "Select folder"
+#: ../../include/network.php:414
+msgid "url: "
msgstr ""
-#: ../../include/text.php:2821
-msgid "Export website..."
+#: ../../include/network.php:415
+msgid "error_code: "
msgstr ""
-#: ../../include/text.php:2822
-msgid "Export to a zip file"
+#: ../../include/network.php:416
+msgid "error_string: "
msgstr ""
-#: ../../include/text.php:2823
-msgid "website.zip"
+#: ../../include/network.php:417
+msgid "content-type: "
msgstr ""
-#: ../../include/text.php:2824
-msgid "Enter a name for the zip file."
+#: ../../include/network.php:1775 ../../include/network.php:1776
+msgid "Friendica"
msgstr ""
-#: ../../include/text.php:2825
-msgid "Export to cloud files"
+#: ../../include/network.php:1777
+msgid "OStatus"
msgstr ""
-#: ../../include/text.php:2826
-msgid "/path/to/export/folder"
+#: ../../include/network.php:1778
+msgid "GNU-Social"
msgstr ""
-#: ../../include/text.php:2827
-msgid "Enter a path to a cloud files destination."
+#: ../../include/network.php:1779
+msgid "RSS/Atom"
msgstr ""
-#: ../../include/text.php:2828
-msgid "Specify folder"
+#: ../../include/network.php:1780
+msgid "ActivityPub"
msgstr ""
-#: ../../include/text.php:3520 ../../view/theme/redbasic/php/config.php:18
-#: ../../Zotlabs/Module/Admin/Site.php:232
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:335
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:359
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:435
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:459
-msgid "Default"
+#: ../../include/network.php:1781 ../../addon/openid/MysqlProvider.php:56
+#: ../../addon/openid/MysqlProvider.php:57 ../../addon/redred/Mod_Redred.php:69
+#: ../../addon/rtof/Mod_Rtof.php:55 ../../Zotlabs/Module/Connedit.php:736
+#: ../../Zotlabs/Module/Admin/Accounts.php:216
+#: ../../Zotlabs/Module/Admin/Accounts.php:230
+#: ../../Zotlabs/Module/Cdav.php:1372
+msgid "Email"
msgstr ""
-#: ../../include/oembed.php:155
-msgid "View PDF"
+#: ../../include/network.php:1782
+msgid "Diaspora"
msgstr ""
-#: ../../include/oembed.php:390
-msgid " by "
+#: ../../include/network.php:1783
+msgid "Facebook"
msgstr ""
-#: ../../include/oembed.php:391
-msgid " on "
+#: ../../include/network.php:1784
+msgid "Zot"
msgstr ""
-#: ../../include/oembed.php:424
-msgid "Embedded content"
+#: ../../include/network.php:1785
+msgid "LinkedIn"
msgstr ""
-#: ../../include/oembed.php:433
-msgid "Embedding disabled"
+#: ../../include/network.php:1786
+msgid "XMPP/IM"
msgstr ""
-#: ../../include/js_strings.php:5
-msgid "Delete this item?"
+#: ../../include/network.php:1787
+msgid "MySpace"
msgstr ""
-#: ../../include/js_strings.php:6 ../../Zotlabs/Module/Moderate.php:78
-msgid "Item deleted"
+#: ../../include/markdown.php:190 ../../include/bbcode.php:576
+#, php-format
+msgid "%1$s wrote the following %2$s %3$s"
msgstr ""
-#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:867
-#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Module/Photos.php:1207
-msgid "Comment"
+#: ../../include/markdown.php:262 ../../include/bbcode.php:661
+msgid "spoiler"
msgstr ""
-#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:576
-msgid "show all"
+#: ../../include/language.php:423 ../../include/text.php:2197
+msgid "default"
msgstr ""
-#: ../../include/js_strings.php:9
-msgid "show less"
+#: ../../include/language.php:436
+msgid "Select an alternate language"
msgstr ""
-#: ../../include/js_strings.php:10
-msgid "expand"
+#: ../../include/menu.php:120 ../../include/channel.php:1541
+#: ../../include/channel.php:1545 ../../addon/cards/cards.php:74
+#: ../../addon/articles/articles.php:75 ../../addon/wiki/Mod_Wiki.php:214
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:617
+#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Widget/Cdav.php:144
+#: ../../Zotlabs/Widget/Cdav.php:181 ../../Zotlabs/Module/Editwebpage.php:142
+#: ../../Zotlabs/Module/Webpages.php:249 ../../Zotlabs/Module/Oauth.php:171
+#: ../../Zotlabs/Module/Thing.php:301 ../../Zotlabs/Module/Layouts.php:191
+#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:176
+#: ../../Zotlabs/Module/Group.php:246 ../../Zotlabs/Module/Blocks.php:158
+#: ../../Zotlabs/Module/Editlayout.php:114
+#: ../../Zotlabs/Module/Connections.php:338
+#: ../../Zotlabs/Module/Connections.php:387
+#: ../../Zotlabs/Module/Connections.php:408 ../../Zotlabs/Module/Oauth2.php:192
+#: ../../Zotlabs/Module/Editblock.php:114
+msgid "Edit"
msgstr ""
-#: ../../include/js_strings.php:11
-msgid "collapse"
+#: ../../include/acl_selectors.php:33
+#: ../../Zotlabs/Lib/PermissionDescription.php:34
+msgid "Visible to your default audience"
msgstr ""
-#: ../../include/js_strings.php:12
-msgid "Password too short"
+#: ../../include/acl_selectors.php:100
+msgid "Profile-Based Privacy Groups"
msgstr ""
-#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:162
-msgid "Passwords do not match"
+#: ../../include/acl_selectors.php:119
+msgid "Private Forum"
msgstr ""
-#: ../../include/js_strings.php:14
-msgid "everybody"
+#: ../../include/acl_selectors.php:125
+#: ../../Zotlabs/Widget/Notifications.php:131
+#: ../../Zotlabs/Widget/Notifications.php:132
+#: ../../Zotlabs/Widget/Activity_filter.php:130
+#: ../../Zotlabs/Widget/Forums.php:77
+msgid "Forums"
msgstr ""
-#: ../../include/js_strings.php:15
-msgid "Secret Passphrase"
+#: ../../include/acl_selectors.php:136
+#: ../../Zotlabs/Lib/PermissionDescription.php:107
+#: ../../Zotlabs/Module/Settings/Privacy.php:66
+msgid "Only me"
msgstr ""
-#: ../../include/js_strings.php:16
-msgid "Passphrase hint"
+#: ../../include/acl_selectors.php:143
+msgid "Share with"
msgstr ""
-#: ../../include/js_strings.php:17
-msgid "Notice: Permissions have changed but have not yet been submitted."
+#: ../../include/acl_selectors.php:144
+msgid "Custom selection"
msgstr ""
-#: ../../include/js_strings.php:18
-msgid "close all"
+#: ../../include/acl_selectors.php:146
+msgid ""
+"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
+"limit the scope of \"Allow\"."
msgstr ""
-#: ../../include/js_strings.php:19
-msgid "Nothing new here"
+#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
+msgid "Allow"
msgstr ""
-#: ../../include/js_strings.php:20
-msgid "Rate This Channel (this is public)"
+#: ../../include/acl_selectors.php:148
+msgid "Don't allow"
msgstr ""
-#: ../../include/js_strings.php:21
-msgid "Rating"
+#: ../../include/acl_selectors.php:154
+#: ../../addon/flashcards/Mod_Flashcards.php:261
+#: ../../Zotlabs/Module/Thing.php:357 ../../Zotlabs/Module/Thing.php:407
+#: ../../Zotlabs/Module/Filestorage.php:195 ../../Zotlabs/Module/Photos.php:671
+#: ../../Zotlabs/Module/Photos.php:1045 ../../Zotlabs/Module/Chat.php:240
+msgid "Permissions"
msgstr ""
-#: ../../include/js_strings.php:22
-msgid "Describe (optional)"
+#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:470
+#: ../../Zotlabs/Widget/Pinned.php:153 ../../Zotlabs/Storage/Browser.php:414
+#: ../../Zotlabs/Module/Photos.php:1266
+msgid "Close"
msgstr ""
-#: ../../include/js_strings.php:23 ../../view/theme/redbasic/php/config.php:188
-#: ../../Zotlabs/Lib/ThreadItem.php:868 ../../Zotlabs/Storage/Browser.php:386
-#: ../../Zotlabs/Module/Import_items.php:125 ../../Zotlabs/Module/Setup.php:319
-#: ../../Zotlabs/Module/Setup.php:359 ../../Zotlabs/Module/Regate.php:408
-#: ../../Zotlabs/Module/Photos.php:1056 ../../Zotlabs/Module/Photos.php:1095
-#: ../../Zotlabs/Module/Photos.php:1208 ../../Zotlabs/Module/Oauth.php:109
-#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Profiles.php:738
-#: ../../Zotlabs/Module/Invite.php:564 ../../Zotlabs/Module/Sources.php:123
-#: ../../Zotlabs/Module/Sources.php:160 ../../Zotlabs/Module/Group.php:151
-#: ../../Zotlabs/Module/Group.php:160 ../../Zotlabs/Module/Oauth2.php:114
-#: ../../Zotlabs/Module/Chat.php:208 ../../Zotlabs/Module/Chat.php:247
-#: ../../Zotlabs/Module/Appman.php:230 ../../Zotlabs/Module/Connedit.php:714
-#: ../../Zotlabs/Module/Import.php:622 ../../Zotlabs/Module/Pconfig.php:117
-#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Thing.php:357
-#: ../../Zotlabs/Module/Thing.php:409 ../../Zotlabs/Module/Defperms.php:262
-#: ../../Zotlabs/Module/Locs.php:125 ../../Zotlabs/Module/Connect.php:107
-#: ../../Zotlabs/Module/Affinity.php:84
-#: ../../Zotlabs/Module/Filestorage.php:208
-#: ../../Zotlabs/Module/Pdledit.php:137 ../../Zotlabs/Module/Admin/Site.php:402
-#: ../../Zotlabs/Module/Admin/Accounts.php:309
-#: ../../Zotlabs/Module/Admin/Account_edit.php:73
-#: ../../Zotlabs/Module/Admin/Security.php:130
-#: ../../Zotlabs/Module/Admin/Channels.php:169
-#: ../../Zotlabs/Module/Admin/Features.php:66
-#: ../../Zotlabs/Module/Admin/Addons.php:446
-#: ../../Zotlabs/Module/Admin/Profs.php:179
-#: ../../Zotlabs/Module/Admin/Themes.php:174
-#: ../../Zotlabs/Module/Admin/Logs.php:85 ../../Zotlabs/Module/Mitem.php:259
-#: ../../Zotlabs/Module/Email_validation.php:41
-#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Permcats.php:257
-#: ../../Zotlabs/Module/Settings/Channel.php:230
-#: ../../Zotlabs/Module/Settings/Editor.php:42
-#: ../../Zotlabs/Module/Settings/Photos.php:42
-#: ../../Zotlabs/Module/Settings/Profiles.php:52
-#: ../../Zotlabs/Module/Settings/Network.php:62
-#: ../../Zotlabs/Module/Settings/Directory.php:42
-#: ../../Zotlabs/Module/Settings/Channel_home.php:91
-#: ../../Zotlabs/Module/Settings/Calendar.php:42
-#: ../../Zotlabs/Module/Settings/Conversation.php:44
-#: ../../Zotlabs/Module/Settings/Features.php:48
-#: ../../Zotlabs/Module/Settings/Connections.php:42
-#: ../../Zotlabs/Module/Settings/Multifactor.php:85
-#: ../../Zotlabs/Module/Settings/Events.php:42
-#: ../../Zotlabs/Module/Settings/Account.php:109
-#: ../../Zotlabs/Module/Settings/Privacy.php:123
-#: ../../Zotlabs/Module/Settings/Display.php:188
-#: ../../Zotlabs/Module/Settings/Manage.php:43
-#: ../../Zotlabs/Module/Contactedit.php:415
-#: ../../Zotlabs/Module/Contactedit.php:448
-#: ../../extend/addon/hzaddons/cart/cart.php:1424
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:312
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:412
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:410
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:248
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:645
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:132
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:142
-#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:86
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:147
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:341
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:113
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:54
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:191
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:249
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:304
-#: ../../extend/addon/hzaddons/statusnet/statusnet.php:602
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:80
-#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:52
-#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:51
-#: ../../extend/addon/hzaddons/likebanner/likebanner.php:57
-#: ../../extend/addon/hzaddons/piwik/piwik.php:95
-#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:71
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:182
-#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:54
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:101
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:90
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:136
-#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:49
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:78
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:140
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:70
-#: ../../extend/addon/hzaddons/redfiles/redfiles.php:124
-#: ../../extend/addon/hzaddons/mailtest/mailtest.php:100
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:88
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1490
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1549
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1668
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2786
-#: ../../extend/addon/hzaddons/workflow/Settings/Mod_WorkflowSettings.php:94
-#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:59
-#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:63
-#: ../../extend/addon/hzaddons/logrot/logrot.php:35
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:70
-#: ../../extend/addon/hzaddons/faces/Mod_Faces.php:141
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:218
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:907
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:72
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:68
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:96
-#: ../../extend/addon/hzaddons/irc/irc.php:45
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:61
-#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:269
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:72
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:107
-msgid "Submit"
+#: ../../include/acl_selectors.php:181
+#, php-format
+msgid ""
+"Post permissions %s cannot be changed %s after a post is shared.</br />These "
+"permissions set who is allowed to view the post."
msgstr ""
-#: ../../include/js_strings.php:24
-msgid "Please enter a link URL"
+#: ../../include/text.php:562
+msgid "prev"
msgstr ""
-#: ../../include/js_strings.php:25
-msgid "Unsaved changes. Are you sure you wish to leave this page?"
+#: ../../include/text.php:564
+msgid "first"
msgstr ""
-#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Profiles.php:476
-#: ../../Zotlabs/Module/Profiles.php:749 ../../Zotlabs/Module/Pubsites.php:55
-#: ../../Zotlabs/Module/Locs.php:121 ../../Zotlabs/Module/Cdav.php:1006
-msgid "Location"
+#: ../../include/text.php:593
+msgid "last"
msgstr ""
-#: ../../include/js_strings.php:27
-msgid "lovely"
+#: ../../include/text.php:596
+msgid "next"
msgstr ""
-#: ../../include/js_strings.php:28
-msgid "wonderful"
+#: ../../include/text.php:614
+msgid "older"
msgstr ""
-#: ../../include/js_strings.php:29
-msgid "fantastic"
+#: ../../include/text.php:616
+msgid "newer"
msgstr ""
-#: ../../include/js_strings.php:30
-msgid "great"
+#: ../../include/text.php:1086 ../../Zotlabs/Module/Viewconnections.php:80
+#: ../../Zotlabs/Module/Connections.php:306
+msgid "Accepts"
msgstr ""
-#: ../../include/js_strings.php:31
-msgid ""
-"Your chosen nickname was either already taken or not valid. Please use our "
-"suggestion ("
+#: ../../include/text.php:1089 ../../Zotlabs/Module/Viewconnections.php:83
+#: ../../Zotlabs/Module/Connections.php:309
+msgid "Comments"
msgstr ""
-#: ../../include/js_strings.php:32
-msgid ") or enter a new one."
+#: ../../include/text.php:1094 ../../Zotlabs/Module/Viewconnections.php:88
+#: ../../Zotlabs/Module/Connections.php:314
+msgid "Stream items"
msgstr ""
-#: ../../include/js_strings.php:33
-msgid "Thank you, this nickname is valid."
+#: ../../include/text.php:1099 ../../Zotlabs/Module/Viewconnections.php:93
+#: ../../Zotlabs/Module/Connections.php:319
+msgid "Wall posts"
msgstr ""
-#: ../../include/js_strings.php:34
-msgid "A channel name is required."
+#: ../../include/text.php:1103 ../../Zotlabs/Module/Viewconnections.php:97
+#: ../../Zotlabs/Module/Connections.php:323
+msgid "Nothing"
msgstr ""
-#: ../../include/js_strings.php:35
-msgid "This is a "
+#: ../../include/text.php:1116
+#, php-format
+msgid "View all %s connections"
msgstr ""
-#: ../../include/js_strings.php:36
-msgid " channel name"
+#: ../../include/text.php:1179
+#, php-format
+msgid "Network: %s"
msgstr ""
-#: ../../include/js_strings.php:37
-msgid "Back to reply"
+#: ../../include/text.php:1191 ../../include/text.php:1203
+#: ../../addon/cards/Mod_Cards.php:116 ../../addon/cards/Mod_Card_edit.php:92
+#: ../../addon/articles/Mod_Article_edit.php:92
+#: ../../addon/articles/Mod_Articles.php:120
+#: ../../Zotlabs/Module/Admin/Queueworker.php:115
+#: ../../Zotlabs/Module/Admin/Profs.php:95
+#: ../../Zotlabs/Module/Admin/Profs.php:115 ../../Zotlabs/Module/Rbmark.php:29
+#: ../../Zotlabs/Module/Rbmark.php:85 ../../Zotlabs/Module/Filer.php:65
+msgid "Save"
msgstr ""
-#: ../../include/js_strings.php:38
-msgid "Pinned"
+#: ../../include/text.php:1503
+msgid "May"
msgstr ""
-#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:498
-msgid "Pin to the top"
+#: ../../include/text.php:1577
+msgid "Unknown attachment"
msgstr ""
-#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:498
-#: ../../Zotlabs/Widget/Pinned.php:151
-msgid "Unpin from the top"
+#: ../../include/text.php:1580 ../../Zotlabs/Storage/Browser.php:383
+#: ../../Zotlabs/Module/Sharedwithme.php:109
+msgid "Size"
msgstr ""
-#: ../../include/js_strings.php:46
-#, php-format
-msgid "%d minutes"
-msgid_plural "%d minutes"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../include/text.php:1621
+msgid "remove category"
+msgstr ""
-#: ../../include/js_strings.php:47
-#, php-format
-msgid "about %d hours"
-msgid_plural "about %d hours"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../include/text.php:1699
+msgid "remove from file"
+msgstr ""
-#: ../../include/js_strings.php:48
-#, php-format
-msgid "%d days"
-msgid_plural "%d days"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../include/text.php:1886
+msgid "Download binary/encrypted content"
+msgstr ""
-#: ../../include/js_strings.php:49
+#: ../../include/text.php:1944 ../../include/text.php:1953
+#: ../../include/text.php:1980 ../../include/text.php:1989
#, php-format
-msgid "%d months"
-msgid_plural "%d months"
+msgctxt "noun"
+msgid "%d Vote"
+msgid_plural "%d Votes"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/js_strings.php:50
+#: ../../include/text.php:1996
#, php-format
-msgid "%d years"
-msgid_plural "%d years"
+msgctxt "noun"
+msgid "%d Vote in total"
+msgid_plural "%d Votes in total"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/js_strings.php:55
-msgid "timeago.prefixAgo"
-msgstr ""
-
-#: ../../include/js_strings.php:56
-msgid "timeago.prefixFromNow"
-msgstr ""
-
-#: ../../include/js_strings.php:57
-msgid "timeago.suffixAgo"
+#: ../../include/text.php:2002
+msgid "Poll has ended"
msgstr ""
-#: ../../include/js_strings.php:58
-msgid "timeago.suffixFromNow"
+#: ../../include/text.php:2005
+#, php-format
+msgid "Poll ends in %s"
msgstr ""
-#: ../../include/js_strings.php:61
-msgid "less than a minute"
+#: ../../include/text.php:2012 ../../Zotlabs/Lib/ThreadItem.php:430
+msgid "Vote"
msgstr ""
-#: ../../include/js_strings.php:62
-msgid "about a minute"
+#: ../../include/text.php:2172
+msgid "Link to Source"
msgstr ""
-#: ../../include/js_strings.php:64
-msgid "about an hour"
+#: ../../include/text.php:2205
+msgid "Page layout"
msgstr ""
-#: ../../include/js_strings.php:66
-msgid "a day"
+#: ../../include/text.php:2205
+msgid "You can create your own with the layouts tool"
msgstr ""
-#: ../../include/js_strings.php:68
-msgid "about a month"
+#: ../../include/text.php:2215 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
+#: ../../addon/wiki/Widget/Wiki_pages.php:68
+msgid "BBcode"
msgstr ""
-#: ../../include/js_strings.php:70
-msgid "about a year"
+#: ../../include/text.php:2216
+msgid "HTML"
msgstr ""
-#: ../../include/js_strings.php:72
-msgid " "
+#: ../../include/text.php:2217 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
+#: ../../addon/wiki/Widget/Wiki_pages.php:68 ../../addon/mdpost/mdpost.php:41
+msgid "Markdown"
msgstr ""
-#: ../../include/js_strings.php:73
-msgid "timeago.numbers"
+#: ../../include/text.php:2218 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:68
+msgid "Text"
msgstr ""
-#: ../../include/js_strings.php:79
-msgctxt "long"
-msgid "May"
+#: ../../include/text.php:2219
+msgid "Comanche Layout"
msgstr ""
-#: ../../include/js_strings.php:87
-msgid "Jan"
+#: ../../include/text.php:2224
+msgid "PHP"
msgstr ""
-#: ../../include/js_strings.php:88
-msgid "Feb"
+#: ../../include/text.php:2236
+msgid "Page content type"
msgstr ""
-#: ../../include/js_strings.php:89
-msgid "Mar"
+#: ../../include/text.php:2369
+msgid "activity"
msgstr ""
-#: ../../include/js_strings.php:90
-msgid "Apr"
+#: ../../include/text.php:2372
+msgid "poll"
msgstr ""
-#: ../../include/js_strings.php:91
-msgctxt "short"
-msgid "May"
+#: ../../include/text.php:2485
+msgid "a-z, 0-9, -, and _ only"
msgstr ""
-#: ../../include/js_strings.php:92
-msgid "Jun"
+#: ../../include/text.php:2793
+msgid "Design Tools"
msgstr ""
-#: ../../include/js_strings.php:93
-msgid "Jul"
+#: ../../include/text.php:2796 ../../Zotlabs/Module/Blocks.php:152
+msgid "Blocks"
msgstr ""
-#: ../../include/js_strings.php:94
-msgid "Aug"
+#: ../../include/text.php:2797 ../../Zotlabs/Module/Menu.php:171
+msgid "Menus"
msgstr ""
-#: ../../include/js_strings.php:95
-msgid "Sep"
+#: ../../include/text.php:2798 ../../Zotlabs/Module/Layouts.php:182
+msgid "Layouts"
msgstr ""
-#: ../../include/js_strings.php:96
-msgid "Oct"
+#: ../../include/text.php:2799
+msgid "Pages"
msgstr ""
-#: ../../include/js_strings.php:97
-msgid "Nov"
+#: ../../include/text.php:2811
+msgid "Import"
msgstr ""
-#: ../../include/js_strings.php:98
-msgid "Dec"
+#: ../../include/text.php:2812
+msgid "Import website..."
msgstr ""
-#: ../../include/js_strings.php:106
-msgid "Sun"
+#: ../../include/text.php:2813
+msgid "Select folder to import"
msgstr ""
-#: ../../include/js_strings.php:107
-msgid "Mon"
+#: ../../include/text.php:2814
+msgid "Import from a zipped folder:"
msgstr ""
-#: ../../include/js_strings.php:108
-msgid "Tue"
+#: ../../include/text.php:2815
+msgid "Import from cloud files:"
msgstr ""
-#: ../../include/js_strings.php:109
-msgid "Wed"
+#: ../../include/text.php:2816
+msgid "/cloud/channel/path/to/folder"
msgstr ""
-#: ../../include/js_strings.php:110
-msgid "Thu"
+#: ../../include/text.php:2817
+msgid "Enter path to website files"
msgstr ""
-#: ../../include/js_strings.php:111
-msgid "Fri"
+#: ../../include/text.php:2818
+msgid "Select folder"
msgstr ""
-#: ../../include/js_strings.php:112
-msgid "Sat"
+#: ../../include/text.php:2819
+msgid "Export website..."
msgstr ""
-#: ../../include/js_strings.php:113
-msgctxt "calendar"
-msgid "today"
+#: ../../include/text.php:2820
+msgid "Export to a zip file"
msgstr ""
-#: ../../include/js_strings.php:114
-msgctxt "calendar"
-msgid "month"
+#: ../../include/text.php:2821
+msgid "website.zip"
msgstr ""
-#: ../../include/js_strings.php:115
-msgctxt "calendar"
-msgid "week"
+#: ../../include/text.php:2822
+msgid "Enter a name for the zip file."
msgstr ""
-#: ../../include/js_strings.php:116
-msgctxt "calendar"
-msgid "day"
+#: ../../include/text.php:2823
+msgid "Export to cloud files"
msgstr ""
-#: ../../include/js_strings.php:117
-msgctxt "calendar"
-msgid "All day"
+#: ../../include/text.php:2824
+msgid "/path/to/export/folder"
msgstr ""
-#: ../../include/js_strings.php:120
-msgid "Please stand by while your download is being prepared."
+#: ../../include/text.php:2825
+msgid "Enter a path to a cloud files destination."
msgstr ""
-#: ../../include/js_strings.php:123
-msgid "Email address not valid"
+#: ../../include/text.php:2826
+msgid "Specify folder"
msgstr ""
#: ../../include/channel.php:50
@@ -3045,5492 +3502,5385 @@ msgstr ""
msgid "Name too long"
msgstr ""
-#: ../../include/channel.php:203
+#: ../../include/channel.php:205
msgid "No account identifier"
msgstr ""
-#: ../../include/channel.php:215 ../../Zotlabs/Module/Register.php:96
+#: ../../include/channel.php:217 ../../Zotlabs/Module/Register.php:96
msgid "Nickname is required."
msgstr ""
-#: ../../include/channel.php:229 ../../include/channel.php:668
+#: ../../include/channel.php:231 ../../include/channel.php:670
#: ../../Zotlabs/Module/Register.php:101 ../../Zotlabs/Module/Changeaddr.php:46
msgid "Reserved nickname. Please choose another."
msgstr ""
-#: ../../include/channel.php:234 ../../include/channel.php:673
+#: ../../include/channel.php:236 ../../include/channel.php:675
#: ../../Zotlabs/Module/Register.php:106 ../../Zotlabs/Module/Changeaddr.php:51
msgid ""
"Nickname has unsupported characters or is already being used on this site."
msgstr ""
-#: ../../include/channel.php:300
+#: ../../include/channel.php:302
msgid "Unable to retrieve created identity"
msgstr ""
-#: ../../include/channel.php:411
+#: ../../include/channel.php:413
msgid "Default Profile"
msgstr ""
-#: ../../include/channel.php:465 ../../include/channel.php:468
-#: ../../include/selectors.php:138 ../../Zotlabs/Module/Connedit.php:581
-#: ../../Zotlabs/Module/Contactedit.php:283
-#: ../../Zotlabs/Widget/Affinity.php:38
-msgid "Friends"
-msgstr ""
-
-#: ../../include/channel.php:601 ../../include/channel.php:690
+#: ../../include/channel.php:603 ../../include/channel.php:692
msgid "Unable to retrieve modified identity"
msgstr ""
-#: ../../include/channel.php:1382
+#: ../../include/channel.php:1384
msgid "Requested channel is not available"
msgstr ""
-#: ../../include/channel.php:1436 ../../Zotlabs/Module/Menu.php:92
-#: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Editlayout.php:31
-#: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Achievements.php:15
-#: ../../Zotlabs/Module/Editwebpage.php:32 ../../Zotlabs/Module/Hcard.php:12
-#: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Webpages.php:39
+#: ../../include/channel.php:1438 ../../addon/cards/Mod_Cards.php:42
+#: ../../addon/articles/Mod_Articles.php:46
+#: ../../addon/gallery/Mod_Gallery.php:49
+#: ../../Zotlabs/Module/Editwebpage.php:32 ../../Zotlabs/Module/Webpages.php:39
#: ../../Zotlabs/Module/Connect.php:17 ../../Zotlabs/Module/Filestorage.php:59
-#: ../../Zotlabs/Module/Profile.php:27
-#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:46
-#: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:49
-#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:42
+#: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Layouts.php:31
+#: ../../Zotlabs/Module/Menu.php:92 ../../Zotlabs/Module/Blocks.php:33
+#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Profile.php:27
+#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Editblock.php:31
msgid "Requested profile is not available."
msgstr ""
-#: ../../include/channel.php:1532 ../../Zotlabs/Module/Profiles.php:743
+#: ../../include/channel.php:1534 ../../Zotlabs/Module/Profiles.php:743
msgid "Change profile photo"
msgstr ""
-#: ../../include/channel.php:1539 ../../include/channel.php:1543
-#: ../../include/menu.php:120 ../../Zotlabs/Lib/Apps.php:617
-#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Module/Menu.php:176
-#: ../../Zotlabs/Module/Editblock.php:114
-#: ../../Zotlabs/Module/Editlayout.php:114 ../../Zotlabs/Module/Oauth.php:171
-#: ../../Zotlabs/Module/Group.php:246 ../../Zotlabs/Module/Layouts.php:191
-#: ../../Zotlabs/Module/Oauth2.php:192 ../../Zotlabs/Module/Editwebpage.php:142
-#: ../../Zotlabs/Module/Thing.php:294 ../../Zotlabs/Module/Blocks.php:158
-#: ../../Zotlabs/Module/Webpages.php:250
-#: ../../Zotlabs/Module/Connections.php:338
-#: ../../Zotlabs/Module/Connections.php:387
-#: ../../Zotlabs/Module/Connections.php:408
-#: ../../Zotlabs/Module/Admin/Profs.php:176 ../../Zotlabs/Widget/Cdav.php:144
-#: ../../Zotlabs/Widget/Cdav.php:181
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:97
-#: ../../extend/addon/hzaddons/articles/articles.php:75
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:214
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:381
-#: ../../extend/addon/hzaddons/cards/cards.php:74
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:99
-msgid "Edit"
-msgstr ""
-
-#: ../../include/channel.php:1540
+#: ../../include/channel.php:1542
msgid "Create New Profile"
msgstr ""
-#: ../../include/channel.php:1558 ../../Zotlabs/Module/Profiles.php:841
+#: ../../include/channel.php:1560 ../../Zotlabs/Module/Profiles.php:841
msgid "Profile Image"
msgstr ""
-#: ../../include/channel.php:1561
+#: ../../include/channel.php:1563
msgid "Visible to everybody"
msgstr ""
-#: ../../include/channel.php:1562 ../../Zotlabs/Module/Profiles.php:740
+#: ../../include/channel.php:1564 ../../Zotlabs/Module/Profiles.php:740
#: ../../Zotlabs/Module/Profiles.php:845
msgid "Edit visibility"
msgstr ""
-#: ../../include/channel.php:1644 ../../include/channel.php:1772
+#: ../../include/channel.php:1646 ../../include/channel.php:1774
msgid "Gender:"
msgstr ""
-#: ../../include/channel.php:1645 ../../include/channel.php:1818
+#: ../../include/channel.php:1647 ../../include/channel.php:1820
msgid "Status:"
msgstr ""
-#: ../../include/channel.php:1646 ../../include/channel.php:1842
+#: ../../include/channel.php:1648 ../../include/channel.php:1844
msgid "Homepage:"
msgstr ""
-#: ../../include/channel.php:1647 ../../include/channel.php:1844
+#: ../../include/channel.php:1649 ../../include/channel.php:1846
#: ../../Zotlabs/Module/Directory.php:368
msgid "Hometown:"
msgstr ""
-#: ../../include/channel.php:1648
+#: ../../include/channel.php:1650
msgid "Online Now"
msgstr ""
-#: ../../include/channel.php:1697
+#: ../../include/channel.php:1699
msgid "This channel has not added a profile description yet"
msgstr ""
-#: ../../include/channel.php:1699
+#: ../../include/channel.php:1701
msgid "Change your profile photo"
msgstr ""
-#: ../../include/channel.php:1727 ../../include/selectors.php:64
-#: ../../include/selectors.php:81
-#: ../../extend/addon/hzaddons/openid/Mod_Id.php:87
-msgid "Female"
-msgstr ""
-
-#: ../../include/channel.php:1729 ../../include/selectors.php:64
-#: ../../include/selectors.php:81
-#: ../../extend/addon/hzaddons/openid/Mod_Id.php:85
-msgid "Male"
-msgstr ""
-
-#: ../../include/channel.php:1731
+#: ../../include/channel.php:1733
msgid "Trans"
msgstr ""
-#: ../../include/channel.php:1733 ../../include/selectors.php:64
-msgid "Neuter"
-msgstr ""
-
-#: ../../include/channel.php:1735 ../../include/selectors.php:64
-msgid "Non-specific"
-msgstr ""
-
-#: ../../include/channel.php:1770
+#: ../../include/channel.php:1772
msgid "Full Name:"
msgstr ""
-#: ../../include/channel.php:1803
+#: ../../include/channel.php:1805
msgid "j F, Y"
msgstr ""
-#: ../../include/channel.php:1804
+#: ../../include/channel.php:1806
msgid "j F"
msgstr ""
-#: ../../include/channel.php:1811
+#: ../../include/channel.php:1813
msgid "Birthday:"
msgstr ""
-#: ../../include/channel.php:1815 ../../Zotlabs/Module/Directory.php:349
+#: ../../include/channel.php:1817 ../../Zotlabs/Module/Directory.php:349
msgid "Age:"
msgstr ""
-#: ../../include/channel.php:1824
+#: ../../include/channel.php:1826
#, php-format
msgid "for %1$d %2$s"
msgstr ""
-#: ../../include/channel.php:1836
+#: ../../include/channel.php:1838
msgid "Tags:"
msgstr ""
-#: ../../include/channel.php:1840
+#: ../../include/channel.php:1842
msgid "Sexual Preference:"
msgstr ""
-#: ../../include/channel.php:1846
+#: ../../include/channel.php:1848
msgid "Political Views:"
msgstr ""
-#: ../../include/channel.php:1848
+#: ../../include/channel.php:1850
msgid "Religion:"
msgstr ""
-#: ../../include/channel.php:1850 ../../Zotlabs/Module/Directory.php:370
+#: ../../include/channel.php:1852 ../../Zotlabs/Module/Directory.php:370
msgid "About:"
msgstr ""
-#: ../../include/channel.php:1852
+#: ../../include/channel.php:1854
msgid "Hobbies/Interests:"
msgstr ""
-#: ../../include/channel.php:1854
+#: ../../include/channel.php:1856
msgid "Likes:"
msgstr ""
-#: ../../include/channel.php:1856
+#: ../../include/channel.php:1858
msgid "Dislikes:"
msgstr ""
-#: ../../include/channel.php:1858
+#: ../../include/channel.php:1860
msgid "Contact information and Social Networks:"
msgstr ""
-#: ../../include/channel.php:1860
+#: ../../include/channel.php:1862
msgid "My other channels:"
msgstr ""
-#: ../../include/channel.php:1862
+#: ../../include/channel.php:1864
msgid "Musical interests:"
msgstr ""
-#: ../../include/channel.php:1864
+#: ../../include/channel.php:1866
msgid "Books, literature:"
msgstr ""
-#: ../../include/channel.php:1866
+#: ../../include/channel.php:1868
msgid "Television:"
msgstr ""
-#: ../../include/channel.php:1868
+#: ../../include/channel.php:1870
msgid "Film/dance/culture/entertainment:"
msgstr ""
-#: ../../include/channel.php:1870
+#: ../../include/channel.php:1872
msgid "Love/Romance:"
msgstr ""
-#: ../../include/channel.php:1872
+#: ../../include/channel.php:1874
msgid "Work/employment:"
msgstr ""
-#: ../../include/channel.php:1874
+#: ../../include/channel.php:1876
msgid "School/education:"
msgstr ""
-#: ../../include/channel.php:1895 ../../Zotlabs/Lib/Apps.php:366
-#: ../../Zotlabs/Module/Profperm.php:114
+#: ../../include/channel.php:1897 ../../Zotlabs/Lib/Apps.php:366
+#: ../../Zotlabs/Module/Profperm.php:116
msgid "Profile"
msgstr ""
-#: ../../include/channel.php:1897
+#: ../../include/channel.php:1899
msgid "Like this thing"
msgstr ""
-#: ../../include/channel.php:1898
+#: ../../include/channel.php:1900
msgid "Export"
msgstr ""
-#: ../../include/channel.php:2351
+#: ../../include/channel.php:2353
msgid "cover photo"
msgstr ""
-#: ../../include/channel.php:2632 ../../boot.php:1761
+#: ../../include/channel.php:2628 ../../boot.php:1755
#: ../../Zotlabs/Module/Rmagic.php:96
msgid "Remote Authentication"
msgstr ""
-#: ../../include/channel.php:2633 ../../Zotlabs/Module/Rmagic.php:97
+#: ../../include/channel.php:2629 ../../Zotlabs/Module/Rmagic.php:97
msgid "Enter your channel address (e.g. channel@example.com)"
msgstr ""
-#: ../../include/channel.php:2634 ../../Zotlabs/Module/Rmagic.php:98
+#: ../../include/channel.php:2630 ../../Zotlabs/Module/Rmagic.php:98
msgid "Authenticate"
msgstr ""
-#: ../../include/channel.php:2794 ../../Zotlabs/Module/Admin/Accounts.php:184
+#: ../../include/channel.php:2790 ../../Zotlabs/Module/Admin/Accounts.php:84
#, php-format
msgid "Account '%s' deleted"
msgstr ""
-#: ../../include/contact_widgets.php:13
-#, php-format
-msgid "%d invitation available"
-msgid_plural "%d invitations available"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/contact_widgets.php:18 ../../include/acl_selectors.php:145
-#: ../../Zotlabs/Module/Admin/Site.php:406
-msgid "Advanced"
+#: ../../include/bbcode.php:234 ../../include/bbcode.php:994
+#: ../../include/bbcode.php:1663 ../../include/bbcode.php:1671
+msgid "Image/photo"
msgstr ""
-#: ../../include/contact_widgets.php:21
-msgid "Find Channels"
+#: ../../include/bbcode.php:286
+msgid "Encrypted content"
msgstr ""
-#: ../../include/contact_widgets.php:22
-msgid "Enter name or interest"
+#: ../../include/bbcode.php:342
+#, php-format
+msgid "Install %1$s element %2$s"
msgstr ""
-#: ../../include/contact_widgets.php:23
-msgid "Connect/Follow"
+#: ../../include/bbcode.php:346
+#, php-format
+msgid ""
+"This post contains an installable %s element, however you lack permissions "
+"to install it on this site."
msgstr ""
-#: ../../include/contact_widgets.php:24
-msgid "Examples: Robert Morgenstein, Fishing"
+#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:47
+msgid "webpage"
msgstr ""
-#: ../../include/contact_widgets.php:25 ../../Zotlabs/Module/Directory.php:435
-#: ../../Zotlabs/Module/Directory.php:440
-#: ../../Zotlabs/Module/Connections.php:407
-msgid "Find"
+#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:57
+msgid "layout"
msgstr ""
-#: ../../include/contact_widgets.php:26 ../../Zotlabs/Module/Suggest.php:77
-#: ../../Zotlabs/Module/Directory.php:439
-msgid "Channel Suggestions"
+#: ../../include/bbcode.php:362 ../../Zotlabs/Module/Impel.php:52
+msgid "block"
msgstr ""
-#: ../../include/contact_widgets.php:28
-msgid "Random Profile"
+#: ../../include/bbcode.php:365 ../../Zotlabs/Module/Impel.php:64
+msgid "menu"
msgstr ""
-#: ../../include/contact_widgets.php:29
-msgid "Invite Friends"
+#: ../../include/bbcode.php:568
+msgid "card"
msgstr ""
-#: ../../include/contact_widgets.php:31
-msgid "Advanced example: name=fred and country=iceland"
+#: ../../include/bbcode.php:570
+msgid "article"
msgstr ""
-#: ../../include/contact_widgets.php:58 ../../include/contact_widgets.php:121
-#: ../../include/contact_widgets.php:155 ../../Zotlabs/Widget/Filer.php:36
-#: ../../Zotlabs/Widget/Appcategories.php:52
-#: ../../extend/addon/hzaddons/articles/Widget/Articles_categories.php:83
-#: ../../extend/addon/hzaddons/cards/Widget/Cards_categories.php:83
-msgid "Everything"
+#: ../../include/bbcode.php:653 ../../include/bbcode.php:661
+msgid "Click to open/close"
msgstr ""
-#: ../../include/contact_widgets.php:118 ../../include/contact_widgets.php:152
-#: ../../include/taxonomy.php:425 ../../include/taxonomy.php:507
-#: ../../include/taxonomy.php:527 ../../include/taxonomy.php:548
-#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:392
-#: ../../Zotlabs/Storage/Browser.php:407 ../../Zotlabs/Module/Cdav.php:1062
-#: ../../extend/addon/hzaddons/articles/Widget/Articles_categories.php:80
-#: ../../extend/addon/hzaddons/cards/Widget/Cards_categories.php:80
-msgid "Categories"
+#: ../../include/bbcode.php:674
+msgid "View article"
msgstr ""
-#: ../../include/contact_widgets.php:185
-msgid "Common Connections"
+#: ../../include/bbcode.php:674
+msgid "View summary"
msgstr ""
-#: ../../include/contact_widgets.php:189
-#, php-format
-msgid "View all %d common connections"
+#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1314
+#: ../../addon/wiki/Lib/NativeWikiPage.php:634
+msgid "Different viewers will see this text differently"
msgstr ""
-#: ../../include/security.php:633
-msgid ""
-"The form security token was not correct. This probably happened because the "
-"form has been opened for too long (>3 hours) before submitting it."
+#: ../../include/bbcode.php:1639
+msgid "$1 wrote:"
msgstr ""
-#: ../../include/taxonomy.php:326
-msgid "Trending"
+#: ../../include/import.php:31
+msgid "Unable to import a removed channel."
msgstr ""
-#: ../../include/taxonomy.php:326 ../../include/taxonomy.php:465
-#: ../../include/taxonomy.php:486 ../../Zotlabs/Widget/Tagcloud.php:27
-msgid "Tags"
+#: ../../include/import.php:57
+msgid ""
+"Cannot create a duplicate channel identifier on this system. Import failed."
msgstr ""
-#: ../../include/taxonomy.php:566
-msgid "Keywords"
+#: ../../include/import.php:78 ../../addon/diaspora/import_diaspora.php:56
+msgid "Unable to create a unique channel address. Import failed."
msgstr ""
-#: ../../include/taxonomy.php:587
-msgid "have"
+#: ../../include/import.php:129
+msgid "Cloned channel not found. Import failed."
msgstr ""
-#: ../../include/taxonomy.php:587
-msgid "has"
+#: ../../addon/irc/Mod_Irc.php:23 ../../addon/irc/irc.php:41
+msgid "Popular Channels"
msgstr ""
-#: ../../include/taxonomy.php:588
-msgid "want"
+#: ../../addon/irc/irc.php:37
+msgid "Channels to auto connect"
msgstr ""
-#: ../../include/taxonomy.php:588
-msgid "wants"
+#: ../../addon/irc/irc.php:37 ../../addon/irc/irc.php:41
+msgid "Comma separated list"
msgstr ""
-#: ../../include/taxonomy.php:589 ../../Zotlabs/Lib/ThreadItem.php:335
-msgid "like"
+#: ../../addon/irc/irc.php:45
+msgid "IRC Settings"
msgstr ""
-#: ../../include/taxonomy.php:589
-msgid "likes"
+#: ../../addon/irc/irc.php:54
+msgid "IRC settings saved."
msgstr ""
-#: ../../include/taxonomy.php:590 ../../Zotlabs/Lib/ThreadItem.php:336
-msgid "dislike"
+#: ../../addon/irc/irc.php:58
+msgid "IRC Chatroom"
msgstr ""
-#: ../../include/taxonomy.php:590
-msgid "dislikes"
+#: ../../addon/fediquest/fediquest.php:215
+msgid "ERROR: word length is not correct!"
msgstr ""
-#: ../../include/connections.php:174
-msgid "New window"
+#: ../../addon/fediquest/Mod_Fediquest.php:22
+msgid "Fediquest App"
msgstr ""
-#: ../../include/connections.php:175
-msgid "Open the selected location in a different window or browser tab"
+#: ../../addon/fediquest/Mod_Fediquest.php:23
+msgid "A distributed quest for a given word (game)."
msgstr ""
-#: ../../include/acl_selectors.php:33
-#: ../../Zotlabs/Lib/PermissionDescription.php:34
-msgid "Visible to your default audience"
+#: ../../addon/fediquest/Mod_Fediquest.php:24
+msgid ""
+"To start a game, enter [fediquest]your_word[/fediquest] somewhere in a "
+"toplevel post."
msgstr ""
-#: ../../include/acl_selectors.php:100
-msgid "Profile-Based Privacy Groups"
+#: ../../addon/fediquest/Mod_Fediquest.php:25
+msgid "Your contacts can post their guess in the comments."
msgstr ""
-#: ../../include/acl_selectors.php:119
-msgid "Private Forum"
+#: ../../addon/fediquest/Mod_Fediquest.php:26
+msgid ""
+"Your channel will evaluate the guess and automatically post the response."
msgstr ""
-#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:77
-#: ../../Zotlabs/Widget/Activity_filter.php:130
-#: ../../Zotlabs/Widget/Notifications.php:131
-#: ../../Zotlabs/Widget/Notifications.php:132
-msgid "Forums"
+#: ../../addon/fediquest/Mod_Fediquest.php:28
+msgid "Correct letters"
msgstr ""
-#: ../../include/acl_selectors.php:136
-#: ../../Zotlabs/Lib/PermissionDescription.php:107
-#: ../../Zotlabs/Module/Settings/Privacy.php:66
-msgid "Only me"
+#: ../../addon/fediquest/Mod_Fediquest.php:29
+msgid "Letters contained in the word but at the wrong spot"
msgstr ""
-#: ../../include/acl_selectors.php:143
-msgid "Share with"
+#: ../../addon/fediquest/Mod_Fediquest.php:30
+msgid "Letters not contained in the word"
msgstr ""
-#: ../../include/acl_selectors.php:144
-msgid "Custom selection"
+#: ../../addon/socialauth/Mod_SocialAuth.php:106
+#: ../../addon/socialauth/Mod_SocialAuth.php:179
+msgid "Network error"
msgstr ""
-#: ../../include/acl_selectors.php:146
-msgid ""
-"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
-"limit the scope of \"Allow\"."
+#: ../../addon/socialauth/Mod_SocialAuth.php:110
+#: ../../addon/socialauth/Mod_SocialAuth.php:183
+msgid "API error"
msgstr ""
-#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
-msgid "Allow"
+#: ../../addon/socialauth/Mod_SocialAuth.php:114
+#: ../../addon/socialauth/Mod_SocialAuth.php:187
+msgid "Unknown issue"
msgstr ""
-#: ../../include/acl_selectors.php:148
-msgid "Don't allow"
+#: ../../addon/socialauth/Mod_SocialAuth.php:152
+msgid "Unable to retrieve email address from remote identity provider"
msgstr ""
-#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Photos.php:671
-#: ../../Zotlabs/Module/Photos.php:1045 ../../Zotlabs/Module/Chat.php:240
-#: ../../Zotlabs/Module/Thing.php:350 ../../Zotlabs/Module/Thing.php:402
-#: ../../Zotlabs/Module/Filestorage.php:195
-#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:261
-msgid "Permissions"
+#: ../../addon/socialauth/Mod_SocialAuth.php:171
+msgid "Unable to login using email address "
msgstr ""
-#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:531
-#: ../../Zotlabs/Storage/Browser.php:415 ../../Zotlabs/Module/Photos.php:1266
-#: ../../Zotlabs/Widget/Pinned.php:154
-msgid "Close"
+#: ../../addon/socialauth/Mod_SocialAuth.php:211
+msgid "Social Authentication using your social media account"
msgstr ""
-#: ../../include/acl_selectors.php:181
-#, php-format
+#: ../../addon/socialauth/Mod_SocialAuth.php:215
msgid ""
-"Post permissions %s cannot be changed %s after a post is shared.</br />These "
-"permissions set who is allowed to view the post."
-msgstr ""
-
-#: ../../include/cdav.php:157
-msgid "INVALID EVENT DISMISSED!"
+"This app enables one or more social provider sign-in buttons on the login "
+"page."
msgstr ""
-#: ../../include/cdav.php:158
-msgid "Summary: "
+#: ../../addon/socialauth/Mod_SocialAuth.php:233
+msgid "Add an identity provider"
msgstr ""
-#: ../../include/cdav.php:159
-msgid "Date: "
+#: ../../addon/socialauth/Mod_SocialAuth.php:260
+msgid "Enable "
msgstr ""
-#: ../../include/cdav.php:160 ../../include/cdav.php:168
-msgid "Reason: "
+#: ../../addon/socialauth/Mod_SocialAuth.php:267
+msgid "Key"
msgstr ""
-#: ../../include/cdav.php:166
-msgid "INVALID CARD DISMISSED!"
+#: ../../addon/socialauth/Mod_SocialAuth.php:267
+#: ../../addon/socialauth/Mod_SocialAuth.php:272
+#: ../../addon/socialauth/Mod_SocialAuth.php:288
+#: ../../addon/socialauth/Mod_SocialAuth.php:299
+#: ../../addon/socialauth/Mod_SocialAuth.php:308
+msgid "Word"
msgstr ""
-#: ../../include/cdav.php:167
-msgid "Name: "
+#: ../../addon/socialauth/Mod_SocialAuth.php:272
+msgid "Secret"
msgstr ""
-#: ../../include/selectors.php:17
-msgid "Select a profile to assign to this contact"
+#: ../../addon/socialauth/Mod_SocialAuth.php:308
+msgid "Add a custom provider"
msgstr ""
-#: ../../include/selectors.php:45
-msgid "Frequently"
+#: ../../addon/socialauth/Mod_SocialAuth.php:328
+msgid "Remove an identity provider"
msgstr ""
-#: ../../include/selectors.php:46
-msgid "Hourly"
+#: ../../addon/socialauth/Mod_SocialAuth.php:338
+msgid "Social authentication"
msgstr ""
-#: ../../include/selectors.php:47
-msgid "Twice daily"
+#: ../../addon/socialauth/Mod_SocialAuth.php:380
+msgid "Error while saving provider settings"
msgstr ""
-#: ../../include/selectors.php:48
-msgid "Daily"
+#: ../../addon/socialauth/Mod_SocialAuth.php:403
+msgid "Custom provider already exists"
msgstr ""
-#: ../../include/selectors.php:49
-msgid "Weekly"
+#: ../../addon/socialauth/Mod_SocialAuth.php:420
+msgid "Social authentication settings saved."
msgstr ""
-#: ../../include/selectors.php:50
-msgid "Monthly"
+#: ../../addon/upload_limits/upload_limits.php:25
+msgid "Show Upload Limits"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Currently Male"
+#: ../../addon/upload_limits/upload_limits.php:27
+msgid "Hubzilla configured maximum size: "
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Currently Female"
+#: ../../addon/upload_limits/upload_limits.php:28
+msgid "PHP upload_max_filesize: "
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Mostly Male"
+#: ../../addon/upload_limits/upload_limits.php:29
+msgid "PHP post_max_size (must be larger than upload_max_filesize): "
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Mostly Female"
+#: ../../addon/sendzid/Mod_Sendzid.php:21
+msgid "Send your identity to all websites"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Transgender"
+#: ../../addon/sendzid/Mod_Sendzid.php:29
+msgid "Send ZID"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Intersex"
+#: ../../addon/hubwall/hubwall.php:19
+msgid "Send email to all members"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Transsexual"
+#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:66
+#, php-format
+msgid "%s Administrator"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Hermaphrodite"
+#: ../../addon/hubwall/hubwall.php:50 ../../addon/mailtest/mailtest.php:50
+msgid "No recipients found."
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Undecided"
+#: ../../addon/hubwall/hubwall.php:74
+#, php-format
+msgid "%1$d of %2$d messages sent."
msgstr ""
-#: ../../include/selectors.php:100 ../../include/selectors.php:119
-msgid "Males"
+#: ../../addon/hubwall/hubwall.php:82
+msgid "Send email to all hub members."
msgstr ""
-#: ../../include/selectors.php:100 ../../include/selectors.php:119
-msgid "Females"
+#: ../../addon/hubwall/hubwall.php:93 ../../addon/mailtest/mailtest.php:96
+msgid "Message subject"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Gay"
+#: ../../addon/hubwall/hubwall.php:94
+msgid "Sender Email address"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Lesbian"
+#: ../../addon/hubwall/hubwall.php:95
+msgid "Test mode (only send to hub administrator)"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "No Preference"
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:22
+msgid "Rainbow Tag App"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Bisexual"
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:23
+msgid "Add some colour to tag clouds"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Autosexual"
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:30
+msgid "Rainbow Tag"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Abstinent"
+#: ../../addon/openid/openid.php:49
+msgid ""
+"We encountered a problem while logging in with the OpenID you provided. "
+"Please check the correct spelling of the ID."
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Virgin"
+#: ../../addon/openid/openid.php:49
+msgid "The error message was:"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Deviant"
+#: ../../addon/openid/Mod_Openid.php:32
+msgid "OpenID protocol error. No ID returned."
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Fetish"
+#: ../../addon/openid/Mod_Openid.php:78 ../../addon/openid/Mod_Openid.php:179
+#, php-format
+msgid "Welcome %s. Remote authentication successful."
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Oodles"
+#: ../../addon/openid/MysqlProvider.php:52
+msgid "First Name"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Nonsexual"
+#: ../../addon/openid/MysqlProvider.php:53
+msgid "Last Name"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Single"
+#: ../../addon/openid/MysqlProvider.php:54 ../../addon/redred/Mod_Redred.php:73
+#: ../../boot.php:1748
+msgid "Nickname"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Lonely"
+#: ../../addon/openid/MysqlProvider.php:55
+msgid "Full Name"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Available"
+#: ../../addon/openid/MysqlProvider.php:61
+msgid "Profile Photo 16px"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Unavailable"
+#: ../../addon/openid/MysqlProvider.php:62
+msgid "Profile Photo 32px"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Has crush"
+#: ../../addon/openid/MysqlProvider.php:63
+msgid "Profile Photo 48px"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Infatuated"
+#: ../../addon/openid/MysqlProvider.php:64
+msgid "Profile Photo 64px"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Dating"
+#: ../../addon/openid/MysqlProvider.php:65
+msgid "Profile Photo 80px"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Unfaithful"
+#: ../../addon/openid/MysqlProvider.php:66
+msgid "Profile Photo 128px"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Sex Addict"
+#: ../../addon/openid/MysqlProvider.php:68
+#: ../../Zotlabs/Module/Profiles.php:782
+msgid "Homepage URL"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Friends/Benefits"
+#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:363
+msgid "Language"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Casual"
+#: ../../addon/openid/MysqlProvider.php:70
+msgid "Birth Year"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Engaged"
+#: ../../addon/openid/MysqlProvider.php:71
+msgid "Birth Month"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Married"
+#: ../../addon/openid/MysqlProvider.php:72
+msgid "Birth Day"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Imaginarily married"
+#: ../../addon/openid/MysqlProvider.php:73
+msgid "Birthdate"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Partners"
+#: ../../addon/openid/MysqlProvider.php:74
+#: ../../Zotlabs/Module/Profiles.php:453
+msgid "Gender"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Cohabiting"
+#: ../../addon/openclipatar/openclipatar.php:51
+#: ../../addon/openclipatar/openclipatar.php:129
+msgid "System defaults:"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Common law"
+#: ../../addon/openclipatar/openclipatar.php:55
+msgid "Preferred Clipart IDs"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Happy"
+#: ../../addon/openclipatar/openclipatar.php:55
+msgid "List of preferred clipart ids. These will be shown first."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Not looking"
+#: ../../addon/openclipatar/openclipatar.php:56
+msgid "Default Search Term"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Swinger"
+#: ../../addon/openclipatar/openclipatar.php:56
+msgid "The default search term. These will be shown second."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Betrayed"
+#: ../../addon/openclipatar/openclipatar.php:57
+msgid "Return After"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Separated"
+#: ../../addon/openclipatar/openclipatar.php:57
+msgid "Page to load after image selection."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Unstable"
+#: ../../addon/openclipatar/openclipatar.php:60
+msgid "Profile List"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Divorced"
+#: ../../addon/openclipatar/openclipatar.php:62
+msgid "Order of Preferred"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Imaginarily divorced"
+#: ../../addon/openclipatar/openclipatar.php:62
+msgid "Sort order of preferred clipart ids."
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Widowed"
+#: ../../addon/openclipatar/openclipatar.php:63
+#: ../../addon/openclipatar/openclipatar.php:69
+msgid "Newest first"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Uncertain"
+#: ../../addon/openclipatar/openclipatar.php:66
+msgid "As entered"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "It's complicated"
+#: ../../addon/openclipatar/openclipatar.php:68
+msgid "Order of other"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Don't care"
+#: ../../addon/openclipatar/openclipatar.php:68
+msgid "Sort order of other clipart ids."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Ask me"
+#: ../../addon/openclipatar/openclipatar.php:70
+msgid "Most downloaded first"
msgstr ""
-#: ../../include/zid.php:417
-#, php-format
-msgid "OpenWebAuth: %1$s welcomes %2$s"
+#: ../../addon/openclipatar/openclipatar.php:71
+msgid "Most liked first"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:19
-#: ../../view/theme/redbasic/php/config.php:22
-msgid "Focus (Hubzilla default)"
+#: ../../addon/openclipatar/openclipatar.php:73
+msgid "Preferred IDs Message"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:192
-msgid "Theme settings"
+#: ../../addon/openclipatar/openclipatar.php:73
+msgid "Message to display above preferred results."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:193
-msgid "Dark style"
+#: ../../addon/openclipatar/openclipatar.php:79
+msgid "Uploaded by: "
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:194
-msgid "Light style"
+#: ../../addon/openclipatar/openclipatar.php:79
+msgid "Drawn by: "
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:195
-msgid "Common settings"
+#: ../../addon/openclipatar/openclipatar.php:183
+#: ../../addon/openclipatar/openclipatar.php:195
+msgid "Use this image"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:196
-msgid "Primary theme color"
+#: ../../addon/openclipatar/openclipatar.php:193
+msgid "Or select from a free OpenClipart.org image:"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:196
-#: ../../view/theme/redbasic/php/config.php:197
-#: ../../view/theme/redbasic/php/config.php:198
-#: ../../view/theme/redbasic/php/config.php:199
-#: ../../view/theme/redbasic/php/config.php:200
-msgid "Current color, leave empty for default"
+#: ../../addon/openclipatar/openclipatar.php:196
+msgid "Search Term"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:197
-msgid "Success theme color"
+#: ../../addon/openclipatar/openclipatar.php:233
+msgid "Unknown error. Please try again later."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:198
-msgid "Info theme color"
+#: ../../addon/openclipatar/openclipatar.php:299
+#: ../../Zotlabs/Module/Profile_photo.php:269
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:199
-msgid "Warning theme color"
+#: ../../addon/openclipatar/openclipatar.php:309
+msgid "Profile photo updated successfully."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:200
-msgid "Danger theme color"
+#: ../../addon/nsabait/Mod_Nsabait.php:23
+msgid "NSA Bait App"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:201
-msgid "Default to dark mode"
+#: ../../addon/nsabait/Mod_Nsabait.php:25
+msgid "Make yourself a political target."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:202
-msgid "Always use light icons for navbar"
+#: ../../addon/visage/Mod_Visage.php:23
+msgid "Recent Channel/Profile Viewers"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:202
-msgid "Enable this option if you use a dark navbar color in light mode"
+#: ../../addon/visage/Mod_Visage.php:34
+msgid "No entries."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:203
-msgid "Narrow navbar"
+#: ../../addon/hzfiles/hzfiles.php:81
+msgid "Hubzilla File Storage Import"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:204
-msgid "Navigation bar background color"
+#: ../../addon/hzfiles/hzfiles.php:82
+msgid "This will import all your cloud files from another server."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:205
-msgid "Dark navigation bar background color"
+#: ../../addon/hzfiles/hzfiles.php:83
+msgid "Hubzilla Server base URL"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:206
-msgid "Set the background color"
+#: ../../addon/hzfiles/hzfiles.php:84
+#: ../../addon/content_import/Mod_content_import.php:138
+msgid "Since modified date yyyy-mm-dd"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:207
-msgid "Set the dark background color"
+#: ../../addon/hzfiles/hzfiles.php:85
+#: ../../addon/content_import/Mod_content_import.php:139
+msgid "Until modified date yyyy-mm-dd"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:208
-msgid "Set the background image"
+#: ../../addon/upgrade_info/upgrade_info.php:48
+msgid "Your channel has been upgraded to $Projectname version"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:209
-msgid "Set the dark background image"
+#: ../../addon/upgrade_info/upgrade_info.php:50
+msgid "Please have a look at the"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:210
-msgid "Set font-size for the entire application"
+#: ../../addon/upgrade_info/upgrade_info.php:52
+msgid "git history"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:210
-msgid "Examples: 1rem, 100%, 16px"
+#: ../../addon/upgrade_info/upgrade_info.php:54
+msgid "change log"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:211
-msgid "Set radius of corners in rem"
+#: ../../addon/upgrade_info/upgrade_info.php:55
+msgid "for further info."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:211
-msgid "Leave empty for default radius"
+#: ../../addon/upgrade_info/upgrade_info.php:60
+msgid "$Projectname Upgrade Info"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:212
-msgid "Set maximum width of content region in rem"
+#: ../../addon/upgrade_info/upgrade_info.php:64
+msgid "Do not show this again"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:212
-msgid "Leave empty for default width"
+#: ../../addon/opensearch/opensearch.php:26
+#, php-format
+msgctxt "opensearch"
+msgid "Search %1$s (%2$s)"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:213
-msgid "Set size of conversation author photo"
+#: ../../addon/opensearch/opensearch.php:28
+msgctxt "opensearch"
+msgid "$Projectname"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:213
-#: ../../view/theme/redbasic/php/config.php:214
-msgid "Leave empty for default size"
+#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:67
+#: ../../Zotlabs/Module/Home.php:88 ../../Zotlabs/Module/Home.php:96
+#: ../../Zotlabs/Module/Invite.php:239 ../../Zotlabs/Module/Invite.php:508
+#: ../../Zotlabs/Module/Invite.php:522
+msgid "$Projectname"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:214
-msgid "Set size of followup author photos"
+#: ../../addon/opensearch/opensearch.php:43
+msgid "Search $Projectname"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:215
-msgid "Show advanced settings"
+#: ../../addon/dirstats/dirstats.php:94
+msgid "Hubzilla Directory Stats"
msgstr ""
-#: ../../boot.php:1736
-msgid "Create an account to access services and applications"
+#: ../../addon/dirstats/dirstats.php:95
+msgid "Total Hubs"
msgstr ""
-#: ../../boot.php:1754
-msgid "Email or nickname"
+#: ../../addon/dirstats/dirstats.php:97
+msgid "Hubzilla Hubs"
msgstr ""
-#: ../../boot.php:1754 ../../extend/addon/hzaddons/redred/Mod_Redred.php:73
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:54
-msgid "Nickname"
+#: ../../addon/dirstats/dirstats.php:99
+msgid "Friendica Hubs"
msgstr ""
-#: ../../boot.php:1764
-msgid "Password"
+#: ../../addon/dirstats/dirstats.php:101
+msgid "Diaspora Pods"
msgstr ""
-#: ../../boot.php:1765
-msgid "Remember me"
+#: ../../addon/dirstats/dirstats.php:103
+msgid "Hubzilla Channels"
msgstr ""
-#: ../../boot.php:1768
-msgid "Forgot your password?"
+#: ../../addon/dirstats/dirstats.php:105
+msgid "Friendica Channels"
msgstr ""
-#: ../../boot.php:1769 ../../Zotlabs/Module/Lostpass.php:91
-msgid "Password Reset"
+#: ../../addon/dirstats/dirstats.php:107
+msgid "Diaspora Channels"
msgstr ""
-#: ../../boot.php:2647
-#, php-format
-msgid "[$Projectname] Website SSL error for %s"
+#: ../../addon/dirstats/dirstats.php:109
+msgid "Aged 35 and above"
msgstr ""
-#: ../../boot.php:2652
-msgid "Website SSL certificate is not valid. Please correct."
+#: ../../addon/dirstats/dirstats.php:111
+msgid "Aged 34 and under"
msgstr ""
-#: ../../boot.php:2768
-#, php-format
-msgid "[$Projectname] Cron tasks not running on %s"
+#: ../../addon/dirstats/dirstats.php:113
+msgid "Average Age"
msgstr ""
-#: ../../boot.php:2773
-msgid "Cron/Scheduled tasks not running."
+#: ../../addon/dirstats/dirstats.php:115
+msgid "Known Chatrooms"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:10
-msgid "0. Beginner/Basic"
+#: ../../addon/dirstats/dirstats.php:117
+msgid "Known Tags"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:11
-msgid "1. Novice - not skilled but willing to learn"
+#: ../../addon/dirstats/dirstats.php:119
+msgid ""
+"Please note Diaspora and Friendica statistics are merely those **this "
+"directory** is aware of, and not all those known in the network. This also "
+"applies to chatrooms,"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:12
-msgid "2. Intermediate - somewhat comfortable"
+#: ../../addon/piwik/piwik.php:85
+msgid ""
+"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
+"analytics tool."
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:13
-msgid "3. Advanced - very comfortable"
+#: ../../addon/piwik/piwik.php:88
+#, php-format
+msgid ""
+"If you do not want that your visits are logged this way you <a href='%s'>can "
+"set a cookie to prevent Piwik from tracking further visits of the site</a> "
+"(opt-out)."
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:14
-msgid "4. Expert - I can write computer code"
+#: ../../addon/piwik/piwik.php:96
+msgid "Piwik Base URL"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:15
-msgid "5. Wizard - I probably know more than you do"
+#: ../../addon/piwik/piwik.php:96
+msgid ""
+"Absolute path to your Piwik installation. (without protocol (http/s), with "
+"trailing slash)"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:330
-msgid "Affinity Tool"
+#: ../../addon/piwik/piwik.php:97
+msgid "Site ID"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:331
-#: ../../extend/addon/hzaddons/articles/articles.php:48
-#: ../../extend/addon/hzaddons/articles/articles.php:160
-#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:228
-msgid "Articles"
+#: ../../addon/piwik/piwik.php:98
+msgid "Show opt-out cookie link?"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:332
-#: ../../extend/addon/hzaddons/cards/cards.php:48
-#: ../../extend/addon/hzaddons/cards/cards.php:160
-#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:209
-msgid "Cards"
+#: ../../addon/piwik/piwik.php:99
+msgid "Asynchronous tracking"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:333
-msgid "Site Admin"
+#: ../../addon/piwik/piwik.php:100
+msgid "Enable frontend JavaScript error tracking"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:334
-#: ../../extend/addon/hzaddons/buglink/buglink.php:16
-msgid "Report Bug"
+#: ../../addon/piwik/piwik.php:100
+msgid "This feature requires Piwik >= 2.2.0"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:337
-msgid "Content Filter"
+#: ../../addon/piwik/piwik.php:116 ../../addon/logrot/logrot.php:54
+#: ../../addon/diaspora/diaspora.php:108 ../../addon/msgfooter/msgfooter.php:54
+#: ../../addon/rendezvous/rendezvous.php:82 ../../addon/xmpp/xmpp.php:54
+#: ../../addon/faces/faces.php:291 ../../addon/twitter/twitter.php:493
+#: ../../addon/openstreetmap/openstreetmap.php:163
+#: ../../Zotlabs/Module/Defperms.php:111
+#: ../../Zotlabs/Module/Settings/Channel.php:151
+msgid "Settings updated."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:338
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:133
-msgid "Content Import"
+#: ../../addon/redphotos/redphotos.php:106
+msgid "Photos imported"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:340
-msgid "Remote Diagnostics"
+#: ../../addon/redphotos/redphotos.php:129
+msgid "Redmatrix Photo Album Import"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:341
-msgid "Suggest Channels"
+#: ../../addon/redphotos/redphotos.php:130
+msgid "This will import all your Redmatrix photo albums to this channel."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:343
-msgid "Channel Manager"
+#: ../../addon/redphotos/redphotos.php:131
+#: ../../addon/redfiles/redfiles.php:121
+msgid "Redmatrix Server base URL"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:344
-msgid "Stream"
+#: ../../addon/redphotos/redphotos.php:132
+#: ../../addon/redfiles/redfiles.php:122
+msgid "Redmatrix Login Username"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:348
-msgid "Wiki"
+#: ../../addon/redphotos/redphotos.php:133
+#: ../../addon/redfiles/redfiles.php:123
+msgid "Redmatrix Login Password"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:355
-msgid "Mail"
+#: ../../addon/redphotos/redphotos.php:134
+msgid "Import just this album"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:356
-msgid "Chat"
+#: ../../addon/redphotos/redphotos.php:134
+msgid "Leave blank to import all albums"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:358
-msgid "Probe"
+#: ../../addon/redphotos/redphotos.php:135
+msgid "Maximum count to import"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:359
-msgid "Suggest"
+#: ../../addon/redphotos/redphotos.php:135
+msgid "0 or blank to import all available"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:360
-msgid "Random Channel"
+#: ../../addon/pageheader/Mod_Pageheader.php:22
+msgid "pageheader Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:361
-msgid "Invite"
+#: ../../addon/pageheader/Mod_Pageheader.php:41
+msgid "Message to display on every page on this server"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:362 ../../Zotlabs/Widget/Admin.php:31
-msgid "Features"
+#: ../../addon/pageheader/Mod_Pageheader.php:49
+msgid "Page Header"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:363
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:69
-msgid "Language"
+#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:334
+msgid "Report Bug"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:411
-msgid "Post"
+#: ../../addon/hideaside/Mod_Hideaside.php:28
+msgid "Hide Aside App"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:369
-msgid "Notifications"
+#: ../../addon/hideaside/Mod_Hideaside.php:29
+msgid "Fade out aside areas after a while when using endless scroll"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:370
-msgid "Order Apps"
+#: ../../addon/ijpost/ijpost.php:44
+msgid "Post to Insane Journal"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:371
-msgid "CardDAV"
+#: ../../addon/ijpost/Mod_Ijpost.php:23
+msgid "Insane Journal Crosspost Connector Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Sources.php:105
-msgid "Channel Sources"
+#: ../../addon/ijpost/Mod_Ijpost.php:35
+msgid "Insane Journal Crosspost Connector App"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Tokens.php:288
-msgid "Guest Access"
+#: ../../addon/ijpost/Mod_Ijpost.php:35 ../../addon/xmpp/Mod_Xmpp.php:35
+#: ../../Zotlabs/Module/Invite.php:70 ../../Zotlabs/Module/Lang.php:20
+msgid "Not Installed"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:374 ../../Zotlabs/Widget/Notes.php:38
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2661
-msgid "Notes"
+#: ../../addon/ijpost/Mod_Ijpost.php:36
+msgid "Relay public postings to Insane Journal"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:375
-msgid "OAuth Apps Manager"
+#: ../../addon/ijpost/Mod_Ijpost.php:53
+msgid "InsaneJournal username"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:376
-msgid "OAuth2 Apps Manager"
+#: ../../addon/ijpost/Mod_Ijpost.php:57
+msgid "InsaneJournal password"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:377
-msgid "PDL Editor"
+#: ../../addon/ijpost/Mod_Ijpost.php:61
+msgid "Post to InsaneJournal by default"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Module/Permcats.php:248
-msgid "Contact Roles"
+#: ../../addon/ijpost/Mod_Ijpost.php:69
+msgid "Insane Journal Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Module/Pubstream.php:109
-#: ../../Zotlabs/Widget/Notifications.php:154
-msgid "Public Stream"
+#: ../../addon/wholikesme/wholikesme.php:30
+msgid "Who likes me?"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:380
-msgid "My Chatrooms"
+#: ../../addon/redred/redred.php:50
+msgid "Post to Hubzilla"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:381
-msgid "Channel Export"
+#: ../../addon/redred/Mod_Redred.php:24
+msgid "Channel is required."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Oauth.php:53
-#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Oauth2.php:58
-#: ../../Zotlabs/Module/Oauth2.php:142 ../../Zotlabs/Module/Connedit.php:748
-#: ../../Zotlabs/Module/Admin/Addons.php:461 ../../Zotlabs/Module/Cdav.php:1044
-#: ../../Zotlabs/Module/Cdav.php:1384
-msgid "Update"
+#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:333
+msgid "Invalid channel."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Admin/Addons.php:430
-msgid "Install"
+#: ../../addon/redred/Mod_Redred.php:38
+msgid "Hubzilla Crosspost Connector Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:592 ../../Zotlabs/Lib/Apps.php:614
-msgid "Purchase"
+#: ../../addon/redred/Mod_Redred.php:61
+msgid "Send public postings to Hubzilla channel by default"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:619
-msgid "Undelete"
+#: ../../addon/redred/Mod_Redred.php:65
+msgid "Hubzilla API Path"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:627
-msgid "Add to app-tray"
+#: ../../addon/redred/Mod_Redred.php:65 ../../addon/rtof/Mod_Rtof.php:51
+msgid "https://{sitename}/api"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:628
-msgid "Remove from app-tray"
+#: ../../addon/redred/Mod_Redred.php:69
+msgid "Hubzilla login name"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:629
-msgid "Pin to navbar"
+#: ../../addon/redred/Mod_Redred.php:73
+msgid "Hubzilla channel name"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:630
-msgid "Unpin from navbar"
+#: ../../addon/redred/Mod_Redred.php:77
+msgid "Hubzilla password"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:164
-msgid "Directory Options"
+#: ../../addon/redred/Mod_Redred.php:85
+msgid "Hubzilla Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:166
-msgid "Safe Mode"
+#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160
+#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:332
+msgid "Cards"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:167
-msgid "Public Forums Only"
+#: ../../addon/cards/cards.php:51 ../../addon/wiki/wiki.php:48
+msgid "View Cards"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:169
-msgid "This Website Only"
+#: ../../addon/cards/cards.php:104 ../../addon/articles/articles.php:105
+#: ../../addon/wiki/Lib/NativeWikiPage.php:549
+#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:155
+#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Help.php:173
+#: ../../Zotlabs/Web/Router.php:188
+msgid "Page not found."
msgstr ""
-#: ../../Zotlabs/Lib/AccessList.php:26
-msgid ""
-"A deleted privacy group with this name was revived. Existing item "
-"permissions <strong>may</strong> apply to this privacy group and any future "
-"members. If this is not what you intended, please create another privacy "
-"group with a different name."
+#: ../../addon/cards/Mod_Cards.php:115
+msgid "Add Card"
msgstr ""
-#: ../../Zotlabs/Lib/AccessList.php:268
-msgid "Select a privacy group"
+#: ../../addon/cards/Mod_Card_edit.php:17
+#: ../../addon/cards/Mod_Card_edit.php:33
+#: ../../addon/articles/Mod_Article_edit.php:17
+#: ../../addon/articles/Mod_Article_edit.php:33
+#: ../../Zotlabs/Module/Editwebpage.php:80
+#: ../../Zotlabs/Module/Editlayout.php:79 ../../Zotlabs/Module/Editpost.php:24
+#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95
+msgid "Item not found"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:110
-msgid "Restricted message"
+#: ../../addon/cards/Mod_Card_edit.php:44
+#: ../../addon/articles/Mod_Article_edit.php:44
+#: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Block.php:41
+#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Wall_upload.php:30
+#: ../../Zotlabs/Module/Attach_edit.php:52 ../../Zotlabs/Module/Attach.php:22
+#: ../../Zotlabs/Module/Chanview.php:95
+msgid "Channel not found."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:117
-msgid "Direct message"
+#: ../../addon/cards/Mod_Card_edit.php:123
+msgid "Edit Card"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:122
-msgid "Public Policy"
+#: ../../addon/startpage/Mod_Startpage.php:61
+msgid "Page to load after login"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:156
-msgid "Privacy conflict. Discretion advised."
+#: ../../addon/startpage/Mod_Startpage.php:63
+msgid ""
+"Examples: \"apps\", \"network?f=&gid=37\" (privacy collection), \"channel\" "
+"or \"notifications/system\" (leave blank for default.)"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:373
-msgid "Admin Delete"
+#: ../../addon/startpage/Mod_Startpage.php:72
+msgid "Startpage"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:190 ../../Zotlabs/Module/Filer.php:55
-msgid "Save to Folder"
+#: ../../addon/libertree/libertree.php:43
+msgid "Post to Libertree"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
-msgid "I will attend"
+#: ../../addon/libertree/Mod_Libertree.php:25
+msgid "Libertree Crosspost Connector Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
-msgid "I will not attend"
+#: ../../addon/libertree/Mod_Libertree.php:49
+msgid "Libertree API token"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
-msgid "I might attend"
+#: ../../addon/libertree/Mod_Libertree.php:53
+msgid "Libertree site URL"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:335 ../../Zotlabs/Module/Photos.php:1074
-msgid "I like this (toggle)"
+#: ../../addon/libertree/Mod_Libertree.php:57
+msgid "Post to Libertree by default"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:336 ../../Zotlabs/Module/Photos.php:1075
-msgid "I don't like this (toggle)"
+#: ../../addon/libertree/Mod_Libertree.php:65
+msgid "Libertree Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:337
-msgid "Reply to this comment"
+#: ../../addon/logrot/logrot.php:36
+msgid "Logfile archive directory"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:337
-msgid "reply"
+#: ../../addon/logrot/logrot.php:36
+msgid "Directory to store rotated logs"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:337
-msgid "Reply to"
+#: ../../addon/logrot/logrot.php:37
+msgid "Logfile size in bytes before rotating"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:344 ../../Zotlabs/Widget/Pinned.php:95
-msgid "share"
+#: ../../addon/logrot/logrot.php:38
+msgid "Number of logfiles to retain"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:348
-msgid "Repeat"
+#: ../../addon/testdrive/testdrive.php:104
+#, php-format
+msgid "Your account on %s will expire in a few days."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:348
-msgid "repeat"
+#: ../../addon/testdrive/testdrive.php:105
+msgid "Your test account is about to expire."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:359
-msgid "Delivery Report"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:28
+msgid "ActivityPub Protocol Settings updated."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:380
-#, php-format
-msgid "%d comment"
-msgid_plural "%d comments"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Lib/ThreadItem.php:381
-#, php-format
-msgid "%d unseen"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:44
+msgid ""
+"The activitypub protocol does not support location independence. Connections "
+"you make within that network may be unreachable from alternate channel "
+"locations."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:431
-msgid "Forum"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:50
+msgid "Send activities of type note instead of article"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:438
-msgid "to"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:50
+msgid "Microblog services such as Mastodon do not properly support articles"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:439 ../../Zotlabs/Widget/Pinned.php:123
-#: ../../Zotlabs/Widget/Messages.php:146 ../../Zotlabs/Widget/Messages.php:149
-msgid "via"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:58
+msgid "Activitypub Protocol"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:440
-msgid "Wall-to-Wall"
+#: ../../addon/pubcrawl/pubcrawl.php:1099 ../../addon/diaspora/diaspora.php:415
+#: ../../Zotlabs/Module/Contactedit.php:494
+msgid "Refresh failed"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:441
-msgid "via Wall-To-Wall:"
+#: ../../addon/pubcrawl/pubcrawl.php:1106 ../../addon/diaspora/diaspora.php:420
+#: ../../Zotlabs/Module/Contactedit.php:491
+msgid "Refresh succeeded"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:469
-msgid "Attend"
+#: ../../addon/bookmarker/bookmarker.php:38
+#: ../../Zotlabs/Lib/ThreadItem.php:458
+msgid "Save Bookmarks"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:470 ../../Zotlabs/Widget/Pinned.php:137
-msgid "Attendance Options"
+#: ../../addon/planets/Mod_Planets.php:23
+msgid "Random Planet App"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:472 ../../Zotlabs/Widget/Pinned.php:138
-msgid "Voting Options"
+#: ../../addon/planets/Mod_Planets.php:25
+msgid ""
+"Set a random planet from the Star Wars Empire as your location when posting"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:487
-msgid "Go to previous comment"
+#: ../../addon/dwpost/dwpost.php:49
+msgid "Post to Dreamwidth"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:496 ../../Zotlabs/Widget/Pinned.php:150
-msgid "Pinned post"
+#: ../../addon/dwpost/dwpost.php:134 ../../addon/dwpost/Mod_Dwpost.php:67
+#: ../../addon/wppost/wppost.php:175 ../../addon/wppost/Mod_Wppost.php:96
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../addon/ljpost/ljpost.php:134
+msgid "Source"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:499
-#: ../../extend/addon/hzaddons/bookmarker/bookmarker.php:38
-msgid "Save Bookmarks"
+#: ../../addon/dwpost/Mod_Dwpost.php:26
+msgid "Dreamwidth Crosspost Connector Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:500
-msgid "Add to Calendar"
+#: ../../addon/dwpost/Mod_Dwpost.php:51
+msgid "Dreamwidth username"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:508
-msgid "Mark all comments seen"
+#: ../../addon/dwpost/Mod_Dwpost.php:55
+msgid "Dreamwidth password"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:547
-msgid "Add yours"
+#: ../../addon/dwpost/Mod_Dwpost.php:59
+msgid "Post to Dreamwidth by default"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:547
-msgid "Remove yours"
+#: ../../addon/dwpost/Mod_Dwpost.php:63 ../../addon/wppost/Mod_Wppost.php:92
+#: ../../addon/ljpost/Mod_Ljpost.php:69
+msgid "Add link to original post"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:865 ../../Zotlabs/Module/Photos.php:1092
-#: ../../Zotlabs/Module/Photos.php:1205
-msgid "This is you"
+#: ../../addon/dwpost/Mod_Dwpost.php:67 ../../addon/wppost/Mod_Wppost.php:96
+msgid "Link description (default:"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:874
-msgid "Image"
+#: ../../addon/dwpost/Mod_Dwpost.php:75
+msgid "Dreamwidth Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:876
-msgid "Insert Link"
+#: ../../addon/diaspora/diaspora.php:81
+msgid ""
+"Please install the statistics addon to be able to configure a diaspora relay"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:877
-msgid "Video"
+#: ../../addon/diaspora/diaspora.php:91
+msgid "Diaspora Relay Handle"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:886
-msgid "Your full name (required)"
+#: ../../addon/diaspora/diaspora.php:91
+msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:887
-msgid "Your email address (required)"
+#: ../../addon/diaspora/diaspora.php:111
+msgid "Diaspora relay could not be imported"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:888
-msgid "Your website URL (optional)"
+#: ../../addon/diaspora/diaspora.php:1110
+msgid "No subject"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2173
-#, php-format
-msgid "Likes %1$s's %2$s"
+#: ../../addon/diaspora/import_diaspora.php:16
+msgid "No account to import to."
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2176
-#, php-format
-msgid "Doesn't like %1$s's %2$s"
+#: ../../addon/diaspora/import_diaspora.php:21
+msgid "Incompatible data version - aborting"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2182
-#, php-format
-msgid "Will attend %s's event"
+#: ../../addon/diaspora/import_diaspora.php:27
+msgid "No username found in import file."
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2185
-#, php-format
-msgid "Will not attend %s's event"
+#: ../../addon/diaspora/import_diaspora.php:170
+msgid "Import completed."
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2188
-#, php-format
-msgid "May attend %s's event"
+#: ../../addon/diaspora/p.php:48 ../../addon/diaspora/util.php:346
+#: ../../addon/diaspora/util.php:359 ../../Zotlabs/Lib/Enotify.php:62
+msgid "$projectname"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2191
+#: ../../addon/diaspora/Receiver.php:1643
#, php-format
-msgid "May not attend %s's event"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Chatroom.php:25
-msgid "Missing room name"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Chatroom.php:34
-msgid "Duplicate room name"
+msgid "%1$s dislikes %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
-msgid "Invalid room specifier."
+#: ../../addon/diaspora/Receiver.php:1704
+#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:459
+msgid "status"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:124
-msgid "Room not found."
+#: ../../addon/diaspora/Receiver.php:2265 ../../Zotlabs/Module/Like.php:490
+#, php-format
+msgid "%1$s is attending %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:145
-msgid "Room is full"
+#: ../../addon/diaspora/Receiver.php:2267 ../../Zotlabs/Module/Like.php:492
+#, php-format
+msgid "%1$s is not attending %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:61
-msgid "$Projectname Notification"
+#: ../../addon/diaspora/Receiver.php:2269 ../../Zotlabs/Module/Like.php:494
+#, php-format
+msgid "%1$s may attend %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:62
-#: ../../extend/addon/hzaddons/diaspora/p.php:48
-#: ../../extend/addon/hzaddons/diaspora/util.php:346
-#: ../../extend/addon/hzaddons/diaspora/util.php:359
-msgid "$projectname"
+#: ../../addon/diaspora/Mod_Diaspora.php:43
+msgid "Diaspora Protocol Settings updated."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:64
-msgid "Thank You,"
+#: ../../addon/diaspora/Mod_Diaspora.php:52
+msgid ""
+"The diaspora protocol does not support location independence. Connections "
+"you make within that network may be unreachable from alternate channel "
+"locations."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:66
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:33
-#, php-format
-msgid "%s Administrator"
+#: ../../addon/diaspora/Mod_Diaspora.php:80
+msgid "Prevent your hashtags from being redirected to other sites"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:67
-#, php-format
-msgid "This email was sent by %1$s at %2$s."
+#: ../../addon/diaspora/Mod_Diaspora.php:84
+msgid "Sign and forward posts and comments with no existing Diaspora signature"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:67 ../../Zotlabs/Module/Invite.php:239
-#: ../../Zotlabs/Module/Invite.php:508 ../../Zotlabs/Module/Invite.php:522
-#: ../../Zotlabs/Module/Home.php:88 ../../Zotlabs/Module/Home.php:96
-#: ../../extend/addon/hzaddons/opensearch/opensearch.php:42
-msgid "$Projectname"
+#: ../../addon/diaspora/Mod_Diaspora.php:89
+msgid "Followed hashtags (comma separated, do not include the #)"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:68
-#, php-format
-msgid ""
-"To stop receiving these messages, please adjust your Notification Settings "
-"at %s"
+#: ../../addon/diaspora/Mod_Diaspora.php:98
+msgid "Diaspora Protocol"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:69
-#, php-format
-msgid "To stop receiving these messages, please adjust your %s."
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:22
+msgid "Fuzzloc Settings updated."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:69
-#: ../../Zotlabs/Module/Settings/Channel.php:242
-msgid "Notification Settings"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:38
+msgid "Minimum offset in meters"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:124
-#, php-format
-msgid "%s <!item_type!>"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:42
+msgid "Maximum offset in meters"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:132
-#, php-format
-msgid "[$Projectname:Notify] New direct message received at %s"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:51
+msgid "Fuzzy Location"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:134
-#, php-format
-msgid "%1$s sent you a new direct message at %2$s"
+#: ../../addon/qrator/qrator.php:48
+msgid "QR code"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:135
-#, php-format
-msgid "%1$s sent you %2$s."
+#: ../../addon/qrator/qrator.php:63
+msgid "QR Generator"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:135
-msgid "a direct message"
+#: ../../addon/qrator/qrator.php:64
+msgid "Enter some text"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:136
-#, php-format
-msgid "Please visit %s to view and/or reply to your direct messages."
+#: ../../addon/superblock/Mod_Superblock.php:62
+msgid "superblock settings updated"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:149
-msgid "requested to comment on"
+#: ../../addon/superblock/Mod_Superblock.php:86
+msgid "Currently blocked"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:149
-msgid "commented on"
+#: ../../addon/superblock/Mod_Superblock.php:88
+msgid "No channels currently blocked"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
-msgid "requested to like"
+#: ../../addon/superblock/Mod_Superblock.php:90
+#: ../../Zotlabs/Module/Cover_photo.php:382 ../../Zotlabs/Module/Tagrm.php:137
+#: ../../Zotlabs/Module/Photos.php:994
+msgid "Remove"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
-msgid "liked"
+#: ../../addon/superblock/superblock.php:355
+msgid "Block Completely"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
-msgid "requested to dislike"
+#: ../../addon/randpost/randpost.php:101
+msgid "You're welcome."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
-msgid "disliked"
+#: ../../addon/randpost/randpost.php:102
+msgid "Ah shucks..."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:168
-msgid "repeated"
+#: ../../addon/randpost/randpost.php:103
+msgid "Don't mention it."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:173
-msgid "voted on"
+#: ../../addon/randpost/randpost.php:104
+msgid "&lt;blush&gt;"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:216
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
+#: ../../addon/msgfooter/msgfooter.php:46 ../../addon/xmpp/xmpp.php:43
+#: ../../addon/gravatar/gravatar.php:150
+msgid "Save Settings"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:224
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
+#: ../../addon/msgfooter/msgfooter.php:47
+msgid "text to include in all outgoing posts from this site"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:233 ../../Zotlabs/Lib/Enotify.php:325
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
+#: ../../addon/mailtest/mailtest.php:19
+msgid "Send test email"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:245
-#, php-format
-msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
+#: ../../addon/mailtest/mailtest.php:66
+msgid "Mail sent."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:247
-#, php-format
-msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
+#: ../../addon/mailtest/mailtest.php:68
+msgid "Sending of mail failed."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:248
-#, php-format
-msgid "%1$s commented on an item/conversation you have been following"
+#: ../../addon/mailtest/mailtest.php:77
+msgid "Mail Test"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:345
-#: ../../Zotlabs/Lib/Enotify.php:361 ../../Zotlabs/Lib/Enotify.php:385
-#: ../../Zotlabs/Lib/Enotify.php:402 ../../Zotlabs/Lib/Enotify.php:415
-#, php-format
-msgid "Please visit %s to view and/or reply to the conversation."
+#: ../../addon/nsfw/Mod_Nsfw.php:22
+msgid "NSFW Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:255 ../../Zotlabs/Lib/Enotify.php:256
-#, php-format
-msgid "Please visit %s to approve or reject this comment."
+#: ../../addon/nsfw/Mod_Nsfw.php:42
+msgid ""
+"This app looks in posts for the words/text you specify below, and collapses "
+"any content containing those keywords so it is not displayed at "
+"inappropriate times, such as sexual innuendo that may be improper in a work "
+"setting. It is polite and recommended to tag any content containing nudity "
+"with #NSFW. This filter can also match any other word/text you specify, and "
+"can thereby be used as a general purpose content filter."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:341
-#, php-format
-msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
+#: ../../addon/nsfw/Mod_Nsfw.php:47
+msgid "Comma separated list of keywords to hide"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:342
-#, php-format
-msgid "%1$s liked an item/conversation you created"
+#: ../../addon/nsfw/Mod_Nsfw.php:47
+msgid "Word, /regular-expression/, lang=xx, lang!=xx"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:353
-#, php-format
-msgid "[$Projectname:Notify] %s posted to your profile wall"
+#: ../../addon/nsfw/Mod_Nsfw.php:56
+msgid "NSFW"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:355
-#, php-format
-msgid "%1$s posted to your profile wall at %2$s"
+#: ../../addon/nsfw/nsfw.php:153
+msgid "Possible adult content"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:357
+#: ../../addon/nsfw/nsfw.php:168
#, php-format
-msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
+msgid "%s - view"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:379
-#, php-format
-msgid "[$Projectname:Notify] %s tagged you"
+#: ../../addon/rendezvous/rendezvous.php:57
+msgid "Errors encountered deleting database table "
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:380
-#, php-format
-msgid "%1$s tagged you at %2$s"
+#: ../../addon/rendezvous/rendezvous.php:95 ../../addon/twitter/twitter.php:502
+msgid "Submit Settings"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:381
-#, php-format
-msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
+#: ../../addon/rendezvous/rendezvous.php:96
+msgid "Drop tables when uninstalling?"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:392
-#, php-format
-msgid "[$Projectname:Notify] %1$s poked you"
+#: ../../addon/rendezvous/rendezvous.php:96
+msgid ""
+"If checked, the Rendezvous database tables will be deleted when the plugin "
+"is uninstalled."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:393
-#, php-format
-msgid "%1$s poked you at %2$s"
+#: ../../addon/rendezvous/rendezvous.php:97
+msgid "Mapbox Access Token"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:394
-#, php-format
-msgid "%1$s [zrl=%2$s]poked you[/zrl]."
+#: ../../addon/rendezvous/rendezvous.php:97
+msgid ""
+"If you enter a Mapbox access token, it will be used to retrieve map tiles "
+"from Mapbox instead of the default OpenStreetMap tile server."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:409
-#, php-format
-msgid "[$Projectname:Notify] %s tagged your post"
+#: ../../addon/rendezvous/rendezvous.php:162
+msgid "Rendezvous"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:410
-#, php-format
-msgid "%1$s tagged your post at %2$s"
+#: ../../addon/rendezvous/rendezvous.php:167
+msgid ""
+"This identity has been deleted by another member due to inactivity. Please "
+"press the \"New identity\" button or refresh the page to register a new "
+"identity. You may use the same name."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:411
-#, php-format
-msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
+#: ../../addon/rendezvous/rendezvous.php:168
+msgid "Welcome to Rendezvous!"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:422
-msgid "[$Projectname:Notify] Introduction received"
+#: ../../addon/rendezvous/rendezvous.php:169
+msgid ""
+"Enter your name to join this rendezvous. To begin sharing your location with "
+"the other members, tap the GPS control. When your location is discovered, a "
+"red dot will appear and others will be able to see you on the map."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:423
-#, php-format
-msgid "You've received an new connection request from '%1$s' at %2$s"
+#: ../../addon/rendezvous/rendezvous.php:171
+msgid "Let's meet here"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:424
-#, php-format
-msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
+#: ../../addon/rendezvous/rendezvous.php:172 ../../addon/wiki/Mod_Wiki.php:221
+#: ../../addon/wiki/Lib/NativeWikiPage.php:592
+#: ../../addon/wiki/Widget/Wiki_page_history.php:28
+#: ../../Zotlabs/Storage/Browser.php:381 ../../Zotlabs/Module/Oauth.php:112
+#: ../../Zotlabs/Module/Oauth.php:137 ../../Zotlabs/Module/Connedit.php:732
+#: ../../Zotlabs/Module/Admin/Channels.php:181
+#: ../../Zotlabs/Module/Sharedwithme.php:107 ../../Zotlabs/Module/Chat.php:256
+#: ../../Zotlabs/Module/Cdav.php:1368 ../../Zotlabs/Module/Oauth2.php:117
+#: ../../Zotlabs/Module/Oauth2.php:144
+msgid "Name"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:427 ../../Zotlabs/Lib/Enotify.php:445
-#, php-format
-msgid "You may visit their profile at %s"
+#: ../../addon/rendezvous/rendezvous.php:173
+#: ../../addon/cart/submodules/hzservices.php:657
+#: ../../addon/cart/submodules/manualcat.php:260
+#: ../../Zotlabs/Module/Appman.php:220 ../../Zotlabs/Module/Rbmark.php:82
+#: ../../Zotlabs/Module/Cdav.php:1005
+msgid "Description"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:429
-#, php-format
-msgid "Please visit %s to approve or reject the connection request."
+#: ../../addon/rendezvous/rendezvous.php:174
+msgid "New marker"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:436
-msgid "[$Projectname:Notify] Friend suggestion received"
+#: ../../addon/rendezvous/rendezvous.php:175
+msgid "Edit marker"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:437
-#, php-format
-msgid "You've received a friend suggestion from '%1$s' at %2$s"
+#: ../../addon/rendezvous/rendezvous.php:176
+msgid "New identity"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:438
-#, php-format
-msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
+#: ../../addon/rendezvous/rendezvous.php:177
+msgid "Delete marker"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:443
-msgid "Name:"
+#: ../../addon/rendezvous/rendezvous.php:178
+msgid "Delete member"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:444
-msgid "Photo:"
+#: ../../addon/rendezvous/rendezvous.php:179
+msgid "Edit proximity alert"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:447
-#, php-format
-msgid "Please visit %s to approve or reject the suggestion."
+#: ../../addon/rendezvous/rendezvous.php:180
+msgid ""
+"A proximity alert will be issued when this member is within a certain radius "
+"of you.<br><br>Enter a radius in meters (0 to disable):"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:677
-msgid "[$Projectname:Notify]"
+#: ../../addon/rendezvous/rendezvous.php:180
+#: ../../addon/rendezvous/rendezvous.php:185
+msgid "distance"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:843
-msgid "created a new poll"
+#: ../../addon/rendezvous/rendezvous.php:181
+msgid "Proximity alert distance (meters)"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:843
-msgid "created a new post"
+#: ../../addon/rendezvous/rendezvous.php:182
+#: ../../addon/rendezvous/rendezvous.php:184
+msgid ""
+"A proximity alert will be issued when you are within a certain radius of the "
+"marker location.<br><br>Enter a radius in meters (0 to disable):"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:844
-#, php-format
-msgid "voted on %s's poll"
+#: ../../addon/rendezvous/rendezvous.php:183
+msgid "Marker proximity alert"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:844
-#, php-format
-msgid "commented on %s's post"
+#: ../../addon/rendezvous/rendezvous.php:186
+msgid "Reminder note"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:848 ../../Zotlabs/Lib/Enotify.php:948
-msgid "shared a file with you"
+#: ../../addon/rendezvous/rendezvous.php:187
+msgid ""
+"Enter a note to be displayed when you are within the specified proximity..."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:857
-#, php-format
-msgid "edited a post dated %s"
+#: ../../addon/rendezvous/rendezvous.php:199
+msgid "Add new rendezvous"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:860
-#, php-format
-msgid "edited a comment dated %s"
+#: ../../addon/rendezvous/rendezvous.php:200
+msgid ""
+"Create a new rendezvous and share the access link with those you wish to "
+"invite to the group. Those who open the link become members of the "
+"rendezvous. They can view other member locations, add markers to the map, or "
+"share their own locations with the group."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:933
-msgid "added your channel"
+#: ../../addon/rendezvous/rendezvous.php:232
+msgid "You have no rendezvous. Press the button above to create a rendezvous!"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:963
-msgid "sent you a direct message"
+#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:754
+msgid "Errors encountered creating database tables."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:970
-msgid "g A l F d"
+#: ../../addon/pumpio/pumpio.php:152
+msgid "You are now authenticated to pumpio."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:973
-msgid "[today]"
+#: ../../addon/pumpio/pumpio.php:153
+msgid "return to the featured settings page"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:983
-msgid "created an event"
+#: ../../addon/pumpio/pumpio.php:168
+msgid "Post to Pump.io"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:998
-msgid "status verified"
+#: ../../addon/pumpio/Mod_Pumpio.php:40
+msgid "Pump.io Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:68
-msgid "Source code of failed update: "
+#: ../../addon/pumpio/Mod_Pumpio.php:71
+msgid "Pump.io servername"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:89
-#, php-format
-msgid "Update Error at %s"
+#: ../../addon/pumpio/Mod_Pumpio.php:71
+msgid "Without \"http://\" or \"https://\""
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:95
-#, php-format
-msgid "Update %s failed. See error logs."
+#: ../../addon/pumpio/Mod_Pumpio.php:75
+msgid "Pump.io username"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:45 ../../Zotlabs/Lib/Connect.php:146
-msgid "Channel is blocked on this site."
+#: ../../addon/pumpio/Mod_Pumpio.php:75
+msgid "Without the servername"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:50
-msgid "Channel location missing."
+#: ../../addon/pumpio/Mod_Pumpio.php:86
+msgid "You are not authenticated to pumpio"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:104
-msgid "Remote channel or protocol unavailable."
+#: ../../addon/pumpio/Mod_Pumpio.php:88
+msgid "(Re-)Authenticate your pump.io connection"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:140
-msgid "Channel discovery failed."
+#: ../../addon/pumpio/Mod_Pumpio.php:92
+msgid "Post to pump.io by default"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:158
-msgid "Protocol disabled."
+#: ../../addon/pumpio/Mod_Pumpio.php:96
+msgid "Should posts be public"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:170
-msgid "Cannot connect to yourself."
+#: ../../addon/pumpio/Mod_Pumpio.php:100
+msgid "Mirror all public posts"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:275
-msgid "error saving data"
+#: ../../addon/pumpio/Mod_Pumpio.php:110
+msgid "Pump.io Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Lib/Libzot.php:688
-msgid "Unable to verify channel signature"
+#: ../../addon/wppost/wppost.php:47
+msgid "Post to WordPress"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:108
-#: ../../Zotlabs/Access/PermissionRoles.php:386
-msgid "Public"
+#: ../../addon/wppost/Mod_Wppost.php:30
+msgid "Wordpress Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:109
-msgid "Anybody in the $Projectname network"
+#: ../../addon/wppost/Mod_Wppost.php:67
+msgid "WordPress username"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:110
-#, php-format
-msgid "Any account on %s"
+#: ../../addon/wppost/Mod_Wppost.php:71
+msgid "WordPress password"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:111
-msgid "Any of my connections"
+#: ../../addon/wppost/Mod_Wppost.php:75
+msgid "WordPress API URL"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:112
-msgid "Only connections I specifically allow"
+#: ../../addon/wppost/Mod_Wppost.php:76
+msgid "Typically https://your-blog.tld/xmlrpc.php"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:113
-msgid "Anybody authenticated (could include visitors from other networks)"
+#: ../../addon/wppost/Mod_Wppost.php:79
+msgid "WordPress blogid"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:114
-msgid "Any connections including those who haven't yet been approved"
+#: ../../addon/wppost/Mod_Wppost.php:80
+msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:150
-msgid ""
-"This is your default setting for the audience of your normal stream, and "
-"posts."
+#: ../../addon/wppost/Mod_Wppost.php:84
+msgid "Post to WordPress by default"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:151
-msgid ""
-"This is your default setting for who can view your default channel profile"
+#: ../../addon/wppost/Mod_Wppost.php:88
+msgid "Forward comments (requires hubzilla_wp plugin)"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:152
-msgid "This is your default setting for who can view your connections"
+#: ../../addon/wppost/Mod_Wppost.php:104
+msgid "Wordpress Post"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:153
-msgid ""
-"This is your default setting for who can view your file storage and photos"
+#: ../../addon/articles/Mod_Article_edit.php:123
+msgid "Edit Article"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:154
-msgid "This is your default setting for the audience of your webpages"
+#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160
+#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:331
+msgid "Articles"
msgstr ""
-#: ../../Zotlabs/Lib/Libsync.php:824
-#, php-format
-msgid "Unable to verify site signature for %s"
+#: ../../addon/articles/articles.php:51
+msgid "View Articles"
msgstr ""
-#: ../../Zotlabs/Lib/Permcat.php:83
-msgctxt "permcat"
-msgid "Default"
+#: ../../addon/articles/Mod_Articles.php:119
+msgid "Add Article"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:339
-msgid "Social Networking"
+#: ../../addon/wiki/Mod_Wiki.php:36
+#: ../../addon/flashcards/Mod_Flashcards.php:52
+#: ../../addon/faces/Mod_Faces.php:64 ../../addon/cart/cart.php:1458
+msgid "Profile Unavailable."
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:340
-msgid "Social - Federation"
+#: ../../addon/wiki/Mod_Wiki.php:81 ../../addon/cart/manual_payments.php:93
+#: ../../addon/cart/submodules/paypalbuttonV2.php:486
+#: ../../addon/cart/submodules/paypalbutton.php:456
+#: ../../addon/cart/myshop.php:37 ../../addon/cart/cart.php:1609
+msgid "Invalid channel"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:341
-msgid "Social - Mostly Public"
+#: ../../addon/wiki/Mod_Wiki.php:136
+msgid "Error retrieving wiki"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:342
-msgid "Social - Restricted"
+#: ../../addon/wiki/Mod_Wiki.php:143
+msgid "Error creating zip file export folder"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:343
-msgid "Social - Private"
+#: ../../addon/wiki/Mod_Wiki.php:194
+msgid "Error downloading wiki: "
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:346
-msgid "Community Forum"
+#: ../../addon/wiki/Mod_Wiki.php:209 ../../addon/wiki/Widget/Wiki_list.php:23
+#: ../../addon/wiki/wiki.php:45 ../../addon/wiki/wiki.php:98
+msgid "Wikis"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:347
-msgid "Forum - Mostly Public"
+#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407
+msgid "Download"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:348
-msgid "Forum - Restricted"
+#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406
+#: ../../Zotlabs/Module/Webpages.php:255 ../../Zotlabs/Module/Layouts.php:196
+#: ../../Zotlabs/Module/Pubsites.php:63 ../../Zotlabs/Module/Blocks.php:164
+msgid "View"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:349
-msgid "Forum - Private"
+#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137
+#: ../../Zotlabs/Module/Profiles.php:852
+msgid "Create New"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:352
-msgid "Feed Republish"
+#: ../../addon/wiki/Mod_Wiki.php:219
+msgid "Wiki name"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:353
-msgid "Feed - Mostly Public"
+#: ../../addon/wiki/Mod_Wiki.php:220
+msgid "Content type"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:354
-msgid "Feed - Restricted"
+#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:382
+msgid "Type"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:357
-msgid "Special Purpose"
+#: ../../addon/wiki/Mod_Wiki.php:223
+msgid "Any&nbsp;type"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:358
-msgid "Special - Celebrity/Soapbox"
+#: ../../addon/wiki/Mod_Wiki.php:230
+msgid "Lock content type"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:359
-msgid "Special - Group Repository"
+#: ../../addon/wiki/Mod_Wiki.php:231
+msgid "Create a status post for this wiki"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:363
-msgid "Custom/Expert Mode"
+#: ../../addon/wiki/Mod_Wiki.php:232
+msgid "Edit Wiki Name"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:387
-msgid "Personal"
+#: ../../addon/wiki/Mod_Wiki.php:277
+msgid "Wiki not found"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:388
-msgid "Community forum"
+#: ../../addon/wiki/Mod_Wiki.php:303
+msgid "Rename page"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:389
-msgid "Custom"
+#: ../../addon/wiki/Mod_Wiki.php:318
+msgid "Error retrieving page content"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:56
-msgid "Can view my channel stream and posts"
+#: ../../addon/wiki/Mod_Wiki.php:326 ../../addon/wiki/Mod_Wiki.php:328
+msgid "New page"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:57
-msgid "Can send me their channel stream and posts"
+#: ../../addon/wiki/Mod_Wiki.php:363
+msgid "Revision Comparison"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:58
-msgid "Can view my default channel profile"
+#: ../../addon/wiki/Mod_Wiki.php:364
+#: ../../addon/wiki/Lib/NativeWikiPage.php:595
+#: ../../addon/wiki/Widget/Wiki_page_history.php:31
+msgid "Revert"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:59
-msgid "Can view my connections"
+#: ../../addon/wiki/Mod_Wiki.php:371
+msgid "Short description of your changes (optional)"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:60
-msgid "Can view my file storage and photos"
+#: ../../addon/wiki/Mod_Wiki.php:391
+msgid "New page name"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:61
-msgid "Can upload/modify my file storage and photos"
+#: ../../addon/wiki/Mod_Wiki.php:396
+msgid "Embed image from photo albums"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:62
-msgid "Can view my channel webpages"
+#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:557
+msgid "Choose a different album"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:63
-msgid "Can view my wiki pages"
+#: ../../addon/wiki/Mod_Wiki.php:407
+msgid "History"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:64
-msgid "Can create/edit my channel webpages"
+#: ../../addon/wiki/Mod_Wiki.php:485
+msgid "Error creating wiki. Invalid name."
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:65
-msgid "Can write to my wiki pages"
+#: ../../addon/wiki/Mod_Wiki.php:492
+msgid "A wiki with this name already exists."
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:66
-msgid "Can post on my channel (wall) page"
+#: ../../addon/wiki/Mod_Wiki.php:505
+msgid "Wiki created, but error creating Home page."
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:67
-msgid "Can comment on or like my posts"
+#: ../../addon/wiki/Mod_Wiki.php:512
+msgid "Error creating wiki"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:68
-msgid "Can send me direct messages"
+#: ../../addon/wiki/Mod_Wiki.php:536
+msgid "Error updating wiki. Invalid name."
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:69
-msgid "Can like/dislike profiles and profile things"
+#: ../../addon/wiki/Mod_Wiki.php:555
+msgid "Error updating wiki"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:70
-msgid "Can chat with me"
+#: ../../addon/wiki/Mod_Wiki.php:570
+msgid "Wiki delete permission denied."
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:71
-msgid "Can source/mirror my public posts in derived channels"
+#: ../../addon/wiki/Mod_Wiki.php:580
+msgid "Error deleting wiki"
msgstr ""
-#: ../../Zotlabs/Access/Permissions.php:73
-msgid "Can administer my channel"
+#: ../../addon/wiki/Mod_Wiki.php:613
+msgid "New page created"
msgstr ""
-#: ../../Zotlabs/Web/Router.php:188 ../../Zotlabs/Module/Help.php:172
-#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Page.php:136
-#: ../../Zotlabs/Module/Display.php:155
-#: ../../extend/addon/hzaddons/articles/articles.php:105
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:545
-#: ../../extend/addon/hzaddons/cards/cards.php:104
-msgid "Page not found."
+#: ../../addon/wiki/Mod_Wiki.php:739
+msgid "Cannot delete Home"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:292
-msgid "Change filename to"
+#: ../../addon/wiki/Mod_Wiki.php:815
+msgid "Current Revision"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394
-msgid "Select a target location"
+#: ../../addon/wiki/Mod_Wiki.php:815
+msgid "Selected Revision"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:395
-msgid "Copy to target location"
+#: ../../addon/wiki/Mod_Wiki.php:870
+msgid "You must be authenticated."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:393
-msgid "Set permissions for all files and sub folders"
+#: ../../addon/wiki/Mod_Wiki.php:899 ../../addon/wiki/Widget/Wiki_pages.php:64
+msgid "Add new page"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:312
-msgid "Notify your contacts about this file"
+#: ../../addon/wiki/Mod_Wiki.php:906 ../../addon/wiki/Widget/Wiki_pages.php:71
+#: ../../Zotlabs/Module/Dreport.php:138
+msgid "Options"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:351
-msgid "File category"
+#: ../../addon/wiki/Lib/NativeWiki.php:146
+msgid "Wiki updated successfully"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:365
-msgid "Total"
+#: ../../addon/wiki/Lib/NativeWiki.php:206
+msgid "Wiki files deleted successfully"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:367
-msgid "Shared"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:42
+#: ../../addon/wiki/Lib/NativeWikiPage.php:110
+msgid "(No Title)"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:368 ../../Zotlabs/Storage/Browser.php:545
-#: ../../Zotlabs/Module/Menu.php:182 ../../Zotlabs/Module/New_channel.php:190
-#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Connedit.php:747
-#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/Webpages.php:249
-#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1383
-#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184
-msgid "Create"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:124
+msgid "Wiki page create failed."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:369
-msgid "Add Files"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:138
+msgid "Wiki not found."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:381 ../../Zotlabs/Module/Oauth.php:111
-#: ../../Zotlabs/Module/Oauth.php:137 ../../Zotlabs/Module/Oauth2.php:116
-#: ../../Zotlabs/Module/Oauth2.php:144 ../../Zotlabs/Module/Chat.php:256
-#: ../../Zotlabs/Module/Connedit.php:732
-#: ../../Zotlabs/Module/Admin/Channels.php:181
-#: ../../Zotlabs/Module/Sharedwithme.php:107 ../../Zotlabs/Module/Cdav.php:1368
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:172
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:588
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:221
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:28
-msgid "Name"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:149
+msgid "Destination name already exists"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:382
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:222
-msgid "Type"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:182
+#: ../../addon/wiki/Lib/NativeWikiPage.php:377
+msgid "Page not found"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:384
-#: ../../Zotlabs/Module/Sharedwithme.php:110
-msgid "Last Modified"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:212
+msgid "Error reading page content"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:385
-msgid "parent"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:368
+#: ../../addon/wiki/Lib/NativeWikiPage.php:426
+#: ../../addon/wiki/Lib/NativeWikiPage.php:494
+#: ../../addon/wiki/Lib/NativeWikiPage.php:538
+msgid "Error reading wiki"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:390
-#: ../../Zotlabs/Module/Filestorage.php:206
-msgid "Copy/paste this code to attach file to a post"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:412
+msgid "Page update failed."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:391
-#: ../../Zotlabs/Module/Filestorage.php:207
-msgid "Copy/paste this URL to link file from a web page"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:448
+msgid "Nothing deleted"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:403
-msgid "Select All"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:518
+msgid "Compare: object not found."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:404
-msgid "Bulk Actions"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:525
+msgid "Page updated"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:405
-msgid "Adjust Permissions"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:533
+msgid "Wiki resource_id required for git commit"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:406
-msgid "Move or Copy"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:593
+#: ../../addon/wiki/Widget/Wiki_page_history.php:29
+msgctxt "wiki_history"
+msgid "Message"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:408
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:215
-msgid "Download"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:594
+#: ../../addon/wiki/Widget/Wiki_page_history.php:30
+msgid "Date"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:409
-msgid "Info"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:596
+#: ../../addon/wiki/Widget/Wiki_page_history.php:32
+msgid "Compare"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:410
-msgid "Rename"
+#: ../../addon/wiki/Widget/Wiki_pages.php:58
+msgid "Wiki Pages"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:412
-msgid "Attachment BBcode"
+#: ../../addon/wiki/Widget/Wiki_pages.php:69
+msgid "Page name"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:413
-msgid "Embed BBcode"
+#: ../../addon/donate/donate.php:21
+msgid "Project Servers and Resources"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:414
-msgid "Link BBcode"
+#: ../../addon/donate/donate.php:22
+msgid "Project Creator and Tech Lead"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:487
-#, php-format
-msgid "You are using %1$s of your available file storage."
+#: ../../addon/donate/donate.php:49
+msgid ""
+"And the hundreds of other people and organisations who helped make the "
+"Hubzilla possible."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:492
-#, php-format
-msgid "You are using %1$s of %2$s available file storage. (%3$s&#37;)"
+#: ../../addon/donate/donate.php:52
+msgid ""
+"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving "
+"their time and expertise - and often paying out of pocket for services they "
+"share with others."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:503
-msgid "WARNING:"
+#: ../../addon/donate/donate.php:53
+msgid ""
+"There is no corporate funding and no ads, and we do not collect and sell "
+"your personal information. (We don't control your personal information - "
+"<strong>you do</strong>.)"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:544
-msgid "Create new folder"
+#: ../../addon/donate/donate.php:54
+msgid ""
+"Help support our ground-breaking work in decentralisation, web identity, and "
+"privacy."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:546
-msgid "Upload file"
+#: ../../addon/donate/donate.php:56
+msgid ""
+"Your donations keep servers and services running and also helps us to "
+"provide innovative new features and continued development."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:547 ../../Zotlabs/Module/Photos.php:681
-#: ../../Zotlabs/Module/Cover_photo.php:381
-#: ../../Zotlabs/Module/Profile_photo.php:547
-#: ../../Zotlabs/Module/Embedphotos.php:189 ../../Zotlabs/Widget/Album.php:103
-#: ../../Zotlabs/Widget/Portfolio.php:114 ../../Zotlabs/Widget/Cdav.php:152
-#: ../../Zotlabs/Widget/Cdav.php:188
-msgid "Upload"
+#: ../../addon/donate/donate.php:59
+msgid "Donate"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:558
-msgid "Drop files here to immediately upload"
+#: ../../addon/donate/donate.php:61
+msgid ""
+"Choose a project, developer, or public hub to support with a one-time "
+"donation"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:559
-#: ../../Zotlabs/Module/Filestorage.php:211
-msgid "Show in your contacts shared folder"
+#: ../../addon/donate/donate.php:62
+msgid "Donate Now"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:561
+#: ../../addon/donate/donate.php:63
msgid ""
-"You can select files via the upload button or drop them right here or into "
-"an existing folder."
+"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:68
-msgid "Unable to update menu."
+#: ../../addon/donate/donate.php:64
+msgid ""
+"Please indicate if you would like your first name or full name (or nothing) "
+"to appear in our sponsor listing"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:79
-msgid "Unable to create menu."
+#: ../../addon/donate/donate.php:65
+msgid "Sponsor"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
-msgid "Menu Name"
+#: ../../addon/donate/donate.php:68
+msgid "Special thanks to: "
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:161
-msgid "Unique name (not visible on webpage) - required"
+#: ../../addon/xmpp/xmpp.php:44
+msgid "Jabber BOSH host"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
-msgid "Menu Title"
+#: ../../addon/xmpp/xmpp.php:45
+msgid "Use central userbase"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:162
-msgid "Visible on webpage - leave empty for no title"
+#: ../../addon/xmpp/xmpp.php:45
+msgid ""
+"If enabled, members will automatically login to an ejabberd server that has "
+"to be installed on this machine with synchronized credentials via the "
+"\"auth_ejabberd.php\" script."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:163
-msgid "Allow Bookmarks"
+#: ../../addon/xmpp/Mod_Xmpp.php:23
+msgid "XMPP settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-msgid "Menu may be used to store saved bookmarks"
+#: ../../addon/xmpp/Mod_Xmpp.php:35
+msgid "XMPP App"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
-msgid "Submit and proceed"
+#: ../../addon/xmpp/Mod_Xmpp.php:36
+msgid "Embedded XMPP (Jabber) client"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:177 ../../Zotlabs/Module/Locs.php:124
-msgid "Drop"
+#: ../../addon/xmpp/Mod_Xmpp.php:52
+msgid "Individual credentials"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Layouts.php:189
-#: ../../Zotlabs/Module/Blocks.php:155 ../../Zotlabs/Module/Webpages.php:261
-msgid "Created"
+#: ../../addon/xmpp/Mod_Xmpp.php:58
+msgid "Jabber BOSH server"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Layouts.php:190
-#: ../../Zotlabs/Module/Blocks.php:156 ../../Zotlabs/Module/Webpages.php:262
-msgid "Edited"
+#: ../../addon/xmpp/Mod_Xmpp.php:67
+msgid "XMPP Settings"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:180 ../../Zotlabs/Module/Connections.php:83
-#: ../../Zotlabs/Module/Connections.php:92
-#: ../../Zotlabs/Module/Notifications.php:101
-msgid "New"
+#: ../../addon/notifyadmin/notifyadmin.php:34
+msgid "New registration"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:181
-msgid "Bookmarks allowed"
+#: ../../addon/notifyadmin/notifyadmin.php:40
+#: ../../Zotlabs/Module/Invite.php:266
+#, php-format
+msgid "%s : Message delivery failed."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:183
-msgid "Delete this menu"
+#: ../../addon/notifyadmin/notifyadmin.php:42
+#, php-format
+msgid "Message sent to %s. New account registration: %s"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
-msgid "Edit menu contents"
+#: ../../addon/statusnet/statusnet.php:145
+msgid "Post to GNU social"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:185
-msgid "Edit this menu"
+#: ../../addon/statusnet/statusnet.php:593
+#: ../../Zotlabs/Module/Admin/Site.php:411
+msgid "Site name"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:201
-msgid "Menu could not be deleted."
+#: ../../addon/statusnet/statusnet.php:594
+msgid "API URL"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:209 ../../Zotlabs/Module/Mitem.php:31
-msgid "Menu not found."
+#: ../../addon/statusnet/statusnet.php:595 ../../addon/twitter/twitter.php:505
+#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:139
+#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:145
+msgid "Consumer Secret"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:214
-msgid "Edit Menu"
+#: ../../addon/statusnet/statusnet.php:596 ../../addon/twitter/twitter.php:504
+#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:138
+msgid "Consumer Key"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:218
-msgid "Add or remove entries to this menu"
+#: ../../addon/statusnet/statusnet.php:597
+msgid "Application name"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Menu name"
+#: ../../addon/statusnet/Mod_Statusnet.php:61
+msgid ""
+"Please contact your site administrator.<br />The provided API URL is not "
+"valid."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Must be unique, only seen by you"
+#: ../../addon/statusnet/Mod_Statusnet.php:98
+msgid "We could not contact the GNU social API with the Path you entered."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title"
+#: ../../addon/statusnet/Mod_Statusnet.php:130
+msgid "GNU social settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title as seen by others"
+#: ../../addon/statusnet/Mod_Statusnet.php:179
+msgid "Globally Available GNU social OAuthKeys"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:222
-msgid "Allow bookmarks"
+#: ../../addon/statusnet/Mod_Statusnet.php:181
+msgid ""
+"There are preconfigured OAuth key pairs for some GNU social servers "
+"available. If you are using one of them, please use these credentials.<br /"
+">If not feel free to connect to any other GNU social instance (see below)."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:232 ../../Zotlabs/Module/Xchan.php:41
-#: ../../Zotlabs/Module/Mitem.php:134
-msgid "Not found."
+#: ../../addon/statusnet/Mod_Statusnet.php:196
+msgid "Provide your own OAuth Credentials"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:61
-msgid "Documentation Search"
+#: ../../addon/statusnet/Mod_Statusnet.php:198
+msgid ""
+"No consumer key pair for GNU social found. Register your Hubzilla Account as "
+"an desktop client on your GNU social account, copy the consumer key pair "
+"here and enter the API base root.<br />Before you register your own OAuth "
+"key pair ask the administrator if there is already a key pair for this "
+"Hubzilla installation at your favourite GNU social installation."
msgstr ""
-#: ../../Zotlabs/Module/Help.php:169
-msgid "Not Found"
+#: ../../addon/statusnet/Mod_Statusnet.php:202
+msgid "OAuth Consumer Key"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:222
-msgid "$Projectname Documentation"
+#: ../../addon/statusnet/Mod_Statusnet.php:206
+msgid "OAuth Consumer Secret"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:233
-msgid "Contents"
+#: ../../addon/statusnet/Mod_Statusnet.php:210
+msgid "Base API Path"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:240
-msgid "Members"
+#: ../../addon/statusnet/Mod_Statusnet.php:210
+msgid "Remember the trailing /"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:241
-msgid "Administrators"
+#: ../../addon/statusnet/Mod_Statusnet.php:214
+msgid "GNU social application name"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:242
-msgid "Developers"
+#: ../../addon/statusnet/Mod_Statusnet.php:237
+msgid ""
+"To connect to your GNU social account click the button below to get a "
+"security code from GNU social which you have to copy into the input box "
+"below and submit the form. Only your <strong>public</strong> posts will be "
+"posted to GNU social."
msgstr ""
-#: ../../Zotlabs/Module/Help.php:243
-msgid "Tutorials"
+#: ../../addon/statusnet/Mod_Statusnet.php:239
+msgid "Log in with GNU social"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:261
-msgid "Help:"
+#: ../../addon/statusnet/Mod_Statusnet.php:242
+msgid "Copy the security code from GNU social here"
msgstr ""
-#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95
-#: ../../Zotlabs/Module/Editlayout.php:79 ../../Zotlabs/Module/Editpost.php:24
-#: ../../Zotlabs/Module/Editwebpage.php:80
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:17
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:33
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:17
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:33
-msgid "Item not found"
+#: ../../addon/statusnet/Mod_Statusnet.php:252
+msgid "Cancel Connection Process"
msgstr ""
-#: ../../Zotlabs/Module/Editblock.php:113 ../../Zotlabs/Module/Blocks.php:97
-#: ../../Zotlabs/Module/Blocks.php:153
-msgid "Block Name"
+#: ../../addon/statusnet/Mod_Statusnet.php:254
+msgid "Current GNU social API is"
msgstr ""
-#: ../../Zotlabs/Module/Editblock.php:138
-msgid "Edit Block"
+#: ../../addon/statusnet/Mod_Statusnet.php:258
+msgid "Cancel GNU social Connection"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:150 ../../Zotlabs/Module/Hcard.php:37
-#: ../../Zotlabs/Module/Profile.php:62
-msgid "Posts and comments"
+#: ../../addon/statusnet/Mod_Statusnet.php:270
+#: ../../addon/twitter/Mod_Twitter.php:145
+msgid "Currently connected to: "
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:157 ../../Zotlabs/Module/Hcard.php:44
-#: ../../Zotlabs/Module/Profile.php:69
-msgid "Only posts"
+#: ../../addon/statusnet/Mod_Statusnet.php:275
+msgid ""
+"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to GNU social will lead the visitor to a blank page "
+"informing the visitor that the access to your profile has been restricted."
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:195 ../../Zotlabs/Module/Oep.php:82
-#: ../../Zotlabs/Module/Pubstream.php:55 ../../Zotlabs/Module/Display.php:53
-msgid "Malformed message id."
+#: ../../addon/statusnet/Mod_Statusnet.php:280
+msgid "Post to GNU social by default"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:231
-msgid "Insufficient permissions. Request redirected to profile page."
+#: ../../addon/statusnet/Mod_Statusnet.php:280
+msgid ""
+"If enabled your public postings will be posted to the associated GNU-social "
+"account by default"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:246 ../../Zotlabs/Module/Network.php:172
-msgid "Search Results For:"
+#: ../../addon/statusnet/Mod_Statusnet.php:289
+#: ../../addon/twitter/Mod_Twitter.php:169
+msgid "Clear OAuth configuration"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:279 ../../Zotlabs/Module/Rpost.php:111
-#: ../../Zotlabs/Module/Network.php:213 ../../Zotlabs/Module/Hq.php:99
-#: ../../Zotlabs/Module/Pubstream.php:98 ../../Zotlabs/Module/Display.php:95
-msgid "Reset form"
+#: ../../addon/statusnet/Mod_Statusnet.php:301
+msgid "GNU-Social Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:501 ../../Zotlabs/Module/Display.php:320
-msgid ""
-"You must enable javascript for your browser to be able to view this content."
+#: ../../addon/flashcards/Mod_Flashcards.php:225
+msgid "Not allowed."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:148 ../../Zotlabs/Module/Manage.php:130
-#, php-format
-msgid "You have created %1$.0f of %2$.0f allowed channels."
+#: ../../addon/flashcards/Mod_Flashcards.php:268
+#: ../../Zotlabs/Module/Filestorage.php:202
+msgid "Set/edit permissions"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:160
-msgid "Your real name is recommended."
+#: ../../addon/flashcards/Mod_Flashcards.php:291
+#: ../../addon/flashcards/Mod_Flashcards.php:292
+#: ../../Zotlabs/Module/Display.php:59 ../../Zotlabs/Module/Display.php:120
+#: ../../Zotlabs/Module/Display.php:396 ../../Zotlabs/Module/Thing.php:120
+#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Viewsrc.php:25
+#: ../../Zotlabs/Module/Admin/Themes.php:73
+#: ../../Zotlabs/Module/Admin/Addons.php:42 ../../Zotlabs/Module/Admin.php:63
+msgid "Item not found."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:161
-msgid ""
-"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation "
-"Group\""
+#: ../../addon/ljpost/ljpost.php:49
+msgid "Post to Livejournal"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:166
-msgid ""
-"This will be used to create a unique network address (like an email address)."
+#: ../../addon/ljpost/ljpost.php:127
+msgid "Posted by"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:168
-msgid "Allowed characters are a-z 0-9, - and _"
+#: ../../addon/ljpost/Mod_Ljpost.php:53
+msgid "Livejournal username"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:176
-msgid "Channel name"
+#: ../../addon/ljpost/Mod_Ljpost.php:57
+msgid "Livejournal password"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:178
-#: ../../Zotlabs/Module/Register.php:513
-msgid "Choose a short nickname"
+#: ../../addon/ljpost/Mod_Ljpost.php:61
+msgid "Post to Livejournal by default"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:179
-#: ../../Zotlabs/Module/Settings/Channel.php:234
-msgid "Channel role"
+#: ../../addon/ljpost/Mod_Ljpost.php:65
+msgid "Send wall-to-wall posts to Livejournal"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:182
-msgid "Create a Channel"
+#: ../../addon/ljpost/Mod_Ljpost.php:77
+msgid "Livejournal Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:183
-msgid ""
-"A channel is a unique network identity. It can represent a person (social "
-"network profile), a forum (group), a business or celebrity page, a newsfeed, "
-"and many other things."
+#: ../../addon/cart/manual_payments.php:7
+msgid "Error: order mismatch. Please try again."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:184
-msgid ""
-"or <a href=\"import\">import an existing channel</a> from another location."
+#: ../../addon/cart/manual_payments.php:61
+msgid "Manual payments are not enabled."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:189
-msgid "Validate"
+#: ../../addon/cart/manual_payments.php:68
+#: ../../addon/cart/submodules/paypalbuttonV2.php:417
+#: ../../addon/cart/submodules/paypalbutton.php:392
+#: ../../addon/cart/cart.php:1631
+msgid "Order not found."
msgstr ""
-#: ../../Zotlabs/Module/Oexchange.php:27
-msgid "Unable to find your hub."
+#: ../../addon/cart/manual_payments.php:77
+msgid "Finished"
msgstr ""
-#: ../../Zotlabs/Module/Oexchange.php:41
-msgid "Post successful."
+#: ../../addon/cart/submodules/hzservices.php:65
+msgid "Enable Hubzilla Services Module"
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:50
-msgid "Not a zip file or zip file corrupted."
+#: ../../addon/cart/submodules/hzservices.php:164
+#: ../../addon/cart/submodules/manualcat.php:172
+msgid "New Sku"
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:121
-msgid "Import Items"
+#: ../../addon/cart/submodules/hzservices.php:199
+#: ../../addon/cart/submodules/manualcat.php:208
+msgid "Cannot save edits to locked item."
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:122
-msgid "Use this form to import existing posts and content from an export file."
+#: ../../addon/cart/submodules/hzservices.php:248
+#: ../../addon/cart/submodules/hzservices.php:335
+msgid "SKU not found."
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:123
-#: ../../Zotlabs/Module/Import.php:605
-msgid "File to Upload"
+#: ../../addon/cart/submodules/hzservices.php:301
+#: ../../addon/cart/submodules/hzservices.php:305
+msgid "Invalid Activation Directive."
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:136
-#: ../../Zotlabs/Module/Import.php:108
-msgid "Imported file is empty."
+#: ../../addon/cart/submodules/hzservices.php:376
+#: ../../addon/cart/submodules/hzservices.php:380
+msgid "Invalid Deactivation Directive."
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:159
-msgid "Content import completed"
+#: ../../addon/cart/submodules/hzservices.php:566
+msgid "Add to this privacy group"
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:164
-msgid "Chatroom import completed"
+#: ../../addon/cart/submodules/hzservices.php:582
+msgid "Set user service class"
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:170
-msgid "Channel calendar import 1/2 completed"
+#: ../../addon/cart/submodules/hzservices.php:609
+msgid "You must be using a local account to purchase this service."
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:176
-msgid "Channel calendar import 2/2 completed"
+#: ../../addon/cart/submodules/hzservices.php:649
+#: ../../addon/cart/submodules/manualcat.php:252
+msgid "Changes Locked"
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:181
-msgid "Menu import completed"
+#: ../../addon/cart/submodules/hzservices.php:653
+#: ../../addon/cart/submodules/manualcat.php:256
+msgid "Item available for purchase."
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:186
-msgid "Wiki import completed"
+#: ../../addon/cart/submodules/hzservices.php:660
+#: ../../addon/cart/submodules/manualcat.php:263
+#: ../../addon/cart/widgets/catalogitem.php:57
+msgid "Price"
msgstr ""
-#: ../../Zotlabs/Module/Import_items.php:191
-msgid "Webpages import completed"
+#: ../../addon/cart/submodules/hzservices.php:663
+#: ../../addon/cart/submodules/manualcat.php:266
+msgid "Photo URL"
msgstr ""
-#: ../../Zotlabs/Module/Rpost.php:117 ../../Zotlabs/Module/Editpost.php:113
-msgid "Edit post"
+#: ../../addon/cart/submodules/hzservices.php:667
+msgid "Add buyer to privacy group"
msgstr ""
-#: ../../Zotlabs/Module/Block.php:29 ../../Zotlabs/Module/Page.php:39
-msgid "Invalid item."
+#: ../../addon/cart/submodules/hzservices.php:672
+msgid "Add buyer as connection"
msgstr ""
-#: ../../Zotlabs/Module/Block.php:41 ../../Zotlabs/Module/Chanview.php:95
-#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Page.php:75
-#: ../../Zotlabs/Module/Wall_upload.php:30
-#: ../../Zotlabs/Module/Attach_edit.php:52 ../../Zotlabs/Module/Attach.php:22
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:44
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:44
-msgid "Channel not found."
+#: ../../addon/cart/submodules/hzservices.php:680
+#: ../../addon/cart/submodules/hzservices.php:722
+msgid "Set Service Class"
msgstr ""
-#: ../../Zotlabs/Module/Lang.php:20
-msgid "Language App"
+#: ../../addon/cart/submodules/subscriptions.php:151
+msgid "Enable Subscription Management Module"
msgstr ""
-#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:70
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:35
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:35
-msgid "Not Installed"
+#: ../../addon/cart/submodules/subscriptions.php:223
+msgid ""
+"Cannot include subscription items with different terms in the same order."
msgstr ""
-#: ../../Zotlabs/Module/Email_resend.php:12
-#: ../../Zotlabs/Module/Email_validation.php:25
-msgid "Token verification failed."
+#: ../../addon/cart/submodules/subscriptions.php:372
+msgid "Select Subscription to Edit"
msgstr ""
-#: ../../Zotlabs/Module/Email_resend.php:30
-msgid "Email verification resent"
+#: ../../addon/cart/submodules/subscriptions.php:380
+msgid "Edit Subscriptions"
msgstr ""
-#: ../../Zotlabs/Module/Email_resend.php:33
-msgid "Unable to resend email verification message."
+#: ../../addon/cart/submodules/subscriptions.php:414
+msgid "Subscription SKU"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:180
-msgid "$Projectname Server - Setup"
+#: ../../addon/cart/submodules/subscriptions.php:419
+msgid "Catalog Description"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:184
-msgid "Could not connect to database."
+#: ../../addon/cart/submodules/subscriptions.php:423
+msgid "Subscription available for purchase."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:188
-msgid ""
-"Could not connect to specified site URL. Possible SSL certificate or DNS "
-"issue."
+#: ../../addon/cart/submodules/subscriptions.php:428
+msgid "Maximum active subscriptions to this item per account."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:195
-msgid "Could not create table."
+#: ../../addon/cart/submodules/subscriptions.php:431
+msgid "Subscription price."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:201
-msgid "Your site database has been installed."
+#: ../../addon/cart/submodules/subscriptions.php:435
+msgid "Quantity"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:207
-msgid ""
-"You may need to import the file \"install/schema_xxx.sql\" manually using a "
-"database client."
+#: ../../addon/cart/submodules/subscriptions.php:439
+msgid "Term"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:208 ../../Zotlabs/Module/Setup.php:274
-#: ../../Zotlabs/Module/Setup.php:799
-msgid "Please see the file \"install/INSTALL.txt\"."
+#: ../../addon/cart/submodules/paypalbuttonV2.php:86
+msgid "Enable Paypal Button Module (API-v2)"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:271
-msgid "System check"
+#: ../../addon/cart/submodules/paypalbuttonV2.php:96
+#: ../../addon/cart/submodules/paypalbutton.php:93
+msgid "Use Production Key"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:275 ../../Zotlabs/Module/Photos.php:955
-#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Cdav.php:1027
-msgid "Next"
+#: ../../addon/cart/submodules/paypalbuttonV2.php:103
+#: ../../addon/cart/submodules/paypalbutton.php:100
+msgid "Paypal Sandbox Client Key"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:276
-msgid "Check again"
+#: ../../addon/cart/submodules/paypalbuttonV2.php:110
+#: ../../addon/cart/submodules/paypalbutton.php:107
+msgid "Paypal Sandbox Secret Key"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:297
-msgid "Database connection"
+#: ../../addon/cart/submodules/paypalbuttonV2.php:116
+#: ../../addon/cart/submodules/paypalbutton.php:113
+msgid "Paypal Production Client Key"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:298
-msgid ""
-"In order to install $Projectname we need to know how to connect to your "
-"database."
+#: ../../addon/cart/submodules/paypalbuttonV2.php:123
+#: ../../addon/cart/submodules/paypalbutton.php:120
+msgid "Paypal Production Secret Key"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:299
-msgid ""
-"Please contact your hosting provider or site administrator if you have "
-"questions about these settings."
+#: ../../addon/cart/submodules/paypalbuttonV2.php:271
+#: ../../addon/cart/submodules/paypalbutton.php:252
+msgid "Paypal button payments are not enabled."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:300
+#: ../../addon/cart/submodules/paypalbuttonV2.php:289
+#: ../../addon/cart/submodules/paypalbutton.php:270
msgid ""
-"The database you specify below should already exist. If it does not, please "
-"create it before continuing."
-msgstr ""
-
-#: ../../Zotlabs/Module/Setup.php:304
-msgid "Database Server Name"
+"Paypal button payments are not properly configured. Please choose another "
+"payment option."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:304
-msgid "Default is 127.0.0.1"
+#: ../../addon/cart/submodules/paypalbutton.php:85
+msgid "Enable Paypal Button Module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:305
-msgid "Database Port"
+#: ../../addon/cart/submodules/manualcat.php:61
+msgid "Enable Manual Cart Module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:305
-msgid "Communication port number - use 0 for default"
+#: ../../addon/cart/submodules/orderoptions.php:70
+msgid "Enable Order/Item Options"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:306
-msgid "Database Login Name"
+#: ../../addon/cart/submodules/orderoptions.php:333
+#: ../../addon/cart/submodules/orderoptions.php:357
+#: ../../addon/cart/submodules/orderoptions.php:433
+#: ../../addon/cart/submodules/orderoptions.php:457
+msgid "Label"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:307
-msgid "Database Login Password"
+#: ../../addon/cart/submodules/orderoptions.php:336
+#: ../../addon/cart/submodules/orderoptions.php:360
+#: ../../addon/cart/submodules/orderoptions.php:436
+#: ../../addon/cart/submodules/orderoptions.php:460
+msgid "Instructions"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:308
-msgid "Database Name"
+#: ../../addon/cart/myshop.php:30
+msgid "Access Denied."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:309
-msgid "Database Type"
+#: ../../addon/cart/myshop.php:113 ../../addon/cart/cart.php:1494
+msgid "Order Not Found"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351
-msgid "Site administrator email address"
+#: ../../addon/cart/myshop.php:145 ../../addon/cart/myshop.php:181
+#: ../../addon/cart/myshop.php:215 ../../addon/cart/myshop.php:265
+#: ../../addon/cart/myshop.php:300 ../../addon/cart/myshop.php:323
+msgid "Access Denied"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351
-msgid ""
-"Your account email address must match this in order to use the web admin "
-"panel."
+#: ../../addon/cart/myshop.php:190 ../../addon/cart/myshop.php:224
+#: ../../addon/cart/myshop.php:275 ../../addon/cart/myshop.php:333
+msgid "Invalid Item"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353
-msgid "Website URL"
+#: ../../addon/cart/cart.php:259
+msgid "DB Cleanup Failure"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353
-msgid "Please use SSL (https) URL if available."
+#: ../../addon/cart/cart.php:692
+msgid "[cart] Item Added"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:313 ../../Zotlabs/Module/Setup.php:355
-msgid "Please select a default timezone for your website"
+#: ../../addon/cart/cart.php:1107
+msgid "Order already checked out."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:340
-msgid "Site settings"
+#: ../../addon/cart/cart.php:1416
+msgid "Drop database tables when uninstalling."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:394
-msgid "PHP version 8.0 or greater is required."
+#: ../../addon/cart/cart.php:1423 ../../addon/cart/Settings/Cart.php:129
+msgid "Cart Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:395
-msgid "PHP version"
+#: ../../addon/cart/cart.php:1435 ../../addon/cart/cart.php:1438
+msgid "Shop"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:411
-msgid "Could not find a command line version of PHP in the web server PATH."
+#: ../../addon/cart/cart.php:1598
+msgid "You must be logged into the Grid to shop."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:412
-msgid ""
-"If you don't have a command line version of PHP installed on server, you "
-"will not be able to run background polling via cron."
+#: ../../addon/cart/cart.php:1647
+msgid "Access denied."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:416
-msgid "PHP executable path"
+#: ../../addon/cart/cart.php:1699 ../../addon/cart/cart.php:1842
+msgid "No Order Found"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:416
-msgid ""
-"Enter full path to php executable. You can leave this blank to continue the "
-"installation."
+#: ../../addon/cart/cart.php:1708
+msgid "An unknown error has occurred Please start again."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:421
-msgid "Command line PHP"
+#: ../../addon/cart/cart.php:1851
+msgid "Requirements not met."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:431
-msgid ""
-"Unable to check command line PHP, as shell_exec() is disabled. This is "
-"required."
+#: ../../addon/cart/cart.php:1851
+msgid "Review your order and complete any needed requirements."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:435
-msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
+#: ../../addon/cart/cart.php:1877
+msgid "Invalid Payment Type. Please start again."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:436
-msgid "This is required for message delivery to work."
+#: ../../addon/cart/cart.php:1884
+msgid "Order not found"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:439
-msgid "PHP register_argc_argv"
+#: ../../addon/cart/Settings/Cart.php:58
+msgid "Enable Test Catalog"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:459
-msgid ""
-"This is not sufficient to upload larger images or files. You should be able "
-"to upload at least 4 MB at once."
+#: ../../addon/cart/Settings/Cart.php:70
+msgid "Enable Manual Payments"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:461
-#, php-format
-msgid ""
-"Your max allowed total upload size is set to %s. Maximum size of one file to "
-"upload is set to %s. You are allowed to upload up to %d files at once."
+#: ../../addon/cart/Settings/Cart.php:90
+msgid "Base Merchant Currency"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:467
-msgid "You can adjust these settings in the server php.ini file."
+#: ../../addon/twitter/twitter.php:109
+msgid "Post to Twitter"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:469
-msgid "PHP upload limits"
+#: ../../addon/twitter/Mod_Twitter.php:65
+msgid "Twitter settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:492
+#: ../../addon/twitter/Mod_Twitter.php:101
msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
+"No consumer key pair for Twitter found. Please contact your site "
+"administrator."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:493
+#: ../../addon/twitter/Mod_Twitter.php:123
msgid ""
-"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
-"installation.php\"."
-msgstr ""
-
-#: ../../Zotlabs/Module/Setup.php:496
-msgid "Generate encryption keys"
+"At this Hubzilla instance the Twitter plugin was enabled but you have not "
+"yet connected your account to your Twitter account. To do so click the "
+"button below to get a PIN from Twitter which you have to copy into the input "
+"box below and submit the form. Only your <strong>public</strong> posts will "
+"be posted to Twitter."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:500
-msgid "Error: the sodium encryption library is not installed."
+#: ../../addon/twitter/Mod_Twitter.php:125
+msgid "Log in with Twitter"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:502
-msgid "Generate ed25519 encryption keys"
+#: ../../addon/twitter/Mod_Twitter.php:128
+msgid "Copy the PIN from Twitter here"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:507
+#: ../../addon/twitter/Mod_Twitter.php:150
msgid ""
-"Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are "
-"required."
+"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to Twitter will lead the visitor to a blank page informing "
+"the visitor that the access to your profile has been restricted."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:509
-msgid "Bigmath library (either bcmath or gmp)"
+#: ../../addon/twitter/Mod_Twitter.php:155
+msgid "Twitter post length"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:526
-msgid "libCurl PHP module"
+#: ../../addon/twitter/Mod_Twitter.php:155
+msgid "Maximum tweet length"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:527
-msgid "GD graphics PHP module"
+#: ../../addon/twitter/Mod_Twitter.php:160
+msgid "Send public postings to Twitter by default"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:528
-msgid "OpenSSL PHP module"
+#: ../../addon/twitter/Mod_Twitter.php:160
+msgid ""
+"If enabled your public postings will be posted to the associated Twitter "
+"account by default"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:529
-msgid "PDO database PHP module"
+#: ../../addon/twitter/Mod_Twitter.php:179
+msgid "Twitter Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:530
-msgid "mb_string PHP module"
+#: ../../addon/gravatar/gravatar.php:123
+msgid "generic profile image"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:531
-msgid "xml PHP module"
+#: ../../addon/gravatar/gravatar.php:124
+msgid "random geometric pattern"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:532
-msgid "zip PHP module"
+#: ../../addon/gravatar/gravatar.php:125
+msgid "monster face"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:533
-msgid "intl PHP module"
+#: ../../addon/gravatar/gravatar.php:126
+msgid "computer generated face"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:537 ../../Zotlabs/Module/Setup.php:539
-msgid "Apache mod_rewrite module"
+#: ../../addon/gravatar/gravatar.php:127
+msgid "retro arcade style face"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:537
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
+#: ../../addon/gravatar/gravatar.php:128
+msgid "Hub default profile photo"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:543 ../../Zotlabs/Module/Setup.php:546
-msgid "exec"
+#: ../../addon/gravatar/gravatar.php:143
+msgid "Information"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:543
+#: ../../addon/gravatar/gravatar.php:143
msgid ""
-"Error: exec is required but is either not installed or has been disabled in "
-"php.ini"
+"Libravatar addon is installed, too. Please disable Libravatar addon or this "
+"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
+"nothing was found at Libravatar."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:549 ../../Zotlabs/Module/Setup.php:552
-msgid "shell_exec"
+#: ../../addon/gravatar/gravatar.php:151
+msgid "Default avatar image"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:549
-msgid ""
-"Error: shell_exec is required but is either not installed or has been "
-"disabled in php.ini"
+#: ../../addon/gravatar/gravatar.php:151
+msgid "Select default avatar image if none was found at Gravatar. See README"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:557
-msgid "Error: libCURL PHP module required but not installed."
+#: ../../addon/gravatar/gravatar.php:152
+msgid "Rating of images"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:561
-msgid ""
-"Error: GD PHP module with JPEG support or ImageMagick graphics library "
-"required but not installed."
+#: ../../addon/gravatar/gravatar.php:152
+msgid "Select the appropriate avatar rating for your site. See README"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:565
-msgid "Error: openssl PHP module required but not installed."
+#: ../../addon/gravatar/gravatar.php:165
+msgid "Gravatar settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:571
-msgid ""
-"Error: PDO database PHP module missing a driver for either mysql or pgsql."
+#: ../../addon/hsse/Mod_Hsse.php:15
+msgid "WYSIWYG status editor"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:576
-msgid "Error: PDO database PHP module required but not installed."
+#: ../../addon/hsse/Mod_Hsse.php:24
+msgid "WYSIWYG Status App"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:580
-msgid "Error: mb_string PHP module required but not installed."
+#: ../../addon/hsse/Mod_Hsse.php:32
+msgid "WYSIWYG Status"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:584
-msgid "Error: xml PHP module required for DAV but not installed."
+#: ../../addon/redfiles/redfiles.php:119
+msgid "Redmatrix File Storage Import"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:588
-msgid "Error: zip PHP module required but not installed."
+#: ../../addon/redfiles/redfiles.php:120
+msgid "This will import all your Redmatrix cloud files to this channel."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:592
-msgid "Error: intl PHP module required but not installed."
+#: ../../addon/openstreetmap/openstreetmap.php:125
+msgid "View Larger"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:611 ../../Zotlabs/Module/Setup.php:620
-msgid ".htconfig.php is writable"
+#: ../../addon/openstreetmap/openstreetmap.php:148
+msgid "Tile Server URL"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:616
+#: ../../addon/openstreetmap/openstreetmap.php:148
msgid ""
-"The web installer needs to be able to create a file called \".htconfig.php\" "
-"in the top folder of your web server and it is unable to do so."
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
+"target=\"_blank\">public tile servers</a>"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:617
-msgid ""
-"This is most often a permission setting, as the web server may not be able "
-"to write files in your folder - even if you can."
+#: ../../addon/openstreetmap/openstreetmap.php:149
+msgid "Nominatim (reverse geocoding) Server URL"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:618
-msgid "Please see install/INSTALL.txt for additional information."
+#: ../../addon/openstreetmap/openstreetmap.php:149
+msgid ""
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
+"target=\"_blank\">Nominatim servers</a>"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:634
-msgid ""
-"This software uses the Smarty3 template engine to render its web views. "
-"Smarty3 compiles templates to PHP to speed up rendering."
+#: ../../addon/openstreetmap/openstreetmap.php:150
+msgid "Default zoom"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:635
-#, php-format
+#: ../../addon/openstreetmap/openstreetmap.php:150
msgid ""
-"In order to store these compiled templates, the web server needs to have "
-"write access to the directory %s under the top level web folder."
+"The default zoom level. (1:world, 18:highest, also depends on tile server)"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:636 ../../Zotlabs/Module/Setup.php:657
-msgid ""
-"Please ensure that the user that your web server runs as (e.g. www-data) has "
-"write access to this folder."
+#: ../../addon/openstreetmap/openstreetmap.php:151
+msgid "Include marker on map"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:637
-#, php-format
-msgid ""
-"Note: as a security measure, you should give the web server write access to "
-"%s only--not the template files (.tpl) that it contains."
+#: ../../addon/openstreetmap/openstreetmap.php:151
+msgid "Include a marker on the map."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:640
-#, php-format
-msgid "%s is writable"
+#: ../../addon/workflow/workflow.php:224
+msgid "Workflow user."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:656
-msgid ""
-"This software uses the store directory to save uploaded files. The web "
-"server needs to have write access to the store directory under the top level "
-"web folder"
+#: ../../addon/workflow/workflow.php:275
+msgid "This channel"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:660
-msgid "store is writable"
+#: ../../addon/workflow/workflow.php:288 ../../Zotlabs/Module/Locs.php:123
+msgid "Primary"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:692
-msgid ""
-"SSL certificate cannot be validated. Fix certificate or disable https access "
-"to this site."
+#: ../../addon/workflow/workflow.php:330
+msgid "Create New Workflow Item"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:693
-msgid ""
-"If you have https access to your website or allow connections to TCP port "
-"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
-"NOT use self-signed certificates!"
+#: ../../addon/workflow/workflow.php:564 ../../addon/workflow/workflow.php:1466
+#: ../../addon/workflow/workflow.php:1485
+msgid "Workflow"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:694
-msgid ""
-"This restriction is incorporated because public posts from you may for "
-"example contain references to images on your own hub."
+#: ../../addon/workflow/workflow.php:1454
+msgid "No Workflows Available"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:695
-msgid ""
-"If your certificate is not recognized, members of other sites (who may "
-"themselves have valid certificates) will get a warning message on their own "
-"site complaining about security issues."
+#: ../../addon/workflow/workflow.php:1484
+msgid "Add item to which workflow"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:696
-msgid ""
-"This can cause usability issues elsewhere (not just on your own site) so we "
-"must insist on this requirement."
+#: ../../addon/workflow/workflow.php:1544
+#: ../../addon/workflow/workflow.php:1663
+msgid "Create Workflow Item"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:697
-msgid ""
-"Providers are available that issue free certificates which are browser-valid."
+#: ../../addon/workflow/workflow.php:2661
+msgid "Link"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:698
-msgid ""
-"If you are confident that the certificate is valid and signed by a trusted "
-"authority, check to see if you have failed to install an intermediate cert. "
-"These are not normally required by browsers, but are required for server-to-"
-"server communications."
+#: ../../addon/workflow/workflow.php:2663
+msgid "Web link."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:700
-msgid "SSL certificate validation"
+#: ../../addon/workflow/workflow.php:2682
+#: ../../addon/workflow/workflow.php:2751 ../../Zotlabs/Module/Connedit.php:734
+#: ../../Zotlabs/Module/Cdav.php:1370
+msgid "Title"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:706
-msgid ""
-"Url rewrite in .htaccess is not working. Check your server configuration."
-"Test: "
+#: ../../addon/workflow/workflow.php:2684
+#: ../../addon/workflow/workflow.php:2753
+msgid "Brief description or title"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:709
-msgid "Url rewrite is working"
+#: ../../addon/workflow/workflow.php:2690 ../../Zotlabs/Lib/Apps.php:374
+#: ../../Zotlabs/Widget/Notes.php:41
+msgid "Notes"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:722
-msgid ""
-"The database configuration file \".htconfig.php\" could not be written. "
-"Please use the enclosed text to create a configuration file in your web "
-"server root."
+#: ../../addon/workflow/workflow.php:2692
+#: ../../addon/workflow/workflow.php:2761
+msgid "Notes and Info"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:751
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:401
-msgid "Errors encountered creating database tables."
+#: ../../addon/workflow/workflow.php:2697
+#: ../../Zotlabs/Module/Admin/Queue.php:47
+msgid "Priority"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:797
-msgid "<h1>What next?</h1>"
+#: ../../addon/workflow/workflow.php:2699
+msgid "Used to order links"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:798
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
+#: ../../addon/workflow/workflow.php:2759
+msgid "Body"
msgstr ""
-#: ../../Zotlabs/Module/Bookmarks.php:62
-msgid "Bookmark added"
+#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:101
+msgid "Workflow Settings"
msgstr ""
-#: ../../Zotlabs/Module/Bookmarks.php:101
-msgid "My Connections Bookmarks"
+#: ../../addon/workflow/Settings/WorkflowSettingsUtil.php:145
+msgid "Workflow settings"
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:19
-msgid "Update to Hubzilla 5.0 step 2"
+#: ../../addon/skeleton/Mod_Skeleton.php:38
+msgid "Some setting"
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:21
-msgid "To complete the update please run"
+#: ../../addon/skeleton/Mod_Skeleton.php:38
+msgid "A setting"
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:23
-msgid "php util/z6convert.php"
+#: ../../addon/skeleton/Mod_Skeleton.php:46
+msgid "Skeleton Settings"
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:25
-msgid "from the terminal."
+#: ../../addon/authchoose/Mod_Authchoose.php:30
+msgid ""
+"Allow magic authentication only to websites of your immediate connections"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:85
-msgid "Email resent"
+#: ../../addon/authchoose/Mod_Authchoose.php:36
+msgid "Authchoose"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:85
-msgid "Email resend failed"
+#: ../../addon/content_import/Mod_content_import.php:27
+msgid "No server specified"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:110
-msgid "Verification successful"
+#: ../../addon/content_import/Mod_content_import.php:72
+msgid "Posts imported"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:154
-msgid "Account successfull created"
+#: ../../addon/content_import/Mod_content_import.php:112
+msgid "Files imported"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:212
-msgid "Channel successfull created"
+#: ../../addon/content_import/Mod_content_import.php:133
+#: ../../Zotlabs/Lib/Apps.php:338
+msgid "Content Import"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:218
-msgid "Automatic channel creation failed. Please create a channel."
+#: ../../addon/content_import/Mod_content_import.php:134
+msgid ""
+"This will import all your conversations and cloud files from a cloned "
+"channel on another server. This may take a while if you have lots of posts "
+"and or files."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:230
-msgid "Account creation error"
+#: ../../addon/content_import/Mod_content_import.php:135
+msgid "Include posts"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:242
-msgid "Verify failed"
+#: ../../addon/content_import/Mod_content_import.php:135
+msgid "Conversations, Articles, Cards, and other posted content"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:247
-msgid "Token verification failed"
+#: ../../addon/content_import/Mod_content_import.php:136
+msgid "Include files"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:252
-msgid "Request not inside time frame"
+#: ../../addon/content_import/Mod_content_import.php:136
+msgid "Files, Photos and other cloud storage"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:258 ../../Zotlabs/Module/Regate.php:288
-msgid "Identity unknown"
+#: ../../addon/content_import/Mod_content_import.php:137
+msgid "Original Server base URL"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:264
-msgid "dId2 mistaken"
+#: ../../addon/mdpost/mdpost.php:42
+msgid "Use markdown for editing posts"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:292
-msgid "Your Registration ID"
+#: ../../addon/rtof/Mod_Rtof.php:24
+msgid "Friendica Crosspost Connector Settings saved."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:305 ../../Zotlabs/Module/Regate.php:397
-#: ../../Zotlabs/Module/Regate.php:429
-msgid "Registration verification"
+#: ../../addon/rtof/Mod_Rtof.php:47
+msgid "Send public postings to Friendica by default"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:312 ../../Zotlabs/Module/Regate.php:434
-msgid "Hold on, you can start verification in"
+#: ../../addon/rtof/Mod_Rtof.php:51
+msgid "Friendica API Path"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:313
-msgid "Please remember your verification token for ID"
+#: ../../addon/rtof/Mod_Rtof.php:55
+msgid "Friendica login name"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:315
-msgid "Token validity"
+#: ../../addon/rtof/Mod_Rtof.php:59
+msgid "Friendica password"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:351
-msgid "Resend email"
+#: ../../addon/rtof/Mod_Rtof.php:67
+msgid "Friendica Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:356
-msgid "Registration status"
+#: ../../addon/rtof/rtof.php:51
+msgid "Post to Friendica"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:359
-msgid "Verification successful!"
+#: ../../addon/ldapauth/ldapauth.php:101
+msgid "An account has been created for you."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:360
-msgid "Your login ID is"
+#: ../../addon/ldapauth/ldapauth.php:108
+msgid "Authentication successful but rejected: account creation is disabled."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:361
-msgid ""
-"After your account has been approved by our administrator you will be able "
-"to login with your login ID and your provided password."
+#: ../../addon/nofed/nofed.php:47
+msgid "Federate"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:373
-msgid "Registration request revoked"
+#: ../../addon/nofed/Mod_Nofed.php:21
+msgid "nofed Settings saved."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:374
-msgid "Sorry for any inconvience. Thank you for your response."
+#: ../../addon/nofed/Mod_Nofed.php:40
+msgid "Federate posts by default"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:398
-msgid "Please enter your verification token for ID"
+#: ../../addon/nofed/Mod_Nofed.php:48
+msgid "No Federation"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:399 ../../Zotlabs/Module/Regate.php:426
-msgid "Please check your email!"
+#: ../../addon/photocache/Mod_Photocache.php:27
+msgid "Photo Cache settings saved."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:409
-msgid "Verification token"
+#: ../../addon/photocache/Mod_Photocache.php:43
+msgid ""
+"Saves a copy of images from external sites locally to increase your "
+"anonymity in the web."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:420
-msgid "ID expired"
+#: ../../addon/photocache/Mod_Photocache.php:49
+msgid "Minimal photo size for caching"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:435
-msgid "You will require the verification token for ID"
+#: ../../addon/photocache/Mod_Photocache.php:51
+msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:444
-msgid "Unknown or expired ID"
+#: ../../addon/photocache/Mod_Photocache.php:60
+msgid "Photo Cache"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:455
-msgid "dId2 malformed"
+#: ../../addon/gallery/gallery.php:43 ../../addon/gallery/Mod_Gallery.php:135
+msgid "Gallery"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:76 ../../Zotlabs/Module/Api.php:97
-msgid "Authorize application connection"
+#: ../../addon/gallery/gallery.php:46
+msgid "Photo Gallery"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:77
-msgid "Return to your app and insert this Security Code:"
+#: ../../addon/likebanner/likebanner.php:51
+msgid "Your Webbie:"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:87
-msgid "Please login to continue."
+#: ../../addon/likebanner/likebanner.php:54
+msgid "Fontsize (px):"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:99
-msgid ""
-"Do you want to authorize this application to access your posts and contacts, "
-"and/or create new posts for you?"
+#: ../../addon/likebanner/likebanner.php:68
+msgid "Link:"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:62
-msgid "Event can not end before it has started."
+#: ../../addon/likebanner/likebanner.php:70
+msgid "Like us on Hubzilla"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:64
-#: ../../Zotlabs/Module/Channel_calendar.php:72
-#: ../../Zotlabs/Module/Channel_calendar.php:87
-msgid "Unable to generate preview."
+#: ../../addon/likebanner/likebanner.php:72
+msgid "Embed:"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:70
-msgid "Event title and start time are required."
+#: ../../addon/tictac/tictac.php:21
+msgid "Three Dimensional Tic-Tac-Toe"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:85
-#: ../../Zotlabs/Module/Channel_calendar.php:226
-msgid "Event not found."
+#: ../../addon/tictac/tictac.php:54
+msgid "3D Tic-Tac-Toe"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:370
-msgid "Edit event"
+#: ../../addon/tictac/tictac.php:59
+msgid "New game"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:372
-msgid "Delete event"
+#: ../../addon/tictac/tictac.php:60
+msgid "New game with handicap"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:392
-#: ../../Zotlabs/Module/Cal.php:161 ../../Zotlabs/Module/Cdav.php:935
-msgid "Link to source"
+#: ../../addon/tictac/tictac.php:61
+msgid ""
+"Three dimensional tic-tac-toe is just like the traditional game except that "
+"it is played on multiple levels simultaneously. "
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:406
-msgid "calendar"
+#: ../../addon/tictac/tictac.php:62
+msgid ""
+"In this case there are three levels. You win by getting three in a row on "
+"any level, as well as up, down, and diagonally across the different levels."
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:493
-msgid "Failed to remove event"
+#: ../../addon/tictac/tictac.php:64
+msgid ""
+"The handicap game disables the center position on the middle level because "
+"the player claiming this square often has an unfair advantage."
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:101
-msgid "Remote privacy information not available"
+#: ../../addon/tictac/tictac.php:183
+msgid "You go first..."
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203
-#: ../../Zotlabs/Module/Acl.php:124
-msgctxt "acl"
-msgid "Profile"
+#: ../../addon/tictac/tictac.php:188
+msgid "I'm going first this time..."
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:155 ../../Zotlabs/Module/Lockview.php:212
-msgid "Privacy group"
+#: ../../addon/tictac/tictac.php:194
+msgid "You won!"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:183
-msgid "Item"
+#: ../../addon/tictac/tictac.php:200 ../../addon/tictac/tictac.php:225
+msgid "\"Cat\" game!"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:230
-#, php-format
-msgid "Click to copy link to this ressource for guest %s to clipboard"
+#: ../../addon/tictac/tictac.php:223
+msgid "I won!"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:230
-msgid "Link copied"
+#: ../../boot.php:1730
+msgid "Create an account to access services and applications"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:235
-msgid "Access"
+#: ../../boot.php:1748
+msgid "Email or nickname"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:236 ../../Zotlabs/Widget/Tokens.php:49
-msgid "Guest access"
+#: ../../boot.php:1758
+msgid "Password"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:237
-msgid "OCAP access"
+#: ../../boot.php:1759
+msgid "Remember me"
msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:128 ../../Zotlabs/Module/Layouts.php:129
-#: ../../Zotlabs/Module/Layouts.php:187
-msgid "Layout Name"
+#: ../../boot.php:1762
+msgid "Forgot your password?"
msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:129 ../../Zotlabs/Module/Layouts.php:132
-msgid "Layout Description (Optional)"
+#: ../../boot.php:1763 ../../Zotlabs/Module/Lostpass.php:91
+msgid "Password Reset"
msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:137
-msgid "Edit Layout"
+#: ../../boot.php:2641
+#, php-format
+msgid "[$Projectname] Website SSL error for %s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103
-msgid "Album not found."
+#: ../../boot.php:2646
+msgid "Website SSL certificate is not valid. Please correct."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:93
-msgid "Delete Album"
+#: ../../boot.php:2762
+#, php-format
+msgid "[$Projectname] Cron tasks not running on %s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1057
-msgid "Delete Photo"
+#: ../../boot.php:2767
+msgid "Cron/Scheduled tasks not running."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:511
-#: ../../Zotlabs/Module/Viewconnections.php:23
-#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Directory.php:77
-#: ../../Zotlabs/Module/Display.php:27 ../../Zotlabs/Module/Search.php:24
-msgid "Public access denied."
+#: ../../Zotlabs/Lib/Enotify.php:61
+msgid "$Projectname Notification"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:522
-msgid "No photos selected"
+#: ../../Zotlabs/Lib/Enotify.php:64
+msgid "Thank You,"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:571
-msgid "Access to this item is restricted."
+#: ../../Zotlabs/Lib/Enotify.php:67
+#, php-format
+msgid "This email was sent by %1$s at %2$s."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:614
+#: ../../Zotlabs/Lib/Enotify.php:68
#, php-format
-msgid "%1$.2f MB photo storage used."
+msgid ""
+"To stop receiving these messages, please adjust your Notification Settings "
+"at %s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:618
+#: ../../Zotlabs/Lib/Enotify.php:69
#, php-format
-msgid "%1$.2f MB of %2$.2f MB photo storage used."
+msgid "To stop receiving these messages, please adjust your %s."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:660
-msgid "Upload Photos"
+#: ../../Zotlabs/Lib/Enotify.php:69
+#: ../../Zotlabs/Module/Settings/Channel.php:242
+msgid "Notification Settings"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:664
-msgid "Enter an album name"
+#: ../../Zotlabs/Lib/Enotify.php:124
+#, php-format
+msgid "%s <!item_type!>"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:665
-msgid "or select an existing album (doubleclick)"
+#: ../../Zotlabs/Lib/Enotify.php:132
+#, php-format
+msgid "[$Projectname:Notify] New direct message received at %s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:666
-msgid "Create a status post for this upload"
+#: ../../Zotlabs/Lib/Enotify.php:134
+#, php-format
+msgid "%1$s sent you a new direct message at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:668
-msgid "Description (optional)"
+#: ../../Zotlabs/Lib/Enotify.php:135
+#, php-format
+msgid "%1$s sent you %2$s."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:756
-msgid "Show Newest First"
+#: ../../Zotlabs/Lib/Enotify.php:135
+msgid "a direct message"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:758
-msgid "Show Oldest First"
+#: ../../Zotlabs/Lib/Enotify.php:136
+#, php-format
+msgid "Please visit %s to view and/or reply to your direct messages."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:782 ../../Zotlabs/Module/Photos.php:1324
-#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Widget/Album.php:84
-#: ../../Zotlabs/Widget/Portfolio.php:91
-msgid "View Photo"
+#: ../../Zotlabs/Lib/Enotify.php:149
+msgid "requested to comment on"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:813 ../../Zotlabs/Module/Embedphotos.php:187
-#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112
-msgid "Edit Album"
+#: ../../Zotlabs/Lib/Enotify.php:149
+msgid "commented on"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1355
-msgid "Add Photos"
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
+msgid "requested to like"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:867
-msgid "Permission denied. Access to this item may be restricted."
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
+msgid "liked"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:869
-msgid "Photo not available"
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
+msgid "requested to dislike"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:927
-msgid "Use as profile photo"
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
+msgid "disliked"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:928
-msgid "Use as cover photo"
+#: ../../Zotlabs/Lib/Enotify.php:168
+msgid "repeated"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:935
-msgid "Private Photo"
+#: ../../Zotlabs/Lib/Enotify.php:173
+msgid "voted on"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:946 ../../Zotlabs/Module/Cal.php:199
-#: ../../Zotlabs/Module/Cdav.php:1026
-msgid "Previous"
+#: ../../Zotlabs/Lib/Enotify.php:216
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:950
-msgid "View Full Size"
+#: ../../Zotlabs/Lib/Enotify.php:224
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:994 ../../Zotlabs/Module/Cover_photo.php:382
-#: ../../Zotlabs/Module/Tagrm.php:137 ../../Zotlabs/Module/Admin/Addons.php:463
-#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:90
-msgid "Remove"
+#: ../../Zotlabs/Lib/Enotify.php:233 ../../Zotlabs/Lib/Enotify.php:325
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1031
-msgid "Edit photo"
+#: ../../Zotlabs/Lib/Enotify.php:245
+#, php-format
+msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1033
-msgid "Rotate CW (right)"
+#: ../../Zotlabs/Lib/Enotify.php:247
+#, php-format
+msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1034
-msgid "Rotate CCW (left)"
+#: ../../Zotlabs/Lib/Enotify.php:248
+#, php-format
+msgid "%1$s commented on an item/conversation you have been following"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1037
-msgid "Move photo to album"
+#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:345
+#: ../../Zotlabs/Lib/Enotify.php:361 ../../Zotlabs/Lib/Enotify.php:385
+#: ../../Zotlabs/Lib/Enotify.php:402 ../../Zotlabs/Lib/Enotify.php:416
+#, php-format
+msgid "Please visit %s to view and/or reply to the conversation."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1038
-msgid "Enter a new album name"
+#: ../../Zotlabs/Lib/Enotify.php:255 ../../Zotlabs/Lib/Enotify.php:256
+#, php-format
+msgid "Please visit %s to approve or reject this comment."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1039
-msgid "or select an existing one (doubleclick)"
+#: ../../Zotlabs/Lib/Enotify.php:341
+#, php-format
+msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1044
-msgid "Add a Tag"
+#: ../../Zotlabs/Lib/Enotify.php:342
+#, php-format
+msgid "%1$s liked an item/conversation you created"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1052
-msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
+#: ../../Zotlabs/Lib/Enotify.php:353
+#, php-format
+msgid "[$Projectname:Notify] %s posted to your profile wall"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1055
-msgid "Flag as adult in album view"
+#: ../../Zotlabs/Lib/Enotify.php:355
+#, php-format
+msgid "%1$s posted to your profile wall at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1125 ../../Zotlabs/Module/Photos.php:1137
-msgid "View all"
+#: ../../Zotlabs/Lib/Enotify.php:357
+#, php-format
+msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1238
-msgid "Photo Tools"
+#: ../../Zotlabs/Lib/Enotify.php:379
+#, php-format
+msgid "[$Projectname:Notify] %s tagged you"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1247
-msgid "In This Photo:"
+#: ../../Zotlabs/Lib/Enotify.php:380
+#, php-format
+msgid "%1$s tagged you at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1252
-msgid "Map"
+#: ../../Zotlabs/Lib/Enotify.php:381
+#, php-format
+msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1260
-msgctxt "noun"
-msgid "Likes"
+#: ../../Zotlabs/Lib/Enotify.php:392
+#, php-format
+msgid "[$Projectname:Notify] %1$s poked you"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1261
-msgctxt "noun"
-msgid "Dislikes"
+#: ../../Zotlabs/Lib/Enotify.php:393
+#, php-format
+msgid "%1$s poked you at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:45
-msgid "Name is required"
+#: ../../Zotlabs/Lib/Enotify.php:394
+#, php-format
+msgid "%1$s [zrl=%2$s]poked you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:49
-msgid "Key and Secret are required"
+#: ../../Zotlabs/Lib/Enotify.php:410
+#, php-format
+msgid "[$Projectname:Notify] %s tagged your post"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134
-#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141
-#: ../../Zotlabs/Module/Oauth2.php:191
-msgid "Add application"
+#: ../../Zotlabs/Lib/Enotify.php:411
+#, php-format
+msgid "%1$s tagged your post at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth2.php:116
-#: ../../Zotlabs/Module/Oauth2.php:144
-msgid "Name of application"
+#: ../../Zotlabs/Lib/Enotify.php:412
+#, php-format
+msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
-#: ../../extend/addon/hzaddons/statusnet/statusnet.php:596
-#: ../../extend/addon/hzaddons/twitter/twitter.php:504
-msgid "Consumer Key"
+#: ../../Zotlabs/Lib/Enotify.php:422
+msgid "[$Projectname:Notify] Introduction received"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
-msgid "Automatically generated - change if desired. Max length 20"
+#: ../../Zotlabs/Lib/Enotify.php:423
+#, php-format
+msgid "You've received an new connection request from '%1$s' at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
-#: ../../extend/addon/hzaddons/statusnet/statusnet.php:595
-#: ../../extend/addon/hzaddons/twitter/twitter.php:505
-msgid "Consumer Secret"
+#: ../../Zotlabs/Lib/Enotify.php:424
+#, php-format
+msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140
-#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
-msgid "Redirect"
+#: ../../Zotlabs/Lib/Enotify.php:427 ../../Zotlabs/Lib/Enotify.php:446
+#, php-format
+msgid "You may visit their profile at %s"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth2.php:118
-#: ../../Zotlabs/Module/Oauth2.php:146
-msgid ""
-"Redirect URI - leave blank unless your application specifically requires this"
+#: ../../Zotlabs/Lib/Enotify.php:429
+#, php-format
+msgid "Please visit %s to approve or reject the connection request."
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:141
-msgid "Icon url"
+#: ../../Zotlabs/Lib/Enotify.php:437
+msgid "[$Projectname:Notify] Friend suggestion received"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Sources.php:121
-#: ../../Zotlabs/Module/Sources.php:156 ../../Zotlabs/Module/Register.php:501
-msgid "Optional"
+#: ../../Zotlabs/Lib/Enotify.php:438
+#, php-format
+msgid "You've received a friend suggestion from '%1$s' at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:126
-msgid "Application not found."
+#: ../../Zotlabs/Lib/Enotify.php:439
+#, php-format
+msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:169
-msgid "Connected OAuth Apps"
+#: ../../Zotlabs/Lib/Enotify.php:444
+msgid "Name:"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Oauth2.php:194
-msgid "Client key starts with"
+#: ../../Zotlabs/Lib/Enotify.php:445
+msgid "Photo:"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:174 ../../Zotlabs/Module/Oauth2.php:195
-msgid "No name"
+#: ../../Zotlabs/Lib/Enotify.php:448
+#, php-format
+msgid "Please visit %s to approve or reject the suggestion."
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:175 ../../Zotlabs/Module/Oauth2.php:196
-msgid "Remove authorization"
+#: ../../Zotlabs/Lib/Enotify.php:677
+msgid "[$Projectname:Notify]"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:51 ../../Zotlabs/Widget/Appstore.php:19
-msgid "Available Apps"
+#: ../../Zotlabs/Lib/Enotify.php:843
+msgid "created a new poll"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:51
-msgid "Installed Apps"
+#: ../../Zotlabs/Lib/Enotify.php:843
+msgid "created a new post"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:54
-msgid "Manage Apps"
+#: ../../Zotlabs/Lib/Enotify.php:844
+#, php-format
+msgid "voted on %s's poll"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:55
-msgid "Create Custom App"
+#: ../../Zotlabs/Lib/Enotify.php:844
+#, php-format
+msgid "commented on %s's post"
msgstr ""
-#: ../../Zotlabs/Module/Viewconnections.php:65
-msgid "No connections."
+#: ../../Zotlabs/Lib/Enotify.php:848 ../../Zotlabs/Lib/Enotify.php:948
+msgid "shared a file with you"
msgstr ""
-#: ../../Zotlabs/Module/Viewconnections.php:105
+#: ../../Zotlabs/Lib/Enotify.php:857
#, php-format
-msgid "Visit %s's profile [%s]"
+msgid "edited a post dated %s"
msgstr ""
-#: ../../Zotlabs/Module/Viewconnections.php:135
-msgid "View Connections"
+#: ../../Zotlabs/Lib/Enotify.php:860
+#, php-format
+msgid "edited a comment dated %s"
msgstr ""
-#: ../../Zotlabs/Module/Chanview.php:132
-msgid "toggle full screen mode"
+#: ../../Zotlabs/Lib/Enotify.php:933
+msgid "added your channel"
msgstr ""
-#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
-msgid "Item is not editable"
+#: ../../Zotlabs/Lib/Enotify.php:963
+msgid "sent you a direct message"
msgstr ""
-#: ../../Zotlabs/Module/Tagger.php:50
-msgid "Post not found."
+#: ../../Zotlabs/Lib/Enotify.php:970
+msgid "g A l F d"
msgstr ""
-#: ../../Zotlabs/Module/Tagger.php:121
-#, php-format
-msgid "%1$s tagged %2$s's %3$s with %4$s"
+#: ../../Zotlabs/Lib/Enotify.php:973
+msgid "[today]"
msgstr ""
-#: ../../Zotlabs/Module/Common.php:14
-msgid "No channel."
+#: ../../Zotlabs/Lib/Enotify.php:983
+msgid "created an event"
msgstr ""
-#: ../../Zotlabs/Module/Common.php:45
-msgid "No connections in common."
+#: ../../Zotlabs/Lib/Enotify.php:998
+msgid "status verified"
msgstr ""
-#: ../../Zotlabs/Module/Common.php:65
-msgid "View Common Connections"
+#: ../../Zotlabs/Lib/Apps.php:330
+msgid "Affinity Tool"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:23 ../../Zotlabs/Module/Profiles.php:211
-#: ../../Zotlabs/Module/Profiles.php:641
-msgid "Profile not found."
+#: ../../Zotlabs/Lib/Apps.php:333
+msgid "Site Admin"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:43
-msgid "Profile deleted."
+#: ../../Zotlabs/Lib/Apps.php:337
+msgid "Content Filter"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:67 ../../Zotlabs/Module/Profiles.php:104
-msgid "Profile-"
+#: ../../Zotlabs/Lib/Apps.php:340
+msgid "Remote Diagnostics"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:89 ../../Zotlabs/Module/Profiles.php:126
-msgid "New profile created."
+#: ../../Zotlabs/Lib/Apps.php:341
+msgid "Suggest Channels"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:110
-msgid "Profile unavailable to clone."
+#: ../../Zotlabs/Lib/Apps.php:343
+msgid "Channel Manager"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:145
-msgid "Profile unavailable to export."
+#: ../../Zotlabs/Lib/Apps.php:344
+msgid "Stream"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:221
-msgid "Profile Name is required."
+#: ../../Zotlabs/Lib/Apps.php:348
+msgid "Wiki"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:426
-msgid "Marital Status"
+#: ../../Zotlabs/Lib/Apps.php:355
+msgid "Mail"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:430
-msgid "Romantic Partner"
+#: ../../Zotlabs/Lib/Apps.php:356
+msgid "Chat"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:434 ../../Zotlabs/Module/Profiles.php:787
-msgid "Likes"
+#: ../../Zotlabs/Lib/Apps.php:358
+msgid "Probe"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:438 ../../Zotlabs/Module/Profiles.php:788
-msgid "Dislikes"
+#: ../../Zotlabs/Lib/Apps.php:359
+msgid "Suggest"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:442 ../../Zotlabs/Module/Profiles.php:795
-msgid "Work/Employment"
+#: ../../Zotlabs/Lib/Apps.php:360
+msgid "Random Channel"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:445
-msgid "Religion"
+#: ../../Zotlabs/Lib/Apps.php:361
+msgid "Invite"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:449
-msgid "Political Views"
+#: ../../Zotlabs/Lib/Apps.php:362 ../../Zotlabs/Widget/Admin.php:31
+msgid "Features"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:453
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:74
-msgid "Gender"
+#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:410
+msgid "Post"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:457
-msgid "Sexual Preference"
+#: ../../Zotlabs/Lib/Apps.php:369
+msgid "Notifications"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:461
-msgid "Homepage"
+#: ../../Zotlabs/Lib/Apps.php:370
+msgid "Order Apps"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:465
-msgid "Interests"
+#: ../../Zotlabs/Lib/Apps.php:371
+msgid "CardDAV"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:469 ../../Zotlabs/Module/Connedit.php:739
-#: ../../Zotlabs/Module/Locs.php:122
-#: ../../Zotlabs/Module/Admin/Channels.php:182
-#: ../../Zotlabs/Module/Cdav.php:1375
-msgid "Address"
+#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Sources.php:105
+msgid "Channel Sources"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:573
-msgid "Profile updated."
+#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Tokens.php:288
+msgid "Guest Access"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:671
-msgid "Hide my connections from viewers of this profile"
+#: ../../Zotlabs/Lib/Apps.php:375
+msgid "OAuth Apps Manager"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:684
-msgid "Publish my default profile in the network directory"
+#: ../../Zotlabs/Lib/Apps.php:376
+msgid "OAuth2 Apps Manager"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:692
-msgid "Suggest me as a potential contact to new members"
+#: ../../Zotlabs/Lib/Apps.php:377
+msgid "PDL Editor"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:696
-msgid "Reveal my online status"
+#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Module/Permcats.php:248
+msgid "Contact Roles"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:737
-msgid "Edit Profile Details"
+#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Widget/Notifications.php:154
+#: ../../Zotlabs/Module/Pubstream.php:109
+msgid "Public Stream"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:739
-msgid "View this profile"
+#: ../../Zotlabs/Lib/Apps.php:380
+msgid "My Chatrooms"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:741
-msgid "Profile Tools"
+#: ../../Zotlabs/Lib/Apps.php:381
+msgid "Channel Export"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:742
-msgid "Change cover photo"
+#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Oauth.php:53
+#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Connedit.php:748
+#: ../../Zotlabs/Module/Cdav.php:1044 ../../Zotlabs/Module/Cdav.php:1384
+#: ../../Zotlabs/Module/Oauth2.php:58 ../../Zotlabs/Module/Oauth2.php:142
+msgid "Update"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:744
-msgid "Create a new profile using these settings"
+#: ../../Zotlabs/Lib/Apps.php:562
+msgid "Install"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:745
-msgid "Clone this profile"
+#: ../../Zotlabs/Lib/Apps.php:592 ../../Zotlabs/Lib/Apps.php:614
+msgid "Purchase"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:746
-msgid "Delete this profile"
+#: ../../Zotlabs/Lib/Apps.php:619
+msgid "Undelete"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:747
-msgid "Add profile things"
+#: ../../Zotlabs/Lib/Apps.php:627
+msgid "Add to app-tray"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:748
-msgid "Basic"
+#: ../../Zotlabs/Lib/Apps.php:628
+msgid "Remove from app-tray"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:750
-msgid "Relationship"
+#: ../../Zotlabs/Lib/Apps.php:629
+msgid "Pin to navbar"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:753
-msgid "Import profile from file"
+#: ../../Zotlabs/Lib/Apps.php:630
+msgid "Unpin from navbar"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:754
-msgid "Export profile to file"
+#: ../../Zotlabs/Lib/PermissionDescription.php:108
+#: ../../Zotlabs/Access/PermissionRoles.php:386
+msgid "Public"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:755
-msgid "Your gender"
+#: ../../Zotlabs/Lib/PermissionDescription.php:109
+msgid "Anybody in the $Projectname network"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:756
-msgid "Marital status"
+#: ../../Zotlabs/Lib/PermissionDescription.php:110
+#, php-format
+msgid "Any account on %s"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:757
-msgid "Sexual preference"
+#: ../../Zotlabs/Lib/PermissionDescription.php:111
+msgid "Any of my connections"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:760
-msgid "Profile name"
+#: ../../Zotlabs/Lib/PermissionDescription.php:112
+msgid "Only connections I specifically allow"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:762
-msgid "This is your default profile."
+#: ../../Zotlabs/Lib/PermissionDescription.php:113
+msgid "Anybody authenticated (could include visitors from other networks)"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:764
-msgid "Your full name"
+#: ../../Zotlabs/Lib/PermissionDescription.php:114
+msgid "Any connections including those who haven't yet been approved"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:765
-msgid "Short title/description"
+#: ../../Zotlabs/Lib/PermissionDescription.php:150
+msgid ""
+"This is your default setting for the audience of your normal stream, and "
+"posts."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:765
-msgid "Maximal 190 characters"
+#: ../../Zotlabs/Lib/PermissionDescription.php:151
+msgid ""
+"This is your default setting for who can view your default channel profile"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:768
-msgid "Street address"
+#: ../../Zotlabs/Lib/PermissionDescription.php:152
+msgid "This is your default setting for who can view your connections"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:769
-msgid "Locality/City"
+#: ../../Zotlabs/Lib/PermissionDescription.php:153
+msgid ""
+"This is your default setting for who can view your file storage and photos"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:770
-msgid "Region/State"
+#: ../../Zotlabs/Lib/PermissionDescription.php:154
+msgid "This is your default setting for the audience of your webpages"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:771
-msgid "Postal/Zip code"
+#: ../../Zotlabs/Lib/Permcat.php:83
+msgctxt "permcat"
+msgid "Default"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:772 ../../Zotlabs/Module/Connedit.php:757
-#: ../../Zotlabs/Module/Cdav.php:1393
-msgid "Country"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:85
+msgid "Source code of failed update: "
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:777
-msgid "Who (if applicable)"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:106
+#, php-format
+msgid "Update Error at %s"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:777
-msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:112
+#, php-format
+msgid "Update %s failed. See error logs."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:778
-msgid "Since (date)"
+#: ../../Zotlabs/Lib/Connect.php:45 ../../Zotlabs/Lib/Connect.php:146
+msgid "Channel is blocked on this site."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:781
-msgid "Tell us about yourself"
+#: ../../Zotlabs/Lib/Connect.php:50
+msgid "Channel location missing."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:782
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:68
-msgid "Homepage URL"
+#: ../../Zotlabs/Lib/Connect.php:104
+msgid "Remote channel or protocol unavailable."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:783
-msgid "Hometown"
+#: ../../Zotlabs/Lib/Connect.php:140
+msgid "Channel discovery failed."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:784
-msgid "Political views"
+#: ../../Zotlabs/Lib/Connect.php:158
+msgid "Protocol disabled."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:785
-msgid "Religious views"
+#: ../../Zotlabs/Lib/Connect.php:170
+msgid "Cannot connect to yourself."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:786
-msgid "Keywords used in directory listings"
+#: ../../Zotlabs/Lib/Connect.php:275
+msgid "error saving data"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:786
-msgid "Example: fishing photography software"
+#: ../../Zotlabs/Lib/ThreadItem.php:110
+msgid "Restricted message"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:789
-msgid "Musical interests"
+#: ../../Zotlabs/Lib/ThreadItem.php:117
+msgid "Direct message"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:790
-msgid "Books, literature"
+#: ../../Zotlabs/Lib/ThreadItem.php:122
+msgid "Public Policy"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:791
-msgid "Television"
+#: ../../Zotlabs/Lib/ThreadItem.php:156
+msgid "Privacy conflict. Discretion advised."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:792
-msgid "Film/Dance/Culture/Entertainment"
+#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:373
+msgid "Admin Delete"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:793
-msgid "Hobbies/Interests"
+#: ../../Zotlabs/Lib/ThreadItem.php:190 ../../Zotlabs/Module/Filer.php:66
+msgid "Save to Folder"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:794
-msgid "Love/Romance"
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
+msgid "I will attend"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:796
-msgid "School/Education"
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
+msgid "I will not attend"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:797
-msgid "Contact information and social networks"
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
+msgid "I might attend"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:798
-msgid "My other channels"
+#: ../../Zotlabs/Lib/ThreadItem.php:296 ../../Zotlabs/Module/Photos.php:1074
+msgid "I like this (toggle)"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:852 ../../Zotlabs/Module/Manage.php:137
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:217
-msgid "Create New"
+#: ../../Zotlabs/Lib/ThreadItem.php:297 ../../Zotlabs/Module/Photos.php:1075
+msgid "I don't like this (toggle)"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:108
-msgid "No such group"
+#: ../../Zotlabs/Lib/ThreadItem.php:298
+msgid "Reply to this comment"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:160
-msgid "No such channel"
+#: ../../Zotlabs/Lib/ThreadItem.php:298
+msgid "reply"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:248
-msgid "Privacy group is empty"
+#: ../../Zotlabs/Lib/ThreadItem.php:298
+msgid "Reply to"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:258
-msgid "Privacy group: "
+#: ../../Zotlabs/Lib/ThreadItem.php:305 ../../Zotlabs/Widget/Pinned.php:95
+msgid "share"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:333
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:29
-msgid "Invalid channel."
+#: ../../Zotlabs/Lib/ThreadItem.php:309
+msgid "Repeat"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:70
-msgid "Invite App"
+#: ../../Zotlabs/Lib/ThreadItem.php:309
+msgid "repeat"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:82
-msgid "Register is closed"
+#: ../../Zotlabs/Lib/ThreadItem.php:320
+msgid "Delivery Report"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:116 ../../Zotlabs/Module/Invite.php:563
-msgid "Note, the invitation code is valid up to"
-msgstr ""
+#: ../../Zotlabs/Lib/ThreadItem.php:341
+#, php-format
+msgid "%d comment"
+msgid_plural "%d comments"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Invite.php:129
+#: ../../Zotlabs/Lib/ThreadItem.php:342
#, php-format
-msgid "Too many recipients for one invitation (max %d)"
+msgid "%d unseen"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:133
-msgid "No recipients for this invitation"
+#: ../../Zotlabs/Lib/ThreadItem.php:391
+msgid "Forum"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:152
-#, php-format
-msgid "(%s) : Not a real email address"
+#: ../../Zotlabs/Lib/ThreadItem.php:398
+msgid "to"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:159
-#, php-format
-msgid "(%s) : Not allowed email address"
+#: ../../Zotlabs/Lib/ThreadItem.php:399 ../../Zotlabs/Widget/Messages.php:175
+#: ../../Zotlabs/Widget/Messages.php:178 ../../Zotlabs/Widget/Pinned.php:122
+msgid "via"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:172
-#, php-format
-msgid "(%s) : email address already in use"
+#: ../../Zotlabs/Lib/ThreadItem.php:400
+msgid "Wall-to-Wall"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:179
-#, php-format
-msgid "(%s) : Accepted email address"
+#: ../../Zotlabs/Lib/ThreadItem.php:401
+msgid "via Wall-To-Wall:"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:266
-#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:40
+#: ../../Zotlabs/Lib/ThreadItem.php:417
#, php-format
-msgid "%s : Message delivery failed."
+msgid "Last edited %s"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:271
+#: ../../Zotlabs/Lib/ThreadItem.php:418
#, php-format
-msgid "To %s : Message delivery success."
+msgid "Expires %s"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:303
+#: ../../Zotlabs/Lib/ThreadItem.php:421
#, php-format
-msgid "%1$d mail(s) sent, %2$d mail error(s)"
+msgid "Published %s"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:328
-msgid "Invites not proposed by configuration"
+#: ../../Zotlabs/Lib/ThreadItem.php:428
+msgid "Attend"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:329
-msgid "Contact the site admin"
+#: ../../Zotlabs/Lib/ThreadItem.php:429 ../../Zotlabs/Widget/Pinned.php:136
+msgid "Attendance Options"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:345
-msgid "Invites by users not enabled"
+#: ../../Zotlabs/Lib/ThreadItem.php:431 ../../Zotlabs/Widget/Pinned.php:137
+msgid "Voting Options"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:350
-msgid "You have no more invitations available"
+#: ../../Zotlabs/Lib/ThreadItem.php:446
+msgid "Go to previous comment"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:366
-msgid "Not on xchan"
+#: ../../Zotlabs/Lib/ThreadItem.php:455 ../../Zotlabs/Widget/Pinned.php:149
+msgid "Pinned post"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:399
-msgid "All users invitation limit exceeded."
+#: ../../Zotlabs/Lib/ThreadItem.php:459
+msgid "Add to Calendar"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:411 ../../Zotlabs/Module/Admin/Site.php:343
-msgid "Minute(s)"
+#: ../../Zotlabs/Lib/ThreadItem.php:467
+msgid "Mark all comments seen"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:412 ../../Zotlabs/Module/Admin/Site.php:344
-msgid "Hour(s)"
+#: ../../Zotlabs/Lib/ThreadItem.php:485
+msgid "Add yours"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:413 ../../Zotlabs/Module/Admin/Site.php:345
-msgid "Day(s)"
+#: ../../Zotlabs/Lib/ThreadItem.php:485
+msgid "Remove yours"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:417
-msgid "Invitation expires after"
+#: ../../Zotlabs/Lib/ThreadItem.php:796 ../../Zotlabs/Module/Photos.php:1092
+#: ../../Zotlabs/Module/Photos.php:1205
+msgid "This is you"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:422 ../../Zotlabs/Module/Admin/Site.php:362
-#: ../../Zotlabs/Module/Admin/Site.php:384
-msgid "duration up from now"
+#: ../../Zotlabs/Lib/ThreadItem.php:806
+msgid "Image"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:518 ../../Zotlabs/Module/Invite.php:557
-msgid "Invitation"
+#: ../../Zotlabs/Lib/ThreadItem.php:808
+msgid "Insert Link"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:548
-msgid "Send invitations"
+#: ../../Zotlabs/Lib/ThreadItem.php:809
+msgid "Video"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:549
-msgid "Invitations I am using"
+#: ../../Zotlabs/Lib/ThreadItem.php:818
+msgid "Your full name (required)"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:550
-msgid "Invitations we are using"
+#: ../../Zotlabs/Lib/ThreadItem.php:819
+msgid "Your email address (required)"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:551
-msgid "§ Note, the email(s) sent will be recorded in the system logs"
+#: ../../Zotlabs/Lib/ThreadItem.php:820
+msgid "Your website URL (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:552
-msgid "Enter email addresses, one per line:"
+#: ../../Zotlabs/Lib/Libzot.php:693
+msgid "Unable to verify channel signature"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:553
-msgid "Your message:"
+#: ../../Zotlabs/Lib/Activity.php:2259
+#, php-format
+msgid "Likes %1$s's %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:554
-msgid "Invite template"
+#: ../../Zotlabs/Lib/Activity.php:2262
+#, php-format
+msgid "Doesn't like %1$s's %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:556
-msgid "Subject:"
+#: ../../Zotlabs/Lib/Activity.php:2268
+#, php-format
+msgid "Will attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:562
-msgid "Here you may enter personal notes to the recipient(s)"
+#: ../../Zotlabs/Lib/Activity.php:2271
+#, php-format
+msgid "Will not attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:41
-msgid "Failed to create source. No channel selected."
+#: ../../Zotlabs/Lib/Activity.php:2274
+#, php-format
+msgid "May attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:57
-msgid "Source created."
+#: ../../Zotlabs/Lib/Activity.php:2277
+#, php-format
+msgid "May not attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:70
-msgid "Source updated."
+#: ../../Zotlabs/Lib/Libsync.php:824
+#, php-format
+msgid "Unable to verify site signature for %s"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:99
-msgid "*"
+#: ../../Zotlabs/Lib/Libzotdir.php:164
+msgid "Directory Options"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:106
-msgid "Manage remote sources of content for your channel."
+#: ../../Zotlabs/Lib/Libzotdir.php:166
+msgid "Safe Mode"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
-msgid "New Source"
+#: ../../Zotlabs/Lib/Libzotdir.php:167
+msgid "Public Forums Only"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
-msgid ""
-"Import all or selected content from the following channel into this channel "
-"and distribute it according to your channel settings."
+#: ../../Zotlabs/Lib/Libzotdir.php:169
+msgid "This Website Only"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Only import content with these words (one per line)"
+#: ../../Zotlabs/Lib/Chatroom.php:25
+msgid "Missing room name"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Leave blank to import all public content"
+#: ../../Zotlabs/Lib/Chatroom.php:34
+msgid "Duplicate room name"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
-msgid "Channel Name"
+#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
+msgid "Invalid room specifier."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
-msgid ""
-"Add the following categories to posts imported from this source (comma "
-"separated)"
+#: ../../Zotlabs/Lib/Chatroom.php:124
+msgid "Room not found."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Resend posts with this channel as author"
+#: ../../Zotlabs/Lib/Chatroom.php:145
+msgid "Room is full"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Copyrights may apply"
+#: ../../Zotlabs/Lib/Techlevels.php:10
+msgid "0. Beginner/Basic"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
-msgid "Source not found."
+#: ../../Zotlabs/Lib/Techlevels.php:11
+msgid "1. Novice - not skilled but willing to learn"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:149
-msgid "Edit Source"
+#: ../../Zotlabs/Lib/Techlevels.php:12
+msgid "2. Intermediate - somewhat comfortable"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:150
-msgid "Delete Source"
+#: ../../Zotlabs/Lib/Techlevels.php:13
+msgid "3. Advanced - very comfortable"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:180
-msgid "Source removed"
+#: ../../Zotlabs/Lib/Techlevels.php:14
+msgid "4. Expert - I can write computer code"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:182
-msgid "Unable to remove source."
+#: ../../Zotlabs/Lib/Techlevels.php:15
+msgid "5. Wizard - I probably know more than you do"
msgstr ""
-#: ../../Zotlabs/Module/Suggest.php:52
+#: ../../Zotlabs/Lib/AccessList.php:26
msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
+"A deleted privacy group with this name was revived. Existing item "
+"permissions <strong>may</strong> apply to this privacy group and any future "
+"members. If this is not what you intended, please create another privacy "
+"group with a different name."
msgstr ""
-#: ../../Zotlabs/Module/Suggest.php:71 ../../Zotlabs/Widget/Suggestions.php:53
-msgid "Ignore/Hide"
+#: ../../Zotlabs/Lib/AccessList.php:268
+msgid "Select a privacy group"
msgstr ""
-#: ../../Zotlabs/Module/Impel.php:188
-#, php-format
-msgid "%s element installed"
+#: ../../Zotlabs/Access/PermissionRoles.php:339
+msgid "Social Networking"
msgstr ""
-#: ../../Zotlabs/Module/Impel.php:191
-#, php-format
-msgid "%s element installation failed"
+#: ../../Zotlabs/Access/PermissionRoles.php:340
+msgid "Social - Federation"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:48
-msgid "Privacy group created."
+#: ../../Zotlabs/Access/PermissionRoles.php:341
+msgid "Social - Mostly Public"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:51
-msgid "Could not create privacy group."
+#: ../../Zotlabs/Access/PermissionRoles.php:342
+msgid "Social - Restricted"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:83
-msgid "Privacy group updated."
+#: ../../Zotlabs/Access/PermissionRoles.php:343
+msgid "Social - Private"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
-msgid "Post to this group by default"
+#: ../../Zotlabs/Access/PermissionRoles.php:346
+msgid "Community Forum"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:303
-msgid "Add new contacts to this group by default"
+#: ../../Zotlabs/Access/PermissionRoles.php:347
+msgid "Forum - Mostly Public"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:147
-msgid "Privacy group name"
+#: ../../Zotlabs/Access/PermissionRoles.php:348
+msgid "Forum - Restricted"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:148 ../../Zotlabs/Module/Group.php:250
-msgid "Members are visible to other channels"
+#: ../../Zotlabs/Access/PermissionRoles.php:349
+msgid "Forum - Private"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:176
-msgid "Privacy group removed."
+#: ../../Zotlabs/Access/PermissionRoles.php:352
+msgid "Feed Republish"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:179
-msgid "Unable to remove privacy group."
+#: ../../Zotlabs/Access/PermissionRoles.php:353
+msgid "Feed - Mostly Public"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:245
-#, php-format
-msgid "Privacy Group: %s"
+#: ../../Zotlabs/Access/PermissionRoles.php:354
+msgid "Feed - Restricted"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:247
-msgid "Privacy group name: "
+#: ../../Zotlabs/Access/PermissionRoles.php:357
+msgid "Special Purpose"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:263
-msgid "Group members"
+#: ../../Zotlabs/Access/PermissionRoles.php:358
+msgid "Special - Celebrity/Soapbox"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:265
-msgid "Not in this group"
+#: ../../Zotlabs/Access/PermissionRoles.php:359
+msgid "Special - Group Repository"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:297
-msgid "Click a channel to toggle membership"
+#: ../../Zotlabs/Access/PermissionRoles.php:363
+msgid "Custom/Expert Mode"
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:184
-msgid "Comanche page description language help"
+#: ../../Zotlabs/Access/PermissionRoles.php:387
+msgid "Personal"
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:188
-msgid "Layout Description"
+#: ../../Zotlabs/Access/PermissionRoles.php:388
+msgid "Community forum"
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:193
-msgid "Download PDL file"
+#: ../../Zotlabs/Access/PermissionRoles.php:389
+msgid "Custom"
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:196 ../../Zotlabs/Module/Pubsites.php:63
-#: ../../Zotlabs/Module/Blocks.php:164 ../../Zotlabs/Module/Webpages.php:256
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:216
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:406
-msgid "View"
+#: ../../Zotlabs/Access/Permissions.php:56
+msgid "Can view my channel stream and posts"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:54
-msgid "Name and Secret are required"
+#: ../../Zotlabs/Access/Permissions.php:57
+msgid "Can send me their channel stream and posts"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:113
-msgid "Add OAuth2 application"
+#: ../../Zotlabs/Access/Permissions.php:58
+msgid "Can view my default channel profile"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
-msgid "Grant Types"
+#: ../../Zotlabs/Access/Permissions.php:59
+msgid "Can view my connections"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
-msgid "leave blank unless your application sepcifically requires this"
+#: ../../Zotlabs/Access/Permissions.php:60
+msgid "Can view my file storage and photos"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
-msgid "Authorization scope"
+#: ../../Zotlabs/Access/Permissions.php:61
+msgid "Can upload/modify my file storage and photos"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:132
-msgid "OAuth2 Application not found."
+#: ../../Zotlabs/Access/Permissions.php:62
+msgid "Can view my channel webpages"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
-msgid "leave blank unless your application specifically requires this"
+#: ../../Zotlabs/Access/Permissions.php:63
+msgid "Can view my wiki pages"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:190
-msgid "Connected OAuth2 Apps"
+#: ../../Zotlabs/Access/Permissions.php:64
+msgid "Can create/edit my channel webpages"
msgstr ""
-#: ../../Zotlabs/Module/Viewsrc.php:43
-msgid "item"
+#: ../../Zotlabs/Access/Permissions.php:65
+msgid "Can write to my wiki pages"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:86
-#: ../../Zotlabs/Module/Profile_photo.php:129
-msgid "Image uploaded but image cropping failed."
+#: ../../Zotlabs/Access/Permissions.php:66
+msgid "Can post on my channel (wall) page"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:195
-#: ../../Zotlabs/Module/Cover_photo.php:252
-msgid "Cover Photos"
+#: ../../Zotlabs/Access/Permissions.php:67
+msgid "Can comment on or like my posts"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:211
-#: ../../Zotlabs/Module/Profile_photo.php:185
-msgid "Image resize failed."
+#: ../../Zotlabs/Access/Permissions.php:68
+msgid "Can send me direct messages"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:263
-#: ../../Zotlabs/Module/Profile_photo.php:350
-msgid "Image upload failed."
+#: ../../Zotlabs/Access/Permissions.php:69
+msgid "Can like/dislike profiles and profile things"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:280
-#: ../../Zotlabs/Module/Profile_photo.php:370
-msgid "Unable to process image."
+#: ../../Zotlabs/Access/Permissions.php:70
+msgid "Can chat with me"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:325
-#: ../../Zotlabs/Module/Cover_photo.php:340
-#: ../../Zotlabs/Module/Profile_photo.php:432
-#: ../../Zotlabs/Module/Profile_photo.php:497
-msgid "Photo not available."
+#: ../../Zotlabs/Access/Permissions.php:71
+msgid "Can source/mirror my public posts in derived channels"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:376
-msgid "Your cover photo may be visible to anybody on the internet"
+#: ../../Zotlabs/Access/Permissions.php:73
+msgid "Can administer my channel"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:378
-msgid "Upload File:"
+#: ../../Zotlabs/Widget/Tasklist.php:31
+msgid "Tasks"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:379
-msgid "Select a profile:"
+#: ../../Zotlabs/Widget/Cover_photo.php:74
+msgid "Click to show more"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:380
-msgid "Change Cover Photo"
+#: ../../Zotlabs/Widget/Appstore.php:16
+msgid "App Collections"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:384
-#: ../../Zotlabs/Module/Cover_photo.php:385
-#: ../../Zotlabs/Module/Profile_photo.php:551
-#: ../../Zotlabs/Module/Profile_photo.php:552
-msgid "Use a photo from your albums"
+#: ../../Zotlabs/Widget/Appstore.php:18
+msgid "Installed apps"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:557
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:402
-msgid "Choose a different album"
+#: ../../Zotlabs/Widget/Appstore.php:19 ../../Zotlabs/Module/Apps.php:51
+msgid "Available Apps"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:396
-msgid "Select existing photo"
+#: ../../Zotlabs/Widget/Rating.php:59
+msgid "Rating Tools"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:413
-#: ../../Zotlabs/Module/Profile_photo.php:581
-msgid "Crop Image"
+#: ../../Zotlabs/Widget/Rating.php:63 ../../Zotlabs/Widget/Rating.php:65
+msgid "Rate Me"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:414
-#: ../../Zotlabs/Module/Profile_photo.php:582
-msgid "Please adjust the image cropping for optimum viewing."
+#: ../../Zotlabs/Widget/Rating.php:68
+msgid "View Ratings"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:416
-msgid "Done Editing"
+#: ../../Zotlabs/Widget/Notifications.php:24
+msgid "New network activity notifications"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:29 ../../Zotlabs/Module/Ochannel.php:32
-msgid "You must be logged in to see this page."
+#: ../../Zotlabs/Widget/Notifications.php:27
+msgid "Network stream"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:193
-msgid "Room not found"
+#: ../../Zotlabs/Widget/Notifications.php:30
+#: ../../Zotlabs/Widget/Notifications.php:69
+msgid "Mark all notifications read"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:209
-msgid "Leave Room"
+#: ../../Zotlabs/Widget/Notifications.php:33
+#: ../../Zotlabs/Widget/Notifications.php:53
+#: ../../Zotlabs/Widget/Notifications.php:72
+#: ../../Zotlabs/Widget/Notifications.php:166
+msgid "Show new posts only"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:210
-msgid "Delete Room"
+#: ../../Zotlabs/Widget/Notifications.php:34
+#: ../../Zotlabs/Widget/Notifications.php:54
+#: ../../Zotlabs/Widget/Notifications.php:73
+#: ../../Zotlabs/Widget/Notifications.php:134
+#: ../../Zotlabs/Widget/Notifications.php:167
+#: ../../Zotlabs/Widget/Messages.php:53
+msgid "Filter by name or address"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:211
-msgid "I am away right now"
+#: ../../Zotlabs/Widget/Notifications.php:44
+msgid "New home activity notifications"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:212
-msgid "I am online"
+#: ../../Zotlabs/Widget/Notifications.php:47
+msgid "Home stream"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:214
-msgid "Bookmark this room"
+#: ../../Zotlabs/Widget/Notifications.php:50
+msgid "Mark all notifications seen"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:237
-msgid "New Chatroom"
+#: ../../Zotlabs/Widget/Notifications.php:62
+#: ../../Zotlabs/Widget/Activity_filter.php:44
+msgid "Direct Messages"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:238
-msgid "Chatroom name"
+#: ../../Zotlabs/Widget/Notifications.php:63
+msgid "New direct messages notifications"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:239
-msgid "Expiration of chats (minutes)"
+#: ../../Zotlabs/Widget/Notifications.php:66
+msgid "Direct messages stream"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:255
-#, php-format
-msgid "%1$s's Chatrooms"
+#: ../../Zotlabs/Widget/Notifications.php:81
+#: ../../Zotlabs/Widget/Activity_filter.php:53
+msgid "Events"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:260
-msgid "No chatrooms available"
+#: ../../Zotlabs/Widget/Notifications.php:82
+msgid "New events notifications"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:261
-msgid "Add Room"
+#: ../../Zotlabs/Widget/Notifications.php:85
+msgid "View events"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:264
-msgid "Expiration"
+#: ../../Zotlabs/Widget/Notifications.php:88
+msgid "Mark all events seen"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:265
-msgid "min"
+#: ../../Zotlabs/Widget/Notifications.php:96
+#: ../../Zotlabs/Module/Connections.php:168
+msgid "New Connections"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:37
-msgid "Invalid message"
+#: ../../Zotlabs/Widget/Notifications.php:97
+msgid "New connections notifications"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:67
-msgid "no results"
+#: ../../Zotlabs/Widget/Notifications.php:100
+msgid "View all connections"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:81
-msgid "channel sync processed"
+#: ../../Zotlabs/Widget/Notifications.php:109
+msgid "New files notifications"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:85
-msgid "queued"
+#: ../../Zotlabs/Widget/Notifications.php:116
+#: ../../Zotlabs/Widget/Notifications.php:117
+#: ../../Zotlabs/Widget/Messages.php:49
+msgid "Notices"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:89
-msgid "posted"
+#: ../../Zotlabs/Widget/Notifications.php:120
+msgid "View all notices"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:93
-msgid "accepted for delivery"
+#: ../../Zotlabs/Widget/Notifications.php:123
+msgid "Mark all notices seen"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:97
-msgid "updated"
+#: ../../Zotlabs/Widget/Notifications.php:144
+msgid "Registrations"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:101
-msgid "update ignored"
+#: ../../Zotlabs/Widget/Notifications.php:145
+msgid "New registrations notifications"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:104
-msgid "permission denied"
+#: ../../Zotlabs/Widget/Notifications.php:155
+msgid "New public stream notifications"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:108
-msgid "recipient not found"
+#: ../../Zotlabs/Widget/Notifications.php:158
+msgid "Public stream"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:128
-#, php-format
-msgid "Delivery report for %1$s"
+#: ../../Zotlabs/Widget/Notifications.php:174
+msgid "Sorry, you have got no notifications at the moment"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:132
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:906
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:71
-msgid "Options"
+#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
+msgid "Bookmarked Chatrooms"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:133
-msgid "Redeliver"
+#: ../../Zotlabs/Widget/Chatroom_list.php:26
+msgid "Overview"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:72
-msgid "Select a bookmark folder"
+#: ../../Zotlabs/Widget/Tokens.php:41
+msgid "Add new guest"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:80
-msgid "Save Bookmark"
+#: ../../Zotlabs/Widget/Tokens.php:49 ../../Zotlabs/Module/Lockview.php:236
+msgid "Guest access"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:81
-msgid "URL of bookmark"
+#: ../../Zotlabs/Widget/Newmember.php:38
+msgid "Profile Creation"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:82 ../../Zotlabs/Module/Appman.php:220
-#: ../../Zotlabs/Module/Cdav.php:1005
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:260
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:657
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:173
-msgid "Description"
+#: ../../Zotlabs/Widget/Newmember.php:40
+msgid "Upload profile photo"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:86
-msgid "Or enter new bookmark folder name"
+#: ../../Zotlabs/Widget/Newmember.php:41
+msgid "Upload cover photo"
msgstr ""
-#: ../../Zotlabs/Module/Achievements.php:38
-msgid "Some blurb about what to do when you're new here"
+#: ../../Zotlabs/Widget/Newmember.php:45
+msgid "Find and Connect with others"
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:631
-msgid "Private forum"
+#: ../../Zotlabs/Widget/Newmember.php:47
+msgid "View the directory"
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:631
-msgid "Public forum"
+#: ../../Zotlabs/Widget/Newmember.php:48 ../../Zotlabs/Module/Go.php:39
+msgid "View friend suggestions"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
-msgid "App installed."
+#: ../../Zotlabs/Widget/Newmember.php:49
+msgid "Manage your connections"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:49
-msgid "Malformed app."
+#: ../../Zotlabs/Widget/Newmember.php:52
+msgid "Communicate"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:208
-msgid "Embed code"
+#: ../../Zotlabs/Widget/Newmember.php:54
+msgid "View your channel homepage"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:213
-msgid "Edit App"
+#: ../../Zotlabs/Widget/Newmember.php:55
+msgid "View your network stream"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:213
-msgid "Create App"
+#: ../../Zotlabs/Widget/Newmember.php:61
+msgid "Documentation"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:218
-msgid "Name of app"
+#: ../../Zotlabs/Widget/Newmember.php:64
+msgid "Missing Features?"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:219
-msgid "Location (URL) of app"
+#: ../../Zotlabs/Widget/Newmember.php:66
+msgid "Pin apps to navigation bar"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:221
-msgid "Photo icon URL"
+#: ../../Zotlabs/Widget/Newmember.php:67
+msgid "Install more apps"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:221
-msgid "80 x 80 pixels - optional"
+#: ../../Zotlabs/Widget/Newmember.php:78
+msgid "View public stream"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:222
-msgid "Categories (optional, comma separated list)"
+#: ../../Zotlabs/Widget/Newmember.php:82
+#: ../../Zotlabs/Module/Settings/Display.php:202
+msgid "New Member Links"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:223
-msgid "Version ID"
+#: ../../Zotlabs/Widget/Suggestions.php:53 ../../Zotlabs/Module/Suggest.php:71
+msgid "Ignore/Hide"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:224
-msgid "Price of app"
+#: ../../Zotlabs/Widget/Suggestions.php:58
+msgid "Suggestions"
msgstr ""
-#: ../../Zotlabs/Module/Appman.php:225
-msgid "Location (URL) to purchase app"
+#: ../../Zotlabs/Widget/Suggestions.php:59
+msgid "See more..."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:124
-msgid "No default suggestions were found."
+#: ../../Zotlabs/Widget/Messages.php:45
+msgid "Public and restricted messages"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:292
-msgid "Gender: "
+#: ../../Zotlabs/Widget/Messages.php:46
+msgid "Direct messages"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:294
-msgid "Status: "
+#: ../../Zotlabs/Widget/Messages.php:47
+msgid "Starred messages"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:296
-msgid "Homepage: "
+#: ../../Zotlabs/Widget/Messages.php:48
+msgid "Filed messages"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:357
-msgid "Description:"
+#: ../../Zotlabs/Widget/Messages.php:51
+msgid "No messages"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:359
-msgid "Unsafe"
+#: ../../Zotlabs/Widget/Messages.php:52
+msgid "Unseen"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:362
-msgid "Spam"
+#: ../../Zotlabs/Widget/Messages.php:54
+msgid "Filter by file name"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:372
-msgid "Public Forum:"
+#: ../../Zotlabs/Widget/Hq_controls.php:23
+msgid "Toggle post editor"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:375
-msgid "Keywords: "
+#: ../../Zotlabs/Widget/Hq_controls.php:33
+msgid "Toggle personal notes"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:378
-msgid "Don't suggest"
+#: ../../Zotlabs/Widget/Hq_controls.php:43
+msgid "Channel activities"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:380
-msgid "Common connections (estimated):"
+#: ../../Zotlabs/Widget/Album.php:84 ../../Zotlabs/Widget/Portfolio.php:91
+#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Module/Photos.php:782
+#: ../../Zotlabs/Module/Photos.php:1324
+msgid "View Photo"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:430
-msgid "Global Directory"
+#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112
+#: ../../Zotlabs/Module/Embedphotos.php:187 ../../Zotlabs/Module/Photos.php:813
+msgid "Edit Album"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:430
-msgid "Local Directory"
+#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Portfolio.php:114
+#: ../../Zotlabs/Widget/Cdav.php:152 ../../Zotlabs/Widget/Cdav.php:188
+#: ../../Zotlabs/Storage/Browser.php:546
+#: ../../Zotlabs/Module/Cover_photo.php:381
+#: ../../Zotlabs/Module/Embedphotos.php:189
+#: ../../Zotlabs/Module/Profile_photo.php:547
+#: ../../Zotlabs/Module/Photos.php:681
+msgid "Upload"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:436
-msgid "Finding:"
+#: ../../Zotlabs/Widget/Pinned.php:95
+msgid "Share This"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:441
-msgid "next page"
+#: ../../Zotlabs/Widget/Pinned.php:117 ../../Zotlabs/Widget/Pinned.php:118
+#, php-format
+msgid "View %s's profile - %s"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:441
-msgid "previous page"
+#: ../../Zotlabs/Widget/Pinned.php:151
+msgid "Don't show"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:442
-msgid "Sort options"
+#: ../../Zotlabs/Widget/Follow.php:27 ../../Zotlabs/Module/Connections.php:377
+#, php-format
+msgid "You have %1$.0f of %2$.0f allowed connections."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:443
-msgid "Alphabetic"
+#: ../../Zotlabs/Widget/Follow.php:34
+msgid "Add New Connection"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:444
-msgid "Reverse Alphabetic"
+#: ../../Zotlabs/Widget/Follow.php:35
+msgid "Enter channel address"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:445
-msgid "Newest to Oldest"
+#: ../../Zotlabs/Widget/Follow.php:36
+msgid "Examples: bob@example.com, https://example.com/barbara"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:446
-msgid "Oldest to Newest"
+#: ../../Zotlabs/Widget/Notes.php:42
+msgid "Read mode"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:464
-msgid "No entries (some entries may be hidden)."
+#: ../../Zotlabs/Widget/Notes.php:43
+msgid "Edit mode"
msgstr ""
-#: ../../Zotlabs/Module/Service_limits.php:23
-msgid "No service class restrictions found."
+#: ../../Zotlabs/Widget/Notes.php:44
+msgid "Editing"
msgstr ""
-#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
-msgid "Tag removed"
+#: ../../Zotlabs/Widget/Notes.php:45
+msgid "Saving"
msgstr ""
-#: ../../Zotlabs/Module/Tagrm.php:123
-msgid "Remove Item Tag"
+#: ../../Zotlabs/Widget/Notes.php:46
+msgid "Saved"
msgstr ""
-#: ../../Zotlabs/Module/Tagrm.php:125
-msgid "Select a tag to remove: "
+#: ../../Zotlabs/Widget/Activity_order.php:96
+msgid "Commented Date"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:80 ../../Zotlabs/Module/Defperms.php:67
-#: ../../Zotlabs/Module/Contactedit.php:78
-msgid "Could not access contact record."
+#: ../../Zotlabs/Widget/Activity_order.php:100
+msgid "Order by last commented date"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:101
-#: ../../Zotlabs/Module/Contactedit.php:107
-msgid "Could not locate selected profile."
+#: ../../Zotlabs/Widget/Activity_order.php:103
+msgid "Posted Date"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:171
-msgid "Connection updated."
+#: ../../Zotlabs/Widget/Activity_order.php:107
+msgid "Order by last posted date"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:173
-msgid "Failed to update connection record."
+#: ../../Zotlabs/Widget/Activity_order.php:110
+msgid "Date Unthreaded"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:215
-#: ../../Zotlabs/Module/Contactedit.php:180
-msgid "is now connected to"
+#: ../../Zotlabs/Widget/Activity_order.php:114
+msgid "Order unthreaded by date"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:320
-msgid "Could not access address book record."
+#: ../../Zotlabs/Widget/Activity_order.php:129
+msgid "Stream Order"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:368
-msgid "Refresh failed - channel is currently unavailable."
+#: ../../Zotlabs/Widget/Activity_filter.php:48
+msgid "Show direct (private) messages"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
-#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
-#: ../../Zotlabs/Module/Connedit.php:422
-msgid "Unable to set address book parameters."
+#: ../../Zotlabs/Widget/Activity_filter.php:57
+msgid "Show posts that include events"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:441
-msgid "Connection has been removed."
+#: ../../Zotlabs/Widget/Activity_filter.php:63
+msgid "Polls"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:483
-#, php-format
-msgid "View %s's profile"
+#: ../../Zotlabs/Widget/Activity_filter.php:67
+msgid "Show posts that include polls"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:487
-msgid "Refresh Permissions"
+#: ../../Zotlabs/Widget/Activity_filter.php:90
+#, php-format
+msgid "Show posts related to the %s privacy group"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:490
-msgid "Fetch updated permissions"
+#: ../../Zotlabs/Widget/Activity_filter.php:99
+msgid "Show my privacy groups"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:494
-msgid "Refresh Photo"
+#: ../../Zotlabs/Widget/Activity_filter.php:123
+msgid "Show posts to this forum"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:497
-msgid "Fetch updated photo"
+#: ../../Zotlabs/Widget/Activity_filter.php:134
+msgid "Show forums"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:504
-msgid "View recent posts and comments"
+#: ../../Zotlabs/Widget/Activity_filter.php:148
+msgid "Starred Posts"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:508
-#: ../../Zotlabs/Module/Admin/Accounts.php:322
-#: ../../Zotlabs/Module/Contactedit.php:623
-msgid "Unblock"
+#: ../../Zotlabs/Widget/Activity_filter.php:152
+msgid "Show posts that I have starred"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:508
-#: ../../Zotlabs/Module/Admin/Accounts.php:321
-#: ../../Zotlabs/Module/Contactedit.php:623
-msgid "Block"
+#: ../../Zotlabs/Widget/Activity_filter.php:163
+msgid "Personal Posts"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:511
-#: ../../Zotlabs/Module/Contactedit.php:625
-msgid "Block (or Unblock) all communications with this connection"
+#: ../../Zotlabs/Widget/Activity_filter.php:167
+msgid "Show posts that mention or involve me"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:512
-#: ../../Zotlabs/Module/Contactedit.php:626
-msgid "This connection is blocked!"
+#: ../../Zotlabs/Widget/Activity_filter.php:190
+#, php-format
+msgid "Show posts that I have filed to %s"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:516
-#: ../../Zotlabs/Module/Contactedit.php:630
-msgid "Unignore"
+#: ../../Zotlabs/Widget/Activity_filter.php:200
+msgid "Show filed post categories"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:516
-#: ../../Zotlabs/Module/Connections.php:360
-#: ../../Zotlabs/Module/Contactedit.php:630
-msgid "Ignore"
+#: ../../Zotlabs/Widget/Activity_filter.php:214
+msgid "Panel search"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:519
-#: ../../Zotlabs/Module/Contactedit.php:632
-msgid "Ignore (or Unignore) all inbound communications from this connection"
+#: ../../Zotlabs/Widget/Activity_filter.php:224
+msgid "Filter by name"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:520
-#: ../../Zotlabs/Module/Contactedit.php:633
-msgid "This connection is ignored!"
+#: ../../Zotlabs/Widget/Activity_filter.php:239
+msgid "Remove active filter"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:524
-#: ../../Zotlabs/Module/Contactedit.php:637
-msgid "Unarchive"
+#: ../../Zotlabs/Widget/Activity_filter.php:255
+msgid "Stream Filters"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:524
-#: ../../Zotlabs/Module/Contactedit.php:637
-msgid "Archive"
+#: ../../Zotlabs/Widget/Channel_activities.php:29
+#: ../../Zotlabs/Module/Go.php:28
+msgid "Welcome"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:527
-#: ../../Zotlabs/Module/Contactedit.php:639
-msgid ""
-"Archive (or Unarchive) this connection - mark channel dead but keep content"
+#: ../../Zotlabs/Widget/Channel_activities.php:46
+msgid "No recent activities"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:528
-#: ../../Zotlabs/Module/Contactedit.php:640
-msgid "This connection is archived!"
-msgstr ""
+#: ../../Zotlabs/Widget/Channel_activities.php:214
+msgctxt "noun"
+msgid "new connection"
+msgid_plural "new connections"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Connedit.php:532
-#: ../../Zotlabs/Module/Contactedit.php:644
-msgid "Unhide"
-msgstr ""
+#: ../../Zotlabs/Widget/Channel_activities.php:220
+msgctxt "noun"
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Connedit.php:532
-#: ../../Zotlabs/Module/Contactedit.php:644
-msgid "Hide"
+#: ../../Zotlabs/Widget/Affinity.php:36
+#: ../../Zotlabs/Module/Contactedit.php:281
+#: ../../Zotlabs/Module/Connedit.php:579
+msgid "Me"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:535
-#: ../../Zotlabs/Module/Contactedit.php:646
-msgid "Hide or Unhide this connection from your other connections"
+#: ../../Zotlabs/Widget/Affinity.php:37
+#: ../../Zotlabs/Module/Contactedit.php:282
+#: ../../Zotlabs/Module/Connedit.php:580
+msgid "Family"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:536
-#: ../../Zotlabs/Module/Contactedit.php:647
-msgid "This connection is hidden!"
+#: ../../Zotlabs/Widget/Affinity.php:39
+#: ../../Zotlabs/Module/Contactedit.php:284
+#: ../../Zotlabs/Module/Connedit.php:582
+msgid "Acquaintances"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:543
-#: ../../Zotlabs/Module/Contactedit.php:653
-msgid "Delete this connection"
+#: ../../Zotlabs/Widget/Affinity.php:40
+#: ../../Zotlabs/Module/Contactedit.php:285
+#: ../../Zotlabs/Module/Connedit.php:583
+#: ../../Zotlabs/Module/Connections.php:97
+#: ../../Zotlabs/Module/Connections.php:111
+msgid "All"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:550
-msgid "Fetch Vcard"
+#: ../../Zotlabs/Widget/Affinity.php:60
+#: ../../Zotlabs/Module/Contactedit.php:618
+msgid "Refresh"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:553
-msgid "Fetch electronic calling card for this connection"
+#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:402
+msgid "Site"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:572
-#: ../../Zotlabs/Module/Contactedit.php:431
-msgid "Affinity"
+#: ../../Zotlabs/Widget/Admin.php:28
+#: ../../Zotlabs/Module/Admin/Accounts.php:208
+#: ../../Zotlabs/Module/Admin/Accounts.php:227
+#: ../../Zotlabs/Module/Admin.php:97
+msgid "Accounts"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:575
-msgid "Open Set Affinity section by default"
+#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66
+msgid "Member registrations waiting for confirmation"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:579
-#: ../../Zotlabs/Module/Contactedit.php:281
-#: ../../Zotlabs/Widget/Affinity.php:36
-msgid "Me"
+#: ../../Zotlabs/Widget/Admin.php:30
+#: ../../Zotlabs/Module/Admin/Security.php:107
+msgid "Security"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:580
-#: ../../Zotlabs/Module/Contactedit.php:282
-#: ../../Zotlabs/Widget/Affinity.php:37
-msgid "Family"
+#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:125
+#: ../../Zotlabs/Module/Admin/Addons.php:192
+msgid "Addons"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:582
-#: ../../Zotlabs/Module/Contactedit.php:284
-#: ../../Zotlabs/Widget/Affinity.php:39
-msgid "Acquaintances"
+#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:139
+#: ../../Zotlabs/Module/Admin/Themes.php:173
+msgid "Themes"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:583
-#: ../../Zotlabs/Module/Connections.php:97
-#: ../../Zotlabs/Module/Connections.php:111
-#: ../../Zotlabs/Module/Contactedit.php:285
-#: ../../Zotlabs/Widget/Affinity.php:40
-msgid "All"
+#: ../../Zotlabs/Widget/Admin.php:34
+msgid "Inspect queue"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:612
-msgid "Filter"
+#: ../../Zotlabs/Widget/Admin.php:35
+msgid "Queueworker"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:615
-msgid "Open Custom Filter section by default"
+#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:169
+msgid "Profile Fields"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Contactedit.php:315
-msgid "Approve this contact"
+#: ../../Zotlabs/Widget/Admin.php:37
+msgid "DB updates"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Contactedit.php:315
-msgid "Accept contact to allow communication"
+#: ../../Zotlabs/Widget/Admin.php:54 ../../Zotlabs/Widget/Admin.php:64
+#: ../../Zotlabs/Module/Admin/Logs.php:84
+msgid "Logs"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:626
-msgid "Set Affinity"
+#: ../../Zotlabs/Widget/Admin.php:62
+msgid "Addon Features"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:629
-msgid "Set Profile"
+#: ../../Zotlabs/Widget/Permcats.php:43
+msgid "Add new role"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:632
-msgid "Set Affinity & Profile"
+#: ../../Zotlabs/Widget/Permcats.php:92
+#: ../../Zotlabs/Module/Contactedit.php:395
+msgid "Contact roles"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:658
-#: ../../Zotlabs/Module/Contactedit.php:348
-msgid "Please select a role for this contact!"
+#: ../../Zotlabs/Widget/Permcats.php:93
+msgid "Role members"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:678
-#: ../../Zotlabs/Module/Contactedit.php:368
-msgid "This contact is unreachable from this location."
+#: ../../Zotlabs/Widget/Activity.php:55
+msgctxt "widget"
+msgid "Activity"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:679
-#: ../../Zotlabs/Module/Contactedit.php:369
-msgid "This contact may be unreachable from other channel locations."
+#: ../../Zotlabs/Widget/Photo.php:54 ../../Zotlabs/Widget/Photo_rand.php:63
+msgid "photo/image"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:681
-#: ../../Zotlabs/Module/Contactedit.php:371
-msgid "Location independence is not supported by their network."
+#: ../../Zotlabs/Widget/Savedsearch.php:81
+msgid "Remove term"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:685
-#, php-format
-msgid "Contact: %s"
+#: ../../Zotlabs/Widget/Chatroom_members.php:17
+msgid "Chat Members"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:686
-#: ../../Zotlabs/Module/Connections.php:404
-msgid "Contact role"
+#: ../../Zotlabs/Widget/Suggestedchats.php:36
+msgid "Suggested Chatrooms"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:687
-msgid "Manage contact roles"
+#: ../../Zotlabs/Widget/Appcategories.php:49
+msgid "App Categories"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:694
-msgid "This contacts's primary address is"
+#: ../../Zotlabs/Widget/Settings_menu.php:37
+msgid "Account settings"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:695
-msgid "Available locations:"
+#: ../../Zotlabs/Widget/Settings_menu.php:43
+msgid "Channel settings"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:700 ../../Zotlabs/Module/Defperms.php:259
-msgid ""
-"The permissions indicated on this page will be applied to all new "
-"connections."
+#: ../../Zotlabs/Widget/Settings_menu.php:49
+msgid "Privacy settings"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:701
-#: ../../Zotlabs/Module/Contactedit.php:238
-#: ../../Zotlabs/Module/Contactedit.php:387
-msgid "Contact Tools"
+#: ../../Zotlabs/Widget/Settings_menu.php:56
+msgid "Display settings"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:703
-#: ../../Zotlabs/Module/Contactedit.php:406
-msgid "Slide to adjust your degree of friendship"
+#: ../../Zotlabs/Widget/Settings_menu.php:63
+msgid "Manage locations"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:705
-#: ../../Zotlabs/Module/Contactedit.php:408
-msgid "Custom Filter"
+#: ../../Zotlabs/Widget/Archive.php:49
+msgid "Archives"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:706
-#: ../../Zotlabs/Module/Settings/Channel.php:287
-#: ../../Zotlabs/Module/Contactedit.php:409
-msgid "Only import posts with this text"
+#: ../../Zotlabs/Widget/Cdav.php:41
+msgid "Select Channel"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Admin/Site.php:501
-#: ../../Zotlabs/Module/Admin/Site.php:502
-#: ../../Zotlabs/Module/Contactedit.php:409
-#: ../../Zotlabs/Module/Contactedit.php:410
-msgid ""
-"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
-"all posts"
+#: ../../Zotlabs/Widget/Cdav.php:46
+msgid "Read-write"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Settings/Channel.php:286
-#: ../../Zotlabs/Module/Contactedit.php:410
-msgid "Do not import posts with this text"
+#: ../../Zotlabs/Widget/Cdav.php:47
+msgid "Read-only"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:710
-msgid "Contact Pending Approval"
+#: ../../Zotlabs/Widget/Cdav.php:133
+msgid "Channel Calendar"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:713 ../../Zotlabs/Module/Defperms.php:261
-#: ../../Zotlabs/Module/Permcats.php:253
-msgid "inherited"
+#: ../../Zotlabs/Widget/Cdav.php:135 ../../Zotlabs/Widget/Cdav.php:149
+#: ../../Zotlabs/Module/Cdav.php:1046
+msgid "CalDAV Calendars"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:714
-#: ../../Zotlabs/Module/Contactedit.php:415
-msgid "Approve contact"
+#: ../../Zotlabs/Widget/Cdav.php:137
+msgid "Shared CalDAV Calendars"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:715
-#, php-format
-msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
+#: ../../Zotlabs/Widget/Cdav.php:141
+msgid "Share this calendar"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:717
-#: ../../Zotlabs/Module/Contactedit.php:417
-msgid "Their"
+#: ../../Zotlabs/Widget/Cdav.php:143
+msgid "Calendar name and color"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:718
-#: ../../Zotlabs/Module/Contactedit.php:418
-msgid "My"
+#: ../../Zotlabs/Widget/Cdav.php:145
+msgid "Create new CalDAV calendar"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Defperms.php:266
-msgid "Individual Permissions"
+#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184
+#: ../../Zotlabs/Storage/Browser.php:368 ../../Zotlabs/Storage/Browser.php:544
+#: ../../Zotlabs/Module/Webpages.php:248 ../../Zotlabs/Module/Connedit.php:747
+#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Menu.php:182
+#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/New_channel.php:190
+#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1383
+msgid "Create"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:721
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can <strong>not</strong> change those "
-"settings here."
+#: ../../Zotlabs/Widget/Cdav.php:147
+msgid "Calendar Name"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:722
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can change those settings here but "
-"they wont have any impact unless the inherited setting changes."
+#: ../../Zotlabs/Widget/Cdav.php:148
+msgid "Calendar Tools"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:723
-msgid "Last update:"
+#: ../../Zotlabs/Widget/Cdav.php:149 ../../Zotlabs/Module/Cdav.php:1046
+msgid "Channel Calendars"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:731
-msgid "Details"
+#: ../../Zotlabs/Widget/Cdav.php:150
+msgid "Import calendar"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:733 ../../Zotlabs/Module/Cdav.php:1369
-msgid "Organisation"
+#: ../../Zotlabs/Widget/Cdav.php:151
+msgid "Select a calendar to import to"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:734 ../../Zotlabs/Module/Cdav.php:1370
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2653
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2722
-msgid "Title"
+#: ../../Zotlabs/Widget/Cdav.php:178
+msgid "Addressbooks"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:735 ../../Zotlabs/Module/Cdav.php:1371
-msgid "Phone"
+#: ../../Zotlabs/Widget/Cdav.php:180
+msgid "Addressbook name"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Cdav.php:1373
-msgid "Instant messenger"
+#: ../../Zotlabs/Widget/Cdav.php:182
+msgid "Create new addressbook"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:738 ../../Zotlabs/Module/Cdav.php:1374
-msgid "Website"
+#: ../../Zotlabs/Widget/Cdav.php:183
+msgid "Addressbook Name"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Cdav.php:1376
-msgid "Note"
+#: ../../Zotlabs/Widget/Cdav.php:185
+msgid "Addressbook Tools"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:745 ../../Zotlabs/Module/Cdav.php:1381
-msgid "Add Contact"
+#: ../../Zotlabs/Widget/Cdav.php:186
+msgid "Import addressbook"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:746 ../../Zotlabs/Module/Cdav.php:1382
-msgid "Add Field"
+#: ../../Zotlabs/Widget/Cdav.php:187
+msgid "Select an addressbook to import to"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:751 ../../Zotlabs/Module/Cdav.php:1387
-msgid "P.O. Box"
+#: ../../Zotlabs/Widget/Privacygroups.php:45
+msgid "Add new group"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:752 ../../Zotlabs/Module/Cdav.php:1388
-msgid "Additional"
+#: ../../Zotlabs/Widget/Privacygroups.php:54
+#: ../../Zotlabs/Module/Contactedit.php:429
+msgid "Privacy groups"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:753 ../../Zotlabs/Module/Cdav.php:1389
-msgid "Street"
+#: ../../Zotlabs/Storage/Browser.php:292
+msgid "Change filename to"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:754 ../../Zotlabs/Module/Cdav.php:1390
-msgid "Locality"
+#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394
+msgid "Select a target location"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:755 ../../Zotlabs/Module/Cdav.php:1391
-msgid "Region"
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:395
+msgid "Copy to target location"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:756 ../../Zotlabs/Module/Cdav.php:1392
-msgid "ZIP Code"
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:393
+msgid "Set permissions for all files and sub folders"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:71
-msgid "Nothing to import."
+#: ../../Zotlabs/Storage/Browser.php:312
+msgid "Notify your contacts about this file"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:87 ../../Zotlabs/Module/Import.php:101
-msgid "Unable to download data from old server"
+#: ../../Zotlabs/Storage/Browser.php:351
+msgid "File category"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:164
-#, php-format
-msgid "Your service plan only allows %d channels."
+#: ../../Zotlabs/Storage/Browser.php:365
+msgid "Total"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:191
-msgid "No channel. Import failed."
+#: ../../Zotlabs/Storage/Browser.php:367
+msgid "Shared"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:197
-msgid "Channel exists but has been marked removed on this hub. Import failed."
+#: ../../Zotlabs/Storage/Browser.php:369
+msgid "Add Files"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:568
-msgid ""
-"Automatic content and files import was not possible due to API version "
-"incompatiblity. Please import content and files manually!"
+#: ../../Zotlabs/Storage/Browser.php:384
+#: ../../Zotlabs/Module/Sharedwithme.php:110
+msgid "Last Modified"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:596
-msgid "You must be logged in to use this feature."
+#: ../../Zotlabs/Storage/Browser.php:385
+msgid "parent"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:603
-msgid "Channel Import"
+#: ../../Zotlabs/Storage/Browser.php:390
+#: ../../Zotlabs/Module/Filestorage.php:206
+msgid "Copy/paste this code to attach file to a post"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:604
-msgid ""
-"Use this form to import an existing channel from a different server/hub. You "
-"may retrieve the channel identity from the old server/hub via the network or "
-"provide an export file."
+#: ../../Zotlabs/Storage/Browser.php:391
+#: ../../Zotlabs/Module/Filestorage.php:207
+msgid "Copy/paste this URL to link file from a web page"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:606
-msgid "Or provide the old server/hub details"
+#: ../../Zotlabs/Storage/Browser.php:402
+msgid "Select All"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:608
-msgid "Your old identity address (xyz@example.com)"
+#: ../../Zotlabs/Storage/Browser.php:403
+msgid "Bulk Actions"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:609
-msgid "Your old login email address"
+#: ../../Zotlabs/Storage/Browser.php:404
+msgid "Adjust Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:610
-msgid "Your old login password"
+#: ../../Zotlabs/Storage/Browser.php:405
+msgid "Move or Copy"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:611
-msgid "Import your items and files (limited by available memory)"
+#: ../../Zotlabs/Storage/Browser.php:408
+msgid "Info"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:613
-msgid ""
-"For either option, please choose whether to make this hub your new primary "
-"address, or whether your old location should continue this role. You will be "
-"able to post from either location, but only one can be marked as the primary "
-"location for files, photos, and media."
+#: ../../Zotlabs/Storage/Browser.php:409
+msgid "Rename"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:615
-msgid "Make this hub my primary location"
+#: ../../Zotlabs/Storage/Browser.php:411
+msgid "Attachment BBcode"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:616
-msgid "Move this channel (disable all previous locations)"
+#: ../../Zotlabs/Storage/Browser.php:412
+msgid "Embed BBcode"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:617
-msgid "Use this channel nickname instead of the one provided"
+#: ../../Zotlabs/Storage/Browser.php:413
+msgid "Link BBcode"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:617
-msgid ""
-"Leave blank to keep your existing channel nickname. You will be randomly "
-"assigned a similar nickname if either name is already allocated on this site."
+#: ../../Zotlabs/Storage/Browser.php:486
+#, php-format
+msgid "You are using %1$s of your available file storage."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:619
-msgid ""
-"This process may take several minutes to complete. Please submit the form "
-"only once and leave this page open until finished."
+#: ../../Zotlabs/Storage/Browser.php:491
+#, php-format
+msgid "You are using %1$s of %2$s available file storage. (%3$s&#37;)"
msgstr ""
-#: ../../Zotlabs/Module/Editwebpage.php:139
-msgid "Page link"
+#: ../../Zotlabs/Storage/Browser.php:502
+msgid "WARNING:"
msgstr ""
-#: ../../Zotlabs/Module/Editwebpage.php:166
-msgid "Edit Webpage"
+#: ../../Zotlabs/Storage/Browser.php:543
+msgid "Create new folder"
msgstr ""
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "Enter a folder name"
+#: ../../Zotlabs/Storage/Browser.php:545
+msgid "Upload file"
msgstr ""
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "or select an existing folder (doubleclick)"
+#: ../../Zotlabs/Storage/Browser.php:557
+msgid "Drop files here to immediately upload"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:35 ../../Zotlabs/Module/Profperm.php:64
-msgid "Invalid profile identifier."
+#: ../../Zotlabs/Storage/Browser.php:558
+#: ../../Zotlabs/Module/Filestorage.php:211
+msgid "Show in your contacts shared folder"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:112
-msgid "Profile Visibility Editor"
+#: ../../Zotlabs/Storage/Browser.php:560
+msgid ""
+"You can select files via the upload button or drop them right here or into "
+"an existing folder."
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:116
-msgid "Click on a contact to add or remove."
+#: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29
+msgid "Invalid item."
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:125
-msgid "Visible To"
+#: ../../Zotlabs/Module/Page.php:174
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:141
-#: ../../Zotlabs/Module/Connections.php:221
-msgid "All Connections"
+#: ../../Zotlabs/Module/Import_progress.php:40
+msgid "Item sync completed!"
msgstr ""
-#: ../../Zotlabs/Module/Cal.php:62
-msgid "Permissions denied."
+#: ../../Zotlabs/Module/Import_progress.php:63
+#: ../../Zotlabs/Module/Import_progress.php:112
+msgid "Import host does not seem to be online or compatible"
msgstr ""
-#: ../../Zotlabs/Module/Cal.php:201 ../../Zotlabs/Module/Cdav.php:1028
-msgid "Today"
+#: ../../Zotlabs/Module/Import_progress.php:74
+msgid "Item sync completed but no items were found!"
msgstr ""
-#: ../../Zotlabs/Module/Dircensor.php:61
-msgid "Entry censored"
+#: ../../Zotlabs/Module/Import_progress.php:91
+msgid "File sync completed!"
msgstr ""
-#: ../../Zotlabs/Module/Dircensor.php:64
-msgid "Entry OK"
+#: ../../Zotlabs/Module/Import_progress.php:123
+msgid "File sync completed but no files were found!"
msgstr ""
-#: ../../Zotlabs/Module/Acl.php:371
-msgid "network"
+#: ../../Zotlabs/Module/Import_progress.php:141
+msgid "Channel clone status"
msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69
-msgid "This setting requires special processing and editing has been blocked."
+#: ../../Zotlabs/Module/Import_progress.php:142
+msgid "Item sync status"
msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:58
-msgid "Configuration Editor"
+#: ../../Zotlabs/Module/Import_progress.php:143
+msgid "File sync status"
msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:59
-msgid ""
-"Warning: Changing some settings could render your channel inoperable. Please "
-"leave this page unless you are comfortable with and knowledgeable about how "
-"to correctly use this feature."
+#: ../../Zotlabs/Module/Import_progress.php:150
+msgid "Channel cloning completed!"
msgstr ""
-#: ../../Zotlabs/Module/Xchan.php:10
-msgid "Xchan Lookup"
+#: ../../Zotlabs/Module/Import_progress.php:151
+msgid "Resume"
msgstr ""
-#: ../../Zotlabs/Module/Xchan.php:13
-msgid "Lookup xchan beginning with (or webbie): "
+#: ../../Zotlabs/Module/Import_progress.php:152
+msgid "Only resume if sync stalled!"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:113
-msgid "Email address required"
+#: ../../Zotlabs/Module/Display.php:27 ../../Zotlabs/Module/Search.php:24
+#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Directory.php:77
+#: ../../Zotlabs/Module/Viewconnections.php:23
+#: ../../Zotlabs/Module/Photos.php:511
+msgid "Public access denied."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:157
-msgid "No password provided"
+#: ../../Zotlabs/Module/Display.php:53 ../../Zotlabs/Module/Oep.php:82
+#: ../../Zotlabs/Module/Pubstream.php:55 ../../Zotlabs/Module/Channel.php:195
+msgid "Malformed message id."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:180
-msgid "Terms of Service not accepted"
+#: ../../Zotlabs/Module/Display.php:95 ../../Zotlabs/Module/Network.php:213
+#: ../../Zotlabs/Module/Hq.php:99 ../../Zotlabs/Module/Pubstream.php:98
+#: ../../Zotlabs/Module/Channel.php:279 ../../Zotlabs/Module/Rpost.php:111
+msgid "Reset form"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:242
-msgid "Invitation code succesfully applied"
+#: ../../Zotlabs/Module/Display.php:320 ../../Zotlabs/Module/Channel.php:501
+msgid ""
+"You must enable javascript for your browser to be able to view this content."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:262
-msgid "Invitation not in time or too late"
+#: ../../Zotlabs/Module/Display.php:340
+msgid "Article"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:268
-msgid "Invitation email failed"
+#: ../../Zotlabs/Module/Display.php:389
+msgid "Item has been removed."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:276
-msgid "Invitation code failed"
+#: ../../Zotlabs/Module/Cover_photo.php:86
+#: ../../Zotlabs/Module/Profile_photo.php:129
+msgid "Image uploaded but image cropping failed."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:283
-msgid "Invitations are not available"
+#: ../../Zotlabs/Module/Cover_photo.php:195
+#: ../../Zotlabs/Module/Cover_photo.php:252
+msgid "Cover Photos"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:293
-msgid "Registration on this hub is by invitation only"
+#: ../../Zotlabs/Module/Cover_photo.php:211
+#: ../../Zotlabs/Module/Profile_photo.php:185
+msgid "Image resize failed."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:400
-msgid "New register request"
+#: ../../Zotlabs/Module/Cover_photo.php:263
+#: ../../Zotlabs/Module/Profile_photo.php:350
+msgid "Image upload failed."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:418
-msgid "Error creating dId A"
+#: ../../Zotlabs/Module/Cover_photo.php:280
+#: ../../Zotlabs/Module/Profile_photo.php:370
+msgid "Unable to process image."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:437
-msgid "Registration on this hub is disabled."
+#: ../../Zotlabs/Module/Cover_photo.php:325
+#: ../../Zotlabs/Module/Cover_photo.php:340
+#: ../../Zotlabs/Module/Profile_photo.php:432
+#: ../../Zotlabs/Module/Profile_photo.php:497
+msgid "Photo not available."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:446
-msgid "Why do you want to join this hub?"
+#: ../../Zotlabs/Module/Cover_photo.php:376
+msgid "Your cover photo may be visible to anybody on the internet"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:446
-msgid "This will help to review your registration"
+#: ../../Zotlabs/Module/Cover_photo.php:378
+msgid "Upload File:"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:447
-msgid "Registration on this hub is by approval only."
+#: ../../Zotlabs/Module/Cover_photo.php:379
+msgid "Select a profile:"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:448
-msgid "Register at another affiliated hub in case when prefered"
+#: ../../Zotlabs/Module/Cover_photo.php:380
+msgid "Change Cover Photo"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:461
-msgid "Registration on this hub is by invitation only."
+#: ../../Zotlabs/Module/Cover_photo.php:384
+#: ../../Zotlabs/Module/Cover_photo.php:385
+#: ../../Zotlabs/Module/Profile_photo.php:551
+#: ../../Zotlabs/Module/Profile_photo.php:552
+msgid "Use a photo from your albums"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:462
-msgid "Register at another affiliated hub"
+#: ../../Zotlabs/Module/Cover_photo.php:396
+msgid "Select existing photo"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:476 ../../Zotlabs/Module/Siteinfo.php:29
-msgid "Terms of Service"
+#: ../../Zotlabs/Module/Cover_photo.php:413
+#: ../../Zotlabs/Module/Profile_photo.php:581
+msgid "Crop Image"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:482
-#, php-format
-msgid "I accept the %s for this website"
+#: ../../Zotlabs/Module/Cover_photo.php:414
+#: ../../Zotlabs/Module/Profile_photo.php:582
+msgid "Please adjust the image cropping for optimum viewing."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:489
-#, php-format
-msgid "I am over %s years of age and accept the %s for this website"
+#: ../../Zotlabs/Module/Cover_photo.php:416
+msgid "Done Editing"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:499
-msgid "Your email address"
+#: ../../Zotlabs/Module/Editwebpage.php:139
+msgid "Page link"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:506
-msgid "Choose a password"
+#: ../../Zotlabs/Module/Editwebpage.php:166
+msgid "Edit Webpage"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:507
-msgid "Please re-enter your password"
+#: ../../Zotlabs/Module/Sse_bs.php:633
+msgid "Private forum"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:509
-msgid "Please enter your invitation code"
+#: ../../Zotlabs/Module/Sse_bs.php:633
+msgid "Public forum"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:511
-msgid "Your name"
+#: ../../Zotlabs/Module/Webpages.php:67
+msgid "Import Webpage Elements"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:511
-msgid "Real name is preferred"
+#: ../../Zotlabs/Module/Webpages.php:68
+msgid "Import selected"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:513
-msgid ""
-"Your nickname will be used to create an easy to remember channel address"
+#: ../../Zotlabs/Module/Webpages.php:90
+msgid "Export Webpage Elements"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:521
-#: ../../Zotlabs/Module/Admin/Site.php:403
-msgid "Registration"
+#: ../../Zotlabs/Module/Webpages.php:91
+msgid "Export selected"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:529
-msgid "I have an invite code"
+#: ../../Zotlabs/Module/Webpages.php:257
+msgid "Actions"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:576
-msgid ""
-"This site has exceeded the number of allowed daily account registrations."
+#: ../../Zotlabs/Module/Webpages.php:258
+msgid "Page Link"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:27
-msgid "Public Hubs"
+#: ../../Zotlabs/Module/Webpages.php:259
+msgid "Page Title"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:30
-msgid ""
-"The listed hubs allow public registration for the $Projectname network. All "
-"hubs in the network are interlinked so membership on any of them conveys "
-"membership in the network as a whole. Some hubs may require subscription or "
-"provide tiered service plans. The hub itself <strong>may</strong> provide "
-"additional details."
+#: ../../Zotlabs/Module/Webpages.php:260 ../../Zotlabs/Module/Layouts.php:189
+#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Blocks.php:155
+msgid "Created"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:36
-msgid "Hub URL"
+#: ../../Zotlabs/Module/Webpages.php:261 ../../Zotlabs/Module/Layouts.php:190
+#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Blocks.php:156
+msgid "Edited"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:36
-msgid "Access Type"
+#: ../../Zotlabs/Module/Webpages.php:289
+msgid "Invalid file type."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:36
-msgid "Registration Policy"
+#: ../../Zotlabs/Module/Webpages.php:301
+msgid "Error opening zip file"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:36
-msgid "Stats"
+#: ../../Zotlabs/Module/Webpages.php:312
+msgid "Invalid folder path."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:36
-msgid "Software"
+#: ../../Zotlabs/Module/Webpages.php:339
+msgid "No webpage elements detected."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:38
-msgid "Ratings"
+#: ../../Zotlabs/Module/Webpages.php:414
+msgid "Import complete."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:52
-msgid "Rate"
+#: ../../Zotlabs/Module/Impel.php:188
+#, php-format
+msgid "%s element installed"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:139
-msgid "Thing updated"
+#: ../../Zotlabs/Module/Impel.php:191
+#, php-format
+msgid "%s element installation failed"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:191
-msgid "Object store: failed"
+#: ../../Zotlabs/Module/Oauth.php:45
+msgid "Name is required"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:195
-msgid "Thing added"
+#: ../../Zotlabs/Module/Oauth.php:49
+msgid "Key and Secret are required"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:210
-#, php-format
-msgid "OBJ: %1$s %2$s %3$s"
+#: ../../Zotlabs/Module/Oauth.php:109 ../../Zotlabs/Module/Oauth.php:134
+#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141
+#: ../../Zotlabs/Module/Oauth2.php:191
+msgid "Add application"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:277 ../../Zotlabs/Module/Thing.php:301
-msgid "item not found."
+#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth2.php:117
+#: ../../Zotlabs/Module/Oauth2.php:144
+msgid "Name of application"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:336
-msgid "Edit Thing"
+#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:114
+#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:145
+msgid "Automatically generated - change if desired. Max length 20"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:338 ../../Zotlabs/Module/Thing.php:394
-msgid "Select a profile"
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:140
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:146
+msgid "Redirect"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
-msgid "Post an activity"
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth2.php:119
+#: ../../Zotlabs/Module/Oauth2.php:146
+msgid ""
+"Redirect URI - leave blank unless your application specifically requires this"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
-msgid "Only sends to viewers of the applicable profile"
+#: ../../Zotlabs/Module/Oauth.php:116 ../../Zotlabs/Module/Oauth.php:141
+msgid "Icon url"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:344 ../../Zotlabs/Module/Thing.php:399
-msgid "Name of thing e.g. something"
+#: ../../Zotlabs/Module/Oauth.php:116 ../../Zotlabs/Module/Register.php:501
+#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
+msgid "Optional"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:346 ../../Zotlabs/Module/Thing.php:400
-msgid "URL of thing (optional)"
+#: ../../Zotlabs/Module/Oauth.php:126
+msgid "Application not found."
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:348 ../../Zotlabs/Module/Thing.php:401
-msgid "URL for photo of thing (optional)"
+#: ../../Zotlabs/Module/Oauth.php:169
+msgid "Connected OAuth Apps"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:392
-msgid "Add Thing to your Profile"
+#: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Oauth2.php:194
+msgid "Client key starts with"
msgstr ""
-#: ../../Zotlabs/Module/Home.php:105
-#, php-format
-msgid "Welcome to %s"
+#: ../../Zotlabs/Module/Oauth.php:174 ../../Zotlabs/Module/Oauth2.php:195
+msgid "No name"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:154
-msgid "Block Title"
+#: ../../Zotlabs/Module/Oauth.php:175 ../../Zotlabs/Module/Oauth2.php:196
+msgid "Remove authorization"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:111
-#: ../../Zotlabs/Module/Settings/Channel.php:151
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:163
-#: ../../extend/addon/hzaddons/piwik/piwik.php:116
-#: ../../extend/addon/hzaddons/twitter/twitter.php:493
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:108
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:82
-#: ../../extend/addon/hzaddons/logrot/logrot.php:54
-#: ../../extend/addon/hzaddons/xmpp/xmpp.php:54
-#: ../../extend/addon/hzaddons/faces/faces.php:291
-#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:54
-msgid "Settings updated."
+#: ../../Zotlabs/Module/Network.php:108
+msgid "No such group"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:252
-msgid "Connection Default Permissions"
+#: ../../Zotlabs/Module/Network.php:160
+msgid "No such channel"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:253
-msgid "Apply these permissions automatically"
+#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:246
+msgid "Search Results For:"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:253
-msgid ""
-"If enabled, connection requests will be approved without your interaction"
+#: ../../Zotlabs/Module/Network.php:248
+msgid "Privacy group is empty"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:254
-msgid "Permission role"
+#: ../../Zotlabs/Module/Network.php:258
+msgid "Privacy group: "
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:255
-msgid "Add permission role"
+#: ../../Zotlabs/Module/Apps.php:51
+msgid "Installed Apps"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:260
-msgid "Automatic approval settings"
+#: ../../Zotlabs/Module/Apps.php:54
+msgid "Manage Apps"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:263
-msgid "My Settings"
+#: ../../Zotlabs/Module/Apps.php:55
+msgid "Create Custom App"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:267
-msgid ""
-"Some individual permissions may have been preset or locked based on your "
-"channel type and privacy settings."
+#: ../../Zotlabs/Module/Service_limits.php:23
+msgid "No service class restrictions found."
msgstr ""
#: ../../Zotlabs/Module/Lostpass.php:19
@@ -8603,320 +8953,275 @@ msgstr ""
msgid "Reset"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
-msgid "Location not found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:74
-msgid "Location lookup failed."
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:78
-msgid ""
-"Please select another location to become primary before removing the primary "
-"location."
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:106
-msgid "Syncing locations"
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:115
-msgid "No locations found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:120
-msgid "Manage Channel Locations"
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:123
-#: ../../extend/addon/hzaddons/workflow/workflow.php:288
-msgid "Primary"
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:126
-msgid "Sync Now"
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:127
-msgid "Please wait several minutes between consecutive operations."
-msgstr ""
-
-#: ../../Zotlabs/Module/Locs.php:128
+#: ../../Zotlabs/Module/Removeme.php:35
msgid ""
-"When possible, drop a location by logging into that website/hub and removing "
-"your channel."
+"Channel removals are not allowed within 48 hours of changing the account "
+"password."
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:129
-msgid "Use this form to drop the location if the hub is no longer operating."
+#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
+#: ../../Zotlabs/Module/Settings/Channel.php:283
+msgid "Remove Channel"
msgstr ""
-#: ../../Zotlabs/Module/Totp_check.php:71
-#: ../../Zotlabs/Module/Admin/Account_edit.php:61
-msgid "Account not found."
+#: ../../Zotlabs/Module/Removeme.php:61
+#: ../../Zotlabs/Module/Removeaccount.php:58
+#: ../../Zotlabs/Module/Changeaddr.php:78
+msgid "WARNING: "
msgstr ""
-#: ../../Zotlabs/Module/Totp_check.php:78
-msgid "Multifactor Verification"
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This channel will be permanently removed. "
msgstr ""
-#: ../../Zotlabs/Module/Totp_check.php:80
-msgid "Please enter the verification key from your authenticator app"
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This action can not be undone!"
msgstr ""
-#: ../../Zotlabs/Module/Totp_check.php:81
-msgid "Verify"
+#: ../../Zotlabs/Module/Removeme.php:62
+#: ../../Zotlabs/Module/Removeaccount.php:59
+#: ../../Zotlabs/Module/Changeaddr.php:79
+msgid "Please enter your password for verification:"
msgstr ""
-#: ../../Zotlabs/Module/Page.php:174
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
-"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
-"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
-"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
-"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+#: ../../Zotlabs/Module/Import_items.php:50
+msgid "Not a zip file or zip file corrupted."
msgstr ""
-#: ../../Zotlabs/Module/Vote.php:40
-msgid "Poll not found."
+#: ../../Zotlabs/Module/Import_items.php:121
+msgid "Import Items"
msgstr ""
-#: ../../Zotlabs/Module/Vote.php:69
-msgid "Invalid response."
+#: ../../Zotlabs/Module/Import_items.php:122
+msgid "Use this form to import existing posts and content from an export file."
msgstr ""
-#: ../../Zotlabs/Module/Vote.php:125
-msgid "Response submitted. Updates may not appear instantly."
+#: ../../Zotlabs/Module/Import_items.php:123
+#: ../../Zotlabs/Module/Import.php:606
+msgid "File to Upload"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:269
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:299
-msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
+#: ../../Zotlabs/Module/Import_items.php:136
+#: ../../Zotlabs/Module/Import.php:108
+msgid "Imported file is empty."
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:544
-msgid ""
-"This profile photo will be visible to anybody on the internet and may be "
-"distributed to other websites."
+#: ../../Zotlabs/Module/Import_items.php:159
+msgid "Content import completed"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:544
-msgid ""
-"This profile photo will be visible only to channels with permission to view "
-"this profile."
+#: ../../Zotlabs/Module/Import_items.php:164
+msgid "Chatroom import completed"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:546
-msgid "Use Photo for Profile"
+#: ../../Zotlabs/Module/Import_items.php:170
+msgid "Channel calendar import 1/2 completed"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:546
-msgid "Change Profile Photo"
+#: ../../Zotlabs/Module/Import_items.php:176
+msgid "Channel calendar import 2/2 completed"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:548
-msgid "Reset to default"
+#: ../../Zotlabs/Module/Import_items.php:181
+msgid "Menu import completed"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:562
-msgid "Select existing"
+#: ../../Zotlabs/Module/Import_items.php:186
+msgid "Wiki import completed"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:584
-msgid "Done editing"
+#: ../../Zotlabs/Module/Import_items.php:191
+msgid "Webpages import completed"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:67
-msgid "Import Webpage Elements"
+#: ../../Zotlabs/Module/Regdir.php:53 ../../Zotlabs/Module/Dirsearch.php:24
+msgid "This site is not a directory server"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:68
-msgid "Import selected"
+#: ../../Zotlabs/Module/Notifications.php:101 ../../Zotlabs/Module/Menu.php:180
+#: ../../Zotlabs/Module/Connections.php:83
+#: ../../Zotlabs/Module/Connections.php:92
+msgid "New"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:91
-msgid "Export Webpage Elements"
+#: ../../Zotlabs/Module/Notifications.php:106
+#: ../../Zotlabs/Module/Notify.php:85
+msgid "No more system notifications."
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:92
-msgid "Export selected"
+#: ../../Zotlabs/Module/Notifications.php:110
+#: ../../Zotlabs/Module/Notify.php:89
+msgid "System Notifications"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:258
-msgid "Actions"
+#: ../../Zotlabs/Module/Notifications.php:111
+msgid "Mark all seen"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:259
-msgid "Page Link"
+#: ../../Zotlabs/Module/Z6trans.php:19
+msgid "Update to Hubzilla 5.0 step 2"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:260
-msgid "Page Title"
+#: ../../Zotlabs/Module/Z6trans.php:21
+msgid "To complete the update please run"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:290
-msgid "Invalid file type."
+#: ../../Zotlabs/Module/Z6trans.php:23
+msgid "php util/z6convert.php"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:302
-msgid "Error opening zip file"
+#: ../../Zotlabs/Module/Z6trans.php:25
+msgid "from the terminal."
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:313
-msgid "Invalid folder path."
+#: ../../Zotlabs/Module/Thing.php:146
+msgid "Thing updated"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:340
-msgid "No webpage elements detected."
+#: ../../Zotlabs/Module/Thing.php:198
+msgid "Object store: failed"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:415
-msgid "Import complete."
+#: ../../Zotlabs/Module/Thing.php:202
+msgid "Thing added"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:58
-#: ../../Zotlabs/Module/Connections.php:116
-msgid "Active"
+#: ../../Zotlabs/Module/Thing.php:217
+#, php-format
+msgid "OBJ: %1$s %2$s %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:63
-#: ../../Zotlabs/Module/Connections.php:185
-#: ../../Zotlabs/Module/Connections.php:296
-msgid "Blocked"
+#: ../../Zotlabs/Module/Thing.php:284 ../../Zotlabs/Module/Thing.php:308
+msgid "item not found."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:68
-#: ../../Zotlabs/Module/Connections.php:192
-#: ../../Zotlabs/Module/Connections.php:295
-msgid "Ignored"
+#: ../../Zotlabs/Module/Thing.php:343
+msgid "Edit Thing"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:73
-#: ../../Zotlabs/Module/Connections.php:206
-#: ../../Zotlabs/Module/Connections.php:294
-msgid "Hidden"
+#: ../../Zotlabs/Module/Thing.php:345 ../../Zotlabs/Module/Thing.php:399
+msgid "Select a profile"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:78
-#: ../../Zotlabs/Module/Connections.php:199
-msgid "Archived/Unreachable"
+#: ../../Zotlabs/Module/Thing.php:349 ../../Zotlabs/Module/Thing.php:402
+msgid "Post an activity"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:161
-msgid "Active Connections"
+#: ../../Zotlabs/Module/Thing.php:349 ../../Zotlabs/Module/Thing.php:402
+msgid "Only sends to viewers of the applicable profile"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:164
-msgid "Show active connections"
+#: ../../Zotlabs/Module/Thing.php:351 ../../Zotlabs/Module/Thing.php:404
+msgid "Name of thing e.g. something"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:168
-#: ../../Zotlabs/Widget/Notifications.php:96
-msgid "New Connections"
+#: ../../Zotlabs/Module/Thing.php:353 ../../Zotlabs/Module/Thing.php:405
+msgid "URL of thing (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:171
-msgid "Show pending (new) connections"
+#: ../../Zotlabs/Module/Thing.php:355 ../../Zotlabs/Module/Thing.php:406
+msgid "URL for photo of thing (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:188
-msgid "Only show blocked connections"
+#: ../../Zotlabs/Module/Thing.php:397
+msgid "Add Thing to your Profile"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:195
-msgid "Only show ignored connections"
+#: ../../Zotlabs/Module/Removeaccount.php:35
+msgid ""
+"Account removals are not allowed within 48 hours of changing the account "
+"password."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:202
-msgid "Only show archived/unreachable connections"
+#: ../../Zotlabs/Module/Removeaccount.php:57
+msgid "Remove This Account"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:209
-msgid "Only show hidden connections"
+#: ../../Zotlabs/Module/Removeaccount.php:58
+msgid ""
+"This account and all its channels will be completely removed from the "
+"network. "
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:224
-msgid "Show all connections"
+#: ../../Zotlabs/Module/Removeaccount.php:58
+msgid "This action is permanent and can not be undone!"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:292
-msgid "Pending approval"
+#: ../../Zotlabs/Module/Removeaccount.php:61
+#: ../../Zotlabs/Module/Settings/Account.php:113
+msgid "Remove Account"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:293
-msgid "Archived"
+#: ../../Zotlabs/Module/Tokens.php:94
+#, php-format
+msgid "This channel is limited to %d tokens"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:297
-msgid "Not connected at this location"
+#: ../../Zotlabs/Module/Tokens.php:100
+msgid "Name and Password are required."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:336
-#, php-format
-msgid "%1$s [%2$s]"
+#: ../../Zotlabs/Module/Tokens.php:215
+msgid "Token saved."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:337
-msgid "Edit connection"
+#: ../../Zotlabs/Module/Tokens.php:261
+msgid ""
+"Use this form to create temporary access identifiers to share things with "
+"non-members. These identities may be used in privacy groups and visitors may "
+"login using these credentials to access private content."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:339
-msgid "Delete connection"
+#: ../../Zotlabs/Module/Tokens.php:274
+msgid "Please select a role for this guest!"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:345
-msgid "Channel address"
+#: ../../Zotlabs/Module/Tokens.php:287
+msgid "Select a role for this guest"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:350
-msgid "Call"
+#: ../../Zotlabs/Module/Tokens.php:291
+msgid "Login Name"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:352
-msgid "Status"
+#: ../../Zotlabs/Module/Tokens.php:292
+msgid "Login Password"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:355
-msgid "Connected"
+#: ../../Zotlabs/Module/Tokens.php:293
+msgid "Expires (yyyy-mm-dd)"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:357
-#: ../../Zotlabs/Module/Contactedit.php:448
-msgid "Approve connection"
+#: ../../Zotlabs/Module/Pdledit.php:27
+msgid "Layout updated."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:359
-msgid "Ignore connection"
+#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129
+msgid "Edit System Page Description"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:361
-msgid "Recent activity"
+#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93
+msgid "(modified)"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:367
-msgid "Connect at this location"
+#: ../../Zotlabs/Module/Pdledit.php:124
+msgid "Layout not found."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:377 ../../Zotlabs/Widget/Follow.php:27
-#, php-format
-msgid "You have %1$.0f of %2$.0f allowed connections."
+#: ../../Zotlabs/Module/Pdledit.php:130
+msgid "Module Name:"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:405
-msgid "Search your connections"
+#: ../../Zotlabs/Module/Pdledit.php:131
+msgid "Layout Help"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:406
-msgid "Contact search"
+#: ../../Zotlabs/Module/Pdledit.php:132
+msgid "Edit another layout"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:413
-#: ../../Zotlabs/Module/Contactedit.php:383
-msgid "This is a group/forum channel"
+#: ../../Zotlabs/Module/Pdledit.php:133
+msgid "System layout"
msgstr ""
#: ../../Zotlabs/Module/Connect.php:65 ../../Zotlabs/Module/Connect.php:118
@@ -8962,152 +9267,6 @@ msgstr ""
msgid "Restricted or Premium Channel"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:35
-msgid "Affinity Tool settings updated."
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:54
-msgid ""
-"The numbers below represent the minimum and maximum slider default positions "
-"for your network/stream page as a percentage."
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:61
-msgid "Default maximum affinity level"
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:61
-msgid "0-99 default 99"
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:67
-msgid "Default minimum affinity level"
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:67
-msgid "0-99 - default 0"
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:73
-msgid "Persistent affinity levels"
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:73
-msgid ""
-"If disabled the max and min levels will be reset to default after page reload"
-msgstr ""
-
-#: ../../Zotlabs/Module/Affinity.php:81
-msgid "Affinity Tool Settings"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:22
-msgid "About this site"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:23
-msgid "Site Name"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:25 ../../Zotlabs/Module/Admin/Site.php:414
-msgid "Site Information"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:27
-msgid "Administrator"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:30
-msgid "Software and Project information"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:31
-msgid "This site is powered by $Projectname"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:32
-msgid ""
-"Federated and decentralised networking and identity services provided by"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:35
-msgid "Additional federated transport protocols:"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:37
-#, php-format
-msgid "Version %s"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:38
-msgid "Project homepage"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:39
-msgid "Developer homepage"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:42 ../../Zotlabs/Module/Admin.php:149
-msgid "Active addons"
-msgstr ""
-
-#: ../../Zotlabs/Module/Siteinfo.php:43
-msgid "Blocked sites"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:40
-msgid "Item sync completed!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:62
-#: ../../Zotlabs/Module/Import_progress.php:111
-msgid "Import host does not seem to be online or compatible"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:73
-msgid "Item sync completed but no items were found!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:90
-msgid "File sync completed!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:122
-msgid "File sync completed but no files were found!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:137
-msgid "Channel clone status"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:138
-msgid "Item sync status"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:139
-msgid "File sync status"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:146
-msgid "Channel cloning completed!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:147
-msgid "Resume"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_progress.php:148
-msgid "Only resume if sync stalled!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Dirsearch.php:24 ../../Zotlabs/Module/Regdir.php:53
-msgid "This site is not a directory server"
-msgstr ""
-
-#: ../../Zotlabs/Module/Dirsearch.php:32
-msgid "This directory server requires an access token"
-msgstr ""
-
#: ../../Zotlabs/Module/Filestorage.php:14
#: ../../Zotlabs/Module/Filestorage.php:53
msgid "Deprecated!"
@@ -9126,11 +9285,6 @@ msgstr ""
msgid "Edit file permissions"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:202
-#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:268
-msgid "Set/edit permissions"
-msgstr ""
-
#: ../../Zotlabs/Module/Filestorage.php:203
msgid "Include all files and sub folders"
msgstr ""
@@ -9147,2662 +9301,2499 @@ msgstr ""
msgid "Show URL to this file"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:119
-msgid "Layout not found"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit_gui.php:127
-msgid "This template does not support pdledi_gui (no content regions defined)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit_gui.php:404
-msgid "Main page content"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit_gui.php:405
-msgid "The main page content can not be edited!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:27
-msgid "Layout updated."
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129
-msgid "Edit System Page Description"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93
-msgid "(modified)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:124
-msgid "Layout not found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:130
-msgid "Module Name:"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:131
-msgid "Layout Help"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:132
-msgid "Edit another layout"
-msgstr ""
-
-#: ../../Zotlabs/Module/Pdledit.php:133
-msgid "System layout"
-msgstr ""
-
-#: ../../Zotlabs/Module/Moderate.php:70
-msgid "Item approved"
-msgstr ""
-
-#: ../../Zotlabs/Module/Removeaccount.php:35
-msgid ""
-"Account removals are not allowed within 48 hours of changing the account "
-"password."
+#: ../../Zotlabs/Module/Totp_check.php:71
+#: ../../Zotlabs/Module/Admin/Account_edit.php:66
+msgid "Account not found."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:57
-msgid "Remove This Account"
+#: ../../Zotlabs/Module/Totp_check.php:78
+msgid "Multifactor Verification"
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:58
-#: ../../Zotlabs/Module/Removeme.php:61 ../../Zotlabs/Module/Changeaddr.php:78
-msgid "WARNING: "
+#: ../../Zotlabs/Module/Totp_check.php:80
+msgid "Please enter the verification key from your authenticator app"
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:58
-msgid ""
-"This account and all its channels will be completely removed from the "
-"network. "
+#: ../../Zotlabs/Module/Totp_check.php:81
+msgid "Verify"
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:58
-msgid "This action is permanent and can not be undone!"
+#: ../../Zotlabs/Module/Contactedit.php:50
+msgid "Invalid abook_id"
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:59
-#: ../../Zotlabs/Module/Removeme.php:62 ../../Zotlabs/Module/Changeaddr.php:79
-msgid "Please enter your password for verification:"
+#: ../../Zotlabs/Module/Contactedit.php:78 ../../Zotlabs/Module/Connedit.php:80
+#: ../../Zotlabs/Module/Defperms.php:67
+msgid "Could not access contact record."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:61
-#: ../../Zotlabs/Module/Settings/Account.php:113
-msgid "Remove Account"
+#: ../../Zotlabs/Module/Contactedit.php:107
+#: ../../Zotlabs/Module/Connedit.php:101
+msgid "Could not locate selected profile."
msgstr ""
-#: ../../Zotlabs/Module/Regmod.php:15
-msgid "Please login."
+#: ../../Zotlabs/Module/Contactedit.php:180
+#: ../../Zotlabs/Module/Connedit.php:215
+msgid "is now connected to"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:112
-msgid "Invalid input"
+#: ../../Zotlabs/Module/Contactedit.php:238
+#: ../../Zotlabs/Module/Contactedit.php:387
+#: ../../Zotlabs/Module/Connedit.php:701
+msgid "Contact Tools"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:132
-msgid "Errors"
+#: ../../Zotlabs/Module/Contactedit.php:315
+#: ../../Zotlabs/Module/Connedit.php:622
+msgid "Approve this contact"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:220
-msgid "Site settings updated."
+#: ../../Zotlabs/Module/Contactedit.php:315
+#: ../../Zotlabs/Module/Connedit.php:622
+msgid "Accept contact to allow communication"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:243
-#: ../../Zotlabs/Module/Settings/Display.php:117
-#, php-format
-msgid "%s - (Incompatible)"
+#: ../../Zotlabs/Module/Contactedit.php:348
+#: ../../Zotlabs/Module/Connedit.php:658
+msgid "Please select a role for this contact!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:250
-msgid "mobile"
+#: ../../Zotlabs/Module/Contactedit.php:368
+#: ../../Zotlabs/Module/Connedit.php:678
+msgid "This contact is unreachable from this location."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:252
-msgid "experimental"
+#: ../../Zotlabs/Module/Contactedit.php:369
+#: ../../Zotlabs/Module/Connedit.php:679
+msgid "This contact may be unreachable from other channel locations."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:254
-msgid "unsupported"
+#: ../../Zotlabs/Module/Contactedit.php:371
+#: ../../Zotlabs/Module/Connedit.php:681
+msgid "Location independence is not supported by their network."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:307
-msgid "Yes - with approval"
+#: ../../Zotlabs/Module/Contactedit.php:381
+msgid "View profile"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:315
-msgid "My site is not a public server"
+#: ../../Zotlabs/Module/Contactedit.php:383
+#: ../../Zotlabs/Module/Connections.php:413
+msgid "This is a group/forum channel"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:316
-msgid "My site has paid access only"
+#: ../../Zotlabs/Module/Contactedit.php:394
+msgid "Select a role for this contact"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:317
-msgid "My site has free access only"
+#: ../../Zotlabs/Module/Contactedit.php:406
+#: ../../Zotlabs/Module/Connedit.php:703
+msgid "Slide to adjust your degree of friendship"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:318
-msgid "My site offers free accounts with optional paid upgrades"
+#: ../../Zotlabs/Module/Contactedit.php:408
+#: ../../Zotlabs/Module/Connedit.php:705
+msgid "Custom Filter"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:336
-msgid "Default permission role for new accounts"
+#: ../../Zotlabs/Module/Contactedit.php:409
+#: ../../Zotlabs/Module/Connedit.php:706
+#: ../../Zotlabs/Module/Settings/Channel.php:287
+msgid "Only import posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:336
+#: ../../Zotlabs/Module/Contactedit.php:409
+#: ../../Zotlabs/Module/Contactedit.php:410
+#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
+#: ../../Zotlabs/Module/Admin/Site.php:502
+#: ../../Zotlabs/Module/Admin/Site.php:503
msgid ""
-"This role will be used for the first channel created after registration."
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:346
-msgid "Week(s)"
+"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
+"all posts"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:347
-msgid "Month(s)"
+#: ../../Zotlabs/Module/Contactedit.php:410
+#: ../../Zotlabs/Module/Connedit.php:707
+#: ../../Zotlabs/Module/Settings/Channel.php:286
+msgid "Do not import posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:348
-msgid "Year(s)"
+#: ../../Zotlabs/Module/Contactedit.php:415
+#: ../../Zotlabs/Module/Connedit.php:714
+msgid "Approve contact"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:356
-msgid "Register verification delay"
+#: ../../Zotlabs/Module/Contactedit.php:417
+#: ../../Zotlabs/Module/Connedit.php:717
+msgid "Their"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:359
-msgid "Time to wait before a registration can be verified"
+#: ../../Zotlabs/Module/Contactedit.php:418
+#: ../../Zotlabs/Module/Connedit.php:718
+msgid "My"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:378
-msgid "Register verification expiration time"
+#: ../../Zotlabs/Module/Contactedit.php:426
+msgid "Roles"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:381
-msgid "Time before an unverified registration will expire"
+#: ../../Zotlabs/Module/Contactedit.php:427
+msgid "Compare permissions"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:398
-#: ../../Zotlabs/Module/Admin/Accounts.php:307
-#: ../../Zotlabs/Module/Admin/Security.php:106
-#: ../../Zotlabs/Module/Admin/Channels.php:167
-#: ../../Zotlabs/Module/Admin/Addons.php:346
-#: ../../Zotlabs/Module/Admin/Addons.php:444
-#: ../../Zotlabs/Module/Admin/Themes.php:138
-#: ../../Zotlabs/Module/Admin/Themes.php:172
-#: ../../Zotlabs/Module/Admin/Logs.php:83 ../../Zotlabs/Module/Admin.php:142
-msgid "Administration"
+#: ../../Zotlabs/Module/Contactedit.php:428
+msgid "Permission"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:401 ../../Zotlabs/Widget/Admin.php:27
-msgid "Site"
+#: ../../Zotlabs/Module/Contactedit.php:431
+#: ../../Zotlabs/Module/Connedit.php:572
+msgid "Affinity"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:404
-msgid "File upload"
+#: ../../Zotlabs/Module/Contactedit.php:432
+msgid "Content filter"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:405
-msgid "Policies"
+#: ../../Zotlabs/Module/Contactedit.php:442
+msgid "Contact updated"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:410
-#: ../../extend/addon/hzaddons/statusnet/statusnet.php:593
-msgid "Site name"
+#: ../../Zotlabs/Module/Contactedit.php:442
+msgid "Contact update failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:412
-msgid "Banner/Logo"
+#: ../../Zotlabs/Module/Contactedit.php:448
+#: ../../Zotlabs/Module/Connections.php:357
+msgid "Approve connection"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:412
-msgid "Unfiltered HTML/CSS/JS is allowed"
+#: ../../Zotlabs/Module/Contactedit.php:520
+msgid "Block status updated"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:413
-msgid "Administrator Information"
+#: ../../Zotlabs/Module/Contactedit.php:524
+msgid "Block failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:413
-msgid ""
-"Contact information for site administrators. Displayed on siteinfo page. "
-"BBCode can be used here"
+#: ../../Zotlabs/Module/Contactedit.php:535
+msgid "Ignore status updated"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:414
-msgid ""
-"Publicly visible description of this site. Displayed on siteinfo page. "
-"BBCode can be used here"
+#: ../../Zotlabs/Module/Contactedit.php:539
+msgid "Ignore failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:415
-msgid "System theme"
+#: ../../Zotlabs/Module/Contactedit.php:550
+msgid "Archive status updated"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:415
-msgid ""
-"Default system theme - may be over-ridden by user profiles - <a href='#' "
-"id='cnftheme'>change theme settings</a>"
+#: ../../Zotlabs/Module/Contactedit.php:554
+msgid "Archive failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:418
-msgid "Allow Feeds as Connections"
+#: ../../Zotlabs/Module/Contactedit.php:565
+msgid "Hide status updated"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:418
-msgid "(Heavy system resource usage)"
+#: ../../Zotlabs/Module/Contactedit.php:569
+msgid "Hide failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:419
-msgid "Maximum image size"
+#: ../../Zotlabs/Module/Contactedit.php:604
+msgid "Contact removed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:419
-msgid ""
-"Maximum size in bytes of uploaded images. Default is 0, which means no "
-"limits."
+#: ../../Zotlabs/Module/Contactedit.php:608
+msgid "Delete failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:420
-msgid "Minimum age"
+#: ../../Zotlabs/Module/Contactedit.php:619
+msgid "Refetch contact info"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:420
-msgid "Minimum age (in years) for who may register on this site."
+#: ../../Zotlabs/Module/Contactedit.php:623
+#: ../../Zotlabs/Module/Connedit.php:508
+#: ../../Zotlabs/Module/Admin/Accounts.php:222
+msgid "Unblock"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:421
-msgid "Which best describes the types of account offered by this hub?"
+#: ../../Zotlabs/Module/Contactedit.php:623
+#: ../../Zotlabs/Module/Connedit.php:508
+#: ../../Zotlabs/Module/Admin/Accounts.php:221
+msgid "Block"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:421
-msgid "This is displayed on the public server site list."
+#: ../../Zotlabs/Module/Contactedit.php:625
+#: ../../Zotlabs/Module/Connedit.php:511
+msgid "Block (or Unblock) all communications with this connection"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:427
-msgid "Register text"
+#: ../../Zotlabs/Module/Contactedit.php:626
+#: ../../Zotlabs/Module/Connedit.php:512
+msgid "This connection is blocked!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:429
-msgid "This text will be displayed prominently at the registration page"
+#: ../../Zotlabs/Module/Contactedit.php:630
+#: ../../Zotlabs/Module/Connedit.php:516
+msgid "Unignore"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:433
-msgid "Does this site allow new member registration?"
+#: ../../Zotlabs/Module/Contactedit.php:630
+#: ../../Zotlabs/Module/Connedit.php:516
+#: ../../Zotlabs/Module/Connections.php:360
+msgid "Ignore"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:440
-msgid "Configure the registration open days/hours"
+#: ../../Zotlabs/Module/Contactedit.php:632
+#: ../../Zotlabs/Module/Connedit.php:519
+msgid "Ignore (or Unignore) all inbound communications from this connection"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:442
-msgid "Empty or '-:-' value will keep registration open 24/7 (default)"
+#: ../../Zotlabs/Module/Contactedit.php:633
+#: ../../Zotlabs/Module/Connedit.php:520
+msgid "This connection is ignored!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:443
-msgid ""
-"Weekdays and hours must be separated by colon ':', From-To ranges with a "
-"dash `-` example: 1:800-1200"
+#: ../../Zotlabs/Module/Contactedit.php:637
+#: ../../Zotlabs/Module/Connedit.php:524
+msgid "Unarchive"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:444
-msgid ""
-"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 "
-"2:900-1700"
+#: ../../Zotlabs/Module/Contactedit.php:637
+#: ../../Zotlabs/Module/Connedit.php:524
+msgid "Archive"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:445
+#: ../../Zotlabs/Module/Contactedit.php:639
+#: ../../Zotlabs/Module/Connedit.php:527
msgid ""
-"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 "
-"or 1-2,4-5:900-1700"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:446
-msgid "Advanced examples:"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:446
-#: ../../Zotlabs/Module/Settings/Channel.php:184
-msgid "or"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:447
-msgid "Check your configuration"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:451
-msgid "Max account registrations per day"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:453
-msgid "Unlimited if zero or no value - default 50"
+"Archive (or Unarchive) this connection - mark channel dead but keep content"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:457
-msgid "Max account registrations from same IP"
+#: ../../Zotlabs/Module/Contactedit.php:640
+#: ../../Zotlabs/Module/Connedit.php:528
+msgid "This connection is archived!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:459
-msgid "Unlimited if zero or no value - default 3"
+#: ../../Zotlabs/Module/Contactedit.php:644
+#: ../../Zotlabs/Module/Connedit.php:532
+msgid "Unhide"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:465
-msgid "Auto channel create"
+#: ../../Zotlabs/Module/Contactedit.php:644
+#: ../../Zotlabs/Module/Connedit.php:532
+msgid "Hide"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:467
-msgid ""
-"If disabled the channel will be created in a separate step during the "
-"registration process"
+#: ../../Zotlabs/Module/Contactedit.php:646
+#: ../../Zotlabs/Module/Connedit.php:535
+msgid "Hide or Unhide this connection from your other connections"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:471
-msgid "Require invite code"
+#: ../../Zotlabs/Module/Contactedit.php:647
+#: ../../Zotlabs/Module/Connedit.php:536
+msgid "This connection is hidden!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:476
-msgid "Allow invite code"
+#: ../../Zotlabs/Module/Contactedit.php:653
+#: ../../Zotlabs/Module/Connedit.php:543
+msgid "Delete this connection"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:481
-msgid "Require email address"
+#: ../../Zotlabs/Module/Search.php:251
+#, php-format
+msgid "Items tagged with: %s"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:483
-msgid "The provided email address will be verified (recommended)"
+#: ../../Zotlabs/Module/Search.php:253
+#, php-format
+msgid "Search results for: %s"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:487
-msgid "Abandon account after x days"
+#: ../../Zotlabs/Module/Register.php:113
+msgid "Email address required"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:489
-msgid ""
-"Will not waste system resources polling external sites for abandonded "
-"accounts. Enter 0 for no time limit."
+#: ../../Zotlabs/Module/Register.php:157
+msgid "No password provided"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:494
-msgid "Site homepage to show visitors (default: login box)"
+#: ../../Zotlabs/Module/Register.php:180
+msgid "Terms of Service not accepted"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:494
-msgid ""
-"example: 'pubstream' to show public stream, 'page/sys/home' to show a system "
-"webpage called 'home' or 'include:home.html' to include a file."
+#: ../../Zotlabs/Module/Register.php:242
+msgid "Invitation code succesfully applied"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:495
-msgid "Preserve site homepage URL"
+#: ../../Zotlabs/Module/Register.php:262
+msgid "Invitation not in time or too late"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:495
-msgid ""
-"Present the site homepage in a frame at the original location instead of "
-"redirecting"
+#: ../../Zotlabs/Module/Register.php:268
+msgid "Invitation email failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:496
-msgid "Allowed friend domains"
+#: ../../Zotlabs/Module/Register.php:276
+msgid "Invitation code failed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:496
-msgid ""
-"Comma separated list of domains which are allowed to establish friendships "
-"with this site. Wildcards are accepted. Empty to allow any domains"
+#: ../../Zotlabs/Module/Register.php:283
+msgid "Invitations are not available"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:497
-msgid "Force publish"
+#: ../../Zotlabs/Module/Register.php:293
+msgid "Registration on this hub is by invitation only"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:497
-msgid ""
-"Check to force all profiles on this site to be listed in the site directory"
+#: ../../Zotlabs/Module/Register.php:400
+msgid "New register request"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:498
-msgid "Enable public stream"
+#: ../../Zotlabs/Module/Register.php:418
+msgid "Error creating dId A"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:498
-msgid "Enable the public stream. Warning: this content is unmoderated"
+#: ../../Zotlabs/Module/Register.php:437
+msgid "Registration on this hub is disabled."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:499
-msgid "Site only public stream"
+#: ../../Zotlabs/Module/Register.php:446
+msgid "Why do you want to join this hub?"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:499
-msgid "Restrict the public stream to content originating at this site"
+#: ../../Zotlabs/Module/Register.php:446
+msgid "This will help to review your registration"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:500
-msgid "Allow anybody on the internet to access the public streams"
+#: ../../Zotlabs/Module/Register.php:447
+msgid "Registration on this hub is by approval only."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:500
-msgid "Disable to require authentication before viewing"
+#: ../../Zotlabs/Module/Register.php:448
+msgid "Register at another affiliated hub in case when prefered"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:501
-msgid "Only import Public stream posts with this text"
+#: ../../Zotlabs/Module/Register.php:461
+msgid "Registration on this hub is by invitation only."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:502
-msgid "Do not import Public stream posts with this text"
+#: ../../Zotlabs/Module/Register.php:462
+msgid "Register at another affiliated hub"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:505
-msgid "Login on Homepage"
+#: ../../Zotlabs/Module/Register.php:476 ../../Zotlabs/Module/Siteinfo.php:29
+msgid "Terms of Service"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:505
-msgid ""
-"Present a login box to visitors on the home page if no other content has "
-"been configured."
+#: ../../Zotlabs/Module/Register.php:482
+#, php-format
+msgid "I accept the %s for this website"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:506
-msgid "Enable context help"
+#: ../../Zotlabs/Module/Register.php:489
+#, php-format
+msgid "I am over %s years of age and accept the %s for this website"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:506
-msgid ""
-"Display contextual help for the current page when the help button is pressed."
+#: ../../Zotlabs/Module/Register.php:499
+msgid "Your email address"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:508
-msgid "Reply-to email address for system generated email."
+#: ../../Zotlabs/Module/Register.php:506
+msgid "Choose a password"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:509
-msgid "Sender (From) email address for system generated email."
+#: ../../Zotlabs/Module/Register.php:507
+msgid "Please re-enter your password"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:510
-msgid "Name of email sender for system generated email."
+#: ../../Zotlabs/Module/Register.php:509
+msgid "Please enter your invitation code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:512
-msgid "Directory Server URL"
+#: ../../Zotlabs/Module/Register.php:511
+msgid "Your name"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:512
-msgid "Default directory server"
+#: ../../Zotlabs/Module/Register.php:511
+msgid "Real name is preferred"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:514
-msgid "Enable SSE Notifications"
+#: ../../Zotlabs/Module/Register.php:513
+#: ../../Zotlabs/Module/New_channel.php:178
+msgid "Choose a short nickname"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:514
+#: ../../Zotlabs/Module/Register.php:513
msgid ""
-"If disabled, traditional polling will be used. Warning: this setting might "
-"not be suited for shared hosting"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:516
-msgid "Proxy user"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:517
-msgid "Proxy URL"
+"Your nickname will be used to create an easy to remember channel address"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:518
-msgid "Network timeout"
+#: ../../Zotlabs/Module/Register.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:404
+msgid "Registration"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:518
-msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
+#: ../../Zotlabs/Module/Register.php:529
+msgid "I have an invite code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:519
-msgid "Delivery interval"
+#: ../../Zotlabs/Module/Register.php:576
+msgid ""
+"This site has exceeded the number of allowed daily account registrations."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:519
-msgid ""
-"Delay background delivery processes by this many seconds to reduce system "
-"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
-"for large dedicated servers."
+#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69
+msgid "This setting requires special processing and editing has been blocked."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:520
-msgid "Deliveries per process"
+#: ../../Zotlabs/Module/Pconfig.php:58
+msgid "Configuration Editor"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:520
+#: ../../Zotlabs/Module/Pconfig.php:59
msgid ""
-"Number of deliveries to attempt in a single operating system process. Adjust "
-"if necessary to tune system performance. Recommend: 1-5."
+"Warning: Changing some settings could render your channel inoperable. Please "
+"leave this page unless you are comfortable with and knowledgeable about how "
+"to correctly use this feature."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:522
-msgid "Poll interval"
+#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
+msgid "App installed."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:522
-msgid ""
-"Delay background polling processes by this many seconds to reduce system "
-"load. If 0, use delivery interval."
+#: ../../Zotlabs/Module/Appman.php:49
+msgid "Malformed app."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:523
-msgid "Path to ImageMagick convert program"
+#: ../../Zotlabs/Module/Appman.php:208
+msgid "Embed code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:523
-msgid ""
-"If set, use this program to generate photo thumbnails for huge images ( > "
-"4000 pixels in either dimension), otherwise memory exhaustion may occur. "
-"Example: /usr/bin/convert"
+#: ../../Zotlabs/Module/Appman.php:213
+msgid "Edit App"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:524
-msgid "Maximum Load Average"
+#: ../../Zotlabs/Module/Appman.php:213
+msgid "Create App"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:524
-msgid ""
-"Maximum system load before delivery and poll processes are deferred - "
-"default 50."
+#: ../../Zotlabs/Module/Appman.php:218
+msgid "Name of app"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:525
-msgid "Expiration period in days for imported (grid/network) content"
+#: ../../Zotlabs/Module/Appman.php:219
+msgid "Location (URL) of app"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:525
-msgid "0 for no expiration of imported content"
+#: ../../Zotlabs/Module/Appman.php:221
+msgid "Photo icon URL"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:526
-msgid ""
-"Do not expire any posts which have comments less than this many days ago"
+#: ../../Zotlabs/Module/Appman.php:221
+msgid "80 x 80 pixels - optional"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:527
-msgid ""
-"Public servers: Optional landing (marketing) webpage for new registrants"
+#: ../../Zotlabs/Module/Appman.php:222
+msgid "Categories (optional, comma separated list)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:527
-#, php-format
-msgid "Create this page first. Default is %s/register"
+#: ../../Zotlabs/Module/Appman.php:223
+msgid "Version ID"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:528
-msgid "Page to display after creating a new channel"
+#: ../../Zotlabs/Module/Appman.php:224
+msgid "Price of app"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:528
-msgid "Default: profiles"
+#: ../../Zotlabs/Module/Appman.php:225
+msgid "Location (URL) to purchase app"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:529
-msgid "Optional: site location"
+#: ../../Zotlabs/Module/Viewsrc.php:43
+msgid "item"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:529
-msgid "Region or country"
+#: ../../Zotlabs/Module/Item.php:253 ../../Zotlabs/Module/Pin.php:36
+msgid "Unable to locate original post."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:614
-#: ../../Zotlabs/Module/Admin/Site.php:615
-msgid "Invalid 24h time value (hhmm/hmm)"
+#: ../../Zotlabs/Module/Item.php:541
+msgid "Empty post discarded."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:19
-msgid "Update has been marked successful"
+#: ../../Zotlabs/Module/Item.php:1010
+msgid "Duplicate post suppressed."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:32
-#, php-format
-msgid "Verification of update %s failed. Check system logs."
+#: ../../Zotlabs/Module/Item.php:1160
+msgid "System error. Post not saved."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:35
-#: ../../Zotlabs/Module/Admin/Dbsync.php:62
-#, php-format
-msgid "Update %s was successfully applied."
+#: ../../Zotlabs/Module/Item.php:1200
+msgid "Your comment is awaiting approval."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:39
-#, php-format
-msgid "Verifying update %s did not return a status. Unknown if it succeeded."
+#: ../../Zotlabs/Module/Item.php:1337
+msgid "Unable to obtain post information from database."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:42
+#: ../../Zotlabs/Module/Item.php:1344
#, php-format
-msgid "Update %s does not contain a verification function."
+msgid "You have reached your limit of %1$.0f top level posts."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:46
-#: ../../Zotlabs/Module/Admin/Dbsync.php:69
+#: ../../Zotlabs/Module/Item.php:1351
#, php-format
-msgid "Update function %s could not be found."
+msgid "You have reached your limit of %1$.0f webpages."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:59
-#, php-format
-msgid "Executing update procedure %s failed. Check system logs."
+#: ../../Zotlabs/Module/Achievements.php:38
+msgid "Some blurb about what to do when you're new here"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:66
-#, php-format
-msgid ""
-"Update %s did not return a status. It cannot be determined if it was "
-"successful."
+#: ../../Zotlabs/Module/Oexchange.php:27
+msgid "Unable to find your hub."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:87
-msgid "Failed Updates"
+#: ../../Zotlabs/Module/Oexchange.php:41
+msgid "Post successful."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:89
-msgid "Mark success (if update was manually applied)"
+#: ../../Zotlabs/Module/Connedit.php:171
+msgid "Connection updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:90
-msgid "Attempt to verify this update if a verification procedure exists"
+#: ../../Zotlabs/Module/Connedit.php:173
+msgid "Failed to update connection record."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:91
-msgid "Attempt to execute this update step automatically"
+#: ../../Zotlabs/Module/Connedit.php:320
+msgid "Could not access address book record."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:96
-msgid "No failed updates."
+#: ../../Zotlabs/Module/Connedit.php:368
+msgid "Refresh failed - channel is currently unavailable."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:128
-#, php-format
-msgid "%s account blocked/unblocked"
-msgid_plural "%s account blocked/unblocked"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:135
-#, php-format
-msgid "%s account deleted"
-msgid_plural "%s accounts deleted"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:171
-msgid "Account not found"
+#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
+#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
+#: ../../Zotlabs/Module/Connedit.php:422
+msgid "Unable to set address book parameters."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:192
-#, php-format
-msgid "Account '%s' blocked"
+#: ../../Zotlabs/Module/Connedit.php:441
+msgid "Connection has been removed."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:200
+#: ../../Zotlabs/Module/Connedit.php:483
#, php-format
-msgid "Account '%s' unblocked"
+msgid "View %s's profile"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:240
-msgid "Unverified"
+#: ../../Zotlabs/Module/Connedit.php:487
+msgid "Refresh Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:243
-msgid "Expired"
+#: ../../Zotlabs/Module/Connedit.php:490
+msgid "Fetch updated permissions"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:308
-#: ../../Zotlabs/Module/Admin/Accounts.php:327
-#: ../../Zotlabs/Module/Admin.php:97 ../../Zotlabs/Widget/Admin.php:28
-msgid "Accounts"
+#: ../../Zotlabs/Module/Connedit.php:494
+msgid "Refresh Photo"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:310
-msgid "Show verified registrations"
+#: ../../Zotlabs/Module/Connedit.php:497
+msgid "Fetch updated photo"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:310
-msgid "Show all registrations"
+#: ../../Zotlabs/Module/Connedit.php:504
+msgid "View recent posts and comments"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:312
-msgid "Select toggle"
+#: ../../Zotlabs/Module/Connedit.php:550
+msgid "Fetch Vcard"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:313
-msgid "Deny selected"
+#: ../../Zotlabs/Module/Connedit.php:553
+msgid "Fetch electronic calling card for this connection"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:314
-msgid "Approve selected"
+#: ../../Zotlabs/Module/Connedit.php:575
+msgid "Open Set Affinity section by default"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:315
-msgid "All registrations"
+#: ../../Zotlabs/Module/Connedit.php:612
+msgid "Filter"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:315
-msgid "Verified registrations waiting for approval"
+#: ../../Zotlabs/Module/Connedit.php:615
+msgid "Open Custom Filter section by default"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-msgid "Request date"
+#: ../../Zotlabs/Module/Connedit.php:626
+msgid "Set Affinity"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-msgid "Requests"
+#: ../../Zotlabs/Module/Connedit.php:629
+msgid "Set Profile"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:317
-msgid "No registrations available"
+#: ../../Zotlabs/Module/Connedit.php:632
+msgid "Set Affinity & Profile"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:317
-msgid "No verified registrations available"
+#: ../../Zotlabs/Module/Connedit.php:685
+#, php-format
+msgid "Contact: %s"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:319
-#: ../../Zotlabs/Module/Authorize.php:33
-msgid "Deny"
+#: ../../Zotlabs/Module/Connedit.php:686
+#: ../../Zotlabs/Module/Connections.php:404
+msgid "Contact role"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:323
-msgid "Verified"
+#: ../../Zotlabs/Module/Connedit.php:687
+msgid "Manage contact roles"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:324
-msgid "Not yet verified"
+#: ../../Zotlabs/Module/Connedit.php:694
+msgid "This contacts's primary address is"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:329
-msgid "ID"
+#: ../../Zotlabs/Module/Connedit.php:695
+msgid "Available locations:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:331
-msgid "All channels"
+#: ../../Zotlabs/Module/Connedit.php:700 ../../Zotlabs/Module/Defperms.php:259
+msgid ""
+"The permissions indicated on this page will be applied to all new "
+"connections."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:332
-msgid "Register date"
+#: ../../Zotlabs/Module/Connedit.php:710
+msgid "Contact Pending Approval"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:333
-msgid "Last login"
+#: ../../Zotlabs/Module/Connedit.php:713 ../../Zotlabs/Module/Defperms.php:261
+#: ../../Zotlabs/Module/Permcats.php:253
+msgid "inherited"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:334
-msgid "Expires"
+#: ../../Zotlabs/Module/Connedit.php:715
+#, php-format
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:335
-#: ../../Zotlabs/Module/Admin/Account_edit.php:72
-msgid "Service class"
+#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Defperms.php:266
+msgid "Individual Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:337
+#: ../../Zotlabs/Module/Connedit.php:721
msgid ""
-"Selected accounts will be deleted!\\n\\nEverything these accounts had posted "
-"on this site will be permanently deleted!\\n\\nAre you sure?"
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can <strong>not</strong> change those "
+"settings here."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:338
+#: ../../Zotlabs/Module/Connedit.php:722
msgid ""
-"The account {0} will be deleted!\\n\\nEverything this account has posted on "
-"this site will be permanently deleted!\\n\\nAre you sure?"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:347
-msgid "Message"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:66
-msgid "Max queueworker threads"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:68
-msgid "Minimum 4, default 4"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:78
-msgid "Assume workers dead after"
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can change those settings here but "
+"they wont have any impact unless the inherited setting changes."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:80
-msgid "Minimum 120, default 300 seconds"
+#: ../../Zotlabs/Module/Connedit.php:723
+msgid "Last update:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:92
-msgid "Pause before starting next task"
+#: ../../Zotlabs/Module/Connedit.php:731
+msgid "Details"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:94
-msgid "Minimum 100, default 100 microseconds"
+#: ../../Zotlabs/Module/Connedit.php:733 ../../Zotlabs/Module/Cdav.php:1369
+msgid "Organisation"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:103
-msgid "Automatically adjust pause before starting next task"
+#: ../../Zotlabs/Module/Connedit.php:735 ../../Zotlabs/Module/Cdav.php:1371
+msgid "Phone"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:112
-msgid "Queueworker Settings"
+#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Cdav.php:1373
+msgid "Instant messenger"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:29
-#, php-format
-msgid "Password changed for account %d."
+#: ../../Zotlabs/Module/Connedit.php:738 ../../Zotlabs/Module/Cdav.php:1374
+msgid "Website"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:46
-msgid "Account settings updated."
+#: ../../Zotlabs/Module/Connedit.php:739 ../../Zotlabs/Module/Locs.php:122
+#: ../../Zotlabs/Module/Admin/Channels.php:182
+#: ../../Zotlabs/Module/Profiles.php:469 ../../Zotlabs/Module/Cdav.php:1375
+msgid "Address"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:68
-msgid "Account Edit"
+#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Cdav.php:1376
+msgid "Note"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:69
-msgid "New Password"
+#: ../../Zotlabs/Module/Connedit.php:745 ../../Zotlabs/Module/Cdav.php:1381
+msgid "Add Contact"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:70
-msgid "New Password again"
+#: ../../Zotlabs/Module/Connedit.php:746 ../../Zotlabs/Module/Cdav.php:1382
+msgid "Add Field"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:71
-msgid "Account language (for emails)"
+#: ../../Zotlabs/Module/Connedit.php:751 ../../Zotlabs/Module/Cdav.php:1387
+msgid "P.O. Box"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:97
-msgid ""
-"By default, unfiltered HTML is allowed in embedded media. This is inherently "
-"insecure."
+#: ../../Zotlabs/Module/Connedit.php:752 ../../Zotlabs/Module/Cdav.php:1388
+msgid "Additional"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:100
-msgid ""
-"The recommended setting is to only allow unfiltered HTML from the following "
-"sites:"
+#: ../../Zotlabs/Module/Connedit.php:753 ../../Zotlabs/Module/Cdav.php:1389
+msgid "Street"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:101
-msgid ""
-"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
-"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
+#: ../../Zotlabs/Module/Connedit.php:754 ../../Zotlabs/Module/Cdav.php:1390
+msgid "Locality"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:102
-msgid ""
-"All other embedded content will be filtered, <strong>unless</strong> "
-"embedded content from that site is explicitly blocked."
+#: ../../Zotlabs/Module/Connedit.php:755 ../../Zotlabs/Module/Cdav.php:1391
+msgid "Region"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:107
-#: ../../Zotlabs/Widget/Admin.php:30
-msgid "Security"
+#: ../../Zotlabs/Module/Connedit.php:756 ../../Zotlabs/Module/Cdav.php:1392
+msgid "ZIP Code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:109
-msgid "Block public"
+#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:772
+#: ../../Zotlabs/Module/Cdav.php:1393
+msgid "Country"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:109
-msgid ""
-"Check to block public access to all otherwise public personal pages on this "
-"site unless you are currently authenticated."
+#: ../../Zotlabs/Module/Defperms.php:252
+msgid "Connection Default Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:110
-msgid "Provide a cloud root directory"
+#: ../../Zotlabs/Module/Defperms.php:253
+msgid "Apply these permissions automatically"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:110
+#: ../../Zotlabs/Module/Defperms.php:253
msgid ""
-"The cloud root directory lists all channel names which provide public files"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Security.php:111
-msgid "Show total disk space available to cloud uploads"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Security.php:112
-msgid "Set \"Transport Security\" HTTP header"
+"If enabled, connection requests will be approved without your interaction"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:113
-msgid "Set \"Content Security Policy\" HTTP header"
+#: ../../Zotlabs/Module/Defperms.php:254
+msgid "Permission role"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:114
-msgid "Allowed email domains"
+#: ../../Zotlabs/Module/Defperms.php:255
+msgid "Add permission role"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:114
-msgid ""
-"Comma separated list of domains which are allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains"
+#: ../../Zotlabs/Module/Defperms.php:260
+msgid "Automatic approval settings"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:115
-msgid "Not allowed email domains"
+#: ../../Zotlabs/Module/Defperms.php:263
+msgid "My Settings"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:115
+#: ../../Zotlabs/Module/Defperms.php:267
msgid ""
-"Comma separated list of domains which are not allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains, unless allowed domains have been defined."
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Security.php:116
-msgid "Allow communications only from these sites"
+"Some individual permissions may have been preset or locked based on your "
+"channel type and privacy settings."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:116
+#: ../../Zotlabs/Module/Suggest.php:52
msgid ""
-"One site per line. Leave empty to allow communication from anywhere by "
-"default"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Security.php:117
-msgid "Block communications from these sites"
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:118
-msgid "Allow communications only from these channels"
+#: ../../Zotlabs/Module/Follow.php:75
+msgid "Connection added."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:118
-msgid ""
-"One channel (hash) per line. Leave empty to allow from any channel by default"
+#: ../../Zotlabs/Module/Regmod.php:15
+msgid "Please login."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:119
-msgid "Block communications from these channels"
+#: ../../Zotlabs/Module/Directory.php:124
+msgid "No default suggestions were found."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:120
-msgid "Only allow embeds from secure (SSL) websites and links."
+#: ../../Zotlabs/Module/Directory.php:292
+msgid "Gender: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:121
-msgid "Allow unfiltered embedded HTML content only from these domains"
+#: ../../Zotlabs/Module/Directory.php:294
+msgid "Status: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:121
-msgid "One site per line. By default embedded content is filtered."
+#: ../../Zotlabs/Module/Directory.php:296
+msgid "Homepage: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:122
-msgid "Block embedded HTML from these domains"
+#: ../../Zotlabs/Module/Directory.php:357
+msgid "Description:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:123
-msgid "Allow SVG thumbnails in file browser"
+#: ../../Zotlabs/Module/Directory.php:359
+msgid "Unsafe"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:123
-msgid "WARNING: SVG images may contain malicious code."
+#: ../../Zotlabs/Module/Directory.php:362
+msgid "Spam"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:124
-msgid "Allow embedded (inline) PDF files"
+#: ../../Zotlabs/Module/Directory.php:372
+msgid "Public Forum:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:126
-msgid "Additional trusted directory server URLs"
+#: ../../Zotlabs/Module/Directory.php:375
+msgid "Keywords: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:126
-msgid ""
-"Accept directory flags (spam, nsfw) from those servers. One per line like "
-"https://example.tld"
+#: ../../Zotlabs/Module/Directory.php:378
+msgid "Don't suggest"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:28
-#: ../../Zotlabs/Module/Admin/Channels.php:80
-msgid "Channel not found"
+#: ../../Zotlabs/Module/Directory.php:380
+msgid "Common connections (estimated):"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:48
-#, php-format
-msgid "%s channel censored/uncensored"
-msgid_plural "%s channels censored/uncensored"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Module/Admin/Channels.php:57
-#, php-format
-msgid "%s channel code allowed/disallowed"
-msgid_plural "%s channels code allowed/disallowed"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Module/Admin/Channels.php:63
-#, php-format
-msgid "%s channel deleted"
-msgid_plural "%s channels deleted"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Module/Admin/Channels.php:90
-#, php-format
-msgid "Channel '%s' deleted"
+#: ../../Zotlabs/Module/Directory.php:430
+msgid "Global Directory"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:109
-#, php-format
-msgid "Channel '%s' censored"
+#: ../../Zotlabs/Module/Directory.php:430
+msgid "Local Directory"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:109
-#, php-format
-msgid "Channel '%s' uncensored"
+#: ../../Zotlabs/Module/Directory.php:436
+msgid "Finding:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:120
-#, php-format
-msgid "Channel '%s' code allowed"
+#: ../../Zotlabs/Module/Directory.php:441
+msgid "next page"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:120
-#, php-format
-msgid "Channel '%s' code disallowed"
+#: ../../Zotlabs/Module/Directory.php:441
+msgid "previous page"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:170
-msgid "select all"
+#: ../../Zotlabs/Module/Directory.php:442
+msgid "Sort options"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:172
-msgid "Censor"
+#: ../../Zotlabs/Module/Directory.php:443
+msgid "Alphabetic"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:173
-msgid "Uncensor"
+#: ../../Zotlabs/Module/Directory.php:444
+msgid "Reverse Alphabetic"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:174
-msgid "Allow Code"
+#: ../../Zotlabs/Module/Directory.php:445
+msgid "Newest to Oldest"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:175
-msgid "Disallow Code"
+#: ../../Zotlabs/Module/Directory.php:446
+msgid "Oldest to Newest"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:180
-msgid "UID"
+#: ../../Zotlabs/Module/Directory.php:464
+msgid "No entries (some entries may be hidden)."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:184
+#: ../../Zotlabs/Module/Profile_photo.php:544
msgid ""
-"Selected channels will be deleted!\\n\\nEverything that was posted in these "
-"channels on this site will be permanently deleted!\\n\\nAre you sure?"
+"This profile photo will be visible to anybody on the internet and may be "
+"distributed to other websites."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:185
+#: ../../Zotlabs/Module/Profile_photo.php:544
msgid ""
-"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
-"channel on this site will be permanently deleted!\\n\\nAre you sure?"
+"This profile photo will be visible only to channels with permission to view "
+"this profile."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#, php-format
-msgid "Lock feature %s"
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Use Photo for Profile"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Features.php:64
-msgid "Manage Additional Features"
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Change Profile Photo"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:294
-#, php-format
-msgid "Plugin %s disabled."
+#: ../../Zotlabs/Module/Profile_photo.php:548
+msgid "Reset to default"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:299
-#, php-format
-msgid "Plugin %s enabled."
+#: ../../Zotlabs/Module/Profile_photo.php:562
+msgid "Select existing"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:315
-#: ../../Zotlabs/Module/Admin/Themes.php:111
-msgid "Disable"
+#: ../../Zotlabs/Module/Profile_photo.php:584
+msgid "Done editing"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:318
-#: ../../Zotlabs/Module/Admin/Themes.php:113
-msgid "Enable"
+#: ../../Zotlabs/Module/Authorize.php:17
+msgid "Unknown App"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:347
-#: ../../Zotlabs/Module/Admin/Addons.php:445 ../../Zotlabs/Widget/Admin.php:32
-msgid "Addons"
+#: ../../Zotlabs/Module/Authorize.php:29
+msgid "Authorize"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:348
-#: ../../Zotlabs/Module/Admin/Themes.php:140
-msgid "Toggle"
+#: ../../Zotlabs/Module/Authorize.php:30
+#, php-format
+msgid "Do you authorize the app %s to access your channel data?"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:356
-#: ../../Zotlabs/Module/Admin/Themes.php:150
-msgid "Author: "
+#: ../../Zotlabs/Module/Authorize.php:33
+#: ../../Zotlabs/Module/Admin/Accounts.php:219
+msgid "Deny"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:357
-#: ../../Zotlabs/Module/Admin/Themes.php:151
-msgid "Maintainer: "
+#: ../../Zotlabs/Module/Viewconnections.php:65
+msgid "No connections."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:358
-msgid "Minimum project version: "
+#: ../../Zotlabs/Module/Viewconnections.php:105
+#, php-format
+msgid "Visit %s's profile [%s]"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:359
-msgid "Maximum project version: "
+#: ../../Zotlabs/Module/Viewconnections.php:135
+msgid "View Connections"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:360
-msgid "Minimum PHP version: "
+#: ../../Zotlabs/Module/Api.php:76 ../../Zotlabs/Module/Api.php:97
+msgid "Authorize application connection"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:361
-msgid "Compatible Server Roles: "
+#: ../../Zotlabs/Module/Api.php:77
+msgid "Return to your app and insert this Security Code:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:362
-msgid "Requires: "
+#: ../../Zotlabs/Module/Api.php:87
+msgid "Please login to continue."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:363
-#: ../../Zotlabs/Module/Admin/Addons.php:450
-msgid "Disabled - version incompatibility"
+#: ../../Zotlabs/Module/Api.php:99
+msgid ""
+"Do you want to authorize this application to access your posts and contacts, "
+"and/or create new posts for you?"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:419
-msgid "Enter the public git repository URL of the addon repo."
+#: ../../Zotlabs/Module/Pdledit_gui.php:119
+msgid "Layout not found"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:420
-msgid "Addon repo git URL"
+#: ../../Zotlabs/Module/Pdledit_gui.php:127
+msgid "This template does not support pdledi_gui (no content regions defined)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:421
-msgid "Custom repo name"
+#: ../../Zotlabs/Module/Pdledit_gui.php:404
+msgid "Main page content"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:421
-msgid "(optional)"
+#: ../../Zotlabs/Module/Pdledit_gui.php:405
+msgid "The main page content can not be edited!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:422
-msgid "Download Addon Repo"
+#: ../../Zotlabs/Module/Home.php:105
+#, php-format
+msgid "Welcome to %s"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:429
-msgid "Install new repo"
+#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
+msgid "Tag removed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:453
-msgid "Manage Repos"
+#: ../../Zotlabs/Module/Tagrm.php:123
+msgid "Remove Item Tag"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:454
-msgid "Installed Addon Repositories"
+#: ../../Zotlabs/Module/Tagrm.php:125
+msgid "Select a tag to remove: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:455
-msgid "Install a New Addon Repository"
+#: ../../Zotlabs/Module/Layouts.php:129 ../../Zotlabs/Module/Layouts.php:187
+#: ../../Zotlabs/Module/Editlayout.php:128
+msgid "Layout Name"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:462
-msgid "Switch branch"
+#: ../../Zotlabs/Module/Layouts.php:132 ../../Zotlabs/Module/Editlayout.php:129
+msgid "Layout Description (Optional)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:45
-msgid "Queue Statistics"
+#: ../../Zotlabs/Module/Layouts.php:184
+msgid "Comanche page description language help"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:46
-msgid "Total Entries"
+#: ../../Zotlabs/Module/Layouts.php:188
+msgid "Layout Description"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:47
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2668
-msgid "Priority"
+#: ../../Zotlabs/Module/Layouts.php:193
+msgid "Download PDL file"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:48
-msgid "Destination URL"
+#: ../../Zotlabs/Module/Common.php:14
+msgid "No channel."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:49
-msgid "Mark hub permanently offline"
+#: ../../Zotlabs/Module/Common.php:45
+msgid "No connections in common."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:50
-msgid "Retry delivery to this hub"
+#: ../../Zotlabs/Module/Common.php:65
+msgid "View Common Connections"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:51
-msgid "Empty queue for this hub"
+#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
+msgid "Location not found."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:52
-msgid "Last known contact"
+#: ../../Zotlabs/Module/Locs.php:74
+msgid "Location lookup failed."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:90
-msgid "New Profile Field"
+#: ../../Zotlabs/Module/Locs.php:78
+msgid ""
+"Please select another location to become primary before removing the primary "
+"location."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:91
-#: ../../Zotlabs/Module/Admin/Profs.php:111
-msgid "Field nickname"
+#: ../../Zotlabs/Module/Locs.php:106
+msgid "Syncing locations"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:91
-#: ../../Zotlabs/Module/Admin/Profs.php:111
-msgid "System name of field"
+#: ../../Zotlabs/Module/Locs.php:115
+msgid "No locations found."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:92
-#: ../../Zotlabs/Module/Admin/Profs.php:112
-msgid "Input type"
+#: ../../Zotlabs/Module/Locs.php:120
+msgid "Manage Channel Locations"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:93
-#: ../../Zotlabs/Module/Admin/Profs.php:113
-msgid "Field Name"
+#: ../../Zotlabs/Module/Locs.php:124 ../../Zotlabs/Module/Menu.php:177
+msgid "Drop"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:93
-#: ../../Zotlabs/Module/Admin/Profs.php:113
-msgid "Label on profile pages"
+#: ../../Zotlabs/Module/Locs.php:126
+msgid "Sync Now"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:94
-#: ../../Zotlabs/Module/Admin/Profs.php:114
-msgid "Help text"
+#: ../../Zotlabs/Module/Locs.php:127
+msgid "Please wait several minutes between consecutive operations."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:94
-#: ../../Zotlabs/Module/Admin/Profs.php:114
-msgid "Additional info (optional)"
+#: ../../Zotlabs/Module/Locs.php:128
+msgid ""
+"When possible, drop a location by logging into that website/hub and removing "
+"your channel."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:104
-msgid "Field definition not found"
+#: ../../Zotlabs/Module/Locs.php:129
+msgid "Use this form to drop the location if the hub is no longer operating."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:110
-msgid "Edit Profile Field"
+#: ../../Zotlabs/Module/Pubsites.php:27
+msgid "Public Hubs"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:169 ../../Zotlabs/Widget/Admin.php:36
-msgid "Profile Fields"
+#: ../../Zotlabs/Module/Pubsites.php:30
+msgid ""
+"The listed hubs allow public registration for the $Projectname network. All "
+"hubs in the network are interlinked so membership on any of them conveys "
+"membership in the network as a whole. Some hubs may require subscription or "
+"provide tiered service plans. The hub itself <strong>may</strong> provide "
+"additional details."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:170
-msgid "Basic Profile Fields"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Hub URL"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:171
-msgid "Advanced Profile Fields"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Access Type"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:171
-msgid "(In addition to basic fields)"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Registration Policy"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:173
-msgid "All available fields"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Stats"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:174
-msgid "Custom Fields"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Software"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:178
-msgid "Create Custom Field"
+#: ../../Zotlabs/Module/Pubsites.php:38
+msgid "Ratings"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:27
-msgid "Theme settings updated."
+#: ../../Zotlabs/Module/Pubsites.php:52
+msgid "Rate"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:62
-msgid "No themes found."
+#: ../../Zotlabs/Module/Changeaddr.php:35
+msgid ""
+"Channel name changes are not allowed within 48 hours of changing the account "
+"password."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:132
-msgid "Screenshot"
+#: ../../Zotlabs/Module/Changeaddr.php:77
+msgid "Change channel nickname/address"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:139
-#: ../../Zotlabs/Module/Admin/Themes.php:173 ../../Zotlabs/Widget/Admin.php:33
-msgid "Themes"
+#: ../../Zotlabs/Module/Changeaddr.php:78
+msgid "Any/all connections on other networks will be lost!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:178
-msgid "[Experimental]"
+#: ../../Zotlabs/Module/Changeaddr.php:80
+msgid "New channel address"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:179
-msgid "[Unsupported]"
+#: ../../Zotlabs/Module/Changeaddr.php:81
+msgid "Rename Channel"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:29
-msgid "Log settings updated."
+#: ../../Zotlabs/Module/Menu.php:68
+msgid "Unable to update menu."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:84 ../../Zotlabs/Widget/Admin.php:54
-#: ../../Zotlabs/Widget/Admin.php:64
-msgid "Logs"
+#: ../../Zotlabs/Module/Menu.php:79
+msgid "Unable to create menu."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:86
-msgid "Clear"
+#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
+msgid "Menu Name"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:92
-msgid "Debugging"
+#: ../../Zotlabs/Module/Menu.php:161
+msgid "Unique name (not visible on webpage) - required"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:93
-msgid "Log file"
+#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
+msgid "Menu Title"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:93
-msgid ""
-"Must be writable by web server. Relative to your top-level webserver "
-"directory."
+#: ../../Zotlabs/Module/Menu.php:162
+msgid "Visible on webpage - leave empty for no title"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:94
-msgid "Log level"
+#: ../../Zotlabs/Module/Menu.php:163
+msgid "Allow Bookmarks"
msgstr ""
-#: ../../Zotlabs/Module/Attach_edit.php:118
-msgid "Can not copy folder into itself."
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+msgid "Menu may be used to store saved bookmarks"
msgstr ""
-#: ../../Zotlabs/Module/Attach_edit.php:131
-#, php-format
-msgid "Can not move folder \"%s\" into itself."
+#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
+msgid "Submit and proceed"
msgstr ""
-#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:477
-msgid "Unable to locate original post."
+#: ../../Zotlabs/Module/Menu.php:181
+msgid "Bookmarks allowed"
msgstr ""
-#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:456
-#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1693
-msgid "status"
+#: ../../Zotlabs/Module/Menu.php:183
+msgid "Delete this menu"
msgstr ""
-#: ../../Zotlabs/Module/Subthread.php:125
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
+#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
+msgid "Edit menu contents"
msgstr ""
-#: ../../Zotlabs/Module/Subthread.php:127
-#, php-format
-msgid "%1$s stopped following %2$s's %3$s"
+#: ../../Zotlabs/Module/Menu.php:185
+msgid "Edit this menu"
msgstr ""
-#: ../../Zotlabs/Module/Attach.php:68
-msgid "Item not available."
+#: ../../Zotlabs/Module/Menu.php:201
+msgid "Menu could not be deleted."
msgstr ""
-#: ../../Zotlabs/Module/Removeme.php:35
-msgid ""
-"Channel removals are not allowed within 48 hours of changing the account "
-"password."
+#: ../../Zotlabs/Module/Menu.php:209 ../../Zotlabs/Module/Mitem.php:31
+msgid "Menu not found."
msgstr ""
-#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-msgid "Remove Channel"
+#: ../../Zotlabs/Module/Menu.php:214
+msgid "Edit Menu"
msgstr ""
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This channel will be permanently removed. "
+#: ../../Zotlabs/Module/Menu.php:218
+msgid "Add or remove entries to this menu"
msgstr ""
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This action can not be undone!"
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Menu name"
msgstr ""
-#: ../../Zotlabs/Module/Rmagic.php:46
-msgid "Authentication failed."
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Must be unique, only seen by you"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:763
-msgid "Empty post discarded."
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1207
-msgid "Duplicate post suppressed."
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title as seen by others"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1350
-msgid "System error. Post not saved."
+#: ../../Zotlabs/Module/Menu.php:222
+msgid "Allow bookmarks"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1384
-msgid "Your comment is awaiting approval."
+#: ../../Zotlabs/Module/Menu.php:232 ../../Zotlabs/Module/Xchan.php:41
+#: ../../Zotlabs/Module/Mitem.php:134
+msgid "Not found."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1520
-msgid "Unable to obtain post information from database."
+#: ../../Zotlabs/Module/Admin/Accounts.php:71
+msgid "Account not found"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1527
+#: ../../Zotlabs/Module/Admin/Accounts.php:92
#, php-format
-msgid "You have reached your limit of %1$.0f top level posts."
+msgid "Account '%s' blocked"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1534
+#: ../../Zotlabs/Module/Admin/Accounts.php:100
#, php-format
-msgid "You have reached your limit of %1$.0f webpages."
-msgstr ""
-
-#: ../../Zotlabs/Module/Display.php:340
-msgid "Article"
-msgstr ""
-
-#: ../../Zotlabs/Module/Display.php:384
-msgid "Item has been removed."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:63
-msgid "Unable to create element."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:87
-msgid "Unable to update menu element."
+msgid "Account '%s' unblocked"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:103
-msgid "Unable to add menu element."
+#: ../../Zotlabs/Module/Admin/Accounts.php:140
+msgid "Unverified"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
-msgid "Menu Item Permissions"
+#: ../../Zotlabs/Module/Admin/Accounts.php:143
+msgid "Expired"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
-msgid "(click to open/close)"
+#: ../../Zotlabs/Module/Admin/Accounts.php:207
+#: ../../Zotlabs/Module/Admin/Themes.php:138
+#: ../../Zotlabs/Module/Admin/Themes.php:172
+#: ../../Zotlabs/Module/Admin/Addons.php:124
+#: ../../Zotlabs/Module/Admin/Addons.php:191
+#: ../../Zotlabs/Module/Admin/Channels.php:167
+#: ../../Zotlabs/Module/Admin/Logs.php:83
+#: ../../Zotlabs/Module/Admin/Site.php:399
+#: ../../Zotlabs/Module/Admin/Security.php:106
+#: ../../Zotlabs/Module/Admin.php:142
+msgid "Administration"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
-msgid "Link Name"
+#: ../../Zotlabs/Module/Admin/Accounts.php:210
+msgid "Show verified registrations"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
-msgid "Link or Submenu Target"
+#: ../../Zotlabs/Module/Admin/Accounts.php:210
+msgid "Show all registrations"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:175
-msgid "Enter URL of the link or select a menu name to create a submenu"
+#: ../../Zotlabs/Module/Admin/Accounts.php:212
+msgid "Select toggle"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
-msgid "Use magic-auth if available"
+#: ../../Zotlabs/Module/Admin/Accounts.php:213
+msgid "Deny selected"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
-msgid "Open link in new window"
+#: ../../Zotlabs/Module/Admin/Accounts.php:214
+msgid "Approve selected"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Order in list"
+#: ../../Zotlabs/Module/Admin/Accounts.php:215
+msgid "All registrations"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Higher numbers will sink to bottom of listing"
+#: ../../Zotlabs/Module/Admin/Accounts.php:215
+msgid "Verified registrations waiting for approval"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:179
-msgid "Submit and finish"
+#: ../../Zotlabs/Module/Admin/Accounts.php:216
+msgid "Request date"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:180
-msgid "Submit and continue"
+#: ../../Zotlabs/Module/Admin/Accounts.php:216
+msgid "Requests"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:189
-msgid "Menu:"
+#: ../../Zotlabs/Module/Admin/Accounts.php:217
+msgid "No registrations available"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:192
-msgid "Link Target"
+#: ../../Zotlabs/Module/Admin/Accounts.php:217
+msgid "No verified registrations available"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:195
-msgid "Edit menu"
+#: ../../Zotlabs/Module/Admin/Accounts.php:223
+msgid "Verified"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:198
-msgid "Edit element"
+#: ../../Zotlabs/Module/Admin/Accounts.php:224
+msgid "Not yet verified"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:199
-msgid "Drop element"
+#: ../../Zotlabs/Module/Admin/Accounts.php:229
+msgid "ID"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:200
-msgid "New element"
+#: ../../Zotlabs/Module/Admin/Accounts.php:231
+msgid "All channels"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:201
-msgid "Edit this menu container"
+#: ../../Zotlabs/Module/Admin/Accounts.php:232
+msgid "Register date"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:202
-msgid "Add menu element"
+#: ../../Zotlabs/Module/Admin/Accounts.php:233
+msgid "Last login"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:203
-msgid "Delete this menu item"
+#: ../../Zotlabs/Module/Admin/Accounts.php:234
+msgid "Expires"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:204
-msgid "Edit this menu item"
+#: ../../Zotlabs/Module/Admin/Accounts.php:235
+#: ../../Zotlabs/Module/Admin/Account_edit.php:77
+msgid "Service class"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:222
-msgid "Menu item not found."
+#: ../../Zotlabs/Module/Admin/Accounts.php:237
+msgid ""
+"Selected accounts will be deleted!\\n\\nEverything these accounts had posted "
+"on this site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:235
-msgid "Menu item deleted."
+#: ../../Zotlabs/Module/Admin/Accounts.php:238
+msgid ""
+"The account {0} will be deleted!\\n\\nEverything this account has posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:237
-msgid "Menu item could not be deleted."
+#: ../../Zotlabs/Module/Admin/Accounts.php:247
+msgid "Message"
msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:244
-msgid "Edit Menu Element"
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Accounts.php:366
+#, php-format
+msgid "%s account blocked/unblocked"
+msgid_plural "%s account blocked/unblocked"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Mitem.php:254
-msgid "Link text"
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Accounts.php:389
+#, php-format
+msgid "%s account deleted"
+msgid_plural "%s accounts deleted"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Email_validation.php:37
-msgid "Email Verification Required"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:66
+msgid "Max queueworker threads"
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:38
-#, php-format
-msgid ""
-"A verification token was sent to your email address [%s]. Enter that token "
-"here to complete the account verification step. Please allow a few minutes "
-"for delivery, and check your spam folder if you do not see the message."
+#: ../../Zotlabs/Module/Admin/Queueworker.php:68
+msgid "Minimum 4, default 4"
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:39
-msgid "Resend Email"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:78
+msgid "Assume workers dead after"
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:42
-msgid "Validation token"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:80
+msgid "Minimum 120, default 300 seconds"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:108
-msgid "No content available for year"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:92
+msgid "Pause before starting next task"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:171
-msgid "Export Channel"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:94
+msgid "Minimum 100, default 100 microseconds"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:173
-msgid "Export channel"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:103
+msgid "Automatically adjust pause before starting next task"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:174
-msgid ""
-"This will export your identity and social graph into a file which can be "
-"used to import your channel to a new hub."
+#: ../../Zotlabs/Module/Admin/Queueworker.php:112
+msgid "Queueworker Settings"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:177
-msgid "Export content"
+#: ../../Zotlabs/Module/Admin/Themes.php:27
+msgid "Theme settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:178
-msgid ""
-"This will export your posts, direct messages, articles and cards per month "
-"stored into a zip file per year. Months with no posts will be dismissed."
+#: ../../Zotlabs/Module/Admin/Themes.php:62
+msgid "No themes found."
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:180
-msgid "Export wikis"
+#: ../../Zotlabs/Module/Admin/Themes.php:111
+#: ../../Zotlabs/Module/Admin/Addons.php:93
+msgid "Disable"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:181
-msgid "This will export your wikis and wiki pages."
+#: ../../Zotlabs/Module/Admin/Themes.php:113
+#: ../../Zotlabs/Module/Admin/Addons.php:96
+msgid "Enable"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:183
-msgid "Export webpages"
+#: ../../Zotlabs/Module/Admin/Themes.php:132
+msgid "Screenshot"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:184
-msgid "This will export your webpages and menus."
+#: ../../Zotlabs/Module/Admin/Themes.php:140
+#: ../../Zotlabs/Module/Admin/Addons.php:126
+msgid "Toggle"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:186
-msgid "Export channel calendar"
+#: ../../Zotlabs/Module/Admin/Themes.php:150
+#: ../../Zotlabs/Module/Admin/Addons.php:134
+msgid "Author: "
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:187
-msgid ""
-"This will export your channel calendar events and associated items. CalDAV "
-"calendars are not included."
+#: ../../Zotlabs/Module/Admin/Themes.php:151
+#: ../../Zotlabs/Module/Admin/Addons.php:135
+msgid "Maintainer: "
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:189
-msgid "Export chatrooms"
+#: ../../Zotlabs/Module/Admin/Themes.php:178
+msgid "[Experimental]"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:190
-msgid "This will export your chatrooms. Chat history is dismissed."
+#: ../../Zotlabs/Module/Admin/Themes.php:179
+msgid "[Unsupported]"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:192
+#: ../../Zotlabs/Module/Admin/Addons.php:72
#, php-format
-msgid ""
-"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</"
-"a> on any site containing your channel."
+msgid "Plugin %s disabled."
msgstr ""
-#: ../../Zotlabs/Module/Notifications.php:106
-#: ../../Zotlabs/Module/Notify.php:85
-msgid "No more system notifications."
+#: ../../Zotlabs/Module/Admin/Addons.php:77
+#, php-format
+msgid "Plugin %s enabled."
msgstr ""
-#: ../../Zotlabs/Module/Notifications.php:110
-#: ../../Zotlabs/Module/Notify.php:89
-msgid "System Notifications"
+#: ../../Zotlabs/Module/Admin/Addons.php:136
+msgid "Minimum project version: "
msgstr ""
-#: ../../Zotlabs/Module/Notifications.php:111
-msgid "Mark all seen"
+#: ../../Zotlabs/Module/Admin/Addons.php:137
+msgid "Maximum project version: "
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:106
-msgid "Files: shared with me"
+#: ../../Zotlabs/Module/Admin/Addons.php:138
+msgid "Minimum PHP version: "
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:108
-msgid "NEW"
+#: ../../Zotlabs/Module/Admin/Addons.php:139
+msgid "Compatible Server Roles: "
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:111
-msgid "Remove all files"
+#: ../../Zotlabs/Module/Admin/Addons.php:140
+msgid "Requires: "
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:112
-msgid "Remove this file"
+#: ../../Zotlabs/Module/Admin/Addons.php:141
+#: ../../Zotlabs/Module/Admin/Addons.php:197
+msgid "Disabled - version incompatibility"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:94
+#: ../../Zotlabs/Module/Admin/Features.php:56
#, php-format
-msgid "This channel is limited to %d tokens"
-msgstr ""
-
-#: ../../Zotlabs/Module/Tokens.php:100
-msgid "Name and Password are required."
-msgstr ""
-
-#: ../../Zotlabs/Module/Tokens.php:215
-msgid "Token saved."
-msgstr ""
-
-#: ../../Zotlabs/Module/Tokens.php:261
-msgid ""
-"Use this form to create temporary access identifiers to share things with "
-"non-members. These identities may be used in privacy groups and visitors may "
-"login using these credentials to access private content."
-msgstr ""
-
-#: ../../Zotlabs/Module/Tokens.php:274
-msgid "Please select a role for this guest!"
-msgstr ""
-
-#: ../../Zotlabs/Module/Tokens.php:287
-msgid "Select a role for this guest"
+msgid "Lock feature %s"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:291
-msgid "Login Name"
+#: ../../Zotlabs/Module/Admin/Features.php:65
+msgid "Manage Additional Features"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:292
-msgid "Login Password"
+#: ../../Zotlabs/Module/Admin/Profs.php:90
+msgid "New Profile Field"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:293
-msgid "Expires (yyyy-mm-dd)"
+#: ../../Zotlabs/Module/Admin/Profs.php:91
+#: ../../Zotlabs/Module/Admin/Profs.php:111
+msgid "Field nickname"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:59
-msgid "Contact role deleted."
+#: ../../Zotlabs/Module/Admin/Profs.php:91
+#: ../../Zotlabs/Module/Admin/Profs.php:111
+msgid "System name of field"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:86
-msgid "Permission category name is required."
+#: ../../Zotlabs/Module/Admin/Profs.php:92
+#: ../../Zotlabs/Module/Admin/Profs.php:112
+msgid "Input type"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154
-msgid "Contact role saved."
+#: ../../Zotlabs/Module/Admin/Profs.php:93
+#: ../../Zotlabs/Module/Admin/Profs.php:113
+msgid "Field Name"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:204
-msgid "Role to assign affected contacts and default role to"
+#: ../../Zotlabs/Module/Admin/Profs.php:93
+#: ../../Zotlabs/Module/Admin/Profs.php:113
+msgid "Label on profile pages"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:204
-msgid "Role to assign affected contacts to"
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
+msgid "Help text"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:234
-msgid "Assign this role to"
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
+msgid "Additional info (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:236
-msgid "All my contacts"
+#: ../../Zotlabs/Module/Admin/Profs.php:104
+msgid "Field definition not found"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:247
-msgid "Automatically assign this role to new contacts"
+#: ../../Zotlabs/Module/Admin/Profs.php:110
+msgid "Edit Profile Field"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:249
-msgid "Role name"
+#: ../../Zotlabs/Module/Admin/Profs.php:170
+msgid "Basic Profile Fields"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:249
-msgid "System role - not editable"
+#: ../../Zotlabs/Module/Admin/Profs.php:171
+msgid "Advanced Profile Fields"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:250
-msgid "Deleting"
+#: ../../Zotlabs/Module/Admin/Profs.php:171
+msgid "(In addition to basic fields)"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:255
-msgid "Role Permissions"
+#: ../../Zotlabs/Module/Admin/Profs.php:173
+msgid "All available fields"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:256
-msgid ""
-"Some permissions may be inherited from your <a href=\"settings\">channel "
-"role</a>, which have higher priority than contact role settings."
+#: ../../Zotlabs/Module/Admin/Profs.php:174
+msgid "Custom Fields"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:106
-#: ../../Zotlabs/Module/Settings/Channel.php:218
-msgid "Please select a channel role"
+#: ../../Zotlabs/Module/Admin/Profs.php:178
+msgid "Create Custom Field"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:195
-msgid "Your channel address is"
+#: ../../Zotlabs/Module/Admin/Channels.php:28
+#: ../../Zotlabs/Module/Admin/Channels.php:80
+msgid "Channel not found"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:198
-msgid "Your files/photos are accessible via WebDAV at"
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Channels.php:48
+#, php-format
+msgid "%s channel censored/uncensored"
+msgid_plural "%s channels censored/uncensored"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Settings/Channel.php:229
-msgid "Channel Settings"
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Channels.php:57
+#, php-format
+msgid "%s channel code allowed/disallowed"
+msgid_plural "%s channels code allowed/disallowed"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Settings/Channel.php:236
-msgid "Basic Settings"
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Channels.php:63
+#, php-format
+msgid "%s channel deleted"
+msgid_plural "%s channels deleted"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Module/Settings/Channel.php:237
-msgid "Channel timezone:"
+#: ../../Zotlabs/Module/Admin/Channels.php:90
+#, php-format
+msgid "Channel '%s' deleted"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:238
-msgid "Default post location:"
+#: ../../Zotlabs/Module/Admin/Channels.php:109
+#, php-format
+msgid "Channel '%s' censored"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:238
-msgid "Geographical location to display on your posts"
+#: ../../Zotlabs/Module/Admin/Channels.php:109
+#, php-format
+msgid "Channel '%s' uncensored"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:239
-msgid "Use browser location"
+#: ../../Zotlabs/Module/Admin/Channels.php:120
+#, php-format
+msgid "Channel '%s' code allowed"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:240
-msgid "Adult content"
+#: ../../Zotlabs/Module/Admin/Channels.php:120
+#, php-format
+msgid "Channel '%s' code disallowed"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:240
-msgid "This channel frequently or regularly publishes adult content"
+#: ../../Zotlabs/Module/Admin/Channels.php:170
+msgid "select all"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:241
-msgid "Maximum Friend Requests/Day:"
+#: ../../Zotlabs/Module/Admin/Channels.php:172
+msgid "Censor"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:241
-msgid "May reduce spam activity"
+#: ../../Zotlabs/Module/Admin/Channels.php:173
+msgid "Uncensor"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:243
-msgid "By default post a status message when:"
+#: ../../Zotlabs/Module/Admin/Channels.php:174
+msgid "Allow Code"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:244
-msgid "accepting a friend request"
+#: ../../Zotlabs/Module/Admin/Channels.php:175
+msgid "Disallow Code"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:245
-msgid "joining a forum/community"
+#: ../../Zotlabs/Module/Admin/Channels.php:180
+msgid "UID"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:246
-msgid "making an <em>interesting</em> profile change"
+#: ../../Zotlabs/Module/Admin/Channels.php:184
+msgid ""
+"Selected channels will be deleted!\\n\\nEverything that was posted in these "
+"channels on this site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:247
-msgid "Send a notification email when:"
+#: ../../Zotlabs/Module/Admin/Channels.php:185
+msgid ""
+"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
+"channel on this site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:248
-msgid "You receive a connection request"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:34
+#, php-format
+msgid "Password changed for account %d."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:249
-msgid "Your connections are confirmed"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:51
+msgid "Account settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:250
-msgid "Someone writes on your profile wall"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:73
+msgid "Account Edit"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:251
-msgid "Someone writes a followup comment"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:74
+msgid "New Password"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:252
-msgid "You receive a private message"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:75
+msgid "New Password again"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:253
-msgid "You receive a friend suggestion"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:76
+msgid "Account language (for emails)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:254
-msgid "You are tagged in a post"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:19
+msgid "Update has been marked successful"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:255
-msgid "You are poked/prodded/etc. in a post"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:32
+#, php-format
+msgid "Verification of update %s failed. Check system logs."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:256
-msgid "Someone likes your post/comment"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:35
+#: ../../Zotlabs/Module/Admin/Dbsync.php:62
+#, php-format
+msgid "Update %s was successfully applied."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:257
-msgid "Show visual notifications including:"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:39
+#, php-format
+msgid "Verifying update %s did not return a status. Unknown if it succeeded."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:258
-msgid "Unseen stream activity"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:42
+#, php-format
+msgid "Update %s does not contain a verification function."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-msgid "Unseen channel activity"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:46
+#: ../../Zotlabs/Module/Admin/Dbsync.php:69
+#, php-format
+msgid "Update function %s could not be found."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:260
-msgid "Unseen private messages"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:59
+#, php-format
+msgid "Executing update procedure %s failed. Check system logs."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:260
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-#: ../../Zotlabs/Module/Settings/Channel.php:266
-#: ../../Zotlabs/Module/Settings/Channel.php:267
-msgid "Recommended"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:66
+#, php-format
+msgid ""
+"Update %s did not return a status. It cannot be determined if it was "
+"successful."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:261
-msgid "Upcoming events"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:87
+msgid "Failed Updates"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:262
-msgid "Events today"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:89
+msgid "Mark success (if update was manually applied)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:263
-msgid "Upcoming birthdays"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:90
+msgid "Attempt to verify this update if a verification procedure exists"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:263
-msgid "Not available in all themes"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:91
+msgid "Attempt to execute this update step automatically"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:264
-msgid "System (personal) notifications"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:96
+msgid "No failed updates."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-msgid "System info messages"
+#: ../../Zotlabs/Module/Admin/Logs.php:29
+msgid "Log settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:266
-msgid "System critical alerts"
+#: ../../Zotlabs/Module/Admin/Logs.php:86
+msgid "Clear"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:267
-msgid "New connections"
+#: ../../Zotlabs/Module/Admin/Logs.php:92
+msgid "Debugging"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:268
-msgid "System Registrations"
+#: ../../Zotlabs/Module/Admin/Logs.php:93
+msgid "Log file"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:269
-msgid "Unseen shared files"
+#: ../../Zotlabs/Module/Admin/Logs.php:93
+msgid ""
+"Must be writable by web server. Relative to your top-level webserver "
+"directory."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:270
-msgid "Unseen public stream activity"
+#: ../../Zotlabs/Module/Admin/Logs.php:94
+msgid "Log level"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:271
-msgid "Unseen likes and dislikes"
+#: ../../Zotlabs/Module/Admin/Queue.php:45
+msgid "Queue Statistics"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:272
-msgid "Unseen forum posts"
+#: ../../Zotlabs/Module/Admin/Queue.php:46
+msgid "Total Entries"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:273
-msgid "Email notification hub (hostname)"
+#: ../../Zotlabs/Module/Admin/Queue.php:48
+msgid "Destination URL"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:273
-#, php-format
-msgid ""
-"If your channel is mirrored to multiple hubs, set this to your preferred "
-"location. This will prevent duplicate email notifications. Example: %s"
+#: ../../Zotlabs/Module/Admin/Queue.php:49
+msgid "Mark hub permanently offline"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:274
-msgid "Show new wall posts, private messages and connections under Notices"
+#: ../../Zotlabs/Module/Admin/Queue.php:50
+msgid "Retry delivery to this hub"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:275
-msgid "Mark all notices of the thread read if a notice is clicked"
+#: ../../Zotlabs/Module/Admin/Queue.php:51
+msgid "Empty queue for this hub"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:275
-msgid "If no, only the clicked notice will be marked read"
+#: ../../Zotlabs/Module/Admin/Queue.php:52
+msgid "Last known contact"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:276
-msgid ""
-"Desktop notifications are unavailable because the required browser "
-"permission has not been granted"
+#: ../../Zotlabs/Module/Admin/Site.php:114
+msgid "Invalid input"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:277
-msgid "Grant permission"
+#: ../../Zotlabs/Module/Admin/Site.php:134
+msgid "Errors"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:278
-msgid "Notify me of events this many days in advance"
+#: ../../Zotlabs/Module/Admin/Site.php:221
+msgid "Site settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:278
-msgid "Must be greater than 0"
+#: ../../Zotlabs/Module/Admin/Site.php:244
+#: ../../Zotlabs/Module/Settings/Display.php:117
+#, php-format
+msgid "%s - (Incompatible)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:281
-msgid "Default photo upload folder"
+#: ../../Zotlabs/Module/Admin/Site.php:251
+msgid "mobile"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:281
-#: ../../Zotlabs/Module/Settings/Channel.php:282
-msgid "%Y - current year, %m - current month"
+#: ../../Zotlabs/Module/Admin/Site.php:253
+msgid "experimental"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:282
-msgid "Default file upload folder"
+#: ../../Zotlabs/Module/Admin/Site.php:255
+msgid "unsupported"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "Remove this channel."
+#: ../../Zotlabs/Module/Admin/Site.php:308
+msgid "Yes - with approval"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-msgid "Expire other channel content after this many days"
+#: ../../Zotlabs/Module/Admin/Site.php:316
+msgid "My site is not a public server"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-msgid "0 or blank to use the website limit."
+#: ../../Zotlabs/Module/Admin/Site.php:317
+msgid "My site has paid access only"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-#, php-format
-msgid "This website expires after %d days."
+#: ../../Zotlabs/Module/Admin/Site.php:318
+msgid "My site has free access only"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-msgid "This website does not expire imported content."
+#: ../../Zotlabs/Module/Admin/Site.php:319
+msgid "My site offers free accounts with optional paid upgrades"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-msgid "The website limit takes precedence if lower than your limit."
+#: ../../Zotlabs/Module/Admin/Site.php:337
+msgid "Default permission role for new accounts"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:286
-#: ../../Zotlabs/Module/Settings/Channel.php:287
+#: ../../Zotlabs/Module/Admin/Site.php:337
msgid ""
-"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
-"leave blank to import all posts"
-msgstr ""
-
-#: ../../Zotlabs/Module/Settings/Featured.php:25
-msgid "No feature settings configured"
-msgstr ""
-
-#: ../../Zotlabs/Module/Settings/Featured.php:34
-msgid "Addon Settings"
+"This role will be used for the first channel created after registration."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Featured.php:35
-msgid "Please save/submit changes to any panel before opening another."
+#: ../../Zotlabs/Module/Admin/Site.php:344 ../../Zotlabs/Module/Invite.php:411
+msgid "Minute(s)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Editor.php:40
-msgid "Editor Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:345 ../../Zotlabs/Module/Invite.php:412
+msgid "Hour(s)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Photos.php:40
-msgid "Photos Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:346 ../../Zotlabs/Module/Invite.php:413
+msgid "Day(s)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Profiles.php:41
-msgid "Default profile for new contacts"
+#: ../../Zotlabs/Module/Admin/Site.php:347
+msgid "Week(s)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Profiles.php:49
-msgid "Profiles Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:348
+msgid "Month(s)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Network.php:42
-#: ../../Zotlabs/Module/Settings/Channel_home.php:46
-msgid "Max height of content (in pixels)"
+#: ../../Zotlabs/Module/Admin/Site.php:349
+msgid "Year(s)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Network.php:44
-#: ../../Zotlabs/Module/Settings/Channel_home.php:48
-msgid "Click to expand content exceeding this height"
+#: ../../Zotlabs/Module/Admin/Site.php:357
+msgid "Register verification delay"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Network.php:59
-msgid "Stream Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:360
+msgid "Time to wait before a registration can be verified"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Directory.php:40
-msgid "Directory Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:363
+#: ../../Zotlabs/Module/Admin/Site.php:385 ../../Zotlabs/Module/Invite.php:422
+msgid "duration up from now"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:61
-msgid "Personal menu to display in your channel pages"
+#: ../../Zotlabs/Module/Admin/Site.php:379
+msgid "Register verification expiration time"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:88
-msgid "Channel Home Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:382
+msgid "Time before an unverified registration will expire"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Calendar.php:40
-msgid "Calendar Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:405
+msgid "File upload"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Conversation.php:42
-msgid "Conversation Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:406
+msgid "Policies"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Features.php:45
-msgid "Additional Features"
+#: ../../Zotlabs/Module/Admin/Site.php:413
+msgid "Banner/Logo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Connections.php:40
-msgid "Connections Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:413
+msgid "Unfiltered HTML/CSS/JS is allowed"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:23
-msgid "Password is required"
+#: ../../Zotlabs/Module/Admin/Site.php:414
+msgid "Administrator Information"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:29
-msgid "The provided password is not correct"
+#: ../../Zotlabs/Module/Admin/Site.php:414
+msgid ""
+"Contact information for site administrators. Displayed on siteinfo page. "
+"BBCode can be used here"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:68
-msgid "Account Multi-Factor Authentication"
+#: ../../Zotlabs/Module/Admin/Site.php:415 ../../Zotlabs/Module/Siteinfo.php:25
+msgid "Site Information"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:69
+#: ../../Zotlabs/Module/Admin/Site.php:415
msgid ""
-"This is your generated secret. It may be used in some cases if the QR image "
-"cannot be read. Please store it in a safe place."
-msgstr ""
-
-#: ../../Zotlabs/Module/Settings/Multifactor.php:70
-msgid "Please enter the code from your authenticator app"
+"Publicly visible description of this site. Displayed on siteinfo page. "
+"BBCode can be used here"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:71
-msgid "You will only be able to enable MFA if the test passes"
+#: ../../Zotlabs/Module/Admin/Site.php:416
+msgid "System theme"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:75
-msgid "Congratulations, the provided code was correct"
+#: ../../Zotlabs/Module/Admin/Site.php:416
+msgid ""
+"Default system theme - may be over-ridden by user profiles - <a href='#' "
+"id='cnftheme'>change theme settings</a>"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:76
-msgid "Incorrect code"
+#: ../../Zotlabs/Module/Admin/Site.php:419
+msgid "Allow Feeds as Connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:79
-msgid "Enable Multi-Factor Authentication"
+#: ../../Zotlabs/Module/Admin/Site.php:419
+msgid "(Heavy system resource usage)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:81
-msgid "Logging in will require you to be in possession of your smartphone"
+#: ../../Zotlabs/Module/Admin/Site.php:420
+msgid "Maximum image size"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:84
-msgid "Your account password"
+#: ../../Zotlabs/Module/Admin/Site.php:420
+msgid ""
+"Maximum size in bytes of uploaded images. Default is 0, which means no "
+"limits."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:86
-msgid "Test"
+#: ../../Zotlabs/Module/Admin/Site.php:421
+msgid "Minimum age"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Events.php:40
-msgid "Events Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:421
+msgid "Minimum age (in years) for who may register on this site."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:23
-msgid "Not valid email."
+#: ../../Zotlabs/Module/Admin/Site.php:422
+msgid "Which best describes the types of account offered by this hub?"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:26
-msgid "Protected email address. Cannot change to that email."
+#: ../../Zotlabs/Module/Admin/Site.php:422
+msgid "This is displayed on the public server site list."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:35
-msgid "System failure storing new email. Please try again."
+#: ../../Zotlabs/Module/Admin/Site.php:428
+msgid "Register text"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:53
-msgid "Password verification failed."
+#: ../../Zotlabs/Module/Admin/Site.php:430
+msgid "This text will be displayed prominently at the registration page"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:60
-msgid "Passwords do not match. Password unchanged."
+#: ../../Zotlabs/Module/Admin/Site.php:434
+msgid "Does this site allow new member registration?"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:64
-msgid "Empty passwords are not allowed. Password unchanged."
+#: ../../Zotlabs/Module/Admin/Site.php:441
+msgid "Configure the registration open days/hours"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:78
-msgid "Password changed."
+#: ../../Zotlabs/Module/Admin/Site.php:443
+msgid "Empty or '-:-' value will keep registration open 24/7 (default)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:80
-msgid "Password update failed. Please try again."
+#: ../../Zotlabs/Module/Admin/Site.php:444
+msgid ""
+"Weekdays and hours must be separated by colon ':', From-To ranges with a "
+"dash `-` example: 1:800-1200"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:105
-msgid "Account Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:445
+msgid ""
+"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 "
+"2:900-1700"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:106
-msgid "Current Password"
+#: ../../Zotlabs/Module/Admin/Site.php:446
+msgid ""
+"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 "
+"or 1-2,4-5:900-1700"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:107
-msgid "Enter New Password"
+#: ../../Zotlabs/Module/Admin/Site.php:447
+msgid "Advanced examples:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:108
-msgid "Confirm New Password"
+#: ../../Zotlabs/Module/Admin/Site.php:447
+#: ../../Zotlabs/Module/Settings/Channel.php:184
+msgid "or"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:108
-msgid "Leave password fields blank unless changing"
+#: ../../Zotlabs/Module/Admin/Site.php:448
+msgid "Check your configuration"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:110
-msgid "Multi-Factor Authentication"
+#: ../../Zotlabs/Module/Admin/Site.php:452
+msgid "Max account registrations per day"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:111
-msgid "DId2 or Email Address:"
+#: ../../Zotlabs/Module/Admin/Site.php:454
+msgid "Unlimited if zero or no value - default 50"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:114
-msgid "Remove this account including all its channels"
+#: ../../Zotlabs/Module/Admin/Site.php:458
+msgid "Max account registrations from same IP"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:49
-msgid "Privacy settings updated."
+#: ../../Zotlabs/Module/Admin/Site.php:460
+msgid "Unlimited if zero or no value - default 3"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:67
-msgid "Only those you specifically allow"
+#: ../../Zotlabs/Module/Admin/Site.php:466
+msgid "Auto channel create"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:68
-msgid "Approved connections"
+#: ../../Zotlabs/Module/Admin/Site.php:468
+msgid ""
+"If disabled the channel will be created in a separate step during the "
+"registration process"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:69
-msgid "Any connections"
+#: ../../Zotlabs/Module/Admin/Site.php:472
+msgid "Require invite code"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:70
-msgid "Anybody on this website"
+#: ../../Zotlabs/Module/Admin/Site.php:477
+msgid "Allow invite code"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:71
-msgid "Anybody in this network"
+#: ../../Zotlabs/Module/Admin/Site.php:482
+msgid "Require email address"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:72
-msgid "Anybody authenticated"
+#: ../../Zotlabs/Module/Admin/Site.php:484
+msgid "The provided email address will be verified (recommended)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:73
-msgid "Anybody on the internet"
+#: ../../Zotlabs/Module/Admin/Site.php:488
+msgid "Abandon account after x days"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:83
+#: ../../Zotlabs/Module/Admin/Site.php:490
msgid ""
-"Advise: set to \"Anybody on the internet\" and use privacy groups to "
-"restrict access"
-msgstr ""
-
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
-msgid "Privacy Settings"
-msgstr ""
-
-#: ../../Zotlabs/Module/Settings/Privacy.php:127
-msgid "Advanced configuration"
+"Will not waste system resources polling external sites for abandonded "
+"accounts. Enter 0 for no time limit."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:129
-msgid "Proceed with caution"
+#: ../../Zotlabs/Module/Admin/Site.php:495
+msgid "Site homepage to show visitors (default: login box)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:130
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid ""
-"Changing advanced configuration settings can impact your, and your contacts "
-"channels functionality and security."
+"example: 'pubstream' to show public stream, 'page/sys/home' to show a system "
+"webpage called 'home' or 'include:home.html' to include a file."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:131
-msgid "Accept the risk and continue"
+#: ../../Zotlabs/Module/Admin/Site.php:496
+msgid "Preserve site homepage URL"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
-msgid "Automatically approve new contacts"
+#: ../../Zotlabs/Module/Admin/Site.php:496
+msgid ""
+"Present the site homepage in a frame at the original location instead of "
+"redirecting"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
-msgid "Opt-out of search engine indexing"
+#: ../../Zotlabs/Module/Admin/Site.php:497
+msgid "Allowed friend domains"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-msgid "Group actor"
+#: ../../Zotlabs/Module/Admin/Site.php:497
+msgid ""
+"Comma separated list of domains which are allowed to establish friendships "
+"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-msgid "Allow this channel to act as a forum"
+#: ../../Zotlabs/Module/Admin/Site.php:498
+msgid "Force publish"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-msgid "Accept all messages which mention you"
+#: ../../Zotlabs/Module/Admin/Site.php:498
+msgid ""
+"Check to force all profiles on this site to be listed in the site directory"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-msgid "This setting bypasses normal permissions"
+#: ../../Zotlabs/Module/Admin/Site.php:499
+msgid "Enable public stream"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-msgid "Accept unsolicited comments for moderation"
+#: ../../Zotlabs/Module/Admin/Site.php:499
+msgid "Enable the public stream. Warning: this content is unmoderated"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-msgid "Otherwise they will be silently dropped"
+#: ../../Zotlabs/Module/Admin/Site.php:500
+msgid "Site only public stream"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:138
-msgid "Enable OCAP access"
+#: ../../Zotlabs/Module/Admin/Site.php:500
+msgid "Restrict the public stream to content originating at this site"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:138
-msgid "Grant limited posts the right to access linked private media"
+#: ../../Zotlabs/Module/Admin/Site.php:501
+msgid "Allow anybody on the internet to access the public streams"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:126
-#, php-format
-msgid "%s - (Experimental)"
+#: ../../Zotlabs/Module/Admin/Site.php:501
+msgid "Disable to require authentication before viewing"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:183
-msgid "Display Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:502
+msgid "Only import Public stream posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:184
-msgid "Theme Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:503
+msgid "Do not import Public stream posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:185
-msgid "Custom Theme Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:506
+msgid "Login on Homepage"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:186
-msgid "Content Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:506
+msgid ""
+"Present a login box to visitors on the home page if no other content has "
+"been configured."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:192
-msgid "Display Theme:"
+#: ../../Zotlabs/Module/Admin/Site.php:507
+msgid "Enable context help"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:193
-msgid "Select scheme"
+#: ../../Zotlabs/Module/Admin/Site.php:507
+msgid ""
+"Display contextual help for the current page when the help button is pressed."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid "Preload images before rendering the page"
+#: ../../Zotlabs/Module/Admin/Site.php:509
+msgid "Reply-to email address for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid ""
-"The subjective page load time will be longer but the page will be ready when "
-"displayed"
+#: ../../Zotlabs/Module/Admin/Site.php:510
+msgid "Sender (From) email address for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:196
-msgid "Enable user zoom on mobile devices"
+#: ../../Zotlabs/Module/Admin/Site.php:511
+msgid "Name of email sender for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:197
-msgid "Update browser every xx seconds"
+#: ../../Zotlabs/Module/Admin/Site.php:513
+msgid "Directory Server URL"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:197
-msgid "Minimum of 10 seconds, no maximum"
+#: ../../Zotlabs/Module/Admin/Site.php:513
+msgid "Default directory server"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:198
-msgid "Maximum number of conversations to load at any time:"
+#: ../../Zotlabs/Module/Admin/Site.php:515
+msgid "Enable SSE Notifications"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:198
-msgid "Maximum of 30 items"
+#: ../../Zotlabs/Module/Admin/Site.php:515
+msgid ""
+"If disabled, traditional polling will be used. Warning: this setting might "
+"not be suited for shared hosting"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:199
-msgid "Show emoticons (smilies) as images"
+#: ../../Zotlabs/Module/Admin/Site.php:517
+msgid "Proxy user"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:200
-msgid "Link post titles to source"
+#: ../../Zotlabs/Module/Admin/Site.php:518
+msgid "Proxy URL"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:202
-#: ../../Zotlabs/Widget/Newmember.php:82
-msgid "New Member Links"
+#: ../../Zotlabs/Module/Admin/Site.php:519
+msgid "Network timeout"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:202
-msgid "Display new member quick links menu"
+#: ../../Zotlabs/Module/Admin/Site.php:519
+msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Manage.php:41
-msgid "Channel Manager Settings"
+#: ../../Zotlabs/Module/Admin/Site.php:520
+msgid "Delivery interval"
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of Pinned Navbar Apps"
+#: ../../Zotlabs/Module/Admin/Site.php:520
+msgid ""
+"Delay background delivery processes by this many seconds to reduce system "
+"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
+"for large dedicated servers."
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of App Tray Apps"
+#: ../../Zotlabs/Module/Admin/Site.php:521
+msgid "Deliveries per process"
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:48
+#: ../../Zotlabs/Module/Admin/Site.php:521
msgid ""
-"Use arrows to move the corresponding app left (top) or right (bottom) in the "
-"navbar"
+"Number of deliveries to attempt in a single operating system process. Adjust "
+"if necessary to tune system performance. Recommend: 1-5."
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:48
-msgid "Use arrows to move the corresponding app up or down in the app tray"
+#: ../../Zotlabs/Module/Admin/Site.php:523
+msgid "Poll interval"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:111
-msgid "Like/Dislike"
+#: ../../Zotlabs/Module/Admin/Site.php:523
+msgid ""
+"Delay background polling processes by this many seconds to reduce system "
+"load. If 0, use delivery interval."
msgstr ""
-#: ../../Zotlabs/Module/Like.php:117
-msgid "This action is restricted to members."
+#: ../../Zotlabs/Module/Admin/Site.php:524
+msgid "Path to ImageMagick convert program"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:118
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid ""
-"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
-"href=\"register\">register as a new $Projectname member</a> to continue."
+"If set, use this program to generate photo thumbnails for huge images ( > "
+"4000 pixels in either dimension), otherwise memory exhaustion may occur. "
+"Example: /usr/bin/convert"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:171 ../../Zotlabs/Module/Like.php:197
-#: ../../Zotlabs/Module/Like.php:230
-msgid "Invalid request."
+#: ../../Zotlabs/Module/Admin/Site.php:525
+msgid "Maximum Load Average"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:212
-msgid "thing"
+#: ../../Zotlabs/Module/Admin/Site.php:525
+msgid ""
+"Maximum system load before delivery and poll processes are deferred - "
+"default 50."
msgstr ""
-#: ../../Zotlabs/Module/Like.php:253
-msgid "Channel unavailable."
+#: ../../Zotlabs/Module/Admin/Site.php:526
+msgid "Expiration period in days for imported (grid/network) content"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:289
-msgid "Previous action reversed."
+#: ../../Zotlabs/Module/Admin/Site.php:526
+msgid "0 for no expiration of imported content"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:453
-msgid "profile"
+#: ../../Zotlabs/Module/Admin/Site.php:527
+msgid ""
+"Do not expire any posts which have comments less than this many days ago"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:487
-#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2248
-#, php-format
-msgid "%1$s is attending %2$s's %3$s"
+#: ../../Zotlabs/Module/Admin/Site.php:528
+msgid ""
+"Public servers: Optional landing (marketing) webpage for new registrants"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:489
-#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2250
+#: ../../Zotlabs/Module/Admin/Site.php:528
#, php-format
-msgid "%1$s is not attending %2$s's %3$s"
+msgid "Create this page first. Default is %s/register"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:491
-#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2252
-#, php-format
-msgid "%1$s may attend %2$s's %3$s"
+#: ../../Zotlabs/Module/Admin/Site.php:529
+msgid "Page to display after creating a new channel"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:615
-msgid "Action completed."
+#: ../../Zotlabs/Module/Admin/Site.php:529
+msgid "Default: profiles"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:616
-msgid "Thank you."
+#: ../../Zotlabs/Module/Admin/Site.php:530
+msgid "Optional: site location"
msgstr ""
-#: ../../Zotlabs/Module/Follow.php:75
-msgid "Connection added."
+#: ../../Zotlabs/Module/Admin/Site.php:530
+msgid "Region or country"
msgstr ""
-#: ../../Zotlabs/Module/Chatsvc.php:131
-msgid "Away"
+#: ../../Zotlabs/Module/Admin/Site.php:615
+#: ../../Zotlabs/Module/Admin/Site.php:616
+msgid "Invalid 24h time value (hhmm/hmm)"
msgstr ""
-#: ../../Zotlabs/Module/Chatsvc.php:136
-msgid "Online"
+#: ../../Zotlabs/Module/Admin/Security.php:97
+msgid ""
+"By default, unfiltered HTML is allowed in embedded media. This is inherently "
+"insecure."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:98
-msgid "Blocked accounts"
+#: ../../Zotlabs/Module/Admin/Security.php:100
+msgid ""
+"The recommended setting is to only allow unfiltered HTML from the following "
+"sites:"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:99
-msgid "Expired accounts"
+#: ../../Zotlabs/Module/Admin/Security.php:101
+msgid ""
+"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
+"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:100
-msgid "Expiring accounts"
+#: ../../Zotlabs/Module/Admin/Security.php:102
+msgid ""
+"All other embedded content will be filtered, <strong>unless</strong> "
+"embedded content from that site is explicitly blocked."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:124
-msgid "Message queues"
+#: ../../Zotlabs/Module/Admin/Security.php:109
+msgid "Block public"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:138
-msgid "Your software should be updated"
+#: ../../Zotlabs/Module/Admin/Security.php:109
+msgid ""
+"Check to block public access to all otherwise public personal pages on this "
+"site unless you are currently authenticated."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:143
-msgid "Summary"
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid "Provide a cloud root directory"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:146
-msgid "Registered accounts"
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid ""
+"The cloud root directory lists all channel names which provide public files"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:147
-msgid "Pending registrations"
+#: ../../Zotlabs/Module/Admin/Security.php:111
+msgid "Show total disk space available to cloud uploads"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:148
-msgid "Registered channels"
+#: ../../Zotlabs/Module/Admin/Security.php:112
+msgid "Set \"Transport Security\" HTTP header"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:150
-msgid "Version"
+#: ../../Zotlabs/Module/Admin/Security.php:113
+msgid "Set \"Content Security Policy\" HTTP header"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:151
-msgid "Repository version (master)"
+#: ../../Zotlabs/Module/Admin/Security.php:114
+msgid "Allowed email domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:152
-msgid "Repository version (dev)"
+#: ../../Zotlabs/Module/Admin/Security.php:114
+msgid ""
+"Comma separated list of domains which are allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains"
msgstr ""
-#: ../../Zotlabs/Module/Authorize.php:17
-msgid "Unknown App"
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid "Not allowed email domains"
msgstr ""
-#: ../../Zotlabs/Module/Authorize.php:29
-msgid "Authorize"
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid ""
+"Comma separated list of domains which are not allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains, unless allowed domains have been defined."
msgstr ""
-#: ../../Zotlabs/Module/Authorize.php:30
-#, php-format
-msgid "Do you authorize the app %s to access your channel data?"
+#: ../../Zotlabs/Module/Admin/Security.php:116
+msgid "Allow communications only from these sites"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:22
-msgid "This page is available only to site members"
+#: ../../Zotlabs/Module/Admin/Security.php:116
+msgid ""
+"One site per line. Leave empty to allow communication from anywhere by "
+"default"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:28
-#: ../../Zotlabs/Widget/Channel_activities.php:29
-msgid "Welcome"
+#: ../../Zotlabs/Module/Admin/Security.php:117
+msgid "Block communications from these sites"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:30
-msgid "What would you like to do?"
+#: ../../Zotlabs/Module/Admin/Security.php:118
+msgid "Allow communications only from these channels"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:32
+#: ../../Zotlabs/Module/Admin/Security.php:118
msgid ""
-"Please bookmark this page if you would like to return to it in the future"
+"One channel (hash) per line. Leave empty to allow from any channel by default"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:36
-msgid "Upload a profile photo"
+#: ../../Zotlabs/Module/Admin/Security.php:119
+msgid "Block communications from these channels"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:37
-msgid "Upload a cover photo"
+#: ../../Zotlabs/Module/Admin/Security.php:120
+msgid "Only allow embeds from secure (SSL) websites and links."
msgstr ""
-#: ../../Zotlabs/Module/Go.php:38
-msgid "Edit your default profile"
+#: ../../Zotlabs/Module/Admin/Security.php:121
+msgid "Allow unfiltered embedded HTML content only from these domains"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:39 ../../Zotlabs/Widget/Newmember.php:48
-msgid "View friend suggestions"
+#: ../../Zotlabs/Module/Admin/Security.php:121
+msgid "One site per line. By default embedded content is filtered."
msgstr ""
-#: ../../Zotlabs/Module/Go.php:40
-msgid "View the channel directory"
+#: ../../Zotlabs/Module/Admin/Security.php:122
+msgid "Block embedded HTML from these domains"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:41
-msgid "View/edit your channel settings"
+#: ../../Zotlabs/Module/Admin/Security.php:123
+msgid "Allow SVG thumbnails in file browser"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:42
-msgid "View the site or project documentation"
+#: ../../Zotlabs/Module/Admin/Security.php:123
+msgid "WARNING: SVG images may contain malicious code."
msgstr ""
-#: ../../Zotlabs/Module/Go.php:43
-msgid "Visit your channel homepage"
+#: ../../Zotlabs/Module/Admin/Security.php:124
+msgid "Allow embedded (inline) PDF files"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:44
-msgid ""
-"View your connections and/or add somebody whose address you already know"
+#: ../../Zotlabs/Module/Admin/Security.php:126
+msgid "Additional trusted directory server URLs"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:45
+#: ../../Zotlabs/Module/Admin/Security.php:126
msgid ""
-"View your personal stream (this may be empty until you add some connections)"
+"Accept directory flags (spam, nsfw) from those servers. One per line like "
+"https://example.tld"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:53
-msgid "View the public stream. Warning: this content is not moderated"
+#: ../../Zotlabs/Module/Manage.php:130 ../../Zotlabs/Module/New_channel.php:148
+#, php-format
+msgid "You have created %1$.0f of %2$.0f allowed channels."
msgstr ""
#: ../../Zotlabs/Module/Manage.php:137
@@ -11834,3396 +11825,3229 @@ msgstr ""
msgid "Delegated Channel"
msgstr ""
-#: ../../Zotlabs/Module/Search.php:251
-#, php-format
-msgid "Items tagged with: %s"
-msgstr ""
-
-#: ../../Zotlabs/Module/Search.php:253
-#, php-format
-msgid "Search results for: %s"
-msgstr ""
-
-#: ../../Zotlabs/Module/Changeaddr.php:35
-msgid ""
-"Channel name changes are not allowed within 48 hours of changing the account "
-"password."
+#: ../../Zotlabs/Module/Email_resend.php:12
+#: ../../Zotlabs/Module/Email_validation.php:25
+msgid "Token verification failed."
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:77
-msgid "Change channel nickname/address"
+#: ../../Zotlabs/Module/Email_resend.php:30
+msgid "Email verification resent"
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:78
-msgid "Any/all connections on other networks will be lost!"
+#: ../../Zotlabs/Module/Email_resend.php:33
+msgid "Unable to resend email verification message."
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:80
-msgid "New channel address"
+#: ../../Zotlabs/Module/Dreport.php:43
+msgid "Invalid message"
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:81
-msgid "Rename Channel"
+#: ../../Zotlabs/Module/Dreport.php:73
+msgid "no results"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:819
-msgid "Calendar entries imported."
+#: ../../Zotlabs/Module/Dreport.php:87
+msgid "channel sync processed"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:821
-msgid "No calendar entries found."
+#: ../../Zotlabs/Module/Dreport.php:91
+msgid "queued"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1000
-msgid "Event title"
+#: ../../Zotlabs/Module/Dreport.php:95
+msgid "posted"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1001
-msgid "Start date and time"
+#: ../../Zotlabs/Module/Dreport.php:99
+msgid "accepted for delivery"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1002
-msgid "End date and time"
+#: ../../Zotlabs/Module/Dreport.php:103
+msgid "updated"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1003
-msgid "Timezone:"
+#: ../../Zotlabs/Module/Dreport.php:107
+msgid "update ignored"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1029
-msgid "Month"
+#: ../../Zotlabs/Module/Dreport.php:110
+msgid "permission denied"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1030
-msgid "Week"
+#: ../../Zotlabs/Module/Dreport.php:114
+msgid "recipient not found"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1031
-msgid "Day"
+#: ../../Zotlabs/Module/Dreport.php:134
+#, php-format
+msgid "Delivery report for %1$s"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1032
-msgid "List month"
+#: ../../Zotlabs/Module/Dreport.php:139
+msgid "Redeliver"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1033
-msgid "List week"
+#: ../../Zotlabs/Module/Chatsvc.php:131
+msgid "Away"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1034
-msgid "List day"
+#: ../../Zotlabs/Module/Chatsvc.php:136
+msgid "Online"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1042
-msgid "More"
+#: ../../Zotlabs/Module/Subthread.php:125
+#, php-format
+msgid "%1$s is following %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1043
-msgid "Less"
+#: ../../Zotlabs/Module/Subthread.php:127
+#, php-format
+msgid "%1$s stopped following %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1045
-msgid "Select calendar"
+#: ../../Zotlabs/Module/Cal.php:62
+msgid "Permissions denied."
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1046 ../../Zotlabs/Widget/Cdav.php:149
-msgid "Channel Calendars"
+#: ../../Zotlabs/Module/Cal.php:161
+#: ../../Zotlabs/Module/Channel_calendar.php:380
+#: ../../Zotlabs/Module/Cdav.php:935
+msgid "Link to source"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1046 ../../Zotlabs/Widget/Cdav.php:135
-#: ../../Zotlabs/Widget/Cdav.php:149
-msgid "CalDAV Calendars"
+#: ../../Zotlabs/Module/Cal.php:199 ../../Zotlabs/Module/Photos.php:946
+#: ../../Zotlabs/Module/Cdav.php:1026
+msgid "Previous"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1048
-msgid "Delete all"
+#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Photos.php:955
+#: ../../Zotlabs/Module/Setup.php:278 ../../Zotlabs/Module/Cdav.php:1027
+msgid "Next"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1051
-msgid "Sorry! Editing of recurrent events is not yet implemented."
+#: ../../Zotlabs/Module/Cal.php:201 ../../Zotlabs/Module/Cdav.php:1028
+msgid "Today"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1052
-msgid ""
-"Could not fetch calendar resource. The selected calendar might be disabled."
+#: ../../Zotlabs/Module/Bookmarks.php:62
+msgid "Bookmark added"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1452
-msgid "Default Calendar"
+#: ../../Zotlabs/Module/Bookmarks.php:101
+msgid "My Connections Bookmarks"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1463
-msgid "Default Addressbook"
+#: ../../Zotlabs/Module/Affinity.php:35
+msgid "Affinity Tool settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:50
-msgid "Invalid abook_id"
+#: ../../Zotlabs/Module/Affinity.php:54
+msgid ""
+"The numbers below represent the minimum and maximum slider default positions "
+"for your network/stream page as a percentage."
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:381
-msgid "View profile"
+#: ../../Zotlabs/Module/Affinity.php:61
+msgid "Default maximum affinity level"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:394
-msgid "Select a role for this contact"
+#: ../../Zotlabs/Module/Affinity.php:61
+msgid "0-99 default 99"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:395
-#: ../../Zotlabs/Widget/Permcats.php:92
-msgid "Contact roles"
+#: ../../Zotlabs/Module/Affinity.php:67
+msgid "Default minimum affinity level"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:426
-msgid "Roles"
+#: ../../Zotlabs/Module/Affinity.php:67
+msgid "0-99 - default 0"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:427
-msgid "Compare permissions"
+#: ../../Zotlabs/Module/Affinity.php:73
+msgid "Persistent affinity levels"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:428
-msgid "Permission"
+#: ../../Zotlabs/Module/Affinity.php:73
+msgid ""
+"If disabled the max and min levels will be reset to default after page reload"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:429
-#: ../../Zotlabs/Widget/Privacygroups.php:54
-msgid "Privacy groups"
+#: ../../Zotlabs/Module/Affinity.php:81
+msgid "Affinity Tool Settings"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:432
-msgid "Content filter"
+#: ../../Zotlabs/Module/Admin.php:98
+msgid "Blocked accounts"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:442
-msgid "Contact updated"
+#: ../../Zotlabs/Module/Admin.php:99
+msgid "Expired accounts"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:442
-msgid "Contact update failed"
+#: ../../Zotlabs/Module/Admin.php:100
+msgid "Expiring accounts"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:491
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:417
-#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1085
-msgid "Refresh succeeded"
+#: ../../Zotlabs/Module/Admin.php:124
+msgid "Message queues"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:494
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:412
-#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1078
-msgid "Refresh failed"
+#: ../../Zotlabs/Module/Admin.php:138
+msgid "Your software should be updated"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:520
-msgid "Block status updated"
+#: ../../Zotlabs/Module/Admin.php:143
+msgid "Summary"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:524
-msgid "Block failed"
+#: ../../Zotlabs/Module/Admin.php:146
+msgid "Registered accounts"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:535
-msgid "Ignore status updated"
+#: ../../Zotlabs/Module/Admin.php:147
+msgid "Pending registrations"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:539
-msgid "Ignore failed"
+#: ../../Zotlabs/Module/Admin.php:148
+msgid "Registered channels"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:550
-msgid "Archive status updated"
+#: ../../Zotlabs/Module/Admin.php:149 ../../Zotlabs/Module/Siteinfo.php:42
+msgid "Active addons"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:554
-msgid "Archive failed"
+#: ../../Zotlabs/Module/Admin.php:150
+msgid "Version"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:565
-msgid "Hide status updated"
+#: ../../Zotlabs/Module/Admin.php:151
+msgid "Repository version (master)"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:569
-msgid "Hide failed"
+#: ../../Zotlabs/Module/Admin.php:152
+msgid "Repository version (dev)"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:604
-msgid "Contact removed"
+#: ../../Zotlabs/Module/Permcats.php:59
+msgid "Contact role deleted."
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:608
-msgid "Delete failed"
+#: ../../Zotlabs/Module/Permcats.php:86
+msgid "Permission category name is required."
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:618
-#: ../../Zotlabs/Widget/Affinity.php:60
-msgid "Refresh"
+#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154
+msgid "Contact role saved."
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:619
-msgid "Refetch contact info"
+#: ../../Zotlabs/Module/Permcats.php:204
+msgid "Role to assign affected contacts and default role to"
msgstr ""
-#: ../../Zotlabs/Module/Profile.php:106
-msgid "vcard"
+#: ../../Zotlabs/Module/Permcats.php:204
+msgid "Role to assign affected contacts to"
msgstr ""
-#: ../../Zotlabs/Widget/Suggestions.php:58
-msgid "Suggestions"
+#: ../../Zotlabs/Module/Permcats.php:234
+msgid "Assign this role to"
msgstr ""
-#: ../../Zotlabs/Widget/Suggestions.php:59
-msgid "See more..."
+#: ../../Zotlabs/Module/Permcats.php:236
+msgid "All my contacts"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:95
-msgid "Share This"
+#: ../../Zotlabs/Module/Permcats.php:247
+msgid "Automatically assign this role to new contacts"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:118 ../../Zotlabs/Widget/Pinned.php:119
-#, php-format
-msgid "View %s's profile - %s"
+#: ../../Zotlabs/Module/Permcats.php:249
+msgid "Role name"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:152
-msgid "Don't show"
+#: ../../Zotlabs/Module/Permcats.php:249
+msgid "System role - not editable"
msgstr ""
-#: ../../Zotlabs/Widget/Privacygroups.php:45
-msgid "Add new group"
+#: ../../Zotlabs/Module/Permcats.php:250
+msgid "Deleting"
msgstr ""
-#: ../../Zotlabs/Widget/Savedsearch.php:81
-msgid "Remove term"
+#: ../../Zotlabs/Module/Permcats.php:255
+msgid "Role Permissions"
msgstr ""
-#: ../../Zotlabs/Widget/Photo_rand.php:63 ../../Zotlabs/Widget/Photo.php:54
-msgid "photo/image"
+#: ../../Zotlabs/Module/Permcats.php:256
+msgid ""
+"Some permissions may be inherited from your <a href=\"settings\">channel "
+"role</a>, which have higher priority than contact role settings."
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:39
-msgid "Read mode"
+#: ../../Zotlabs/Module/Attach_edit.php:118
+msgid "Can not copy folder into itself."
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:40
-msgid "Edit mode"
+#: ../../Zotlabs/Module/Attach_edit.php:131
+#, php-format
+msgid "Can not move folder \"%s\" into itself."
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:41
-msgid "Editing"
+#: ../../Zotlabs/Module/Xchan.php:10
+msgid "Xchan Lookup"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:42
-msgid "Saving"
+#: ../../Zotlabs/Module/Xchan.php:13
+msgid "Lookup xchan beginning with (or webbie): "
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:43
-msgid "Saved"
+#: ../../Zotlabs/Module/Group.php:48
+msgid "Privacy group created."
msgstr ""
-#: ../../Zotlabs/Widget/Suggestedchats.php:36
-msgid "Suggested Chatrooms"
+#: ../../Zotlabs/Module/Group.php:51
+msgid "Could not create privacy group."
msgstr ""
-#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
-msgid "Bookmarked Chatrooms"
+#: ../../Zotlabs/Module/Group.php:83
+msgid "Privacy group updated."
msgstr ""
-#: ../../Zotlabs/Widget/Tasklist.php:31
-msgid "Tasks"
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
+msgid "Post to this group by default"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:32
-msgid "Public and restricted messages"
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:303
+msgid "Add new contacts to this group by default"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:33
-msgid "Direct messages"
+#: ../../Zotlabs/Module/Group.php:147
+msgid "Privacy group name"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:34
-msgid "Starred messages"
+#: ../../Zotlabs/Module/Group.php:148 ../../Zotlabs/Module/Group.php:250
+msgid "Members are visible to other channels"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:35
-#: ../../Zotlabs/Widget/Notifications.php:116
-#: ../../Zotlabs/Widget/Notifications.php:117
-msgid "Notices"
+#: ../../Zotlabs/Module/Group.php:176
+msgid "Privacy group removed."
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:37
-msgid "No messages"
+#: ../../Zotlabs/Module/Group.php:179
+msgid "Unable to remove privacy group."
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:38
-msgid "Unseen"
+#: ../../Zotlabs/Module/Group.php:245
+#, php-format
+msgid "Privacy Group: %s"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:39
-#: ../../Zotlabs/Widget/Notifications.php:34
-#: ../../Zotlabs/Widget/Notifications.php:54
-#: ../../Zotlabs/Widget/Notifications.php:73
-#: ../../Zotlabs/Widget/Notifications.php:134
-#: ../../Zotlabs/Widget/Notifications.php:167
-msgid "Filter by name or address"
+#: ../../Zotlabs/Module/Group.php:247
+msgid "Privacy group name: "
msgstr ""
-#: ../../Zotlabs/Widget/Cover_photo.php:74
-msgid "Click to show more"
+#: ../../Zotlabs/Module/Group.php:263
+msgid "Group members"
msgstr ""
-#: ../../Zotlabs/Widget/Activity.php:55
-msgctxt "widget"
-msgid "Activity"
+#: ../../Zotlabs/Module/Group.php:265
+msgid "Not in this group"
msgstr ""
-#: ../../Zotlabs/Widget/Appstore.php:16
-msgid "App Collections"
+#: ../../Zotlabs/Module/Group.php:297
+msgid "Click a channel to toggle membership"
msgstr ""
-#: ../../Zotlabs/Widget/Appstore.php:18
-msgid "Installed apps"
+#: ../../Zotlabs/Module/Help.php:61
+msgid "Documentation Search"
msgstr ""
-#: ../../Zotlabs/Widget/Hq_controls.php:23
-msgid "Toggle post editor"
+#: ../../Zotlabs/Module/Help.php:170
+msgid "Not Found"
msgstr ""
-#: ../../Zotlabs/Widget/Hq_controls.php:33
-msgid "Toggle personal notes"
+#: ../../Zotlabs/Module/Help.php:223
+msgid "$Projectname Documentation"
msgstr ""
-#: ../../Zotlabs/Widget/Hq_controls.php:43
-msgid "Channel activities"
+#: ../../Zotlabs/Module/Help.php:234
+msgid "Contents"
msgstr ""
-#: ../../Zotlabs/Widget/Archive.php:49
-msgid "Archives"
+#: ../../Zotlabs/Module/Help.php:241
+msgid "Members"
msgstr ""
-#: ../../Zotlabs/Widget/Channel_activities.php:46
-msgid "No recent activities"
+#: ../../Zotlabs/Module/Help.php:242
+msgid "Administrators"
msgstr ""
-#: ../../Zotlabs/Widget/Channel_activities.php:214
-msgctxt "noun"
-msgid "new connection"
-msgid_plural "new connections"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Widget/Channel_activities.php:220
-msgctxt "noun"
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Widget/Settings_menu.php:37
-msgid "Account settings"
+#: ../../Zotlabs/Module/Help.php:243
+msgid "Developers"
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:43
-msgid "Channel settings"
+#: ../../Zotlabs/Module/Help.php:244
+msgid "Tutorials"
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:49
-msgid "Privacy settings"
+#: ../../Zotlabs/Module/Help.php:262
+msgid "Help:"
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:56
-msgid "Display settings"
+#: ../../Zotlabs/Module/Tagger.php:52
+msgid "Post not found."
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:63
-msgid "Manage locations"
+#: ../../Zotlabs/Module/Tagger.php:123
+#, php-format
+msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:59
-msgid "Rating Tools"
+#: ../../Zotlabs/Module/Invite.php:70
+msgid "Invite App"
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:63 ../../Zotlabs/Widget/Rating.php:65
-msgid "Rate Me"
+#: ../../Zotlabs/Module/Invite.php:82
+msgid "Register is closed"
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:68
-msgid "View Ratings"
+#: ../../Zotlabs/Module/Invite.php:116 ../../Zotlabs/Module/Invite.php:563
+msgid "Note, the invitation code is valid up to"
msgstr ""
-#: ../../Zotlabs/Widget/Appcategories.php:49
-msgid "App Categories"
+#: ../../Zotlabs/Module/Invite.php:129
+#, php-format
+msgid "Too many recipients for one invitation (max %d)"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:44
-#: ../../Zotlabs/Widget/Notifications.php:62
-msgid "Direct Messages"
+#: ../../Zotlabs/Module/Invite.php:133
+msgid "No recipients for this invitation"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:48
-msgid "Show direct (private) messages"
+#: ../../Zotlabs/Module/Invite.php:152
+#, php-format
+msgid "(%s) : Not a real email address"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:53
-#: ../../Zotlabs/Widget/Notifications.php:81
-msgid "Events"
+#: ../../Zotlabs/Module/Invite.php:159
+#, php-format
+msgid "(%s) : Not allowed email address"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:57
-msgid "Show posts that include events"
+#: ../../Zotlabs/Module/Invite.php:172
+#, php-format
+msgid "(%s) : email address already in use"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:63
-msgid "Polls"
+#: ../../Zotlabs/Module/Invite.php:179
+#, php-format
+msgid "(%s) : Accepted email address"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:67
-msgid "Show posts that include polls"
+#: ../../Zotlabs/Module/Invite.php:271
+#, php-format
+msgid "To %s : Message delivery success."
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:90
+#: ../../Zotlabs/Module/Invite.php:303
#, php-format
-msgid "Show posts related to the %s privacy group"
+msgid "%1$d mail(s) sent, %2$d mail error(s)"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:99
-msgid "Show my privacy groups"
+#: ../../Zotlabs/Module/Invite.php:328
+msgid "Invites not proposed by configuration"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:123
-msgid "Show posts to this forum"
+#: ../../Zotlabs/Module/Invite.php:329
+msgid "Contact the site admin"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:134
-msgid "Show forums"
+#: ../../Zotlabs/Module/Invite.php:345
+msgid "Invites by users not enabled"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:148
-msgid "Starred Posts"
+#: ../../Zotlabs/Module/Invite.php:350
+msgid "You have no more invitations available"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:152
-msgid "Show posts that I have starred"
+#: ../../Zotlabs/Module/Invite.php:366
+msgid "Not on xchan"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:163
-msgid "Personal Posts"
+#: ../../Zotlabs/Module/Invite.php:399
+msgid "All users invitation limit exceeded."
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:167
-msgid "Show posts that mention or involve me"
+#: ../../Zotlabs/Module/Invite.php:417
+msgid "Invitation expires after"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:190
-#, php-format
-msgid "Show posts that I have filed to %s"
+#: ../../Zotlabs/Module/Invite.php:518 ../../Zotlabs/Module/Invite.php:557
+msgid "Invitation"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:200
-msgid "Show filed post categories"
+#: ../../Zotlabs/Module/Invite.php:548
+msgid "Send invitations"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:214
-msgid "Panel search"
+#: ../../Zotlabs/Module/Invite.php:549
+msgid "Invitations I am using"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:224
-msgid "Filter by name"
+#: ../../Zotlabs/Module/Invite.php:550
+msgid "Invitations we are using"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:239
-msgid "Remove active filter"
+#: ../../Zotlabs/Module/Invite.php:551
+msgid "§ Note, the email(s) sent will be recorded in the system logs"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:255
-msgid "Stream Filters"
+#: ../../Zotlabs/Module/Invite.php:552
+msgid "Enter email addresses, one per line:"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:24
-msgid "New network activity notifications"
+#: ../../Zotlabs/Module/Invite.php:553
+msgid "Your message:"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:27
-msgid "Network stream"
+#: ../../Zotlabs/Module/Invite.php:554
+msgid "Invite template"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:30
-#: ../../Zotlabs/Widget/Notifications.php:69
-msgid "Mark all notifications read"
+#: ../../Zotlabs/Module/Invite.php:556
+msgid "Subject:"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:33
-#: ../../Zotlabs/Widget/Notifications.php:53
-#: ../../Zotlabs/Widget/Notifications.php:72
-#: ../../Zotlabs/Widget/Notifications.php:166
-msgid "Show new posts only"
+#: ../../Zotlabs/Module/Invite.php:562
+msgid "Here you may enter personal notes to the recipient(s)"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:44
-msgid "New home activity notifications"
+#: ../../Zotlabs/Module/Siteinfo.php:22
+msgid "About this site"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:47
-msgid "Home stream"
+#: ../../Zotlabs/Module/Siteinfo.php:23
+msgid "Site Name"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:50
-msgid "Mark all notifications seen"
+#: ../../Zotlabs/Module/Siteinfo.php:27
+msgid "Administrator"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:63
-msgid "New direct messages notifications"
+#: ../../Zotlabs/Module/Siteinfo.php:30
+msgid "Software and Project information"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:66
-msgid "Direct messages stream"
+#: ../../Zotlabs/Module/Siteinfo.php:31
+msgid "This site is powered by $Projectname"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:82
-msgid "New events notifications"
+#: ../../Zotlabs/Module/Siteinfo.php:32
+msgid ""
+"Federated and decentralised networking and identity services provided by"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:85
-msgid "View events"
+#: ../../Zotlabs/Module/Siteinfo.php:35
+msgid "Additional federated transport protocols:"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:88
-msgid "Mark all events seen"
+#: ../../Zotlabs/Module/Siteinfo.php:37
+#, php-format
+msgid "Version %s"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:97
-msgid "New connections notifications"
+#: ../../Zotlabs/Module/Siteinfo.php:38
+msgid "Project homepage"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:100
-msgid "View all connections"
+#: ../../Zotlabs/Module/Siteinfo.php:39
+msgid "Developer homepage"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:109
-msgid "New files notifications"
+#: ../../Zotlabs/Module/Siteinfo.php:43
+msgid "Blocked sites"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:120
-msgid "View all notices"
+#: ../../Zotlabs/Module/Attach.php:68
+msgid "Item not available."
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:123
-msgid "Mark all notices seen"
+#: ../../Zotlabs/Module/Uexport.php:108
+msgid "No content available for year"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:144
-msgid "Registrations"
+#: ../../Zotlabs/Module/Uexport.php:171
+msgid "Export Channel"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:145
-msgid "New registrations notifications"
+#: ../../Zotlabs/Module/Uexport.php:173
+msgid "Export channel"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:155
-msgid "New public stream notifications"
+#: ../../Zotlabs/Module/Uexport.php:174
+msgid ""
+"This will export your identity and social graph into a file which can be "
+"used to import your channel to a new hub."
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:158
-msgid "Public stream"
+#: ../../Zotlabs/Module/Uexport.php:177
+msgid "Export content"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:174
-msgid "Sorry, you have got no notifications at the moment"
+#: ../../Zotlabs/Module/Uexport.php:178
+msgid ""
+"This will export your posts, direct messages, articles and cards per month "
+"stored into a zip file per year. Months with no posts will be dismissed."
msgstr ""
-#: ../../Zotlabs/Widget/Tokens.php:41
-msgid "Add new guest"
+#: ../../Zotlabs/Module/Uexport.php:180
+msgid "Export wikis"
msgstr ""
-#: ../../Zotlabs/Widget/Permcats.php:43
-msgid "Add new role"
+#: ../../Zotlabs/Module/Uexport.php:181
+msgid "This will export your wikis and wiki pages."
msgstr ""
-#: ../../Zotlabs/Widget/Permcats.php:93
-msgid "Role members"
+#: ../../Zotlabs/Module/Uexport.php:183
+msgid "Export webpages"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:38
-msgid "Profile Creation"
+#: ../../Zotlabs/Module/Uexport.php:184
+msgid "This will export your webpages and menus."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:40
-msgid "Upload profile photo"
+#: ../../Zotlabs/Module/Uexport.php:186
+msgid "Export channel calendar"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:41
-msgid "Upload cover photo"
+#: ../../Zotlabs/Module/Uexport.php:187
+msgid ""
+"This will export your channel calendar events and associated items. CalDAV "
+"calendars are not included."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:45
-msgid "Find and Connect with others"
+#: ../../Zotlabs/Module/Uexport.php:189
+msgid "Export chatrooms"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:47
-msgid "View the directory"
+#: ../../Zotlabs/Module/Uexport.php:190
+msgid "This will export your chatrooms. Chat history is dismissed."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:49
-msgid "Manage your connections"
+#: ../../Zotlabs/Module/Uexport.php:192
+#, php-format
+msgid ""
+"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</"
+"a> on any site containing your channel."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:52
-msgid "Communicate"
+#: ../../Zotlabs/Module/Like.php:111
+msgid "Like/Dislike"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:54
-msgid "View your channel homepage"
+#: ../../Zotlabs/Module/Like.php:117
+msgid "This action is restricted to members."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:55
-msgid "View your network stream"
+#: ../../Zotlabs/Module/Like.php:118
+msgid ""
+"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
+"href=\"register\">register as a new $Projectname member</a> to continue."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:61
-msgid "Documentation"
+#: ../../Zotlabs/Module/Like.php:171 ../../Zotlabs/Module/Like.php:197
+#: ../../Zotlabs/Module/Like.php:230
+msgid "Invalid request."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:64
-msgid "Missing Features?"
+#: ../../Zotlabs/Module/Like.php:212
+msgid "thing"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:66
-msgid "Pin apps to navigation bar"
+#: ../../Zotlabs/Module/Like.php:253
+msgid "Channel unavailable."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:67
-msgid "Install more apps"
+#: ../../Zotlabs/Module/Like.php:289
+msgid "Previous action reversed."
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:78
-msgid "View public stream"
+#: ../../Zotlabs/Module/Like.php:456
+msgid "profile"
msgstr ""
-#: ../../Zotlabs/Widget/Follow.php:34
-msgid "Add New Connection"
+#: ../../Zotlabs/Module/Like.php:623
+msgid "Action completed."
msgstr ""
-#: ../../Zotlabs/Widget/Follow.php:35
-msgid "Enter channel address"
+#: ../../Zotlabs/Module/Like.php:624
+msgid "Thank you."
msgstr ""
-#: ../../Zotlabs/Widget/Follow.php:36
-msgid "Examples: bob@example.com, https://example.com/barbara"
+#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:153
+#: ../../Zotlabs/Module/Editblock.php:113
+msgid "Block Name"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66
-msgid "Member registrations waiting for confirmation"
+#: ../../Zotlabs/Module/Blocks.php:154
+msgid "Block Title"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:34
-msgid "Inspect queue"
+#: ../../Zotlabs/Module/Mitem.php:63
+msgid "Unable to create element."
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:35
-msgid "Queueworker"
+#: ../../Zotlabs/Module/Mitem.php:87
+msgid "Unable to update menu element."
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:37
-msgid "DB updates"
+#: ../../Zotlabs/Module/Mitem.php:103
+msgid "Unable to add menu element."
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:62
-msgid "Addon Features"
+#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:244
+msgid "Menu Item Permissions"
msgstr ""
-#: ../../Zotlabs/Widget/Chatroom_list.php:26
-msgid "Overview"
+#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:245
+msgid "(click to open/close)"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:41
-msgid "Select Channel"
+#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
+msgid "Link Name"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:46
-msgid "Read-write"
+#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:253
+msgid "Link or Submenu Target"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:47
-msgid "Read-only"
+#: ../../Zotlabs/Module/Mitem.php:175
+msgid "Enter URL of the link or select a menu name to create a submenu"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:133
-msgid "Channel Calendar"
+#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:254
+msgid "Use magic-auth if available"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:137
-msgid "Shared CalDAV Calendars"
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:255
+msgid "Open link in new window"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:141
-msgid "Share this calendar"
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:256
+msgid "Order in list"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:143
-msgid "Calendar name and color"
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:256
+msgid "Higher numbers will sink to bottom of listing"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:145
-msgid "Create new CalDAV calendar"
+#: ../../Zotlabs/Module/Mitem.php:179
+msgid "Submit and finish"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:147
-msgid "Calendar Name"
+#: ../../Zotlabs/Module/Mitem.php:180
+msgid "Submit and continue"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:148
-msgid "Calendar Tools"
+#: ../../Zotlabs/Module/Mitem.php:189
+msgid "Menu:"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:150
-msgid "Import calendar"
+#: ../../Zotlabs/Module/Mitem.php:192
+msgid "Link Target"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:151
-msgid "Select a calendar to import to"
+#: ../../Zotlabs/Module/Mitem.php:195
+msgid "Edit menu"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:178
-msgid "Addressbooks"
+#: ../../Zotlabs/Module/Mitem.php:198
+msgid "Edit element"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:180
-msgid "Addressbook name"
+#: ../../Zotlabs/Module/Mitem.php:199
+msgid "Drop element"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:182
-msgid "Create new addressbook"
+#: ../../Zotlabs/Module/Mitem.php:200
+msgid "New element"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:183
-msgid "Addressbook Name"
+#: ../../Zotlabs/Module/Mitem.php:201
+msgid "Edit this menu container"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:185
-msgid "Addressbook Tools"
+#: ../../Zotlabs/Module/Mitem.php:202
+msgid "Add menu element"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:186
-msgid "Import addressbook"
+#: ../../Zotlabs/Module/Mitem.php:203
+msgid "Delete this menu item"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:187
-msgid "Select an addressbook to import to"
+#: ../../Zotlabs/Module/Mitem.php:204
+msgid "Edit this menu item"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:96
-msgid "Commented Date"
+#: ../../Zotlabs/Module/Mitem.php:220
+msgid "Menu item not found."
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:100
-msgid "Order by last commented date"
+#: ../../Zotlabs/Module/Mitem.php:233
+msgid "Menu item deleted."
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:103
-msgid "Posted Date"
+#: ../../Zotlabs/Module/Mitem.php:235
+msgid "Menu item could not be deleted."
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:107
-msgid "Order by last posted date"
+#: ../../Zotlabs/Module/Mitem.php:242
+msgid "Edit Menu Element"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:110
-msgid "Date Unthreaded"
+#: ../../Zotlabs/Module/Mitem.php:252
+msgid "Link text"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:114
-msgid "Order unthreaded by date"
+#: ../../Zotlabs/Module/Dircensor.php:61
+msgid "Entry censored"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:129
-msgid "Stream Order"
+#: ../../Zotlabs/Module/Dircensor.php:64
+msgid "Entry OK"
msgstr ""
-#: ../../Zotlabs/Widget/Chatroom_members.php:17
-msgid "Chat Members"
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of Pinned Navbar Apps"
msgstr ""
-#: ../../util/nconfig.php:34
-msgid "Source channel not found."
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of App Tray Apps"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:123
-msgid "generic profile image"
+#: ../../Zotlabs/Module/Apporder.php:48
+msgid ""
+"Use arrows to move the corresponding app left (top) or right (bottom) in the "
+"navbar"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:124
-msgid "random geometric pattern"
+#: ../../Zotlabs/Module/Apporder.php:48
+msgid "Use arrows to move the corresponding app up or down in the app tray"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:125
-msgid "monster face"
+#: ../../Zotlabs/Module/New_channel.php:160
+msgid "Your real name is recommended."
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:126
-msgid "computer generated face"
+#: ../../Zotlabs/Module/New_channel.php:161
+msgid ""
+"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation "
+"Group\""
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:127
-msgid "retro arcade style face"
+#: ../../Zotlabs/Module/New_channel.php:166
+msgid ""
+"This will be used to create a unique network address (like an email address)."
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:128
-msgid "Hub default profile photo"
+#: ../../Zotlabs/Module/New_channel.php:168
+msgid "Allowed characters are a-z 0-9, - and _"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143
-msgid "Information"
+#: ../../Zotlabs/Module/New_channel.php:176
+msgid "Channel name"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143
-msgid ""
-"Libravatar addon is installed, too. Please disable Libravatar addon or this "
-"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
-"nothing was found at Libravatar."
+#: ../../Zotlabs/Module/New_channel.php:179
+#: ../../Zotlabs/Module/Settings/Channel.php:234
+msgid "Channel role"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:150
-#: ../../extend/addon/hzaddons/xmpp/xmpp.php:43
-#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:46
-msgid "Save Settings"
+#: ../../Zotlabs/Module/New_channel.php:182
+msgid "Create a Channel"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151
-msgid "Default avatar image"
+#: ../../Zotlabs/Module/New_channel.php:183
+msgid ""
+"A channel is a unique network identity. It can represent a person (social "
+"network profile), a forum (group), a business or celebrity page, a newsfeed, "
+"and many other things."
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151
-msgid "Select default avatar image if none was found at Gravatar. See README"
+#: ../../Zotlabs/Module/New_channel.php:184
+msgid ""
+"or <a href=\"import\">import an existing channel</a> from another location."
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152
-msgid "Rating of images"
+#: ../../Zotlabs/Module/New_channel.php:189
+msgid "Validate"
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152
-msgid "Select the appropriate avatar rating for your site. See README"
+#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103
+msgid "Album not found."
msgstr ""
-#: ../../extend/addon/hzaddons/gravatar/gravatar.php:165
-msgid "Gravatar settings updated."
+#: ../../Zotlabs/Module/Photos.php:93
+msgid "Delete Album"
msgstr ""
-#: ../../extend/addon/hzaddons/sendzid/Mod_Sendzid.php:21
-msgid "Send your identity to all websites"
+#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1057
+msgid "Delete Photo"
msgstr ""
-#: ../../extend/addon/hzaddons/sendzid/Mod_Sendzid.php:29
-msgid "Send ZID"
+#: ../../Zotlabs/Module/Photos.php:522
+msgid "No photos selected"
msgstr ""
-#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:101
-msgid "An account has been created for you."
+#: ../../Zotlabs/Module/Photos.php:571
+msgid "Access to this item is restricted."
msgstr ""
-#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:108
-msgid "Authentication successful but rejected: account creation is disabled."
+#: ../../Zotlabs/Module/Photos.php:614
+#, php-format
+msgid "%1$.2f MB photo storage used."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:259
-msgid "DB Cleanup Failure"
+#: ../../Zotlabs/Module/Photos.php:618
+#, php-format
+msgid "%1$.2f MB of %2$.2f MB photo storage used."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:692
-msgid "[cart] Item Added"
+#: ../../Zotlabs/Module/Photos.php:660
+msgid "Upload Photos"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1107
-msgid "Order already checked out."
+#: ../../Zotlabs/Module/Photos.php:664
+msgid "Enter an album name"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1416
-msgid "Drop database tables when uninstalling."
+#: ../../Zotlabs/Module/Photos.php:665
+msgid "or select an existing album (doubleclick)"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1423
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:129
-msgid "Cart Settings"
+#: ../../Zotlabs/Module/Photos.php:666
+msgid "Create a status post for this upload"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1435
-#: ../../extend/addon/hzaddons/cart/cart.php:1438
-msgid "Shop"
+#: ../../Zotlabs/Module/Photos.php:668
+msgid "Description (optional)"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1458
-#: ../../extend/addon/hzaddons/faces/Mod_Faces.php:64
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:36
-#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:52
-msgid "Profile Unavailable."
+#: ../../Zotlabs/Module/Photos.php:756
+msgid "Show Newest First"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1494
-#: ../../extend/addon/hzaddons/cart/myshop.php:113
-msgid "Order Not Found"
+#: ../../Zotlabs/Module/Photos.php:758
+msgid "Show Oldest First"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1598
-msgid "You must be logged into the Grid to shop."
+#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1355
+msgid "Add Photos"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1609
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:486
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:456
-#: ../../extend/addon/hzaddons/cart/myshop.php:37
-#: ../../extend/addon/hzaddons/cart/manual_payments.php:93
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:81
-msgid "Invalid channel"
+#: ../../Zotlabs/Module/Photos.php:867
+msgid "Permission denied. Access to this item may be restricted."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1631
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:417
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:392
-#: ../../extend/addon/hzaddons/cart/manual_payments.php:68
-msgid "Order not found."
+#: ../../Zotlabs/Module/Photos.php:869
+msgid "Photo not available"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1647
-msgid "Access denied."
+#: ../../Zotlabs/Module/Photos.php:927
+msgid "Use as profile photo"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1699
-#: ../../extend/addon/hzaddons/cart/cart.php:1842
-msgid "No Order Found"
+#: ../../Zotlabs/Module/Photos.php:928
+msgid "Use as cover photo"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1708
-msgid "An unknown error has occurred Please start again."
+#: ../../Zotlabs/Module/Photos.php:935
+msgid "Private Photo"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1851
-msgid "Requirements not met."
+#: ../../Zotlabs/Module/Photos.php:950
+msgid "View Full Size"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1851
-msgid "Review your order and complete any needed requirements."
+#: ../../Zotlabs/Module/Photos.php:1031
+msgid "Edit photo"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1877
-msgid "Invalid Payment Type. Please start again."
+#: ../../Zotlabs/Module/Photos.php:1033
+msgid "Rotate CW (right)"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/cart.php:1884
-msgid "Order not found"
+#: ../../Zotlabs/Module/Photos.php:1034
+msgid "Rotate CCW (left)"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:70
-msgid "Enable Order/Item Options"
+#: ../../Zotlabs/Module/Photos.php:1037
+msgid "Move photo to album"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:333
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:357
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:433
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:457
-msgid "Label"
+#: ../../Zotlabs/Module/Photos.php:1038
+msgid "Enter a new album name"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:336
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:360
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:436
-#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:460
-msgid "Instructions"
+#: ../../Zotlabs/Module/Photos.php:1039
+msgid "or select an existing one (doubleclick)"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:151
-msgid "Enable Subscription Management Module"
+#: ../../Zotlabs/Module/Photos.php:1044
+msgid "Add a Tag"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:223
-msgid ""
-"Cannot include subscription items with different terms in the same order."
+#: ../../Zotlabs/Module/Photos.php:1052
+msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:372
-msgid "Select Subscription to Edit"
+#: ../../Zotlabs/Module/Photos.php:1055
+msgid "Flag as adult in album view"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:380
-msgid "Edit Subscriptions"
+#: ../../Zotlabs/Module/Photos.php:1125 ../../Zotlabs/Module/Photos.php:1137
+msgid "View all"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:414
-msgid "Subscription SKU"
+#: ../../Zotlabs/Module/Photos.php:1238
+msgid "Photo Tools"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:419
-msgid "Catalog Description"
+#: ../../Zotlabs/Module/Photos.php:1247
+msgid "In This Photo:"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:423
-msgid "Subscription available for purchase."
+#: ../../Zotlabs/Module/Photos.php:1252
+msgid "Map"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:428
-msgid "Maximum active subscriptions to this item per account."
+#: ../../Zotlabs/Module/Photos.php:1260
+msgctxt "noun"
+msgid "Likes"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:431
-msgid "Subscription price."
+#: ../../Zotlabs/Module/Photos.php:1261
+msgctxt "noun"
+msgid "Dislikes"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:435
-msgid "Quantity"
+#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:29
+msgid "You must be logged in to see this page."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:439
-msgid "Term"
+#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:150
+#: ../../Zotlabs/Module/Profile.php:62
+msgid "Posts and comments"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:61
-msgid "Enable Manual Cart Module"
+#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:157
+#: ../../Zotlabs/Module/Profile.php:69
+msgid "Only posts"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:172
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:164
-msgid "New Sku"
+#: ../../Zotlabs/Module/Channel.php:231
+msgid "Insufficient permissions. Request redirected to profile page."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:208
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:199
-msgid "Cannot save edits to locked item."
+#: ../../Zotlabs/Module/Profile.php:106
+msgid "vcard"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:252
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:649
-msgid "Changes Locked"
+#: ../../Zotlabs/Module/Moderate.php:70
+msgid "Item approved"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:256
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:653
-msgid "Item available for purchase."
+#: ../../Zotlabs/Module/Sources.php:41
+msgid "Failed to create source. No channel selected."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:263
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:660
-#: ../../extend/addon/hzaddons/cart/widgets/catalogitem.php:57
-msgid "Price"
+#: ../../Zotlabs/Module/Sources.php:57
+msgid "Source created."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:266
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:663
-msgid "Photo URL"
+#: ../../Zotlabs/Module/Sources.php:70
+msgid "Source updated."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:86
-msgid "Enable Paypal Button Module (API-v2)"
+#: ../../Zotlabs/Module/Sources.php:99
+msgid "*"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:96
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:93
-msgid "Use Production Key"
+#: ../../Zotlabs/Module/Sources.php:106
+msgid "Manage remote sources of content for your channel."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:103
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:100
-msgid "Paypal Sandbox Client Key"
+#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
+msgid "New Source"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:110
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:107
-msgid "Paypal Sandbox Secret Key"
+#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
+msgid ""
+"Import all or selected content from the following channel into this channel "
+"and distribute it according to your channel settings."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:116
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:113
-msgid "Paypal Production Client Key"
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Only import content with these words (one per line)"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:123
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:120
-msgid "Paypal Production Secret Key"
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Leave blank to import all public content"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:271
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:252
-msgid "Paypal button payments are not enabled."
+#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
+msgid "Channel Name"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:289
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:270
+#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
msgid ""
-"Paypal button payments are not properly configured. Please choose another "
-"payment option."
+"Add the following categories to posts imported from this source (comma "
+"separated)"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:85
-msgid "Enable Paypal Button Module"
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Resend posts with this channel as author"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:65
-msgid "Enable Hubzilla Services Module"
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Copyrights may apply"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:248
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:335
-msgid "SKU not found."
+#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
+msgid "Source not found."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:301
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:305
-msgid "Invalid Activation Directive."
+#: ../../Zotlabs/Module/Sources.php:149
+msgid "Edit Source"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:376
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:380
-msgid "Invalid Deactivation Directive."
+#: ../../Zotlabs/Module/Sources.php:150
+msgid "Delete Source"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:566
-msgid "Add to this privacy group"
+#: ../../Zotlabs/Module/Sources.php:180
+msgid "Source removed"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:582
-msgid "Set user service class"
+#: ../../Zotlabs/Module/Sources.php:182
+msgid "Unable to remove source."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:609
-msgid "You must be using a local account to purchase this service."
+#: ../../Zotlabs/Module/Profiles.php:23 ../../Zotlabs/Module/Profiles.php:211
+#: ../../Zotlabs/Module/Profiles.php:641
+msgid "Profile not found."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:667
-msgid "Add buyer to privacy group"
+#: ../../Zotlabs/Module/Profiles.php:43
+msgid "Profile deleted."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:672
-msgid "Add buyer as connection"
+#: ../../Zotlabs/Module/Profiles.php:67 ../../Zotlabs/Module/Profiles.php:104
+msgid "Profile-"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:680
-#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:722
-msgid "Set Service Class"
+#: ../../Zotlabs/Module/Profiles.php:89 ../../Zotlabs/Module/Profiles.php:126
+msgid "New profile created."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/myshop.php:30
-msgid "Access Denied."
+#: ../../Zotlabs/Module/Profiles.php:110
+msgid "Profile unavailable to clone."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/myshop.php:145
-#: ../../extend/addon/hzaddons/cart/myshop.php:181
-#: ../../extend/addon/hzaddons/cart/myshop.php:215
-#: ../../extend/addon/hzaddons/cart/myshop.php:265
-#: ../../extend/addon/hzaddons/cart/myshop.php:300
-#: ../../extend/addon/hzaddons/cart/myshop.php:323
-msgid "Access Denied"
+#: ../../Zotlabs/Module/Profiles.php:145
+msgid "Profile unavailable to export."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/myshop.php:190
-#: ../../extend/addon/hzaddons/cart/myshop.php:224
-#: ../../extend/addon/hzaddons/cart/myshop.php:275
-#: ../../extend/addon/hzaddons/cart/myshop.php:333
-msgid "Invalid Item"
+#: ../../Zotlabs/Module/Profiles.php:221
+msgid "Profile Name is required."
msgstr ""
-#: ../../extend/addon/hzaddons/cart/manual_payments.php:7
-msgid "Error: order mismatch. Please try again."
+#: ../../Zotlabs/Module/Profiles.php:426
+msgid "Marital Status"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/manual_payments.php:61
-msgid "Manual payments are not enabled."
+#: ../../Zotlabs/Module/Profiles.php:430
+msgid "Romantic Partner"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/manual_payments.php:77
-msgid "Finished"
+#: ../../Zotlabs/Module/Profiles.php:434 ../../Zotlabs/Module/Profiles.php:787
+msgid "Likes"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:58
-msgid "Enable Test Catalog"
+#: ../../Zotlabs/Module/Profiles.php:438 ../../Zotlabs/Module/Profiles.php:788
+msgid "Dislikes"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:70
-msgid "Enable Manual Payments"
+#: ../../Zotlabs/Module/Profiles.php:442 ../../Zotlabs/Module/Profiles.php:795
+msgid "Work/Employment"
msgstr ""
-#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:90
-msgid "Base Merchant Currency"
+#: ../../Zotlabs/Module/Profiles.php:445
+msgid "Religion"
msgstr ""
-#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:127
-msgid "Edit Article"
+#: ../../Zotlabs/Module/Profiles.php:449
+msgid "Political Views"
msgstr ""
-#: ../../extend/addon/hzaddons/articles/articles.php:51
-msgid "View Articles"
+#: ../../Zotlabs/Module/Profiles.php:457
+msgid "Sexual Preference"
msgstr ""
-#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:119
-msgid "Add Article"
+#: ../../Zotlabs/Module/Profiles.php:461
+msgid "Homepage"
msgstr ""
-#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:81
-msgid "Hubzilla File Storage Import"
+#: ../../Zotlabs/Module/Profiles.php:465
+msgid "Interests"
msgstr ""
-#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:82
-msgid "This will import all your cloud files from another server."
+#: ../../Zotlabs/Module/Profiles.php:573
+msgid "Profile updated."
msgstr ""
-#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:83
-msgid "Hubzilla Server base URL"
+#: ../../Zotlabs/Module/Profiles.php:671
+msgid "Hide my connections from viewers of this profile"
msgstr ""
-#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:84
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:138
-msgid "Since modified date yyyy-mm-dd"
+#: ../../Zotlabs/Module/Profiles.php:684
+msgid "Publish my default profile in the network directory"
msgstr ""
-#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:85
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:139
-msgid "Until modified date yyyy-mm-dd"
+#: ../../Zotlabs/Module/Profiles.php:692
+msgid "Suggest me as a potential contact to new members"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:125
-msgid "View Larger"
+#: ../../Zotlabs/Module/Profiles.php:696
+msgid "Reveal my online status"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:148
-msgid "Tile Server URL"
+#: ../../Zotlabs/Module/Profiles.php:737
+msgid "Edit Profile Details"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:148
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
-"target=\"_blank\">public tile servers</a>"
+#: ../../Zotlabs/Module/Profiles.php:739
+msgid "View this profile"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:149
-msgid "Nominatim (reverse geocoding) Server URL"
+#: ../../Zotlabs/Module/Profiles.php:741
+msgid "Profile Tools"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:149
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
-"target=\"_blank\">Nominatim servers</a>"
+#: ../../Zotlabs/Module/Profiles.php:742
+msgid "Change cover photo"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:150
-msgid "Default zoom"
+#: ../../Zotlabs/Module/Profiles.php:744
+msgid "Create a new profile using these settings"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:150
-msgid ""
-"The default zoom level. (1:world, 18:highest, also depends on tile server)"
+#: ../../Zotlabs/Module/Profiles.php:745
+msgid "Clone this profile"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:151
-msgid "Include marker on map"
+#: ../../Zotlabs/Module/Profiles.php:746
+msgid "Delete this profile"
msgstr ""
-#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:151
-msgid "Include a marker on the map."
+#: ../../Zotlabs/Module/Profiles.php:747
+msgid "Add profile things"
msgstr ""
-#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:15
-msgid "WYSIWYG status editor"
+#: ../../Zotlabs/Module/Profiles.php:748
+msgid "Basic"
msgstr ""
-#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:24
-msgid "WYSIWYG Status App"
+#: ../../Zotlabs/Module/Profiles.php:750
+msgid "Relationship"
msgstr ""
-#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:32
-msgid "WYSIWYG Status"
+#: ../../Zotlabs/Module/Profiles.php:753
+msgid "Import profile from file"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:106
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:179
-msgid "Network error"
+#: ../../Zotlabs/Module/Profiles.php:754
+msgid "Export profile to file"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:110
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:183
-msgid "API error"
+#: ../../Zotlabs/Module/Profiles.php:755
+msgid "Your gender"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:114
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:187
-msgid "Unknown issue"
+#: ../../Zotlabs/Module/Profiles.php:756
+msgid "Marital status"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:152
-msgid "Unable to retrieve email address from remote identity provider"
+#: ../../Zotlabs/Module/Profiles.php:757
+msgid "Sexual preference"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:171
-msgid "Unable to login using email address "
+#: ../../Zotlabs/Module/Profiles.php:760
+msgid "Profile name"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:211
-msgid "Social Authentication using your social media account"
+#: ../../Zotlabs/Module/Profiles.php:762
+msgid "This is your default profile."
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:215
-msgid ""
-"This app enables one or more social provider sign-in buttons on the login "
-"page."
+#: ../../Zotlabs/Module/Profiles.php:764
+msgid "Your full name"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:233
-msgid "Add an identity provider"
+#: ../../Zotlabs/Module/Profiles.php:765
+msgid "Short title/description"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:260
-msgid "Enable "
+#: ../../Zotlabs/Module/Profiles.php:765
+msgid "Maximal 190 characters"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:267
-msgid "Key"
+#: ../../Zotlabs/Module/Profiles.php:768
+msgid "Street address"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:267
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:272
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:288
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:299
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:308
-msgid "Word"
+#: ../../Zotlabs/Module/Profiles.php:769
+msgid "Locality/City"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:272
-msgid "Secret"
+#: ../../Zotlabs/Module/Profiles.php:770
+msgid "Region/State"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:308
-msgid "Add a custom provider"
+#: ../../Zotlabs/Module/Profiles.php:771
+msgid "Postal/Zip code"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:328
-msgid "Remove an identity provider"
+#: ../../Zotlabs/Module/Profiles.php:777
+msgid "Who (if applicable)"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:338
-msgid "Social authentication"
+#: ../../Zotlabs/Module/Profiles.php:777
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:380
-msgid "Error while saving provider settings"
+#: ../../Zotlabs/Module/Profiles.php:778
+msgid "Since (date)"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:403
-msgid "Custom provider already exists"
+#: ../../Zotlabs/Module/Profiles.php:781
+msgid "Tell us about yourself"
msgstr ""
-#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:420
-msgid "Social authentication settings saved."
+#: ../../Zotlabs/Module/Profiles.php:783
+msgid "Hometown"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/pumpio.php:152
-msgid "You are now authenticated to pumpio."
+#: ../../Zotlabs/Module/Profiles.php:784
+msgid "Political views"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/pumpio.php:153
-msgid "return to the featured settings page"
+#: ../../Zotlabs/Module/Profiles.php:785
+msgid "Religious views"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/pumpio.php:168
-msgid "Post to Pump.io"
+#: ../../Zotlabs/Module/Profiles.php:786
+msgid "Keywords used in directory listings"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:40
-msgid "Pump.io Settings saved."
+#: ../../Zotlabs/Module/Profiles.php:786
+msgid "Example: fishing photography software"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:71
-msgid "Pump.io servername"
+#: ../../Zotlabs/Module/Profiles.php:789
+msgid "Musical interests"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:71
-msgid "Without \"http://\" or \"https://\""
+#: ../../Zotlabs/Module/Profiles.php:790
+msgid "Books, literature"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:75
-msgid "Pump.io username"
+#: ../../Zotlabs/Module/Profiles.php:791
+msgid "Television"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:75
-msgid "Without the servername"
+#: ../../Zotlabs/Module/Profiles.php:792
+msgid "Film/Dance/Culture/Entertainment"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:86
-msgid "You are not authenticated to pumpio"
+#: ../../Zotlabs/Module/Profiles.php:793
+msgid "Hobbies/Interests"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:88
-msgid "(Re-)Authenticate your pump.io connection"
+#: ../../Zotlabs/Module/Profiles.php:794
+msgid "Love/Romance"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92
-msgid "Post to pump.io by default"
+#: ../../Zotlabs/Module/Profiles.php:796
+msgid "School/Education"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96
-msgid "Should posts be public"
+#: ../../Zotlabs/Module/Profiles.php:797
+msgid "Contact information and social networks"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100
-msgid "Mirror all public posts"
+#: ../../Zotlabs/Module/Profiles.php:798
+msgid "My other channels"
msgstr ""
-#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:110
-msgid "Pump.io Crosspost Connector"
+#: ../../Zotlabs/Module/Sharedwithme.php:106
+msgid "Files: shared with me"
msgstr ""
-#: ../../extend/addon/hzaddons/superblock/superblock.php:355
-msgid "Block Completely"
+#: ../../Zotlabs/Module/Sharedwithme.php:108
+msgid "NEW"
msgstr ""
-#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:62
-msgid "superblock settings updated"
+#: ../../Zotlabs/Module/Sharedwithme.php:111
+msgid "Remove all files"
msgstr ""
-#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:86
-msgid "Currently blocked"
+#: ../../Zotlabs/Module/Sharedwithme.php:112
+msgid "Remove this file"
msgstr ""
-#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:88
-msgid "No channels currently blocked"
+#: ../../Zotlabs/Module/Rbmark.php:72
+msgid "Select a bookmark folder"
msgstr ""
-#: ../../extend/addon/hzaddons/gallery/gallery.php:43
-#: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:135
-msgid "Gallery"
+#: ../../Zotlabs/Module/Rbmark.php:80
+msgid "Save Bookmark"
msgstr ""
-#: ../../extend/addon/hzaddons/gallery/gallery.php:46
-msgid "Photo Gallery"
+#: ../../Zotlabs/Module/Rbmark.php:81
+msgid "URL of bookmark"
msgstr ""
-#: ../../extend/addon/hzaddons/randpost/randpost.php:99
-msgid "You're welcome."
+#: ../../Zotlabs/Module/Rbmark.php:86
+msgid "Or enter new bookmark folder name"
msgstr ""
-#: ../../extend/addon/hzaddons/randpost/randpost.php:100
-msgid "Ah shucks..."
+#: ../../Zotlabs/Module/Lockview.php:101
+msgid "Remote privacy information not available"
msgstr ""
-#: ../../extend/addon/hzaddons/randpost/randpost.php:101
-msgid "Don't mention it."
+#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203
+#: ../../Zotlabs/Module/Acl.php:124
+msgctxt "acl"
+msgid "Profile"
msgstr ""
-#: ../../extend/addon/hzaddons/randpost/randpost.php:102
-msgid "&lt;blush&gt;"
+#: ../../Zotlabs/Module/Lockview.php:155 ../../Zotlabs/Module/Lockview.php:212
+msgid "Privacy group"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:51
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:129
-msgid "System defaults:"
+#: ../../Zotlabs/Module/Lockview.php:183
+msgid "Item"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55
-msgid "Preferred Clipart IDs"
+#: ../../Zotlabs/Module/Lockview.php:230
+#, php-format
+msgid "Click to copy link to this ressource for guest %s to clipboard"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55
-msgid "List of preferred clipart ids. These will be shown first."
+#: ../../Zotlabs/Module/Lockview.php:230
+msgid "Link copied"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56
-msgid "Default Search Term"
+#: ../../Zotlabs/Module/Lockview.php:235
+msgid "Access"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56
-msgid "The default search term. These will be shown second."
+#: ../../Zotlabs/Module/Lockview.php:237
+msgid "OCAP access"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57
-msgid "Return After"
+#: ../../Zotlabs/Module/Channel_calendar.php:62
+msgid "Event can not end before it has started."
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57
-msgid "Page to load after image selection."
+#: ../../Zotlabs/Module/Channel_calendar.php:64
+#: ../../Zotlabs/Module/Channel_calendar.php:72
+#: ../../Zotlabs/Module/Channel_calendar.php:87
+msgid "Unable to generate preview."
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:60
-msgid "Profile List"
+#: ../../Zotlabs/Module/Channel_calendar.php:70
+msgid "Event title and start time are required."
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:62
-msgid "Order of Preferred"
+#: ../../Zotlabs/Module/Channel_calendar.php:85
+#: ../../Zotlabs/Module/Channel_calendar.php:214
+msgid "Event not found."
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:62
-msgid "Sort order of preferred clipart ids."
+#: ../../Zotlabs/Module/Channel_calendar.php:358
+msgid "Edit event"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:63
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:69
-msgid "Newest first"
+#: ../../Zotlabs/Module/Channel_calendar.php:360
+msgid "Delete event"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:66
-msgid "As entered"
+#: ../../Zotlabs/Module/Channel_calendar.php:394
+msgid "calendar"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:68
-msgid "Order of other"
+#: ../../Zotlabs/Module/Channel_calendar.php:485
+msgid "Failed to remove event"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:68
-msgid "Sort order of other clipart ids."
+#: ../../Zotlabs/Module/Go.php:22
+msgid "This page is available only to site members"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:70
-msgid "Most downloaded first"
+#: ../../Zotlabs/Module/Go.php:30
+msgid "What would you like to do?"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:71
-msgid "Most liked first"
+#: ../../Zotlabs/Module/Go.php:32
+msgid ""
+"Please bookmark this page if you would like to return to it in the future"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:73
-msgid "Preferred IDs Message"
+#: ../../Zotlabs/Module/Go.php:36
+msgid "Upload a profile photo"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:73
-msgid "Message to display above preferred results."
+#: ../../Zotlabs/Module/Go.php:37
+msgid "Upload a cover photo"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:79
-msgid "Uploaded by: "
+#: ../../Zotlabs/Module/Go.php:38
+msgid "Edit your default profile"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:79
-msgid "Drawn by: "
+#: ../../Zotlabs/Module/Go.php:40
+msgid "View the channel directory"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:183
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:195
-msgid "Use this image"
+#: ../../Zotlabs/Module/Go.php:41
+msgid "View/edit your channel settings"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:193
-msgid "Or select from a free OpenClipart.org image:"
+#: ../../Zotlabs/Module/Go.php:42
+msgid "View the site or project documentation"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:196
-msgid "Search Term"
+#: ../../Zotlabs/Module/Go.php:43
+msgid "Visit your channel homepage"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:233
-msgid "Unknown error. Please try again later."
+#: ../../Zotlabs/Module/Go.php:44
+msgid ""
+"View your connections and/or add somebody whose address you already know"
msgstr ""
-#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:309
-msgid "Profile photo updated successfully."
+#: ../../Zotlabs/Module/Go.php:45
+msgid ""
+"View your personal stream (this may be empty until you add some connections)"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:94
-msgid "Hubzilla Directory Stats"
+#: ../../Zotlabs/Module/Go.php:53
+msgid "View the public stream. Warning: this content is not moderated"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:95
-msgid "Total Hubs"
+#: ../../Zotlabs/Module/Chat.php:193
+msgid "Room not found"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:97
-msgid "Hubzilla Hubs"
+#: ../../Zotlabs/Module/Chat.php:209
+msgid "Leave Room"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:99
-msgid "Friendica Hubs"
+#: ../../Zotlabs/Module/Chat.php:210
+msgid "Delete Room"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:101
-msgid "Diaspora Pods"
+#: ../../Zotlabs/Module/Chat.php:211
+msgid "I am away right now"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:103
-msgid "Hubzilla Channels"
+#: ../../Zotlabs/Module/Chat.php:212
+msgid "I am online"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:105
-msgid "Friendica Channels"
+#: ../../Zotlabs/Module/Chat.php:214
+msgid "Bookmark this room"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:107
-msgid "Diaspora Channels"
+#: ../../Zotlabs/Module/Chat.php:237
+msgid "New Chatroom"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:109
-msgid "Aged 35 and above"
+#: ../../Zotlabs/Module/Chat.php:238
+msgid "Chatroom name"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:111
-msgid "Aged 34 and under"
+#: ../../Zotlabs/Module/Chat.php:239
+msgid "Expiration of chats (minutes)"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:113
-msgid "Average Age"
+#: ../../Zotlabs/Module/Chat.php:255
+#, php-format
+msgid "%1$s's Chatrooms"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:115
-msgid "Known Chatrooms"
+#: ../../Zotlabs/Module/Chat.php:260
+msgid "No chatrooms available"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:117
-msgid "Known Tags"
+#: ../../Zotlabs/Module/Chat.php:261
+msgid "Add Room"
msgstr ""
-#: ../../extend/addon/hzaddons/dirstats/dirstats.php:119
-msgid ""
-"Please note Diaspora and Friendica statistics are merely those **this "
-"directory** is aware of, and not all those known in the network. This also "
-"applies to chatrooms,"
+#: ../../Zotlabs/Module/Chat.php:264
+msgid "Expiration"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:61
-msgid ""
-"Please contact your site administrator.<br />The provided API URL is not "
-"valid."
+#: ../../Zotlabs/Module/Chat.php:265
+msgid "min"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:98
-msgid "We could not contact the GNU social API with the Path you entered."
+#: ../../Zotlabs/Module/Regate.php:85
+msgid "Email resent"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:130
-msgid "GNU social settings updated."
+#: ../../Zotlabs/Module/Regate.php:85
+msgid "Email resend failed"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:179
-msgid "Globally Available GNU social OAuthKeys"
+#: ../../Zotlabs/Module/Regate.php:110
+msgid "Verification successful"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:181
-msgid ""
-"There are preconfigured OAuth key pairs for some GNU social servers "
-"available. If you are using one of them, please use these credentials.<br /"
-">If not feel free to connect to any other GNU social instance (see below)."
+#: ../../Zotlabs/Module/Regate.php:154
+msgid "Account successfull created"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:196
-msgid "Provide your own OAuth Credentials"
+#: ../../Zotlabs/Module/Regate.php:212
+msgid "Channel successfull created"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:198
-msgid ""
-"No consumer key pair for GNU social found. Register your Hubzilla Account as "
-"an desktop client on your GNU social account, copy the consumer key pair "
-"here and enter the API base root.<br />Before you register your own OAuth "
-"key pair ask the administrator if there is already a key pair for this "
-"Hubzilla installation at your favourite GNU social installation."
+#: ../../Zotlabs/Module/Regate.php:218
+msgid "Automatic channel creation failed. Please create a channel."
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:202
-msgid "OAuth Consumer Key"
+#: ../../Zotlabs/Module/Regate.php:230
+msgid "Account creation error"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:206
-msgid "OAuth Consumer Secret"
+#: ../../Zotlabs/Module/Regate.php:242
+msgid "Verify failed"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:210
-msgid "Base API Path"
+#: ../../Zotlabs/Module/Regate.php:247
+msgid "Token verification failed"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:210
-msgid "Remember the trailing /"
+#: ../../Zotlabs/Module/Regate.php:252
+msgid "Request not inside time frame"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:214
-msgid "GNU social application name"
+#: ../../Zotlabs/Module/Regate.php:258 ../../Zotlabs/Module/Regate.php:288
+msgid "Identity unknown"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:237
-msgid ""
-"To connect to your GNU social account click the button below to get a "
-"security code from GNU social which you have to copy into the input box "
-"below and submit the form. Only your <strong>public</strong> posts will be "
-"posted to GNU social."
+#: ../../Zotlabs/Module/Regate.php:264
+msgid "dId2 mistaken"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:239
-msgid "Log in with GNU social"
+#: ../../Zotlabs/Module/Regate.php:292
+msgid "Your Registration ID"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:242
-msgid "Copy the security code from GNU social here"
+#: ../../Zotlabs/Module/Regate.php:305 ../../Zotlabs/Module/Regate.php:397
+#: ../../Zotlabs/Module/Regate.php:429
+msgid "Registration verification"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:252
-msgid "Cancel Connection Process"
+#: ../../Zotlabs/Module/Regate.php:312 ../../Zotlabs/Module/Regate.php:434
+msgid "Hold on, you can start verification in"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:254
-msgid "Current GNU social API is"
+#: ../../Zotlabs/Module/Regate.php:313
+msgid "Please remember your verification token for ID"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258
-msgid "Cancel GNU social Connection"
+#: ../../Zotlabs/Module/Regate.php:315
+msgid "Token validity"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:270
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:145
-msgid "Currently connected to: "
+#: ../../Zotlabs/Module/Regate.php:351
+msgid "Resend email"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:275
-msgid ""
-"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to GNU social will lead the visitor to a blank page "
-"informing the visitor that the access to your profile has been restricted."
+#: ../../Zotlabs/Module/Regate.php:356
+msgid "Registration status"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
-msgid "Post to GNU social by default"
+#: ../../Zotlabs/Module/Regate.php:359
+msgid "Verification successful!"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
-msgid ""
-"If enabled your public postings will be posted to the associated GNU-social "
-"account by default"
+#: ../../Zotlabs/Module/Regate.php:360
+msgid "Your login ID is"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169
-msgid "Clear OAuth configuration"
+#: ../../Zotlabs/Module/Regate.php:361
+msgid ""
+"After your account has been approved by our administrator you will be able "
+"to login with your login ID and your provided password."
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:301
-msgid "GNU-Social Crosspost Connector"
+#: ../../Zotlabs/Module/Regate.php:373
+msgid "Registration request revoked"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/statusnet.php:145
-msgid "Post to GNU social"
+#: ../../Zotlabs/Module/Regate.php:374
+msgid "Sorry for any inconvience. Thank you for your response."
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/statusnet.php:594
-msgid "API URL"
+#: ../../Zotlabs/Module/Regate.php:398
+msgid "Please enter your verification token for ID"
msgstr ""
-#: ../../extend/addon/hzaddons/statusnet/statusnet.php:597
-msgid "Application name"
+#: ../../Zotlabs/Module/Regate.php:399 ../../Zotlabs/Module/Regate.php:426
+msgid "Please check your email!"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/ljpost.php:49
-msgid "Post to Livejournal"
+#: ../../Zotlabs/Module/Regate.php:409
+msgid "Verification token"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/ljpost.php:127
-msgid "Posted by"
+#: ../../Zotlabs/Module/Regate.php:420
+msgid "ID expired"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/ljpost.php:134
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:67
-#: ../../extend/addon/hzaddons/dwpost/dwpost.php:134
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:381
-#: ../../extend/addon/hzaddons/wppost/wppost.php:175
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:96
-msgid "Source"
+#: ../../Zotlabs/Module/Regate.php:435
+msgid "You will require the verification token for ID"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:53
-msgid "Livejournal username"
+#: ../../Zotlabs/Module/Regate.php:444
+msgid "Unknown or expired ID"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:57
-msgid "Livejournal password"
+#: ../../Zotlabs/Module/Regate.php:455
+msgid "dId2 malformed"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61
-msgid "Post to Livejournal by default"
+#: ../../Zotlabs/Module/Editlayout.php:137
+msgid "Edit Layout"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65
-msgid "Send wall-to-wall posts to Livejournal"
+#: ../../Zotlabs/Module/Setup.php:180
+msgid "$Projectname Server - Setup"
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92
-msgid "Add link to original post"
+#: ../../Zotlabs/Module/Setup.php:184
+msgid "Could not connect to database."
msgstr ""
-#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:77
-msgid "Livejournal Crosspost Connector"
+#: ../../Zotlabs/Module/Setup.php:188
+msgid ""
+"Could not connect to specified site URL. Possible SSL certificate or DNS "
+"issue."
msgstr ""
-#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:22
-msgid "pageheader Settings saved."
+#: ../../Zotlabs/Module/Setup.php:195
+msgid "Could not create table."
msgstr ""
-#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:41
-msgid "Message to display on every page on this server"
+#: ../../Zotlabs/Module/Setup.php:201
+msgid "Your site database has been installed."
msgstr ""
-#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:49
-msgid "Page Header"
+#: ../../Zotlabs/Module/Setup.php:207
+msgid ""
+"You may need to import the file \"install/schema_xxx.sql\" manually using a "
+"database client."
msgstr ""
-#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:22
-msgid "Rainbow Tag App"
+#: ../../Zotlabs/Module/Setup.php:208 ../../Zotlabs/Module/Setup.php:277
+#: ../../Zotlabs/Module/Setup.php:802
+msgid "Please see the file \"install/INSTALL.txt\"."
msgstr ""
-#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:23
-msgid "Add some colour to tag clouds"
+#: ../../Zotlabs/Module/Setup.php:274
+msgid "System check"
msgstr ""
-#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:30
-msgid "Rainbow Tag"
+#: ../../Zotlabs/Module/Setup.php:279
+msgid "Check again"
msgstr ""
-#: ../../extend/addon/hzaddons/visage/Mod_Visage.php:23
-msgid "Recent Channel/Profile Viewers"
+#: ../../Zotlabs/Module/Setup.php:300
+msgid "Database connection"
msgstr ""
-#: ../../extend/addon/hzaddons/visage/Mod_Visage.php:34
-msgid "No entries."
+#: ../../Zotlabs/Module/Setup.php:301
+msgid ""
+"In order to install $Projectname we need to know how to connect to your "
+"database."
msgstr ""
-#: ../../extend/addon/hzaddons/testdrive/testdrive.php:104
-#, php-format
-msgid "Your account on %s will expire in a few days."
+#: ../../Zotlabs/Module/Setup.php:302
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
msgstr ""
-#: ../../extend/addon/hzaddons/testdrive/testdrive.php:105
-msgid "Your test account is about to expire."
+#: ../../Zotlabs/Module/Setup.php:303
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
msgstr ""
-#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:21
-msgid "nofed Settings saved."
+#: ../../Zotlabs/Module/Setup.php:307
+msgid "Database Server Name"
msgstr ""
-#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40
-msgid "Federate posts by default"
+#: ../../Zotlabs/Module/Setup.php:307
+msgid "Default is 127.0.0.1"
msgstr ""
-#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:48
-msgid "No Federation"
+#: ../../Zotlabs/Module/Setup.php:308
+msgid "Database Port"
msgstr ""
-#: ../../extend/addon/hzaddons/nofed/nofed.php:47
-msgid "Federate"
+#: ../../Zotlabs/Module/Setup.php:308
+msgid "Communication port number - use 0 for default"
msgstr ""
-#: ../../extend/addon/hzaddons/likebanner/likebanner.php:51
-msgid "Your Webbie:"
+#: ../../Zotlabs/Module/Setup.php:309
+msgid "Database Login Name"
msgstr ""
-#: ../../extend/addon/hzaddons/likebanner/likebanner.php:54
-msgid "Fontsize (px):"
+#: ../../Zotlabs/Module/Setup.php:310
+msgid "Database Login Password"
msgstr ""
-#: ../../extend/addon/hzaddons/likebanner/likebanner.php:68
-msgid "Link:"
+#: ../../Zotlabs/Module/Setup.php:311
+msgid "Database Name"
msgstr ""
-#: ../../extend/addon/hzaddons/likebanner/likebanner.php:70
-msgid "Like us on Hubzilla"
+#: ../../Zotlabs/Module/Setup.php:312
+msgid "Database Type"
msgstr ""
-#: ../../extend/addon/hzaddons/likebanner/likebanner.php:72
-msgid "Embed:"
+#: ../../Zotlabs/Module/Setup.php:314 ../../Zotlabs/Module/Setup.php:354
+msgid "Site administrator email address"
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:85
+#: ../../Zotlabs/Module/Setup.php:314 ../../Zotlabs/Module/Setup.php:354
msgid ""
-"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
-"analytics tool."
+"Your account email address must match this in order to use the web admin "
+"panel."
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:88
-#, php-format
-msgid ""
-"If you do not want that your visits are logged this way you <a href='%s'>can "
-"set a cookie to prevent Piwik from tracking further visits of the site</a> "
-"(opt-out)."
+#: ../../Zotlabs/Module/Setup.php:315 ../../Zotlabs/Module/Setup.php:356
+msgid "Website URL"
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:96
-msgid "Piwik Base URL"
+#: ../../Zotlabs/Module/Setup.php:315 ../../Zotlabs/Module/Setup.php:356
+msgid "Please use SSL (https) URL if available."
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:96
-msgid ""
-"Absolute path to your Piwik installation. (without protocol (http/s), with "
-"trailing slash)"
+#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:358
+msgid "Please select a default timezone for your website"
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:97
-msgid "Site ID"
+#: ../../Zotlabs/Module/Setup.php:343
+msgid "Site settings"
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:98
-msgid "Show opt-out cookie link?"
+#: ../../Zotlabs/Module/Setup.php:397
+msgid "PHP version 8.0 or greater is required."
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:99
-msgid "Asynchronous tracking"
+#: ../../Zotlabs/Module/Setup.php:398
+msgid "PHP version"
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:100
-msgid "Enable frontend JavaScript error tracking"
+#: ../../Zotlabs/Module/Setup.php:414
+msgid "Could not find a command line version of PHP in the web server PATH."
msgstr ""
-#: ../../extend/addon/hzaddons/piwik/piwik.php:100
-msgid "This feature requires Piwik >= 2.2.0"
+#: ../../Zotlabs/Module/Setup.php:415
+msgid ""
+"If you don't have a command line version of PHP installed on server, you "
+"will not be able to run background polling via cron."
msgstr ""
-#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:60
-msgid "Page to load after login"
+#: ../../Zotlabs/Module/Setup.php:419
+msgid "PHP executable path"
msgstr ""
-#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:60
+#: ../../Zotlabs/Module/Setup.php:419
msgid ""
-"Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy "
-"collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave "
-"blank for default network page (grid)."
-msgstr ""
-
-#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:68
-msgid "Startpage"
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:65
-msgid "Twitter settings updated."
+#: ../../Zotlabs/Module/Setup.php:424
+msgid "Command line PHP"
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:101
+#: ../../Zotlabs/Module/Setup.php:434
msgid ""
-"No consumer key pair for Twitter found. Please contact your site "
-"administrator."
+"Unable to check command line PHP, as shell_exec() is disabled. This is "
+"required."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:123
+#: ../../Zotlabs/Module/Setup.php:438
msgid ""
-"At this Hubzilla instance the Twitter plugin was enabled but you have not "
-"yet connected your account to your Twitter account. To do so click the "
-"button below to get a PIN from Twitter which you have to copy into the input "
-"box below and submit the form. Only your <strong>public</strong> posts will "
-"be posted to Twitter."
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:125
-msgid "Log in with Twitter"
+#: ../../Zotlabs/Module/Setup.php:439
+msgid "This is required for message delivery to work."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:128
-msgid "Copy the PIN from Twitter here"
+#: ../../Zotlabs/Module/Setup.php:442
+msgid "PHP register_argc_argv"
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:150
+#: ../../Zotlabs/Module/Setup.php:462
msgid ""
-"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to Twitter will lead the visitor to a blank page informing "
-"the visitor that the access to your profile has been restricted."
+"This is not sufficient to upload larger images or files. You should be able "
+"to upload at least 4 MB at once."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:155
-msgid "Twitter post length"
+#: ../../Zotlabs/Module/Setup.php:464
+#, php-format
+msgid ""
+"Your max allowed total upload size is set to %s. Maximum size of one file to "
+"upload is set to %s. You are allowed to upload up to %d files at once."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:155
-msgid "Maximum tweet length"
+#: ../../Zotlabs/Module/Setup.php:470
+msgid "You can adjust these settings in the server php.ini file."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
-msgid "Send public postings to Twitter by default"
+#: ../../Zotlabs/Module/Setup.php:472
+msgid "PHP upload limits"
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
+#: ../../Zotlabs/Module/Setup.php:495
msgid ""
-"If enabled your public postings will be posted to the associated Twitter "
-"account by default"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:179
-msgid "Twitter Crosspost Connector"
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/twitter.php:109
-msgid "Post to Twitter"
+#: ../../Zotlabs/Module/Setup.php:496
+msgid ""
+"If running under Windows, please see \"http://www.php.net/manual/en/"
+"openssl.installation.php\"."
msgstr ""
-#: ../../extend/addon/hzaddons/twitter/twitter.php:502
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:95
-msgid "Submit Settings"
+#: ../../Zotlabs/Module/Setup.php:499
+msgid "Generate encryption keys"
msgstr ""
-#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:22
-msgid "Fuzzloc Settings updated."
+#: ../../Zotlabs/Module/Setup.php:503
+msgid "Error: the sodium encryption library is not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:38
-msgid "Minimum offset in meters"
+#: ../../Zotlabs/Module/Setup.php:505
+msgid "Generate ed25519 encryption keys"
msgstr ""
-#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:42
-msgid "Maximum offset in meters"
+#: ../../Zotlabs/Module/Setup.php:510
+msgid ""
+"Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are "
+"required."
msgstr ""
-#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:51
-msgid "Fuzzy Location"
+#: ../../Zotlabs/Module/Setup.php:512
+msgid "Bigmath library (either bcmath or gmp)"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:18
-msgid "No username found in import file."
+#: ../../Zotlabs/Module/Setup.php:529
+msgid "libCurl PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:140
-msgid "Import completed."
+#: ../../Zotlabs/Module/Setup.php:530
+msgid "GD graphics PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1632
-#, php-format
-msgid "%1$s dislikes %2$s's %3$s"
+#: ../../Zotlabs/Module/Setup.php:531
+msgid "OpenSSL PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:43
-msgid "Diaspora Protocol Settings updated."
+#: ../../Zotlabs/Module/Setup.php:532
+msgid "PDO database PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:52
-msgid ""
-"The diaspora protocol does not support location independence. Connections "
-"you make within that network may be unreachable from alternate channel "
-"locations."
+#: ../../Zotlabs/Module/Setup.php:533
+msgid "mb_string PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:80
-msgid "Prevent your hashtags from being redirected to other sites"
+#: ../../Zotlabs/Module/Setup.php:534
+msgid "xml PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:84
-msgid "Sign and forward posts and comments with no existing Diaspora signature"
+#: ../../Zotlabs/Module/Setup.php:535
+msgid "zip PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:89
-msgid "Followed hashtags (comma separated, do not include the #)"
+#: ../../Zotlabs/Module/Setup.php:536
+msgid "intl PHP module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:98
-msgid "Diaspora Protocol"
+#: ../../Zotlabs/Module/Setup.php:540 ../../Zotlabs/Module/Setup.php:542
+msgid "Apache mod_rewrite module"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:81
+#: ../../Zotlabs/Module/Setup.php:540
msgid ""
-"Please install the statistics addon to be able to configure a diaspora relay"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:91
-msgid "Diaspora Relay Handle"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:91
-msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
+"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:111
-msgid "Diaspora relay could not be imported"
+#: ../../Zotlabs/Module/Setup.php:546 ../../Zotlabs/Module/Setup.php:549
+msgid "exec"
msgstr ""
-#: ../../extend/addon/hzaddons/diaspora/diaspora.php:1103
-msgid "No subject"
+#: ../../Zotlabs/Module/Setup.php:546
+msgid ""
+"Error: exec is required but is either not installed or has been disabled in "
+"php.ini"
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:106
-msgid "Photos imported"
+#: ../../Zotlabs/Module/Setup.php:552 ../../Zotlabs/Module/Setup.php:555
+msgid "shell_exec"
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:129
-msgid "Redmatrix Photo Album Import"
+#: ../../Zotlabs/Module/Setup.php:552
+msgid ""
+"Error: shell_exec is required but is either not installed or has been "
+"disabled in php.ini"
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:130
-msgid "This will import all your Redmatrix photo albums to this channel."
+#: ../../Zotlabs/Module/Setup.php:560
+msgid "Error: libCURL PHP module required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:131
-#: ../../extend/addon/hzaddons/redfiles/redfiles.php:121
-msgid "Redmatrix Server base URL"
+#: ../../Zotlabs/Module/Setup.php:564
+msgid ""
+"Error: GD PHP module with JPEG support or ImageMagick graphics library "
+"required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:132
-#: ../../extend/addon/hzaddons/redfiles/redfiles.php:122
-msgid "Redmatrix Login Username"
+#: ../../Zotlabs/Module/Setup.php:568
+msgid "Error: openssl PHP module required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:133
-#: ../../extend/addon/hzaddons/redfiles/redfiles.php:123
-msgid "Redmatrix Login Password"
+#: ../../Zotlabs/Module/Setup.php:574
+msgid ""
+"Error: PDO database PHP module missing a driver for either mysql or pgsql."
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134
-msgid "Import just this album"
+#: ../../Zotlabs/Module/Setup.php:579
+msgid "Error: PDO database PHP module required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134
-msgid "Leave blank to import all albums"
+#: ../../Zotlabs/Module/Setup.php:583
+msgid "Error: mb_string PHP module required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135
-msgid "Maximum count to import"
+#: ../../Zotlabs/Module/Setup.php:587
+msgid "Error: xml PHP module required for DAV but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135
-msgid "0 or blank to import all available"
+#: ../../Zotlabs/Module/Setup.php:591
+msgid "Error: zip PHP module required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:38
-msgid "Some setting"
+#: ../../Zotlabs/Module/Setup.php:595
+msgid "Error: intl PHP module required but not installed."
msgstr ""
-#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:38
-msgid "A setting"
+#: ../../Zotlabs/Module/Setup.php:614 ../../Zotlabs/Module/Setup.php:623
+msgid ".htconfig.php is writable"
msgstr ""
-#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:46
-msgid "Skeleton Settings"
+#: ../../Zotlabs/Module/Setup.php:619
+msgid ""
+"The web installer needs to be able to create a file called \".htconfig.php\" "
+"in the top folder of your web server and it is unable to do so."
msgstr ""
-#: ../../extend/addon/hzaddons/qrator/qrator.php:48
-msgid "QR code"
+#: ../../Zotlabs/Module/Setup.php:620
+msgid ""
+"This is most often a permission setting, as the web server may not be able "
+"to write files in your folder - even if you can."
msgstr ""
-#: ../../extend/addon/hzaddons/qrator/qrator.php:63
-msgid "QR Generator"
+#: ../../Zotlabs/Module/Setup.php:621
+msgid "Please see install/INSTALL.txt for additional information."
msgstr ""
-#: ../../extend/addon/hzaddons/qrator/qrator.php:64
-msgid "Enter some text"
+#: ../../Zotlabs/Module/Setup.php:637
+msgid ""
+"This software uses the Smarty3 template engine to render its web views. "
+"Smarty3 compiles templates to PHP to speed up rendering."
msgstr ""
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:26
-msgid "Dreamwidth Crosspost Connector Settings saved."
+#: ../../Zotlabs/Module/Setup.php:638
+#, php-format
+msgid ""
+"In order to store these compiled templates, the web server needs to have "
+"write access to the directory %s under the top level web folder."
msgstr ""
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:51
-msgid "Dreamwidth username"
+#: ../../Zotlabs/Module/Setup.php:639 ../../Zotlabs/Module/Setup.php:660
+msgid ""
+"Please ensure that the user that your web server runs as (e.g. www-data) has "
+"write access to this folder."
msgstr ""
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:55
-msgid "Dreamwidth password"
+#: ../../Zotlabs/Module/Setup.php:640
+#, php-format
+msgid ""
+"Note: as a security measure, you should give the web server write access to "
+"%s only--not the template files (.tpl) that it contains."
msgstr ""
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59
-msgid "Post to Dreamwidth by default"
+#: ../../Zotlabs/Module/Setup.php:643
+#, php-format
+msgid "%s is writable"
msgstr ""
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:67
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:96
-msgid "Link description (default:"
+#: ../../Zotlabs/Module/Setup.php:659
+msgid ""
+"This software uses the store directory to save uploaded files. The web "
+"server needs to have write access to the store directory under the top level "
+"web folder"
msgstr ""
-#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:75
-msgid "Dreamwidth Crosspost Connector"
+#: ../../Zotlabs/Module/Setup.php:663
+msgid "store is writable"
msgstr ""
-#: ../../extend/addon/hzaddons/dwpost/dwpost.php:49
-msgid "Post to Dreamwidth"
+#: ../../Zotlabs/Module/Setup.php:695
+msgid ""
+"SSL certificate cannot be validated. Fix certificate or disable https access "
+"to this site."
msgstr ""
-#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:25
-msgid "Show Upload Limits"
+#: ../../Zotlabs/Module/Setup.php:696
+msgid ""
+"If you have https access to your website or allow connections to TCP port "
+"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
+"NOT use self-signed certificates!"
msgstr ""
-#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:27
-msgid "Hubzilla configured maximum size: "
+#: ../../Zotlabs/Module/Setup.php:697
+msgid ""
+"This restriction is incorporated because public posts from you may for "
+"example contain references to images on your own hub."
msgstr ""
-#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:28
-msgid "PHP upload_max_filesize: "
+#: ../../Zotlabs/Module/Setup.php:698
+msgid ""
+"If your certificate is not recognized, members of other sites (who may "
+"themselves have valid certificates) will get a warning message on their own "
+"site complaining about security issues."
msgstr ""
-#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:29
-msgid "PHP post_max_size (must be larger than upload_max_filesize): "
+#: ../../Zotlabs/Module/Setup.php:699
+msgid ""
+"This can cause usability issues elsewhere (not just on your own site) so we "
+"must insist on this requirement."
msgstr ""
-#: ../../extend/addon/hzaddons/nsabait/Mod_Nsabait.php:23
-msgid "NSA Bait App"
+#: ../../Zotlabs/Module/Setup.php:700
+msgid ""
+"Providers are available that issue free certificates which are browser-valid."
msgstr ""
-#: ../../extend/addon/hzaddons/nsabait/Mod_Nsabait.php:25
-msgid "Make yourself a political target."
+#: ../../Zotlabs/Module/Setup.php:701
+msgid ""
+"If you are confident that the certificate is valid and signed by a trusted "
+"authority, check to see if you have failed to install an intermediate cert. "
+"These are not normally required by browsers, but are required for server-to-"
+"server communications."
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:27
-msgid "No server specified"
+#: ../../Zotlabs/Module/Setup.php:703
+msgid "SSL certificate validation"
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:72
-msgid "Posts imported"
+#: ../../Zotlabs/Module/Setup.php:709
+msgid ""
+"Url rewrite in .htaccess is not working. Check your server "
+"configuration.Test: "
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:112
-msgid "Files imported"
+#: ../../Zotlabs/Module/Setup.php:712
+msgid "Url rewrite is working"
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:134
+#: ../../Zotlabs/Module/Setup.php:725
msgid ""
-"This will import all your conversations and cloud files from a cloned "
-"channel on another server. This may take a while if you have lots of posts "
-"and or files."
+"The database configuration file \".htconfig.php\" could not be written. "
+"Please use the enclosed text to create a configuration file in your web "
+"server root."
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
-msgid "Include posts"
+#: ../../Zotlabs/Module/Setup.php:800
+msgid "<h1>What next?</h1>"
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
-msgid "Conversations, Articles, Cards, and other posted content"
+#: ../../Zotlabs/Module/Setup.php:801
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
-msgid "Include files"
+#: ../../Zotlabs/Module/Chanview.php:132
+msgid "toggle full screen mode"
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
-msgid "Files, Photos and other cloud storage"
+#: ../../Zotlabs/Module/Profperm.php:35 ../../Zotlabs/Module/Profperm.php:66
+msgid "Invalid profile identifier."
msgstr ""
-#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:137
-msgid "Original Server base URL"
+#: ../../Zotlabs/Module/Profperm.php:114
+msgid "Profile Visibility Editor"
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:24
-msgid "Friendica Crosspost Connector Settings saved."
+#: ../../Zotlabs/Module/Profperm.php:118
+msgid "Click on a contact to add or remove."
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47
-msgid "Send public postings to Friendica by default"
+#: ../../Zotlabs/Module/Profperm.php:127
+msgid "Visible To"
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:51
-msgid "Friendica API Path"
+#: ../../Zotlabs/Module/Profperm.php:143
+#: ../../Zotlabs/Module/Connections.php:221
+msgid "All Connections"
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:51
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:65
-msgid "https://{sitename}/api"
+#: ../../Zotlabs/Module/Lang.php:20
+msgid "Language App"
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:55
-msgid "Friendica login name"
+#: ../../Zotlabs/Module/Rpost.php:117 ../../Zotlabs/Module/Editpost.php:114
+msgid "Edit post"
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:59
-msgid "Friendica password"
+#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
+msgid "Item is not editable"
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:67
-msgid "Friendica Crosspost Connector"
+#: ../../Zotlabs/Module/Connections.php:58
+#: ../../Zotlabs/Module/Connections.php:116
+msgid "Active"
msgstr ""
-#: ../../extend/addon/hzaddons/rtof/rtof.php:51
-msgid "Post to Friendica"
+#: ../../Zotlabs/Module/Connections.php:63
+#: ../../Zotlabs/Module/Connections.php:185
+#: ../../Zotlabs/Module/Connections.php:296
+msgid "Blocked"
msgstr ""
-#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:34
-msgid "New registration"
+#: ../../Zotlabs/Module/Connections.php:68
+#: ../../Zotlabs/Module/Connections.php:192
+#: ../../Zotlabs/Module/Connections.php:295
+msgid "Ignored"
msgstr ""
-#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:42
-#, php-format
-msgid "Message sent to %s. New account registration: %s"
+#: ../../Zotlabs/Module/Connections.php:73
+#: ../../Zotlabs/Module/Connections.php:206
+#: ../../Zotlabs/Module/Connections.php:294
+msgid "Hidden"
msgstr ""
-#: ../../extend/addon/hzaddons/redfiles/redfiles.php:119
-msgid "Redmatrix File Storage Import"
+#: ../../Zotlabs/Module/Connections.php:78
+#: ../../Zotlabs/Module/Connections.php:199
+msgid "Archived/Unreachable"
msgstr ""
-#: ../../extend/addon/hzaddons/redfiles/redfiles.php:120
-msgid "This will import all your Redmatrix cloud files to this channel."
+#: ../../Zotlabs/Module/Connections.php:161
+msgid "Active Connections"
msgstr ""
-#: ../../extend/addon/hzaddons/mailtest/mailtest.php:19
-msgid "Send test email"
+#: ../../Zotlabs/Module/Connections.php:164
+msgid "Show active connections"
msgstr ""
-#: ../../extend/addon/hzaddons/mailtest/mailtest.php:50
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:50
-msgid "No recipients found."
+#: ../../Zotlabs/Module/Connections.php:171
+msgid "Show pending (new) connections"
msgstr ""
-#: ../../extend/addon/hzaddons/mailtest/mailtest.php:66
-msgid "Mail sent."
+#: ../../Zotlabs/Module/Connections.php:188
+msgid "Only show blocked connections"
msgstr ""
-#: ../../extend/addon/hzaddons/mailtest/mailtest.php:68
-msgid "Sending of mail failed."
+#: ../../Zotlabs/Module/Connections.php:195
+msgid "Only show ignored connections"
msgstr ""
-#: ../../extend/addon/hzaddons/mailtest/mailtest.php:77
-msgid "Mail Test"
+#: ../../Zotlabs/Module/Connections.php:202
+msgid "Only show archived/unreachable connections"
msgstr ""
-#: ../../extend/addon/hzaddons/mailtest/mailtest.php:96
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:93
-msgid "Message subject"
+#: ../../Zotlabs/Module/Connections.php:209
+msgid "Only show hidden connections"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:57
-msgid "Errors encountered deleting database table "
+#: ../../Zotlabs/Module/Connections.php:224
+msgid "Show all connections"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96
-msgid "Drop tables when uninstalling?"
+#: ../../Zotlabs/Module/Connections.php:292
+msgid "Pending approval"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96
-msgid ""
-"If checked, the Rendezvous database tables will be deleted when the plugin "
-"is uninstalled."
+#: ../../Zotlabs/Module/Connections.php:293
+msgid "Archived"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97
-msgid "Mapbox Access Token"
+#: ../../Zotlabs/Module/Connections.php:297
+msgid "Not connected at this location"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97
-msgid ""
-"If you enter a Mapbox access token, it will be used to retrieve map tiles "
-"from Mapbox instead of the default OpenStreetMap tile server."
+#: ../../Zotlabs/Module/Connections.php:336
+#, php-format
+msgid "%1$s [%2$s]"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:162
-msgid "Rendezvous"
+#: ../../Zotlabs/Module/Connections.php:337
+msgid "Edit connection"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:167
-msgid ""
-"This identity has been deleted by another member due to inactivity. Please "
-"press the \"New identity\" button or refresh the page to register a new "
-"identity. You may use the same name."
+#: ../../Zotlabs/Module/Connections.php:339
+msgid "Delete connection"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:168
-msgid "Welcome to Rendezvous!"
+#: ../../Zotlabs/Module/Connections.php:345
+msgid "Channel address"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:169
-msgid ""
-"Enter your name to join this rendezvous. To begin sharing your location with "
-"the other members, tap the GPS control. When your location is discovered, a "
-"red dot will appear and others will be able to see you on the map."
+#: ../../Zotlabs/Module/Connections.php:350
+msgid "Call"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:171
-msgid "Let's meet here"
+#: ../../Zotlabs/Module/Connections.php:352
+msgid "Status"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:174
-msgid "New marker"
+#: ../../Zotlabs/Module/Connections.php:355
+msgid "Connected"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:175
-msgid "Edit marker"
+#: ../../Zotlabs/Module/Connections.php:359
+msgid "Ignore connection"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:176
-msgid "New identity"
+#: ../../Zotlabs/Module/Connections.php:361
+msgid "Recent activity"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:177
-msgid "Delete marker"
+#: ../../Zotlabs/Module/Connections.php:367
+msgid "Connect at this location"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:178
-msgid "Delete member"
+#: ../../Zotlabs/Module/Connections.php:405
+msgid "Search your connections"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:179
-msgid "Edit proximity alert"
+#: ../../Zotlabs/Module/Connections.php:406
+msgid "Contact search"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180
-msgid ""
-"A proximity alert will be issued when this member is within a certain radius "
-"of you.<br><br>Enter a radius in meters (0 to disable):"
+#: ../../Zotlabs/Module/Cdav.php:819
+msgid "Calendar entries imported."
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:185
-msgid "distance"
+#: ../../Zotlabs/Module/Cdav.php:821
+msgid "No calendar entries found."
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:181
-msgid "Proximity alert distance (meters)"
+#: ../../Zotlabs/Module/Cdav.php:1000
+msgid "Event title"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:182
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:184
-msgid ""
-"A proximity alert will be issued when you are within a certain radius of the "
-"marker location.<br><br>Enter a radius in meters (0 to disable):"
+#: ../../Zotlabs/Module/Cdav.php:1001
+msgid "Start date and time"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:183
-msgid "Marker proximity alert"
+#: ../../Zotlabs/Module/Cdav.php:1002
+msgid "End date and time"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:186
-msgid "Reminder note"
+#: ../../Zotlabs/Module/Cdav.php:1003
+msgid "Timezone:"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:187
-msgid ""
-"Enter a note to be displayed when you are within the specified proximity..."
+#: ../../Zotlabs/Module/Cdav.php:1029
+msgid "Month"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:199
-msgid "Add new rendezvous"
+#: ../../Zotlabs/Module/Cdav.php:1030
+msgid "Week"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:200
-msgid ""
-"Create a new rendezvous and share the access link with those you wish to "
-"invite to the group. Those who open the link become members of the "
-"rendezvous. They can view other member locations, add markers to the map, or "
-"share their own locations with the group."
+#: ../../Zotlabs/Module/Cdav.php:1031
+msgid "Day"
msgstr ""
-#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:232
-msgid "You have no rendezvous. Press the button above to create a rendezvous!"
+#: ../../Zotlabs/Module/Cdav.php:1032
+msgid "List month"
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:24
-msgid "Channel is required."
+#: ../../Zotlabs/Module/Cdav.php:1033
+msgid "List week"
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:38
-msgid "Hubzilla Crosspost Connector Settings saved."
+#: ../../Zotlabs/Module/Cdav.php:1034
+msgid "List day"
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61
-msgid "Send public postings to Hubzilla channel by default"
+#: ../../Zotlabs/Module/Cdav.php:1042
+msgid "More"
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:65
-msgid "Hubzilla API Path"
+#: ../../Zotlabs/Module/Cdav.php:1043
+msgid "Less"
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:69
-msgid "Hubzilla login name"
+#: ../../Zotlabs/Module/Cdav.php:1045
+msgid "Select calendar"
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:73
-msgid "Hubzilla channel name"
+#: ../../Zotlabs/Module/Cdav.php:1048
+msgid "Delete all"
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:77
-msgid "Hubzilla password"
+#: ../../Zotlabs/Module/Cdav.php:1051
+msgid "Sorry! Editing of recurrent events is not yet implemented."
msgstr ""
-#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:85
-msgid "Hubzilla Crosspost Connector"
+#: ../../Zotlabs/Module/Cdav.php:1052
+msgid ""
+"Could not fetch calendar resource. The selected calendar might be disabled."
msgstr ""
-#: ../../extend/addon/hzaddons/redred/redred.php:50
-msgid "Post to Hubzilla"
+#: ../../Zotlabs/Module/Cdav.php:1452
+msgid "Default Calendar"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:224
-msgid "Workflow user."
+#: ../../Zotlabs/Module/Cdav.php:1463
+msgid "Default Addressbook"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:275
-msgid "This channel"
+#: ../../Zotlabs/Module/Dirsearch.php:32
+msgid "This directory server requires an access token"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:330
-msgid "Create New Workflow Item"
+#: ../../Zotlabs/Module/Oauth2.php:54
+msgid "Name and Secret are required"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:564
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1466
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1485
-msgid "Workflow"
+#: ../../Zotlabs/Module/Oauth2.php:114
+msgid "Add OAuth2 application"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1454
-msgid "No Workflows Available"
+#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:147
+msgid "Grant Types"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1484
-msgid "Add item to which workflow"
+#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:121
+msgid "leave blank unless your application sepcifically requires this"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1544
-#: ../../extend/addon/hzaddons/workflow/workflow.php:1663
-msgid "Create Workflow Item"
+#: ../../Zotlabs/Module/Oauth2.php:121 ../../Zotlabs/Module/Oauth2.php:148
+msgid "Authorization scope"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2632
-msgid "Link"
+#: ../../Zotlabs/Module/Oauth2.php:132
+msgid "OAuth2 Application not found."
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2634
-msgid "Web link."
+#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
+msgid "leave blank unless your application specifically requires this"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2655
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2724
-msgid "Brief description or title"
+#: ../../Zotlabs/Module/Oauth2.php:190
+msgid "Connected OAuth2 Apps"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2663
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2732
-msgid "Notes and Info"
+#: ../../Zotlabs/Module/Settings/Display.php:126
+#, php-format
+msgid "%s - (Experimental)"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2670
-msgid "Used to order links"
+#: ../../Zotlabs/Module/Settings/Display.php:183
+msgid "Display Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/workflow.php:2730
-msgid "Body"
+#: ../../Zotlabs/Module/Settings/Display.php:184
+msgid "Theme Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/Settings/Mod_WorkflowSettings.php:101
-msgid "Workflow Settings"
+#: ../../Zotlabs/Module/Settings/Display.php:185
+msgid "Custom Theme Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/workflow/Settings/WorkflowSettingsUtil.php:145
-msgid "Workflow settings"
+#: ../../Zotlabs/Module/Settings/Display.php:186
+msgid "Content Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/nsfw/nsfw.php:153
-msgid "Possible adult content"
+#: ../../Zotlabs/Module/Settings/Display.php:192
+msgid "Display Theme:"
msgstr ""
-#: ../../extend/addon/hzaddons/nsfw/nsfw.php:168
-#, php-format
-msgid "%s - view"
+#: ../../Zotlabs/Module/Settings/Display.php:193
+msgid "Select scheme"
msgstr ""
-#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:22
-msgid "NSFW Settings saved."
+#: ../../Zotlabs/Module/Settings/Display.php:195
+msgid "Preload images before rendering the page"
msgstr ""
-#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:42
+#: ../../Zotlabs/Module/Settings/Display.php:195
msgid ""
-"This app looks in posts for the words/text you specify below, and collapses "
-"any content containing those keywords so it is not displayed at "
-"inappropriate times, such as sexual innuendo that may be improper in a work "
-"setting. It is polite and recommended to tag any content containing nudity "
-"with #NSFW. This filter can also match any other word/text you specify, and "
-"can thereby be used as a general purpose content filter."
-msgstr ""
-
-#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:47
-msgid "Comma separated list of keywords to hide"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:47
-msgid "Word, /regular-expression/, lang=xx, lang!=xx"
+"The subjective page load time will be longer but the page will be ready when "
+"displayed"
msgstr ""
-#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:56
-msgid "NSFW"
+#: ../../Zotlabs/Module/Settings/Display.php:196
+msgid "Enable user zoom on mobile devices"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:21
-msgid "Three Dimensional Tic-Tac-Toe"
+#: ../../Zotlabs/Module/Settings/Display.php:197
+msgid "Update browser every xx seconds"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:54
-msgid "3D Tic-Tac-Toe"
+#: ../../Zotlabs/Module/Settings/Display.php:197
+msgid "Minimum of 10 seconds, no maximum"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:59
-msgid "New game"
+#: ../../Zotlabs/Module/Settings/Display.php:198
+msgid "Maximum number of conversations to load at any time:"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:60
-msgid "New game with handicap"
+#: ../../Zotlabs/Module/Settings/Display.php:198
+msgid "Maximum of 30 items"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:61
-msgid ""
-"Three dimensional tic-tac-toe is just like the traditional game except that "
-"it is played on multiple levels simultaneously. "
+#: ../../Zotlabs/Module/Settings/Display.php:199
+msgid "Show emoticons (smilies) as images"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:62
-msgid ""
-"In this case there are three levels. You win by getting three in a row on "
-"any level, as well as up, down, and diagonally across the different levels."
+#: ../../Zotlabs/Module/Settings/Display.php:200
+msgid "Link post titles to source"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:64
-msgid ""
-"The handicap game disables the center position on the middle level because "
-"the player claiming this square often has an unfair advantage."
+#: ../../Zotlabs/Module/Settings/Display.php:202
+msgid "Display new member quick links menu"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:183
-msgid "You go first..."
+#: ../../Zotlabs/Module/Settings/Network.php:42
+#: ../../Zotlabs/Module/Settings/Channel_home.php:46
+msgid "Max height of content (in pixels)"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:188
-msgid "I'm going first this time..."
+#: ../../Zotlabs/Module/Settings/Network.php:44
+#: ../../Zotlabs/Module/Settings/Channel_home.php:48
+msgid "Click to expand content exceeding this height"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:194
-msgid "You won!"
+#: ../../Zotlabs/Module/Settings/Network.php:59
+msgid "Stream Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:200
-#: ../../extend/addon/hzaddons/tictac/tictac.php:225
-msgid "\"Cat\" game!"
+#: ../../Zotlabs/Module/Settings/Channel_home.php:61
+msgid "Personal menu to display in your channel pages"
msgstr ""
-#: ../../extend/addon/hzaddons/tictac/tictac.php:223
-msgid "I won!"
+#: ../../Zotlabs/Module/Settings/Channel_home.php:88
+msgid "Channel Home Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:27
-msgid "Photo Cache settings saved."
+#: ../../Zotlabs/Module/Settings/Account.php:23
+msgid "Not valid email."
msgstr ""
-#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:43
-msgid ""
-"Saves a copy of images from external sites locally to increase your "
-"anonymity in the web."
+#: ../../Zotlabs/Module/Settings/Account.php:26
+msgid "Protected email address. Cannot change to that email."
msgstr ""
-#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:49
-msgid "Minimal photo size for caching"
+#: ../../Zotlabs/Module/Settings/Account.php:35
+msgid "System failure storing new email. Please try again."
msgstr ""
-#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:51
-msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
+#: ../../Zotlabs/Module/Settings/Account.php:53
+msgid "Password verification failed."
msgstr ""
-#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:60
-msgid "Photo Cache"
+#: ../../Zotlabs/Module/Settings/Account.php:60
+msgid "Passwords do not match. Password unchanged."
msgstr ""
-#: ../../extend/addon/hzaddons/logrot/logrot.php:36
-msgid "Logfile archive directory"
+#: ../../Zotlabs/Module/Settings/Account.php:64
+msgid "Empty passwords are not allowed. Password unchanged."
msgstr ""
-#: ../../extend/addon/hzaddons/logrot/logrot.php:36
-msgid "Directory to store rotated logs"
+#: ../../Zotlabs/Module/Settings/Account.php:78
+msgid "Password changed."
msgstr ""
-#: ../../extend/addon/hzaddons/logrot/logrot.php:37
-msgid "Logfile size in bytes before rotating"
+#: ../../Zotlabs/Module/Settings/Account.php:80
+msgid "Password update failed. Please try again."
msgstr ""
-#: ../../extend/addon/hzaddons/logrot/logrot.php:38
-msgid "Number of logfiles to retain"
+#: ../../Zotlabs/Module/Settings/Account.php:105
+msgid "Account Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:23
-msgid "XMPP settings updated."
+#: ../../Zotlabs/Module/Settings/Account.php:106
+msgid "Current Password"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:35
-msgid "XMPP App"
+#: ../../Zotlabs/Module/Settings/Account.php:107
+msgid "Enter New Password"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:36
-msgid "Embedded XMPP (Jabber) client"
+#: ../../Zotlabs/Module/Settings/Account.php:108
+msgid "Confirm New Password"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:52
-msgid "Individual credentials"
+#: ../../Zotlabs/Module/Settings/Account.php:108
+msgid "Leave password fields blank unless changing"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:58
-msgid "Jabber BOSH server"
+#: ../../Zotlabs/Module/Settings/Account.php:110
+msgid "Multi-Factor Authentication"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:67
-msgid "XMPP Settings"
+#: ../../Zotlabs/Module/Settings/Account.php:111
+msgid "DId2 or Email Address:"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/xmpp.php:44
-msgid "Jabber BOSH host"
+#: ../../Zotlabs/Module/Settings/Account.php:114
+msgid "Remove this account including all its channels"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/xmpp.php:45
-msgid "Use central userbase"
+#: ../../Zotlabs/Module/Settings/Editor.php:40
+msgid "Editor Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/xmpp/xmpp.php:45
-msgid ""
-"If enabled, members will automatically login to an ejabberd server that has "
-"to be installed on this machine with synchronized credentials via the "
-"\"auth_ejabberd.php\" script."
+#: ../../Zotlabs/Module/Settings/Features.php:45
+msgid "Additional Features"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:41
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:109
-msgid "(No Title)"
+#: ../../Zotlabs/Module/Settings/Directory.php:40
+msgid "Directory Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:123
-msgid "Wiki page create failed."
+#: ../../Zotlabs/Module/Settings/Featured.php:25
+msgid "No feature settings configured"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:137
-msgid "Wiki not found."
+#: ../../Zotlabs/Module/Settings/Featured.php:34
+msgid "Addon Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:148
-msgid "Destination name already exists"
+#: ../../Zotlabs/Module/Settings/Featured.php:35
+msgid "Please save/submit changes to any panel before opening another."
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:181
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:376
-msgid "Page not found"
+#: ../../Zotlabs/Module/Settings/Manage.php:41
+msgid "Channel Manager Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:211
-msgid "Error reading page content"
+#: ../../Zotlabs/Module/Settings/Privacy.php:49
+msgid "Privacy settings updated."
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:367
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:425
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:493
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:534
-msgid "Error reading wiki"
+#: ../../Zotlabs/Module/Settings/Privacy.php:67
+msgid "Only those you specifically allow"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:411
-msgid "Page update failed."
+#: ../../Zotlabs/Module/Settings/Privacy.php:68
+msgid "Approved connections"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:447
-msgid "Nothing deleted"
+#: ../../Zotlabs/Module/Settings/Privacy.php:69
+msgid "Any connections"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:514
-msgid "Compare: object not found."
+#: ../../Zotlabs/Module/Settings/Privacy.php:70
+msgid "Anybody on this website"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:521
-msgid "Page updated"
+#: ../../Zotlabs/Module/Settings/Privacy.php:71
+msgid "Anybody in this network"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:529
-msgid "Wiki resource_id required for git commit"
+#: ../../Zotlabs/Module/Settings/Privacy.php:72
+msgid "Anybody authenticated"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:589
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:29
-msgctxt "wiki_history"
-msgid "Message"
+#: ../../Zotlabs/Module/Settings/Privacy.php:73
+msgid "Anybody on the internet"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:590
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:30
-msgid "Date"
+#: ../../Zotlabs/Module/Settings/Privacy.php:83
+msgid ""
+"Advise: set to \"Anybody on the internet\" and use privacy groups to "
+"restrict access"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:591
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:364
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:31
-msgid "Revert"
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
+msgid "Privacy Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:592
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:32
-msgid "Compare"
+#: ../../Zotlabs/Module/Settings/Privacy.php:127
+msgid "Advanced configuration"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWiki.php:144
-msgid "Wiki updated successfully"
+#: ../../Zotlabs/Module/Settings/Privacy.php:129
+msgid "Proceed with caution"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Lib/NativeWiki.php:204
-msgid "Wiki files deleted successfully"
+#: ../../Zotlabs/Module/Settings/Privacy.php:130
+msgid ""
+"Changing advanced configuration settings can impact your, and your contacts "
+"channels functionality and security."
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:136
-msgid "Error retrieving wiki"
+#: ../../Zotlabs/Module/Settings/Privacy.php:131
+msgid "Accept the risk and continue"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:143
-msgid "Error creating zip file export folder"
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
+msgid "Automatically approve new contacts"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:194
-msgid "Error downloading wiki: "
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
+msgid "Opt-out of search engine indexing"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:209
-#: ../../extend/addon/hzaddons/wiki/wiki.php:45
-#: ../../extend/addon/hzaddons/wiki/wiki.php:98
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_list.php:23
-msgid "Wikis"
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+msgid "Group actor"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:219
-msgid "Wiki name"
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+msgid "Allow this channel to act as a forum"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
-msgid "Content type"
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+msgid "Accept all messages which mention you"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:223
-msgid "Any&nbsp;type"
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+msgid "This setting bypasses normal permissions"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230
-msgid "Lock content type"
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+msgid "Accept unsolicited comments for moderation"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231
-msgid "Create a status post for this wiki"
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+msgid "Otherwise they will be silently dropped"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:232
-msgid "Edit Wiki Name"
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+msgid "Enable OCAP access"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:277
-msgid "Wiki not found"
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+msgid "Grant limited posts the right to access linked private media"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:303
-msgid "Rename page"
+#: ../../Zotlabs/Module/Settings/Events.php:40
+msgid "Events Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:318
-msgid "Error retrieving page content"
+#: ../../Zotlabs/Module/Settings/Photos.php:40
+msgid "Photos Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:326
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:328
-msgid "New page"
+#: ../../Zotlabs/Module/Settings/Conversation.php:42
+msgid "Conversation Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:363
-msgid "Revision Comparison"
+#: ../../Zotlabs/Module/Settings/Channel.php:106
+#: ../../Zotlabs/Module/Settings/Channel.php:218
+msgid "Please select a channel role"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:371
-msgid "Short description of your changes (optional)"
+#: ../../Zotlabs/Module/Settings/Channel.php:195
+msgid "Your channel address is"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:391
-msgid "New page name"
+#: ../../Zotlabs/Module/Settings/Channel.php:198
+msgid "Your files/photos are accessible via WebDAV at"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:396
-msgid "Embed image from photo albums"
+#: ../../Zotlabs/Module/Settings/Channel.php:229
+msgid "Channel Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:407
-msgid "History"
+#: ../../Zotlabs/Module/Settings/Channel.php:236
+msgid "Basic Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:485
-msgid "Error creating wiki. Invalid name."
+#: ../../Zotlabs/Module/Settings/Channel.php:237
+msgid "Channel timezone:"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:492
-msgid "A wiki with this name already exists."
+#: ../../Zotlabs/Module/Settings/Channel.php:238
+msgid "Default post location:"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:505
-msgid "Wiki created, but error creating Home page."
+#: ../../Zotlabs/Module/Settings/Channel.php:238
+msgid "Geographical location to display on your posts"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:512
-msgid "Error creating wiki"
+#: ../../Zotlabs/Module/Settings/Channel.php:239
+msgid "Use browser location"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:536
-msgid "Error updating wiki. Invalid name."
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "Adult content"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:555
-msgid "Error updating wiki"
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "This channel frequently or regularly publishes adult content"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:570
-msgid "Wiki delete permission denied."
+#: ../../Zotlabs/Module/Settings/Channel.php:241
+msgid "Maximum Friend Requests/Day:"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:580
-msgid "Error deleting wiki"
+#: ../../Zotlabs/Module/Settings/Channel.php:241
+msgid "May reduce spam activity"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:613
-msgid "New page created"
+#: ../../Zotlabs/Module/Settings/Channel.php:243
+msgid "By default post a status message when:"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:739
-msgid "Cannot delete Home"
+#: ../../Zotlabs/Module/Settings/Channel.php:244
+msgid "accepting a friend request"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:815
-msgid "Current Revision"
+#: ../../Zotlabs/Module/Settings/Channel.php:245
+msgid "joining a forum/community"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:815
-msgid "Selected Revision"
+#: ../../Zotlabs/Module/Settings/Channel.php:246
+msgid "making an <em>interesting</em> profile change"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:870
-msgid "You must be authenticated."
+#: ../../Zotlabs/Module/Settings/Channel.php:247
+msgid "Send a notification email when:"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:899
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:64
-msgid "Add new page"
+#: ../../Zotlabs/Module/Settings/Channel.php:248
+msgid "You receive a connection request"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/wiki.php:48
-#: ../../extend/addon/hzaddons/cards/cards.php:51
-msgid "View Cards"
+#: ../../Zotlabs/Module/Settings/Channel.php:249
+msgid "Your connections are confirmed"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:58
-msgid "Wiki Pages"
+#: ../../Zotlabs/Module/Settings/Channel.php:250
+msgid "Someone writes on your profile wall"
msgstr ""
-#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:69
-msgid "Page name"
+#: ../../Zotlabs/Module/Settings/Channel.php:251
+msgid "Someone writes a followup comment"
msgstr ""
-#: ../../extend/addon/hzaddons/wholikesme/wholikesme.php:30
-msgid "Who likes me?"
+#: ../../Zotlabs/Module/Settings/Channel.php:252
+msgid "You receive a private message"
msgstr ""
-#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:129
-msgid "Edit Card"
+#: ../../Zotlabs/Module/Settings/Channel.php:253
+msgid "You receive a friend suggestion"
msgstr ""
-#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:115
-msgid "Add Card"
+#: ../../Zotlabs/Module/Settings/Channel.php:254
+msgid "You are tagged in a post"
msgstr ""
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:25
-msgid "Libertree Crosspost Connector Settings saved."
+#: ../../Zotlabs/Module/Settings/Channel.php:255
+msgid "You are poked/prodded/etc. in a post"
msgstr ""
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:49
-msgid "Libertree API token"
+#: ../../Zotlabs/Module/Settings/Channel.php:256
+msgid "Someone likes your post/comment"
msgstr ""
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:53
-msgid "Libertree site URL"
+#: ../../Zotlabs/Module/Settings/Channel.php:257
+msgid "Show visual notifications including:"
msgstr ""
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57
-msgid "Post to Libertree by default"
+#: ../../Zotlabs/Module/Settings/Channel.php:258
+msgid "Unseen stream activity"
msgstr ""
-#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:65
-msgid "Libertree Crosspost Connector"
+#: ../../Zotlabs/Module/Settings/Channel.php:259
+msgid "Unseen channel activity"
msgstr ""
-#: ../../extend/addon/hzaddons/libertree/libertree.php:43
-msgid "Post to Libertree"
+#: ../../Zotlabs/Module/Settings/Channel.php:260
+msgid "Unseen private messages"
msgstr ""
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:19
-msgid "Send email to all members"
+#: ../../Zotlabs/Module/Settings/Channel.php:260
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+#: ../../Zotlabs/Module/Settings/Channel.php:267
+msgid "Recommended"
msgstr ""
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:74
-#, php-format
-msgid "%1$d of %2$d messages sent."
+#: ../../Zotlabs/Module/Settings/Channel.php:261
+msgid "Upcoming events"
msgstr ""
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:82
-msgid "Send email to all hub members."
+#: ../../Zotlabs/Module/Settings/Channel.php:262
+msgid "Events today"
msgstr ""
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:94
-msgid "Sender Email address"
+#: ../../Zotlabs/Module/Settings/Channel.php:263
+msgid "Upcoming birthdays"
msgstr ""
-#: ../../extend/addon/hzaddons/hubwall/hubwall.php:95
-msgid "Test mode (only send to hub administrator)"
+#: ../../Zotlabs/Module/Settings/Channel.php:263
+msgid "Not available in all themes"
msgstr ""
-#: ../../extend/addon/hzaddons/mdpost/mdpost.php:42
-msgid "Use markdown for editing posts"
+#: ../../Zotlabs/Module/Settings/Channel.php:264
+msgid "System (personal) notifications"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/openid.php:49
-msgid ""
-"We encountered a problem while logging in with the OpenID you provided. "
-"Please check the correct spelling of the ID."
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+msgid "System info messages"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/openid.php:49
-msgid "The error message was:"
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+msgid "System critical alerts"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:32
-msgid "OpenID protocol error. No ID returned."
+#: ../../Zotlabs/Module/Settings/Channel.php:267
+msgid "New connections"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:78
-#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:179
-#, php-format
-msgid "Welcome %s. Remote authentication successful."
+#: ../../Zotlabs/Module/Settings/Channel.php:268
+msgid "System Registrations"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:52
-msgid "First Name"
+#: ../../Zotlabs/Module/Settings/Channel.php:269
+msgid "Unseen shared files"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:53
-msgid "Last Name"
+#: ../../Zotlabs/Module/Settings/Channel.php:270
+msgid "Unseen public stream activity"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:55
-msgid "Full Name"
+#: ../../Zotlabs/Module/Settings/Channel.php:271
+msgid "Unseen likes and dislikes"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:61
-msgid "Profile Photo 16px"
+#: ../../Zotlabs/Module/Settings/Channel.php:272
+msgid "Unseen forum posts"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:62
-msgid "Profile Photo 32px"
+#: ../../Zotlabs/Module/Settings/Channel.php:273
+msgid "Email notification hub (hostname)"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:63
-msgid "Profile Photo 48px"
+#: ../../Zotlabs/Module/Settings/Channel.php:273
+#, php-format
+msgid ""
+"If your channel is mirrored to multiple hubs, set this to your preferred "
+"location. This will prevent duplicate email notifications. Example: %s"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:64
-msgid "Profile Photo 64px"
+#: ../../Zotlabs/Module/Settings/Channel.php:274
+msgid "Show new wall posts, private messages and connections under Notices"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:65
-msgid "Profile Photo 80px"
+#: ../../Zotlabs/Module/Settings/Channel.php:275
+msgid "Mark all notices of the thread read if a notice is clicked"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:66
-msgid "Profile Photo 128px"
+#: ../../Zotlabs/Module/Settings/Channel.php:275
+msgid "If no, only the clicked notice will be marked read"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:70
-msgid "Birth Year"
+#: ../../Zotlabs/Module/Settings/Channel.php:276
+msgid ""
+"Desktop notifications are unavailable because the required browser "
+"permission has not been granted"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:71
-msgid "Birth Month"
+#: ../../Zotlabs/Module/Settings/Channel.php:277
+msgid "Grant permission"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:72
-msgid "Birth Day"
+#: ../../Zotlabs/Module/Settings/Channel.php:278
+msgid "Notify me of events this many days in advance"
msgstr ""
-#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:73
-msgid "Birthdate"
+#: ../../Zotlabs/Module/Settings/Channel.php:278
+msgid "Must be greater than 0"
msgstr ""
-#: ../../extend/addon/hzaddons/irc/Mod_Irc.php:23
-#: ../../extend/addon/hzaddons/irc/irc.php:41
-msgid "Popular Channels"
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+msgid "Default photo upload folder"
msgstr ""
-#: ../../extend/addon/hzaddons/irc/irc.php:37
-msgid "Channels to auto connect"
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+#: ../../Zotlabs/Module/Settings/Channel.php:282
+msgid "%Y - current year, %m - current month"
msgstr ""
-#: ../../extend/addon/hzaddons/irc/irc.php:37
-#: ../../extend/addon/hzaddons/irc/irc.php:41
-msgid "Comma separated list"
+#: ../../Zotlabs/Module/Settings/Channel.php:282
+msgid "Default file upload folder"
msgstr ""
-#: ../../extend/addon/hzaddons/irc/irc.php:45
-msgid "IRC Settings"
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "Remove this channel."
msgstr ""
-#: ../../extend/addon/hzaddons/irc/irc.php:54
-msgid "IRC settings saved."
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "Expire other channel content after this many days"
msgstr ""
-#: ../../extend/addon/hzaddons/irc/irc.php:58
-msgid "IRC Chatroom"
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "0 or blank to use the website limit."
msgstr ""
-#: ../../extend/addon/hzaddons/opensearch/opensearch.php:26
+#: ../../Zotlabs/Module/Settings/Channel.php:285
#, php-format
-msgctxt "opensearch"
-msgid "Search %1$s (%2$s)"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/opensearch/opensearch.php:28
-msgctxt "opensearch"
-msgid "$Projectname"
+msgid "This website expires after %d days."
msgstr ""
-#: ../../extend/addon/hzaddons/opensearch/opensearch.php:43
-msgid "Search $Projectname"
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "This website does not expire imported content."
msgstr ""
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:28
-msgid "ActivityPub Protocol Settings updated."
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "The website limit takes precedence if lower than your limit."
msgstr ""
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:44
+#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Settings/Channel.php:287
msgid ""
-"The activitypub protocol does not support location independence. Connections "
-"you make within that network may be unreachable from alternate channel "
-"locations."
-msgstr ""
-
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:50
-msgid "Send activities of type note instead of article"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:50
-msgid "Microblog services such as Mastodon do not properly support articles"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:58
-msgid "Activitypub Protocol"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:225
-msgid "Not allowed."
-msgstr ""
-
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:23
-msgid "Insane Journal Crosspost Connector Settings saved."
-msgstr ""
-
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:35
-msgid "Insane Journal Crosspost Connector App"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:36
-msgid "Relay public postings to Insane Journal"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:53
-msgid "InsaneJournal username"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:57
-msgid "InsaneJournal password"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61
-msgid "Post to InsaneJournal by default"
-msgstr ""
-
-#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:69
-msgid "Insane Journal Crosspost Connector"
+"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
+"leave blank to import all posts"
msgstr ""
-#: ../../extend/addon/hzaddons/ijpost/ijpost.php:44
-msgid "Post to Insane Journal"
+#: ../../Zotlabs/Module/Settings/Profiles.php:41
+msgid "Default profile for new contacts"
msgstr ""
-#: ../../extend/addon/hzaddons/planets/Mod_Planets.php:23
-msgid "Random Planet App"
+#: ../../Zotlabs/Module/Settings/Profiles.php:49
+msgid "Profiles Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/planets/Mod_Planets.php:25
-msgid ""
-"Set a random planet from the Star Wars Empire as your location when posting"
+#: ../../Zotlabs/Module/Settings/Connections.php:40
+msgid "Connections Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:21
-msgid "Project Servers and Resources"
+#: ../../Zotlabs/Module/Settings/Calendar.php:40
+msgid "Calendar Settings"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:22
-msgid "Project Creator and Tech Lead"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:23
+msgid "Password is required"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:49
-msgid ""
-"And the hundreds of other people and organisations who helped make the "
-"Hubzilla possible."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:29
+msgid "The provided password is not correct"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:52
-msgid ""
-"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving "
-"their time and expertise - and often paying out of pocket for services they "
-"share with others."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:68
+msgid "Account Multi-Factor Authentication"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:53
+#: ../../Zotlabs/Module/Settings/Multifactor.php:69
msgid ""
-"There is no corporate funding and no ads, and we do not collect and sell "
-"your personal information. (We don't control your personal information - "
-"<strong>you do</strong>.)"
+"This is your generated secret. It may be used in some cases if the QR image "
+"cannot be read. Please store it in a safe place."
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:54
-msgid ""
-"Help support our ground-breaking work in decentralisation, web identity, and "
-"privacy."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:70
+msgid "Please enter the code from your authenticator app"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:56
-msgid ""
-"Your donations keep servers and services running and also helps us to "
-"provide innovative new features and continued development."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:71
+msgid "You will only be able to enable MFA if the test passes"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:59
-msgid "Donate"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:75
+msgid "Congratulations, the provided code was correct"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:61
-msgid ""
-"Choose a project, developer, or public hub to support with a one-time "
-"donation"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:76
+msgid "Incorrect code"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:62
-msgid "Donate Now"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:79
+msgid "Enable Multi-Factor Authentication"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:63
-msgid ""
-"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:81
+msgid "Logging in will require you to be in possession of your smartphone"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:64
-msgid ""
-"Please indicate if you would like your first name or full name (or nothing) "
-"to appear in our sponsor listing"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:84
+msgid "Your account password"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:65
-msgid "Sponsor"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:86
+msgid "Test"
msgstr ""
-#: ../../extend/addon/hzaddons/donate/donate.php:68
-msgid "Special thanks to: "
+#: ../../Zotlabs/Module/Rmagic.php:46
+msgid "Authentication failed."
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:22
-msgid "Fediquest App"
+#: ../../Zotlabs/Module/Editblock.php:138
+msgid "Edit Block"
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:23
-msgid "A distributed quest for a given word (game)."
+#: ../../Zotlabs/Module/Email_validation.php:37
+msgid "Email Verification Required"
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:24
+#: ../../Zotlabs/Module/Email_validation.php:38
+#, php-format
msgid ""
-"To start a game, enter [fediquest]your_word[/fediquest] somewhere in a "
-"toplevel post."
-msgstr ""
-
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:25
-msgid "Your contacts can post their guess in the comments."
+"A verification token was sent to your email address [%s]. Enter that token "
+"here to complete the account verification step. Please allow a few minutes "
+"for delivery, and check your spam folder if you do not see the message."
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:26
-msgid ""
-"Your channel will evaluate the guess and automatically post the response."
+#: ../../Zotlabs/Module/Email_validation.php:39
+msgid "Resend Email"
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:28
-msgid "Correct letters"
+#: ../../Zotlabs/Module/Email_validation.php:42
+msgid "Validation token"
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:29
-msgid "Letters contained in the word but at the wrong spot"
+#: ../../Zotlabs/Module/Import.php:71
+msgid "Nothing to import."
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:30
-msgid "Letters not contained in the word"
+#: ../../Zotlabs/Module/Import.php:87 ../../Zotlabs/Module/Import.php:101
+msgid "Unable to download data from old server"
msgstr ""
-#: ../../extend/addon/hzaddons/fediquest/fediquest.php:211
-msgid "ERROR: word length is not correct!"
+#: ../../Zotlabs/Module/Import.php:164
+#, php-format
+msgid "Your service plan only allows %d channels."
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/wppost.php:47
-msgid "Post to WordPress"
+#: ../../Zotlabs/Module/Import.php:191
+msgid "No channel. Import failed."
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:30
-msgid "Wordpress Settings saved."
+#: ../../Zotlabs/Module/Import.php:197
+msgid "Channel exists but has been marked removed on this hub. Import failed."
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:67
-msgid "WordPress username"
+#: ../../Zotlabs/Module/Import.php:569
+msgid ""
+"Automatic content and files import was not possible due to API version "
+"incompatiblity. Please import content and files manually!"
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:71
-msgid "WordPress password"
+#: ../../Zotlabs/Module/Import.php:597
+msgid "You must be logged in to use this feature."
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:75
-msgid "WordPress API URL"
+#: ../../Zotlabs/Module/Import.php:604
+msgid "Channel Import"
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:76
-msgid "Typically https://your-blog.tld/xmlrpc.php"
+#: ../../Zotlabs/Module/Import.php:605
+msgid ""
+"Use this form to import an existing channel from a different server/hub. You "
+"may retrieve the channel identity from the old server/hub via the network or "
+"provide an export file."
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:79
-msgid "WordPress blogid"
+#: ../../Zotlabs/Module/Import.php:607
+msgid "Or provide the old server/hub details"
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:80
-msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
+#: ../../Zotlabs/Module/Import.php:609
+msgid "Your old identity address (xyz@example.com)"
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84
-msgid "Post to WordPress by default"
+#: ../../Zotlabs/Module/Import.php:610
+msgid "Your old login email address"
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88
-msgid "Forward comments (requires hubzilla_wp plugin)"
+#: ../../Zotlabs/Module/Import.php:611
+msgid "Your old login password"
msgstr ""
-#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:104
-msgid "Wordpress Post"
+#: ../../Zotlabs/Module/Import.php:612
+msgid "Import your items and files (limited by available memory)"
msgstr ""
-#: ../../extend/addon/hzaddons/authchoose/Mod_Authchoose.php:30
+#: ../../Zotlabs/Module/Import.php:614
msgid ""
-"Allow magic authentication only to websites of your immediate connections"
+"For either option, please choose whether to make this hub your new primary "
+"address, or whether your old location should continue this role. You will be "
+"able to post from either location, but only one can be marked as the primary "
+"location for files, photos, and media."
msgstr ""
-#: ../../extend/addon/hzaddons/authchoose/Mod_Authchoose.php:36
-msgid "Authchoose"
+#: ../../Zotlabs/Module/Import.php:616
+msgid "Make this hub my primary location"
msgstr ""
-#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:48
-msgid "Your channel has been upgraded to $Projectname version"
+#: ../../Zotlabs/Module/Import.php:617
+msgid "Move this channel (disable all previous locations)"
msgstr ""
-#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:50
-msgid "Please have a look at the"
+#: ../../Zotlabs/Module/Import.php:618
+msgid "Use this channel nickname instead of the one provided"
msgstr ""
-#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:52
-msgid "git history"
+#: ../../Zotlabs/Module/Import.php:618
+msgid ""
+"Leave blank to keep your existing channel nickname. You will be randomly "
+"assigned a similar nickname if either name is already allocated on this site."
msgstr ""
-#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:54
-msgid "change log"
+#: ../../Zotlabs/Module/Import.php:620
+msgid ""
+"This process may take several minutes to complete. Please submit the form "
+"only once and leave this page open until finished."
msgstr ""
-#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:55
-msgid "for further info."
+#: ../../Zotlabs/Module/Acl.php:371
+msgid "network"
msgstr ""
-#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:60
-msgid "$Projectname Upgrade Info"
+#: ../../Zotlabs/Module/Filer.php:64
+msgid "Enter a folder name"
msgstr ""
-#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:64
-msgid "Do not show this again"
+#: ../../Zotlabs/Module/Filer.php:64
+msgid "or select an existing folder (doubleclick)"
msgstr ""
-#: ../../extend/addon/hzaddons/hideaside/Mod_Hideaside.php:28
-msgid "Hide Aside App"
+#: ../../Zotlabs/Module/Vote.php:40
+msgid "Poll not found."
msgstr ""
-#: ../../extend/addon/hzaddons/hideaside/Mod_Hideaside.php:29
-msgid "Fade out aside areas after a while when using endless scroll"
+#: ../../Zotlabs/Module/Vote.php:69
+msgid "Invalid response."
msgstr ""
-#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:47
-msgid "text to include in all outgoing posts from this site"
+#: ../../Zotlabs/Module/Vote.php:128
+msgid "Response submitted. Updates may not appear instantly."
msgstr ""
diff --git a/util/precompile_smarty3.php b/util/precompile_smarty3.php
index c977a9680..10b2eadb6 100755
--- a/util/precompile_smarty3.php
+++ b/util/precompile_smarty3.php
@@ -1,27 +1,23 @@
-<?php
-
-
-/**
-* @package util
-*/
-
-#require_once('boot.php');
-#require_once('include/cli_startup.php');
-require_once "library/Smarty/libs/Smarty.class.php";
-
-#cli_startup();
-
-$folders = array_merge(array('view/tpl/'),glob('view/theme/*/tpl/*',GLOB_ONLYDIR));
-
-$s = new Smarty();
-
-$s->setTemplateDir($folders);
-
-$s->setCompileDir(TEMPLATE_BUILD_PATH . '/compiled/');
-$s->setConfigDir(TEMPLATE_BUILD_PATH . '/config/');
-$s->setCacheDir(TEMPLATE_BUILD_PATH . '/cache/');
-
-$s->left_delimiter = "{{";
-$s->right_delimiter = "}}";
-
-$s->compileAllTemplates('.tpl',true); \ No newline at end of file
+<?php
+
+/**
+* @package util
+*/
+
+require_once('boot.php');
+require_once('vendor/smarty/smarty/libs/Smarty.class.php');
+
+$folders = array_merge(array('view/tpl/'), glob('view/theme/*/tpl/*', GLOB_ONLYDIR));
+
+$s = new Smarty();
+
+$s->setTemplateDir($folders);
+
+$s->setCompileDir(TEMPLATE_BUILD_PATH . '/compiled/');
+$s->setConfigDir(TEMPLATE_BUILD_PATH . '/config/');
+$s->setCacheDir(TEMPLATE_BUILD_PATH . '/cache/');
+
+$s->left_delimiter = '{{';
+$s->right_delimiter = '}}';
+
+$s->compileAllTemplates('.tpl', true);
diff --git a/vendor/bin/naturalselection b/vendor/bin/naturalselection
index d13c00bb3..fdb566282 100755
--- a/vendor/bin/naturalselection
+++ b/vendor/bin/naturalselection
@@ -34,4 +34,4 @@ if [ -n "$bashSource" ]; then
fi
fi
-"${dir}/naturalselection" "$@"
+exec "${dir}/naturalselection" "$@"
diff --git a/vendor/bin/sabredav b/vendor/bin/sabredav
index 6e915f637..1caef5d3c 100755
--- a/vendor/bin/sabredav
+++ b/vendor/bin/sabredav
@@ -34,4 +34,4 @@ if [ -n "$bashSource" ]; then
fi
fi
-"${dir}/sabredav" "$@"
+exec "${dir}/sabredav" "$@"
diff --git a/vendor/brick/math/CHANGELOG.md b/vendor/brick/math/CHANGELOG.md
index 17cea8d9f..680fa9ba2 100644
--- a/vendor/brick/math/CHANGELOG.md
+++ b/vendor/brick/math/CHANGELOG.md
@@ -2,6 +2,24 @@
All notable changes to this project will be documented in this file.
+## [0.12.1](https://github.com/brick/math/releases/tag/0.12.1) - 2023-11-29
+
+⚡️ **Performance improvements**
+
+- `BigNumber::of()` is now faster, thanks to [@SebastienDug](https://github.com/SebastienDug) in [#77](https://github.com/brick/math/pull/77).
+
+## [0.12.0](https://github.com/brick/math/releases/tag/0.12.0) - 2023-11-26
+
+💥 **Breaking changes**
+
+- Minimum PHP version is now 8.1
+- `RoundingMode` is now an `enum`; if you're type-hinting rounding modes, you need to type-hint against `RoundingMode` instead of `int` now
+- `BigNumber` classes do not implement the `Serializable` interface anymore (they use the [new custom object serialization mechanism](https://wiki.php.net/rfc/custom_object_serialization))
+- The following breaking changes only affect you if you're creating your own `BigNumber` subclasses:
+ - the return type of `BigNumber::of()` is now `static`
+ - `BigNumber` has a new abstract method `from()`
+ - all `public` and `protected` functions of `BigNumber` are now `final`
+
## [0.11.0](https://github.com/brick/math/releases/tag/0.11.0) - 2023-01-16
💥 **Breaking changes**
diff --git a/vendor/brick/math/composer.json b/vendor/brick/math/composer.json
index ed817bdd0..bd67343ad 100644
--- a/vendor/brick/math/composer.json
+++ b/vendor/brick/math/composer.json
@@ -5,21 +5,26 @@
"keywords": [
"Brick",
"Math",
+ "Mathematics",
"Arbitrary-precision",
"Arithmetic",
"BigInteger",
"BigDecimal",
"BigRational",
- "Bignum"
+ "BigNumber",
+ "Bignum",
+ "Decimal",
+ "Rational",
+ "Integer"
],
"license": "MIT",
"require": {
- "php": "^8.0"
+ "php": "^8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.0",
+ "phpunit/phpunit": "^10.1",
"php-coveralls/php-coveralls": "^2.2",
- "vimeo/psalm": "5.0.0"
+ "vimeo/psalm": "5.16.0"
},
"autoload": {
"psr-4": {
diff --git a/vendor/brick/math/src/BigDecimal.php b/vendor/brick/math/src/BigDecimal.php
index 02fc65612..31d22ab30 100644
--- a/vendor/brick/math/src/BigDecimal.php
+++ b/vendor/brick/math/src/BigDecimal.php
@@ -23,14 +23,14 @@ final class BigDecimal extends BigNumber
* No leading zero must be present.
* No leading minus sign must be present if the value is 0.
*/
- private string $value;
+ private readonly string $value;
/**
* The scale (number of digits after the decimal point) of this decimal number.
*
* This must be zero or more.
*/
- private int $scale;
+ private readonly int $scale;
/**
* Protected constructor. Use a factory method to obtain an instance.
@@ -45,15 +45,11 @@ final class BigDecimal extends BigNumber
}
/**
- * Creates a BigDecimal of the given value.
- *
- * @throws MathException If the value cannot be converted to a BigDecimal.
- *
* @psalm-pure
*/
- public static function of(BigNumber|int|float|string $value) : BigDecimal
+ protected static function from(BigNumber $number): static
{
- return parent::of($value)->toBigDecimal();
+ return $number->toBigDecimal();
}
/**
@@ -223,12 +219,12 @@ final class BigDecimal extends BigNumber
*
* @param BigNumber|int|float|string $that The divisor.
* @param int|null $scale The desired scale, or null to use the scale of this number.
- * @param int $roundingMode An optional rounding mode.
+ * @param RoundingMode $roundingMode An optional rounding mode, defaults to UNNECESSARY.
*
* @throws \InvalidArgumentException If the scale or rounding mode is invalid.
* @throws MathException If the number is invalid, is zero, or rounding was necessary.
*/
- public function dividedBy(BigNumber|int|float|string $that, ?int $scale = null, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
+ public function dividedBy(BigNumber|int|float|string $that, ?int $scale = null, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
{
$that = BigDecimal::of($that);
@@ -324,7 +320,7 @@ final class BigDecimal extends BigNumber
}
/**
- * Returns the quotient of the division of this number by this given one.
+ * Returns the quotient of the division of this number by the given one.
*
* The quotient has a scale of `0`.
*
@@ -349,7 +345,7 @@ final class BigDecimal extends BigNumber
}
/**
- * Returns the remainder of the division of this number by this given one.
+ * Returns the remainder of the division of this number by the given one.
*
* The remainder has a scale of `max($this->scale, $that->scale)`.
*
@@ -384,6 +380,8 @@ final class BigDecimal extends BigNumber
*
* @return BigDecimal[] An array containing the quotient and the remainder.
*
+ * @psalm-return array{BigDecimal, BigDecimal}
+ *
* @throws MathException If the divisor is not a valid decimal number, or is zero.
*/
public function quotientAndRemainder(BigNumber|int|float|string $that) : array
@@ -631,7 +629,7 @@ final class BigDecimal extends BigNumber
return self::newBigRational($numerator, $denominator, false);
}
- public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
+ public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
{
if ($scale === $this->scale) {
return $this;
@@ -694,36 +692,6 @@ final class BigDecimal extends BigNumber
}
/**
- * This method is required by interface Serializable and SHOULD NOT be accessed directly.
- *
- * @internal
- */
- public function serialize() : string
- {
- return $this->value . ':' . $this->scale;
- }
-
- /**
- * This method is only here to implement interface Serializable and cannot be accessed directly.
- *
- * @internal
- * @psalm-suppress RedundantPropertyInitializationCheck
- *
- * @throws \LogicException
- */
- public function unserialize($value) : void
- {
- if (isset($this->value)) {
- throw new \LogicException('unserialize() is an internal function, it must not be called directly.');
- }
-
- [$value, $scale] = \explode(':', $value);
-
- $this->value = $value;
- $this->scale = (int) $scale;
- }
-
- /**
* Puts the internal values of the given decimal numbers on the same scale.
*
* @return array{string, string} The scaled integer values of $x and $y.
diff --git a/vendor/brick/math/src/BigInteger.php b/vendor/brick/math/src/BigInteger.php
index 435679331..73dcc89a2 100644
--- a/vendor/brick/math/src/BigInteger.php
+++ b/vendor/brick/math/src/BigInteger.php
@@ -27,7 +27,7 @@ final class BigInteger extends BigNumber
* No leading zeros must be present.
* No leading minus sign must be present if the number is zero.
*/
- private string $value;
+ private readonly string $value;
/**
* Protected constructor. Use a factory method to obtain an instance.
@@ -40,15 +40,11 @@ final class BigInteger extends BigNumber
}
/**
- * Creates a BigInteger of the given value.
- *
- * @throws MathException If the value cannot be converted to a BigInteger.
- *
* @psalm-pure
*/
- public static function of(BigNumber|int|float|string $value) : BigInteger
+ protected static function from(BigNumber $number): static
{
- return parent::of($value)->toBigInteger();
+ return $number->toBigInteger();
}
/**
@@ -225,9 +221,10 @@ final class BigInteger extends BigNumber
}
if ($randomBytesGenerator === null) {
- $randomBytesGenerator = 'random_bytes';
+ $randomBytesGenerator = random_bytes(...);
}
+ /** @var int<1, max> $byteLength */
$byteLength = \intdiv($numBits - 1, 8) + 1;
$extraBits = ($byteLength * 8 - $numBits);
@@ -429,12 +426,12 @@ final class BigInteger extends BigNumber
* Returns the result of the division of this number by the given one.
*
* @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.
- * @param int $roundingMode An optional rounding mode.
+ * @param RoundingMode $roundingMode An optional rounding mode, defaults to UNNECESSARY.
*
* @throws MathException If the divisor is not a valid number, is not convertible to a BigInteger, is zero,
* or RoundingMode::UNNECESSARY is used and the remainder is not zero.
*/
- public function dividedBy(BigNumber|int|float|string $that, int $roundingMode = RoundingMode::UNNECESSARY) : BigInteger
+ public function dividedBy(BigNumber|int|float|string $that, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigInteger
{
$that = BigInteger::of($that);
@@ -534,6 +531,8 @@ final class BigInteger extends BigNumber
*
* @return BigInteger[] An array containing the quotient and the remainder.
*
+ * @psalm-return array{BigInteger, BigInteger}
+ *
* @throws DivisionByZeroException If the divisor is zero.
*/
public function quotientAndRemainder(BigNumber|int|float|string $that) : array
@@ -888,7 +887,7 @@ final class BigInteger extends BigNumber
return self::newBigRational($this, BigInteger::one(), false);
}
- public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
+ public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
{
return $this->toBigDecimal()->toScale($scale, $roundingMode);
}
@@ -1049,31 +1048,4 @@ final class BigInteger extends BigNumber
$this->value = $data['value'];
}
-
- /**
- * This method is required by interface Serializable and SHOULD NOT be accessed directly.
- *
- * @internal
- */
- public function serialize() : string
- {
- return $this->value;
- }
-
- /**
- * This method is only here to implement interface Serializable and cannot be accessed directly.
- *
- * @internal
- * @psalm-suppress RedundantPropertyInitializationCheck
- *
- * @throws \LogicException
- */
- public function unserialize($value) : void
- {
- if (isset($this->value)) {
- throw new \LogicException('unserialize() is an internal function, it must not be called directly.');
- }
-
- $this->value = $value;
- }
}
diff --git a/vendor/brick/math/src/BigNumber.php b/vendor/brick/math/src/BigNumber.php
index 80146d207..5a0df7837 100644
--- a/vendor/brick/math/src/BigNumber.php
+++ b/vendor/brick/math/src/BigNumber.php
@@ -14,26 +14,29 @@ use Brick\Math\Exception\RoundingNecessaryException;
*
* @psalm-immutable
*/
-abstract class BigNumber implements \Serializable, \JsonSerializable
+abstract class BigNumber implements \JsonSerializable
{
/**
- * The regular expression used to parse integer, decimal and rational numbers.
+ * The regular expression used to parse integer or decimal numbers.
*/
- private const PARSE_REGEXP =
+ private const PARSE_REGEXP_NUMERICAL =
'/^' .
'(?<sign>[\-\+])?' .
- '(?:' .
- '(?:' .
- '(?<integral>[0-9]+)?' .
- '(?<point>\.)?' .
- '(?<fractional>[0-9]+)?' .
- '(?:[eE](?<exponent>[\-\+]?[0-9]+))?' .
- ')|(?:' .
- '(?<numerator>[0-9]+)' .
- '\/?' .
- '(?<denominator>[0-9]+)' .
- ')' .
- ')' .
+ '(?<integral>[0-9]+)?' .
+ '(?<point>\.)?' .
+ '(?<fractional>[0-9]+)?' .
+ '(?:[eE](?<exponent>[\-\+]?[0-9]+))?' .
+ '$/';
+
+ /**
+ * The regular expression used to parse rational numbers.
+ */
+ private const PARSE_REGEXP_RATIONAL =
+ '/^' .
+ '(?<sign>[\-\+])?' .
+ '(?<numerator>[0-9]+)' .
+ '\/?' .
+ '(?<denominator>[0-9]+)' .
'$/';
/**
@@ -53,7 +56,24 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
*
* @psalm-pure
*/
- public static function of(BigNumber|int|float|string $value) : BigNumber
+ final public static function of(BigNumber|int|float|string $value) : static
+ {
+ $value = self::_of($value);
+
+ if (static::class === BigNumber::class) {
+ // https://github.com/vimeo/psalm/issues/10309
+ assert($value instanceof static);
+
+ return $value;
+ }
+
+ return static::from($value);
+ }
+
+ /**
+ * @psalm-pure
+ */
+ private static function _of(BigNumber|int|float|string $value) : BigNumber
{
if ($value instanceof BigNumber) {
return $value;
@@ -63,34 +83,25 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
return new BigInteger((string) $value);
}
- $value = \is_float($value) ? self::floatToString($value) : $value;
-
- $throw = static function() use ($value) : void {
- throw new NumberFormatException(\sprintf(
- 'The given value "%s" does not represent a valid number.',
- $value
- ));
- };
-
- if (\preg_match(self::PARSE_REGEXP, $value, $matches) !== 1) {
- $throw();
+ if (is_float($value)) {
+ $value = (string) $value;
}
- $getMatch = static fn(string $value): ?string => (($matches[$value] ?? '') !== '') ? $matches[$value] : null;
+ if (str_contains($value, '/')) {
+ // Rational number
+ if (\preg_match(self::PARSE_REGEXP_RATIONAL, $value, $matches, PREG_UNMATCHED_AS_NULL) !== 1) {
+ throw NumberFormatException::invalidFormat($value);
+ }
- $sign = $getMatch('sign');
- $numerator = $getMatch('numerator');
- $denominator = $getMatch('denominator');
+ $sign = $matches['sign'];
+ $numerator = $matches['numerator'];
+ $denominator = $matches['denominator'];
- if ($numerator !== null) {
+ assert($numerator !== null);
assert($denominator !== null);
- if ($sign !== null) {
- $numerator = $sign . $numerator;
- }
-
- $numerator = self::cleanUp($numerator);
- $denominator = self::cleanUp($denominator);
+ $numerator = self::cleanUp($sign, $numerator);
+ $denominator = self::cleanUp(null, $denominator);
if ($denominator === '0') {
throw DivisionByZeroException::denominatorMustNotBeZero();
@@ -101,67 +112,62 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
new BigInteger($denominator),
false
);
- }
+ } else {
+ // Integer or decimal number
+ if (\preg_match(self::PARSE_REGEXP_NUMERICAL, $value, $matches, PREG_UNMATCHED_AS_NULL) !== 1) {
+ throw NumberFormatException::invalidFormat($value);
+ }
- $point = $getMatch('point');
- $integral = $getMatch('integral');
- $fractional = $getMatch('fractional');
- $exponent = $getMatch('exponent');
+ $sign = $matches['sign'];
+ $point = $matches['point'];
+ $integral = $matches['integral'];
+ $fractional = $matches['fractional'];
+ $exponent = $matches['exponent'];
- if ($integral === null && $fractional === null) {
- $throw();
- }
+ if ($integral === null && $fractional === null) {
+ throw NumberFormatException::invalidFormat($value);
+ }
- if ($integral === null) {
- $integral = '0';
- }
+ if ($integral === null) {
+ $integral = '0';
+ }
- if ($point !== null || $exponent !== null) {
- $fractional = ($fractional ?? '');
- $exponent = ($exponent !== null) ? (int) $exponent : 0;
+ if ($point !== null || $exponent !== null) {
+ $fractional = ($fractional ?? '');
+ $exponent = ($exponent !== null) ? (int)$exponent : 0;
- if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) {
- throw new NumberFormatException('Exponent too large.');
- }
+ if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) {
+ throw new NumberFormatException('Exponent too large.');
+ }
- $unscaledValue = self::cleanUp(($sign ?? ''). $integral . $fractional);
+ $unscaledValue = self::cleanUp($sign, $integral . $fractional);
- $scale = \strlen($fractional) - $exponent;
+ $scale = \strlen($fractional) - $exponent;
- if ($scale < 0) {
- if ($unscaledValue !== '0') {
- $unscaledValue .= \str_repeat('0', - $scale);
+ if ($scale < 0) {
+ if ($unscaledValue !== '0') {
+ $unscaledValue .= \str_repeat('0', -$scale);
+ }
+ $scale = 0;
}
- $scale = 0;
- }
- return new BigDecimal($unscaledValue, $scale);
- }
+ return new BigDecimal($unscaledValue, $scale);
+ }
- $integral = self::cleanUp(($sign ?? '') . $integral);
+ $integral = self::cleanUp($sign, $integral);
- return new BigInteger($integral);
+ return new BigInteger($integral);
+ }
}
/**
- * Safely converts float to string, avoiding locale-dependent issues.
+ * Overridden by subclasses to convert a BigNumber to an instance of the subclass.
*
- * @see https://github.com/brick/math/pull/20
+ * @throws MathException If the value cannot be converted.
*
* @psalm-pure
- * @psalm-suppress ImpureFunctionCall
*/
- private static function floatToString(float $float) : string
- {
- $currentLocale = \setlocale(LC_NUMERIC, '0');
- \setlocale(LC_NUMERIC, 'C');
-
- $result = (string) $float;
-
- \setlocale(LC_NUMERIC, $currentLocale);
-
- return $result;
- }
+ abstract protected static function from(BigNumber $number): static;
/**
* Proxy method to access BigInteger's protected constructor from sibling classes.
@@ -169,7 +175,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @internal
* @psalm-pure
*/
- protected function newBigInteger(string $value) : BigInteger
+ final protected function newBigInteger(string $value) : BigInteger
{
return new BigInteger($value);
}
@@ -180,7 +186,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @internal
* @psalm-pure
*/
- protected function newBigDecimal(string $value, int $scale = 0) : BigDecimal
+ final protected function newBigDecimal(string $value, int $scale = 0) : BigDecimal
{
return new BigDecimal($value, $scale);
}
@@ -191,7 +197,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @internal
* @psalm-pure
*/
- protected function newBigRational(BigInteger $numerator, BigInteger $denominator, bool $checkDenominator) : BigRational
+ final protected function newBigRational(BigInteger $numerator, BigInteger $denominator, bool $checkDenominator) : BigRational
{
return new BigRational($numerator, $denominator, $checkDenominator);
}
@@ -205,11 +211,9 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @throws \InvalidArgumentException If no values are given.
* @throws MathException If an argument is not valid.
*
- * @psalm-suppress LessSpecificReturnStatement
- * @psalm-suppress MoreSpecificReturnType
* @psalm-pure
*/
- public static function min(BigNumber|int|float|string ...$values) : static
+ final public static function min(BigNumber|int|float|string ...$values) : static
{
$min = null;
@@ -237,11 +241,9 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
* @throws \InvalidArgumentException If no values are given.
* @throws MathException If an argument is not valid.
*
- * @psalm-suppress LessSpecificReturnStatement
- * @psalm-suppress MoreSpecificReturnType
* @psalm-pure
*/
- public static function max(BigNumber|int|float|string ...$values) : static
+ final public static function max(BigNumber|int|float|string ...$values) : static
{
$max = null;
@@ -271,7 +273,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
*
* @psalm-pure
*/
- public static function sum(BigNumber|int|float|string ...$values) : static
+ final public static function sum(BigNumber|int|float|string ...$values) : static
{
/** @var static|null $sum */
$sum = null;
@@ -323,37 +325,28 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
}
/**
- * Removes optional leading zeros and + sign from the given number.
+ * Removes optional leading zeros and applies sign.
*
- * @param string $number The number, validated as a non-empty string of digits with optional leading sign.
+ * @param string|null $sign The sign, '+' or '-', optional. Null is allowed for convenience and treated as '+'.
+ * @param string $number The number, validated as a non-empty string of digits.
*
* @psalm-pure
*/
- private static function cleanUp(string $number) : string
+ private static function cleanUp(string|null $sign, string $number) : string
{
- $firstChar = $number[0];
-
- if ($firstChar === '+' || $firstChar === '-') {
- $number = \substr($number, 1);
- }
-
$number = \ltrim($number, '0');
if ($number === '') {
return '0';
}
- if ($firstChar === '-') {
- return '-' . $number;
- }
-
- return $number;
+ return $sign === '-' ? '-' . $number : $number;
}
/**
* Checks if this number is equal to the given one.
*/
- public function isEqualTo(BigNumber|int|float|string $that) : bool
+ final public function isEqualTo(BigNumber|int|float|string $that) : bool
{
return $this->compareTo($that) === 0;
}
@@ -361,7 +354,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is strictly lower than the given one.
*/
- public function isLessThan(BigNumber|int|float|string $that) : bool
+ final public function isLessThan(BigNumber|int|float|string $that) : bool
{
return $this->compareTo($that) < 0;
}
@@ -369,7 +362,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is lower than or equal to the given one.
*/
- public function isLessThanOrEqualTo(BigNumber|int|float|string $that) : bool
+ final public function isLessThanOrEqualTo(BigNumber|int|float|string $that) : bool
{
return $this->compareTo($that) <= 0;
}
@@ -377,7 +370,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is strictly greater than the given one.
*/
- public function isGreaterThan(BigNumber|int|float|string $that) : bool
+ final public function isGreaterThan(BigNumber|int|float|string $that) : bool
{
return $this->compareTo($that) > 0;
}
@@ -385,7 +378,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is greater than or equal to the given one.
*/
- public function isGreaterThanOrEqualTo(BigNumber|int|float|string $that) : bool
+ final public function isGreaterThanOrEqualTo(BigNumber|int|float|string $that) : bool
{
return $this->compareTo($that) >= 0;
}
@@ -393,7 +386,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number equals zero.
*/
- public function isZero() : bool
+ final public function isZero() : bool
{
return $this->getSign() === 0;
}
@@ -401,7 +394,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is strictly negative.
*/
- public function isNegative() : bool
+ final public function isNegative() : bool
{
return $this->getSign() < 0;
}
@@ -409,7 +402,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is negative or zero.
*/
- public function isNegativeOrZero() : bool
+ final public function isNegativeOrZero() : bool
{
return $this->getSign() <= 0;
}
@@ -417,7 +410,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is strictly positive.
*/
- public function isPositive() : bool
+ final public function isPositive() : bool
{
return $this->getSign() > 0;
}
@@ -425,7 +418,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Checks if this number is positive or zero.
*/
- public function isPositiveOrZero() : bool
+ final public function isPositiveOrZero() : bool
{
return $this->getSign() >= 0;
}
@@ -433,6 +426,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Returns the sign of this number.
*
+ * @psalm-return -1|0|1
+ *
* @return int -1 if the number is negative, 0 if zero, 1 if positive.
*/
abstract public function getSign() : int;
@@ -440,7 +435,9 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Compares this number to the given one.
*
- * @return int [-1,0,1] If `$this` is lower than, equal to, or greater than `$that`.
+ * @psalm-return -1|0|1
+ *
+ * @return int -1 if `$this` is lower than, 0 if equal to, 1 if greater than `$that`.
*
* @throws MathException If the number is not valid.
*/
@@ -468,13 +465,13 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
/**
* Converts this number to a BigDecimal with the given scale, using rounding if necessary.
*
- * @param int $scale The scale of the resulting `BigDecimal`.
- * @param int $roundingMode A `RoundingMode` constant.
+ * @param int $scale The scale of the resulting `BigDecimal`.
+ * @param RoundingMode $roundingMode An optional rounding mode, defaults to UNNECESSARY.
*
* @throws RoundingNecessaryException If this number cannot be converted to the given scale without rounding.
* This only applies when RoundingMode::UNNECESSARY is used.
*/
- abstract public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal;
+ abstract public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal;
/**
* Returns the exact value of this number as a native integer.
@@ -505,7 +502,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable
*/
abstract public function __toString() : string;
- public function jsonSerialize() : string
+ final public function jsonSerialize() : string
{
return $this->__toString();
}
diff --git a/vendor/brick/math/src/BigRational.php b/vendor/brick/math/src/BigRational.php
index 31f2904fa..fc3060ede 100644
--- a/vendor/brick/math/src/BigRational.php
+++ b/vendor/brick/math/src/BigRational.php
@@ -21,12 +21,12 @@ final class BigRational extends BigNumber
/**
* The numerator.
*/
- private BigInteger $numerator;
+ private readonly BigInteger $numerator;
/**
* The denominator. Always strictly positive.
*/
- private BigInteger $denominator;
+ private readonly BigInteger $denominator;
/**
* Protected constructor. Use a factory method to obtain an instance.
@@ -55,15 +55,11 @@ final class BigRational extends BigNumber
}
/**
- * Creates a BigRational of the given value.
- *
- * @throws MathException If the value cannot be converted to a BigRational.
- *
* @psalm-pure
*/
- public static function of(BigNumber|int|float|string $value) : BigRational
+ protected static function from(BigNumber $number): static
{
- return parent::of($value)->toBigRational();
+ return $number->toBigRational();
}
/**
@@ -181,6 +177,8 @@ final class BigRational extends BigNumber
* Returns the quotient and remainder of the division of the numerator by the denominator.
*
* @return BigInteger[]
+ *
+ * @psalm-return array{BigInteger, BigInteger}
*/
public function quotientAndRemainder() : array
{
@@ -353,7 +351,7 @@ final class BigRational extends BigNumber
return $this;
}
- public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
+ public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
{
return $this->numerator->toBigDecimal()->dividedBy($this->denominator, $scale, $roundingMode);
}
@@ -412,34 +410,4 @@ final class BigRational extends BigNumber
$this->numerator = $data['numerator'];
$this->denominator = $data['denominator'];
}
-
- /**
- * This method is required by interface Serializable and SHOULD NOT be accessed directly.
- *
- * @internal
- */
- public function serialize() : string
- {
- return $this->numerator . '/' . $this->denominator;
- }
-
- /**
- * This method is only here to implement interface Serializable and cannot be accessed directly.
- *
- * @internal
- * @psalm-suppress RedundantPropertyInitializationCheck
- *
- * @throws \LogicException
- */
- public function unserialize($value) : void
- {
- if (isset($this->numerator)) {
- throw new \LogicException('unserialize() is an internal function, it must not be called directly.');
- }
-
- [$numerator, $denominator] = \explode('/', $value);
-
- $this->numerator = BigInteger::of($numerator);
- $this->denominator = BigInteger::of($denominator);
- }
}
diff --git a/vendor/brick/math/src/Exception/NumberFormatException.php b/vendor/brick/math/src/Exception/NumberFormatException.php
index d9cf6ff5f..119cadbb4 100644
--- a/vendor/brick/math/src/Exception/NumberFormatException.php
+++ b/vendor/brick/math/src/Exception/NumberFormatException.php
@@ -9,6 +9,14 @@ namespace Brick\Math\Exception;
*/
class NumberFormatException extends MathException
{
+ public static function invalidFormat(string $value) : self
+ {
+ return new self(\sprintf(
+ 'The given value "%s" does not represent a valid number.',
+ $value,
+ ));
+ }
+
/**
* @param string $char The failing character.
*
@@ -28,6 +36,6 @@ class NumberFormatException extends MathException
$char = '"' . $char . '"';
}
- return new self(sprintf('Char %s is not a valid character in the given alphabet.', $char));
+ return new self(\sprintf('Char %s is not a valid character in the given alphabet.', $char));
}
}
diff --git a/vendor/brick/math/src/Internal/Calculator.php b/vendor/brick/math/src/Internal/Calculator.php
index b8cecda96..44dd66924 100644
--- a/vendor/brick/math/src/Internal/Calculator.php
+++ b/vendor/brick/math/src/Internal/Calculator.php
@@ -25,7 +25,7 @@ abstract class Calculator
/**
* The maximum exponent value allowed for the pow() method.
*/
- public const MAX_POWER = 1000000;
+ public const MAX_POWER = 1_000_000;
/**
* The alphabet for converting from and to base 2 to 36, lowercase.
@@ -128,7 +128,9 @@ abstract class Calculator
/**
* Compares two numbers.
*
- * @return int [-1, 0, 1] If the first number is less than, equal to, or greater than the second number.
+ * @psalm-return -1|0|1
+ *
+ * @return int -1 if the first number is less than, 0 if equal to, 1 if greater than the second number.
*/
final public function cmp(string $a, string $b) : int
{
@@ -428,16 +430,16 @@ abstract class Calculator
*
* Rounding is performed when the remainder of the division is not zero.
*
- * @param string $a The dividend.
- * @param string $b The divisor, must not be zero.
- * @param int $roundingMode The rounding mode.
+ * @param string $a The dividend.
+ * @param string $b The divisor, must not be zero.
+ * @param RoundingMode $roundingMode The rounding mode.
*
* @throws \InvalidArgumentException If the rounding mode is invalid.
* @throws RoundingNecessaryException If RoundingMode::UNNECESSARY is provided but rounding is necessary.
*
* @psalm-suppress ImpureFunctionCall
*/
- final public function divRound(string $a, string $b, int $roundingMode) : string
+ final public function divRound(string $a, string $b, RoundingMode $roundingMode) : string
{
[$quotient, $remainder] = $this->divQR($a, $b);
@@ -571,27 +573,17 @@ abstract class Calculator
$bBin = $this->twosComplement($bBin);
}
- switch ($operator) {
- case 'and':
- $value = $aBin & $bBin;
- $negative = ($aNeg and $bNeg);
- break;
-
- case 'or':
- $value = $aBin | $bBin;
- $negative = ($aNeg or $bNeg);
- break;
-
- case 'xor':
- $value = $aBin ^ $bBin;
- $negative = ($aNeg xor $bNeg);
- break;
+ $value = match ($operator) {
+ 'and' => $aBin & $bBin,
+ 'or' => $aBin | $bBin,
+ 'xor' => $aBin ^ $bBin,
+ };
- // @codeCoverageIgnoreStart
- default:
- throw new \InvalidArgumentException('Invalid bitwise operator.');
- // @codeCoverageIgnoreEnd
- }
+ $negative = match ($operator) {
+ 'and' => $aNeg and $bNeg,
+ 'or' => $aNeg or $bNeg,
+ 'xor' => $aNeg xor $bNeg,
+ };
if ($negative) {
$value = $this->twosComplement($value);
diff --git a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php
index 5457a3c98..067085e21 100644
--- a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php
+++ b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php
@@ -35,10 +35,6 @@ class BcMathCalculator extends Calculator
return \bcdiv($a, $b, 0);
}
- /**
- * @psalm-suppress InvalidNullableReturnType
- * @psalm-suppress NullableReturnStatement
- */
public function divR(string $a, string $b) : string
{
return \bcmod($a, $b, 0);
@@ -49,8 +45,6 @@ class BcMathCalculator extends Calculator
$q = \bcdiv($a, $b, 0);
$r = \bcmod($a, $b, 0);
- assert($r !== null);
-
return [$q, $r];
}
@@ -64,10 +58,6 @@ class BcMathCalculator extends Calculator
return \bcpowmod($base, $exp, $mod, 0);
}
- /**
- * @psalm-suppress InvalidNullableReturnType
- * @psalm-suppress NullableReturnStatement
- */
public function sqrt(string $n) : string
{
return \bcsqrt($n, 0);
diff --git a/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php b/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php
index 7c679d24d..6acd06382 100644
--- a/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php
+++ b/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php
@@ -23,25 +23,18 @@ class NativeCalculator extends Calculator
* Example: 32-bit: max number 1,999,999,999 (9 digits + carry)
* 64-bit: max number 1,999,999,999,999,999,999 (18 digits + carry)
*/
- private int $maxDigits;
+ private readonly int $maxDigits;
/**
* @codeCoverageIgnore
*/
public function __construct()
{
- switch (PHP_INT_SIZE) {
- case 4:
- $this->maxDigits = 9;
- break;
-
- case 8:
- $this->maxDigits = 18;
- break;
-
- default:
- throw new \RuntimeException('The platform is not 32-bit or 64-bit as expected.');
- }
+ $this->maxDigits = match (PHP_INT_SIZE) {
+ 4 => 9,
+ 8 => 18,
+ default => throw new \RuntimeException('The platform is not 32-bit or 64-bit as expected.')
+ };
}
public function add(string $a, string $b) : string
@@ -161,10 +154,8 @@ class NativeCalculator extends Calculator
if (is_int($nb)) {
// the only division that may overflow is PHP_INT_MIN / -1,
// which cannot happen here as we've already handled a divisor of -1 above.
+ $q = intdiv($na, $nb);
$r = $na % $nb;
- $q = ($na - $r) / $nb;
-
- assert(is_int($q));
return [
(string) $q,
@@ -536,7 +527,7 @@ class NativeCalculator extends Calculator
/**
* Compares two non-signed large numbers.
*
- * @return int [-1, 0, 1]
+ * @psalm-return -1|0|1
*/
private function doCmp(string $a, string $b) : int
{
@@ -549,7 +540,7 @@ class NativeCalculator extends Calculator
return $cmp;
}
- return \strcmp($a, $b) <=> 0; // enforce [-1, 0, 1]
+ return \strcmp($a, $b) <=> 0; // enforce -1|0|1
}
/**
diff --git a/vendor/brick/math/src/RoundingMode.php b/vendor/brick/math/src/RoundingMode.php
index 06936d8db..e8ee6a8b4 100644
--- a/vendor/brick/math/src/RoundingMode.php
+++ b/vendor/brick/math/src/RoundingMode.php
@@ -13,24 +13,15 @@ namespace Brick\Math;
* regardless the digits' contribution to the value of the number. In other words, considered
* as a numerical value, the discarded fraction could have an absolute value greater than one.
*/
-final class RoundingMode
+enum RoundingMode
{
/**
- * Private constructor. This class is not instantiable.
- *
- * @codeCoverageIgnore
- */
- private function __construct()
- {
- }
-
- /**
* Asserts that the requested operation has an exact result, hence no rounding is necessary.
*
* If this rounding mode is specified on an operation that yields a result that
* cannot be represented at the requested scale, a RoundingNecessaryException is thrown.
*/
- public const UNNECESSARY = 0;
+ case UNNECESSARY;
/**
* Rounds away from zero.
@@ -38,7 +29,7 @@ final class RoundingMode
* Always increments the digit prior to a nonzero discarded fraction.
* Note that this rounding mode never decreases the magnitude of the calculated value.
*/
- public const UP = 1;
+ case UP;
/**
* Rounds towards zero.
@@ -46,7 +37,7 @@ final class RoundingMode
* Never increments the digit prior to a discarded fraction (i.e., truncates).
* Note that this rounding mode never increases the magnitude of the calculated value.
*/
- public const DOWN = 2;
+ case DOWN;
/**
* Rounds towards positive infinity.
@@ -54,7 +45,7 @@ final class RoundingMode
* If the result is positive, behaves as for UP; if negative, behaves as for DOWN.
* Note that this rounding mode never decreases the calculated value.
*/
- public const CEILING = 3;
+ case CEILING;
/**
* Rounds towards negative infinity.
@@ -62,7 +53,7 @@ final class RoundingMode
* If the result is positive, behave as for DOWN; if negative, behave as for UP.
* Note that this rounding mode never increases the calculated value.
*/
- public const FLOOR = 4;
+ case FLOOR;
/**
* Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round up.
@@ -70,28 +61,28 @@ final class RoundingMode
* Behaves as for UP if the discarded fraction is >= 0.5; otherwise, behaves as for DOWN.
* Note that this is the rounding mode commonly taught at school.
*/
- public const HALF_UP = 5;
+ case HALF_UP;
/**
* Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round down.
*
* Behaves as for UP if the discarded fraction is > 0.5; otherwise, behaves as for DOWN.
*/
- public const HALF_DOWN = 6;
+ case HALF_DOWN;
/**
* Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards positive infinity.
*
* If the result is positive, behaves as for HALF_UP; if negative, behaves as for HALF_DOWN.
*/
- public const HALF_CEILING = 7;
+ case HALF_CEILING;
/**
* Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards negative infinity.
*
* If the result is positive, behaves as for HALF_DOWN; if negative, behaves as for HALF_UP.
*/
- public const HALF_FLOOR = 8;
+ case HALF_FLOOR;
/**
* Rounds towards the "nearest neighbor" unless both neighbors are equidistant, in which case rounds towards the even neighbor.
@@ -103,5 +94,5 @@ final class RoundingMode
* cumulative error when applied repeatedly over a sequence of calculations.
* It is sometimes known as "Banker's rounding", and is chiefly used in the USA.
*/
- public const HALF_EVEN = 9;
+ case HALF_EVEN;
}
diff --git a/vendor/chillerlan/php-qrcode/.github/FUNDING.yml b/vendor/chillerlan/php-qrcode/.github/FUNDING.yml
deleted file mode 100644
index 16a077f52..000000000
--- a/vendor/chillerlan/php-qrcode/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-ko_fi: codemasher
-custom: "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4"
diff --git a/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml b/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml
deleted file mode 100644
index 9b26bb201..000000000
--- a/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml
+++ /dev/null
@@ -1,82 +0,0 @@
-# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
-# https://github.com/sebastianbergmann/phpunit/blob/master/.github/workflows/ci.yml
-
-on:
- push:
- branches:
- - v4.3.x
- pull_request:
- branches:
- - v4.3.x
-
-name: "Continuous Integration"
-
-jobs:
-
- static-code-analysis:
- name: "Static Code Analysis"
-
- runs-on: ubuntu-latest
-
- env:
- PHAN_ALLOW_XDEBUG: 0
- PHAN_DISABLE_XDEBUG_WARN: 1
-
- steps:
- - name: "Checkout"
- uses: actions/checkout@v3
-
- - name: "Install PHP"
- uses: shivammathur/setup-php@v2
- with:
- php-version: "7.4"
- coverage: none
- tools: pecl
- extensions: ast, gd, imagick, json, mbstring
-
- - name: "Update dependencies with composer"
- run: composer update --no-interaction --no-ansi --no-progress --no-suggest
-
- - name: "Run phan"
- run: php vendor/bin/phan
-
- tests:
- name: "Unit Tests"
-
- runs-on: ${{ matrix.os }}
-
- strategy:
- fail-fast: false
- matrix:
- os:
- - ubuntu-latest
- - windows-latest
- php-version:
- - "7.4"
- - "8.0"
- - "8.1"
-
- steps:
-# - name: "Configure git to avoid issues with line endings"
-# if: matrix.os == 'windows-latest'
-# run: git config --global core.autocrlf false
-
- - name: "Checkout"
- uses: actions/checkout@v3
-
- - name: "Install PHP with extensions"
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php-version }}
- coverage: pcov
- tools: pecl
- extensions: gd, imagick, json, mbstring
-
- - name: "Install dependencies with composer"
- run: composer update --no-ansi --no-interaction --no-progress --no-suggest
-
- - name: "Run tests with phpunit"
- run: php vendor/bin/phpunit --configuration=phpunit.xml
-
- - name: "Send code coverage report to Codecov.io"
- uses: codecov/codecov-action@v3
diff --git a/vendor/chillerlan/php-qrcode/.gitignore b/vendor/chillerlan/php-qrcode/.gitignore
deleted file mode 100644
index 8f74009cd..000000000
--- a/vendor/chillerlan/php-qrcode/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.build/*
-.idea/*
-docs/*
-vendor/*
-composer.lock
diff --git a/vendor/chillerlan/php-qrcode/.phan/config.php b/vendor/chillerlan/php-qrcode/.phan/config.php
deleted file mode 100644
index 442d5f7d5..000000000
--- a/vendor/chillerlan/php-qrcode/.phan/config.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * This configuration will be read and overlaid on top of the
- * default configuration. Command-line arguments will be applied
- * after this file is read.
- */
-return [
- // Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
- // `'7.4'`, `null`.
- // If this is set to `null`,
- // then Phan assumes the PHP version which is closest to the minor version
- // of the php executable used to execute Phan.
- //
- // Note that the **only** effect of choosing `'5.6'` is to infer
- // that functions removed in php 7.0 exist.
- // (See `backward_compatibility_checks` for additional options)
- 'target_php_version' => '7.4',
-
- // A list of directories that should be parsed for class and
- // method information. After excluding the directories
- // defined in exclude_analysis_directory_list, the remaining
- // files will be statically analyzed for errors.
- //
- // Thus, both first-party and third-party code being used by
- // your application should be included in this list.
- 'directory_list' => [
- 'examples',
- 'src',
- 'tests',
- 'vendor',
- '.phan/stubs'
- ],
-
- // A regex used to match every file name that you want to
- // exclude from parsing. Actual value will exclude every
- // "test", "tests", "Test" and "Tests" folders found in
- // "vendor/" directory.
- 'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',
-
- // A directory list that defines files that will be excluded
- // from static analysis, but whose class and method
- // information should be included.
- //
- // Generally, you'll want to include the directories for
- // third-party code (such as "vendor/") in this list.
- //
- // n.b.: If you'd like to parse but not analyze 3rd
- // party code, directories containing that code
- // should be added to both the `directory_list`
- // and `exclude_analysis_directory_list` arrays.
- 'exclude_analysis_directory_list' => [
- 'vendor/',
- '.phan/stubs'
- ],
-];
diff --git a/vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php b/vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php
deleted file mode 100644
index 508d2018f..000000000
--- a/vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php
+++ /dev/null
@@ -1,6744 +0,0 @@
-<?php
-
-// Start of imagick v.3.4.3
-
-class ImagickException extends Exception {
-}
-
-class ImagickDrawException extends Exception {
-}
-
-class ImagickPixelIteratorException extends Exception {
-}
-
-class ImagickPixelException extends Exception {
-}
-
-/**
- * @method Imagick clone() (PECL imagick 2.0.0)<br/>Makes an exact copy of the Imagick object
- * @link https://php.net/manual/en/class.imagick.php
- */
-class Imagick implements Iterator, Countable {
- const COLOR_BLACK = 11;
- const COLOR_BLUE = 12;
- const COLOR_CYAN = 13;
- const COLOR_GREEN = 14;
- const COLOR_RED = 15;
- const COLOR_YELLOW = 16;
- const COLOR_MAGENTA = 17;
- const COLOR_OPACITY = 18;
- const COLOR_ALPHA = 19;
- const COLOR_FUZZ = 20;
- const IMAGICK_EXTNUM = 30403;
- const IMAGICK_EXTVER = "3.4.3";
- const QUANTUM_RANGE = 65535;
- const USE_ZEND_MM = 0;
- const COMPOSITE_DEFAULT = 40;
- const COMPOSITE_UNDEFINED = 0;
- const COMPOSITE_NO = 1;
- const COMPOSITE_ADD = 2;
- const COMPOSITE_ATOP = 3;
- const COMPOSITE_BLEND = 4;
- const COMPOSITE_BUMPMAP = 5;
- const COMPOSITE_CLEAR = 7;
- const COMPOSITE_COLORBURN = 8;
- const COMPOSITE_COLORDODGE = 9;
- const COMPOSITE_COLORIZE = 10;
- const COMPOSITE_COPYBLACK = 11;
- const COMPOSITE_COPYBLUE = 12;
- const COMPOSITE_COPY = 13;
- const COMPOSITE_COPYCYAN = 14;
- const COMPOSITE_COPYGREEN = 15;
- const COMPOSITE_COPYMAGENTA = 16;
- const COMPOSITE_COPYOPACITY = 17;
- const COMPOSITE_COPYRED = 18;
- const COMPOSITE_COPYYELLOW = 19;
- const COMPOSITE_DARKEN = 20;
- const COMPOSITE_DSTATOP = 21;
- const COMPOSITE_DST = 22;
- const COMPOSITE_DSTIN = 23;
- const COMPOSITE_DSTOUT = 24;
- const COMPOSITE_DSTOVER = 25;
- const COMPOSITE_DIFFERENCE = 26;
- const COMPOSITE_DISPLACE = 27;
- const COMPOSITE_DISSOLVE = 28;
- const COMPOSITE_EXCLUSION = 29;
- const COMPOSITE_HARDLIGHT = 30;
- const COMPOSITE_HUE = 31;
- const COMPOSITE_IN = 32;
- const COMPOSITE_LIGHTEN = 33;
- const COMPOSITE_LUMINIZE = 35;
- const COMPOSITE_MINUS = 36;
- const COMPOSITE_MODULATE = 37;
- const COMPOSITE_MULTIPLY = 38;
- const COMPOSITE_OUT = 39;
- const COMPOSITE_OVER = 40;
- const COMPOSITE_OVERLAY = 41;
- const COMPOSITE_PLUS = 42;
- const COMPOSITE_REPLACE = 43;
- const COMPOSITE_SATURATE = 44;
- const COMPOSITE_SCREEN = 45;
- const COMPOSITE_SOFTLIGHT = 46;
- const COMPOSITE_SRCATOP = 47;
- const COMPOSITE_SRC = 48;
- const COMPOSITE_SRCIN = 49;
- const COMPOSITE_SRCOUT = 50;
- const COMPOSITE_SRCOVER = 51;
- const COMPOSITE_SUBTRACT = 52;
- const COMPOSITE_THRESHOLD = 53;
- const COMPOSITE_XOR = 54;
- const COMPOSITE_CHANGEMASK = 6;
- const COMPOSITE_LINEARLIGHT = 34;
- const COMPOSITE_DIVIDE = 55;
- const COMPOSITE_DISTORT = 56;
- const COMPOSITE_BLUR = 57;
- const COMPOSITE_PEGTOPLIGHT = 58;
- const COMPOSITE_VIVIDLIGHT = 59;
- const COMPOSITE_PINLIGHT = 60;
- const COMPOSITE_LINEARDODGE = 61;
- const COMPOSITE_LINEARBURN = 62;
- const COMPOSITE_MATHEMATICS = 63;
- const COMPOSITE_MODULUSADD = 2;
- const COMPOSITE_MODULUSSUBTRACT = 52;
- const COMPOSITE_MINUSDST = 36;
- const COMPOSITE_DIVIDEDST = 55;
- const COMPOSITE_DIVIDESRC = 64;
- const COMPOSITE_MINUSSRC = 65;
- const COMPOSITE_DARKENINTENSITY = 66;
- const COMPOSITE_LIGHTENINTENSITY = 67;
- const MONTAGEMODE_FRAME = 1;
- const MONTAGEMODE_UNFRAME = 2;
- const MONTAGEMODE_CONCATENATE = 3;
- const STYLE_NORMAL = 1;
- const STYLE_ITALIC = 2;
- const STYLE_OBLIQUE = 3;
- const STYLE_ANY = 4;
- const FILTER_UNDEFINED = 0;
- const FILTER_POINT = 1;
- const FILTER_BOX = 2;
- const FILTER_TRIANGLE = 3;
- const FILTER_HERMITE = 4;
- const FILTER_HANNING = 5;
- const FILTER_HAMMING = 6;
- const FILTER_BLACKMAN = 7;
- const FILTER_GAUSSIAN = 8;
- const FILTER_QUADRATIC = 9;
- const FILTER_CUBIC = 10;
- const FILTER_CATROM = 11;
- const FILTER_MITCHELL = 12;
- const FILTER_LANCZOS = 22;
- const FILTER_BESSEL = 13;
- const FILTER_SINC = 14;
- const FILTER_KAISER = 16;
- const FILTER_WELSH = 17;
- const FILTER_PARZEN = 18;
- const FILTER_LAGRANGE = 21;
- const FILTER_SENTINEL = 31;
- const FILTER_BOHMAN = 19;
- const FILTER_BARTLETT = 20;
- const FILTER_JINC = 13;
- const FILTER_SINCFAST = 15;
- const FILTER_ROBIDOUX = 26;
- const FILTER_LANCZOSSHARP = 23;
- const FILTER_LANCZOS2 = 24;
- const FILTER_LANCZOS2SHARP = 25;
- const FILTER_ROBIDOUXSHARP = 27;
- const FILTER_COSINE = 28;
- const FILTER_SPLINE = 29;
- const FILTER_LANCZOSRADIUS = 30;
- const IMGTYPE_UNDEFINED = 0;
- const IMGTYPE_BILEVEL = 1;
- const IMGTYPE_GRAYSCALE = 2;
- const IMGTYPE_GRAYSCALEMATTE = 3;
- const IMGTYPE_PALETTE = 4;
- const IMGTYPE_PALETTEMATTE = 5;
- const IMGTYPE_TRUECOLOR = 6;
- const IMGTYPE_TRUECOLORMATTE = 7;
- const IMGTYPE_COLORSEPARATION = 8;
- const IMGTYPE_COLORSEPARATIONMATTE = 9;
- const IMGTYPE_OPTIMIZE = 10;
- const IMGTYPE_PALETTEBILEVELMATTE = 11;
- const RESOLUTION_UNDEFINED = 0;
- const RESOLUTION_PIXELSPERINCH = 1;
- const RESOLUTION_PIXELSPERCENTIMETER = 2;
- const COMPRESSION_UNDEFINED = 0;
- const COMPRESSION_NO = 1;
- const COMPRESSION_BZIP = 2;
- const COMPRESSION_FAX = 6;
- const COMPRESSION_GROUP4 = 7;
- const COMPRESSION_JPEG = 8;
- const COMPRESSION_JPEG2000 = 9;
- const COMPRESSION_LOSSLESSJPEG = 10;
- const COMPRESSION_LZW = 11;
- const COMPRESSION_RLE = 12;
- const COMPRESSION_ZIP = 13;
- const COMPRESSION_DXT1 = 3;
- const COMPRESSION_DXT3 = 4;
- const COMPRESSION_DXT5 = 5;
- const COMPRESSION_ZIPS = 14;
- const COMPRESSION_PIZ = 15;
- const COMPRESSION_PXR24 = 16;
- const COMPRESSION_B44 = 17;
- const COMPRESSION_B44A = 18;
- const COMPRESSION_LZMA = 19;
- const COMPRESSION_JBIG1 = 20;
- const COMPRESSION_JBIG2 = 21;
- const PAINT_POINT = 1;
- const PAINT_REPLACE = 2;
- const PAINT_FLOODFILL = 3;
- const PAINT_FILLTOBORDER = 4;
- const PAINT_RESET = 5;
- const GRAVITY_NORTHWEST = 1;
- const GRAVITY_NORTH = 2;
- const GRAVITY_NORTHEAST = 3;
- const GRAVITY_WEST = 4;
- const GRAVITY_CENTER = 5;
- const GRAVITY_EAST = 6;
- const GRAVITY_SOUTHWEST = 7;
- const GRAVITY_SOUTH = 8;
- const GRAVITY_SOUTHEAST = 9;
- const GRAVITY_FORGET = 0;
- const GRAVITY_STATIC = 10;
- const STRETCH_NORMAL = 1;
- const STRETCH_ULTRACONDENSED = 2;
- const STRETCH_EXTRACONDENSED = 3;
- const STRETCH_CONDENSED = 4;
- const STRETCH_SEMICONDENSED = 5;
- const STRETCH_SEMIEXPANDED = 6;
- const STRETCH_EXPANDED = 7;
- const STRETCH_EXTRAEXPANDED = 8;
- const STRETCH_ULTRAEXPANDED = 9;
- const STRETCH_ANY = 10;
- const ALIGN_UNDEFINED = 0;
- const ALIGN_LEFT = 1;
- const ALIGN_CENTER = 2;
- const ALIGN_RIGHT = 3;
- const DECORATION_NO = 1;
- const DECORATION_UNDERLINE = 2;
- const DECORATION_OVERLINE = 3;
- const DECORATION_LINETROUGH = 4;
- const DECORATION_LINETHROUGH = 4;
- const NOISE_UNIFORM = 1;
- const NOISE_GAUSSIAN = 2;
- const NOISE_MULTIPLICATIVEGAUSSIAN = 3;
- const NOISE_IMPULSE = 4;
- const NOISE_LAPLACIAN = 5;
- const NOISE_POISSON = 6;
- const NOISE_RANDOM = 7;
- const CHANNEL_UNDEFINED = 0;
- const CHANNEL_RED = 1;
- const CHANNEL_GRAY = 1;
- const CHANNEL_CYAN = 1;
- const CHANNEL_GREEN = 2;
- const CHANNEL_MAGENTA = 2;
- const CHANNEL_BLUE = 4;
- const CHANNEL_YELLOW = 4;
- const CHANNEL_ALPHA = 8;
- const CHANNEL_OPACITY = 8;
- const CHANNEL_MATTE = 8;
- const CHANNEL_BLACK = 32;
- const CHANNEL_INDEX = 32;
- const CHANNEL_ALL = 134217727;
- const CHANNEL_DEFAULT = 134217719;
- const CHANNEL_RGBA = 15;
- const CHANNEL_TRUEALPHA = 64;
- const CHANNEL_RGBS = 128;
- const CHANNEL_GRAY_CHANNELS = 128;
- const CHANNEL_SYNC = 256;
- const CHANNEL_COMPOSITES = 47;
- const METRIC_UNDEFINED = 0;
- const METRIC_ABSOLUTEERRORMETRIC = 1;
- const METRIC_MEANABSOLUTEERROR = 2;
- const METRIC_MEANERRORPERPIXELMETRIC = 3;
- const METRIC_MEANSQUAREERROR = 4;
- const METRIC_PEAKABSOLUTEERROR = 5;
- const METRIC_PEAKSIGNALTONOISERATIO = 6;
- const METRIC_ROOTMEANSQUAREDERROR = 7;
- const METRIC_NORMALIZEDCROSSCORRELATIONERRORMETRIC = 8;
- const METRIC_FUZZERROR = 9;
- const PIXEL_CHAR = 1;
- const PIXEL_DOUBLE = 2;
- const PIXEL_FLOAT = 3;
- const PIXEL_INTEGER = 4;
- const PIXEL_LONG = 5;
- const PIXEL_QUANTUM = 6;
- const PIXEL_SHORT = 7;
- const EVALUATE_UNDEFINED = 0;
- const EVALUATE_ADD = 1;
- const EVALUATE_AND = 2;
- const EVALUATE_DIVIDE = 3;
- const EVALUATE_LEFTSHIFT = 4;
- const EVALUATE_MAX = 5;
- const EVALUATE_MIN = 6;
- const EVALUATE_MULTIPLY = 7;
- const EVALUATE_OR = 8;
- const EVALUATE_RIGHTSHIFT = 9;
- const EVALUATE_SET = 10;
- const EVALUATE_SUBTRACT = 11;
- const EVALUATE_XOR = 12;
- const EVALUATE_POW = 13;
- const EVALUATE_LOG = 14;
- const EVALUATE_THRESHOLD = 15;
- const EVALUATE_THRESHOLDBLACK = 16;
- const EVALUATE_THRESHOLDWHITE = 17;
- const EVALUATE_GAUSSIANNOISE = 18;
- const EVALUATE_IMPULSENOISE = 19;
- const EVALUATE_LAPLACIANNOISE = 20;
- const EVALUATE_MULTIPLICATIVENOISE = 21;
- const EVALUATE_POISSONNOISE = 22;
- const EVALUATE_UNIFORMNOISE = 23;
- const EVALUATE_COSINE = 24;
- const EVALUATE_SINE = 25;
- const EVALUATE_ADDMODULUS = 26;
- const EVALUATE_MEAN = 27;
- const EVALUATE_ABS = 28;
- const EVALUATE_EXPONENTIAL = 29;
- const EVALUATE_MEDIAN = 30;
- const EVALUATE_SUM = 31;
- const COLORSPACE_UNDEFINED = 0;
- const COLORSPACE_RGB = 1;
- const COLORSPACE_GRAY = 2;
- const COLORSPACE_TRANSPARENT = 3;
- const COLORSPACE_OHTA = 4;
- const COLORSPACE_LAB = 5;
- const COLORSPACE_XYZ = 6;
- const COLORSPACE_YCBCR = 7;
- const COLORSPACE_YCC = 8;
- const COLORSPACE_YIQ = 9;
- const COLORSPACE_YPBPR = 10;
- const COLORSPACE_YUV = 11;
- const COLORSPACE_CMYK = 12;
- const COLORSPACE_SRGB = 13;
- const COLORSPACE_HSB = 14;
- const COLORSPACE_HSL = 15;
- const COLORSPACE_HWB = 16;
- const COLORSPACE_REC601LUMA = 17;
- const COLORSPACE_REC709LUMA = 19;
- const COLORSPACE_LOG = 21;
- const COLORSPACE_CMY = 22;
- const COLORSPACE_LUV = 23;
- const COLORSPACE_HCL = 24;
- const COLORSPACE_LCH = 25;
- const COLORSPACE_LMS = 26;
- const COLORSPACE_LCHAB = 27;
- const COLORSPACE_LCHUV = 28;
- const COLORSPACE_SCRGB = 29;
- const COLORSPACE_HSI = 30;
- const COLORSPACE_HSV = 31;
- const COLORSPACE_HCLP = 32;
- const COLORSPACE_YDBDR = 33;
- const COLORSPACE_REC601YCBCR = 18;
- const COLORSPACE_REC709YCBCR = 20;
- const VIRTUALPIXELMETHOD_UNDEFINED = 0;
- const VIRTUALPIXELMETHOD_BACKGROUND = 1;
- const VIRTUALPIXELMETHOD_CONSTANT = 2;
- const VIRTUALPIXELMETHOD_EDGE = 4;
- const VIRTUALPIXELMETHOD_MIRROR = 5;
- const VIRTUALPIXELMETHOD_TILE = 7;
- const VIRTUALPIXELMETHOD_TRANSPARENT = 8;
- const VIRTUALPIXELMETHOD_MASK = 9;
- const VIRTUALPIXELMETHOD_BLACK = 10;
- const VIRTUALPIXELMETHOD_GRAY = 11;
- const VIRTUALPIXELMETHOD_WHITE = 12;
- const VIRTUALPIXELMETHOD_HORIZONTALTILE = 13;
- const VIRTUALPIXELMETHOD_VERTICALTILE = 14;
- const VIRTUALPIXELMETHOD_HORIZONTALTILEEDGE = 15;
- const VIRTUALPIXELMETHOD_VERTICALTILEEDGE = 16;
- const VIRTUALPIXELMETHOD_CHECKERTILE = 17;
- const PREVIEW_UNDEFINED = 0;
- const PREVIEW_ROTATE = 1;
- const PREVIEW_SHEAR = 2;
- const PREVIEW_ROLL = 3;
- const PREVIEW_HUE = 4;
- const PREVIEW_SATURATION = 5;
- const PREVIEW_BRIGHTNESS = 6;
- const PREVIEW_GAMMA = 7;
- const PREVIEW_SPIFF = 8;
- const PREVIEW_DULL = 9;
- const PREVIEW_GRAYSCALE = 10;
- const PREVIEW_QUANTIZE = 11;
- const PREVIEW_DESPECKLE = 12;
- const PREVIEW_REDUCENOISE = 13;
- const PREVIEW_ADDNOISE = 14;
- const PREVIEW_SHARPEN = 15;
- const PREVIEW_BLUR = 16;
- const PREVIEW_THRESHOLD = 17;
- const PREVIEW_EDGEDETECT = 18;
- const PREVIEW_SPREAD = 19;
- const PREVIEW_SOLARIZE = 20;
- const PREVIEW_SHADE = 21;
- const PREVIEW_RAISE = 22;
- const PREVIEW_SEGMENT = 23;
- const PREVIEW_SWIRL = 24;
- const PREVIEW_IMPLODE = 25;
- const PREVIEW_WAVE = 26;
- const PREVIEW_OILPAINT = 27;
- const PREVIEW_CHARCOALDRAWING = 28;
- const PREVIEW_JPEG = 29;
- const RENDERINGINTENT_UNDEFINED = 0;
- const RENDERINGINTENT_SATURATION = 1;
- const RENDERINGINTENT_PERCEPTUAL = 2;
- const RENDERINGINTENT_ABSOLUTE = 3;
- const RENDERINGINTENT_RELATIVE = 4;
- const INTERLACE_UNDEFINED = 0;
- const INTERLACE_NO = 1;
- const INTERLACE_LINE = 2;
- const INTERLACE_PLANE = 3;
- const INTERLACE_PARTITION = 4;
- const INTERLACE_GIF = 5;
- const INTERLACE_JPEG = 6;
- const INTERLACE_PNG = 7;
- const FILLRULE_UNDEFINED = 0;
- const FILLRULE_EVENODD = 1;
- const FILLRULE_NONZERO = 2;
- const PATHUNITS_UNDEFINED = 0;
- const PATHUNITS_USERSPACE = 1;
- const PATHUNITS_USERSPACEONUSE = 2;
- const PATHUNITS_OBJECTBOUNDINGBOX = 3;
- const LINECAP_UNDEFINED = 0;
- const LINECAP_BUTT = 1;
- const LINECAP_ROUND = 2;
- const LINECAP_SQUARE = 3;
- const LINEJOIN_UNDEFINED = 0;
- const LINEJOIN_MITER = 1;
- const LINEJOIN_ROUND = 2;
- const LINEJOIN_BEVEL = 3;
- const RESOURCETYPE_UNDEFINED = 0;
- const RESOURCETYPE_AREA = 1;
- const RESOURCETYPE_DISK = 2;
- const RESOURCETYPE_FILE = 3;
- const RESOURCETYPE_MAP = 4;
- const RESOURCETYPE_MEMORY = 5;
- const RESOURCETYPE_TIME = 7;
- const RESOURCETYPE_THROTTLE = 8;
- const RESOURCETYPE_THREAD = 6;
- const DISPOSE_UNRECOGNIZED = 0;
- const DISPOSE_UNDEFINED = 0;
- const DISPOSE_NONE = 1;
- const DISPOSE_BACKGROUND = 2;
- const DISPOSE_PREVIOUS = 3;
- const INTERPOLATE_UNDEFINED = 0;
- const INTERPOLATE_AVERAGE = 1;
- const INTERPOLATE_BICUBIC = 2;
- const INTERPOLATE_BILINEAR = 3;
- const INTERPOLATE_FILTER = 4;
- const INTERPOLATE_INTEGER = 5;
- const INTERPOLATE_MESH = 6;
- const INTERPOLATE_NEARESTNEIGHBOR = 7;
- const INTERPOLATE_SPLINE = 8;
- const LAYERMETHOD_UNDEFINED = 0;
- const LAYERMETHOD_COALESCE = 1;
- const LAYERMETHOD_COMPAREANY = 2;
- const LAYERMETHOD_COMPARECLEAR = 3;
- const LAYERMETHOD_COMPAREOVERLAY = 4;
- const LAYERMETHOD_DISPOSE = 5;
- const LAYERMETHOD_OPTIMIZE = 6;
- const LAYERMETHOD_OPTIMIZEPLUS = 8;
- const LAYERMETHOD_OPTIMIZETRANS = 9;
- const LAYERMETHOD_COMPOSITE = 12;
- const LAYERMETHOD_OPTIMIZEIMAGE = 7;
- const LAYERMETHOD_REMOVEDUPS = 10;
- const LAYERMETHOD_REMOVEZERO = 11;
- const LAYERMETHOD_TRIMBOUNDS = 16;
- const ORIENTATION_UNDEFINED = 0;
- const ORIENTATION_TOPLEFT = 1;
- const ORIENTATION_TOPRIGHT = 2;
- const ORIENTATION_BOTTOMRIGHT = 3;
- const ORIENTATION_BOTTOMLEFT = 4;
- const ORIENTATION_LEFTTOP = 5;
- const ORIENTATION_RIGHTTOP = 6;
- const ORIENTATION_RIGHTBOTTOM = 7;
- const ORIENTATION_LEFTBOTTOM = 8;
- const DISTORTION_UNDEFINED = 0;
- const DISTORTION_AFFINE = 1;
- const DISTORTION_AFFINEPROJECTION = 2;
- const DISTORTION_ARC = 9;
- const DISTORTION_BILINEAR = 6;
- const DISTORTION_PERSPECTIVE = 4;
- const DISTORTION_PERSPECTIVEPROJECTION = 5;
- const DISTORTION_SCALEROTATETRANSLATE = 3;
- const DISTORTION_POLYNOMIAL = 8;
- const DISTORTION_POLAR = 10;
- const DISTORTION_DEPOLAR = 11;
- const DISTORTION_BARREL = 14;
- const DISTORTION_SHEPARDS = 16;
- const DISTORTION_SENTINEL = 18;
- const DISTORTION_BARRELINVERSE = 15;
- const DISTORTION_BILINEARFORWARD = 6;
- const DISTORTION_BILINEARREVERSE = 7;
- const DISTORTION_RESIZE = 17;
- const DISTORTION_CYLINDER2PLANE = 12;
- const DISTORTION_PLANE2CYLINDER = 13;
- const LAYERMETHOD_MERGE = 13;
- const LAYERMETHOD_FLATTEN = 14;
- const LAYERMETHOD_MOSAIC = 15;
- const ALPHACHANNEL_ACTIVATE = 1;
- const ALPHACHANNEL_RESET = 7;
- const ALPHACHANNEL_SET = 8;
- const ALPHACHANNEL_UNDEFINED = 0;
- const ALPHACHANNEL_COPY = 3;
- const ALPHACHANNEL_DEACTIVATE = 4;
- const ALPHACHANNEL_EXTRACT = 5;
- const ALPHACHANNEL_OPAQUE = 6;
- const ALPHACHANNEL_SHAPE = 9;
- const ALPHACHANNEL_TRANSPARENT = 10;
- const SPARSECOLORMETHOD_UNDEFINED = 0;
- const SPARSECOLORMETHOD_BARYCENTRIC = 1;
- const SPARSECOLORMETHOD_BILINEAR = 7;
- const SPARSECOLORMETHOD_POLYNOMIAL = 8;
- const SPARSECOLORMETHOD_SPEPARDS = 16;
- const SPARSECOLORMETHOD_VORONOI = 18;
- const SPARSECOLORMETHOD_INVERSE = 19;
- const DITHERMETHOD_UNDEFINED = 0;
- const DITHERMETHOD_NO = 1;
- const DITHERMETHOD_RIEMERSMA = 2;
- const DITHERMETHOD_FLOYDSTEINBERG = 3;
- const FUNCTION_UNDEFINED = 0;
- const FUNCTION_POLYNOMIAL = 1;
- const FUNCTION_SINUSOID = 2;
- const ALPHACHANNEL_BACKGROUND = 2;
- const FUNCTION_ARCSIN = 3;
- const FUNCTION_ARCTAN = 4;
- const ALPHACHANNEL_FLATTEN = 11;
- const ALPHACHANNEL_REMOVE = 12;
- const STATISTIC_GRADIENT = 1;
- const STATISTIC_MAXIMUM = 2;
- const STATISTIC_MEAN = 3;
- const STATISTIC_MEDIAN = 4;
- const STATISTIC_MINIMUM = 5;
- const STATISTIC_MODE = 6;
- const STATISTIC_NONPEAK = 7;
- const STATISTIC_STANDARD_DEVIATION = 8;
- const MORPHOLOGY_CONVOLVE = 1;
- const MORPHOLOGY_CORRELATE = 2;
- const MORPHOLOGY_ERODE = 3;
- const MORPHOLOGY_DILATE = 4;
- const MORPHOLOGY_ERODE_INTENSITY = 5;
- const MORPHOLOGY_DILATE_INTENSITY = 6;
- const MORPHOLOGY_DISTANCE = 7;
- const MORPHOLOGY_OPEN = 8;
- const MORPHOLOGY_CLOSE = 9;
- const MORPHOLOGY_OPEN_INTENSITY = 10;
- const MORPHOLOGY_CLOSE_INTENSITY = 11;
- const MORPHOLOGY_SMOOTH = 12;
- const MORPHOLOGY_EDGE_IN = 13;
- const MORPHOLOGY_EDGE_OUT = 14;
- const MORPHOLOGY_EDGE = 15;
- const MORPHOLOGY_TOP_HAT = 16;
- const MORPHOLOGY_BOTTOM_HAT = 17;
- const MORPHOLOGY_HIT_AND_MISS = 18;
- const MORPHOLOGY_THINNING = 19;
- const MORPHOLOGY_THICKEN = 20;
- const MORPHOLOGY_VORONOI = 21;
- const MORPHOLOGY_ITERATIVE = 22;
- const KERNEL_UNITY = 1;
- const KERNEL_GAUSSIAN = 2;
- const KERNEL_DIFFERENCE_OF_GAUSSIANS = 3;
- const KERNEL_LAPLACIAN_OF_GAUSSIANS = 4;
- const KERNEL_BLUR = 5;
- const KERNEL_COMET = 6;
- const KERNEL_LAPLACIAN = 7;
- const KERNEL_SOBEL = 8;
- const KERNEL_FREI_CHEN = 9;
- const KERNEL_ROBERTS = 10;
- const KERNEL_PREWITT = 11;
- const KERNEL_COMPASS = 12;
- const KERNEL_KIRSCH = 13;
- const KERNEL_DIAMOND = 14;
- const KERNEL_SQUARE = 15;
- const KERNEL_RECTANGLE = 16;
- const KERNEL_OCTAGON = 17;
- const KERNEL_DISK = 18;
- const KERNEL_PLUS = 19;
- const KERNEL_CROSS = 20;
- const KERNEL_RING = 21;
- const KERNEL_PEAKS = 22;
- const KERNEL_EDGES = 23;
- const KERNEL_CORNERS = 24;
- const KERNEL_DIAGONALS = 25;
- const KERNEL_LINE_ENDS = 26;
- const KERNEL_LINE_JUNCTIONS = 27;
- const KERNEL_RIDGES = 28;
- const KERNEL_CONVEX_HULL = 29;
- const KERNEL_THIN_SE = 30;
- const KERNEL_SKELETON = 31;
- const KERNEL_CHEBYSHEV = 32;
- const KERNEL_MANHATTAN = 33;
- const KERNEL_OCTAGONAL = 34;
- const KERNEL_EUCLIDEAN = 35;
- const KERNEL_USER_DEFINED = 36;
- const KERNEL_BINOMIAL = 37;
- const DIRECTION_LEFT_TO_RIGHT = 2;
- const DIRECTION_RIGHT_TO_LEFT = 1;
- const NORMALIZE_KERNEL_NONE = 0;
- const NORMALIZE_KERNEL_VALUE = 8192;
- const NORMALIZE_KERNEL_CORRELATE = 65536;
- const NORMALIZE_KERNEL_PERCENT = 4096;
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Removes repeated portions of images to optimize
- * @link https://php.net/manual/en/imagick.optimizeimagelayers.php
- * @return bool <b>TRUE</b> on success.
- */
- public function optimizeImageLayers () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the maximum bounding region between images
- * @link https://php.net/manual/en/imagick.compareimagelayers.php
- * @param int $method <p>
- * One of the layer method constants.
- * </p>
- * @return Imagick <b>TRUE</b> on success.
- */
- public function compareImageLayers ($method) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Quickly fetch attributes
- * @link https://php.net/manual/en/imagick.pingimageblob.php
- * @param string $image <p>
- * A string containing the image.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function pingImageBlob ($image) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Get basic image attributes in a lightweight manner
- * @link https://php.net/manual/en/imagick.pingimagefile.php
- * @param resource $filehandle <p>
- * An open filehandle to the image.
- * </p>
- * @param string $fileName [optional] <p>
- * Optional filename for this image.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function pingImageFile ($filehandle, $fileName = null) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a vertical mirror image
- * @link https://php.net/manual/en/imagick.transposeimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function transposeImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a horizontal mirror image
- * @link https://php.net/manual/en/imagick.transverseimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function transverseImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Remove edges from the image
- * @link https://php.net/manual/en/imagick.trimimage.php
- * @param float $fuzz <p>
- * By default target must match a particular pixel color exactly.
- * However, in many cases two colors may differ by a small amount.
- * The fuzz member of image defines how much tolerance is acceptable
- * to consider two colors as the same. This parameter represents the variation
- * on the quantum range.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function trimImage ($fuzz) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Applies wave filter to the image
- * @link https://php.net/manual/en/imagick.waveimage.php
- * @param float $amplitude <p>
- * The amplitude of the wave.
- * </p>
- * @param float $length <p>
- * The length of the wave.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function waveImage ($amplitude, $length) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds vignette filter to the image
- * @link https://php.net/manual/en/imagick.vignetteimage.php
- * @param float $blackPoint <p>
- * The black point.
- * </p>
- * @param float $whitePoint <p>
- * The white point
- * </p>
- * @param int $x <p>
- * X offset of the ellipse
- * </p>
- * @param int $y <p>
- * Y offset of the ellipse
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function vignetteImage ($blackPoint, $whitePoint, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Discards all but one of any pixel color
- * @link https://php.net/manual/en/imagick.uniqueimagecolors.php
- * @return bool <b>TRUE</b> on success.
- */
- public function uniqueImageColors () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Return if the image has a matte channel
- * @link https://php.net/manual/en/imagick.getimagematte.php
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function getImageMatte () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image matte channel
- * @link https://php.net/manual/en/imagick.setimagematte.php
- * @param bool $matte <p>
- * True activates the matte channel and false disables it.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageMatte ($matte) {}
-
- /**
- * Adaptively resize image with data dependent triangulation
- *
- * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
- * If false, the calculations should produce the same results as ImageMagick CLI does.<br>
- * <br>
- * <b>Note:</b> The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched.
- * In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
- * @link https://php.net/manual/en/imagick.adaptiveresizeimage.php
- * @param int $columns The number of columns in the scaled image.
- * @param int $rows The number of rows in the scaled image.
- * @param bool $bestfit [optional] Whether to fit the image inside a bounding box.<br>
- * The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
- * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
- * @return bool TRUE on success
- * @throws ImagickException Throws ImagickException on error
- * @since 2.0.0
- */
- public function adaptiveResizeImage ($columns, $rows, $bestfit = false, $legacy = false) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Simulates a pencil sketch
- * @link https://php.net/manual/en/imagick.sketchimage.php
- * @param float $radius <p>
- * The radius of the Gaussian, in pixels, not counting the center pixel
- * </p>
- * @param float $sigma <p>
- * The standard deviation of the Gaussian, in pixels.
- * </p>
- * @param float $angle <p>
- * Apply the effect along this angle.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function sketchImage ($radius, $sigma, $angle) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a 3D effect
- * @link https://php.net/manual/en/imagick.shadeimage.php
- * @param bool $gray <p>
- * A value other than zero shades the intensity of each pixel.
- * </p>
- * @param float $azimuth <p>
- * Defines the light source direction.
- * </p>
- * @param float $elevation <p>
- * Defines the light source direction.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function shadeImage ($gray, $azimuth, $elevation) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the size offset
- * @link https://php.net/manual/en/imagick.getsizeoffset.php
- * @return int the size offset associated with the Imagick object.
- */
- public function getSizeOffset () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the size and offset of the Imagick object
- * @link https://php.net/manual/en/imagick.setsizeoffset.php
- * @param int $columns <p>
- * The width in pixels.
- * </p>
- * @param int $rows <p>
- * The height in pixels.
- * </p>
- * @param int $offset <p>
- * The image offset.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setSizeOffset ($columns, $rows, $offset) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds adaptive blur filter to image
- * @link https://php.net/manual/en/imagick.adaptiveblurimage.php
- * @param float $radius <p>
- * The radius of the Gaussian, in pixels, not counting the center pixel.
- * Provide a value of 0 and the radius will be chosen automagically.
- * </p>
- * @param float $sigma <p>
- * The standard deviation of the Gaussian, in pixels.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function adaptiveBlurImage ($radius, $sigma, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Enhances the contrast of a color image
- * @link https://php.net/manual/en/imagick.contraststretchimage.php
- * @param float $black_point <p>
- * The black point.
- * </p>
- * @param float $white_point <p>
- * The white point.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. <b>Imagick::CHANNEL_ALL</b>. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function contrastStretchImage ($black_point, $white_point, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adaptively sharpen the image
- * @link https://php.net/manual/en/imagick.adaptivesharpenimage.php
- * @param float $radius <p>
- * The radius of the Gaussian, in pixels, not counting the center pixel. Use 0 for auto-select.
- * </p>
- * @param float $sigma <p>
- * The standard deviation of the Gaussian, in pixels.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function adaptiveSharpenImage ($radius, $sigma, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a high-contrast, two-color image
- * @link https://php.net/manual/en/imagick.randomthresholdimage.php
- * @param float $low <p>
- * The low point
- * </p>
- * @param float $high <p>
- * The high point
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function randomThresholdImage ($low, $high, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * @param $xRounding
- * @param $yRounding
- * @param $strokeWidth [optional]
- * @param $displace [optional]
- * @param $sizeCorrection [optional]
- */
- public function roundCornersImage ($xRounding, $yRounding, $strokeWidth, $displace, $sizeCorrection) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Rounds image corners
- * @link https://php.net/manual/en/imagick.roundcorners.php
- * @param float $x_rounding <p>
- * x rounding
- * </p>
- * @param float $y_rounding <p>
- * y rounding
- * </p>
- * @param float $stroke_width [optional] <p>
- * stroke width
- * </p>
- * @param float $displace [optional] <p>
- * image displace
- * </p>
- * @param float $size_correction [optional] <p>
- * size correction
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function roundCorners ($x_rounding, $y_rounding, $stroke_width = 10.0, $displace = 5.0, $size_correction = -6.0) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Set the iterator position
- * @link https://php.net/manual/en/imagick.setiteratorindex.php
- * @param int $index <p>
- * The position to set the iterator to
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setIteratorIndex ($index) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the index of the current active image
- * @link https://php.net/manual/en/imagick.getiteratorindex.php
- * @return int an integer containing the index of the image in the stack.
- */
- public function getIteratorIndex () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Convenience method for setting crop size and the image geometry
- * @link https://php.net/manual/en/imagick.transformimage.php
- * @param string $crop <p>
- * A crop geometry string. This geometry defines a subregion of the image to crop.
- * </p>
- * @param string $geometry <p>
- * An image geometry string. This geometry defines the final size of the image.
- * </p>
- * @return Imagick <b>TRUE</b> on success.
- */
- public function transformImage ($crop, $geometry) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image opacity level
- * @link https://php.net/manual/en/imagick.setimageopacity.php
- * @param float $opacity <p>
- * The level of transparency: 1.0 is fully opaque and 0.0 is fully
- * transparent.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageOpacity ($opacity) {}
-
- /**
- * (PECL imagick 2.2.2)<br/>
- * Performs an ordered dither
- * @link https://php.net/manual/en/imagick.orderedposterizeimage.php
- * @param string $threshold_map <p>
- * A string containing the name of the threshold dither map to use
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function orderedPosterizeImage ($threshold_map, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Simulates a Polaroid picture
- * @link https://php.net/manual/en/imagick.polaroidimage.php
- * @param ImagickDraw $properties <p>
- * The polaroid properties
- * </p>
- * @param float $angle <p>
- * The polaroid angle
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function polaroidImage (ImagickDraw $properties, $angle) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the named image property
- * @link https://php.net/manual/en/imagick.getimageproperty.php
- * @param string $name <p>
- * name of the property (for example Exif:DateTime)
- * </p>
- * @return string|false a string containing the image property, false if a
- * property with the given name does not exist.
- */
- public function getImageProperty ($name) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets an image property
- * @link https://php.net/manual/en/imagick.setimageproperty.php
- * @param string $name
- * @param string $value
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageProperty ($name, $value) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image interpolate pixel method
- * @link https://php.net/manual/en/imagick.setimageinterpolatemethod.php
- * @param int $method <p>
- * The method is one of the <b>Imagick::INTERPOLATE_*</b> constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageInterpolateMethod ($method) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the interpolation method
- * @link https://php.net/manual/en/imagick.getimageinterpolatemethod.php
- * @return int the interpolate method on success.
- */
- public function getImageInterpolateMethod () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Stretches with saturation the image intensity
- * @link https://php.net/manual/en/imagick.linearstretchimage.php
- * @param float $blackPoint <p>
- * The image black point
- * </p>
- * @param float $whitePoint <p>
- * The image white point
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function linearStretchImage ($blackPoint, $whitePoint) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image length in bytes
- * @link https://php.net/manual/en/imagick.getimagelength.php
- * @return int an int containing the current image size.
- */
- public function getImageLength () {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Set image size
- * @link https://php.net/manual/en/imagick.extentimage.php
- * @param int $width <p>
- * The new width
- * </p>
- * @param int $height <p>
- * The new height
- * </p>
- * @param int $x <p>
- * X position for the new size
- * </p>
- * @param int $y <p>
- * Y position for the new size
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function extentImage ($width, $height, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image orientation
- * @link https://php.net/manual/en/imagick.getimageorientation.php
- * @return int an int on success.
- */
- public function getImageOrientation () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image orientation
- * @link https://php.net/manual/en/imagick.setimageorientation.php
- * @param int $orientation <p>
- * One of the orientation constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageOrientation ($orientation) {}
-
- /**
- * (PECL imagick 2.1.0)<br/>
- * Changes the color value of any pixel that matches target
- * @link https://php.net/manual/en/imagick.paintfloodfillimage.php
- * @param mixed $fill <p>
- * ImagickPixel object or a string containing the fill color
- * </p>
- * @param float $fuzz <p>
- * The amount of fuzz. For example, set fuzz to 10 and the color red at
- * intensities of 100 and 102 respectively are now interpreted as the
- * same color for the purposes of the floodfill.
- * </p>
- * @param mixed $bordercolor <p>
- * ImagickPixel object or a string containing the border color
- * </p>
- * @param int $x <p>
- * X start position of the floodfill
- * </p>
- * @param int $y <p>
- * Y start position of the floodfill
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function paintFloodfillImage ($fill, $fuzz, $bordercolor, $x, $y, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Replaces colors in the image from a color lookup table. Optional second parameter to replace colors in a specific channel. This method is available if Imagick has been compiled against ImageMagick version 6.3.6 or newer.
- * @link https://php.net/manual/en/imagick.clutimage.php
- * @param Imagick $lookup_table <p>
- * Imagick object containing the color lookup table
- * </p>
- * @param int $channel [optional] <p>
- * The Channeltype
- * constant. When not supplied, default channels are replaced.
- * </p>
- * @return bool <b>TRUE</b> on success.
- * @since 2.0.0
- */
- public function clutImage (Imagick $lookup_table, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image properties
- * @link https://php.net/manual/en/imagick.getimageproperties.php
- * @param string $pattern [optional] <p>
- * The pattern for property names.
- * </p>
- * @param bool $only_names [optional] <p>
- * Whether to return only property names. If <b>FALSE</b> then also the values are returned
- * </p>
- * @return array an array containing the image properties or property names.
- */
- public function getImageProperties ($pattern = "*", $only_names = true) {}
-
- /**
- * (PECL imagick 2.2.0)<br/>
- * Returns the image profiles
- * @link https://php.net/manual/en/imagick.getimageprofiles.php
- * @param string $pattern [optional] <p>
- * The pattern for profile names.
- * </p>
- * @param bool $include_values [optional] <p>
- * Whether to return only profile names. If <b>FALSE</b> then only profile names will be returned.
- * </p>
- * @return array an array containing the image profiles or profile names.
- */
- public function getImageProfiles ($pattern = "*", $include_values = true) {}
-
- /**
- * (PECL imagick 2.0.1)<br/>
- * Distorts an image using various distortion methods
- * @link https://php.net/manual/en/imagick.distortimage.php
- * @param int $method <p>
- * The method of image distortion. See distortion constants
- * </p>
- * @param array $arguments <p>
- * The arguments for this distortion method
- * </p>
- * @param bool $bestfit <p>
- * Attempt to resize destination to fit distorted source
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function distortImage ($method, array $arguments, $bestfit) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Writes an image to a filehandle
- * @link https://php.net/manual/en/imagick.writeimagefile.php
- * @param resource $filehandle <p>
- * Filehandle where to write the image
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function writeImageFile ($filehandle) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Writes frames to a filehandle
- * @link https://php.net/manual/en/imagick.writeimagesfile.php
- * @param resource $filehandle <p>
- * Filehandle where to write the images
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function writeImagesFile ($filehandle) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Reset image page
- * @link https://php.net/manual/en/imagick.resetimagepage.php
- * @param string $page <p>
- * The page definition. For example 7168x5147+0+0
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function resetImagePage ($page) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Sets image clip mask
- * @link https://php.net/manual/en/imagick.setimageclipmask.php
- * @param Imagick $clip_mask <p>
- * The Imagick object containing the clip mask
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageClipMask (Imagick $clip_mask) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Gets image clip mask
- * @link https://php.net/manual/en/imagick.getimageclipmask.php
- * @return Imagick an Imagick object containing the clip mask.
- */
- public function getImageClipMask () {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Animates an image or images
- * @link https://php.net/manual/en/imagick.animateimages.php
- * @param string $x_server <p>
- * X server address
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function animateImages ($x_server) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Recolors image
- * @link https://php.net/manual/en/imagick.recolorimage.php
- * @param array $matrix <p>
- * The matrix containing the color values
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function recolorImage (array $matrix) {}
-
- /**
- * (PECL imagick 2.1.0)<br/>
- * Sets font
- * @link https://php.net/manual/en/imagick.setfont.php
- * @param string $font <p>
- * Font name or a filename
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setFont ($font) {}
-
- /**
- * (PECL imagick 2.1.0)<br/>
- * Gets font
- * @link https://php.net/manual/en/imagick.getfont.php
- * @return string|false the string containing the font name or <b>FALSE</b> if not font is set.
- */
- public function getFont () {}
-
- /**
- * (PECL imagick 2.1.0)<br/>
- * Sets point size
- * @link https://php.net/manual/en/imagick.setpointsize.php
- * @param float $point_size <p>
- * Point size
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setPointSize ($point_size) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Gets point size
- * @link https://php.net/manual/en/imagick.getpointsize.php
- * @return float a float containing the point size.
- */
- public function getPointSize () {}
-
- /**
- * (PECL imagick 2.1.0)<br/>
- * Merges image layers
- * @link https://php.net/manual/en/imagick.mergeimagelayers.php
- * @param int $layer_method <p>
- * One of the <b>Imagick::LAYERMETHOD_*</b> constants
- * </p>
- * @return Imagick Returns an Imagick object containing the merged image.
- * @throws ImagickException
- */
- public function mergeImageLayers ($layer_method) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Sets image alpha channel
- * @link https://php.net/manual/en/imagick.setimagealphachannel.php
- * @param int $mode <p>
- * One of the <b>Imagick::ALPHACHANNEL_*</b> constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageAlphaChannel ($mode) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Changes the color value of any pixel that matches target
- * @link https://php.net/manual/en/imagick.floodfillpaintimage.php
- * @param mixed $fill <p>
- * ImagickPixel object or a string containing the fill color
- * </p>
- * @param float $fuzz <p>
- * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
- * </p>
- * @param mixed $target <p>
- * ImagickPixel object or a string containing the target color to paint
- * </p>
- * @param int $x <p>
- * X start position of the floodfill
- * </p>
- * @param int $y <p>
- * Y start position of the floodfill
- * </p>
- * @param bool $invert <p>
- * If <b>TRUE</b> paints any pixel that does not match the target color.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function floodFillPaintImage ($fill, $fuzz, $target, $x, $y, $invert, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Changes the color value of any pixel that matches target
- * @link https://php.net/manual/en/imagick.opaquepaintimage.php
- * @param mixed $target <p>
- * ImagickPixel object or a string containing the color to change
- * </p>
- * @param mixed $fill <p>
- * The replacement color
- * </p>
- * @param float $fuzz <p>
- * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
- * </p>
- * @param bool $invert <p>
- * If <b>TRUE</b> paints any pixel that does not match the target color.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function opaquePaintImage ($target, $fill, $fuzz, $invert, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Paints pixels transparent
- * @link https://php.net/manual/en/imagick.transparentpaintimage.php
- * @param mixed $target <p>
- * The target color to paint
- * </p>
- * @param float $alpha <p>
- * The level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.
- * </p>
- * @param float $fuzz <p>
- * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
- * </p>
- * @param bool $invert <p>
- * If <b>TRUE</b> paints any pixel that does not match the target color.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function transparentPaintImage ($target, $alpha, $fuzz, $invert) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Animates an image or images
- * @link https://php.net/manual/en/imagick.liquidrescaleimage.php
- * @param int $width <p>
- * The width of the target size
- * </p>
- * @param int $height <p>
- * The height of the target size
- * </p>
- * @param float $delta_x <p>
- * How much the seam can traverse on x-axis.
- * Passing 0 causes the seams to be straight.
- * </p>
- * @param float $rigidity <p>
- * Introduces a bias for non-straight seams. This parameter is
- * typically 0.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function liquidRescaleImage ($width, $height, $delta_x, $rigidity) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Enciphers an image
- * @link https://php.net/manual/en/imagick.encipherimage.php
- * @param string $passphrase <p>
- * The passphrase
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function encipherImage ($passphrase) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Deciphers an image
- * @link https://php.net/manual/en/imagick.decipherimage.php
- * @param string $passphrase <p>
- * The passphrase
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function decipherImage ($passphrase) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Sets the gravity
- * @link https://php.net/manual/en/imagick.setgravity.php
- * @param int $gravity <p>
- * The gravity property. Refer to the list of
- * gravity constants.
- * </p>
- * @return bool No value is returned.
- */
- public function setGravity ($gravity) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Gets the gravity
- * @link https://php.net/manual/en/imagick.getgravity.php
- * @return int the gravity property. Refer to the list of
- * gravity constants.
- */
- public function getGravity () {}
-
- /**
- * (PECL imagick 2.2.1)<br/>
- * Gets channel range
- * @link https://php.net/manual/en/imagick.getimagechannelrange.php
- * @param int $channel <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return array an array containing minima and maxima values of the channel(s).
- */
- public function getImageChannelRange ($channel) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Gets the image alpha channel
- * @link https://php.net/manual/en/imagick.getimagealphachannel.php
- * @return int a constant defining the current alpha channel value. Refer to this
- * list of alpha channel constants.
- */
- public function getImageAlphaChannel () {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Gets channel distortions
- * @link https://php.net/manual/en/imagick.getimagechanneldistortions.php
- * @param Imagick $reference <p>
- * Imagick object containing the reference image
- * </p>
- * @param int $metric <p>
- * Refer to this list of metric type constants.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return float a float describing the channel distortion.
- */
- public function getImageChannelDistortions (Imagick $reference, $metric, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Sets the image gravity
- * @link https://php.net/manual/en/imagick.setimagegravity.php
- * @param int $gravity <p>
- * The gravity property. Refer to the list of
- * gravity constants.
- * </p>
- * @return bool No value is returned.
- */
- public function setImageGravity ($gravity) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Gets the image gravity
- * @link https://php.net/manual/en/imagick.getimagegravity.php
- * @return int the images gravity property. Refer to the list of
- * gravity constants.
- */
- public function getImageGravity () {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Imports image pixels
- * @link https://php.net/manual/en/imagick.importimagepixels.php
- * @param int $x <p>
- * The image x position
- * </p>
- * @param int $y <p>
- * The image y position
- * </p>
- * @param int $width <p>
- * The image width
- * </p>
- * @param int $height <p>
- * The image height
- * </p>
- * @param string $map <p>
- * Map of pixel ordering as a string. This can be for example RGB.
- * The value can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent),
- * O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.
- * </p>
- * @param int $storage <p>
- * The pixel storage method.
- * Refer to this list of pixel constants.
- * </p>
- * @param array $pixels <p>
- * The array of pixels
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function importImagePixels ($x, $y, $width, $height, $map, $storage, array $pixels) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Removes skew from the image
- * @link https://php.net/manual/en/imagick.deskewimage.php
- * @param float $threshold <p>
- * Deskew threshold
- * </p>
- * @return bool
- */
- public function deskewImage ($threshold) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Segments an image
- * @link https://php.net/manual/en/imagick.segmentimage.php
- * @param int $COLORSPACE <p>
- * One of the COLORSPACE constants.
- * </p>
- * @param float $cluster_threshold <p>
- * A percentage describing minimum number of pixels
- * contained in hexedra before it is considered valid.
- * </p>
- * @param float $smooth_threshold <p>
- * Eliminates noise from the histogram.
- * </p>
- * @param bool $verbose [optional] <p>
- * Whether to output detailed information about recognised classes.
- * </p>
- * @return bool
- */
- public function segmentImage ($COLORSPACE, $cluster_threshold, $smooth_threshold, $verbose = false) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Interpolates colors
- * @link https://php.net/manual/en/imagick.sparsecolorimage.php
- * @param int $SPARSE_METHOD <p>
- * Refer to this list of sparse method constants
- * </p>
- * @param array $arguments <p>
- * An array containing the coordinates.
- * The array is in format array(1,1, 2,45)
- * </p>
- * @param int $channel [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function sparseColorImage ($SPARSE_METHOD, array $arguments, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Remaps image colors
- * @link https://php.net/manual/en/imagick.remapimage.php
- * @param Imagick $replacement <p>
- * An Imagick object containing the replacement colors
- * </p>
- * @param int $DITHER <p>
- * Refer to this list of dither method constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function remapImage (Imagick $replacement, $DITHER) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Exports raw image pixels
- * @link https://php.net/manual/en/imagick.exportimagepixels.php
- * @param int $x <p>
- * X-coordinate of the exported area
- * </p>
- * @param int $y <p>
- * Y-coordinate of the exported area
- * </p>
- * @param int $width <p>
- * Width of the exported aread
- * </p>
- * @param int $height <p>
- * Height of the exported area
- * </p>
- * @param string $map <p>
- * Ordering of the exported pixels. For example "RGB".
- * Valid characters for the map are R, G, B, A, O, C, Y, M, K, I and P.
- * </p>
- * @param int $STORAGE <p>
- * Refer to this list of pixel type constants
- * </p>
- * @return array an array containing the pixels values.
- */
- public function exportImagePixels ($x, $y, $width, $height, $map, $STORAGE) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * The getImageChannelKurtosis purpose
- * @link https://php.net/manual/en/imagick.getimagechannelkurtosis.php
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return array an array with kurtosis and skewness
- * members.
- */
- public function getImageChannelKurtosis ($channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Applies a function on the image
- * @link https://php.net/manual/en/imagick.functionimage.php
- * @param int $function <p>
- * Refer to this list of function constants
- * </p>
- * @param array $arguments <p>
- * Array of arguments to pass to this function.
- * </p>
- * @param int $channel [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function functionImage ($function, array $arguments, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * @param $COLORSPACE
- */
- public function transformImageColorspace ($COLORSPACE) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Replaces colors in the image
- * @link https://php.net/manual/en/imagick.haldclutimage.php
- * @param Imagick $clut <p>
- * Imagick object containing the Hald lookup image.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function haldClutImage (Imagick $clut, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * @param $CHANNEL [optional]
- */
- public function autoLevelImage ($CHANNEL) {}
-
- /**
- * @param $factor [optional]
- */
- public function blueShiftImage ($factor) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Get image artifact
- * @link https://php.net/manual/en/imagick.getimageartifact.php
- * @param string $artifact <p>
- * The name of the artifact
- * </p>
- * @return string the artifact value on success.
- */
- public function getImageArtifact ($artifact) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Set image artifact
- * @link https://php.net/manual/en/imagick.setimageartifact.php
- * @param string $artifact <p>
- * The name of the artifact
- * </p>
- * @param string $value <p>
- * The value of the artifact
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageArtifact ($artifact, $value) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Delete image artifact
- * @link https://php.net/manual/en/imagick.deleteimageartifact.php
- * @param string $artifact <p>
- * The name of the artifact to delete
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function deleteImageArtifact ($artifact) {}
-
- /**
- * (PECL imagick 0.9.10-0.9.9)<br/>
- * Gets the colorspace
- * @link https://php.net/manual/en/imagick.getcolorspace.php
- * @return int an integer which can be compared against COLORSPACE constants.
- */
- public function getColorspace () {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Set colorspace
- * @link https://php.net/manual/en/imagick.setcolorspace.php
- * @param int $COLORSPACE <p>
- * One of the COLORSPACE constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setColorspace ($COLORSPACE) {}
-
- /**
- * @param $CHANNEL [optional]
- */
- public function clampImage ($CHANNEL) {}
-
- /**
- * @param $stack
- * @param $offset
- */
- public function smushImages ($stack, $offset) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * The Imagick constructor
- * @link https://php.net/manual/en/imagick.construct.php
- * @param mixed $files <p>
- * The path to an image to load or an array of paths. Paths can include
- * wildcards for file names, or can be URLs.
- * </p>
- * @throws ImagickException Throws ImagickException on error.
- */
- public function __construct ($files = null) {}
-
- /**
- * @return string
- */
- public function __toString () {}
-
- public function count () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a MagickPixelIterator
- * @link https://php.net/manual/en/imagick.getpixeliterator.php
- * @return ImagickPixelIterator an ImagickPixelIterator on success.
- */
- public function getPixelIterator () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Get an ImagickPixelIterator for an image section
- * @link https://php.net/manual/en/imagick.getpixelregioniterator.php
- * @param int $x <p>
- * The x-coordinate of the region.
- * </p>
- * @param int $y <p>
- * The y-coordinate of the region.
- * </p>
- * @param int $columns <p>
- * The width of the region.
- * </p>
- * @param int $rows <p>
- * The height of the region.
- * </p>
- * @return ImagickPixelIterator an ImagickPixelIterator for an image section.
- */
- public function getPixelRegionIterator ($x, $y, $columns, $rows) {}
-
- /**
- * (PECL imagick 0.9.0-0.9.9)<br/>
- * Reads image from filename
- * @link https://php.net/manual/en/imagick.readimage.php
- * @param string $filename
- * @return bool <b>TRUE</b> on success.
- * @throws ImagickException Throws ImagickException on error.
- */
- public function readImage ($filename) {}
-
- /**
- * @param $filenames
- * @throws ImagickException Throws ImagickException on error.
- */
- public function readImages ($filenames) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Reads image from a binary string
- * @link https://php.net/manual/en/imagick.readimageblob.php
- * @param string $image
- * @param string $filename [optional]
- * @return bool <b>TRUE</b> on success.
- * @throws ImagickException Throws ImagickException on error.
- */
- public function readImageBlob ($image, $filename = null) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the format of a particular image
- * @link https://php.net/manual/en/imagick.setimageformat.php
- * @param string $format <p>
- * String presentation of the image format. Format support
- * depends on the ImageMagick installation.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageFormat ($format) {}
-
- /**
- * Scales the size of an image to the given dimensions. Passing zero as either of the arguments will preserve dimension while scaling.<br>
- * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
- * If false, the calculations should produce the same results as ImageMagick CLI does.
- * @link https://php.net/manual/en/imagick.scaleimage.php
- * @param int $cols
- * @param int $rows
- * @param bool $bestfit [optional] The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
- * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
- * @return bool <b>TRUE</b> on success.
- * @throws ImagickException Throws ImagickException on error
- * @since 2.0.0
- */
- public function scaleImage ($cols, $rows, $bestfit = false, $legacy = false) {}
-
- /**
- * (PECL imagick 0.9.0-0.9.9)<br/>
- * Writes an image to the specified filename
- * @link https://php.net/manual/en/imagick.writeimage.php
- * @param string $filename [optional] <p>
- * Filename where to write the image. The extension of the filename
- * defines the type of the file.
- * Format can be forced regardless of file extension using format: prefix,
- * for example "jpg:test.png".
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function writeImage ($filename = null) {}
-
- /**
- * (PECL imagick 0.9.0-0.9.9)<br/>
- * Writes an image or image sequence
- * @link https://php.net/manual/en/imagick.writeimages.php
- * @param string $filename
- * @param bool $adjoin
- * @return bool <b>TRUE</b> on success.
- */
- public function writeImages ($filename, $adjoin) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds blur filter to image
- * @link https://php.net/manual/en/imagick.blurimage.php
- * @param float $radius <p>
- * Blur radius
- * </p>
- * @param float $sigma <p>
- * Standard deviation
- * </p>
- * @param int $channel [optional] <p>
- * The Channeltype
- * constant. When not supplied, all channels are blurred.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function blurImage ($radius, $sigma, $channel = null) {}
-
- /**
- * Changes the size of an image to the given dimensions and removes any associated profiles.<br>
- * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
- * If false, the calculations should produce the same results as ImageMagick CLI does.<br>
- * <br>
- * <b>Note:</b> The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
- * @link https://php.net/manual/en/imagick.thumbnailimage.php
- * @param int $columns <p>
- * Image width
- * </p>
- * @param int $rows <p>
- * Image height
- * </p>
- * @param bool $bestfit [optional] <p>
- * Whether to force maximum values
- * </p>
- * The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
- * @param bool $fill [optional]
- * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
- * @return bool <b>TRUE</b> on success.
- * @since 2.0.0
- */
- public function thumbnailImage ($columns, $rows, $bestfit = false, $fill = false, $legacy = false) {}
-
- /**
- * Creates a cropped thumbnail at the requested size.
- * If legacy is true, uses the incorrect behaviour that was present until Imagick 3.4.0.
- * If false it uses the correct behaviour.
- * @link https://php.net/manual/en/imagick.cropthumbnailimage.php
- * @param int $width The width of the thumbnail
- * @param int $height The Height of the thumbnail
- * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
- * @return bool TRUE on succes
- * @throws ImagickException Throws ImagickException on error
- * @since 2.0.0
- */
- public function cropThumbnailImage ($width, $height, $legacy = false) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the filename of a particular image in a sequence
- * @link https://php.net/manual/en/imagick.getimagefilename.php
- * @return string a string with the filename of the image.
- */
- public function getImageFilename () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the filename of a particular image
- * @link https://php.net/manual/en/imagick.setimagefilename.php
- * @param string $filename
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageFilename ($filename) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the format of a particular image in a sequence
- * @link https://php.net/manual/en/imagick.getimageformat.php
- * @return string a string containing the image format on success.
- */
- public function getImageFormat () {}
-
- /**
- * @link https://secure.php.net/manual/en/imagick.getimagemimetype.php
- * @return string Returns the image mime-type.
- */
- public function getImageMimeType () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Removes an image from the image list
- * @link https://php.net/manual/en/imagick.removeimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function removeImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Destroys the Imagick object
- * @link https://php.net/manual/en/imagick.destroy.php
- * @return bool <b>TRUE</b> on success.
- */
- public function destroy () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Clears all resources associated to Imagick object
- * @link https://php.net/manual/en/imagick.clear.php
- * @return bool <b>TRUE</b> on success.
- */
- public function clear () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image length in bytes
- * @link https://php.net/manual/en/imagick.getimagesize.php
- * @return int an int containing the current image size.
- * @deprecated use {@see Imagick::getImageLength()} instead
- */
- public function getImageSize () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image sequence as a blob
- * @link https://php.net/manual/en/imagick.getimageblob.php
- * @return string a string containing the image.
- */
- public function getImageBlob () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns all image sequences as a blob
- * @link https://php.net/manual/en/imagick.getimagesblob.php
- * @return string a string containing the images. On failure, throws ImagickException on failure
- * @throws ImagickException on failure
- */
- public function getImagesBlob () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the Imagick iterator to the first image
- * @link https://php.net/manual/en/imagick.setfirstiterator.php
- * @return bool <b>TRUE</b> on success.
- */
- public function setFirstIterator () {}
-
- /**
- * (PECL imagick 2.0.1)<br/>
- * Sets the Imagick iterator to the last image
- * @link https://php.net/manual/en/imagick.setlastiterator.php
- * @return bool <b>TRUE</b> on success.
- */
- public function setLastIterator () {}
-
- public function resetIterator () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Move to the previous image in the object
- * @link https://php.net/manual/en/imagick.previousimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function previousImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Moves to the next image
- * @link https://php.net/manual/en/imagick.nextimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function nextImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Checks if the object has a previous image
- * @link https://php.net/manual/en/imagick.haspreviousimage.php
- * @return bool <b>TRUE</b> if the object has more images when traversing the list in the
- * reverse direction, returns <b>FALSE</b> if there are none.
- */
- public function hasPreviousImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Checks if the object has more images
- * @link https://php.net/manual/en/imagick.hasnextimage.php
- * @return bool <b>TRUE</b> if the object has more images when traversing the list in the
- * forward direction, returns <b>FALSE</b> if there are none.
- */
- public function hasNextImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Set the iterator position
- * @link https://php.net/manual/en/imagick.setimageindex.php
- * @param int $index <p>
- * The position to set the iterator to
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageIndex ($index) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the index of the current active image
- * @link https://php.net/manual/en/imagick.getimageindex.php
- * @return int an integer containing the index of the image in the stack.
- */
- public function getImageIndex () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds a comment to your image
- * @link https://php.net/manual/en/imagick.commentimage.php
- * @param string $comment <p>
- * The comment to add
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function commentImage ($comment) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Extracts a region of the image
- * @link https://php.net/manual/en/imagick.cropimage.php
- * @param int $width <p>
- * The width of the crop
- * </p>
- * @param int $height <p>
- * The height of the crop
- * </p>
- * @param int $x <p>
- * The X coordinate of the cropped region's top left corner
- * </p>
- * @param int $y <p>
- * The Y coordinate of the cropped region's top left corner
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function cropImage ($width, $height, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds a label to an image
- * @link https://php.net/manual/en/imagick.labelimage.php
- * @param string $label <p>
- * The label to add
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function labelImage ($label) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the width and height as an associative array
- * @link https://php.net/manual/en/imagick.getimagegeometry.php
- * @return array an array with the width/height of the image.
- */
- public function getImageGeometry () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Renders the ImagickDraw object on the current image
- * @link https://php.net/manual/en/imagick.drawimage.php
- * @param ImagickDraw $draw <p>
- * The drawing operations to render on the image.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function drawImage (ImagickDraw $draw) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Sets the image compression quality
- * @link https://php.net/manual/en/imagick.setimagecompressionquality.php
- * @param int $quality <p>
- * The image compression quality as an integer
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageCompressionQuality ($quality) {}
-
- /**
- * (PECL imagick 2.2.2)<br/>
- * Gets the current image's compression quality
- * @link https://php.net/manual/en/imagick.getimagecompressionquality.php
- * @return int integer describing the images compression quality
- */
- public function getImageCompressionQuality () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Annotates an image with text
- * @link https://php.net/manual/en/imagick.annotateimage.php
- * @param ImagickDraw $draw_settings <p>
- * The ImagickDraw object that contains settings for drawing the text
- * </p>
- * @param float $x <p>
- * Horizontal offset in pixels to the left of text
- * </p>
- * @param float $y <p>
- * Vertical offset in pixels to the baseline of text
- * </p>
- * @param float $angle <p>
- * The angle at which to write the text
- * </p>
- * @param string $text <p>
- * The string to draw
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function annotateImage (ImagickDraw $draw_settings, $x, $y, $angle, $text) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Composite one image onto another
- * @link https://php.net/manual/en/imagick.compositeimage.php
- * @param Imagick $composite_object <p>
- * Imagick object which holds the composite image
- * </p>
- * @param int $composite Composite operator
- * @param int $x <p>
- * The column offset of the composited image
- * </p>
- * @param int $y <p>
- * The row offset of the composited image
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function compositeImage (Imagick $composite_object, $composite, $x, $y, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Control the brightness, saturation, and hue
- * @link https://php.net/manual/en/imagick.modulateimage.php
- * @param float $brightness
- * @param float $saturation
- * @param float $hue
- * @return bool <b>TRUE</b> on success.
- */
- public function modulateImage ($brightness, $saturation, $hue) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the number of unique colors in the image
- * @link https://php.net/manual/en/imagick.getimagecolors.php
- * @return int <b>TRUE</b> on success.
- */
- public function getImageColors () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a composite image
- * @link https://php.net/manual/en/imagick.montageimage.php
- * @param ImagickDraw $draw <p>
- * The font name, size, and color are obtained from this object.
- * </p>
- * @param string $tile_geometry <p>
- * The number of tiles per row and page (e.g. 6x4+0+0).
- * </p>
- * @param string $thumbnail_geometry <p>
- * Preferred image size and border size of each thumbnail
- * (e.g. 120x120+4+3>).
- * </p>
- * @param int $mode <p>
- * Thumbnail framing mode, see Montage Mode constants.
- * </p>
- * @param string $frame <p>
- * Surround the image with an ornamental border (e.g. 15x15+3+3). The
- * frame color is that of the thumbnail's matte color.
- * </p>
- * @return Imagick <b>TRUE</b> on success.
- */
- public function montageImage (ImagickDraw $draw, $tile_geometry, $thumbnail_geometry, $mode, $frame) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Identifies an image and fetches attributes
- * @link https://php.net/manual/en/imagick.identifyimage.php
- * @param bool $appendRawOutput [optional]
- * @return array Identifies an image and returns the attributes. Attributes include
- * the image width, height, size, and others.
- */
- public function identifyImage ($appendRawOutput = false) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Changes the value of individual pixels based on a threshold
- * @link https://php.net/manual/en/imagick.thresholdimage.php
- * @param float $threshold
- * @param int $channel [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function thresholdImage ($threshold, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Selects a threshold for each pixel based on a range of intensity
- * @link https://php.net/manual/en/imagick.adaptivethresholdimage.php
- * @param int $width <p>
- * Width of the local neighborhood.
- * </p>
- * @param int $height <p>
- * Height of the local neighborhood.
- * </p>
- * @param int $offset <p>
- * The mean offset
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function adaptiveThresholdImage ($width, $height, $offset) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Forces all pixels below the threshold into black
- * @link https://php.net/manual/en/imagick.blackthresholdimage.php
- * @param mixed $threshold <p>
- * The threshold below which everything turns black
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function blackThresholdImage ($threshold) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Force all pixels above the threshold into white
- * @link https://php.net/manual/en/imagick.whitethresholdimage.php
- * @param mixed $threshold
- * @return bool <b>TRUE</b> on success.
- */
- public function whiteThresholdImage ($threshold) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Append a set of images
- * @link https://php.net/manual/en/imagick.appendimages.php
- * @param bool $stack [optional] <p>
- * Whether to stack the images vertically.
- * By default (or if <b>FALSE</b> is specified) images are stacked left-to-right.
- * If <i>stack</i> is <b>TRUE</b>, images are stacked top-to-bottom.
- * </p>
- * @return Imagick Imagick instance on success.
- */
- public function appendImages ($stack = false) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Simulates a charcoal drawing
- * @link https://php.net/manual/en/imagick.charcoalimage.php
- * @param float $radius <p>
- * The radius of the Gaussian, in pixels, not counting the center pixel
- * </p>
- * @param float $sigma <p>
- * The standard deviation of the Gaussian, in pixels
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function charcoalImage ($radius, $sigma) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Enhances the contrast of a color image
- * @link https://php.net/manual/en/imagick.normalizeimage.php
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function normalizeImage ($channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Simulates an oil painting
- * @link https://php.net/manual/en/imagick.oilpaintimage.php
- * @param float $radius <p>
- * The radius of the circular neighborhood.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function oilPaintImage ($radius) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Reduces the image to a limited number of color level
- * @link https://php.net/manual/en/imagick.posterizeimage.php
- * @param int $levels
- * @param bool $dither
- * @return bool <b>TRUE</b> on success.
- */
- public function posterizeImage ($levels, $dither) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Radial blurs an image
- * @link https://php.net/manual/en/imagick.radialblurimage.php
- * @param float $angle
- * @param int $channel [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function radialBlurImage ($angle, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a simulated 3d button-like effect
- * @link https://php.net/manual/en/imagick.raiseimage.php
- * @param int $width
- * @param int $height
- * @param int $x
- * @param int $y
- * @param bool $raise
- * @return bool <b>TRUE</b> on success.
- */
- public function raiseImage ($width, $height, $x, $y, $raise) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Resample image to desired resolution
- * @link https://php.net/manual/en/imagick.resampleimage.php
- * @param float $x_resolution
- * @param float $y_resolution
- * @param int $filter
- * @param float $blur
- * @return bool <b>TRUE</b> on success.
- */
- public function resampleImage ($x_resolution, $y_resolution, $filter, $blur) {}
-
- /**
- * Scales an image to the desired dimensions with one of these filters:<br>
- * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
- * If false, the calculations should produce the same results as ImageMagick CLI does.<br>
- * <br>
- * <b>Note:</b> The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched.<br>
- * In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
- * @link https://php.net/manual/en/imagick.resizeimage.php
- * @param int $columns Width of the image
- * @param int $rows Height of the image
- * @param int $filter Refer to the list of filter constants.
- * @param float $blur The blur factor where > 1 is blurry, < 1 is sharp.
- * @param bool $bestfit [optional] Added since 2.1.0. Added optional fit parameter. This method now supports proportional scaling. Pass zero as either parameter for proportional scaling
- * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
- * @return bool TRUE on success
- * @since 2.0.0
- */
- public function resizeImage ($columns, $rows, $filter, $blur, $bestfit = false, $legacy = false) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Offsets an image
- * @link https://php.net/manual/en/imagick.rollimage.php
- * @param int $x <p>
- * The X offset.
- * </p>
- * @param int $y <p>
- * The Y offset.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function rollImage ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Rotates an image
- * @link https://php.net/manual/en/imagick.rotateimage.php
- * @param mixed $background <p>
- * The background color
- * </p>
- * @param float $degrees <p>
- * The number of degrees to rotate the image
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function rotateImage ($background, $degrees) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Scales an image with pixel sampling
- * @link https://php.net/manual/en/imagick.sampleimage.php
- * @param int $columns
- * @param int $rows
- * @return bool <b>TRUE</b> on success.
- */
- public function sampleImage ($columns, $rows) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Applies a solarizing effect to the image
- * @link https://php.net/manual/en/imagick.solarizeimage.php
- * @param int $threshold
- * @return bool <b>TRUE</b> on success.
- */
- public function solarizeImage ($threshold) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Simulates an image shadow
- * @link https://php.net/manual/en/imagick.shadowimage.php
- * @param float $opacity
- * @param float $sigma
- * @param int $x
- * @param int $y
- * @return bool <b>TRUE</b> on success.
- */
- public function shadowImage ($opacity, $sigma, $x, $y) {}
-
- /**
- * @param $key
- * @param $value
- */
- public function setImageAttribute ($key, $value) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image background color
- * @link https://php.net/manual/en/imagick.setimagebackgroundcolor.php
- * @param mixed $background
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageBackgroundColor ($background) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image composite operator
- * @link https://php.net/manual/en/imagick.setimagecompose.php
- * @param int $compose
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageCompose ($compose) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image compression
- * @link https://php.net/manual/en/imagick.setimagecompression.php
- * @param int $compression <p>
- * One of the <b>COMPRESSION</b> constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageCompression ($compression) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image delay
- * @link https://php.net/manual/en/imagick.setimagedelay.php
- * @param int $delay <p>
- * The amount of time expressed in 'ticks' that the image should be
- * displayed for. For animated GIFs there are 100 ticks per second, so a
- * value of 20 would be 20/100 of a second aka 1/5th of a second.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageDelay ($delay) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image depth
- * @link https://php.net/manual/en/imagick.setimagedepth.php
- * @param int $depth
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageDepth ($depth) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image gamma
- * @link https://php.net/manual/en/imagick.setimagegamma.php
- * @param float $gamma
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageGamma ($gamma) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image iterations
- * @link https://php.net/manual/en/imagick.setimageiterations.php
- * @param int $iterations <p>
- * The number of iterations the image should loop over. Set to '0' to loop
- * continuously.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageIterations ($iterations) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image matte color
- * @link https://php.net/manual/en/imagick.setimagemattecolor.php
- * @param mixed $matte
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageMatteColor ($matte) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the page geometry of the image
- * @link https://php.net/manual/en/imagick.setimagepage.php
- * @param int $width
- * @param int $height
- * @param int $x
- * @param int $y
- * @return bool <b>TRUE</b> on success.
- */
- public function setImagePage ($width, $height, $x, $y) {}
-
- /**
- * @param $filename
- */
- public function setImageProgressMonitor ($filename) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image resolution
- * @link https://php.net/manual/en/imagick.setimageresolution.php
- * @param float $x_resolution
- * @param float $y_resolution
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageResolution ($x_resolution, $y_resolution) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image scene
- * @link https://php.net/manual/en/imagick.setimagescene.php
- * @param int $scene
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageScene ($scene) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image ticks-per-second
- * @link https://php.net/manual/en/imagick.setimagetickspersecond.php
- * @param int $ticks_per_second <p>
- * The duration for which an image should be displayed expressed in ticks
- * per second.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageTicksPerSecond ($ticks_per_second) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image type
- * @link https://php.net/manual/en/imagick.setimagetype.php
- * @param int $image_type
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageType ($image_type) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image units of resolution
- * @link https://php.net/manual/en/imagick.setimageunits.php
- * @param int $units
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageUnits ($units) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sharpens an image
- * @link https://php.net/manual/en/imagick.sharpenimage.php
- * @param float $radius
- * @param float $sigma
- * @param int $channel [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function sharpenImage ($radius, $sigma, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Shaves pixels from the image edges
- * @link https://php.net/manual/en/imagick.shaveimage.php
- * @param int $columns
- * @param int $rows
- * @return bool <b>TRUE</b> on success.
- */
- public function shaveImage ($columns, $rows) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creating a parallelogram
- * @link https://php.net/manual/en/imagick.shearimage.php
- * @param mixed $background <p>
- * The background color
- * </p>
- * @param float $x_shear <p>
- * The number of degrees to shear on the x axis
- * </p>
- * @param float $y_shear <p>
- * The number of degrees to shear on the y axis
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function shearImage ($background, $x_shear, $y_shear) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Splices a solid color into the image
- * @link https://php.net/manual/en/imagick.spliceimage.php
- * @param int $width
- * @param int $height
- * @param int $x
- * @param int $y
- * @return bool <b>TRUE</b> on success.
- */
- public function spliceImage ($width, $height, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Fetch basic attributes about the image
- * @link https://php.net/manual/en/imagick.pingimage.php
- * @param string $filename <p>
- * The filename to read the information from.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function pingImage ($filename) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Reads image from open filehandle
- * @link https://php.net/manual/en/imagick.readimagefile.php
- * @param resource $filehandle
- * @param string $fileName [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function readImageFile ($filehandle, $fileName = null) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Displays an image
- * @link https://php.net/manual/en/imagick.displayimage.php
- * @param string $servername <p>
- * The X server name
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function displayImage ($servername) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Displays an image or image sequence
- * @link https://php.net/manual/en/imagick.displayimages.php
- * @param string $servername <p>
- * The X server name
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function displayImages ($servername) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Randomly displaces each pixel in a block
- * @link https://php.net/manual/en/imagick.spreadimage.php
- * @param float $radius
- * @return bool <b>TRUE</b> on success.
- */
- public function spreadImage ($radius) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Swirls the pixels about the center of the image
- * @link https://php.net/manual/en/imagick.swirlimage.php
- * @param float $degrees
- * @return bool <b>TRUE</b> on success.
- */
- public function swirlImage ($degrees) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Strips an image of all profiles and comments
- * @link https://php.net/manual/en/imagick.stripimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function stripImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns formats supported by Imagick
- * @link https://php.net/manual/en/imagick.queryformats.php
- * @param string $pattern [optional]
- * @return array an array containing the formats supported by Imagick.
- */
- public static function queryFormats ($pattern = "*") {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the configured fonts
- * @link https://php.net/manual/en/imagick.queryfonts.php
- * @param string $pattern [optional] <p>
- * The query pattern
- * </p>
- * @return array an array containing the configured fonts.
- */
- public static function queryFonts ($pattern = "*") {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns an array representing the font metrics
- * @link https://php.net/manual/en/imagick.queryfontmetrics.php
- * @param ImagickDraw $properties <p>
- * ImagickDraw object containing font properties
- * </p>
- * @param string $text <p>
- * The text
- * </p>
- * @param bool $multiline [optional] <p>
- * Multiline parameter. If left empty it is autodetected
- * </p>
- * @return array a multi-dimensional array representing the font metrics.
- */
- public function queryFontMetrics (ImagickDraw $properties, $text, $multiline = null) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Hides a digital watermark within the image
- * @link https://php.net/manual/en/imagick.steganoimage.php
- * @param Imagick $watermark_wand
- * @param int $offset
- * @return Imagick <b>TRUE</b> on success.
- */
- public function steganoImage (Imagick $watermark_wand, $offset) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds random noise to the image
- * @link https://php.net/manual/en/imagick.addnoiseimage.php
- * @param int $noise_type <p>
- * The type of the noise. Refer to this list of
- * noise constants.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function addNoiseImage ($noise_type, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Simulates motion blur
- * @link https://php.net/manual/en/imagick.motionblurimage.php
- * @param float $radius <p>
- * The radius of the Gaussian, in pixels, not counting the center pixel.
- * </p>
- * @param float $sigma <p>
- * The standard deviation of the Gaussian, in pixels.
- * </p>
- * @param float $angle <p>
- * Apply the effect along this angle.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * The channel argument affects only if Imagick is compiled against ImageMagick version
- * 6.4.4 or greater.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function motionBlurImage ($radius, $sigma, $angle, $channel = Imagick::CHANNEL_DEFAULT) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Forms a mosaic from images
- * @link https://php.net/manual/en/imagick.mosaicimages.php
- * @return Imagick <b>TRUE</b> on success.
- */
- public function mosaicImages () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Method morphs a set of images
- * @link https://php.net/manual/en/imagick.morphimages.php
- * @param int $number_frames <p>
- * The number of in-between images to generate.
- * </p>
- * @return Imagick This method returns a new Imagick object on success.
- * Throw an <b>ImagickException</b> on error.
- * @throws ImagickException on error
- */
- public function morphImages ($number_frames) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Scales an image proportionally to half its size
- * @link https://php.net/manual/en/imagick.minifyimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function minifyImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Transforms an image
- * @link https://php.net/manual/en/imagick.affinetransformimage.php
- * @param ImagickDraw $matrix <p>
- * The affine matrix
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function affineTransformImage (ImagickDraw $matrix) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Average a set of images
- * @link https://php.net/manual/en/imagick.averageimages.php
- * @return Imagick a new Imagick object on success.
- */
- public function averageImages () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Surrounds the image with a border
- * @link https://php.net/manual/en/imagick.borderimage.php
- * @param mixed $bordercolor <p>
- * ImagickPixel object or a string containing the border color
- * </p>
- * @param int $width <p>
- * Border width
- * </p>
- * @param int $height <p>
- * Border height
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function borderImage ($bordercolor, $width, $height) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Removes a region of an image and trims
- * @link https://php.net/manual/en/imagick.chopimage.php
- * @param int $width <p>
- * Width of the chopped area
- * </p>
- * @param int $height <p>
- * Height of the chopped area
- * </p>
- * @param int $x <p>
- * X origo of the chopped area
- * </p>
- * @param int $y <p>
- * Y origo of the chopped area
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function chopImage ($width, $height, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Clips along the first path from the 8BIM profile
- * @link https://php.net/manual/en/imagick.clipimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function clipImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Clips along the named paths from the 8BIM profile
- * @link https://php.net/manual/en/imagick.clippathimage.php
- * @param string $pathname <p>
- * The name of the path
- * </p>
- * @param bool $inside <p>
- * If <b>TRUE</b> later operations take effect inside clipping path.
- * Otherwise later operations take effect outside clipping path.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function clipPathImage ($pathname, $inside) {}
-
- /**
- * @param $pathname
- * @param $inside
- */
- public function clipImagePath ($pathname, $inside) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Composites a set of images
- * @link https://php.net/manual/en/imagick.coalesceimages.php
- * @return Imagick a new Imagick object on success.
- */
- public function coalesceImages () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Changes the color value of any pixel that matches target
- * @link https://php.net/manual/en/imagick.colorfloodfillimage.php
- * @param mixed $fill <p>
- * ImagickPixel object containing the fill color
- * </p>
- * @param float $fuzz <p>
- * The amount of fuzz. For example, set fuzz to 10 and the color red at
- * intensities of 100 and 102 respectively are now interpreted as the
- * same color for the purposes of the floodfill.
- * </p>
- * @param mixed $bordercolor <p>
- * ImagickPixel object containing the border color
- * </p>
- * @param int $x <p>
- * X start position of the floodfill
- * </p>
- * @param int $y <p>
- * Y start position of the floodfill
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function colorFloodfillImage ($fill, $fuzz, $bordercolor, $x, $y) {}
-
- /**
- * Blends the fill color with each pixel in the image. The 'opacity' color is a per channel strength factor for how strongly the color should be applied.<br>
- * If legacy is true, the behaviour of this function is incorrect, but consistent with how it behaved before Imagick version 3.4.0
- * @link https://php.net/manual/en/imagick.colorizeimage.php
- * @param mixed $colorize <p>
- * ImagickPixel object or a string containing the colorize color
- * </p>
- * @param mixed $opacity <p>
- * ImagickPixel object or an float containing the opacity value.
- * 1.0 is fully opaque and 0.0 is fully transparent.
- * </p>
- * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
- * @return bool <b>TRUE</b> on success.
- * @throws ImagickException Throws ImagickException on error
- * @since 2.0.0
- */
- public function colorizeImage ($colorize, $opacity, $legacy = false) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the difference in one or more images
- * @link https://php.net/manual/en/imagick.compareimagechannels.php
- * @param Imagick $image <p>
- * Imagick object containing the image to compare.
- * </p>
- * @param int $channelType <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @param int $metricType <p>
- * One of the metric type constants.
- * </p>
- * @return array Array consisting of new_wand and
- * distortion.
- */
- public function compareImageChannels (Imagick $image, $channelType, $metricType) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Compares an image to a reconstructed image
- * @link https://php.net/manual/en/imagick.compareimages.php
- * @param Imagick $compare <p>
- * An image to compare to.
- * </p>
- * @param int $metric <p>
- * Provide a valid metric type constant. Refer to this
- * list of metric constants.
- * </p>
- * @return array Array consisting of an Imagick object of the
- * reconstructed image and a float representing the difference.
- * @throws ImagickException Throws ImagickException on error.
- */
- public function compareImages (Imagick $compare, $metric) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Change the contrast of the image
- * @link https://php.net/manual/en/imagick.contrastimage.php
- * @param bool $sharpen <p>
- * The sharpen value
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function contrastImage ($sharpen) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Combines one or more images into a single image
- * @link https://php.net/manual/en/imagick.combineimages.php
- * @param int $channelType <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return Imagick <b>TRUE</b> on success.
- */
- public function combineImages ($channelType) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Applies a custom convolution kernel to the image
- * @link https://php.net/manual/en/imagick.convolveimage.php
- * @param array $kernel <p>
- * The convolution kernel
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function convolveImage (array $kernel, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Displaces an image's colormap
- * @link https://php.net/manual/en/imagick.cyclecolormapimage.php
- * @param int $displace <p>
- * The amount to displace the colormap.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function cycleColormapImage ($displace) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns certain pixel differences between images
- * @link https://php.net/manual/en/imagick.deconstructimages.php
- * @return Imagick a new Imagick object on success.
- */
- public function deconstructImages () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Reduces the speckle noise in an image
- * @link https://php.net/manual/en/imagick.despeckleimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function despeckleImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Enhance edges within the image
- * @link https://php.net/manual/en/imagick.edgeimage.php
- * @param float $radius <p>
- * The radius of the operation.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function edgeImage ($radius) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a grayscale image with a three-dimensional effect
- * @link https://php.net/manual/en/imagick.embossimage.php
- * @param float $radius <p>
- * The radius of the effect
- * </p>
- * @param float $sigma <p>
- * The sigma of the effect
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function embossImage ($radius, $sigma) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Improves the quality of a noisy image
- * @link https://php.net/manual/en/imagick.enhanceimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function enhanceImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Equalizes the image histogram
- * @link https://php.net/manual/en/imagick.equalizeimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function equalizeImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Applies an expression to an image
- * @link https://php.net/manual/en/imagick.evaluateimage.php
- * @param int $op <p>
- * The evaluation operator
- * </p>
- * @param float $constant <p>
- * The value of the operator
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function evaluateImage ($op, $constant, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * Merges a sequence of images. This is useful for combining Photoshop layers into a single image.
- * This is replaced by:
- * <pre>
- * $im = $im->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN)
- * </pre>
- * @link https://php.net/manual/en/imagick.flattenimages.php
- * @return Imagick Returns an Imagick object containing the merged image.
- * @throws ImagickException Throws ImagickException on error.
- * @since 2.0.0
- */
- public function flattenImages () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a vertical mirror image
- * @link https://php.net/manual/en/imagick.flipimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function flipImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a horizontal mirror image
- * @link https://php.net/manual/en/imagick.flopimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function flopImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds a simulated three-dimensional border
- * @link https://php.net/manual/en/imagick.frameimage.php
- * @param mixed $matte_color <p>
- * ImagickPixel object or a string representing the matte color
- * </p>
- * @param int $width <p>
- * The width of the border
- * </p>
- * @param int $height <p>
- * The height of the border
- * </p>
- * @param int $inner_bevel <p>
- * The inner bevel width
- * </p>
- * @param int $outer_bevel <p>
- * The outer bevel width
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function frameImage ($matte_color, $width, $height, $inner_bevel, $outer_bevel) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Evaluate expression for each pixel in the image
- * @link https://php.net/manual/en/imagick.fximage.php
- * @param string $expression <p>
- * The expression.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return Imagick <b>TRUE</b> on success.
- */
- public function fxImage ($expression, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gamma-corrects an image
- * @link https://php.net/manual/en/imagick.gammaimage.php
- * @param float $gamma <p>
- * The amount of gamma-correction.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function gammaImage ($gamma, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Blurs an image
- * @link https://php.net/manual/en/imagick.gaussianblurimage.php
- * @param float $radius <p>
- * The radius of the Gaussian, in pixels, not counting the center pixel.
- * </p>
- * @param float $sigma <p>
- * The standard deviation of the Gaussian, in pixels.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function gaussianBlurImage ($radius, $sigma, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * @param $key
- */
- public function getImageAttribute ($key) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image background color
- * @link https://php.net/manual/en/imagick.getimagebackgroundcolor.php
- * @return ImagickPixel an ImagickPixel set to the background color of the image.
- */
- public function getImageBackgroundColor () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the chromaticy blue primary point
- * @link https://php.net/manual/en/imagick.getimageblueprimary.php
- * @return array Array consisting of "x" and "y" coordinates of point.
- */
- public function getImageBluePrimary () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image border color
- * @link https://php.net/manual/en/imagick.getimagebordercolor.php
- * @return ImagickPixel <b>TRUE</b> on success.
- */
- public function getImageBorderColor () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the depth for a particular image channel
- * @link https://php.net/manual/en/imagick.getimagechanneldepth.php
- * @param int $channel <p>
- * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
- * </p>
- * @return int <b>TRUE</b> on success.
- */
- public function getImageChannelDepth ($channel) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Compares image channels of an image to a reconstructed image
- * @link https://php.net/manual/en/imagick.getimagechanneldistortion.php
- * @param Imagick $reference <p>
- * Imagick object to compare to.
- * </p>
- * @param int $channel <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @param int $metric <p>
- * One of the metric type constants.
- * </p>
- * @return float <b>TRUE</b> on success.
- */
- public function getImageChannelDistortion (Imagick $reference, $channel, $metric) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the extrema for one or more image channels
- * @link https://php.net/manual/en/imagick.getimagechannelextrema.php
- * @param int $channel <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return array <b>TRUE</b> on success.
- */
- public function getImageChannelExtrema ($channel) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the mean and standard deviation
- * @link https://php.net/manual/en/imagick.getimagechannelmean.php
- * @param int $channel <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return array <b>TRUE</b> on success.
- */
- public function getImageChannelMean ($channel) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns statistics for each channel in the image
- * @link https://php.net/manual/en/imagick.getimagechannelstatistics.php
- * @return array <b>TRUE</b> on success.
- */
- public function getImageChannelStatistics () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the color of the specified colormap index
- * @link https://php.net/manual/en/imagick.getimagecolormapcolor.php
- * @param int $index <p>
- * The offset into the image colormap.
- * </p>
- * @return ImagickPixel <b>TRUE</b> on success.
- */
- public function getImageColormapColor ($index) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image colorspace
- * @link https://php.net/manual/en/imagick.getimagecolorspace.php
- * @return int <b>TRUE</b> on success.
- */
- public function getImageColorspace () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the composite operator associated with the image
- * @link https://php.net/manual/en/imagick.getimagecompose.php
- * @return int <b>TRUE</b> on success.
- */
- public function getImageCompose () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image delay
- * @link https://php.net/manual/en/imagick.getimagedelay.php
- * @return int the image delay.
- */
- public function getImageDelay () {}
-
- /**
- * (PECL imagick 0.9.1-0.9.9)<br/>
- * Gets the image depth
- * @link https://php.net/manual/en/imagick.getimagedepth.php
- * @return int The image depth.
- */
- public function getImageDepth () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Compares an image to a reconstructed image
- * @link https://php.net/manual/en/imagick.getimagedistortion.php
- * @param Imagick $reference <p>
- * Imagick object to compare to.
- * </p>
- * @param int $metric <p>
- * One of the metric type constants.
- * </p>
- * @return float the distortion metric used on the image (or the best guess
- * thereof).
- */
- public function getImageDistortion (Imagick $reference, $metric) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the extrema for the image
- * @link https://php.net/manual/en/imagick.getimageextrema.php
- * @return array an associative array with the keys "min" and "max".
- */
- public function getImageExtrema () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image disposal method
- * @link https://php.net/manual/en/imagick.getimagedispose.php
- * @return int the dispose method on success.
- */
- public function getImageDispose () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image gamma
- * @link https://php.net/manual/en/imagick.getimagegamma.php
- * @return float the image gamma on success.
- */
- public function getImageGamma () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the chromaticy green primary point
- * @link https://php.net/manual/en/imagick.getimagegreenprimary.php
- * @return array an array with the keys "x" and "y" on success, throws an ImagickException on failure.
- * @throws ImagickException on failure
- */
- public function getImageGreenPrimary () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image height
- * @link https://php.net/manual/en/imagick.getimageheight.php
- * @return int the image height in pixels.
- */
- public function getImageHeight () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image histogram
- * @link https://php.net/manual/en/imagick.getimagehistogram.php
- * @return array the image histogram as an array of ImagickPixel objects.
- */
- public function getImageHistogram () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image interlace scheme
- * @link https://php.net/manual/en/imagick.getimageinterlacescheme.php
- * @return int the interlace scheme as an integer on success.
- * Trhow an <b>ImagickException</b> on error.
- * @throws ImagickException on error
- */
- public function getImageInterlaceScheme () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image iterations
- * @link https://php.net/manual/en/imagick.getimageiterations.php
- * @return int the image iterations as an integer.
- */
- public function getImageIterations () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image matte color
- * @link https://php.net/manual/en/imagick.getimagemattecolor.php
- * @return ImagickPixel ImagickPixel object on success.
- */
- public function getImageMatteColor () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the page geometry
- * @link https://php.net/manual/en/imagick.getimagepage.php
- * @return array the page geometry associated with the image in an array with the
- * keys "width", "height", "x", and "y".
- */
- public function getImagePage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the color of the specified pixel
- * @link https://php.net/manual/en/imagick.getimagepixelcolor.php
- * @param int $x <p>
- * The x-coordinate of the pixel
- * </p>
- * @param int $y <p>
- * The y-coordinate of the pixel
- * </p>
- * @return ImagickPixel an ImagickPixel instance for the color at the coordinates given.
- */
- public function getImagePixelColor ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the named image profile
- * @link https://php.net/manual/en/imagick.getimageprofile.php
- * @param string $name <p>
- * The name of the profile to return.
- * </p>
- * @return string a string containing the image profile.
- */
- public function getImageProfile ($name) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the chromaticity red primary point
- * @link https://php.net/manual/en/imagick.getimageredprimary.php
- * @return array the chromaticity red primary point as an array with the keys "x"
- * and "y".
- * Throw an <b>ImagickException</b> on error.
- * @throws ImagickException on error
- */
- public function getImageRedPrimary () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image rendering intent
- * @link https://php.net/manual/en/imagick.getimagerenderingintent.php
- * @return int the image rendering intent.
- */
- public function getImageRenderingIntent () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image X and Y resolution
- * @link https://php.net/manual/en/imagick.getimageresolution.php
- * @return array the resolution as an array.
- */
- public function getImageResolution () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image scene
- * @link https://php.net/manual/en/imagick.getimagescene.php
- * @return int the image scene.
- */
- public function getImageScene () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Generates an SHA-256 message digest
- * @link https://php.net/manual/en/imagick.getimagesignature.php
- * @return string a string containing the SHA-256 hash of the file.
- */
- public function getImageSignature () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image ticks-per-second
- * @link https://php.net/manual/en/imagick.getimagetickspersecond.php
- * @return int the image ticks-per-second.
- */
- public function getImageTicksPerSecond () {}
-
- /**
- * (PECL imagick 0.9.10-0.9.9)<br/>
- * Gets the potential image type
- * @link https://php.net/manual/en/imagick.getimagetype.php
- * @return int the potential image type.
- * <b>imagick::IMGTYPE_UNDEFINED</b>
- * <b>imagick::IMGTYPE_BILEVEL</b>
- * <b>imagick::IMGTYPE_GRAYSCALE</b>
- * <b>imagick::IMGTYPE_GRAYSCALEMATTE</b>
- * <b>imagick::IMGTYPE_PALETTE</b>
- * <b>imagick::IMGTYPE_PALETTEMATTE</b>
- * <b>imagick::IMGTYPE_TRUECOLOR</b>
- * <b>imagick::IMGTYPE_TRUECOLORMATTE</b>
- * <b>imagick::IMGTYPE_COLORSEPARATION</b>
- * <b>imagick::IMGTYPE_COLORSEPARATIONMATTE</b>
- * <b>imagick::IMGTYPE_OPTIMIZE</b>
- */
- public function getImageType () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image units of resolution
- * @link https://php.net/manual/en/imagick.getimageunits.php
- * @return int the image units of resolution.
- */
- public function getImageUnits () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the virtual pixel method
- * @link https://php.net/manual/en/imagick.getimagevirtualpixelmethod.php
- * @return int the virtual pixel method on success.
- */
- public function getImageVirtualPixelMethod () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the chromaticity white point
- * @link https://php.net/manual/en/imagick.getimagewhitepoint.php
- * @return array the chromaticity white point as an associative array with the keys
- * "x" and "y".
- */
- public function getImageWhitePoint () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the image width
- * @link https://php.net/manual/en/imagick.getimagewidth.php
- * @return int the image width.
- */
- public function getImageWidth () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the number of images in the object
- * @link https://php.net/manual/en/imagick.getnumberimages.php
- * @return int the number of images associated with Imagick object.
- */
- public function getNumberImages () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the image total ink density
- * @link https://php.net/manual/en/imagick.getimagetotalinkdensity.php
- * @return float the image total ink density of the image.
- * Throw an <b>ImagickException</b> on error.
- * @throws ImagickException on error
- */
- public function getImageTotalInkDensity () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Extracts a region of the image
- * @link https://php.net/manual/en/imagick.getimageregion.php
- * @param int $width <p>
- * The width of the extracted region.
- * </p>
- * @param int $height <p>
- * The height of the extracted region.
- * </p>
- * @param int $x <p>
- * X-coordinate of the top-left corner of the extracted region.
- * </p>
- * @param int $y <p>
- * Y-coordinate of the top-left corner of the extracted region.
- * </p>
- * @return Imagick Extracts a region of the image and returns it as a new wand.
- */
- public function getImageRegion ($width, $height, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a new image as a copy
- * @link https://php.net/manual/en/imagick.implodeimage.php
- * @param float $radius <p>
- * The radius of the implode
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function implodeImage ($radius) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adjusts the levels of an image
- * @link https://php.net/manual/en/imagick.levelimage.php
- * @param float $blackPoint <p>
- * The image black point
- * </p>
- * @param float $gamma <p>
- * The gamma value
- * </p>
- * @param float $whitePoint <p>
- * The image white point
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function levelImage ($blackPoint, $gamma, $whitePoint, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Scales an image proportionally 2x
- * @link https://php.net/manual/en/imagick.magnifyimage.php
- * @return bool <b>TRUE</b> on success.
- */
- public function magnifyImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Replaces the colors of an image with the closest color from a reference image.
- * @link https://php.net/manual/en/imagick.mapimage.php
- * @param Imagick $map
- * @param bool $dither
- * @return bool <b>TRUE</b> on success.
- */
- public function mapImage (Imagick $map, $dither) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Changes the transparency value of a color
- * @link https://php.net/manual/en/imagick.mattefloodfillimage.php
- * @param float $alpha <p>
- * The level of transparency: 1.0 is fully opaque and 0.0 is fully
- * transparent.
- * </p>
- * @param float $fuzz <p>
- * The fuzz member of image defines how much tolerance is acceptable to
- * consider two colors as the same.
- * </p>
- * @param mixed $bordercolor <p>
- * An <b>ImagickPixel</b> object or string representing the border color.
- * </p>
- * @param int $x <p>
- * The starting x coordinate of the operation.
- * </p>
- * @param int $y <p>
- * The starting y coordinate of the operation.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function matteFloodfillImage ($alpha, $fuzz, $bordercolor, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Applies a digital filter
- * @link https://php.net/manual/en/imagick.medianfilterimage.php
- * @param float $radius <p>
- * The radius of the pixel neighborhood.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function medianFilterImage ($radius) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Negates the colors in the reference image
- * @link https://php.net/manual/en/imagick.negateimage.php
- * @param bool $gray <p>
- * Whether to only negate grayscale pixels within the image.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function negateImage ($gray, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Change any pixel that matches color
- * @link https://php.net/manual/en/imagick.paintopaqueimage.php
- * @param mixed $target <p>
- * Change this target color to the fill color within the image. An
- * ImagickPixel object or a string representing the target color.
- * </p>
- * @param mixed $fill <p>
- * An ImagickPixel object or a string representing the fill color.
- * </p>
- * @param float $fuzz <p>
- * The fuzz member of image defines how much tolerance is acceptable to
- * consider two colors as the same.
- * </p>
- * @param int $channel [optional] <p>
- * Provide any channel constant that is valid for your channel mode. To
- * apply to more than one channel, combine channeltype constants using
- * bitwise operators. Refer to this
- * list of channel constants.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function paintOpaqueImage ($target, $fill, $fuzz, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Changes any pixel that matches color with the color defined by fill
- * @link https://php.net/manual/en/imagick.painttransparentimage.php
- * @param mixed $target <p>
- * Change this target color to specified opacity value within the image.
- * </p>
- * @param float $alpha <p>
- * The level of transparency: 1.0 is fully opaque and 0.0 is fully
- * transparent.
- * </p>
- * @param float $fuzz <p>
- * The fuzz member of image defines how much tolerance is acceptable to
- * consider two colors as the same.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function paintTransparentImage ($target, $alpha, $fuzz) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Quickly pin-point appropriate parameters for image processing
- * @link https://php.net/manual/en/imagick.previewimages.php
- * @param int $preview <p>
- * Preview type. See Preview type constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function previewImages ($preview) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds or removes a profile from an image
- * @link https://php.net/manual/en/imagick.profileimage.php
- * @param string $name
- * @param string $profile
- * @return bool <b>TRUE</b> on success.
- */
- public function profileImage ($name, $profile) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Analyzes the colors within a reference image
- * @link https://php.net/manual/en/imagick.quantizeimage.php
- * @param int $numberColors
- * @param int $colorspace
- * @param int $treedepth
- * @param bool $dither
- * @param bool $measureError
- * @return bool <b>TRUE</b> on success.
- */
- public function quantizeImage ($numberColors, $colorspace, $treedepth, $dither, $measureError) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Analyzes the colors within a sequence of images
- * @link https://php.net/manual/en/imagick.quantizeimages.php
- * @param int $numberColors
- * @param int $colorspace
- * @param int $treedepth
- * @param bool $dither
- * @param bool $measureError
- * @return bool <b>TRUE</b> on success.
- */
- public function quantizeImages ($numberColors, $colorspace, $treedepth, $dither, $measureError) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Smooths the contours of an image
- * @link https://php.net/manual/en/imagick.reducenoiseimage.php
- * @param float $radius
- * @return bool <b>TRUE</b> on success.
- */
- public function reduceNoiseImage ($radius) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Removes the named image profile and returns it
- * @link https://php.net/manual/en/imagick.removeimageprofile.php
- * @param string $name
- * @return string a string containing the profile of the image.
- */
- public function removeImageProfile ($name) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Separates a channel from the image
- * @link https://php.net/manual/en/imagick.separateimagechannel.php
- * @param int $channel
- * @return bool <b>TRUE</b> on success.
- */
- public function separateImageChannel ($channel) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sepia tones an image
- * @link https://php.net/manual/en/imagick.sepiatoneimage.php
- * @param float $threshold
- * @return bool <b>TRUE</b> on success.
- */
- public function sepiaToneImage ($threshold) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image bias for any method that convolves an image
- * @link https://php.net/manual/en/imagick.setimagebias.php
- * @param float $bias
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageBias ($bias) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image chromaticity blue primary point
- * @link https://php.net/manual/en/imagick.setimageblueprimary.php
- * @param float $x
- * @param float $y
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageBluePrimary ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image border color
- * @link https://php.net/manual/en/imagick.setimagebordercolor.php
- * @param mixed $border <p>
- * The border color
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageBorderColor ($border) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the depth of a particular image channel
- * @link https://php.net/manual/en/imagick.setimagechanneldepth.php
- * @param int $channel
- * @param int $depth
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageChannelDepth ($channel, $depth) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the color of the specified colormap index
- * @link https://php.net/manual/en/imagick.setimagecolormapcolor.php
- * @param int $index
- * @param ImagickPixel $color
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageColormapColor ($index, ImagickPixel $color) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image colorspace
- * @link https://php.net/manual/en/imagick.setimagecolorspace.php
- * @param int $colorspace <p>
- * One of the COLORSPACE constants
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageColorspace ($colorspace) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image disposal method
- * @link https://php.net/manual/en/imagick.setimagedispose.php
- * @param int $dispose
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageDispose ($dispose) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image size
- * @link https://php.net/manual/en/imagick.setimageextent.php
- * @param int $columns
- * @param int $rows
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageExtent ($columns, $rows) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image chromaticity green primary point
- * @link https://php.net/manual/en/imagick.setimagegreenprimary.php
- * @param float $x
- * @param float $y
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageGreenPrimary ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image compression
- * @link https://php.net/manual/en/imagick.setimageinterlacescheme.php
- * @param int $interlace_scheme
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageInterlaceScheme ($interlace_scheme) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds a named profile to the Imagick object
- * @link https://php.net/manual/en/imagick.setimageprofile.php
- * @param string $name
- * @param string $profile
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageProfile ($name, $profile) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image chromaticity red primary point
- * @link https://php.net/manual/en/imagick.setimageredprimary.php
- * @param float $x
- * @param float $y
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageRedPrimary ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image rendering intent
- * @link https://php.net/manual/en/imagick.setimagerenderingintent.php
- * @param int $rendering_intent
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageRenderingIntent ($rendering_intent) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image virtual pixel method
- * @link https://php.net/manual/en/imagick.setimagevirtualpixelmethod.php
- * @param int $method
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageVirtualPixelMethod ($method) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image chromaticity white point
- * @link https://php.net/manual/en/imagick.setimagewhitepoint.php
- * @param float $x
- * @param float $y
- * @return bool <b>TRUE</b> on success.
- */
- public function setImageWhitePoint ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adjusts the contrast of an image
- * @link https://php.net/manual/en/imagick.sigmoidalcontrastimage.php
- * @param bool $sharpen
- * @param float $alpha
- * @param float $beta
- * @param int $channel [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function sigmoidalContrastImage ($sharpen, $alpha, $beta, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Composites two images
- * @link https://php.net/manual/en/imagick.stereoimage.php
- * @param Imagick $offset_wand
- * @return bool <b>TRUE</b> on success.
- */
- public function stereoImage (Imagick $offset_wand) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Repeatedly tiles the texture image
- * @link https://php.net/manual/en/imagick.textureimage.php
- * @param Imagick $texture_wand
- * @return bool <b>TRUE</b> on success.
- */
- public function textureImage (Imagick $texture_wand) {}
-
- /**
- * pplies a color vector to each pixel in the image. The 'opacity' color is a per channel strength factor for how strongly the color should be applied.
- * If legacy is true, the behaviour of this function is incorrect, but consistent with how it behaved before Imagick version 3.4.0
- * @link https://php.net/manual/en/imagick.tintimage.php
- * @param mixed $tint
- * @param mixed $opacity
- * @param bool $legacy [optional]
- * @return bool <b>TRUE</b> on success.
- * @throws ImagickException Throws ImagickException on error
- * @since 2.0.0
- */
- public function tintImage ($tint, $opacity, $legacy = false) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sharpens an image
- * @link https://php.net/manual/en/imagick.unsharpmaskimage.php
- * @param float $radius
- * @param float $sigma
- * @param float $amount
- * @param float $threshold
- * @param int $channel [optional]
- * @return bool <b>TRUE</b> on success.
- */
- public function unsharpMaskImage ($radius, $sigma, $amount, $threshold, $channel = Imagick::CHANNEL_ALL) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a new Imagick object
- * @link https://php.net/manual/en/imagick.getimage.php
- * @return Imagick a new Imagick object with the current image sequence.
- */
- public function getImage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds new image to Imagick object image list
- * @link https://php.net/manual/en/imagick.addimage.php
- * @param Imagick $source <p>
- * The source Imagick object
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function addImage (Imagick $source) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Replaces image in the object
- * @link https://php.net/manual/en/imagick.setimage.php
- * @param Imagick $replace <p>
- * The replace Imagick object
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setImage (Imagick $replace) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a new image
- * @link https://php.net/manual/en/imagick.newimage.php
- * @param int $cols <p>
- * Columns in the new image
- * </p>
- * @param int $rows <p>
- * Rows in the new image
- * </p>
- * @param mixed $background <p>
- * The background color used for this image
- * </p>
- * @param string $format [optional] <p>
- * Image format. This parameter was added in Imagick version 2.0.1.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function newImage ($cols, $rows, $background, $format = null) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Creates a new image
- * @link https://php.net/manual/en/imagick.newpseudoimage.php
- * @param int $columns <p>
- * columns in the new image
- * </p>
- * @param int $rows <p>
- * rows in the new image
- * </p>
- * @param string $pseudoString <p>
- * string containing pseudo image definition.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function newPseudoImage ($columns, $rows, $pseudoString) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the object compression type
- * @link https://php.net/manual/en/imagick.getcompression.php
- * @return int the compression constant
- */
- public function getCompression () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the object compression quality
- * @link https://php.net/manual/en/imagick.getcompressionquality.php
- * @return int integer describing the compression quality
- */
- public function getCompressionQuality () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the ImageMagick API copyright as a string
- * @link https://php.net/manual/en/imagick.getcopyright.php
- * @return string a string containing the copyright notice of Imagemagick and
- * Magickwand C API.
- */
- public static function getCopyright () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * The filename associated with an image sequence
- * @link https://php.net/manual/en/imagick.getfilename.php
- * @return string a string on success.
- */
- public function getFilename () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the format of the Imagick object
- * @link https://php.net/manual/en/imagick.getformat.php
- * @return string the format of the image.
- */
- public function getFormat () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the ImageMagick home URL
- * @link https://php.net/manual/en/imagick.gethomeurl.php
- * @return string a link to the imagemagick homepage.
- */
- public static function getHomeURL () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the object interlace scheme
- * @link https://php.net/manual/en/imagick.getinterlacescheme.php
- * @return int Gets the wand interlace
- * scheme.
- */
- public function getInterlaceScheme () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a value associated with the specified key
- * @link https://php.net/manual/en/imagick.getoption.php
- * @param string $key <p>
- * The name of the option
- * </p>
- * @return string a value associated with a wand and the specified key.
- */
- public function getOption ($key) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the ImageMagick package name
- * @link https://php.net/manual/en/imagick.getpackagename.php
- * @return string the ImageMagick package name as a string.
- */
- public static function getPackageName () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the page geometry
- * @link https://php.net/manual/en/imagick.getpage.php
- * @return array the page geometry associated with the Imagick object in
- * an associative array with the keys "width", "height", "x", and "y",
- * throwing ImagickException on error.
- * @throws ImagickException on error
- */
- public function getPage () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the quantum depth
- * @link https://php.net/manual/en/imagick.getquantumdepth.php
- * @return array the Imagick quantum depth as a string.
- */
- public static function getQuantumDepth () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the Imagick quantum range
- * @link https://php.net/manual/en/imagick.getquantumrange.php
- * @return array the Imagick quantum range as a string.
- */
- public static function getQuantumRange () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the ImageMagick release date
- * @link https://php.net/manual/en/imagick.getreleasedate.php
- * @return string the ImageMagick release date as a string.
- */
- public static function getReleaseDate () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the specified resource's memory usage
- * @link https://php.net/manual/en/imagick.getresource.php
- * @param int $type <p>
- * Refer to the list of resourcetype constants.
- * </p>
- * @return int the specified resource's memory usage in megabytes.
- */
- public static function getResource ($type) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the specified resource limit
- * @link https://php.net/manual/en/imagick.getresourcelimit.php
- * @param int $type <p>
- * Refer to the list of resourcetype constants.
- * </p>
- * @return int the specified resource limit in megabytes.
- */
- public static function getResourceLimit ($type) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the horizontal and vertical sampling factor
- * @link https://php.net/manual/en/imagick.getsamplingfactors.php
- * @return array an associative array with the horizontal and vertical sampling
- * factors of the image.
- */
- public function getSamplingFactors () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the size associated with the Imagick object
- * @link https://php.net/manual/en/imagick.getsize.php
- * @return array the size associated with the Imagick object as an array with the
- * keys "columns" and "rows".
- */
- public function getSize () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the ImageMagick API version
- * @link https://php.net/manual/en/imagick.getversion.php
- * @return array the ImageMagick API version as a string and as a number.
- */
- public static function getVersion () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the object's default background color
- * @link https://php.net/manual/en/imagick.setbackgroundcolor.php
- * @param mixed $background
- * @return bool <b>TRUE</b> on success.
- */
- public function setBackgroundColor ($background) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the object's default compression type
- * @link https://php.net/manual/en/imagick.setcompression.php
- * @param int $compression
- * @return bool <b>TRUE</b> on success.
- */
- public function setCompression ($compression) {}
-
- /**
- * (PECL imagick 0.9.10-0.9.9)<br/>
- * Sets the object's default compression quality
- * @link https://php.net/manual/en/imagick.setcompressionquality.php
- * @param int $quality
- * @return bool <b>TRUE</b> on success.
- */
- public function setCompressionQuality ($quality) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the filename before you read or write the image
- * @link https://php.net/manual/en/imagick.setfilename.php
- * @param string $filename
- * @return bool <b>TRUE</b> on success.
- */
- public function setFilename ($filename) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the format of the Imagick object
- * @link https://php.net/manual/en/imagick.setformat.php
- * @param string $format
- * @return bool <b>TRUE</b> on success.
- */
- public function setFormat ($format) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image compression
- * @link https://php.net/manual/en/imagick.setinterlacescheme.php
- * @param int $interlace_scheme
- * @return bool <b>TRUE</b> on success.
- */
- public function setInterlaceScheme ($interlace_scheme) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Set an option
- * @link https://php.net/manual/en/imagick.setoption.php
- * @param string $key
- * @param string $value
- * @return bool <b>TRUE</b> on success.
- */
- public function setOption ($key, $value) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the page geometry of the Imagick object
- * @link https://php.net/manual/en/imagick.setpage.php
- * @param int $width
- * @param int $height
- * @param int $x
- * @param int $y
- * @return bool <b>TRUE</b> on success.
- */
- public function setPage ($width, $height, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the limit for a particular resource in megabytes
- * @link https://php.net/manual/en/imagick.setresourcelimit.php
- * @param int $type <p>
- * Refer to the list of resourcetype constants.
- * </p>
- * @param int $limit <p>
- * The resource limit. The unit depends on the type of the resource being limited.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public static function setResourceLimit ($type, $limit) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image resolution
- * @link https://php.net/manual/en/imagick.setresolution.php
- * @param float $x_resolution <p>
- * The horizontal resolution.
- * </p>
- * @param float $y_resolution <p>
- * The vertical resolution.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setResolution ($x_resolution, $y_resolution) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image sampling factors
- * @link https://php.net/manual/en/imagick.setsamplingfactors.php
- * @param array $factors
- * @return bool <b>TRUE</b> on success.
- */
- public function setSamplingFactors (array $factors) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the size of the Imagick object
- * @link https://php.net/manual/en/imagick.setsize.php
- * @param int $columns
- * @param int $rows
- * @return bool <b>TRUE</b> on success.
- */
- public function setSize ($columns, $rows) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the image type attribute
- * @link https://php.net/manual/en/imagick.settype.php
- * @param int $image_type
- * @return bool <b>TRUE</b> on success.
- */
- public function setType ($image_type) {}
-
- public function key () {}
-
- public function next () {}
-
- public function rewind () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Checks if the current item is valid
- * @link https://php.net/manual/en/imagick.valid.php
- * @return bool <b>TRUE</b> on success.
- */
- public function valid () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a reference to the current Imagick object
- * @link https://php.net/manual/en/imagick.current.php
- * @return Imagick self on success.
- */
- public function current () {}
-
- /**
- * Change the brightness and/or contrast of an image. It converts the brightness and contrast parameters into slope and intercept and calls a polynomical function to apply to the image.
- * @link https://php.net/manual/en/imagick.brightnesscontrastimage.php
- * @param string $brightness
- * @param string $contrast
- * @param int $CHANNEL [optional]
- * @return void
- * @since 3.3.0
- */
- public function brightnessContrastImage ($brightness, $contrast, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
-
- /**
- * Applies a user supplied kernel to the image according to the given morphology method.
- * @link https://php.net/manual/en/imagick.morphology.php
- * @param int $morphologyMethod Which morphology method to use one of the \Imagick::MORPHOLOGY_* constants.
- * @param int $iterations The number of iteration to apply the morphology function. A value of -1 means loop until no change found. How this is applied may depend on the morphology method. Typically this is a value of 1.
- * @param ImagickKernel $ImagickKernel
- * @param int $CHANNEL [optional]
- * @return void
- * @since 3.3.0
- */
- public function morphology ($morphologyMethod, $iterations, ImagickKernel $ImagickKernel, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
-
- /**
- * Applies a custom convolution kernel to the image.
- * @link https://php.net/manual/en/imagick.filter.php
- * @param ImagickKernel $ImagickKernel An instance of ImagickKernel that represents either a single kernel or a linked series of kernels.
- * @param int $CHANNEL [optional] Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT. Refer to this list of channel constants
- * @return void
- * @since 3.3.0
- */
- public function filter (ImagickKernel $ImagickKernel , $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
-
- /**
- * Apply color transformation to an image. The method permits saturation changes, hue rotation, luminance to alpha, and various other effects. Although variable-sized transformation matrices can be used, typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA (or RGBA with offsets).
- * The matrix is similar to those used by Adobe Flash except offsets are in column 6 rather than 5 (in support of CMYKA images) and offsets are normalized (divide Flash offset by 255)
- * @link https://php.net/manual/en/imagick.colormatriximage.php
- * @param string $color_matrix
- * @return void
- * @since 3.3.0
- */
- public function colorMatrixImage ($color_matrix = Imagick::CHANNEL_DEFAULT) { }
-
- /**
- * Deletes an image property.
- * @link https://php.net/manual/en/imagick.deleteimageproperty.php
- * @param string $name The name of the property to delete.
- * @return void
- * @since 3.3.0
- */
- public function deleteImageProperty ($name) { }
-
- /**
- * Implements the discrete Fourier transform (DFT) of the image either as a magnitude / phase or real / imaginary image pair.
- * @link https://php.net/manual/en/imagick.forwardfouriertransformimage.php
- * @param bool $magnitude If true, return as magnitude / phase pair otherwise a real / imaginary image pair.
- * @return void
- * @since 3.3.0
- */
- public function forwardFourierTransformimage ($magnitude) { }
-
- /**
- * Gets the current image's compression type.
- * @link https://php.net/manual/en/imagick.getimagecompression.php
- * @return int
- * @since 3.3.0
- */
- public function getImageCompression () { }
-
- /**
- * Get the StringRegistry entry for the named key or false if not set.
- * @link https://php.net/manual/en/imagick.getregistry.php
- * @param string $key
- * @return string|false
- * @throws Exception Since version >=3.4.3. Throws an exception if the key does not exist, rather than terminating the program.
- * @since 3.3.0
- */
- public static function getRegistry ($key) { }
-
- /**
- * Returns the ImageMagick quantum range as an integer.
- * @link https://php.net/manual/en/imagick.getquantum.php
- * @return int
- * @since 3.3.0
- */
- public static function getQuantum () { }
-
- /**
- * Replaces any embedded formatting characters with the appropriate image property and returns the interpreted text. See https://www.imagemagick.org/script/escape.php for escape sequences.
- * @link https://php.net/manual/en/imagick.identifyformat.php
- * @see https://www.imagemagick.org/script/escape.php
- * @param string $embedText A string containing formatting sequences e.g. "Trim box: %@ number of unique colors: %k".
- * @return bool
- * @since 3.3.0
- */
- public function identifyFormat ($embedText) { }
-
- /**
- * Implements the inverse discrete Fourier transform (DFT) of the image either as a magnitude / phase or real / imaginary image pair.
- * @link https://php.net/manual/en/imagick.inversefouriertransformimage.php
- * @param Imagick $complement The second image to combine with this one to form either the magnitude / phase or real / imaginary image pair.
- * @param bool $magnitude If true, combine as magnitude / phase pair otherwise a real / imaginary image pair.
- * @return void
- * @since 3.3.0
- */
- public function inverseFourierTransformImage ($complement, $magnitude) { }
-
- /**
- * List all the registry settings. Returns an array of all the key/value pairs in the registry
- * @link https://php.net/manual/en/imagick.listregistry.php
- * @return array An array containing the key/values from the registry.
- * @since 3.3.0
- */
- public static function listRegistry () { }
-
- /**
- * Rotational blurs an image.
- * @link https://php.net/manual/en/imagick.rotationalblurimage.php
- * @param string $angle
- * @param string $CHANNEL
- * @return void
- * @since 3.3.0
- */
- public function rotationalBlurImage ($angle, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
-
- /**
- * Selectively blur an image within a contrast threshold. It is similar to the unsharpen mask that sharpens everything with contrast above a certain threshold.
- * @link https://php.net/manual/en/imagick.selectiveblurimage.php
- * @param float $radius
- * @param float $sigma
- * @param float $threshold
- * @param int $CHANNEL Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT. Refer to this list of channel constants
- * @return void
- * @since 3.3.0
- */
- public function selectiveBlurImage ($radius, $sigma, $threshold, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
-
- /**
- * Set whether antialiasing should be used for operations. On by default.
- * @param bool $antialias
- * @return int
- * @since 3.3.0
- */
- public function setAntiAlias ($antialias) { }
-
- /**
- * @link https://php.net/manual/en/imagick.setimagebiasquantum.php
- * @param string $bias
- * @return void
- * @since 3.3.0
- */
- public function setImageBiasQuantum ($bias) { }
-
- /**
- * Set a callback that will be called during the processing of the Imagick image.
- * @link https://php.net/manual/en/imagick.setprogressmonitor.php
- * @param callable $callback The progress function to call. It should return true if image processing should continue, or false if it should be cancelled.
- * The offset parameter indicates the progress and the span parameter indicates the total amount of work needed to be done.
- * <pre> bool callback ( mixed $offset , mixed $span ) </pre>
- * <b>Caution</b>
- * The values passed to the callback function are not consistent. In particular the span parameter can increase during image processing. Because of this calculating the percentage complete of an image operation is not trivial.
- * @return void
- * @since 3.3.0
- */
- public function setProgressMonitor ($callback) { }
-
- /**
- * Sets the ImageMagick registry entry named key to value. This is most useful for setting "temporary-path" which controls where ImageMagick creates temporary images e.g. while processing PDFs.
- * @link https://php.net/manual/en/imagick.setregistry.php
- * @param string $key
- * @param string $value
- * @return void
- * @since 3.3.0
- */
- public static function setRegistry ($key, $value) { }
-
- /**
- * Replace each pixel with corresponding statistic from the neighborhood of the specified width and height.
- * @link https://php.net/manual/en/imagick.statisticimage.php
- * @param int $type
- * @param int $width
- * @param int $height
- * @param int $channel [optional]
- * @return void
- * @since 3.3.0
- */
- public function statisticImage ($type, $width, $height, $channel = Imagick::CHANNEL_DEFAULT ) { }
-
- /**
- * Searches for a subimage in the current image and returns a similarity image such that an exact match location is
- * completely white and if none of the pixels match, black, otherwise some gray level in-between.
- * You can also pass in the optional parameters bestMatch and similarity. After calling the function similarity will
- * be set to the 'score' of the similarity between the subimage and the matching position in the larger image,
- * bestMatch will contain an associative array with elements x, y, width, height that describe the matching region.
- *
- * @link https://php.net/manual/en/imagick.subimagematch.php
- * @param Imagick $imagick
- * @param array &$bestMatch [optional]
- * @param float &$similarity [optional] A new image that displays the amount of similarity at each pixel.
- * @param float $similarity_threshold [optional] Only used if compiled with ImageMagick (library) > 7
- * @param int $metric [optional] Only used if compiled with ImageMagick (library) > 7
- * @return Imagick
- * @since 3.3.0
- */
- public function subImageMatch (Imagick $imagick, array &$bestMatch, &$similarity, $similarity_threshold, $metric) { }
-
- /**
- * Is an alias of Imagick::subImageMatch
- *
- * @param Imagick $imagick
- * @param array $bestMatch [optional]
- * @param float $similarity [optional] A new image that displays the amount of similarity at each pixel.
- * @param float $similarity_threshold [optional]
- * @param int $metric [optional]
- * @return Imagick
- * @see Imagick::subImageMatch() This function is an alias of subImageMatch()
- * @since 3.4.0
- */
- public function similarityImage (Imagick $imagick, array &$bestMatch, &$similarity, $similarity_threshold, $metric) { }
-
- /**
- * Returns any ImageMagick configure options that match the specified pattern (e.g. "*" for all). Options include NAME, VERSION, LIB_VERSION, etc.
- * @return string
- * @since 3.4.0
- */
- public function getConfigureOptions () { }
-
- /**
- * GetFeatures() returns the ImageMagick features that have been compiled into the runtime.
- * @return string
- * @since 3.4.0
- */
- public function getFeatures () { }
-
- /**
- * @return int
- * @since 3.4.0
- */
- public function getHDRIEnabled () { }
-
- /**
- * Sets the image channel mask. Returns the previous set channel mask.
- * Only works with Imagick >=7
- * @param int $channel
- * @since 3.4.0
- */
- public function setImageChannelMask ($channel) {}
-
- /**
- * Merge multiple images of the same size together with the selected operator. https://www.imagemagick.org/Usage/layers/#evaluate-sequence
- * @param int $EVALUATE_CONSTANT
- * @return bool
- * @see https://www.imagemagick.org/Usage/layers/#evaluate-sequence
- * @since 3.4.0
- */
- public function evaluateImages ($EVALUATE_CONSTANT) { }
-
- /**
- * Extracts the 'mean' from the image and adjust the image to try make set its gamma appropriately.
- * @param int $channel [optional] Default value Imagick::CHANNEL_ALL
- * @return bool
- * @since 3.4.1
- */
- public function autoGammaImage ($channel = Imagick::CHANNEL_ALL) { }
-
- /**
- * Adjusts an image so that its orientation is suitable $ for viewing (i.e. top-left orientation).
- * @return bool
- * @since 3.4.1
- */
- public function autoOrient () { }
-
- /**
- * Composite one image onto another using the specified gravity.
- *
- * @param Imagick $imagick
- * @param int $COMPOSITE_CONSTANT
- * @param int $GRAVITY_CONSTANT
- * @return bool
- * @since 3.4.1
- */
- public function compositeImageGravity(Imagick $imagick, $COMPOSITE_CONSTANT, $GRAVITY_CONSTANT) { }
-
- /**
- * Attempts to increase the appearance of large-scale light-dark transitions.
- *
- * @param float $radius
- * @param float $strength
- * @return bool
- * @since 3.4.1
- */
- public function localContrastImage($radius, $strength) { }
-
- /**
- * Identifies the potential image type, returns one of the Imagick::IMGTYPE_* constants
- * @return int
- * @since 3.4.3
- */
- public function identifyImageType() { }
-
- /**
- * Sets the image to the specified alpha level. Will replace ImagickDraw::setOpacity()
- *
- * @param float $alpha
- * @return bool
- * @since 3.4.3
- */
- public function setImageAlpha($alpha) { }
-}
-
-/**
- * @method ImagickDraw clone() (PECL imagick 2.0.0)<br/>Makes an exact copy of the specified ImagickDraw object
- * @link https://php.net/manual/en/class.imagickdraw.php
- */
-class ImagickDraw {
-
- public function resetVectorGraphics () {}
-
- public function getTextKerning () {}
-
- /**
- * @param $kerning
- */
- public function setTextKerning ($kerning) {}
-
- public function getTextInterWordSpacing () {}
-
- /**
- * @param $spacing
- */
- public function setTextInterWordSpacing ($spacing) {}
-
- public function getTextInterLineSpacing () {}
-
- /**
- * @param $spacing
- */
- public function setTextInterLineSpacing ($spacing) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * The ImagickDraw constructor
- * @link https://php.net/manual/en/imagickdraw.construct.php
- */
- public function __construct () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the fill color to be used for drawing filled objects
- * @link https://php.net/manual/en/imagickdraw.setfillcolor.php
- * @param ImagickPixel $fill_pixel <p>
- * ImagickPixel to use to set the color
- * </p>
- * @return bool No value is returned.
- */
- public function setFillColor (ImagickPixel $fill_pixel) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the opacity to use when drawing using the fill color or fill texture
- * @link https://php.net/manual/en/imagickdraw.setfillalpha.php
- * @param float $opacity <p>
- * fill alpha
- * </p>
- * @return bool No value is returned.
- */
- public function setFillAlpha ($opacity) {}
-
- /**
- * @param $x_resolution
- * @param $y_resolution
- */
- public function setResolution ($x_resolution, $y_resolution) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the color used for stroking object outlines
- * @link https://php.net/manual/en/imagickdraw.setstrokecolor.php
- * @param ImagickPixel $stroke_pixel <p>
- * the stroke color
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeColor (ImagickPixel $stroke_pixel) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the opacity of stroked object outlines
- * @link https://php.net/manual/en/imagickdraw.setstrokealpha.php
- * @param float $opacity <p>
- * opacity
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeAlpha ($opacity) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the width of the stroke used to draw object outlines
- * @link https://php.net/manual/en/imagickdraw.setstrokewidth.php
- * @param float $stroke_width <p>
- * stroke width
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeWidth ($stroke_width) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Clears the ImagickDraw
- * @link https://php.net/manual/en/imagickdraw.clear.php
- * @return bool an ImagickDraw object.
- */
- public function clear () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a circle
- * @link https://php.net/manual/en/imagickdraw.circle.php
- * @param float $ox <p>
- * origin x coordinate
- * </p>
- * @param float $oy <p>
- * origin y coordinate
- * </p>
- * @param float $px <p>
- * perimeter x coordinate
- * </p>
- * @param float $py <p>
- * perimeter y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function circle ($ox, $oy, $px, $py) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws text on the image
- * @link https://php.net/manual/en/imagickdraw.annotation.php
- * @param float $x <p>
- * The x coordinate where text is drawn
- * </p>
- * @param float $y <p>
- * The y coordinate where text is drawn
- * </p>
- * @param string $text <p>
- * The text to draw on the image
- * </p>
- * @return bool No value is returned.
- */
- public function annotation ($x, $y, $text) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Controls whether text is antialiased
- * @link https://php.net/manual/en/imagickdraw.settextantialias.php
- * @param bool $antiAlias
- * @return bool No value is returned.
- */
- public function setTextAntialias ($antiAlias) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies specifies the text code set
- * @link https://php.net/manual/en/imagickdraw.settextencoding.php
- * @param string $encoding <p>
- * the encoding name
- * </p>
- * @return bool No value is returned.
- */
- public function setTextEncoding ($encoding) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the fully-specified font to use when annotating with text
- * @link https://php.net/manual/en/imagickdraw.setfont.php
- * @param string $font_name
- * @return bool <b>TRUE</b> on success.
- */
- public function setFont ($font_name) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the font family to use when annotating with text
- * @link https://php.net/manual/en/imagickdraw.setfontfamily.php
- * @param string $font_family <p>
- * the font family
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setFontFamily ($font_family) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the font pointsize to use when annotating with text
- * @link https://php.net/manual/en/imagickdraw.setfontsize.php
- * @param float $pointsize <p>
- * the point size
- * </p>
- * @return bool No value is returned.
- */
- public function setFontSize ($pointsize) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the font style to use when annotating with text
- * @link https://php.net/manual/en/imagickdraw.setfontstyle.php
- * @param int $style <p>
- * STYLETYPE_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setFontStyle ($style) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the font weight
- * @link https://php.net/manual/en/imagickdraw.setfontweight.php
- * @param int $font_weight
- * @return bool
- */
- public function setFontWeight ($font_weight) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the font
- * @link https://php.net/manual/en/imagickdraw.getfont.php
- * @return string|false a string on success and false if no font is set.
- */
- public function getFont () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the font family
- * @link https://php.net/manual/en/imagickdraw.getfontfamily.php
- * @return string|false the font family currently selected or false if font family is not set.
- */
- public function getFontFamily () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the font pointsize
- * @link https://php.net/manual/en/imagickdraw.getfontsize.php
- * @return float the font size associated with the current ImagickDraw object.
- */
- public function getFontSize () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the font style
- * @link https://php.net/manual/en/imagickdraw.getfontstyle.php
- * @return int the font style constant (STYLE_) associated with the ImagickDraw object
- * or 0 if no style is set.
- */
- public function getFontStyle () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the font weight
- * @link https://php.net/manual/en/imagickdraw.getfontweight.php
- * @return int an int on success and 0 if no weight is set.
- */
- public function getFontWeight () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Frees all associated resources
- * @link https://php.net/manual/en/imagickdraw.destroy.php
- * @return bool No value is returned.
- */
- public function destroy () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a rectangle
- * @link https://php.net/manual/en/imagickdraw.rectangle.php
- * @param float $x1 <p>
- * x coordinate of the top left corner
- * </p>
- * @param float $y1 <p>
- * y coordinate of the top left corner
- * </p>
- * @param float $x2 <p>
- * x coordinate of the bottom right corner
- * </p>
- * @param float $y2 <p>
- * y coordinate of the bottom right corner
- * </p>
- * @return bool No value is returned.
- */
- public function rectangle ($x1, $y1, $x2, $y2) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a rounded rectangle
- * @link https://php.net/manual/en/imagickdraw.roundrectangle.php
- * @param float $x1 <p>
- * x coordinate of the top left corner
- * </p>
- * @param float $y1 <p>
- * y coordinate of the top left corner
- * </p>
- * @param float $x2 <p>
- * x coordinate of the bottom right
- * </p>
- * @param float $y2 <p>
- * y coordinate of the bottom right
- * </p>
- * @param float $rx <p>
- * x rounding
- * </p>
- * @param float $ry <p>
- * y rounding
- * </p>
- * @return bool No value is returned.
- */
- public function roundRectangle ($x1, $y1, $x2, $y2, $rx, $ry) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws an ellipse on the image
- * @link https://php.net/manual/en/imagickdraw.ellipse.php
- * @param float $ox
- * @param float $oy
- * @param float $rx
- * @param float $ry
- * @param float $start
- * @param float $end
- * @return bool No value is returned.
- */
- public function ellipse ($ox, $oy, $rx, $ry, $start, $end) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Skews the current coordinate system in the horizontal direction
- * @link https://php.net/manual/en/imagickdraw.skewx.php
- * @param float $degrees <p>
- * degrees to skew
- * </p>
- * @return bool No value is returned.
- */
- public function skewX ($degrees) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Skews the current coordinate system in the vertical direction
- * @link https://php.net/manual/en/imagickdraw.skewy.php
- * @param float $degrees <p>
- * degrees to skew
- * </p>
- * @return bool No value is returned.
- */
- public function skewY ($degrees) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Applies a translation to the current coordinate system
- * @link https://php.net/manual/en/imagickdraw.translate.php
- * @param float $x <p>
- * horizontal translation
- * </p>
- * @param float $y <p>
- * vertical translation
- * </p>
- * @return bool No value is returned.
- */
- public function translate ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a line
- * @link https://php.net/manual/en/imagickdraw.line.php
- * @param float $sx <p>
- * starting x coordinate
- * </p>
- * @param float $sy <p>
- * starting y coordinate
- * </p>
- * @param float $ex <p>
- * ending x coordinate
- * </p>
- * @param float $ey <p>
- * ending y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function line ($sx, $sy, $ex, $ey) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws an arc
- * @link https://php.net/manual/en/imagickdraw.arc.php
- * @param float $sx <p>
- * Starting x ordinate of bounding rectangle
- * </p>
- * @param float $sy <p>
- * starting y ordinate of bounding rectangle
- * </p>
- * @param float $ex <p>
- * ending x ordinate of bounding rectangle
- * </p>
- * @param float $ey <p>
- * ending y ordinate of bounding rectangle
- * </p>
- * @param float $sd <p>
- * starting degrees of rotation
- * </p>
- * @param float $ed <p>
- * ending degrees of rotation
- * </p>
- * @return bool No value is returned.
- */
- public function arc ($sx, $sy, $ex, $ey, $sd, $ed) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Paints on the image's opacity channel
- * @link https://php.net/manual/en/imagickdraw.matte.php
- * @param float $x <p>
- * x coordinate of the matte
- * </p>
- * @param float $y <p>
- * y coordinate of the matte
- * </p>
- * @param int $paintMethod <p>
- * PAINT_ constant
- * </p>
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function matte ($x, $y, $paintMethod) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a polygon
- * @link https://php.net/manual/en/imagickdraw.polygon.php
- * @param array $coordinates <p>
- * multidimensional array like array( array( 'x' => 3, 'y' => 4 ), array( 'x' => 2, 'y' => 6 ) );
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function polygon (array $coordinates) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a point
- * @link https://php.net/manual/en/imagickdraw.point.php
- * @param float $x <p>
- * point's x coordinate
- * </p>
- * @param float $y <p>
- * point's y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function point ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the text decoration
- * @link https://php.net/manual/en/imagickdraw.gettextdecoration.php
- * @return int one of the DECORATION_ constants
- * and 0 if no decoration is set.
- */
- public function getTextDecoration () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the code set used for text annotations
- * @link https://php.net/manual/en/imagickdraw.gettextencoding.php
- * @return string a string specifying the code set
- * or false if text encoding is not set.
- */
- public function getTextEncoding () {}
-
- public function getFontStretch () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the font stretch to use when annotating with text
- * @link https://php.net/manual/en/imagickdraw.setfontstretch.php
- * @param int $fontStretch <p>
- * STRETCH_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setFontStretch ($fontStretch) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Controls whether stroked outlines are antialiased
- * @link https://php.net/manual/en/imagickdraw.setstrokeantialias.php
- * @param bool $stroke_antialias <p>
- * the antialias setting
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeAntialias ($stroke_antialias) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies a text alignment
- * @link https://php.net/manual/en/imagickdraw.settextalignment.php
- * @param int $alignment <p>
- * ALIGN_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setTextAlignment ($alignment) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies a decoration
- * @link https://php.net/manual/en/imagickdraw.settextdecoration.php
- * @param int $decoration <p>
- * DECORATION_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setTextDecoration ($decoration) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the color of a background rectangle
- * @link https://php.net/manual/en/imagickdraw.settextundercolor.php
- * @param ImagickPixel $under_color <p>
- * the under color
- * </p>
- * @return bool No value is returned.
- */
- public function setTextUnderColor (ImagickPixel $under_color) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the overall canvas size
- * @link https://php.net/manual/en/imagickdraw.setviewbox.php
- * @param int $x1 <p>
- * left x coordinate
- * </p>
- * @param int $y1 <p>
- * left y coordinate
- * </p>
- * @param int $x2 <p>
- * right x coordinate
- * </p>
- * @param int $y2 <p>
- * right y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function setViewbox ($x1, $y1, $x2, $y2) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adjusts the current affine transformation matrix
- * @link https://php.net/manual/en/imagickdraw.affine.php
- * @param array $affine <p>
- * Affine matrix parameters
- * </p>
- * @return bool No value is returned.
- */
- public function affine (array $affine) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a bezier curve
- * @link https://php.net/manual/en/imagickdraw.bezier.php
- * @param array $coordinates <p>
- * Multidimensional array like array( array( 'x' => 1, 'y' => 2 ),
- * array( 'x' => 3, 'y' => 4 ) )
- * </p>
- * @return bool No value is returned.
- */
- public function bezier (array $coordinates) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Composites an image onto the current image
- * @link https://php.net/manual/en/imagickdraw.composite.php
- * @param int $compose <p>
- * composition operator. One of COMPOSITE_ constants
- * </p>
- * @param float $x <p>
- * x coordinate of the top left corner
- * </p>
- * @param float $y <p>
- * y coordinate of the top left corner
- * </p>
- * @param float $width <p>
- * width of the composition image
- * </p>
- * @param float $height <p>
- * height of the composition image
- * </p>
- * @param Imagick $compositeWand <p>
- * the Imagick object where composition image is taken from
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function composite ($compose, $x, $y, $width, $height, Imagick $compositeWand) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws color on image
- * @link https://php.net/manual/en/imagickdraw.color.php
- * @param float $x <p>
- * x coordinate of the paint
- * </p>
- * @param float $y <p>
- * y coordinate of the paint
- * </p>
- * @param int $paintMethod <p>
- * one of the PAINT_ constants
- * </p>
- * @return bool No value is returned.
- */
- public function color ($x, $y, $paintMethod) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds a comment
- * @link https://php.net/manual/en/imagickdraw.comment.php
- * @param string $comment <p>
- * The comment string to add to vector output stream
- * </p>
- * @return bool No value is returned.
- */
- public function comment ($comment) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Obtains the current clipping path ID
- * @link https://php.net/manual/en/imagickdraw.getclippath.php
- * @return string|false a string containing the clip path ID or false if no clip path exists.
- */
- public function getClipPath () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the current polygon fill rule
- * @link https://php.net/manual/en/imagickdraw.getcliprule.php
- * @return int one of the FILLRULE_ constants.
- */
- public function getClipRule () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the interpretation of clip path units
- * @link https://php.net/manual/en/imagickdraw.getclipunits.php
- * @return int an int on success.
- */
- public function getClipUnits () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the fill color
- * @link https://php.net/manual/en/imagickdraw.getfillcolor.php
- * @return ImagickPixel an ImagickPixel object.
- */
- public function getFillColor () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the opacity used when drawing
- * @link https://php.net/manual/en/imagickdraw.getfillopacity.php
- * @return float The opacity.
- */
- public function getFillOpacity () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the fill rule
- * @link https://php.net/manual/en/imagickdraw.getfillrule.php
- * @return int a FILLRULE_ constant
- */
- public function getFillRule () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the text placement gravity
- * @link https://php.net/manual/en/imagickdraw.getgravity.php
- * @return int a GRAVITY_ constant on success and 0 if no gravity is set.
- */
- public function getGravity () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the current stroke antialias setting
- * @link https://php.net/manual/en/imagickdraw.getstrokeantialias.php
- * @return bool <b>TRUE</b> if antialiasing is on and false if it is off.
- */
- public function getStrokeAntialias () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the color used for stroking object outlines
- * @link https://php.net/manual/en/imagickdraw.getstrokecolor.php
- * @return ImagickPixel an ImagickPixel object which describes the color.
- */
- public function getStrokeColor () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns an array representing the pattern of dashes and gaps used to stroke paths
- * @link https://php.net/manual/en/imagickdraw.getstrokedasharray.php
- * @return array an array on success and empty array if not set.
- */
- public function getStrokeDashArray () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the offset into the dash pattern to start the dash
- * @link https://php.net/manual/en/imagickdraw.getstrokedashoffset.php
- * @return float a float representing the offset and 0 if it's not set.
- */
- public function getStrokeDashOffset () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the shape to be used at the end of open subpaths when they are stroked
- * @link https://php.net/manual/en/imagickdraw.getstrokelinecap.php
- * @return int one of the LINECAP_ constants or 0 if stroke linecap is not set.
- */
- public function getStrokeLineCap () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the shape to be used at the corners of paths when they are stroked
- * @link https://php.net/manual/en/imagickdraw.getstrokelinejoin.php
- * @return int one of the LINEJOIN_ constants or 0 if stroke line join is not set.
- */
- public function getStrokeLineJoin () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the stroke miter limit
- * @link https://php.net/manual/en/imagickdraw.getstrokemiterlimit.php
- * @return int an int describing the miter limit
- * and 0 if no miter limit is set.
- */
- public function getStrokeMiterLimit () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the opacity of stroked object outlines
- * @link https://php.net/manual/en/imagickdraw.getstrokeopacity.php
- * @return float a float describing the opacity.
- */
- public function getStrokeOpacity () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the width of the stroke used to draw object outlines
- * @link https://php.net/manual/en/imagickdraw.getstrokewidth.php
- * @return float a float describing the stroke width.
- */
- public function getStrokeWidth () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the text alignment
- * @link https://php.net/manual/en/imagickdraw.gettextalignment.php
- * @return int one of the ALIGN_ constants and 0 if no align is set.
- */
- public function getTextAlignment () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the current text antialias setting
- * @link https://php.net/manual/en/imagickdraw.gettextantialias.php
- * @return bool <b>TRUE</b> if text is antialiased and false if not.
- */
- public function getTextAntialias () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a string containing vector graphics
- * @link https://php.net/manual/en/imagickdraw.getvectorgraphics.php
- * @return string a string containing the vector graphics.
- */
- public function getVectorGraphics () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the text under color
- * @link https://php.net/manual/en/imagickdraw.gettextundercolor.php
- * @return ImagickPixel an ImagickPixel object describing the color.
- */
- public function getTextUnderColor () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adds a path element to the current path
- * @link https://php.net/manual/en/imagickdraw.pathclose.php
- * @return bool No value is returned.
- */
- public function pathClose () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a cubic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetoabsolute.php
- * @param float $x1 <p>
- * x coordinate of the first control point
- * </p>
- * @param float $y1 <p>
- * y coordinate of the first control point
- * </p>
- * @param float $x2 <p>
- * x coordinate of the second control point
- * </p>
- * @param float $y2 <p>
- * y coordinate of the first control point
- * </p>
- * @param float $x <p>
- * x coordinate of the curve end
- * </p>
- * @param float $y <p>
- * y coordinate of the curve end
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToAbsolute ($x1, $y1, $x2, $y2, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a cubic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetorelative.php
- * @param float $x1 <p>
- * x coordinate of starting control point
- * </p>
- * @param float $y1 <p>
- * y coordinate of starting control point
- * </p>
- * @param float $x2 <p>
- * x coordinate of ending control point
- * </p>
- * @param float $y2 <p>
- * y coordinate of ending control point
- * </p>
- * @param float $x <p>
- * ending x coordinate
- * </p>
- * @param float $y <p>
- * ending y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToRelative ($x1, $y1, $x2, $y2, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a quadratic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbezierabsolute.php
- * @param float $x1 <p>
- * x coordinate of the control point
- * </p>
- * @param float $y1 <p>
- * y coordinate of the control point
- * </p>
- * @param float $x <p>
- * x coordinate of the end point
- * </p>
- * @param float $y <p>
- * y coordinate of the end point
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToQuadraticBezierAbsolute ($x1, $y1, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a quadratic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbezierrelative.php
- * @param float $x1 <p>
- * starting x coordinate
- * </p>
- * @param float $y1 <p>
- * starting y coordinate
- * </p>
- * @param float $x <p>
- * ending x coordinate
- * </p>
- * @param float $y <p>
- * ending y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToQuadraticBezierRelative ($x1, $y1, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a quadratic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbeziersmoothabsolute.php
- * @param float $x <p>
- * ending x coordinate
- * </p>
- * @param float $y <p>
- * ending y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToQuadraticBezierSmoothAbsolute ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a quadratic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbeziersmoothrelative.php
- * @param float $x <p>
- * ending x coordinate
- * </p>
- * @param float $y <p>
- * ending y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToQuadraticBezierSmoothRelative ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a cubic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetosmoothabsolute.php
- * @param float $x2 <p>
- * x coordinate of the second control point
- * </p>
- * @param float $y2 <p>
- * y coordinate of the second control point
- * </p>
- * @param float $x <p>
- * x coordinate of the ending point
- * </p>
- * @param float $y <p>
- * y coordinate of the ending point
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToSmoothAbsolute ($x2, $y2, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a cubic Bezier curve
- * @link https://php.net/manual/en/imagickdraw.pathcurvetosmoothrelative.php
- * @param float $x2 <p>
- * x coordinate of the second control point
- * </p>
- * @param float $y2 <p>
- * y coordinate of the second control point
- * </p>
- * @param float $x <p>
- * x coordinate of the ending point
- * </p>
- * @param float $y <p>
- * y coordinate of the ending point
- * </p>
- * @return bool No value is returned.
- */
- public function pathCurveToSmoothRelative ($x2, $y2, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws an elliptical arc
- * @link https://php.net/manual/en/imagickdraw.pathellipticarcabsolute.php
- * @param float $rx <p>
- * x radius
- * </p>
- * @param float $ry <p>
- * y radius
- * </p>
- * @param float $x_axis_rotation <p>
- * x axis rotation
- * </p>
- * @param bool $large_arc_flag <p>
- * large arc flag
- * </p>
- * @param bool $sweep_flag <p>
- * sweep flag
- * </p>
- * @param float $x <p>
- * x coordinate
- * </p>
- * @param float $y <p>
- * y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathEllipticArcAbsolute ($rx, $ry, $x_axis_rotation, $large_arc_flag, $sweep_flag, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws an elliptical arc
- * @link https://php.net/manual/en/imagickdraw.pathellipticarcrelative.php
- * @param float $rx <p>
- * x radius
- * </p>
- * @param float $ry <p>
- * y radius
- * </p>
- * @param float $x_axis_rotation <p>
- * x axis rotation
- * </p>
- * @param bool $large_arc_flag <p>
- * large arc flag
- * </p>
- * @param bool $sweep_flag <p>
- * sweep flag
- * </p>
- * @param float $x <p>
- * x coordinate
- * </p>
- * @param float $y <p>
- * y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathEllipticArcRelative ($rx, $ry, $x_axis_rotation, $large_arc_flag, $sweep_flag, $x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Terminates the current path
- * @link https://php.net/manual/en/imagickdraw.pathfinish.php
- * @return bool No value is returned.
- */
- public function pathFinish () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a line path
- * @link https://php.net/manual/en/imagickdraw.pathlinetoabsolute.php
- * @param float $x <p>
- * starting x coordinate
- * </p>
- * @param float $y <p>
- * ending x coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathLineToAbsolute ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a line path
- * @link https://php.net/manual/en/imagickdraw.pathlinetorelative.php
- * @param float $x <p>
- * starting x coordinate
- * </p>
- * @param float $y <p>
- * starting y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathLineToRelative ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a horizontal line path
- * @link https://php.net/manual/en/imagickdraw.pathlinetohorizontalabsolute.php
- * @param float $x <p>
- * x coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathLineToHorizontalAbsolute ($x) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a horizontal line
- * @link https://php.net/manual/en/imagickdraw.pathlinetohorizontalrelative.php
- * @param float $x <p>
- * x coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathLineToHorizontalRelative ($x) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a vertical line
- * @link https://php.net/manual/en/imagickdraw.pathlinetoverticalabsolute.php
- * @param float $y <p>
- * y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathLineToVerticalAbsolute ($y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a vertical line path
- * @link https://php.net/manual/en/imagickdraw.pathlinetoverticalrelative.php
- * @param float $y <p>
- * y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathLineToVerticalRelative ($y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Starts a new sub-path
- * @link https://php.net/manual/en/imagickdraw.pathmovetoabsolute.php
- * @param float $x <p>
- * x coordinate of the starting point
- * </p>
- * @param float $y <p>
- * y coordinate of the starting point
- * </p>
- * @return bool No value is returned.
- */
- public function pathMoveToAbsolute ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Starts a new sub-path
- * @link https://php.net/manual/en/imagickdraw.pathmovetorelative.php
- * @param float $x <p>
- * target x coordinate
- * </p>
- * @param float $y <p>
- * target y coordinate
- * </p>
- * @return bool No value is returned.
- */
- public function pathMoveToRelative ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Declares the start of a path drawing list
- * @link https://php.net/manual/en/imagickdraw.pathstart.php
- * @return bool No value is returned.
- */
- public function pathStart () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Draws a polyline
- * @link https://php.net/manual/en/imagickdraw.polyline.php
- * @param array $coordinates <p>
- * array of x and y coordinates: array( array( 'x' => 4, 'y' => 6 ), array( 'x' => 8, 'y' => 10 ) )
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function polyline (array $coordinates) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Terminates a clip path definition
- * @link https://php.net/manual/en/imagickdraw.popclippath.php
- * @return bool No value is returned.
- */
- public function popClipPath () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Terminates a definition list
- * @link https://php.net/manual/en/imagickdraw.popdefs.php
- * @return bool No value is returned.
- */
- public function popDefs () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Terminates a pattern definition
- * @link https://php.net/manual/en/imagickdraw.poppattern.php
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function popPattern () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Starts a clip path definition
- * @link https://php.net/manual/en/imagickdraw.pushclippath.php
- * @param string $clip_mask_id <p>
- * Clip mask Id
- * </p>
- * @return bool No value is returned.
- */
- public function pushClipPath ($clip_mask_id) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Indicates that following commands create named elements for early processing
- * @link https://php.net/manual/en/imagickdraw.pushdefs.php
- * @return bool No value is returned.
- */
- public function pushDefs () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Indicates that subsequent commands up to a ImagickDraw::opPattern() command comprise the definition of a named pattern
- * @link https://php.net/manual/en/imagickdraw.pushpattern.php
- * @param string $pattern_id <p>
- * the pattern Id
- * </p>
- * @param float $x <p>
- * x coordinate of the top-left corner
- * </p>
- * @param float $y <p>
- * y coordinate of the top-left corner
- * </p>
- * @param float $width <p>
- * width of the pattern
- * </p>
- * @param float $height <p>
- * height of the pattern
- * </p>
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function pushPattern ($pattern_id, $x, $y, $width, $height) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Renders all preceding drawing commands onto the image
- * @link https://php.net/manual/en/imagickdraw.render.php
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function render () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Applies the specified rotation to the current coordinate space
- * @link https://php.net/manual/en/imagickdraw.rotate.php
- * @param float $degrees <p>
- * degrees to rotate
- * </p>
- * @return bool No value is returned.
- */
- public function rotate ($degrees) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Adjusts the scaling factor
- * @link https://php.net/manual/en/imagickdraw.scale.php
- * @param float $x <p>
- * horizontal factor
- * </p>
- * @param float $y <p>
- * vertical factor
- * </p>
- * @return bool No value is returned.
- */
- public function scale ($x, $y) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Associates a named clipping path with the image
- * @link https://php.net/manual/en/imagickdraw.setclippath.php
- * @param string $clip_mask <p>
- * the clipping path name
- * </p>
- * @return bool No value is returned.
- */
- public function setClipPath ($clip_mask) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Set the polygon fill rule to be used by the clipping path
- * @link https://php.net/manual/en/imagickdraw.setcliprule.php
- * @param int $fill_rule <p>
- * FILLRULE_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setClipRule ($fill_rule) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the interpretation of clip path units
- * @link https://php.net/manual/en/imagickdraw.setclipunits.php
- * @param int $clip_units <p>
- * the number of clip units
- * </p>
- * @return bool No value is returned.
- */
- public function setClipUnits ($clip_units) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the opacity to use when drawing using the fill color or fill texture
- * @link https://php.net/manual/en/imagickdraw.setfillopacity.php
- * @param float $fillOpacity <p>
- * the fill opacity
- * </p>
- * @return bool No value is returned.
- */
- public function setFillOpacity ($fillOpacity) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the URL to use as a fill pattern for filling objects
- * @link https://php.net/manual/en/imagickdraw.setfillpatternurl.php
- * @param string $fill_url <p>
- * URL to use to obtain fill pattern.
- * </p>
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function setFillPatternURL ($fill_url) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the fill rule to use while drawing polygons
- * @link https://php.net/manual/en/imagickdraw.setfillrule.php
- * @param int $fill_rule <p>
- * FILLRULE_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setFillRule ($fill_rule) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the text placement gravity
- * @link https://php.net/manual/en/imagickdraw.setgravity.php
- * @param int $gravity <p>
- * GRAVITY_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setGravity ($gravity) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the pattern used for stroking object outlines
- * @link https://php.net/manual/en/imagickdraw.setstrokepatternurl.php
- * @param string $stroke_url <p>
- * stroke URL
- * </p>
- * @return bool imagick.imagickdraw.return.success;
- */
- public function setStrokePatternURL ($stroke_url) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the offset into the dash pattern to start the dash
- * @link https://php.net/manual/en/imagickdraw.setstrokedashoffset.php
- * @param float $dash_offset <p>
- * dash offset
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeDashOffset ($dash_offset) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the shape to be used at the end of open subpaths when they are stroked
- * @link https://php.net/manual/en/imagickdraw.setstrokelinecap.php
- * @param int $linecap <p>
- * LINECAP_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeLineCap ($linecap) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the shape to be used at the corners of paths when they are stroked
- * @link https://php.net/manual/en/imagickdraw.setstrokelinejoin.php
- * @param int $linejoin <p>
- * LINEJOIN_ constant
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeLineJoin ($linejoin) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the miter limit
- * @link https://php.net/manual/en/imagickdraw.setstrokemiterlimit.php
- * @param int $miterlimit <p>
- * the miter limit
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeMiterLimit ($miterlimit) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the opacity of stroked object outlines
- * @link https://php.net/manual/en/imagickdraw.setstrokeopacity.php
- * @param float $stroke_opacity <p>
- * stroke opacity. 1.0 is fully opaque
- * </p>
- * @return bool No value is returned.
- */
- public function setStrokeOpacity ($stroke_opacity) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the vector graphics
- * @link https://php.net/manual/en/imagickdraw.setvectorgraphics.php
- * @param string $xml <p>
- * xml containing the vector graphics
- * </p>
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function setVectorGraphics ($xml) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Destroys the current ImagickDraw in the stack, and returns to the previously pushed ImagickDraw
- * @link https://php.net/manual/en/imagickdraw.pop.php
- * @return bool <b>TRUE</b> on success and false on failure.
- */
- public function pop () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Clones the current ImagickDraw and pushes it to the stack
- * @link https://php.net/manual/en/imagickdraw.push.php
- * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
- */
- public function push () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Specifies the pattern of dashes and gaps used to stroke paths
- * @link https://php.net/manual/en/imagickdraw.setstrokedasharray.php
- * @param array $dashArray <p>
- * array of floats
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setStrokeDashArray (array $dashArray) {}
-
- /**
- * Sets the opacity to use when drawing using the fill or stroke color or texture. Fully opaque is 1.0.
- *
- * @param float $opacity
- * @return void
- * @since 3.4.1
- */
- public function setOpacity($opacity) { }
-
- /**
- * Returns the opacity used when drawing with the fill or stroke color or texture. Fully opaque is 1.0.
- *
- * @return float
- * @since 3.4.1
- */
- public function getOpacity() { }
-
- /**
- * Sets the image font resolution.
- *
- * @param float $x
- * @param float $y
- * @return bool
- * @since 3.4.1
- */
- public function setFontResolution($x, $y) { }
-
- /**
- * Gets the image X and Y resolution.
- *
- * @return array
- * @since 3.4.1
- */
- public function getFontResolution() { }
-
- /**
- * Returns the direction that will be used when annotating with text.
- * @return bool
- * @since 3.4.1
- */
- public function getTextDirection() { }
-
- /**
- * Sets the font style to use when annotating with text. The AnyStyle enumeration acts as a wild-card "don't care" option.
- *
- * @param int $direction
- * @return bool
- * @since 3.4.1
- */
- public function setTextDirection($direction) { }
-
- /**
- * Returns the border color used for drawing bordered objects.
- *
- * @return ImagickPixel
- * @since 3.4.1
- */
- public function getBorderColor() { }
-
- /**
- * Sets the border color to be used for drawing bordered objects.
- * @param ImagickPixel $color
- * @return bool
- * @since 3.4.1
- */
- public function setBorderColor(ImagickPixel $color) { }
-
- /**
- * Obtains the vertical and horizontal resolution.
- *
- * @return string|null
- * @since 3.4.1
- */
- public function getDensity() { }
-
- /**
- * Sets the vertical and horizontal resolution.
- * @param string $density_string
- * @return bool
- * @since 3.4.1
- */
- public function setDensity($density_string) { }
-}
-
-/**
- * @link https://php.net/manual/en/class.imagickpixeliterator.php
- */
-class ImagickPixelIterator implements Iterator {
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * The ImagickPixelIterator constructor
- * @link https://php.net/manual/en/imagickpixeliterator.construct.php
- * @param Imagick $wand
- */
- public function __construct (Imagick $wand) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a new pixel iterator
- * @link https://php.net/manual/en/imagickpixeliterator.newpixeliterator.php
- * @param Imagick $wand
- * @return bool <b>TRUE</b> on success. Throwing ImagickPixelIteratorException.
- * @throws ImagickPixelIteratorException
- */
- public function newPixelIterator (Imagick $wand) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns a new pixel iterator
- * @link https://php.net/manual/en/imagickpixeliterator.newpixelregioniterator.php
- * @param Imagick $wand
- * @param int $x
- * @param int $y
- * @param int $columns
- * @param int $rows
- * @return bool a new ImagickPixelIterator on success; on failure, throws ImagickPixelIteratorException
- * @throws ImagickPixelIteratorException
- */
- public function newPixelRegionIterator (Imagick $wand, $x, $y, $columns, $rows) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the current pixel iterator row
- * @link https://php.net/manual/en/imagickpixeliterator.getiteratorrow.php
- * @return int the integer offset of the row, throwing ImagickPixelIteratorException on error.
- * @throws ImagickPixelIteratorException on error
- */
- public function getIteratorRow () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Set the pixel iterator row
- * @link https://php.net/manual/en/imagickpixeliterator.setiteratorrow.php
- * @param int $row
- * @return bool <b>TRUE</b> on success.
- */
- public function setIteratorRow ($row) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the pixel iterator to the first pixel row
- * @link https://php.net/manual/en/imagickpixeliterator.setiteratorfirstrow.php
- * @return bool <b>TRUE</b> on success.
- */
- public function setIteratorFirstRow () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the pixel iterator to the last pixel row
- * @link https://php.net/manual/en/imagickpixeliterator.setiteratorlastrow.php
- * @return bool <b>TRUE</b> on success.
- */
- public function setIteratorLastRow () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the previous row
- * @link https://php.net/manual/en/imagickpixeliterator.getpreviousiteratorrow.php
- * @return array the previous row as an array of ImagickPixelWand objects from the
- * ImagickPixelIterator, throwing ImagickPixelIteratorException on error.
- * @throws ImagickPixelIteratorException on error
- */
- public function getPreviousIteratorRow () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the current row of ImagickPixel objects
- * @link https://php.net/manual/en/imagickpixeliterator.getcurrentiteratorrow.php
- * @return array a row as an array of ImagickPixel objects that can themselves be iterated.
- */
- public function getCurrentIteratorRow () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the next row of the pixel iterator
- * @link https://php.net/manual/en/imagickpixeliterator.getnextiteratorrow.php
- * @return array the next row as an array of ImagickPixel objects, throwing
- * ImagickPixelIteratorException on error.
- * @throws ImagickPixelIteratorException on error
- */
- public function getNextIteratorRow () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Resets the pixel iterator
- * @link https://php.net/manual/en/imagickpixeliterator.resetiterator.php
- * @return bool <b>TRUE</b> on success.
- */
- public function resetIterator () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Syncs the pixel iterator
- * @link https://php.net/manual/en/imagickpixeliterator.synciterator.php
- * @return bool <b>TRUE</b> on success.
- */
- public function syncIterator () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Deallocates resources associated with a PixelIterator
- * @link https://php.net/manual/en/imagickpixeliterator.destroy.php
- * @return bool <b>TRUE</b> on success.
- */
- public function destroy () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Clear resources associated with a PixelIterator
- * @link https://php.net/manual/en/imagickpixeliterator.clear.php
- * @return bool <b>TRUE</b> on success.
- */
- public function clear () {}
-
- /**
- * @param Imagick $Imagick
- */
- public static function getpixeliterator (Imagick $Imagick) {}
-
- /**
- * @param Imagick $Imagick
- * @param $x
- * @param $y
- * @param $columns
- * @param $rows
- */
- public static function getpixelregioniterator (Imagick $Imagick, $x, $y, $columns, $rows) {}
-
- public function key () {}
-
- public function next () {}
-
- public function rewind () {}
-
- public function current () {}
-
- public function valid () {}
-
-}
-
-/**
- * @method clone()
- * @link https://php.net/manual/en/class.imagickpixel.php
- */
-class ImagickPixel {
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the normalized HSL color of the ImagickPixel object
- * @link https://php.net/manual/en/imagickpixel.gethsl.php
- * @return array the HSL value in an array with the keys "hue",
- * "saturation", and "luminosity". Throws ImagickPixelException on failure.
- * @throws ImagickPixelException on failure
- */
- public function getHSL () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the normalized HSL color
- * @link https://php.net/manual/en/imagickpixel.sethsl.php
- * @param float $hue <p>
- * The normalized value for hue, described as a fractional arc
- * (between 0 and 1) of the hue circle, where the zero value is
- * red.
- * </p>
- * @param float $saturation <p>
- * The normalized value for saturation, with 1 as full saturation.
- * </p>
- * @param float $luminosity <p>
- * The normalized value for luminosity, on a scale from black at
- * 0 to white at 1, with the full HS value at 0.5 luminosity.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setHSL ($hue, $saturation, $luminosity) {}
-
- public function getColorValueQuantum () {}
-
- /**
- * @param $color_value
- */
- public function setColorValueQuantum ($color_value) {}
-
- public function getIndex () {}
-
- /**
- * @param $index
- */
- public function setIndex ($index) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * The ImagickPixel constructor
- * @link https://php.net/manual/en/imagickpixel.construct.php
- * @param string $color [optional] <p>
- * The optional color string to use as the initial value of this object.
- * </p>
- */
- public function __construct ($color = null) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the color
- * @link https://php.net/manual/en/imagickpixel.setcolor.php
- * @param string $color <p>
- * The color definition to use in order to initialise the
- * ImagickPixel object.
- * </p>
- * @return bool <b>TRUE</b> if the specified color was set, <b>FALSE</b> otherwise.
- */
- public function setColor ($color) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Sets the normalized value of one of the channels
- * @link https://php.net/manual/en/imagickpixel.setcolorvalue.php
- * @param int $color <p>
- * One of the Imagick color constants e.g. \Imagick::COLOR_GREEN or \Imagick::COLOR_ALPHA.
- * </p>
- * @param float $value <p>
- * The value to set this channel to, ranging from 0 to 1.
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function setColorValue ($color, $value) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Gets the normalized value of the provided color channel
- * @link https://php.net/manual/en/imagickpixel.getcolorvalue.php
- * @param int $color <p>
- * The color to get the value of, specified as one of the Imagick color
- * constants. This can be one of the RGB colors, CMYK colors, alpha and
- * opacity e.g (Imagick::COLOR_BLUE, Imagick::COLOR_MAGENTA).
- * </p>
- * @return float The value of the channel, as a normalized floating-point number, throwing
- * ImagickPixelException on error.
- * @throws ImagickPixelException on error
- */
- public function getColorValue ($color) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Clears resources associated with this object
- * @link https://php.net/manual/en/imagickpixel.clear.php
- * @return bool <b>TRUE</b> on success.
- */
- public function clear () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Deallocates resources associated with this object
- * @link https://php.net/manual/en/imagickpixel.destroy.php
- * @return bool <b>TRUE</b> on success.
- */
- public function destroy () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Check the distance between this color and another
- * @link https://php.net/manual/en/imagickpixel.issimilar.php
- * @param ImagickPixel $color <p>
- * The ImagickPixel object to compare this object against.
- * </p>
- * @param float $fuzz <p>
- * The maximum distance within which to consider these colors as similar.
- * The theoretical maximum for this value is the square root of three
- * (1.732).
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function isSimilar (ImagickPixel $color, $fuzz) {}
-
- /**
- * (No version information available, might only be in SVN)<br/>
- * Check the distance between this color and another
- * @link https://php.net/manual/en/imagickpixel.ispixelsimilar.php
- * @param ImagickPixel $color <p>
- * The ImagickPixel object to compare this object against.
- * </p>
- * @param float $fuzz <p>
- * The maximum distance within which to consider these colors as similar.
- * The theoretical maximum for this value is the square root of three
- * (1.732).
- * </p>
- * @return bool <b>TRUE</b> on success.
- */
- public function isPixelSimilar (ImagickPixel $color, $fuzz) {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the color
- * @link https://php.net/manual/en/imagickpixel.getcolor.php
- * @param bool $normalized [optional] <p>
- * Normalize the color values
- * </p>
- * @return array An array of channel values, each normalized if <b>TRUE</b> is given as param. Throws
- * ImagickPixelException on error.
- * @throws ImagickPixelException on error.
- */
- public function getColor ($normalized = false) {}
-
- /**
- * (PECL imagick 2.1.0)<br/>
- * Returns the color as a string
- * @link https://php.net/manual/en/imagickpixel.getcolorasstring.php
- * @return string the color of the ImagickPixel object as a string.
- */
- public function getColorAsString () {}
-
- /**
- * (PECL imagick 2.0.0)<br/>
- * Returns the color count associated with this color
- * @link https://php.net/manual/en/imagickpixel.getcolorcount.php
- * @return int the color count as an integer on success, throws
- * ImagickPixelException on failure.
- * @throws ImagickPixelException on failure.
- */
- public function getColorCount () {}
-
- /**
- * @param $colorCount
- */
- public function setColorCount ($colorCount) {}
-
-
- /**
- * Returns true if the distance between two colors is less than the specified distance. The fuzz value should be in the range 0-QuantumRange.<br>
- * The maximum value represents the longest possible distance in the colorspace. e.g. from RGB(0, 0, 0) to RGB(255, 255, 255) for the RGB colorspace
- * @link https://php.net/manual/en/imagickpixel.ispixelsimilarquantum.php
- * @param string $pixel
- * @param string $fuzz
- * @return bool
- * @since 3.3.0
- */
- public function isPixelSimilarQuantum($color, $fuzz) { }
-
- /**
- * Returns the color of the pixel in an array as Quantum values. If ImageMagick was compiled as HDRI these will be floats, otherwise they will be integers.
- * @link https://php.net/manual/en/imagickpixel.getcolorquantum.php
- * @return mixed The quantum value of the color element. Float if ImageMagick was compiled with HDRI, otherwise an int.
- * @since 3.3.0
- */
- public function getColorQuantum() { }
-
- /**
- * Sets the color count associated with this color from another ImagickPixel object.
- *
- * @param ImagickPixel $srcPixel
- * @return bool
- * @since 3.4.1
- */
- public function setColorFromPixel(ImagickPixel $srcPixel) { }
-}
-// End of imagick v.3.2.0RC1
-
-// Start of Imagick v3.3.0RC1
-
-/**
- * @link https://php.net/manual/en/class.imagickkernel.php
- */
-class ImagickKernel {
- /**
- * Attach another kernel to this kernel to allow them to both be applied in a single morphology or filter function. Returns the new combined kernel.
- * @link https://php.net/manual/en/imagickkernel.addkernel.php
- * @param ImagickKernel $imagickKernel
- * @return void
- * @since 3.3.0
- */
- public function addKernel(ImagickKernel $imagickKernel) { }
-
- /**
- * Adds a given amount of the 'Unity' Convolution Kernel to the given pre-scaled and normalized Kernel. This in effect adds that amount of the original image into the resulting convolution kernel. The resulting effect is to convert the defined kernels into blended soft-blurs, unsharp kernels or into sharpening kernels.
- * @link https://php.net/manual/en/imagickkernel.addunitykernel.php
- * @return void
- * @since 3.3.0
- */
- public function addUnityKernel() { }
-
- /**
- * Create a kernel from a builtin in kernel. See https://www.imagemagick.org/Usage/morphology/#kernel for examples.<br>
- * Currently the 'rotation' symbols are not supported. Example: $diamondKernel = ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DIAMOND, "2");
- * @link https://php.net/manual/en/imagickkernel.frombuiltin.php
- * @param string $kernelType The type of kernel to build e.g. \Imagick::KERNEL_DIAMOND
- * @param string $kernelString A string that describes the parameters e.g. "4,2.5"
- * @return void
- * @since 3.3.0
- */
- public static function fromBuiltin($kernelType, $kernelString) { }
-
- /**
- * Create a kernel from a builtin in kernel. See https://www.imagemagick.org/Usage/morphology/#kernel for examples.<br>
- * Currently the 'rotation' symbols are not supported. Example: $diamondKernel = ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DIAMOND, "2");
- * @link https://php.net/manual/en/imagickkernel.frombuiltin.php
- * @see https://www.imagemagick.org/Usage/morphology/#kernel
- * @param array $matrix A matrix (i.e. 2d array) of values that define the kernel. Each element should be either a float value, or FALSE if that element shouldn't be used by the kernel.
- * @param array $origin [optional] Which element of the kernel should be used as the origin pixel. e.g. For a 3x3 matrix specifying the origin as [2, 2] would specify that the bottom right element should be the origin pixel.
- * @return ImagickKernel
- * @since 3.3.0
- */
- public static function fromMatrix($matrix, $origin) { }
-
- /**
- * Get the 2d matrix of values used in this kernel. The elements are either float for elements that are used or 'false' if the element should be skipped.
- * @link https://php.net/manual/en/imagickkernel.getmatrix.php
- * @return array A matrix (2d array) of the values that represent the kernel.
- * @since 3.3.0
- */
- public function getMatrix() { }
-
- /**
- * ScaleKernelInfo() scales the given kernel list by the given amount, with or without normalization of the sum of the kernel values (as per given flags).<br>
- * The exact behaviour of this function depends on the normalization type being used please see https://www.imagemagick.org/api/morphology.php#ScaleKernelInfo for details.<br>
- * Flag should be one of Imagick::NORMALIZE_KERNEL_VALUE, Imagick::NORMALIZE_KERNEL_CORRELATE, Imagick::NORMALIZE_KERNEL_PERCENT or not set.
- * @link https://php.net/manual/en/imagickkernel.scale.php
- * @see https://www.imagemagick.org/api/morphology.php#ScaleKernelInfo
- * @return void
- * @since 3.3.0
- */
- public function scale() { }
-
- /**
- * Separates a linked set of kernels and returns an array of ImagickKernels.
- * @link https://php.net/manual/en/imagickkernel.separate.php
- * @return void
- * @since 3.3.0
- */
- public function seperate() { }
-}
diff --git a/vendor/chillerlan/php-qrcode/.scrutinizer.yml b/vendor/chillerlan/php-qrcode/.scrutinizer.yml
deleted file mode 100644
index 2a7e7028b..000000000
--- a/vendor/chillerlan/php-qrcode/.scrutinizer.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-build:
- nodes:
- analysis:
- tests:
- override:
- - php-scrutinizer-run
- environment:
- php: 8.0.0
-
-filter:
- excluded_paths:
- - examples/*
- - tests/*
- - vendor/*
- - .github/*
- - .phan/*
diff --git a/vendor/chillerlan/php-qrcode/README.md b/vendor/chillerlan/php-qrcode/README.md
index f266e9bd5..3ad7bad88 100644
--- a/vendor/chillerlan/php-qrcode/README.md
+++ b/vendor/chillerlan/php-qrcode/README.md
@@ -7,26 +7,23 @@ namespaced, cleaned up, improved and other stuff.
[![PHP Version Support][php-badge]][php]
[![Packagist version][packagist-badge]][packagist]
-[![License][license-badge]][license]
-[![CodeCov][coverage-badge]][coverage]
-[![Scrunitizer CI][scrutinizer-badge]][scrutinizer]
-[![Packagist downloads][downloads-badge]][downloads]<br/>
[![Continuous Integration][gh-action-badge]][gh-action]
+[![CodeCov][coverage-badge]][coverage]
+[![Codacy][codacy-badge]][codacy]
+[![Packagist downloads][downloads-badge]][downloads]
[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-qrcode?logo=php&color=8892BF
[php]: https://www.php.net/supported-versions.php
[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg?logo=packagist
[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
-[license-badge]: https://img.shields.io/github/license/chillerlan/php-qrcode.svg
-[license]: https://github.com/chillerlan/php-qrcode/blob/main/LICENSE
-[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-qrcode.svg?logo=codecov
-[coverage]: https://codecov.io/github/chillerlan/php-qrcode
-[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/chillerlan/php-qrcode.svg?logo=scrutinizer
-[scrutinizer]: https://scrutinizer-ci.com/g/chillerlan/php-qrcode
-[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode.svg?logo=packagist
+[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-qrcode/v4.3.x?logo=codecov
+[coverage]: https://app.codecov.io/gh/chillerlan/php-qrcode/tree/v4.3.x
+[codacy-badge]: https://img.shields.io/codacy/grade/edccfc4fe5a34b74b1c53ee03f097b8d/v4.3.x?logo=codacy
+[codacy]: https://app.codacy.com/gh/chillerlan/php-qrcode/dashboard?branch=v4.3.x
+[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode?logo=packagist
[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
-[gh-action-badge]: https://github.com/chillerlan/php-qrcode/workflows/Continuous%20Integration/badge.svg
-[gh-action]: https://github.com/chillerlan/php-qrcode/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Av4.3.x
+[gh-action-badge]: https://img.shields.io/github/actions/workflow/status/chillerlan/php-qrcode/tests.yml?branch=v4.3.x&logo=github
+[gh-action]: https://github.com/chillerlan/php-qrcode/actions/workflows/tests.yml?query=branch%3Av4.3.x
# Documentation
@@ -48,7 +45,7 @@ via terminal: `composer require chillerlan/php-qrcode`
{
"require": {
"php": "^7.4 || ^8.0",
- "chillerlan/php-qrcode": "v4.3.x-dev"
+ "chillerlan/php-qrcode": "v4.3.x-dev#<commit_hash>"
}
}
```
@@ -62,7 +59,7 @@ For PHP version ...
In case you want to keep using `v4.3.x-dev`, specify the hash of a commit to avoid running into unforseen issues like so: `v4.3.x-dev#c115f7bc51d466ccb24c544e88329804aad8c2a0`
-PSA: [PHP 7.0 - 7.3 are EOL](https://www.php.net/supported-versions.php) and therefore the respective `QRCode` versions are also no longer supported!
+PSA: [PHP 7.0 - 7.4 are EOL](https://www.php.net/supported-versions.php) and therefore the respective `QRCode` versions are also no longer supported!
## Quickstart
We want to encode this URI for a mobile authenticator into a QRcode image:
@@ -252,40 +249,41 @@ $options = new QROptions;
// for HTML, SVG and ImageMagick
$options->moduleValues = [
// finder
- 1536 => '#A71111', // dark (true)
- 6 => '#FFBFBF', // light (false)
+ QRMatrix::M_FINDER_DARK => '#A71111', // dark (true)
+ QRMatrix::M_FINDER_DOT_DARK => '#A71111', // dark (true)
+ QRMatrix::M_FINDER => '#FFBFBF', // light (false)
// alignment
- 2560 => '#A70364',
- 10 => '#FFC9C9',
+ QRMatrix::M_ALIGNMENT_DARK => '#A70364',
+ QRMatrix::M_ALIGNMENT => '#FFC9C9',
// timing
- 3072 => '#98005D',
- 12 => '#FFB8E9',
+ QRMatrix::M_TIMING_DARK => '#98005D',
+ QRMatrix::M_TIMING => '#FFB8E9',
// format
- 3584 => '#003804',
- 14 => '#00FB12',
+ QRMatrix::M_FORMAT_DARK => '#003804',
+ QRMatrix::M_FORMAT => '#00FB12',
// version
- 4096 => '#650098',
- 16 => '#E0B8FF',
+ QRMatrix::M_VERSION_DARK => '#650098',
+ QRMatrix::M_VERSION => '#E0B8FF',
// data
- 1024 => '#4A6000',
- 4 => '#ECF9BE',
+ QRMatrix::M_DATA_DARK => '#4A6000',
+ QRMatrix::M_DATA => '#ECF9BE',
// darkmodule
- 512 => '#080063',
+ QRMatrix::M_DARKMODULE_DARK => '#080063',
// separator
- 8 => '#AFBFBF',
+ QRMatrix::M_SEPARATOR => '#AFBFBF',
// quietzone
- 18 => '#FFFFFF',
+ QRMatrix::M_QUIETZONE => '#FFFFFF',
];
// for the image output types
$options->moduleValues = [
- 512 => [0, 0, 0],
+ QRMatrix::M_DATA_DARK => [0, 0, 0],
// ...
];
// for string/text output
$options->moduleValues = [
- 512 => '#',
+ QRMatrix::M_DATA_DARK => '#',
// ...
];
```
@@ -294,106 +292,115 @@ $options->moduleValues = [
## Public API
### `QRCode` API
-#### Methods
-method | return | description
------- | ------ | -----------
-`__construct(QROptions $options = null)` | - | see [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php)
-`render(string $data, string $file = null)` | mixed, `QROutputInterface::dump()` | renders a QR Code for the given `$data` and `QROptions`, saves `$file` optional
-`getMatrix(string $data)` | `QRMatrix` | returns a `QRMatrix` object for the given `$data` and current `QROptions`
-`initDataInterface(string $data)` | `QRDataInterface` | returns a fresh `QRDataInterface` for the given `$data`
-`isNumber(string $string)` | bool | checks if a string qualifies for `Number`
-`isAlphaNum(string $string)` | bool | checks if a string qualifies for `AlphaNum`
-`isKanji(string $string)` | bool | checks if a string qualifies for `Kanji`
-`isByte(string $string)` | bool | checks if a string is non-empty
-
-#### Constants
-name | description
----- | -----------
-`VERSION_AUTO` | `QROptions::$version`
-`MASK_PATTERN_AUTO` | `QROptions::$maskPattern`
-`OUTPUT_MARKUP_SVG`, `OUTPUT_MARKUP_HTML` | `QROptions::$outputType` markup
-`OUTPUT_IMAGE_PNG`, `OUTPUT_IMAGE_JPG`, `OUTPUT_IMAGE_GIF` | `QROptions::$outputType` image
-`OUTPUT_STRING_JSON`, `OUTPUT_STRING_TEXT` | `QROptions::$outputType` string
-`OUTPUT_IMAGICK` | `QROptions::$outputType` ImageMagick
-`OUTPUT_FPDF` | `QROptions::$outputType` PDF, using [FPDF](https://github.com/setasign/fpdf)
-`OUTPUT_CUSTOM` | `QROptions::$outputType`, requires `QROptions::$outputInterface`
-`ECC_L`, `ECC_M`, `ECC_Q`, `ECC_H`, | ECC-Level: 7%, 15%, 25%, 30% in `QROptions::$eccLevel`
-`DATA_NUMBER`, `DATA_ALPHANUM`, `DATA_BYTE`, `DATA_KANJI` | `QRDataInterface::$datamode`
+#### Methods
+| method | return | description |
+|---------------------------------------------|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|
+| `__construct(QROptions $options = null)` | - | see [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php) |
+| `render(string $data, string $file = null)` | mixed, `QROutputInterface::dump()` | renders a QR Code for the given `$data` and `QROptions`, saves `$file` optional |
+| `getMatrix(string $data)` | `QRMatrix` | returns a `QRMatrix` object for the given `$data` and current `QROptions` |
+| `initDataInterface(string $data)` | `QRDataInterface` | returns a fresh `QRDataInterface` for the given `$data` |
+| `isNumber(string $string)` | bool | checks if a string qualifies for `Number` |
+| `isAlphaNum(string $string)` | bool | checks if a string qualifies for `AlphaNum` |
+| `isKanji(string $string)` | bool | checks if a string qualifies for `Kanji` |
+| `isByte(string $string)` | bool | checks if a string is non-empty |
+#### Constants
+| name | description |
+|------------------------------------------------------------|------------------------------------------------------------------------------|
+| `VERSION_AUTO` | `QROptions::$version` |
+| `MASK_PATTERN_AUTO` | `QROptions::$maskPattern` |
+| `OUTPUT_MARKUP_SVG`, `OUTPUT_MARKUP_HTML` | `QROptions::$outputType` markup |
+| `OUTPUT_IMAGE_PNG`, `OUTPUT_IMAGE_JPG`, `OUTPUT_IMAGE_GIF` | `QROptions::$outputType` image |
+| `OUTPUT_STRING_JSON`, `OUTPUT_STRING_TEXT` | `QROptions::$outputType` string |
+| `OUTPUT_IMAGICK` | `QROptions::$outputType` ImageMagick |
+| `OUTPUT_FPDF` | `QROptions::$outputType` PDF, using [FPDF](https://github.com/setasign/fpdf) |
+| `OUTPUT_CUSTOM` | `QROptions::$outputType`, requires `QROptions::$outputInterface` |
+| `ECC_L`, `ECC_M`, `ECC_Q`, `ECC_H`, | ECC-Level: 7%, 15%, 25%, 30% in `QROptions::$eccLevel` |
+| `DATA_NUMBER`, `DATA_ALPHANUM`, `DATA_BYTE`, `DATA_KANJI` | `QRDataInterface::$datamode` |
### `QRMatrix` API
#### Methods
-method | return | description
------- | ------ | -----------
-`__construct(int $version, int $eclevel)` | - | -
-`init(int $maskPattern, bool $test = null)` | `QRMatrix` |
-`matrix()` | array | the internal matrix representation as a 2 dimensional array
-`version()` | int | the current QR Code version
-`eccLevel()` | int | current ECC level
-`maskPattern()` | int | the used mask pattern
-`size()` | int | the absoulute size of the matrix, including quiet zone (if set). `$version * 4 + 17 + 2 * $quietzone`
-`get(int $x, int $y)` | int | returns the value of the module
-`set(int $x, int $y, bool $value, int $M_TYPE)` | `QRMatrix` | sets the `$M_TYPE` value for the module
-`check(int $x, int $y)` | bool | checks whether a module is true (dark) or false (light)
+| method | return | description |
+|-------------------------------------------------|------------|-------------------------------------------------------------------------------------------------------|
+| `__construct(int $version, int $eclevel)` | - | - |
+| `init(int $maskPattern, bool $test = null)` | `QRMatrix` | |
+| `matrix()` | array | the internal matrix representation as a 2 dimensional array |
+| `version()` | int | the current QR Code version |
+| `eccLevel()` | int | current ECC level |
+| `maskPattern()` | int | the used mask pattern |
+| `size()` | int | the absoulute size of the matrix, including quiet zone (if set). `$version * 4 + 17 + 2 * $quietzone` |
+| `get(int $x, int $y)` | int | returns the value of the module |
+| `set(int $x, int $y, bool $value, int $M_TYPE)` | `QRMatrix` | sets the `$M_TYPE` value for the module |
+| `check(int $x, int $y)` | bool | checks whether a module is true (dark) or false (light) |
#### Constants
-name | light (false) | dark (true) | description
----- | ------------- | ----------- | -----------
-`M_NULL` | 0 | - | module not set (should never appear. if so, there's an error)
-`M_DARKMODULE` | - | 512 | once per matrix at `$xy = [8, 4 * $version + 9]`
-`M_DATA` | 4 | 1024 | the actual encoded data
-`M_FINDER` | 6 | 1536 | the 7x7 finder patterns
-`M_SEPARATOR` | 8 | - | separator lines around the finder patterns
-`M_ALIGNMENT` | 10 | 2560 | the 5x5 alignment patterns
-`M_TIMING` | 12 | 3072 | the timing pattern lines
-`M_FORMAT` | 14 | 3584 | format information pattern
-`M_VERSION` | 16 | 4096 | version information pattern
-`M_QUIETZONE` | 18 | - | margin around the QR Code
-`M_LOGO` | 20 | - | space for a logo image (not used yet)
-`M_TEST` | 255 | 65280 | test value
+| name | description |
+|----------------------|---------------------------------------------------------------|
+| `M_NULL` | module not set (should never appear. if so, there's an error) |
+| `M_DARKMODULE` | once per matrix at `$xy = [8, 4 * $version + 9]` |
+| `M_DARKMODULE_LIGHT` | (reserved for reflectance reversal) |
+| `M_DATA` | the actual encoded data |
+| `M_DATA_DARK` | |
+| `M_FINDER` | the 7x7 finder patterns |
+| `M_FINDER_DARK` | |
+| `M_FINDER_DOT` | the 3x3 dot inside the finder patterns |
+| `M_FINDER_DOT_LIGHT` | (reserved for reflectance reversal) |
+| `M_SEPARATOR` | separator lines around the finder patterns |
+| `M_SEPARATOR_DARK` | (reserved for reflectance reversal) |
+| `M_ALIGNMENT` | the 5x5 alignment patterns |
+| `M_ALIGNMENT_DARK` | |
+| `M_TIMING` | the timing pattern lines |
+| `M_TIMING_DARK` | |
+| `M_FORMAT` | format information pattern |
+| `M_FORMAT_DARK` | |
+| `M_VERSION` | version information pattern |
+| `M_VERSION_DARK` | |
+| `M_QUIETZONE` | margin around the QR Code |
+| `M_QUIETZONE_DARK` | (reserved for reflectance reversal) |
+| `M_LOGO` | space for a logo image |
+| `M_LOGO_DARK` | (reserved for reflectance reversal) |
### `QROptions` API
#### Properties
-property | type | default | allowed | description
--------- | ---- | ------- | ------- | -----------
-`$version` | int | `QRCode::VERSION_AUTO` | 1...40 | the [QR Code version number](http://www.qrcode.com/en/about/version.html)
-`$versionMin` | int | 1 | 1...40 | Minimum QR version (if `$version = QRCode::VERSION_AUTO`)
-`$versionMax` | int | 40 | 1...40 | Maximum QR version (if `$version = QRCode::VERSION_AUTO`)
-`$eccLevel` | int | `QRCode::ECC_L` | `QRCode::ECC_X` | Error correct level, where X = L (7%), M (15%), Q (25%), H (30%)
-`$maskPattern` | int | `QRCode::MASK_PATTERN_AUTO` | 0...7 | Mask Pattern to use
-`$addQuietzone` | bool | `true` | - | Add a "quiet zone" (margin) according to the QR code spec
-`$quietzoneSize` | int | 4 | clamped to 0 ... `$matrixSize / 2` | Size of the quiet zone
-`$dataModeOverride` | string | `null` | `Number`, `AlphaNum`, `Kanji`, `Byte` | allows overriding the data type detection
-`$outputType` | string | `QRCode::OUTPUT_IMAGE_PNG` | `QRCode::OUTPUT_*` | built-in output type
-`$outputInterface` | string | `null` | * | FQCN of the custom `QROutputInterface` if `QROptions::$outputType` is set to `QRCode::OUTPUT_CUSTOM`
-`$cachefile` | string | `null` | * | optional cache file path
-`$eol` | string | `PHP_EOL` | * | newline string (HTML, SVG, TEXT)
-`$scale` | int | 5 | * | size of a QR code pixel (SVG, IMAGE_*), HTML -> via CSS
-`$cssClass` | string | `null` | * | a common css class
-`$svgOpacity` | float | 1.0 | 0...1 |
-`$svgDefs` | string | * | * | anything between [`<defs>`](https://developer.mozilla.org/docs/Web/SVG/Element/defs)
-`$svgViewBoxSize` | int | `null` | * | a positive integer which defines width/height of the [viewBox attribute](https://css-tricks.com/scale-svg/#article-header-id-3)
-`$textDark` | string | '🔴' | * | string substitute for dark
-`$textLight` | string | '⭕' | * | string substitute for light
-`$markupDark` | string | '#000' | * | markup substitute for dark (CSS value)
-`$markupLight` | string | '#fff' | * | markup substitute for light (CSS value)
-`$imageBase64` | bool | `true` | - | whether to return the image data as base64 or raw like from `file_get_contents()`
-`$imageTransparent` | bool | `true` | - | toggle transparency (no jpeg support)
-`$imageTransparencyBG` | array | `[255, 255, 255]` | `[R, G, B]` | the RGB values for the transparent color, see [`imagecolortransparent()`](http://php.net/manual/function.imagecolortransparent.php)
-`$pngCompression` | int | -1 | -1 ... 9 | `imagepng()` compression level, -1 = auto
-`$jpegQuality` | int | 85 | 0 - 100 | `imagejpeg()` quality
-`$imagickFormat` | string | 'png' | * | ImageMagick output type, see `Imagick::setType()`
-`$imagickBG` | string | `null` | * | ImageMagick background color, see `ImagickPixel::__construct()`
-`$moduleValues` | array | `null` | * | Module values map, see [[Custom output interface]] and `QROutputInterface::DEFAULT_MODULE_VALUES`
-
+| property | type | default | allowed | description |
+|------------------------|--------|-----------------------------|---------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|
+| `$version` | int | `QRCode::VERSION_AUTO` | 1...40 | the [QR Code version number](http://www.qrcode.com/en/about/version.html) |
+| `$versionMin` | int | 1 | 1...40 | Minimum QR version (if `$version = QRCode::VERSION_AUTO`) |
+| `$versionMax` | int | 40 | 1...40 | Maximum QR version (if `$version = QRCode::VERSION_AUTO`) |
+| `$eccLevel` | int | `QRCode::ECC_L` | `QRCode::ECC_X` | Error correct level, where X = L (7%), M (15%), Q (25%), H (30%) |
+| `$maskPattern` | int | `QRCode::MASK_PATTERN_AUTO` | 0...7 | Mask Pattern to use |
+| `$addQuietzone` | bool | `true` | - | Add a "quiet zone" (margin) according to the QR code spec |
+| `$quietzoneSize` | int | 4 | clamped to 0 ... `$matrixSize / 2` | Size of the quiet zone |
+| `$dataModeOverride` | string | `null` | `Number`, `AlphaNum`, `Kanji`, `Byte` | allows overriding the data type detection |
+| `$outputType` | string | `QRCode::OUTPUT_IMAGE_PNG` | `QRCode::OUTPUT_*` | built-in output type |
+| `$outputInterface` | string | `null` | * | FQCN of the custom `QROutputInterface` if `QROptions::$outputType` is set to `QRCode::OUTPUT_CUSTOM` |
+| `$cachefile` | string | `null` | * | optional cache file path |
+| `$eol` | string | `PHP_EOL` | * | newline string (HTML, SVG, TEXT) |
+| `$scale` | int | 5 | * | size of a QR code pixel (SVG, IMAGE_*), HTML -> via CSS |
+| `$cssClass` | string | `null` | * | a common css class |
+| `$svgOpacity` | float | 1.0 | 0...1 | |
+| `$svgDefs` | string | * | * | anything between [`<defs>`](https://developer.mozilla.org/docs/Web/SVG/Element/defs) |
+| `$svgViewBoxSize` | int | `null` | * | a positive integer which defines width/height of the [viewBox attribute](https://css-tricks.com/scale-svg/#article-header-id-3) |
+| `$textDark` | string | '██' | * | string substitute for dark |
+| `$textLight` | string | '░░' | * | string substitute for light |
+| `$markupDark` | string | '#000' | * | markup substitute for dark (CSS value) |
+| `$markupLight` | string | '#fff' | * | markup substitute for light (CSS value) |
+| `$imageBase64` | bool | `true` | - | whether to return the image data as base64 or raw like from `file_get_contents()` |
+| `$imageTransparent` | bool | `true` | - | toggle transparency (no jpeg support) |
+| `$imageTransparencyBG` | array | `[255, 255, 255]` | `[R, G, B]` | the RGB values for the transparent color, see [`imagecolortransparent()`](http://php.net/manual/function.imagecolortransparent.php) |
+| `$pngCompression` | int | -1 | -1 ... 9 | `imagepng()` compression level, -1 = auto |
+| `$jpegQuality` | int | 85 | 0 - 100 | `imagejpeg()` quality |
+| `$imagickFormat` | string | 'png' | * | ImageMagick output type, see `Imagick::setType()` |
+| `$imagickBG` | string | `null` | * | ImageMagick background color, see `ImagickPixel::__construct()` |
+| `$moduleValues` | array | `null` | * | Module values map, see [[Custom output interface]] and `QROutputInterface::DEFAULT_MODULE_VALUES` |
## Framework Integration
- Drupal:
- [Google Authenticator Login `ga_login`](https://www.drupal.org/project/ga_login)
- Symfony
- - [phpqrcode-bundle](https://github.com/jonasarts/phpqrcode-bundle)
+ - [phpqrcode-bundle](https://github.com/jonasarts/phpqrcode-bundle)
- WordPress:
- [`wp-two-factor-auth`](https://github.com/sjinks/wp-two-factor-auth)
- [`simple-2fa`](https://wordpress.org/plugins/simple-2fa/)
diff --git a/vendor/chillerlan/php-qrcode/composer.json b/vendor/chillerlan/php-qrcode/composer.json
index afe5bf68e..5453fc40f 100644
--- a/vendor/chillerlan/php-qrcode/composer.json
+++ b/vendor/chillerlan/php-qrcode/composer.json
@@ -1,6 +1,6 @@
{
"name": "chillerlan/php-qrcode",
- "description": "A QR code generator. PHP 7.4+",
+ "description": "A QR code generator with a user friendly API. PHP 7.4+",
"homepage": "https://github.com/chillerlan/php-qrcode",
"license": "MIT",
"minimum-stability": "stable",
@@ -26,16 +26,19 @@
"require": {
"php": "^7.4 || ^8.0",
"ext-mbstring": "*",
- "chillerlan/php-settings-container": "^2.1.4"
+ "chillerlan/php-settings-container": "^2.1.6 || ^3.2.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.5",
- "phan/phan": "^5.3",
- "setasign/fpdf": "^1.8.2"
+ "phan/phan": "^5.4.5",
+ "phpmd/phpmd": "^2.15",
+ "phpunit/phpunit": "^9.6",
+ "setasign/fpdf": "^1.8.2",
+ "squizlabs/php_codesniffer": "^3.11"
},
"suggest": {
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
- "setasign/fpdf": "Required to use the QR FPDF output."
+ "setasign/fpdf": "Required to use the QR FPDF output.",
+ "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code"
},
"autoload": {
"psr-4": {
@@ -44,9 +47,7 @@
},
"autoload-dev": {
"psr-4": {
- "chillerlan\\QRCodePublic\\": "public/",
- "chillerlan\\QRCodeTest\\": "tests/",
- "chillerlan\\QRCodeExamples\\": "examples/"
+ "chillerlan\\QRCodeTest\\": "tests/"
}
},
"scripts": {
diff --git a/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php b/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php
deleted file mode 100644
index 3664989b8..000000000
--- a/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Class MyCustomOutput
- *
- * @filesource MyCustomOutput.php
- * @created 24.12.2017
- * @package chillerlan\QRCodeExamples
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\Output\QROutputAbstract;
-
-class MyCustomOutput extends QROutputAbstract{
-
- protected function setModuleValues():void{
- // TODO: Implement setModuleValues() method.
- }
-
- public function dump(string $file = null){
-
- $output = '';
-
- for($row = 0; $row < $this->moduleCount; $row++){
- for($col = 0; $col < $this->moduleCount; $col++){
- $output .= (int)$this->matrix->check($col, $row);
- }
-
- $output .= \PHP_EOL;
- }
-
- return $output;
- }
-
-}
diff --git a/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php b/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php
deleted file mode 100644
index 76aa5ced7..000000000
--- a/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/**
- * Class QRImageWithLogo
- *
- * @filesource QRImageWithLogo.php
- * @created 18.11.2020
- * @package chillerlan\QRCodeExamples
- * @author smiley <smiley@chillerlan.net>
- * @copyright 2020 smiley
- * @license MIT
- *
- * @noinspection PhpComposerExtensionStubsInspection
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\Output\{QRCodeOutputException, QRImage};
-
-use function imagecopyresampled, imagecreatefrompng, imagesx, imagesy, is_file, is_readable;
-
-/**
- * @property \chillerlan\QRCodeExamples\LogoOptions $options
- */
-class QRImageWithLogo extends QRImage{
-
- /**
- * @param string|null $file
- * @param string|null $logo
- *
- * @return string
- * @throws \chillerlan\QRCode\Output\QRCodeOutputException
- */
- public function dump(string $file = null, string $logo = null):string{
- // set returnResource to true to skip further processing for now
- $this->options->returnResource = true;
-
- // of course you could accept other formats too (such as resource or Imagick)
- // i'm not checking for the file type either for simplicity reasons (assuming PNG)
- if(!is_file($logo) || !is_readable($logo)){
- throw new QRCodeOutputException('invalid logo');
- }
-
- $this->matrix->setLogoSpace(
- $this->options->logoSpaceWidth,
- $this->options->logoSpaceHeight
- // not utilizing the position here
- );
-
- // there's no need to save the result of dump() into $this->image here
- parent::dump($file);
-
- $im = imagecreatefrompng($logo);
-
- // get logo image size
- $w = imagesx($im);
- $h = imagesy($im);
-
- // set new logo size, leave a border of 1 module (no proportional resize/centering)
- $lw = ($this->options->logoSpaceWidth - 2) * $this->options->scale;
- $lh = ($this->options->logoSpaceHeight - 2) * $this->options->scale;
-
- // get the qrcode size
- $ql = $this->matrix->size() * $this->options->scale;
-
- // scale the logo and copy it over. done!
- imagecopyresampled($this->image, $im, ($ql - $lw) / 2, ($ql - $lh) / 2, 0, 0, $lw, $lh, $w, $h);
-
- $imageData = $this->dumpImage();
-
- if($file !== null){
- $this->saveToFile($imageData, $file);
- }
-
- if($this->options->imageBase64){
- $imageData = 'data:image/'.$this->options->outputType.';base64,'.base64_encode($imageData);
- }
-
- return $imageData;
- }
-
-}
diff --git a/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php b/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php
deleted file mode 100644
index fe6b962a9..000000000
--- a/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/**
- * Class QRImageWithText
- *
- * example for additional text
- *
- * @link https://github.com/chillerlan/php-qrcode/issues/35
- *
- * @filesource QRImageWithText.php
- * @created 22.06.2019
- * @package chillerlan\QRCodeExamples
- * @author smiley <smiley@chillerlan.net>
- * @copyright 2019 smiley
- * @license MIT
- *
- * @noinspection PhpComposerExtensionStubsInspection
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\Output\QRImage;
-
-use function base64_encode, imagechar, imagecolorallocate, imagecolortransparent, imagecopymerge, imagecreatetruecolor,
- imagedestroy, imagefilledrectangle, imagefontwidth, in_array, round, str_split, strlen;
-
-class QRImageWithText extends QRImage{
-
- /**
- * @param string|null $file
- * @param string|null $text
- *
- * @return string
- */
- public function dump(string $file = null, string $text = null):string{
- // set returnResource to true to skip further processing for now
- $this->options->returnResource = true;
-
- // there's no need to save the result of dump() into $this->image here
- parent::dump($file);
-
- // render text output if a string is given
- if($text !== null){
- $this->addText($text);
- }
-
- $imageData = $this->dumpImage();
-
- if($file !== null){
- $this->saveToFile($imageData, $file);
- }
-
- if($this->options->imageBase64){
- $imageData = 'data:image/'.$this->options->outputType.';base64,'.base64_encode($imageData);
- }
-
- return $imageData;
- }
-
- /**
- * @param string $text
- */
- protected function addText(string $text):void{
- // save the qrcode image
- $qrcode = $this->image;
-
- // options things
- $textSize = 3; // see imagefontheight() and imagefontwidth()
- $textBG = [200, 200, 200];
- $textColor = [50, 50, 50];
-
- $bgWidth = $this->length;
- $bgHeight = $bgWidth + 20; // 20px extra space
-
- // create a new image with additional space
- $this->image = imagecreatetruecolor($bgWidth, $bgHeight);
- $background = imagecolorallocate($this->image, ...$textBG);
-
- // allow transparency
- if($this->options->imageTransparent && in_array($this->options->outputType, $this::TRANSPARENCY_TYPES, true)){
- imagecolortransparent($this->image, $background);
- }
-
- // fill the background
- imagefilledrectangle($this->image, 0, 0, $bgWidth, $bgHeight, $background);
-
- // copy over the qrcode
- imagecopymerge($this->image, $qrcode, 0, 0, 0, 0, $this->length, $this->length, 100);
- imagedestroy($qrcode);
-
- $fontColor = imagecolorallocate($this->image, ...$textColor);
- $w = imagefontwidth($textSize);
- $x = round(($bgWidth - strlen($text) * $w) / 2);
-
- // loop through the string and draw the letters
- foreach(str_split($text) as $i => $chr){
- imagechar($this->image, $textSize, (int)($i * $w + $x), $this->length, $chr, $fontColor);
- }
- }
-
-}
diff --git a/vendor/chillerlan/php-qrcode/examples/custom_output.php b/vendor/chillerlan/php-qrcode/examples/custom_output.php
deleted file mode 100644
index 71ea62682..000000000
--- a/vendor/chillerlan/php-qrcode/examples/custom_output.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- *
- * @filesource custom_output.php
- * @created 24.12.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
-// invoke the QROutputInterface manually
-$options = new QROptions([
- 'version' => 5,
- 'eccLevel' => QRCode::ECC_L,
-]);
-
-$qrOutputInterface = new MyCustomOutput($options, (new QRCode($options))->getMatrix($data));
-
-var_dump($qrOutputInterface->dump());
-
-
-// or just
-$options = new QROptions([
- 'version' => 5,
- 'eccLevel' => QRCode::ECC_L,
- 'outputType' => QRCode::OUTPUT_CUSTOM,
- 'outputInterface' => MyCustomOutput::class,
-]);
-
-var_dump((new QRCode($options))->render($data));
diff --git a/vendor/chillerlan/php-qrcode/examples/example_image.png b/vendor/chillerlan/php-qrcode/examples/example_image.png
deleted file mode 100644
index b4a80f2ab..000000000
--- a/vendor/chillerlan/php-qrcode/examples/example_image.png
+++ /dev/null
Binary files differ
diff --git a/vendor/chillerlan/php-qrcode/examples/example_svg.png b/vendor/chillerlan/php-qrcode/examples/example_svg.png
deleted file mode 100644
index f1e7b32f7..000000000
--- a/vendor/chillerlan/php-qrcode/examples/example_svg.png
+++ /dev/null
Binary files differ
diff --git a/vendor/chillerlan/php-qrcode/examples/fpdf.php b/vendor/chillerlan/php-qrcode/examples/fpdf.php
deleted file mode 100644
index 9c690a7f7..000000000
--- a/vendor/chillerlan/php-qrcode/examples/fpdf.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__ . '/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
-$options = new QROptions([
- 'version' => 7,
- 'outputType' => QRCode::OUTPUT_FPDF,
- 'eccLevel' => QRCode::ECC_L,
- 'scale' => 5,
- 'imageBase64' => false,
- 'moduleValues' => [
- // finder
- 1536 => [0, 63, 255], // dark (true)
- 6 => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
- // alignment
- 2560 => [255, 0, 255],
- 10 => [255, 255, 255],
- // timing
- 3072 => [255, 0, 0],
- 12 => [255, 255, 255],
- // format
- 3584 => [67, 191, 84],
- 14 => [255, 255, 255],
- // version
- 4096 => [62, 174, 190],
- 16 => [255, 255, 255],
- // data
- 1024 => [0, 0, 0],
- 4 => [255, 255, 255],
- // darkmodule
- 512 => [0, 0, 0],
- // separator
- 8 => [255, 255, 255],
- // quietzone
- 18 => [255, 255, 255],
- ],
-]);
-
-\header('Content-type: application/pdf');
-
-echo (new QRCode($options))->render($data);
diff --git a/vendor/chillerlan/php-qrcode/examples/html.php b/vendor/chillerlan/php-qrcode/examples/html.php
deleted file mode 100644
index aa5305d24..000000000
--- a/vendor/chillerlan/php-qrcode/examples/html.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-/**
- *
- * @filesource html.php
- * @created 21.12.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once '../vendor/autoload.php';
-
-header('Content-Type: text/html; charset=utf-8');
-
-?>
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="UTF-8"/>
- <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
- <title>QRCode test</title>
- <style>
- body{
- margin: 5em;
- padding: 0;
- }
-
- div.qrcode{
- margin: 0;
- padding: 0;
- }
-
- /* rows */
- div.qrcode > div {
- margin: 0;
- padding: 0;
- height: 10px;
- }
-
- /* modules */
- div.qrcode > div > span {
- display: inline-block;
- width: 10px;
- height: 10px;
- }
-
- div.qrcode > div > span {
- background-color: #ccc;
- }
- </style>
-</head>
-<body>
- <div class="qrcode">
-<?php
-
- $data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
- $options = new QROptions([
- 'version' => 5,
- 'outputType' => QRCode::OUTPUT_MARKUP_HTML,
- 'eccLevel' => QRCode::ECC_L,
- 'moduleValues' => [
- // finder
- 1536 => '#A71111', // dark (true)
- 6 => '#FFBFBF', // light (false)
- // alignment
- 2560 => '#A70364',
- 10 => '#FFC9C9',
- // timing
- 3072 => '#98005D',
- 12 => '#FFB8E9',
- // format
- 3584 => '#003804',
- 14 => '#00FB12',
- // version
- 4096 => '#650098',
- 16 => '#E0B8FF',
- // data
- 1024 => '#4A6000',
- 4 => '#ECF9BE',
- // darkmodule
- 512 => '#080063',
- // separator
- 8 => '#AFBFBF',
- // quietzone
- 18 => '#FFFFFF',
- ],
- ]);
-
- echo (new QRCode($options))->render($data);
-
-?>
- </div>
-</body>
-</html>
-
-
-
diff --git a/vendor/chillerlan/php-qrcode/examples/image.php b/vendor/chillerlan/php-qrcode/examples/image.php
deleted file mode 100644
index 54426c68a..000000000
--- a/vendor/chillerlan/php-qrcode/examples/image.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
- *
- * @filesource image.php
- * @created 24.12.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
-$options = new QROptions([
- 'version' => 10,
- 'outputType' => QRCode::OUTPUT_IMAGE_PNG,
- 'eccLevel' => QRCode::ECC_H,
- 'scale' => 5,
- 'imageBase64' => false,
- 'moduleValues' => [
- // finder
- 1536 => [0, 63, 255], // dark (true)
- 6 => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
- 5632 => [241, 28, 163], // finder dot, dark (true)
- // alignment
- 2560 => [255, 0, 255],
- 10 => [255, 255, 255],
- // timing
- 3072 => [255, 0, 0],
- 12 => [255, 255, 255],
- // format
- 3584 => [67, 99, 84],
- 14 => [255, 255, 255],
- // version
- 4096 => [62, 174, 190],
- 16 => [255, 255, 255],
- // data
- 1024 => [0, 0, 0],
- 4 => [255, 255, 255],
- // darkmodule
- 512 => [0, 0, 0],
- // separator
- 8 => [255, 255, 255],
- // quietzone
- 18 => [255, 255, 255],
- // logo (requires a call to QRMatrix::setLogoSpace())
- 20 => [255, 255, 255],
- ],
-]);
-
-header('Content-type: image/png');
-
-echo (new QRCode($options))->render($data);
-
-
-
-
-
diff --git a/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php b/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php
deleted file mode 100644
index f93aa8dd1..000000000
--- a/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- *
- * @filesource imageWithLogo.php
- * @created 18.11.2020
- * @author smiley <smiley@chillerlan.net>
- * @copyright 2020 smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-/**
- * @property int $logoSpaceWidth
- * @property int $logoSpaceHeight
- *
- * @noinspection PhpIllegalPsrClassPathInspection
- */
-class LogoOptions extends QROptions{
- // size in QR modules, multiply with QROptions::$scale for pixel size
- protected int $logoSpaceWidth;
- protected int $logoSpaceHeight;
-}
-
-$options = new LogoOptions;
-
-$options->version = 7;
-$options->eccLevel = QRCode::ECC_H;
-$options->imageBase64 = false;
-$options->logoSpaceWidth = 13;
-$options->logoSpaceHeight = 13;
-$options->scale = 5;
-$options->imageTransparent = false;
-
-header('Content-type: image/png');
-
-$qrOutputInterface = new QRImageWithLogo($options, (new QRCode($options))->getMatrix($data));
-
-// dump the output, with an additional logo
-echo $qrOutputInterface->dump(null, __DIR__.'/octocat.png');
diff --git a/vendor/chillerlan/php-qrcode/examples/imageWithText.php b/vendor/chillerlan/php-qrcode/examples/imageWithText.php
deleted file mode 100644
index 050781cba..000000000
--- a/vendor/chillerlan/php-qrcode/examples/imageWithText.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * example for additional text
- * @link https://github.com/chillerlan/php-qrcode/issues/35
- *
- * @filesource imageWithText.php
- * @created 22.06.2019
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2019 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
-$options = new QROptions([
- 'version' => 7,
- 'outputType' => QRCode::OUTPUT_IMAGE_PNG,
- 'scale' => 3,
- 'imageBase64' => false,
-]);
-
-header('Content-type: image/png');
-
-$qrOutputInterface = new QRImageWithText($options, (new QRCode($options))->getMatrix($data));
-
-// dump the output, with additional text
-echo $qrOutputInterface->dump(null, 'example text');
diff --git a/vendor/chillerlan/php-qrcode/examples/imagick.php b/vendor/chillerlan/php-qrcode/examples/imagick.php
deleted file mode 100644
index 6bec4d02e..000000000
--- a/vendor/chillerlan/php-qrcode/examples/imagick.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- *
- * @filesource image.php
- * @created 24.12.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
-$options = new QROptions([
- 'version' => 7,
- 'outputType' => QRCode::OUTPUT_IMAGICK,
- 'eccLevel' => QRCode::ECC_L,
- 'scale' => 5,
- 'moduleValues' => [
- // finder
- 1536 => '#A71111', // dark (true)
- 6 => '#FFBFBF', // light (false)
- // alignment
- 2560 => '#A70364',
- 10 => '#FFC9C9',
- // timing
- 3072 => '#98005D',
- 12 => '#FFB8E9',
- // format
- 3584 => '#003804',
- 14 => '#00FB12',
- // version
- 4096 => '#650098',
- 16 => '#E0B8FF',
- // data
- 1024 => '#4A6000',
- 4 => '#ECF9BE',
- // darkmodule
- 512 => '#080063',
- // separator
- 8 => '#DDDDDD',
- // quietzone
- 18 => '#DDDDDD',
- ],
-]);
-
-header('Content-type: image/png');
-
-echo (new QRCode($options))->render($data);
-
-
-
-
-
diff --git a/vendor/chillerlan/php-qrcode/examples/octocat.png b/vendor/chillerlan/php-qrcode/examples/octocat.png
deleted file mode 100644
index f9050b935..000000000
--- a/vendor/chillerlan/php-qrcode/examples/octocat.png
+++ /dev/null
Binary files differ
diff --git a/vendor/chillerlan/php-qrcode/examples/svg.php b/vendor/chillerlan/php-qrcode/examples/svg.php
deleted file mode 100644
index d171cbe07..000000000
--- a/vendor/chillerlan/php-qrcode/examples/svg.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- *
- * @filesource svg.php
- * @created 21.12.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-$gzip = true;
-
-$options = new QROptions([
- 'version' => 7,
- 'outputType' => QRCode::OUTPUT_MARKUP_SVG,
- 'imageBase64' => false,
- 'eccLevel' => QRCode::ECC_L,
- 'svgViewBoxSize' => 530,
- 'addQuietzone' => true,
- 'cssClass' => 'my-css-class',
- 'svgOpacity' => 1.0,
- 'svgDefs' => '
- <linearGradient id="g2">
- <stop offset="0%" stop-color="#39F" />
- <stop offset="100%" stop-color="#F3F" />
- </linearGradient>
- <linearGradient id="g1">
- <stop offset="0%" stop-color="#F3F" />
- <stop offset="100%" stop-color="#39F" />
- </linearGradient>
- <style>rect{shape-rendering:crispEdges}</style>',
- 'moduleValues' => [
- // finder
- 1536 => 'url(#g1)', // dark (true)
- 6 => '#fff', // light (false)
- // alignment
- 2560 => 'url(#g1)',
- 10 => '#fff',
- // timing
- 3072 => 'url(#g1)',
- 12 => '#fff',
- // format
- 3584 => 'url(#g1)',
- 14 => '#fff',
- // version
- 4096 => 'url(#g1)',
- 16 => '#fff',
- // data
- 1024 => 'url(#g2)',
- 4 => '#fff',
- // darkmodule
- 512 => 'url(#g1)',
- // separator
- 8 => '#fff',
- // quietzone
- 18 => '#fff',
- ],
-]);
-
-$qrcode = (new QRCode($options))->render($data);
-
-header('Content-type: image/svg+xml');
-
-if($gzip === true){
- header('Vary: Accept-Encoding');
- header('Content-Encoding: gzip');
- $qrcode = gzencode($qrcode ,9);
-}
-echo $qrcode;
-
-
diff --git a/vendor/chillerlan/php-qrcode/examples/text.php b/vendor/chillerlan/php-qrcode/examples/text.php
deleted file mode 100644
index 9bdf154f0..000000000
--- a/vendor/chillerlan/php-qrcode/examples/text.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- *
- * @filesource text.php
- * @created 21.12.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodeExamples;
-
-use chillerlan\QRCode\{QRCode, QROptions};
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
-
-$options = new QROptions([
- 'version' => 5,
- 'outputType' => QRCode::OUTPUT_STRING_TEXT,
- 'eccLevel' => QRCode::ECC_L,
-]);
-
-// <pre> to view it in a browser
-echo '<pre style="font-size: 75%; line-height: 1;">'.(new QRCode($options))->render($data).'</pre>';
-
-
-// custom values
-$options = new QROptions([
- 'version' => 5,
- 'outputType' => QRCode::OUTPUT_STRING_TEXT,
- 'eccLevel' => QRCode::ECC_L,
- 'moduleValues' => [
- // finder
- 1536 => 'A', // dark (true)
- 6 => 'a', // light (false)
- // alignment
- 2560 => 'B',
- 10 => 'b',
- // timing
- 3072 => 'C',
- 12 => 'c',
- // format
- 3584 => 'D',
- 14 => 'd',
- // version
- 4096 => 'E',
- 16 => 'e',
- // data
- 1024 => 'F',
- 4 => 'f',
- // darkmodule
- 512 => 'G',
- // separator
- 8 => 'h',
- // quietzone
- 18 => 'i',
- ],
-]);
-
-// <pre> to view it in a browser
-echo '<pre style="font-size: 75%; line-height: 1;">'.(new QRCode($options))->render($data).'</pre>';
-
-
-
-
-
diff --git a/vendor/chillerlan/php-qrcode/phpdoc.xml b/vendor/chillerlan/php-qrcode/phpdoc.xml
deleted file mode 100644
index d440f1d8a..000000000
--- a/vendor/chillerlan/php-qrcode/phpdoc.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<phpdoc>
- <parser>
- <target>docs</target>
- <encoding>utf8</encoding>
- <markers>
- <item>TODO</item>
- </markers>
- </parser>
- <transformer>
- <target>docs</target>
- </transformer>
- <files>
- <directory>src</directory>
- <directory>tests</directory>
- </files>
- <transformations>
- <template name="responsive-twig"/>
- </transformations>
-</phpdoc>
diff --git a/vendor/chillerlan/php-qrcode/phpunit.xml b/vendor/chillerlan/php-qrcode/phpunit.xml
deleted file mode 100644
index 1fea31626..000000000
--- a/vendor/chillerlan/php-qrcode/phpunit.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
- bootstrap="vendor/autoload.php"
- cacheResultFile=".build/phpunit.result.cache"
- colors="true"
- verbose="true"
->
- <coverage processUncoveredFiles="true">
- <include>
- <directory suffix=".php">./src</directory>
- </include>
- <report>
- <clover outputFile=".build/coverage/clover.xml"/>
- <xml outputDirectory=".build/coverage/coverage-xml"/>
- </report>
- </coverage>
- <testsuites>
- <testsuite name="php-qrcode test suite">
- <directory suffix=".php">./tests/</directory>
- </testsuite>
- </testsuites>
- <logging>
- <junit outputFile=".build/logs/junit.xml"/>
- </logging>
-</phpunit>
diff --git a/vendor/chillerlan/php-qrcode/public/index.html b/vendor/chillerlan/php-qrcode/public/index.html
deleted file mode 100644
index d7bf6c891..000000000
--- a/vendor/chillerlan/php-qrcode/public/index.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE html>
-<html lang="en" >
-<head >
- <meta charset="UTF-8" >
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title >QR Code Generator</title >
- <style >
- body{ font-size: 20px; line-height: 1.4em; font-family: "Trebuchet MS", sans-serif; color: #000;}
- input, textarea, select{font-family: Consolas, "Liberation Mono", Courier, monospace; font-size: 75%; line-height: 1.25em; border: 1px solid #aaa; }
- input:focus, textarea:focus, select:focus{ border: 1px solid #ccc; }
- label{ cursor: pointer; }
- #qrcode-settings, div#qrcode-output{ text-align: center; }
- div#qrcode-output > div {margin: 0;padding: 0;height: 3px;}
- div#qrcode-output > div > span {display: inline-block;width: 3px;height: 3px;}
- div#qrcode-output > div > span {background-color: lightgrey;}
- </style >
-</head >
-<body >
-
-<form id="qrcode-settings" >
-
- <label for="inputstring" >Input String</label ><br /><textarea name="inputstring" id="inputstring" cols="80" rows="3" autocomplete="off" spellcheck="false"></textarea ><br />
-
- <label for="version" >Version</label >
- <input id="version" name="version" class="options" type="number" min="1" max="40" value="5" placeholder="version" />
-
- <label for="maskpattern" >Mask Pattern</label >
- <input id="maskpattern" name="maskpattern" class="options" type="number" min="-1" max="7" value="-1" placeholder="mask pattern" />
-
- <label for="ecc" >ECC</label >
- <select class="options" id="ecc" name="ecc" >
- <option value="L" selected="selected" >L - 7%</option >
- <option value="M" >M - 15%</option >
- <option value="Q" >Q - 25%</option >
- <option value="H" >H - 30%</option >
- </select >
-
- <br />
-
- <label for="quietzone" >Quiet Zone
- <input id="quietzone" name="quietzone" class="options" type="checkbox" value="true" />
- </label >
-
- <label for="quietzonesize" >size</label >
- <input id="quietzonesize" name="quietzonesize" class="options" type="number" min="0" max="100" value="4" placeholder="quiet zone" />
-
- <br />
-
- <label for="output_type" >Output</label >
- <select class="options" id="output_type" name="output_type" >
- <option value="html" >Markup - HTML</option >
- <option value="svg" selected="selected" >Markup - SVG</option >
- <option value="png">Image - png</option >
- <option value="jpg" >Image - jpg</option >
- <option value="gif" >Image - gif</option >
- <option value="text" >String - text</option >
- <option value="json" >String - json</option >
- </select >
-
- <label for="scale" >scale</label >
- <input id="scale" name="scale" class="options" type="number" min="1" max="10" value="5" placeholder="scale" />
-
- <div>Finder</div>
- <label for="m_finder_light" >
- <input type="text" id="m_finder_light" name="m_finder_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_finder_dark" >
- <input type="text" id="m_finder_dark" name="m_finder_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
-
- <div>Alignment</div>
- <label for="m_alignment_light" >
- <input type="text" id="m_alignment_light" name="m_alignment_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_alignment_dark" >
- <input type="text" id="m_alignment_dark" name="m_alignment_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
-
- <div>Timing</div>
- <label for="m_timing_light" >
- <input type="text" id="m_timing_light" name="m_timing_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_timing_dark" >
- <input type="text" id="m_timing_dark" name="m_timing_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
-
- <div>Format</div>
- <label for="m_format_light" >
- <input type="text" id="m_format_light" name="m_format_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_format_dark" >
- <input type="text" id="m_format_dark" name="m_format_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
-
- <div>Version</div>
- <label for="m_version_light" >
- <input type="text" id="m_version_light" name="m_version_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_version_dark" >
- <input type="text" id="m_version_dark" name="m_version_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
-
- <div>Data</div>
- <label for="m_data_light" >
- <input type="text" id="m_data_light" name="m_data_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_data_dark" >
- <input type="text" id="m_data_dark" name="m_data_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
-
- <div>Dark Module</div>
- <label for="m_darkmodule_light" >
- <input disabled="disabled" type="text" id="m_darkmodule_light" class="options" value="" autocomplete="off" spellcheck="false" />
- </label >
- <label for="m_darkmodule_dark" >
- <input type="text" id="m_darkmodule_dark" name="m_darkmodule_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
-
- <div>Separator</div>
- <label for="m_separator_light" >
- <input type="text" id="m_separator_light" name="m_separator_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_separator_dark" >
- <input disabled="disabled" type="text" id="m_separator_dark" class="options" value="" autocomplete="off" spellcheck="false" />
- </label >
-
- <div>Quiet Zone</div>
- <label for="m_quietzone_light" >
- <input type="text" id="m_quietzone_light" name="m_quietzone_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
- </label >
- <label for="m_quietzone_dark" >
- <input disabled="disabled" type="text" id="m_quietzone_dark" class="options" value="" autocomplete="off" spellcheck="false" />
- </label >
-
- <br />
- <button type="submit" >generate</button >
-</form >
-<div id="qrcode-output" ></div >
-
-<div><a href="https://play.google.com/store/apps/details?id=com.google.zxing.client.android" >ZXing Barcode Scanner</a ></div>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.3/prototype.js" ></script >
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jscolor/2.0.4/jscolor.js" ></script >
-<script >
- ((form, output, url) => {
-
- $(form).observe('submit', ev => {
- Event.stop(ev);
-
- new Ajax.Request(url, {
- method: 'post',
- parameters: ev.target.serialize(true),
- onUninitialized: $(output).update(),
- onLoading: $(output).update('[portlandia_screaming.gif]'),
- onFailure: response => $(output).update(response.responseJSON.error),
- onSuccess: response => $(output).update(response.responseJSON.qrcode),
- });
-
- });
- })('qrcode-settings', 'qrcode-output', './qrcode.php');
-</script >
-
-</body >
-</html > \ No newline at end of file
diff --git a/vendor/chillerlan/php-qrcode/public/qrcode.php b/vendor/chillerlan/php-qrcode/public/qrcode.php
deleted file mode 100644
index 1f8427c7e..000000000
--- a/vendor/chillerlan/php-qrcode/public/qrcode.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-/**
- * @filesource qrcode.php
- * @created 18.11.2017
- * @author Smiley <smiley@chillerlan.net>
- * @copyright 2017 Smiley
- * @license MIT
- */
-
-namespace chillerlan\QRCodePublic;
-
-use chillerlan\QRCode\QRCode;
-use chillerlan\QRCode\QROptions;
-
-require_once '../vendor/autoload.php';
-
-try{
-
- $moduleValues = [
- // finder
- 1536 => $_POST['m_finder_dark'],
- 6 => $_POST['m_finder_light'],
- // alignment
- 2560 => $_POST['m_alignment_dark'],
- 10 => $_POST['m_alignment_light'],
- // timing
- 3072 => $_POST['m_timing_dark'],
- 12 => $_POST['m_timing_light'],
- // format
- 3584 => $_POST['m_format_dark'],
- 14 => $_POST['m_format_light'],
- // version
- 4096 => $_POST['m_version_dark'],
- 16 => $_POST['m_version_light'],
- // data
- 1024 => $_POST['m_data_dark'],
- 4 => $_POST['m_data_light'],
- // darkmodule
- 512 => $_POST['m_darkmodule_dark'],
- // separator
- 8 => $_POST['m_separator_light'],
- // quietzone
- 18 => $_POST['m_quietzone_light'],
- ];
-
- $moduleValues = array_map(function($v){
- if(preg_match('/[a-f\d]{6}/i', $v) === 1){
- return in_array($_POST['output_type'], ['png', 'jpg', 'gif'])
- ? array_map('hexdec', str_split($v, 2))
- : '#'.$v ;
- }
- return null;
- }, $moduleValues);
-
-
- $ecc = in_array($_POST['ecc'], ['L', 'M', 'Q', 'H'], true) ? $_POST['ecc'] : 'L';
-
- $qro = new QROptions;
-
- $qro->version = (int)$_POST['version'];
- $qro->eccLevel = constant('chillerlan\\QRCode\\QRCode::ECC_'.$ecc);
- $qro->maskPattern = (int)$_POST['maskpattern'];
- $qro->addQuietzone = isset($_POST['quietzone']);
- $qro->quietzoneSize = (int)$_POST['quietzonesize'];
- $qro->moduleValues = $moduleValues;
- $qro->outputType = $_POST['output_type'];
- $qro->scale = (int)$_POST['scale'];
- $qro->imageTransparent = false;
-
- $qrcode = (new QRCode($qro))->render($_POST['inputstring']);
-
- if(in_array($_POST['output_type'], ['png', 'jpg', 'gif'])){
- $qrcode = '<img src="'.$qrcode.'" />';
- }
- elseif($_POST['output_type'] === 'text'){
- $qrcode = '<pre style="font-size: 75%; line-height: 1;">'.$qrcode.'</pre>';
- }
- elseif($_POST['output_type'] === 'json'){
- $qrcode = '<pre style="font-size: 75%; overflow-x: auto;">'.$qrcode.'</pre>';
- }
-
- send_response(['qrcode' => $qrcode]);
-}
-// Pokémon exception handler
-catch(\Exception $e){
- header('HTTP/1.1 500 Internal Server Error');
- send_response(['error' => $e->getMessage()]);
-}
-
-/**
- * @param array $response
- */
-function send_response(array $response){
- header('Content-type: application/json;charset=utf-8;');
- echo json_encode($response);
- exit;
-}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php b/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php
index 7874cb53d..959892b9b 100644
--- a/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php
+++ b/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php
@@ -130,7 +130,7 @@ final class MaskPatternTester{
}
if(
- $val === $m[$y][$x + 1]
+ $val === $row[$x + 1]
&& $val === $m[$y + 1][$x]
&& $val === $m[$y + 1][$x + 1]
){
@@ -154,12 +154,12 @@ final class MaskPatternTester{
if(
$x + 6 < $size
&& $val
- && !$m[$y][$x + 1]
- && $m[$y][$x + 2]
- && $m[$y][$x + 3]
- && $m[$y][$x + 4]
- && !$m[$y][$x + 5]
- && $m[$y][$x + 6]
+ && !$row[$x + 1]
+ && $row[$x + 2]
+ && $row[$x + 3]
+ && $row[$x + 4]
+ && !$row[$x + 5]
+ && $row[$x + 6]
){
$penalties++;
}
@@ -189,8 +189,8 @@ final class MaskPatternTester{
protected function testLevel4(array $m, int $size):float{
$count = 0;
- foreach($m as $y => $row){
- foreach($row as $x => $val){
+ foreach($m as $row){
+ foreach($row as $val){
if($val){
$count++;
}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php b/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php
index 72b67b7b9..5d5b3aaf2 100644
--- a/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php
+++ b/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php
@@ -70,7 +70,7 @@ abstract class QRDataAbstract implements QRDataInterface{
/**
* QRDataInterface constructor.
*/
- public function __construct(SettingsContainerInterface $options, string $data = null){
+ public function __construct(SettingsContainerInterface $options, ?string $data = null){
$this->options = $options;
if($data !== null){
@@ -100,7 +100,7 @@ abstract class QRDataAbstract implements QRDataInterface{
/**
* @inheritDoc
*/
- public function initMatrix(int $maskPattern, bool $test = null):QRMatrix{
+ public function initMatrix(int $maskPattern, ?bool $test = null):QRMatrix{
return (new QRMatrix($this->version, $this->options->eccLevel))
->init($maskPattern, $test)
->mapData($this->maskECC(), $maskPattern)
diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php b/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php
index 93ad6221d..4e8aa9406 100644
--- a/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php
+++ b/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php
@@ -21,7 +21,7 @@ interface QRDataInterface{
/**
* @var int[]
*/
- const CHAR_MAP_NUMBER = [
+ public const CHAR_MAP_NUMBER = [
'0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9,
];
@@ -30,7 +30,7 @@ interface QRDataInterface{
*
* @var int[]
*/
- const CHAR_MAP_ALPHANUM = [
+ public const CHAR_MAP_ALPHANUM = [
'0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7,
'8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15,
'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23,
@@ -46,7 +46,7 @@ interface QRDataInterface{
*
* @var int [][][]
*/
- const MAX_LENGTH =[
+ public const MAX_LENGTH =[
// v => [NUMERIC => [L, M, Q, H ], ALPHANUM => [L, M, Q, H], BINARY => [L, M, Q, H ], KANJI => [L, M, Q, H ]] // modules
1 => [[ 41, 34, 27, 17], [ 25, 20, 16, 10], [ 17, 14, 11, 7], [ 10, 8, 7, 4]], // 21
2 => [[ 77, 63, 48, 34], [ 47, 38, 29, 20], [ 32, 26, 20, 14], [ 20, 16, 12, 8]], // 25
@@ -95,7 +95,7 @@ interface QRDataInterface{
*
* @var int [][]
*/
- const MAX_BITS = [
+ public const MAX_BITS = [
// version => [L, M, Q, H ]
1 => [ 152, 128, 104, 72],
2 => [ 272, 224, 176, 128],
@@ -144,7 +144,7 @@ interface QRDataInterface{
*
* @var int [][][]
*/
- const RSBLOCKS = [
+ public const RSBLOCKS = [
1 => [[ 1, 0, 26, 19], [ 1, 0, 26, 16], [ 1, 0, 26, 13], [ 1, 0, 26, 9]],
2 => [[ 1, 0, 44, 34], [ 1, 0, 44, 28], [ 1, 0, 44, 22], [ 1, 0, 44, 16]],
3 => [[ 1, 0, 70, 55], [ 1, 0, 70, 44], [ 2, 0, 35, 17], [ 2, 0, 35, 13]],
@@ -195,6 +195,6 @@ interface QRDataInterface{
/**
* returns a fresh matrix object with the data written for the given $maskPattern
*/
- public function initMatrix(int $maskPattern, bool $test = null):QRMatrix;
+ public function initMatrix(int $maskPattern, ?bool $test = null):QRMatrix;
}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php b/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php
index 05c8b9069..3bdae926a 100755
--- a/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php
+++ b/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php
@@ -25,32 +25,71 @@ use function array_fill, array_key_exists, array_push, array_unshift, count, flo
*/
final class QRMatrix{
+ /*
+ * special values
+ */
+
+ /** @var int */
+ public const M_NULL = 0x00;
+ /** @var int */
+ public const M_LOGO = 0x14;
+ /** @var int */
+ public const M_LOGO_DARK = self::M_LOGO << 8;
+
+ /*
+ * light values
+ */
+
+ /** @var int */
+ public const M_DATA = 0x04;
+ /** @var int */
+ public const M_FINDER = 0x06;
+ /** @var int */
+ public const M_SEPARATOR = 0x08;
+ /** @var int */
+ public const M_ALIGNMENT = 0x0a;
/** @var int */
- public const M_NULL = 0x00;
+ public const M_TIMING = 0x0c;
/** @var int */
- public const M_DARKMODULE = 0x02;
+ public const M_FORMAT = 0x0e;
/** @var int */
- public const M_DATA = 0x04;
+ public const M_VERSION = 0x10;
/** @var int */
- public const M_FINDER = 0x06;
+ public const M_QUIETZONE = 0x12;
+
+ /*
+ * dark values
+ */
+
+ /** @var int */
+ public const M_DARKMODULE = self::M_DARKMODULE_LIGHT << 8;
+ /** @var int */
+ public const M_DATA_DARK = self::M_DATA << 8;
+ /** @var int */
+ public const M_FINDER_DARK = self::M_FINDER << 8;
/** @var int */
- public const M_SEPARATOR = 0x08;
+ public const M_ALIGNMENT_DARK = self::M_ALIGNMENT << 8;
/** @var int */
- public const M_ALIGNMENT = 0x0a;
+ public const M_TIMING_DARK = self::M_TIMING << 8;
/** @var int */
- public const M_TIMING = 0x0c;
+ public const M_FORMAT_DARK = self::M_FORMAT << 8;
/** @var int */
- public const M_FORMAT = 0x0e;
+ public const M_VERSION_DARK = self::M_VERSION << 8;
/** @var int */
- public const M_VERSION = 0x10;
+ public const M_FINDER_DOT = self::M_FINDER_DOT_LIGHT << 8;
+
+ /*
+ * values used for reversed reflectance
+ */
+
/** @var int */
- public const M_QUIETZONE = 0x12;
+ public const M_DARKMODULE_LIGHT = 0x02;
/** @var int */
- public const M_LOGO = 0x14;
+ public const M_FINDER_DOT_LIGHT = 0x16;
/** @var int */
- public const M_FINDER_DOT = 0x16;
+ public const M_SEPARATOR_DARK = self::M_SEPARATOR << 8;
/** @var int */
- public const M_TEST = 0xff;
+ public const M_QUIETZONE_DARK = self::M_QUIETZONE << 8;
/**
* ISO/IEC 18004:2000 Annex E, Table E.1 - Row/column coordinates of center module of Alignment Patterns
@@ -247,7 +286,7 @@ final class QRMatrix{
/**
* shortcut to initialize the matrix
*/
- public function init(int $maskPattern, bool $test = null):QRMatrix{
+ public function init(int $maskPattern, ?bool $test = null):QRMatrix{
return $this
->setFinderPattern()
->setSeparators()
@@ -350,7 +389,7 @@ final class QRMatrix{
* Sets the "dark module", that is always on the same position 1x1px away from the bottom left finder
*/
public function setDarkModule():QRMatrix{
- $this->set(8, 4 * $this->version + 9, true, $this::M_DARKMODULE);
+ $this->set(8, 4 * $this->version + 9, true, $this::M_DARKMODULE_LIGHT);
return $this;
}
@@ -364,8 +403,8 @@ final class QRMatrix{
$pos = [
[0, 0], // top left
- [$this->moduleCount - 7, 0], // bottom left
- [0, $this->moduleCount - 7], // top right
+ [$this->moduleCount - 7, 0], // top right
+ [0, $this->moduleCount - 7], // bottom left
];
foreach($pos as $c){
@@ -381,7 +420,7 @@ final class QRMatrix{
}
// 3*3 dot
else{
- $this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER_DOT);
+ $this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER_DOT_LIGHT);
}
}
}
@@ -477,7 +516,7 @@ final class QRMatrix{
*
* ISO/IEC 18004:2000 Section 8.10
*/
- public function setVersionNumber(bool $test = null):QRMatrix{
+ public function setVersionNumber(?bool $test = null):QRMatrix{
$bits = $this::versionPattern[$this->version] ?? false;
if($bits !== false){
@@ -501,7 +540,7 @@ final class QRMatrix{
*
* ISO/IEC 18004:2000 Section 8.9
*/
- public function setFormatInfo(int $maskPattern, bool $test = null):QRMatrix{
+ public function setFormatInfo(int $maskPattern, ?bool $test = null):QRMatrix{
$bits = $this::formatPattern[QRCode::ECC_MODES[$this->eclevel]][$maskPattern] ?? 0;
for($i = 0; $i < 15; $i++){
@@ -541,7 +580,7 @@ final class QRMatrix{
*
* @throws \chillerlan\QRCode\Data\QRCodeDataException
*/
- public function setQuietZone(int $size = null):QRMatrix{
+ public function setQuietZone(?int $size = null):QRMatrix{
if($this->matrix[$this->moduleCount - 1][$this->moduleCount - 1] === $this::M_NULL){
throw new QRCodeDataException('use only after writing data');
@@ -588,7 +627,7 @@ final class QRMatrix{
*
* @throws \chillerlan\QRCode\Data\QRCodeDataException
*/
- public function setLogoSpace(int $width, int $height, int $startX = null, int $startY = null):QRMatrix{
+ public function setLogoSpace(int $width, int $height, ?int $startX = null, ?int $startY = null):QRMatrix{
// for logos we operate in ECC H (30%) only
if($this->eclevel !== QRCode::ECC_H){
@@ -624,8 +663,8 @@ final class QRMatrix{
$startY = ($startY !== null ? $startY : ($length - $height) / 2) + $qz;
// clear the space
- foreach($this->matrix as $y => $row){
- foreach($row as $x => $val){
+ for($y = 0; $y < $this->moduleCount; $y++){
+ for($x = 0; $x < $this->moduleCount; $x++){
// out of bounds, skip
if($x < $start || $y < $start ||$x >= $end || $y >= $end){
continue;
diff --git a/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php b/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php
index c42e0831c..fa4046086 100644
--- a/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php
+++ b/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php
@@ -69,7 +69,7 @@ final class Polynomial{
/**
* Polynomial constructor.
*/
- public function __construct(array $num = null, int $shift = null){
+ public function __construct(?array $num = null, ?int $shift = null){
$this->setNum($num ?? [1], $shift);
}
@@ -86,7 +86,7 @@ final class Polynomial{
*
* @return \chillerlan\QRCode\Helpers\Polynomial
*/
- public function setNum(array $num, int $shift = null):Polynomial{
+ public function setNum(array $num, ?int $shift = null):Polynomial{
$offset = 0;
$numCount = count($num);
@@ -157,7 +157,7 @@ final class Polynomial{
throw new QRCodeException(sprintf('log(%s)', $n));
}
- return Polynomial::table[$n][1];
+ return self::table[$n][1];
}
/**
@@ -172,7 +172,7 @@ final class Polynomial{
$n -= 255;
}
- return Polynomial::table[$n][0];
+ return self::table[$n][0];
}
}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php b/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php
index a15ae9ff3..b8e6694e8 100644
--- a/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php
@@ -68,7 +68,7 @@ class QRFpdf extends QROutputAbstract{
*
* @return string|\FPDF
*/
- public function dump(string $file = null){
+ public function dump(?string $file = null){
$file ??= $this->options->cachefile;
$fpdf = new FPDF('P', $this->options->fpdfMeasureUnit, [$this->length, $this->length]);
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRImage.php b/vendor/chillerlan/php-qrcode/src/Output/QRImage.php
index 8f533d341..c67c625b2 100644
--- a/vendor/chillerlan/php-qrcode/src/Output/QRImage.php
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRImage.php
@@ -94,7 +94,7 @@ class QRImage extends QROutputAbstract{
*
* @phan-suppress PhanUndeclaredTypeReturnType, PhanTypeMismatchReturn
*/
- public function dump(string $file = null){
+ public function dump(?string $file = null){
$file ??= $this->options->cachefile;
$this->image = imagecreatetruecolor($this->length, $this->length);
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php b/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php
index 49516d30e..ec0f6d5b0 100644
--- a/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php
@@ -67,7 +67,7 @@ class QRImagick extends QROutputAbstract{
*
* @return string|\Imagick
*/
- public function dump(string $file = null){
+ public function dump(?string $file = null){
$file ??= $this->options->cachefile;
$this->imagick = new Imagick;
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php b/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php
index 06d6e88cb..1f7843182 100644
--- a/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php
@@ -53,7 +53,7 @@ class QRMarkup extends QROutputAbstract{
/**
* HTML output
*/
- protected function html(string $file = null):string{
+ protected function html(?string $file = null):string{
$html = empty($this->options->cssClass)
? '<div>'
@@ -74,9 +74,11 @@ class QRMarkup extends QROutputAbstract{
$html .= '</div>'.$this->options->eol;
if($file !== null){
- return '<!DOCTYPE html>'.
- '<head><meta charset="UTF-8"><title>QR Code</title></head>'.
- '<body>'.$this->options->eol.$html.'</body>';
+ /** @noinspection HtmlRequiredLangAttribute */
+ return sprintf(
+ '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>QR Code</title></head><body>%s</body></html>',
+ $this->options->eol.$html
+ );
}
return $html;
@@ -87,7 +89,7 @@ class QRMarkup extends QROutputAbstract{
*
* @see https://github.com/codemasher/php-qrcode/pull/5
*/
- protected function svg(string $file = null):string{
+ protected function svg(?string $file = null):string{
$matrix = $this->matrix->matrix();
$svg = sprintf($this->svgHeader, $this->options->cssClass, $this->options->svgViewBoxSize ?? $this->moduleCount)
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php b/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php
index d4ed3d0c9..78e761093 100644
--- a/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php
+++ b/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php
@@ -12,7 +12,8 @@
namespace chillerlan\QRCode\Output;
-use chillerlan\QRCode\{Data\QRMatrix, QRCode};
+use chillerlan\QRCode\QRCode;
+use chillerlan\QRCode\Data\QRMatrix;
use chillerlan\Settings\SettingsContainerInterface;
use function call_user_func_array, dirname, file_put_contents, get_called_class, in_array, is_writable, sprintf;
@@ -112,7 +113,7 @@ abstract class QROutputAbstract implements QROutputInterface{
/**
* @inheritDoc
*/
- public function dump(string $file = null){
+ public function dump(?string $file = null){
$file ??= $this->options->cachefile;
// call the built-in output method with the optional file path as parameter
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php b/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php
index b07b8e7a5..7052701b9 100644
--- a/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php
+++ b/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php
@@ -19,29 +19,32 @@ use chillerlan\QRCode\Data\QRMatrix;
*/
interface QROutputInterface{
- const DEFAULT_MODULE_VALUES = [
+ public const DEFAULT_MODULE_VALUES = [
// light
- QRMatrix::M_NULL => false, // 0
- QRMatrix::M_DATA => false, // 4
- QRMatrix::M_FINDER => false, // 6
- QRMatrix::M_SEPARATOR => false, // 8
- QRMatrix::M_ALIGNMENT => false, // 10
- QRMatrix::M_TIMING => false, // 12
- QRMatrix::M_FORMAT => false, // 14
- QRMatrix::M_VERSION => false, // 16
- QRMatrix::M_QUIETZONE => false, // 18
- QRMatrix::M_LOGO => false, // 20
- QRMatrix::M_TEST => false, // 255
+ QRMatrix::M_NULL => false,
+ QRMatrix::M_DARKMODULE_LIGHT => false,
+ QRMatrix::M_DATA => false,
+ QRMatrix::M_FINDER => false,
+ QRMatrix::M_SEPARATOR => false,
+ QRMatrix::M_ALIGNMENT => false,
+ QRMatrix::M_TIMING => false,
+ QRMatrix::M_FORMAT => false,
+ QRMatrix::M_VERSION => false,
+ QRMatrix::M_QUIETZONE => false,
+ QRMatrix::M_LOGO => false,
+ QRMatrix::M_FINDER_DOT_LIGHT => false,
// dark
- QRMatrix::M_DARKMODULE << 8 => true, // 512
- QRMatrix::M_DATA << 8 => true, // 1024
- QRMatrix::M_FINDER << 8 => true, // 1536
- QRMatrix::M_ALIGNMENT << 8 => true, // 2560
- QRMatrix::M_TIMING << 8 => true, // 3072
- QRMatrix::M_FORMAT << 8 => true, // 3584
- QRMatrix::M_VERSION << 8 => true, // 4096
- QRMatrix::M_FINDER_DOT << 8 => true, // 5632
- QRMatrix::M_TEST << 8 => true, // 65280
+ QRMatrix::M_DARKMODULE => true,
+ QRMatrix::M_DATA_DARK => true,
+ QRMatrix::M_FINDER_DARK => true,
+ QRMatrix::M_SEPARATOR_DARK => true,
+ QRMatrix::M_ALIGNMENT_DARK => true,
+ QRMatrix::M_TIMING_DARK => true,
+ QRMatrix::M_FORMAT_DARK => true,
+ QRMatrix::M_VERSION_DARK => true,
+ QRMatrix::M_QUIETZONE_DARK => true,
+ QRMatrix::M_LOGO_DARK => true,
+ QRMatrix::M_FINDER_DOT => true,
];
/**
@@ -49,6 +52,6 @@ interface QROutputInterface{
*
* @return mixed
*/
- public function dump(string $file = null);
+ public function dump(?string $file = null);
}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRString.php b/vendor/chillerlan/php-qrcode/src/Output/QRString.php
index 3ed5153e1..441ef99fd 100644
--- a/vendor/chillerlan/php-qrcode/src/Output/QRString.php
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRString.php
@@ -50,7 +50,7 @@ class QRString extends QROutputAbstract{
/**
* string output
*/
- protected function text(string $file = null):string{
+ protected function text(?string $file = null):string{
$str = [];
foreach($this->matrix->matrix() as $row){
@@ -69,7 +69,7 @@ class QRString extends QROutputAbstract{
/**
* JSON output
*/
- protected function json(string $file = null):string{
+ protected function json(?string $file = null):string{
return json_encode($this->matrix->matrix());
}
diff --git a/vendor/chillerlan/php-qrcode/src/QRCode.php b/vendor/chillerlan/php-qrcode/src/QRCode.php
index 908030feb..1dad921e4 100755
--- a/vendor/chillerlan/php-qrcode/src/QRCode.php
+++ b/vendor/chillerlan/php-qrcode/src/QRCode.php
@@ -117,23 +117,23 @@ class QRCode{
* @var string[][]
*/
public const OUTPUT_MODES = [
- QRMarkup::class => [
+ QRMarkup::class => [
self::OUTPUT_MARKUP_SVG,
self::OUTPUT_MARKUP_HTML,
],
- QRImage::class => [
+ QRImage::class => [
self::OUTPUT_IMAGE_PNG,
self::OUTPUT_IMAGE_GIF,
self::OUTPUT_IMAGE_JPG,
],
- QRString::class => [
+ QRString::class => [
self::OUTPUT_STRING_JSON,
self::OUTPUT_STRING_TEXT,
],
QRImagick::class => [
self::OUTPUT_IMAGICK,
],
- QRFpdf::class => [
+ QRFpdf::class => [
self::OUTPUT_FPDF
]
];
@@ -167,7 +167,7 @@ class QRCode{
*
* Sets the options instance, determines the current mb-encoding and sets it to UTF-8
*/
- public function __construct(SettingsContainerInterface $options = null){
+ public function __construct(?SettingsContainerInterface $options = null){
$this->options = $options ?? new QROptions;
}
@@ -176,7 +176,7 @@ class QRCode{
*
* @return mixed
*/
- public function render(string $data, string $file = null){
+ public function render(string $data, ?string $file = null){
return $this->initOutputInterface($data)->dump($file);
}
diff --git a/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php b/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php
index 74c384b13..13dfba136 100644
--- a/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php
+++ b/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php
@@ -140,12 +140,12 @@ trait QROptionsTrait{
/**
* string substitute for dark
*/
- protected string $textDark = '🔴';
+ protected string $textDark = '██';
/**
* string substitute for light
*/
- protected string $textLight = '⭕';
+ protected string $textLight = '░░';
/**
* markup substitute for dark (CSS value)
diff --git a/vendor/chillerlan/php-settings-container/.github/FUNDING.yml b/vendor/chillerlan/php-settings-container/.github/FUNDING.yml
deleted file mode 100644
index 16a077f52..000000000
--- a/vendor/chillerlan/php-settings-container/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-ko_fi: codemasher
-custom: "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4"
diff --git a/vendor/chillerlan/php-settings-container/.github/workflows/tests.yml b/vendor/chillerlan/php-settings-container/.github/workflows/tests.yml
deleted file mode 100644
index 8f108f0dd..000000000
--- a/vendor/chillerlan/php-settings-container/.github/workflows/tests.yml
+++ /dev/null
@@ -1,105 +0,0 @@
-# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
-# https://github.com/sebastianbergmann/phpunit/blob/master/.github/workflows/ci.yml
-
-on:
- push:
- branches:
- - main
- pull_request:
- branches:
- - main
-
-
-name: "CI"
-
-jobs:
-
- static-code-analysis:
- name: "Static Code Analysis"
-
- runs-on: ubuntu-latest
-
- env:
- PHAN_ALLOW_XDEBUG: 0
- PHAN_DISABLE_XDEBUG_WARN: 1
-
- steps:
- - name: "Checkout"
- uses: actions/checkout@v3
-
- - name: "Install PHP"
- uses: shivammathur/setup-php@v2
- with:
- php-version: "7.4"
- tools: pecl
- coverage: none
- extensions: ast, json
-
- - name: "Update dependencies with composer"
- run: composer update --no-interaction --no-ansi --no-progress --no-suggest
-
- - name: "Run phan"
- run: php vendor/bin/phan
-
- build-docs:
- name: "Build and publish Docs"
-
- runs-on: ubuntu-latest
-
- steps:
- - name: "Checkout sources"
- uses: actions/checkout@v3
-
- - name: "Install PHP"
- uses: shivammathur/setup-php@v2
- with:
- php-version: "8.1"
- coverage: none
- tools: phpDocumentor
- extensions: json
-
- - name: "Build Docs"
- run: phpdoc --config=phpdoc.xml
-
- - name: "Publish Docs to gh-pages"
- uses: JamesIves/github-pages-deploy-action@v4.3.4
- with:
- branch: gh-pages
- folder: docs
- clean: true
-
- tests:
- name: "Unit Tests"
-
- runs-on: ${{ matrix.os }}
-
- strategy:
- fail-fast: false
- matrix:
- os:
- - ubuntu-latest
- - windows-latest
- php-version:
- - "7.4"
- - "8.0"
- - "8.1"
-
- steps:
- - name: "Checkout"
- uses: actions/checkout@v3
-
- - name: "Install PHP with extensions"
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php-version }}
- coverage: pcov
- extensions: json
-
- - name: "Install dependencies with composer"
- run: composer update --no-ansi --no-interaction --no-progress --no-suggest
-
- - name: "Run tests with phpunit"
- run: php vendor/phpunit/phpunit/phpunit --configuration=phpunit.xml
-
- - name: "Send code coverage report to Codecov.io"
- uses: codecov/codecov-action@v3
diff --git a/vendor/chillerlan/php-settings-container/.gitignore b/vendor/chillerlan/php-settings-container/.gitignore
deleted file mode 100644
index 142dd453a..000000000
--- a/vendor/chillerlan/php-settings-container/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.build
-/.idea
-/vendor
-composer.lock
diff --git a/vendor/chillerlan/php-settings-container/.phan/config.php b/vendor/chillerlan/php-settings-container/.phan/config.php
deleted file mode 100644
index 468bd9983..000000000
--- a/vendor/chillerlan/php-settings-container/.phan/config.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * This configuration will be read and overlaid on top of the
- * default configuration. Command-line arguments will be applied
- * after this file is read.
- */
-return [
- // Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
- // `'7.4'`, `null`.
- // If this is set to `null`,
- // then Phan assumes the PHP version which is closest to the minor version
- // of the php executable used to execute Phan.
- //
- // Note that the **only** effect of choosing `'5.6'` is to infer
- // that functions removed in php 7.0 exist.
- // (See `backward_compatibility_checks` for additional options)
- 'target_php_version' => '7.4',
-
- // A list of directories that should be parsed for class and
- // method information. After excluding the directories
- // defined in exclude_analysis_directory_list, the remaining
- // files will be statically analyzed for errors.
- //
- // Thus, both first-party and third-party code being used by
- // your application should be included in this list.
- 'directory_list' => [
- 'examples',
- 'src',
- 'tests',
- 'vendor',
- ],
-
- // A regex used to match every file name that you want to
- // exclude from parsing. Actual value will exclude every
- // "test", "tests", "Test" and "Tests" folders found in
- // "vendor/" directory.
- 'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',
-
- // A directory list that defines files that will be excluded
- // from static analysis, but whose class and method
- // information should be included.
- //
- // Generally, you'll want to include the directories for
- // third-party code (such as "vendor/") in this list.
- //
- // n.b.: If you'd like to parse but not analyze 3rd
- // party code, directories containing that code
- // should be added to both the `directory_list`
- // and `exclude_analysis_directory_list` arrays.
- 'exclude_analysis_directory_list' => [
- 'tests',
- 'vendor',
- ],
-];
diff --git a/vendor/chillerlan/php-settings-container/.scrutinizer.yml b/vendor/chillerlan/php-settings-container/.scrutinizer.yml
deleted file mode 100644
index daeb475f4..000000000
--- a/vendor/chillerlan/php-settings-container/.scrutinizer.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-build:
- nodes:
- analysis:
- tests:
- override:
- - php-scrutinizer-run
- environment:
- php: 8.0.0
-
-filter:
- excluded_paths:
- - examples/*
- - tests/*
- - vendor/*
diff --git a/vendor/chillerlan/php-settings-container/README.md b/vendor/chillerlan/php-settings-container/README.md
index 579696b6e..3fb122d14 100644
--- a/vendor/chillerlan/php-settings-container/README.md
+++ b/vendor/chillerlan/php-settings-container/README.md
@@ -1,15 +1,15 @@
# chillerlan/php-settings-container
-A container class for immutable settings objects. Not a DI container. PHP 7.4+
-- [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php) provides immutable properties with magic getter & setter and some fancy - decouple configuration logic from your application!
+A container class for settings objects - decouple configuration logic from your application! Not a DI container.
+- [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php) provides immutable properties with magic getter & setter and some fancy.
[![PHP Version Support][php-badge]][php]
[![version][packagist-badge]][packagist]
[![license][license-badge]][license]
+[![Continuous Integration][gh-action-badge]][gh-action]
[![Coverage][coverage-badge]][coverage]
-[![Scrunitizer][scrutinizer-badge]][scrutinizer]
+[![Codacy][codacy-badge]][codacy]
[![Packagist downloads][downloads-badge]][downloads]
-[![Continuous Integration][gh-action-badge]][gh-action]
[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-settings-container?logo=php&color=8892BF
[php]: https://www.php.net/supported-versions.php
@@ -19,23 +19,23 @@ A container class for immutable settings objects. Not a DI container. PHP 7.4+
[license]: https://github.com/chillerlan/php-settings-container/blob/main/LICENSE
[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-settings-container.svg?logo=codecov
[coverage]: https://codecov.io/github/chillerlan/php-settings-container
-[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/chillerlan/php-settings-container.svg?logo=scrutinizer
-[scrutinizer]: https://scrutinizer-ci.com/g/chillerlan/php-settings-container
+[codacy-badge]: https://img.shields.io/codacy/grade/bd2467799e2943d2853ce3ebad5af490/main?logo=codacy
+[codacy]: https://www.codacy.com/gh/chillerlan/php-settings-container/dashboard?branch=main
[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-settings-container.svg?logo=packagist
[downloads]: https://packagist.org/packages/chillerlan/php-settings-container/stats
-[gh-action-badge]: https://github.com/chillerlan/php-settings-container/workflows/CI/badge.svg
-[gh-action]: https://github.com/chillerlan/php-settings-container/actions?query=workflow%3A%22CI%22
+[gh-action-badge]: https://img.shields.io/github/actions/workflow/status/chillerlan/php-settings-container/ci.yml?branch=main&logo=github
+[gh-action]: https://github.com/chillerlan/php-settings-container/actions/workflows/ci.yml?query=branch%3Amain
## Documentation
### Installation
**requires [composer](https://getcomposer.org)**
-*composer.json* (note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^2.1` - see [releases](https://github.com/chillerlan/php-settings-container/releases) for valid versions)
+*composer.json* (note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^3.0` - see [releases](https://github.com/chillerlan/php-settings-container/releases) for valid versions)
```json
{
"require": {
- "php": "^7.4 || ^8.0",
+ "php": "^8.1",
"chillerlan/php-settings-container": "dev-main"
}
}
@@ -45,31 +45,27 @@ Profit!
## Usage
-The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract` ) provides plug-in functionality for immutable object properties and adds some fancy, like loading/saving JSON, arrays etc.
+The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract`) provides plug-in functionality for immutable object properties and adds some fancy, like loading/saving JSON, arrays etc.
It takes an `iterable` as the only constructor argument and calls a method with the trait's name on invocation (`MyTrait::MyTrait()`) for each used trait.
+A PHPStan ruleset to exclude errors generated by accessing magic properties on `SettingsContainerInterface` can be found in `rules-magic-access.neon`.
+
+
### Simple usage
```php
class MyContainer extends SettingsContainerAbstract{
- protected $foo;
- protected $bar;
-}
-```
-Typed properties in PHP 7.4+:
-```php
-class MyContainer extends SettingsContainerAbstract{
protected string $foo;
protected string $bar;
}
```
```php
-// use it just like a \stdClass
+// use it just like a \stdClass (except the properties are fixed)
$container = new MyContainer;
$container->foo = 'what';
$container->bar = 'foo';
-// which is equivalent to
+// which is equivalent to
$container = new MyContainer(['bar' => 'foo', 'foo' => 'what']);
// ...or try
$container->fromJSON('{"foo": "what", "bar": "foo"}');
@@ -90,37 +86,48 @@ var_dump($container->nope); // -> null
### Advanced usage
```php
+// from library 1
trait SomeOptions{
- protected $foo;
- protected $what;
-
+ protected string $foo;
+ protected string $what;
+
// this method will be called in SettingsContainerAbstract::construct()
// after the properties have been set
- protected function SomeOptions(){
+ protected function SomeOptions():void{
// just some constructor stuff...
$this->foo = strtoupper($this->foo);
}
-
+
+ /*
+ * special prefixed magic setters & getters
+ */
+
// this method will be called from __set() when property $what is set
- protected function set_what(string $value){
+ protected function set_what(string $value):void{
$this->what = md5($value);
}
+
+ // this method is called on __get() for the property $what
+ protected function get_what():string{
+ return 'hash: '.$this->what;
+ }
}
+// from library 2
trait MoreOptions{
- protected $bar = 'whatever'; // provide default values
+ protected string $bar = 'whatever'; // provide default values
}
```
```php
$commonOptions = [
// SomeOptions
- 'foo' => 'whatever',
+ 'foo' => 'whatever',
// MoreOptions
'bar' => 'nothing',
];
-// now plug the several library options together to a single object
+// now plug the several library options together to a single object
$container = new class ($commonOptions) extends SettingsContainerAbstract{
use SomeOptions, MoreOptions;
};
@@ -129,27 +136,31 @@ var_dump($container->foo); // -> WHATEVER (constructor ran strtoupper on the val
var_dump($container->bar); // -> nothing
$container->what = 'some value';
-var_dump($container->what); // -> md5 hash of "some value"
+var_dump($container->what); // -> hash: 5946210c9e93ae37891dfe96c3e39614 (custom getter added "hash: ")
```
### API
#### [`SettingsContainerAbstract`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerAbstract.php)
-method | return | info
--------- | ---- | -----------
-`__construct(iterable $properties = null)` | - | calls `construct()` internally after the properties have been set
-(protected) `construct()` | void | calls a method with trait name as replacement constructor for each used trait
-`__get(string $property)` | mixed | calls `$this->{'get_'.$property}()` if such a method exists
-`__set(string $property, $value)` | void | calls `$this->{'set_'.$property}($value)` if such a method exists
-`__isset(string $property)` | bool |
-`__unset(string $property)` | void |
-`__toString()` | string | a JSON string
-`toArray()` | array |
-`fromIterable(iterable $properties)` | `SettingsContainerInterface` |
-`toJSON(int $jsonOptions = null)` | string | accepts [JSON options constants](http://php.net/manual/json.constants.php)
-`fromJSON(string $json)` | `SettingsContainerInterface` |
-`jsonSerialize()` | mixed | implements the [`JsonSerializable`](https://www.php.net/manual/en/jsonserializable.jsonserialize.php) interface
+| method | return | info |
+|--------------------------------------------|------------------------------|---------------------------------------------------------------------------------------------------------------------|
+| `__construct(iterable $properties = null)` | - | calls `construct()` internally after the properties have been set |
+| (protected) `construct()` | void | calls a method with trait name as replacement constructor for each used trait |
+| `__get(string $property)` | mixed | calls `$this->{'get_'.$property}()` if such a method exists |
+| `__set(string $property, $value)` | void | calls `$this->{'set_'.$property}($value)` if such a method exists |
+| `__isset(string $property)` | bool | |
+| `__unset(string $property)` | void | |
+| `__toString()` | string | a JSON string |
+| `toArray()` | array | |
+| `fromIterable(iterable $properties)` | `SettingsContainerInterface` | |
+| `toJSON(int $jsonOptions = null)` | string | accepts [JSON options constants](http://php.net/manual/json.constants.php) |
+| `fromJSON(string $json)` | `SettingsContainerInterface` | |
+| `jsonSerialize()` | mixed | implements the [`JsonSerializable`](https://www.php.net/manual/en/jsonserializable.jsonserialize.php) interface |
+| `serialize()` | string | implements the [`Serializable`](https://www.php.net/manual/en/serializable.serialize.php) interface |
+| `unserialize(string $data)` | void | implements the [`Serializable`](https://www.php.net/manual/en/serializable.unserialize.php) interface |
+| `__serialize()` | array | implements the [`Serializable`](https://www.php.net/manual/en/language.oop5.magic.php#object.serialize) interface |
+| `__unserialize(array $data)` | void | implements the [`Serializable`](https://www.php.net/manual/en/language.oop5.magic.php#object.unserialize) interface |
## Disclaimer
This might be either an utterly genius or completely stupid idea - you decide. However, i like it and it works.
diff --git a/vendor/chillerlan/php-settings-container/composer.json b/vendor/chillerlan/php-settings-container/composer.json
index 1d89b6c41..16b8e5ecb 100644
--- a/vendor/chillerlan/php-settings-container/composer.json
+++ b/vendor/chillerlan/php-settings-container/composer.json
@@ -1,12 +1,12 @@
{
"name": "chillerlan/php-settings-container",
- "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "description": "A container class for immutable settings objects. Not a DI container.",
"homepage": "https://github.com/chillerlan/php-settings-container",
"license": "MIT",
"type": "library",
"minimum-stability": "stable",
"keywords": [
- "php7", "helper", "container", "settings", "configuration"
+ "helper", "container", "settings", "configuration"
],
"authors": [
{
@@ -20,27 +20,29 @@
"source": "https://github.com/chillerlan/php-settings-container"
},
"require": {
- "php": "^7.4 || ^8.0",
+ "php": "^8.1",
"ext-json": "*"
},
"require-dev": {
- "phan/phan": "^5.3",
- "phpunit/phpunit": "^9.5"
+ "phpmd/phpmd": "^2.15",
+ "phpstan/phpstan": "^1.11",
+ "phpstan/phpstan-deprecation-rules": "^1.2",
+ "phpunit/phpunit": "^10.5",
+ "squizlabs/php_codesniffer": "^3.10"
},
"autoload": {
"psr-4": {
- "chillerlan\\Settings\\": "src/"
+ "chillerlan\\Settings\\": "src"
}
},
"autoload-dev": {
"psr-4": {
- "chillerlan\\SettingsTest\\": "tests/",
- "chillerlan\\SettingsExamples\\": "examples/"
+ "chillerlan\\SettingsTest\\": "tests"
}
},
"scripts": {
"phpunit": "@php vendor/bin/phpunit",
- "phan": "@php vendor/bin/phan"
+ "phpstan": "@php vendor/bin/phpstan"
},
"config": {
"lock": false,
diff --git a/vendor/chillerlan/php-settings-container/docs/Readme.md b/vendor/chillerlan/php-settings-container/docs/Readme.md
deleted file mode 100644
index 7749a1e7f..000000000
--- a/vendor/chillerlan/php-settings-container/docs/Readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Auto generated API documentation
-
-The API documentation can be auto generated with [phpDocumentor](https://www.phpdoc.org/).
-There is an [online version available](https://chillerlan.github.io/php-settings-container/) via the [gh-pages branch](https://github.com/chillerlan/php-settings-container/tree/gh-pages) that is [automatically deployed](https://github.com/chillerlan/php-settings-container/deployments) on each push to main.
-
-Locally created docs will appear in this directory. If you'd like to create local docs, please follow these steps:
-
-- [download phpDocumentor](https://github.com/phpDocumentor/phpDocumentor/releases) v3+ as .phar archive
-- run it in the repository root directory:
- - on Windows `c:\path\to\php.exe c:\path\to\phpDocumentor.phar --config=phpdoc.xml`
- - on Linux just `php /path/to/phpDocumentor.phar --config=phpdoc.xml`
-- open [index.html](./index.html) in a browser
-- profit!
diff --git a/vendor/chillerlan/php-settings-container/examples/advanced.php b/vendor/chillerlan/php-settings-container/examples/advanced.php
deleted file mode 100644
index f11642c83..000000000
--- a/vendor/chillerlan/php-settings-container/examples/advanced.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * @created 28.08.2018
- * @author smiley <smiley@chillerlan.net>
- * @copyright 2018 smiley
- * @license MIT
- */
-
-namespace chillerlan\SettingsExamples;
-
-use chillerlan\Settings\SettingsContainerAbstract;
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-// from library #1
-trait SomeOptions{
- protected string $foo = '';
-
- // this method will be called in SettingsContainerAbstract::__construct() after the properties have been set
- protected function SomeOptions(){
- // just some constructor stuff...
- $this->foo = strtoupper($this->foo);
- }
-}
-
-// from library #2
-trait MoreOptions{
- protected string $bar = 'whatever'; // provide default values
-}
-
-$commonOptions = [
- // SomeOptions
- 'foo' => 'whatever',
- // MoreOptions
- 'bar' => 'nothing',
-];
-
-// now plug the several library options together to a single object
-
-/**
- * @property string $foo
- * @property string $bar
- */
-class MySettings extends SettingsContainerAbstract{
- use SomeOptions, MoreOptions; // ...
-};
-
-$container = new MySettings($commonOptions);
-
-var_dump($container->foo); // -> WHATEVER (constructor ran strtoupper on the value)
-var_dump($container->bar); // -> nothing
diff --git a/vendor/chillerlan/php-settings-container/examples/simple.php b/vendor/chillerlan/php-settings-container/examples/simple.php
deleted file mode 100644
index acdbe4cb3..000000000
--- a/vendor/chillerlan/php-settings-container/examples/simple.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * @created 28.08.2018
- * @author smiley <smiley@chillerlan.net>
- * @copyright 2018 smiley
- * @license MIT
- */
-
-namespace chillerlan\SettingsExamples;
-
-use chillerlan\Settings\SettingsContainerAbstract;
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-class MyContainer extends SettingsContainerAbstract{
- protected $foo;
- protected $bar;
-}
-
-/** @var \chillerlan\Settings\SettingsContainerInterface $container */
-$container = new MyContainer(['foo' => 'what']);
-$container->bar = 'foo';
-
-var_dump($container->toJSON()); // -> {"foo":"what","bar":"foo"}
-
-// non-existing properties will be ignored:
-$container->nope = 'what';
-
-var_dump($container->nope); // -> NULL
diff --git a/vendor/chillerlan/php-settings-container/phpdoc.xml b/vendor/chillerlan/php-settings-container/phpdoc.xml
deleted file mode 100644
index d440f1d8a..000000000
--- a/vendor/chillerlan/php-settings-container/phpdoc.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<phpdoc>
- <parser>
- <target>docs</target>
- <encoding>utf8</encoding>
- <markers>
- <item>TODO</item>
- </markers>
- </parser>
- <transformer>
- <target>docs</target>
- </transformer>
- <files>
- <directory>src</directory>
- <directory>tests</directory>
- </files>
- <transformations>
- <template name="responsive-twig"/>
- </transformations>
-</phpdoc>
diff --git a/vendor/chillerlan/php-settings-container/phpunit.xml b/vendor/chillerlan/php-settings-container/phpunit.xml
deleted file mode 100644
index 9271a1bb1..000000000
--- a/vendor/chillerlan/php-settings-container/phpunit.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
- bootstrap="vendor/autoload.php"
- cacheResultFile=".build/phpunit.result.cache"
- colors="true"
- verbose="true"
->
- <coverage processUncoveredFiles="true">
- <include>
- <directory suffix=".php">./src</directory>
- </include>
- <report>
- <clover outputFile=".build/coverage/clover.xml"/>
- <xml outputDirectory=".build/coverage/coverage-xml"/>
- </report>
- </coverage>
- <testsuites>
- <testsuite name="php-settings-container test suite">
- <directory suffix=".php">./tests/</directory>
- </testsuite>
- </testsuites>
- <logging>
- <junit outputFile=".build/logs/junit.xml"/>
- </logging>
-</phpunit>
diff --git a/vendor/chillerlan/php-settings-container/rules-magic-access.neon b/vendor/chillerlan/php-settings-container/rules-magic-access.neon
new file mode 100644
index 000000000..5a98d3a81
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/rules-magic-access.neon
@@ -0,0 +1,4 @@
+parameters:
+ ignoreErrors:
+ # yes, these are magic
+ - message: "#^Access to an undefined property chillerlan\\\\Settings\\\\SettingsContainerInterface\\:\\:\\$[\\w]+\\.$#"
diff --git a/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php
index 6b7a1ecc2..826faaf25 100644
--- a/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php
+++ b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php
@@ -7,20 +7,23 @@
* @copyright 2018 Smiley
* @license MIT
*/
+declare(strict_types=1);
namespace chillerlan\Settings;
-use ReflectionClass, ReflectionProperty;
-
-use function get_object_vars, json_decode, json_encode, method_exists, property_exists;
+use InvalidArgumentException, JsonException, ReflectionClass, ReflectionProperty;
+use function array_keys, get_object_vars, is_object, json_decode, json_encode,
+ json_last_error_msg, method_exists, property_exists, serialize, unserialize;
use const JSON_THROW_ON_ERROR;
abstract class SettingsContainerAbstract implements SettingsContainerInterface{
/**
* SettingsContainerAbstract constructor.
+ *
+ * @phpstan-param array<string, mixed> $properties
*/
- public function __construct(iterable $properties = null){
+ public function __construct(iterable|null $properties = null){
if(!empty($properties)){
$this->fromIterable($properties);
@@ -49,7 +52,7 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
/**
* @inheritdoc
*/
- public function __get(string $property){
+ public function __get(string $property):mixed{
if(!property_exists($this, $property) || $this->isPrivate($property)){
return null;
@@ -67,7 +70,7 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
/**
* @inheritdoc
*/
- public function __set(string $property, $value):void{
+ public function __set(string $property, mixed $value):void{
if(!property_exists($this, $property) || $this->isPrivate($property)){
return;
@@ -120,13 +123,19 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
* @inheritdoc
*/
public function toArray():array{
- return get_object_vars($this);
+ $properties = [];
+
+ foreach(array_keys(get_object_vars($this)) as $key){
+ $properties[$key] = $this->__get($key);
+ }
+
+ return $properties;
}
/**
* @inheritdoc
*/
- public function fromIterable(iterable $properties):SettingsContainerInterface{
+ public function fromIterable(iterable $properties):static{
foreach($properties as $key => $value){
$this->__set($key, $value);
@@ -138,14 +147,21 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
/**
* @inheritdoc
*/
- public function toJSON(int $jsonOptions = null):string{
- return json_encode($this, $jsonOptions ?? 0);
+ public function toJSON(int|null $jsonOptions = null):string{
+ $json = json_encode($this, ($jsonOptions ?? 0));
+
+ if($json === false){
+ throw new JsonException(json_last_error_msg());
+ }
+
+ return $json;
}
/**
* @inheritdoc
*/
- public function fromJSON(string $json):SettingsContainerInterface{
+ public function fromJSON(string $json):static{
+ /** @phpstan-var array<string, mixed> $data */
$data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
return $this->fromIterable($data);
@@ -153,10 +169,84 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
/**
* @inheritdoc
+ * @return array<string, mixed>
*/
- #[\ReturnTypeWillChange]
public function jsonSerialize():array{
return $this->toArray();
}
+ /**
+ * Returns a serialized string representation of the object in its current state (except static/readonly properties)
+ *
+ * @inheritdoc
+ * @see \chillerlan\Settings\SettingsContainerInterface::toArray()
+ */
+ public function serialize():string{
+ return serialize($this);
+ }
+
+ /**
+ * Restores the data (except static/readonly properties) from the given serialized object to the current instance
+ *
+ * @inheritdoc
+ * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable()
+ */
+ public function unserialize(string $data):void{
+ $obj = unserialize($data);
+
+ if($obj === false || !is_object($obj)){
+ throw new InvalidArgumentException('The given serialized string is invalid');
+ }
+
+ $reflection = new ReflectionClass($obj);
+
+ if(!$reflection->isInstance($this)){
+ throw new InvalidArgumentException('The unserialized object does not match the class of this container');
+ }
+
+ $properties = $reflection->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY));
+
+ foreach($properties as $reflectionProperty){
+ $this->{$reflectionProperty->name} = $reflectionProperty->getValue($obj);
+ }
+
+ }
+
+ /**
+ * Returns a serialized string representation of the object in its current state (except static/readonly properties)
+ *
+ * @inheritdoc
+ * @see \chillerlan\Settings\SettingsContainerInterface::toArray()
+ */
+ public function __serialize():array{
+
+ $properties = (new ReflectionClass($this))
+ ->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY))
+ ;
+
+ $data = [];
+
+ foreach($properties as $reflectionProperty){
+ $data[$reflectionProperty->name] = $reflectionProperty->getValue($this);
+ }
+
+ return $data;
+ }
+
+ /**
+ * Restores the data from the given array to the current instance
+ *
+ * @inheritdoc
+ * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable()
+ *
+ * @param array<string, mixed> $data
+ */
+ public function __unserialize(array $data):void{
+
+ foreach($data as $key => $value){
+ $this->{$key} = $value;
+ }
+
+ }
+
}
diff --git a/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php b/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php
index ddacccd29..6f3cc1a4d 100644
--- a/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php
+++ b/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php
@@ -7,30 +7,28 @@
* @copyright 2018 Smiley
* @license MIT
*/
+declare(strict_types=1);
namespace chillerlan\Settings;
-use JsonSerializable;
+use JsonSerializable, Serializable;
/**
* a generic container with magic getter and setter
*/
-interface SettingsContainerInterface extends JsonSerializable{
+interface SettingsContainerInterface extends JsonSerializable, Serializable{
/**
* Retrieve the value of $property
*
* @return mixed|null
*/
- public function __get(string $property);
+ public function __get(string $property):mixed;
/**
* Set $property to $value while avoiding private and non-existing properties
- *
- * @param string $property
- * @param mixed $value
*/
- public function __set(string $property, $value):void;
+ public function __set(string $property, mixed $value):void;
/**
* Checks if $property is set (aka. not null), excluding private properties
@@ -43,32 +41,46 @@ interface SettingsContainerInterface extends JsonSerializable{
public function __unset(string $property):void;
/**
- * @see SettingsContainerInterface::toJSON()
+ * @see \chillerlan\Settings\SettingsContainerInterface::toJSON()
*/
public function __toString():string;
/**
* Returns an array representation of the settings object
+ *
+ * The values will be run through the magic __get(), which may also call custom getters.
+ *
+ * @return array<string, mixed>
*/
public function toArray():array;
/**
* Sets properties from a given iterable
+ *
+ * The values will be run through the magic __set(), which may also call custom setters.
+ *
+ * @phpstan-param array<string, mixed> $properties
*/
- public function fromIterable(iterable $properties):SettingsContainerInterface;
+ public function fromIterable(iterable $properties):static;
/**
* Returns a JSON representation of the settings object
+ *
* @see \json_encode()
+ * @see \chillerlan\Settings\SettingsContainerInterface::toArray()
+ *
+ * @throws \JsonException
*/
- public function toJSON(int $jsonOptions = null):string;
+ public function toJSON(int|null $jsonOptions = null):string;
/**
* Sets properties from a given JSON string
*
+ * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable()
+ *
* @throws \Exception
* @throws \JsonException
*/
- public function fromJSON(string $json):SettingsContainerInterface;
+ public function fromJSON(string $json):static;
}
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
index 51e734a77..07b32ed6e 100644
--- a/vendor/composer/InstalledVersions.php
+++ b/vendor/composer/InstalledVersions.php
@@ -322,6 +322,7 @@ class InstalledVersions
}
$installed = array();
+ $copiedLocalDir = false;
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
@@ -330,9 +331,11 @@ class InstalledVersions
} elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require $vendorDir.'/composer/installed.php';
- $installed[] = self::$installedByVendor[$vendorDir] = $required;
- if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
- self::$installed = $installed[count($installed) - 1];
+ self::$installedByVendor[$vendorDir] = $required;
+ $installed[] = $required;
+ if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
+ self::$installed = $required;
+ $copiedLocalDir = true;
}
}
}
@@ -350,7 +353,7 @@ class InstalledVersions
}
}
- if (self::$installed !== array()) {
+ if (self::$installed !== array() && !$copiedLocalDir) {
$installed[] = self::$installed;
}
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 69ec2d8ca..06748feea 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -21,7 +21,6 @@ return array(
'Brick\\Math\\Internal\\Calculator\\GmpCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/GmpCalculator.php',
'Brick\\Math\\Internal\\Calculator\\NativeCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/NativeCalculator.php',
'Brick\\Math\\RoundingMode' => $vendorDir . '/brick/math/src/RoundingMode.php',
- 'CURLStringFile' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php',
'CommerceGuys\\Intl\\Calculator' => $vendorDir . '/commerceguys/intl/src/Calculator.php',
'CommerceGuys\\Intl\\Currency\\Currency' => $vendorDir . '/commerceguys/intl/src/Currency/Currency.php',
'CommerceGuys\\Intl\\Currency\\CurrencyRepository' => $vendorDir . '/commerceguys/intl/src/Currency/CurrencyRepository.php',
@@ -67,6 +66,7 @@ return array(
'HTMLPurifier_AttrDef_CSS_Multiple' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Multiple.php',
'HTMLPurifier_AttrDef_CSS_Number' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Number.php',
'HTMLPurifier_AttrDef_CSS_Percentage' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Percentage.php',
+ 'HTMLPurifier_AttrDef_CSS_Ratio' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php',
'HTMLPurifier_AttrDef_CSS_TextDecoration' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php',
'HTMLPurifier_AttrDef_CSS_URI' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/URI.php',
'HTMLPurifier_AttrDef_Clone' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Clone.php',
@@ -395,6 +395,7 @@ return array(
'OTPHP\\FactoryInterface' => $vendorDir . '/spomky-labs/otphp/src/FactoryInterface.php',
'OTPHP\\HOTP' => $vendorDir . '/spomky-labs/otphp/src/HOTP.php',
'OTPHP\\HOTPInterface' => $vendorDir . '/spomky-labs/otphp/src/HOTPInterface.php',
+ 'OTPHP\\InternalClock' => $vendorDir . '/spomky-labs/otphp/src/InternalClock.php',
'OTPHP\\OTP' => $vendorDir . '/spomky-labs/otphp/src/OTP.php',
'OTPHP\\OTPInterface' => $vendorDir . '/spomky-labs/otphp/src/OTPInterface.php',
'OTPHP\\ParameterTrait' => $vendorDir . '/spomky-labs/otphp/src/ParameterTrait.php',
@@ -412,6 +413,7 @@ return array(
'ParagonIE\\ConstantTime\\Encoding' => $vendorDir . '/paragonie/constant_time_encoding/src/Encoding.php',
'ParagonIE\\ConstantTime\\Hex' => $vendorDir . '/paragonie/constant_time_encoding/src/Hex.php',
'ParagonIE\\ConstantTime\\RFC4648' => $vendorDir . '/paragonie/constant_time_encoding/src/RFC4648.php',
+ 'Psr\\Clock\\ClockInterface' => $vendorDir . '/psr/clock/src/ClockInterface.php',
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/src/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/src/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/src/LogLevel.php',
@@ -428,13 +430,13 @@ return array(
'Ramsey\\Collection\\CollectionInterface' => $vendorDir . '/ramsey/collection/src/CollectionInterface.php',
'Ramsey\\Collection\\DoubleEndedQueue' => $vendorDir . '/ramsey/collection/src/DoubleEndedQueue.php',
'Ramsey\\Collection\\DoubleEndedQueueInterface' => $vendorDir . '/ramsey/collection/src/DoubleEndedQueueInterface.php',
+ 'Ramsey\\Collection\\Exception\\CollectionException' => $vendorDir . '/ramsey/collection/src/Exception/CollectionException.php',
'Ramsey\\Collection\\Exception\\CollectionMismatchException' => $vendorDir . '/ramsey/collection/src/Exception/CollectionMismatchException.php',
'Ramsey\\Collection\\Exception\\InvalidArgumentException' => $vendorDir . '/ramsey/collection/src/Exception/InvalidArgumentException.php',
- 'Ramsey\\Collection\\Exception\\InvalidSortOrderException' => $vendorDir . '/ramsey/collection/src/Exception/InvalidSortOrderException.php',
+ 'Ramsey\\Collection\\Exception\\InvalidPropertyOrMethod' => $vendorDir . '/ramsey/collection/src/Exception/InvalidPropertyOrMethod.php',
'Ramsey\\Collection\\Exception\\NoSuchElementException' => $vendorDir . '/ramsey/collection/src/Exception/NoSuchElementException.php',
'Ramsey\\Collection\\Exception\\OutOfBoundsException' => $vendorDir . '/ramsey/collection/src/Exception/OutOfBoundsException.php',
'Ramsey\\Collection\\Exception\\UnsupportedOperationException' => $vendorDir . '/ramsey/collection/src/Exception/UnsupportedOperationException.php',
- 'Ramsey\\Collection\\Exception\\ValueExtractionException' => $vendorDir . '/ramsey/collection/src/Exception/ValueExtractionException.php',
'Ramsey\\Collection\\GenericArray' => $vendorDir . '/ramsey/collection/src/GenericArray.php',
'Ramsey\\Collection\\Map\\AbstractMap' => $vendorDir . '/ramsey/collection/src/Map/AbstractMap.php',
'Ramsey\\Collection\\Map\\AbstractTypedMap' => $vendorDir . '/ramsey/collection/src/Map/AbstractTypedMap.php',
@@ -446,6 +448,7 @@ return array(
'Ramsey\\Collection\\Queue' => $vendorDir . '/ramsey/collection/src/Queue.php',
'Ramsey\\Collection\\QueueInterface' => $vendorDir . '/ramsey/collection/src/QueueInterface.php',
'Ramsey\\Collection\\Set' => $vendorDir . '/ramsey/collection/src/Set.php',
+ 'Ramsey\\Collection\\Sort' => $vendorDir . '/ramsey/collection/src/Sort.php',
'Ramsey\\Collection\\Tool\\TypeTrait' => $vendorDir . '/ramsey/collection/src/Tool/TypeTrait.php',
'Ramsey\\Collection\\Tool\\ValueExtractorTrait' => $vendorDir . '/ramsey/collection/src/Tool/ValueExtractorTrait.php',
'Ramsey\\Collection\\Tool\\ValueToStringTrait' => $vendorDir . '/ramsey/collection/src/Tool/ValueToStringTrait.php',
@@ -561,7 +564,6 @@ return array(
'Ramsey\\Uuid\\UuidInterface' => $vendorDir . '/ramsey/uuid/src/UuidInterface.php',
'Ramsey\\Uuid\\Validator\\GenericValidator' => $vendorDir . '/ramsey/uuid/src/Validator/GenericValidator.php',
'Ramsey\\Uuid\\Validator\\ValidatorInterface' => $vendorDir . '/ramsey/uuid/src/Validator/ValidatorInterface.php',
- 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php',
'Sabre\\CalDAV\\Backend\\AbstractBackend' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/AbstractBackend.php',
'Sabre\\CalDAV\\Backend\\BackendInterface' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/BackendInterface.php',
'Sabre\\CalDAV\\Backend\\NotificationSupport' => $vendorDir . '/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php',
@@ -1038,173 +1040,168 @@ return array(
'SimplePie_Source' => $vendorDir . '/simplepie/simplepie/library/SimplePie/Source.php',
'SimplePie_XML_Declaration_Parser' => $vendorDir . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php',
'SimplePie_gzdecode' => $vendorDir . '/simplepie/simplepie/library/SimplePie/gzdecode.php',
- 'Smarty' => $vendorDir . '/smarty/smarty/libs/Smarty.class.php',
- 'SmartyCompilerException' => $vendorDir . '/smarty/smarty/libs/sysplugins/smartycompilerexception.php',
- 'SmartyException' => $vendorDir . '/smarty/smarty/libs/sysplugins/smartyexception.php',
- 'Smarty_Autoloader' => $vendorDir . '/smarty/smarty/libs/Autoloader.php',
- 'Smarty_CacheResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_cacheresource.php',
- 'Smarty_CacheResource_Custom' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php',
- 'Smarty_CacheResource_KeyValueStore' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php',
- 'Smarty_Data' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_data.php',
- 'Smarty_Internal_Block' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_block.php',
- 'Smarty_Internal_CacheResource_File' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php',
- 'Smarty_Internal_CompileBase' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php',
- 'Smarty_Internal_Compile_Append' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php',
- 'Smarty_Internal_Compile_Assign' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php',
- 'Smarty_Internal_Compile_Block' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Block_Child' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php',
- 'Smarty_Internal_Compile_Block_Parent' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php',
- 'Smarty_Internal_Compile_Blockclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Break' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php',
- 'Smarty_Internal_Compile_Call' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php',
- 'Smarty_Internal_Compile_Capture' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_CaptureClose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_Child' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php',
- 'Smarty_Internal_Compile_Config_Load' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php',
- 'Smarty_Internal_Compile_Continue' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php',
- 'Smarty_Internal_Compile_Debug' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php',
- 'Smarty_Internal_Compile_Else' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Elseif' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Eval' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php',
- 'Smarty_Internal_Compile_Extends' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php',
- 'Smarty_Internal_Compile_For' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Forclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Foreach' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachelse' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Forelse' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_Functionclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_If' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Ifclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Include' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php',
- 'Smarty_Internal_Compile_Insert' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php',
- 'Smarty_Internal_Compile_Ldelim' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php',
- 'Smarty_Internal_Compile_Make_Nocache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php',
- 'Smarty_Internal_Compile_Nocache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Nocacheclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Parent' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php',
- 'Smarty_Internal_Compile_Private_Block_Plugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php',
- 'Smarty_Internal_Compile_Private_ForeachSection' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php',
- 'Smarty_Internal_Compile_Private_Function_Plugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php',
- 'Smarty_Internal_Compile_Private_Modifier' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php',
- 'Smarty_Internal_Compile_Private_Object_Block_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php',
- 'Smarty_Internal_Compile_Private_Object_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php',
- 'Smarty_Internal_Compile_Private_Print_Expression' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php',
- 'Smarty_Internal_Compile_Private_Registered_Block' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php',
- 'Smarty_Internal_Compile_Private_Registered_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php',
- 'Smarty_Internal_Compile_Private_Special_Variable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php',
- 'Smarty_Internal_Compile_Rdelim' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php',
- 'Smarty_Internal_Compile_Section' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionelse' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Setfilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Setfilterclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Shared_Inheritance' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php',
- 'Smarty_Internal_Compile_While' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Compile_Whileclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Config_File_Compiler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php',
- 'Smarty_Internal_Configfilelexer' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php',
- 'Smarty_Internal_Configfileparser' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'Smarty_Internal_Data' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_data.php',
- 'Smarty_Internal_Debug' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_debug.php',
- 'Smarty_Internal_ErrorHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php',
- 'Smarty_Internal_Extension_Handler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php',
- 'Smarty_Internal_Method_AddAutoloadFilters' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php',
- 'Smarty_Internal_Method_AddDefaultModifiers' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php',
- 'Smarty_Internal_Method_Append' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php',
- 'Smarty_Internal_Method_AppendByRef' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php',
- 'Smarty_Internal_Method_AssignByRef' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php',
- 'Smarty_Internal_Method_AssignGlobal' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php',
- 'Smarty_Internal_Method_ClearAllAssign' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php',
- 'Smarty_Internal_Method_ClearAllCache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php',
- 'Smarty_Internal_Method_ClearAssign' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php',
- 'Smarty_Internal_Method_ClearCache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php',
- 'Smarty_Internal_Method_ClearCompiledTemplate' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php',
- 'Smarty_Internal_Method_ClearConfig' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php',
- 'Smarty_Internal_Method_CompileAllConfig' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php',
- 'Smarty_Internal_Method_CompileAllTemplates' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php',
- 'Smarty_Internal_Method_ConfigLoad' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php',
- 'Smarty_Internal_Method_CreateData' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php',
- 'Smarty_Internal_Method_GetAutoloadFilters' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php',
- 'Smarty_Internal_Method_GetConfigVariable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php',
- 'Smarty_Internal_Method_GetConfigVars' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php',
- 'Smarty_Internal_Method_GetDebugTemplate' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php',
- 'Smarty_Internal_Method_GetDefaultModifiers' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php',
- 'Smarty_Internal_Method_GetGlobal' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php',
- 'Smarty_Internal_Method_GetRegisteredObject' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php',
- 'Smarty_Internal_Method_GetStreamVariable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php',
- 'Smarty_Internal_Method_GetTags' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php',
- 'Smarty_Internal_Method_GetTemplateVars' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php',
- 'Smarty_Internal_Method_Literals' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php',
- 'Smarty_Internal_Method_LoadFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php',
- 'Smarty_Internal_Method_LoadPlugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php',
- 'Smarty_Internal_Method_MustCompile' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php',
- 'Smarty_Internal_Method_RegisterCacheResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php',
- 'Smarty_Internal_Method_RegisterClass' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php',
- 'Smarty_Internal_Method_RegisterDefaultConfigHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php',
- 'Smarty_Internal_Method_RegisterDefaultPluginHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php',
- 'Smarty_Internal_Method_RegisterDefaultTemplateHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php',
- 'Smarty_Internal_Method_RegisterFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php',
- 'Smarty_Internal_Method_RegisterObject' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php',
- 'Smarty_Internal_Method_RegisterPlugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php',
- 'Smarty_Internal_Method_RegisterResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php',
- 'Smarty_Internal_Method_SetAutoloadFilters' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php',
- 'Smarty_Internal_Method_SetDebugTemplate' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php',
- 'Smarty_Internal_Method_SetDefaultModifiers' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php',
- 'Smarty_Internal_Method_UnloadFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php',
- 'Smarty_Internal_Method_UnregisterCacheResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php',
- 'Smarty_Internal_Method_UnregisterFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php',
- 'Smarty_Internal_Method_UnregisterObject' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php',
- 'Smarty_Internal_Method_UnregisterPlugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php',
- 'Smarty_Internal_Method_UnregisterResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php',
- 'Smarty_Internal_Nocache_Insert' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php',
- 'Smarty_Internal_ParseTree' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php',
- 'Smarty_Internal_ParseTree_Code' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php',
- 'Smarty_Internal_ParseTree_Dq' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php',
- 'Smarty_Internal_ParseTree_DqContent' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php',
- 'Smarty_Internal_ParseTree_Tag' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php',
- 'Smarty_Internal_ParseTree_Template' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php',
- 'Smarty_Internal_ParseTree_Text' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php',
- 'Smarty_Internal_Resource_Eval' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php',
- 'Smarty_Internal_Resource_Extends' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php',
- 'Smarty_Internal_Resource_File' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php',
- 'Smarty_Internal_Resource_Php' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php',
- 'Smarty_Internal_Resource_Stream' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php',
- 'Smarty_Internal_Resource_String' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php',
- 'Smarty_Internal_Runtime_CacheModify' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php',
- 'Smarty_Internal_Runtime_CacheResourceFile' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php',
- 'Smarty_Internal_Runtime_Capture' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php',
- 'Smarty_Internal_Runtime_CodeFrame' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php',
- 'Smarty_Internal_Runtime_FilterHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php',
- 'Smarty_Internal_Runtime_Foreach' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php',
- 'Smarty_Internal_Runtime_GetIncludePath' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php',
- 'Smarty_Internal_Runtime_Inheritance' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php',
- 'Smarty_Internal_Runtime_Make_Nocache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php',
- 'Smarty_Internal_Runtime_TplFunction' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php',
- 'Smarty_Internal_Runtime_UpdateCache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php',
- 'Smarty_Internal_Runtime_UpdateScope' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php',
- 'Smarty_Internal_Runtime_WriteFile' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php',
- 'Smarty_Internal_SmartyTemplateCompiler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php',
- 'Smarty_Internal_Template' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_template.php',
- 'Smarty_Internal_TemplateBase' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php',
- 'Smarty_Internal_TemplateCompilerBase' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php',
- 'Smarty_Internal_Templatelexer' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php',
- 'Smarty_Internal_Templateparser' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
- 'Smarty_Internal_TestInstall' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php',
- 'Smarty_Internal_Undefined' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php',
- 'Smarty_Resource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource.php',
- 'Smarty_Resource_Custom' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource_custom.php',
- 'Smarty_Resource_Recompiled' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php',
- 'Smarty_Resource_Uncompiled' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php',
- 'Smarty_Security' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_security.php',
- 'Smarty_Template_Cached' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_cached.php',
- 'Smarty_Template_Compiled' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_compiled.php',
- 'Smarty_Template_Config' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_config.php',
- 'Smarty_Template_Resource_Base' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php',
- 'Smarty_Template_Source' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_source.php',
- 'Smarty_Undefined_Variable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php',
- 'Smarty_Variable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_variable.php',
+ 'Smarty\\BlockHandler\\Base' => $vendorDir . '/smarty/smarty/src/BlockHandler/Base.php',
+ 'Smarty\\BlockHandler\\BlockHandlerInterface' => $vendorDir . '/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php',
+ 'Smarty\\BlockHandler\\BlockPluginWrapper' => $vendorDir . '/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php',
+ 'Smarty\\BlockHandler\\TextFormat' => $vendorDir . '/smarty/smarty/src/BlockHandler/TextFormat.php',
+ 'Smarty\\Cacheresource\\Base' => $vendorDir . '/smarty/smarty/src/Cacheresource/Base.php',
+ 'Smarty\\Cacheresource\\Custom' => $vendorDir . '/smarty/smarty/src/Cacheresource/Custom.php',
+ 'Smarty\\Cacheresource\\File' => $vendorDir . '/smarty/smarty/src/Cacheresource/File.php',
+ 'Smarty\\Cacheresource\\KeyValueStore' => $vendorDir . '/smarty/smarty/src/Cacheresource/KeyValueStore.php',
+ 'Smarty\\Compile\\Base' => $vendorDir . '/smarty/smarty/src/Compile/Base.php',
+ 'Smarty\\Compile\\BlockCompiler' => $vendorDir . '/smarty/smarty/src/Compile/BlockCompiler.php',
+ 'Smarty\\Compile\\CompilerInterface' => $vendorDir . '/smarty/smarty/src/Compile/CompilerInterface.php',
+ 'Smarty\\Compile\\DefaultHandlerBlockCompiler' => $vendorDir . '/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php',
+ 'Smarty\\Compile\\DefaultHandlerFunctionCallCompiler' => $vendorDir . '/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php',
+ 'Smarty\\Compile\\FunctionCallCompiler' => $vendorDir . '/smarty/smarty/src/Compile/FunctionCallCompiler.php',
+ 'Smarty\\Compile\\ModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/ModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\BCPluginWrapper' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Modifier\\Base' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/Base.php',
+ 'Smarty\\Compile\\Modifier\\CatModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountCharactersModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountParagraphsModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountSentencesModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountWordsModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\DefaultModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EmptyModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EscapeModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\FromCharsetModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IndentModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IsArrayModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IssetModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\JsonEncodeModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\LowerModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ModifierCompilerInterface' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php',
+ 'Smarty\\Compile\\Modifier\\Nl2brModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\NoPrintModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RawModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RoundModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrRepeatModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StringFormatModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripTagsModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrlenModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\SubstrModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ToCharsetModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UnescapeModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UpperModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\WordWrapModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodBlockCompiler' => $vendorDir . '/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodCallCompiler' => $vendorDir . '/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php',
+ 'Smarty\\Compile\\PrintExpressionCompiler' => $vendorDir . '/smarty/smarty/src/Compile/PrintExpressionCompiler.php',
+ 'Smarty\\Compile\\SpecialVariableCompiler' => $vendorDir . '/smarty/smarty/src/Compile/SpecialVariableCompiler.php',
+ 'Smarty\\Compile\\Tag\\Append' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Append.php',
+ 'Smarty\\Compile\\Tag\\Assign' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Assign.php',
+ 'Smarty\\Compile\\Tag\\BCPluginWrapper' => $vendorDir . '/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Tag\\Block' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Block.php',
+ 'Smarty\\Compile\\Tag\\BlockClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/BlockClose.php',
+ 'Smarty\\Compile\\Tag\\BreakTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/BreakTag.php',
+ 'Smarty\\Compile\\Tag\\Call' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Call.php',
+ 'Smarty\\Compile\\Tag\\Capture' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Capture.php',
+ 'Smarty\\Compile\\Tag\\CaptureClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/CaptureClose.php',
+ 'Smarty\\Compile\\Tag\\ConfigLoad' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ConfigLoad.php',
+ 'Smarty\\Compile\\Tag\\ContinueTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ContinueTag.php',
+ 'Smarty\\Compile\\Tag\\Debug' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Debug.php',
+ 'Smarty\\Compile\\Tag\\ElseIfTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ElseIfTag.php',
+ 'Smarty\\Compile\\Tag\\ElseTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ElseTag.php',
+ 'Smarty\\Compile\\Tag\\EvalTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/EvalTag.php',
+ 'Smarty\\Compile\\Tag\\ExtendsTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ExtendsTag.php',
+ 'Smarty\\Compile\\Tag\\ForClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForClose.php',
+ 'Smarty\\Compile\\Tag\\ForElse' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForElse.php',
+ 'Smarty\\Compile\\Tag\\ForTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForTag.php',
+ 'Smarty\\Compile\\Tag\\ForeachClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachClose.php',
+ 'Smarty\\Compile\\Tag\\ForeachElse' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachElse.php',
+ 'Smarty\\Compile\\Tag\\ForeachSection' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachSection.php',
+ 'Smarty\\Compile\\Tag\\ForeachTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachTag.php',
+ 'Smarty\\Compile\\Tag\\FunctionClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/FunctionClose.php',
+ 'Smarty\\Compile\\Tag\\FunctionTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/FunctionTag.php',
+ 'Smarty\\Compile\\Tag\\IfClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/IfClose.php',
+ 'Smarty\\Compile\\Tag\\IfTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/IfTag.php',
+ 'Smarty\\Compile\\Tag\\IncludeTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/IncludeTag.php',
+ 'Smarty\\Compile\\Tag\\Inheritance' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Inheritance.php',
+ 'Smarty\\Compile\\Tag\\Ldelim' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Ldelim.php',
+ 'Smarty\\Compile\\Tag\\Nocache' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Nocache.php',
+ 'Smarty\\Compile\\Tag\\NocacheClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/NocacheClose.php',
+ 'Smarty\\Compile\\Tag\\Rdelim' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Rdelim.php',
+ 'Smarty\\Compile\\Tag\\Section' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Section.php',
+ 'Smarty\\Compile\\Tag\\SectionClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/SectionClose.php',
+ 'Smarty\\Compile\\Tag\\SectionElse' => $vendorDir . '/smarty/smarty/src/Compile/Tag/SectionElse.php',
+ 'Smarty\\Compile\\Tag\\Setfilter' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Setfilter.php',
+ 'Smarty\\Compile\\Tag\\SetfilterClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/SetfilterClose.php',
+ 'Smarty\\Compile\\Tag\\WhileClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/WhileClose.php',
+ 'Smarty\\Compile\\Tag\\WhileTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/WhileTag.php',
+ 'Smarty\\CompilerException' => $vendorDir . '/smarty/smarty/src/CompilerException.php',
+ 'Smarty\\Compiler\\BaseCompiler' => $vendorDir . '/smarty/smarty/src/Compiler/BaseCompiler.php',
+ 'Smarty\\Compiler\\CodeFrame' => $vendorDir . '/smarty/smarty/src/Compiler/CodeFrame.php',
+ 'Smarty\\Compiler\\Configfile' => $vendorDir . '/smarty/smarty/src/Compiler/Configfile.php',
+ 'Smarty\\Compiler\\Template' => $vendorDir . '/smarty/smarty/src/Compiler/Template.php',
+ 'Smarty\\Data' => $vendorDir . '/smarty/smarty/src/Data.php',
+ 'Smarty\\Debug' => $vendorDir . '/smarty/smarty/src/Debug.php',
+ 'Smarty\\ErrorHandler' => $vendorDir . '/smarty/smarty/src/ErrorHandler.php',
+ 'Smarty\\Exception' => $vendorDir . '/smarty/smarty/src/Exception.php',
+ 'Smarty\\Extension\\BCPluginsAdapter' => $vendorDir . '/smarty/smarty/src/Extension/BCPluginsAdapter.php',
+ 'Smarty\\Extension\\Base' => $vendorDir . '/smarty/smarty/src/Extension/Base.php',
+ 'Smarty\\Extension\\CallbackWrapper' => $vendorDir . '/smarty/smarty/src/Extension/CallbackWrapper.php',
+ 'Smarty\\Extension\\CoreExtension' => $vendorDir . '/smarty/smarty/src/Extension/CoreExtension.php',
+ 'Smarty\\Extension\\DefaultExtension' => $vendorDir . '/smarty/smarty/src/Extension/DefaultExtension.php',
+ 'Smarty\\Extension\\ExtensionInterface' => $vendorDir . '/smarty/smarty/src/Extension/ExtensionInterface.php',
+ 'Smarty\\Filter\\FilterInterface' => $vendorDir . '/smarty/smarty/src/Filter/FilterInterface.php',
+ 'Smarty\\Filter\\FilterPluginWrapper' => $vendorDir . '/smarty/smarty/src/Filter/FilterPluginWrapper.php',
+ 'Smarty\\Filter\\Output\\TrimWhitespace' => $vendorDir . '/smarty/smarty/src/Filter/Output/TrimWhitespace.php',
+ 'Smarty\\FunctionHandler\\BCPluginWrapper' => $vendorDir . '/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php',
+ 'Smarty\\FunctionHandler\\Base' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Base.php',
+ 'Smarty\\FunctionHandler\\Count' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Count.php',
+ 'Smarty\\FunctionHandler\\Counter' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Counter.php',
+ 'Smarty\\FunctionHandler\\Cycle' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Cycle.php',
+ 'Smarty\\FunctionHandler\\Fetch' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Fetch.php',
+ 'Smarty\\FunctionHandler\\FunctionHandlerInterface' => $vendorDir . '/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php',
+ 'Smarty\\FunctionHandler\\HtmlBase' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlBase.php',
+ 'Smarty\\FunctionHandler\\HtmlCheckboxes' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php',
+ 'Smarty\\FunctionHandler\\HtmlImage' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlImage.php',
+ 'Smarty\\FunctionHandler\\HtmlOptions' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlOptions.php',
+ 'Smarty\\FunctionHandler\\HtmlRadios' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlRadios.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectDate' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectTime' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php',
+ 'Smarty\\FunctionHandler\\HtmlTable' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlTable.php',
+ 'Smarty\\FunctionHandler\\Mailto' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Mailto.php',
+ 'Smarty\\FunctionHandler\\Math' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Math.php',
+ 'Smarty\\Lexer\\ConfigfileLexer' => $vendorDir . '/smarty/smarty/src/Lexer/ConfigfileLexer.php',
+ 'Smarty\\Lexer\\TemplateLexer' => $vendorDir . '/smarty/smarty/src/Lexer/TemplateLexer.php',
+ 'Smarty\\ParseTree\\Base' => $vendorDir . '/smarty/smarty/src/ParseTree/Base.php',
+ 'Smarty\\ParseTree\\Code' => $vendorDir . '/smarty/smarty/src/ParseTree/Code.php',
+ 'Smarty\\ParseTree\\Dq' => $vendorDir . '/smarty/smarty/src/ParseTree/Dq.php',
+ 'Smarty\\ParseTree\\DqContent' => $vendorDir . '/smarty/smarty/src/ParseTree/DqContent.php',
+ 'Smarty\\ParseTree\\Tag' => $vendorDir . '/smarty/smarty/src/ParseTree/Tag.php',
+ 'Smarty\\ParseTree\\Template' => $vendorDir . '/smarty/smarty/src/ParseTree/Template.php',
+ 'Smarty\\ParseTree\\Text' => $vendorDir . '/smarty/smarty/src/ParseTree/Text.php',
+ 'Smarty\\Parser\\ConfigfileParser' => $vendorDir . '/smarty/smarty/src/Parser/ConfigfileParser.php',
+ 'Smarty\\Parser\\TemplateParser' => $vendorDir . '/smarty/smarty/src/Parser/TemplateParser.php',
+ 'Smarty\\Resource\\BasePlugin' => $vendorDir . '/smarty/smarty/src/Resource/BasePlugin.php',
+ 'Smarty\\Resource\\CustomPlugin' => $vendorDir . '/smarty/smarty/src/Resource/CustomPlugin.php',
+ 'Smarty\\Resource\\ExtendsPlugin' => $vendorDir . '/smarty/smarty/src/Resource/ExtendsPlugin.php',
+ 'Smarty\\Resource\\FilePlugin' => $vendorDir . '/smarty/smarty/src/Resource/FilePlugin.php',
+ 'Smarty\\Resource\\RecompiledPlugin' => $vendorDir . '/smarty/smarty/src/Resource/RecompiledPlugin.php',
+ 'Smarty\\Resource\\StreamPlugin' => $vendorDir . '/smarty/smarty/src/Resource/StreamPlugin.php',
+ 'Smarty\\Resource\\StringEval' => $vendorDir . '/smarty/smarty/src/Resource/StringEval.php',
+ 'Smarty\\Resource\\StringPlugin' => $vendorDir . '/smarty/smarty/src/Resource/StringPlugin.php',
+ 'Smarty\\Runtime\\Block' => $vendorDir . '/smarty/smarty/src/Runtime/Block.php',
+ 'Smarty\\Runtime\\CaptureRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/CaptureRuntime.php',
+ 'Smarty\\Runtime\\DefaultPluginHandlerRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php',
+ 'Smarty\\Runtime\\ForeachRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/ForeachRuntime.php',
+ 'Smarty\\Runtime\\InheritanceRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/InheritanceRuntime.php',
+ 'Smarty\\Runtime\\TplFunctionRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/TplFunctionRuntime.php',
+ 'Smarty\\Security' => $vendorDir . '/smarty/smarty/src/Security.php',
+ 'Smarty\\Smarty' => $vendorDir . '/smarty/smarty/src/Smarty.php',
+ 'Smarty\\Template' => $vendorDir . '/smarty/smarty/src/Template.php',
+ 'Smarty\\TemplateBase' => $vendorDir . '/smarty/smarty/src/TemplateBase.php',
+ 'Smarty\\Template\\Cached' => $vendorDir . '/smarty/smarty/src/Template/Cached.php',
+ 'Smarty\\Template\\Compiled' => $vendorDir . '/smarty/smarty/src/Template/Compiled.php',
+ 'Smarty\\Template\\Config' => $vendorDir . '/smarty/smarty/src/Template/Config.php',
+ 'Smarty\\Template\\GeneratedPhpFile' => $vendorDir . '/smarty/smarty/src/Template/GeneratedPhpFile.php',
+ 'Smarty\\Template\\Source' => $vendorDir . '/smarty/smarty/src/Template/Source.php',
+ 'Smarty\\TestInstall' => $vendorDir . '/smarty/smarty/src/TestInstall.php',
+ 'Smarty\\UndefinedVariable' => $vendorDir . '/smarty/smarty/src/UndefinedVariable.php',
+ 'Smarty\\Variable' => $vendorDir . '/smarty/smarty/src/Variable.php',
'StephenHill\\BCMathService' => $vendorDir . '/stephenhill/base58/src/BCMathService.php',
'StephenHill\\Base58' => $vendorDir . '/stephenhill/base58/src/Base58.php',
'StephenHill\\Benchmarks\\Base16Event' => $vendorDir . '/stephenhill/base58/benchmarks/Base16Event.php',
@@ -1213,9 +1210,7 @@ return array(
'StephenHill\\Benchmarks\\Base64Event' => $vendorDir . '/stephenhill/base58/benchmarks/Base64Event.php',
'StephenHill\\GMPService' => $vendorDir . '/stephenhill/base58/src/GMPService.php',
'StephenHill\\ServiceInterface' => $vendorDir . '/stephenhill/base58/src/ServiceInterface.php',
- 'Symfony\\Polyfill\\Php81\\Php81' => $vendorDir . '/symfony/polyfill-php81/Php81.php',
- 'TPC_yyStackEntry' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'TP_yyStackEntry' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
+ 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
'Text_LanguageDetect' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect.php',
'Text_LanguageDetect_Exception' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php',
'Text_LanguageDetect_ISO639' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php',
@@ -1226,6 +1221,24 @@ return array(
'Zotlabs\\Access\\PermissionLimits' => $baseDir . '/Zotlabs/Access/PermissionLimits.php',
'Zotlabs\\Access\\PermissionRoles' => $baseDir . '/Zotlabs/Access/PermissionRoles.php',
'Zotlabs\\Access\\Permissions' => $baseDir . '/Zotlabs/Access/Permissions.php',
+ 'Zotlabs\\ActivityStreams\\ASObject' => $baseDir . '/Zotlabs/ActivityStreams/ASObject.php',
+ 'Zotlabs\\ActivityStreams\\Activity' => $baseDir . '/Zotlabs/ActivityStreams/Activity.php',
+ 'Zotlabs\\ActivityStreams\\Actor' => $baseDir . '/Zotlabs/ActivityStreams/Actor.php',
+ 'Zotlabs\\ActivityStreams\\AssertionMethod' => $baseDir . '/Zotlabs/ActivityStreams/AssertionMethod.php',
+ 'Zotlabs\\ActivityStreams\\Collection' => $baseDir . '/Zotlabs/ActivityStreams/Collection.php',
+ 'Zotlabs\\ActivityStreams\\CollectionPage' => $baseDir . '/Zotlabs/ActivityStreams/CollectionPage.php',
+ 'Zotlabs\\ActivityStreams\\IntransitiveActivity' => $baseDir . '/Zotlabs/ActivityStreams/IntransitiveActivity.php',
+ 'Zotlabs\\ActivityStreams\\Link' => $baseDir . '/Zotlabs/ActivityStreams/Link.php',
+ 'Zotlabs\\ActivityStreams\\OrderedCollection' => $baseDir . '/Zotlabs/ActivityStreams/OrderedCollection.php',
+ 'Zotlabs\\ActivityStreams\\OrderedCollectionPage' => $baseDir . '/Zotlabs/ActivityStreams/OrderedCollectionPage.php',
+ 'Zotlabs\\ActivityStreams\\Place' => $baseDir . '/Zotlabs/ActivityStreams/Place.php',
+ 'Zotlabs\\ActivityStreams\\Profile' => $baseDir . '/Zotlabs/ActivityStreams/Profile.php',
+ 'Zotlabs\\ActivityStreams\\PublicKey' => $baseDir . '/Zotlabs/ActivityStreams/PublicKey.php',
+ 'Zotlabs\\ActivityStreams\\Question' => $baseDir . '/Zotlabs/ActivityStreams/Question.php',
+ 'Zotlabs\\ActivityStreams\\Relationship' => $baseDir . '/Zotlabs/ActivityStreams/Relationship.php',
+ 'Zotlabs\\ActivityStreams\\Signature' => $baseDir . '/Zotlabs/ActivityStreams/Signature.php',
+ 'Zotlabs\\ActivityStreams\\Tombstone' => $baseDir . '/Zotlabs/ActivityStreams/Tombstone.php',
+ 'Zotlabs\\ActivityStreams\\UnhandledElementException' => $baseDir . '/Zotlabs/ActivityStreams/UnhandledElementException.php',
'Zotlabs\\Daemon\\Addon' => $baseDir . '/Zotlabs/Daemon/Addon.php',
'Zotlabs\\Daemon\\Cache_embeds' => $baseDir . '/Zotlabs/Daemon/Cache_embeds.php',
'Zotlabs\\Daemon\\Cache_query' => $baseDir . '/Zotlabs/Daemon/Cache_query.php',
@@ -1259,6 +1272,9 @@ return array(
'Zotlabs\\Daemon\\Thumbnail' => $baseDir . '/Zotlabs/Daemon/Thumbnail.php',
'Zotlabs\\Daemon\\Xchan_photo' => $baseDir . '/Zotlabs/Daemon/Xchan_photo.php',
'Zotlabs\\Daemon\\Zotconvo' => $baseDir . '/Zotlabs/Daemon/Zotconvo.php',
+ 'Zotlabs\\Entity\\Account' => $baseDir . '/Zotlabs/Entity/Account.php',
+ 'Zotlabs\\Entity\\Channel' => $baseDir . '/Zotlabs/Entity/Channel.php',
+ 'Zotlabs\\Entity\\Item' => $baseDir . '/Zotlabs/Entity/Item.php',
'Zotlabs\\Extend\\Hook' => $baseDir . '/Zotlabs/Extend/Hook.php',
'Zotlabs\\Extend\\Route' => $baseDir . '/Zotlabs/Extend/Route.php',
'Zotlabs\\Extend\\Widget' => $baseDir . '/Zotlabs/Extend/Widget.php',
@@ -1275,6 +1291,7 @@ return array(
'Zotlabs\\Lib\\ActivityStreams' => $baseDir . '/Zotlabs/Lib/ActivityStreams.php',
'Zotlabs\\Lib\\Api_router' => $baseDir . '/Zotlabs/Lib/Api_router.php',
'Zotlabs\\Lib\\Apps' => $baseDir . '/Zotlabs/Lib/Apps.php',
+ 'Zotlabs\\Lib\\BaseObject' => $baseDir . '/Zotlabs/Lib/BaseObject.php',
'Zotlabs\\Lib\\Cache' => $baseDir . '/Zotlabs/Lib/Cache.php',
'Zotlabs\\Lib\\Chatroom' => $baseDir . '/Zotlabs/Lib/Chatroom.php',
'Zotlabs\\Lib\\Config' => $baseDir . '/Zotlabs/Lib/Config.php',
@@ -1294,6 +1311,7 @@ return array(
'Zotlabs\\Lib\\Libsync' => $baseDir . '/Zotlabs/Lib/Libsync.php',
'Zotlabs\\Lib\\Libzot' => $baseDir . '/Zotlabs/Lib/Libzot.php',
'Zotlabs\\Lib\\Libzotdir' => $baseDir . '/Zotlabs/Lib/Libzotdir.php',
+ 'Zotlabs\\Lib\\Mailer' => $baseDir . '/Zotlabs/Lib/Mailer.php',
'Zotlabs\\Lib\\MarkdownSoap' => $baseDir . '/Zotlabs/Lib/MarkdownSoap.php',
'Zotlabs\\Lib\\MessageFilter' => $baseDir . '/Zotlabs/Lib/MessageFilter.php',
'Zotlabs\\Lib\\Multibase' => $baseDir . '/Zotlabs/Lib/Multibase.php',
@@ -1304,7 +1322,6 @@ return array(
'Zotlabs\\Lib\\QueueWorker' => $baseDir . '/Zotlabs/Lib/QueueWorker.php',
'Zotlabs\\Lib\\SConfig' => $baseDir . '/Zotlabs/Lib/SConfig.php',
'Zotlabs\\Lib\\Share' => $baseDir . '/Zotlabs/Lib/Share.php',
- 'Zotlabs\\Lib\\SuperCurl' => $baseDir . '/Zotlabs/Lib/SuperCurl.php',
'Zotlabs\\Lib\\SvgSanitizer' => $baseDir . '/Zotlabs/Lib/SvgSanitizer.php',
'Zotlabs\\Lib\\System' => $baseDir . '/Zotlabs/Lib/System.php',
'Zotlabs\\Lib\\Techlevels' => $baseDir . '/Zotlabs/Lib/Techlevels.php',
@@ -1352,12 +1369,14 @@ return array(
'Zotlabs\\Module\\Branchtopic' => $baseDir . '/Zotlabs/Module/Branchtopic.php',
'Zotlabs\\Module\\Cal' => $baseDir . '/Zotlabs/Module/Cal.php',
'Zotlabs\\Module\\Cdav' => $baseDir . '/Zotlabs/Module/Cdav.php',
+ 'Zotlabs\\Module\\Ceditor' => $baseDir . '/Zotlabs/Module/Ceditor.php',
'Zotlabs\\Module\\Changeaddr' => $baseDir . '/Zotlabs/Module/Changeaddr.php',
'Zotlabs\\Module\\Channel' => $baseDir . '/Zotlabs/Module/Channel.php',
'Zotlabs\\Module\\Channel_calendar' => $baseDir . '/Zotlabs/Module/Channel_calendar.php',
'Zotlabs\\Module\\Chanview' => $baseDir . '/Zotlabs/Module/Chanview.php',
'Zotlabs\\Module\\Chat' => $baseDir . '/Zotlabs/Module/Chat.php',
'Zotlabs\\Module\\Chatsvc' => $baseDir . '/Zotlabs/Module/Chatsvc.php',
+ 'Zotlabs\\Module\\Cleditor' => $baseDir . '/Zotlabs/Module/Cleditor.php',
'Zotlabs\\Module\\Cloud' => $baseDir . '/Zotlabs/Module/Cloud.php',
'Zotlabs\\Module\\Cloud_tiles' => $baseDir . '/Zotlabs/Module/Cloud_tiles.php',
'Zotlabs\\Module\\Common' => $baseDir . '/Zotlabs/Module/Common.php',
@@ -1551,7 +1570,6 @@ return array(
'Zotlabs\\Storage\\CalDAVClient' => $baseDir . '/Zotlabs/Storage/CalDAVClient.php',
'Zotlabs\\Storage\\Directory' => $baseDir . '/Zotlabs/Storage/Directory.php',
'Zotlabs\\Storage\\File' => $baseDir . '/Zotlabs/Storage/File.php',
- 'Zotlabs\\Storage\\GitRepo' => $baseDir . '/Zotlabs/Storage/GitRepo.php',
'Zotlabs\\Storage\\ZotOauth2Pdo' => $baseDir . '/Zotlabs/Storage/ZotOauth2Pdo.php',
'Zotlabs\\Text\\Tagadelic' => $baseDir . '/Zotlabs/Text/Tagadelic.php',
'Zotlabs\\Thumbs\\Epubthumb' => $baseDir . '/Zotlabs/Thumbs/Epubthumb.php',
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
index 65808f1eb..47948e784 100644
--- a/vendor/composer/autoload_files.php
+++ b/vendor/composer/autoload_files.php
@@ -12,9 +12,11 @@ return array(
'a1cce3d26cc15c00fcd0b3354bd72c88' => $vendorDir . '/sabre/event/lib/Promise/functions.php',
'3569eecfeed3bcf0bad3c998a494ecb8' => $vendorDir . '/sabre/xml/lib/Deserializer/functions.php',
'93aa591bc4ca510c520999e34229ee79' => $vendorDir . '/sabre/xml/lib/Serializer/functions.php',
- '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php',
'ebdb698ed4152ae445614b69b5e4bb6a' => $vendorDir . '/sabre/http/lib/functions.php',
+ '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php',
+ 'c15d4a1253e33e055d05e547c61dcb71' => $vendorDir . '/smarty/smarty/src/functions.php',
);
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index c2a27512d..f98abef55 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -11,9 +11,10 @@ return array(
'chillerlan\\Settings\\' => array($vendorDir . '/chillerlan/php-settings-container/src'),
'chillerlan\\QRCode\\' => array($vendorDir . '/chillerlan/php-qrcode/src'),
'Zotlabs\\' => array($baseDir . '/Zotlabs'),
- 'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'),
+ 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
'StephenHill\\Benchmarks\\' => array($vendorDir . '/stephenhill/base58/benchmarks'),
'StephenHill\\' => array($vendorDir . '/stephenhill/base58/src'),
+ 'Smarty\\' => array($vendorDir . '/smarty/smarty/src'),
'SimplePie\\' => array($vendorDir . '/simplepie/simplepie/src'),
'ScssPhp\\ScssPhp\\' => array($vendorDir . '/scssphp/scssphp/src'),
'Sabre\\Xml\\' => array($vendorDir . '/sabre/xml/lib'),
@@ -25,6 +26,7 @@ return array(
'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'),
'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
+ 'Psr\\Clock\\' => array($vendorDir . '/psr/clock/src'),
'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
'OTPHP\\' => array($vendorDir . '/spomky-labs/otphp/src'),
'Mmccook\\JsonCanonicalizator\\' => array($vendorDir . '/mmccook/php-json-canonicalization-scheme/src'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 1b958f6a8..dc8c50394 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -13,11 +13,13 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'a1cce3d26cc15c00fcd0b3354bd72c88' => __DIR__ . '/..' . '/sabre/event/lib/Promise/functions.php',
'3569eecfeed3bcf0bad3c998a494ecb8' => __DIR__ . '/..' . '/sabre/xml/lib/Deserializer/functions.php',
'93aa591bc4ca510c520999e34229ee79' => __DIR__ . '/..' . '/sabre/xml/lib/Serializer/functions.php',
- '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php',
'ebdb698ed4152ae445614b69b5e4bb6a' => __DIR__ . '/..' . '/sabre/http/lib/functions.php',
+ '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
'e39a8b23c42d4e1452234d762b03835a' => __DIR__ . '/..' . '/ramsey/uuid/src/functions.php',
+ 'c15d4a1253e33e055d05e547c61dcb71' => __DIR__ . '/..' . '/smarty/smarty/src/functions.php',
);
public static $prefixLengthsPsr4 = array (
@@ -40,9 +42,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
),
'S' =>
array (
- 'Symfony\\Polyfill\\Php81\\' => 23,
+ 'Symfony\\Polyfill\\Mbstring\\' => 26,
'StephenHill\\Benchmarks\\' => 23,
'StephenHill\\' => 12,
+ 'Smarty\\' => 7,
'SimplePie\\' => 10,
'ScssPhp\\ScssPhp\\' => 16,
'Sabre\\Xml\\' => 10,
@@ -60,6 +63,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'P' =>
array (
'Psr\\Log\\' => 8,
+ 'Psr\\Clock\\' => 10,
'ParagonIE\\ConstantTime\\' => 23,
),
'O' =>
@@ -116,9 +120,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
array (
0 => __DIR__ . '/../..' . '/Zotlabs',
),
- 'Symfony\\Polyfill\\Php81\\' =>
+ 'Symfony\\Polyfill\\Mbstring\\' =>
array (
- 0 => __DIR__ . '/..' . '/symfony/polyfill-php81',
+ 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
),
'StephenHill\\Benchmarks\\' =>
array (
@@ -128,6 +132,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
array (
0 => __DIR__ . '/..' . '/stephenhill/base58/src',
),
+ 'Smarty\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/smarty/smarty/src',
+ ),
'SimplePie\\' =>
array (
0 => __DIR__ . '/..' . '/simplepie/simplepie/src',
@@ -172,6 +180,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
array (
0 => __DIR__ . '/..' . '/psr/log/src',
),
+ 'Psr\\Clock\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/psr/clock/src',
+ ),
'ParagonIE\\ConstantTime\\' =>
array (
0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src',
@@ -268,7 +280,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Brick\\Math\\Internal\\Calculator\\GmpCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/GmpCalculator.php',
'Brick\\Math\\Internal\\Calculator\\NativeCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/NativeCalculator.php',
'Brick\\Math\\RoundingMode' => __DIR__ . '/..' . '/brick/math/src/RoundingMode.php',
- 'CURLStringFile' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php',
'CommerceGuys\\Intl\\Calculator' => __DIR__ . '/..' . '/commerceguys/intl/src/Calculator.php',
'CommerceGuys\\Intl\\Currency\\Currency' => __DIR__ . '/..' . '/commerceguys/intl/src/Currency/Currency.php',
'CommerceGuys\\Intl\\Currency\\CurrencyRepository' => __DIR__ . '/..' . '/commerceguys/intl/src/Currency/CurrencyRepository.php',
@@ -314,6 +325,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'HTMLPurifier_AttrDef_CSS_Multiple' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Multiple.php',
'HTMLPurifier_AttrDef_CSS_Number' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Number.php',
'HTMLPurifier_AttrDef_CSS_Percentage' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Percentage.php',
+ 'HTMLPurifier_AttrDef_CSS_Ratio' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php',
'HTMLPurifier_AttrDef_CSS_TextDecoration' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php',
'HTMLPurifier_AttrDef_CSS_URI' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/URI.php',
'HTMLPurifier_AttrDef_Clone' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Clone.php',
@@ -642,6 +654,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'OTPHP\\FactoryInterface' => __DIR__ . '/..' . '/spomky-labs/otphp/src/FactoryInterface.php',
'OTPHP\\HOTP' => __DIR__ . '/..' . '/spomky-labs/otphp/src/HOTP.php',
'OTPHP\\HOTPInterface' => __DIR__ . '/..' . '/spomky-labs/otphp/src/HOTPInterface.php',
+ 'OTPHP\\InternalClock' => __DIR__ . '/..' . '/spomky-labs/otphp/src/InternalClock.php',
'OTPHP\\OTP' => __DIR__ . '/..' . '/spomky-labs/otphp/src/OTP.php',
'OTPHP\\OTPInterface' => __DIR__ . '/..' . '/spomky-labs/otphp/src/OTPInterface.php',
'OTPHP\\ParameterTrait' => __DIR__ . '/..' . '/spomky-labs/otphp/src/ParameterTrait.php',
@@ -659,6 +672,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'ParagonIE\\ConstantTime\\Encoding' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Encoding.php',
'ParagonIE\\ConstantTime\\Hex' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Hex.php',
'ParagonIE\\ConstantTime\\RFC4648' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/RFC4648.php',
+ 'Psr\\Clock\\ClockInterface' => __DIR__ . '/..' . '/psr/clock/src/ClockInterface.php',
'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/src/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/src/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/src/LogLevel.php',
@@ -675,13 +689,13 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Ramsey\\Collection\\CollectionInterface' => __DIR__ . '/..' . '/ramsey/collection/src/CollectionInterface.php',
'Ramsey\\Collection\\DoubleEndedQueue' => __DIR__ . '/..' . '/ramsey/collection/src/DoubleEndedQueue.php',
'Ramsey\\Collection\\DoubleEndedQueueInterface' => __DIR__ . '/..' . '/ramsey/collection/src/DoubleEndedQueueInterface.php',
+ 'Ramsey\\Collection\\Exception\\CollectionException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/CollectionException.php',
'Ramsey\\Collection\\Exception\\CollectionMismatchException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/CollectionMismatchException.php',
'Ramsey\\Collection\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/InvalidArgumentException.php',
- 'Ramsey\\Collection\\Exception\\InvalidSortOrderException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/InvalidSortOrderException.php',
+ 'Ramsey\\Collection\\Exception\\InvalidPropertyOrMethod' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/InvalidPropertyOrMethod.php',
'Ramsey\\Collection\\Exception\\NoSuchElementException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/NoSuchElementException.php',
'Ramsey\\Collection\\Exception\\OutOfBoundsException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/OutOfBoundsException.php',
'Ramsey\\Collection\\Exception\\UnsupportedOperationException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/UnsupportedOperationException.php',
- 'Ramsey\\Collection\\Exception\\ValueExtractionException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/ValueExtractionException.php',
'Ramsey\\Collection\\GenericArray' => __DIR__ . '/..' . '/ramsey/collection/src/GenericArray.php',
'Ramsey\\Collection\\Map\\AbstractMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AbstractMap.php',
'Ramsey\\Collection\\Map\\AbstractTypedMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AbstractTypedMap.php',
@@ -693,6 +707,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Ramsey\\Collection\\Queue' => __DIR__ . '/..' . '/ramsey/collection/src/Queue.php',
'Ramsey\\Collection\\QueueInterface' => __DIR__ . '/..' . '/ramsey/collection/src/QueueInterface.php',
'Ramsey\\Collection\\Set' => __DIR__ . '/..' . '/ramsey/collection/src/Set.php',
+ 'Ramsey\\Collection\\Sort' => __DIR__ . '/..' . '/ramsey/collection/src/Sort.php',
'Ramsey\\Collection\\Tool\\TypeTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/TypeTrait.php',
'Ramsey\\Collection\\Tool\\ValueExtractorTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/ValueExtractorTrait.php',
'Ramsey\\Collection\\Tool\\ValueToStringTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/ValueToStringTrait.php',
@@ -808,7 +823,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Ramsey\\Uuid\\UuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidInterface.php',
'Ramsey\\Uuid\\Validator\\GenericValidator' => __DIR__ . '/..' . '/ramsey/uuid/src/Validator/GenericValidator.php',
'Ramsey\\Uuid\\Validator\\ValidatorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Validator/ValidatorInterface.php',
- 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php',
'Sabre\\CalDAV\\Backend\\AbstractBackend' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/AbstractBackend.php',
'Sabre\\CalDAV\\Backend\\BackendInterface' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/BackendInterface.php',
'Sabre\\CalDAV\\Backend\\NotificationSupport' => __DIR__ . '/..' . '/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php',
@@ -1285,173 +1299,168 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'SimplePie_Source' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/Source.php',
'SimplePie_XML_Declaration_Parser' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php',
'SimplePie_gzdecode' => __DIR__ . '/..' . '/simplepie/simplepie/library/SimplePie/gzdecode.php',
- 'Smarty' => __DIR__ . '/..' . '/smarty/smarty/libs/Smarty.class.php',
- 'SmartyCompilerException' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smartycompilerexception.php',
- 'SmartyException' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smartyexception.php',
- 'Smarty_Autoloader' => __DIR__ . '/..' . '/smarty/smarty/libs/Autoloader.php',
- 'Smarty_CacheResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_cacheresource.php',
- 'Smarty_CacheResource_Custom' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php',
- 'Smarty_CacheResource_KeyValueStore' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php',
- 'Smarty_Data' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_data.php',
- 'Smarty_Internal_Block' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_block.php',
- 'Smarty_Internal_CacheResource_File' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php',
- 'Smarty_Internal_CompileBase' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php',
- 'Smarty_Internal_Compile_Append' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php',
- 'Smarty_Internal_Compile_Assign' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php',
- 'Smarty_Internal_Compile_Block' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Block_Child' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php',
- 'Smarty_Internal_Compile_Block_Parent' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php',
- 'Smarty_Internal_Compile_Blockclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Break' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php',
- 'Smarty_Internal_Compile_Call' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php',
- 'Smarty_Internal_Compile_Capture' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_CaptureClose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_Child' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php',
- 'Smarty_Internal_Compile_Config_Load' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php',
- 'Smarty_Internal_Compile_Continue' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php',
- 'Smarty_Internal_Compile_Debug' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php',
- 'Smarty_Internal_Compile_Else' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Elseif' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Eval' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php',
- 'Smarty_Internal_Compile_Extends' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php',
- 'Smarty_Internal_Compile_For' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Forclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Foreach' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachelse' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Forelse' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_Functionclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_If' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Ifclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Include' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php',
- 'Smarty_Internal_Compile_Insert' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php',
- 'Smarty_Internal_Compile_Ldelim' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php',
- 'Smarty_Internal_Compile_Make_Nocache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php',
- 'Smarty_Internal_Compile_Nocache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Nocacheclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Parent' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php',
- 'Smarty_Internal_Compile_Private_Block_Plugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php',
- 'Smarty_Internal_Compile_Private_ForeachSection' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php',
- 'Smarty_Internal_Compile_Private_Function_Plugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php',
- 'Smarty_Internal_Compile_Private_Modifier' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php',
- 'Smarty_Internal_Compile_Private_Object_Block_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php',
- 'Smarty_Internal_Compile_Private_Object_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php',
- 'Smarty_Internal_Compile_Private_Print_Expression' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php',
- 'Smarty_Internal_Compile_Private_Registered_Block' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php',
- 'Smarty_Internal_Compile_Private_Registered_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php',
- 'Smarty_Internal_Compile_Private_Special_Variable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php',
- 'Smarty_Internal_Compile_Rdelim' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php',
- 'Smarty_Internal_Compile_Section' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionelse' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Setfilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Setfilterclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Shared_Inheritance' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php',
- 'Smarty_Internal_Compile_While' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Compile_Whileclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Config_File_Compiler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php',
- 'Smarty_Internal_Configfilelexer' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php',
- 'Smarty_Internal_Configfileparser' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'Smarty_Internal_Data' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_data.php',
- 'Smarty_Internal_Debug' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_debug.php',
- 'Smarty_Internal_ErrorHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php',
- 'Smarty_Internal_Extension_Handler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php',
- 'Smarty_Internal_Method_AddAutoloadFilters' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php',
- 'Smarty_Internal_Method_AddDefaultModifiers' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php',
- 'Smarty_Internal_Method_Append' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php',
- 'Smarty_Internal_Method_AppendByRef' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php',
- 'Smarty_Internal_Method_AssignByRef' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php',
- 'Smarty_Internal_Method_AssignGlobal' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php',
- 'Smarty_Internal_Method_ClearAllAssign' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php',
- 'Smarty_Internal_Method_ClearAllCache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php',
- 'Smarty_Internal_Method_ClearAssign' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php',
- 'Smarty_Internal_Method_ClearCache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php',
- 'Smarty_Internal_Method_ClearCompiledTemplate' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php',
- 'Smarty_Internal_Method_ClearConfig' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php',
- 'Smarty_Internal_Method_CompileAllConfig' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php',
- 'Smarty_Internal_Method_CompileAllTemplates' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php',
- 'Smarty_Internal_Method_ConfigLoad' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php',
- 'Smarty_Internal_Method_CreateData' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php',
- 'Smarty_Internal_Method_GetAutoloadFilters' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php',
- 'Smarty_Internal_Method_GetConfigVariable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php',
- 'Smarty_Internal_Method_GetConfigVars' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php',
- 'Smarty_Internal_Method_GetDebugTemplate' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php',
- 'Smarty_Internal_Method_GetDefaultModifiers' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php',
- 'Smarty_Internal_Method_GetGlobal' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php',
- 'Smarty_Internal_Method_GetRegisteredObject' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php',
- 'Smarty_Internal_Method_GetStreamVariable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php',
- 'Smarty_Internal_Method_GetTags' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php',
- 'Smarty_Internal_Method_GetTemplateVars' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php',
- 'Smarty_Internal_Method_Literals' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php',
- 'Smarty_Internal_Method_LoadFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php',
- 'Smarty_Internal_Method_LoadPlugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php',
- 'Smarty_Internal_Method_MustCompile' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php',
- 'Smarty_Internal_Method_RegisterCacheResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php',
- 'Smarty_Internal_Method_RegisterClass' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php',
- 'Smarty_Internal_Method_RegisterDefaultConfigHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php',
- 'Smarty_Internal_Method_RegisterDefaultPluginHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php',
- 'Smarty_Internal_Method_RegisterDefaultTemplateHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php',
- 'Smarty_Internal_Method_RegisterFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php',
- 'Smarty_Internal_Method_RegisterObject' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php',
- 'Smarty_Internal_Method_RegisterPlugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php',
- 'Smarty_Internal_Method_RegisterResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php',
- 'Smarty_Internal_Method_SetAutoloadFilters' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php',
- 'Smarty_Internal_Method_SetDebugTemplate' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php',
- 'Smarty_Internal_Method_SetDefaultModifiers' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php',
- 'Smarty_Internal_Method_UnloadFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php',
- 'Smarty_Internal_Method_UnregisterCacheResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php',
- 'Smarty_Internal_Method_UnregisterFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php',
- 'Smarty_Internal_Method_UnregisterObject' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php',
- 'Smarty_Internal_Method_UnregisterPlugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php',
- 'Smarty_Internal_Method_UnregisterResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php',
- 'Smarty_Internal_Nocache_Insert' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php',
- 'Smarty_Internal_ParseTree' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php',
- 'Smarty_Internal_ParseTree_Code' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php',
- 'Smarty_Internal_ParseTree_Dq' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php',
- 'Smarty_Internal_ParseTree_DqContent' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php',
- 'Smarty_Internal_ParseTree_Tag' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php',
- 'Smarty_Internal_ParseTree_Template' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php',
- 'Smarty_Internal_ParseTree_Text' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php',
- 'Smarty_Internal_Resource_Eval' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php',
- 'Smarty_Internal_Resource_Extends' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php',
- 'Smarty_Internal_Resource_File' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php',
- 'Smarty_Internal_Resource_Php' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php',
- 'Smarty_Internal_Resource_Stream' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php',
- 'Smarty_Internal_Resource_String' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php',
- 'Smarty_Internal_Runtime_CacheModify' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php',
- 'Smarty_Internal_Runtime_CacheResourceFile' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php',
- 'Smarty_Internal_Runtime_Capture' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php',
- 'Smarty_Internal_Runtime_CodeFrame' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php',
- 'Smarty_Internal_Runtime_FilterHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php',
- 'Smarty_Internal_Runtime_Foreach' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php',
- 'Smarty_Internal_Runtime_GetIncludePath' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php',
- 'Smarty_Internal_Runtime_Inheritance' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php',
- 'Smarty_Internal_Runtime_Make_Nocache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php',
- 'Smarty_Internal_Runtime_TplFunction' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php',
- 'Smarty_Internal_Runtime_UpdateCache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php',
- 'Smarty_Internal_Runtime_UpdateScope' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php',
- 'Smarty_Internal_Runtime_WriteFile' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php',
- 'Smarty_Internal_SmartyTemplateCompiler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php',
- 'Smarty_Internal_Template' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_template.php',
- 'Smarty_Internal_TemplateBase' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php',
- 'Smarty_Internal_TemplateCompilerBase' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php',
- 'Smarty_Internal_Templatelexer' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php',
- 'Smarty_Internal_Templateparser' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
- 'Smarty_Internal_TestInstall' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php',
- 'Smarty_Internal_Undefined' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php',
- 'Smarty_Resource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource.php',
- 'Smarty_Resource_Custom' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource_custom.php',
- 'Smarty_Resource_Recompiled' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php',
- 'Smarty_Resource_Uncompiled' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php',
- 'Smarty_Security' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_security.php',
- 'Smarty_Template_Cached' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_cached.php',
- 'Smarty_Template_Compiled' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_compiled.php',
- 'Smarty_Template_Config' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_config.php',
- 'Smarty_Template_Resource_Base' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php',
- 'Smarty_Template_Source' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_source.php',
- 'Smarty_Undefined_Variable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php',
- 'Smarty_Variable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_variable.php',
+ 'Smarty\\BlockHandler\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/Base.php',
+ 'Smarty\\BlockHandler\\BlockHandlerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php',
+ 'Smarty\\BlockHandler\\BlockPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php',
+ 'Smarty\\BlockHandler\\TextFormat' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/TextFormat.php',
+ 'Smarty\\Cacheresource\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/Base.php',
+ 'Smarty\\Cacheresource\\Custom' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/Custom.php',
+ 'Smarty\\Cacheresource\\File' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/File.php',
+ 'Smarty\\Cacheresource\\KeyValueStore' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/KeyValueStore.php',
+ 'Smarty\\Compile\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Base.php',
+ 'Smarty\\Compile\\BlockCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/BlockCompiler.php',
+ 'Smarty\\Compile\\CompilerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/CompilerInterface.php',
+ 'Smarty\\Compile\\DefaultHandlerBlockCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php',
+ 'Smarty\\Compile\\DefaultHandlerFunctionCallCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php',
+ 'Smarty\\Compile\\FunctionCallCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/FunctionCallCompiler.php',
+ 'Smarty\\Compile\\ModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/ModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\BCPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Modifier\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/Base.php',
+ 'Smarty\\Compile\\Modifier\\CatModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountCharactersModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountParagraphsModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountSentencesModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountWordsModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\DefaultModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EmptyModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EscapeModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\FromCharsetModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IndentModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IsArrayModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IssetModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\JsonEncodeModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\LowerModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ModifierCompilerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php',
+ 'Smarty\\Compile\\Modifier\\Nl2brModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\NoPrintModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RawModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RoundModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrRepeatModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StringFormatModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripTagsModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrlenModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\SubstrModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ToCharsetModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UnescapeModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UpperModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\WordWrapModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodBlockCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodCallCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php',
+ 'Smarty\\Compile\\PrintExpressionCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/PrintExpressionCompiler.php',
+ 'Smarty\\Compile\\SpecialVariableCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/SpecialVariableCompiler.php',
+ 'Smarty\\Compile\\Tag\\Append' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Append.php',
+ 'Smarty\\Compile\\Tag\\Assign' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Assign.php',
+ 'Smarty\\Compile\\Tag\\BCPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Tag\\Block' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Block.php',
+ 'Smarty\\Compile\\Tag\\BlockClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/BlockClose.php',
+ 'Smarty\\Compile\\Tag\\BreakTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/BreakTag.php',
+ 'Smarty\\Compile\\Tag\\Call' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Call.php',
+ 'Smarty\\Compile\\Tag\\Capture' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Capture.php',
+ 'Smarty\\Compile\\Tag\\CaptureClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/CaptureClose.php',
+ 'Smarty\\Compile\\Tag\\ConfigLoad' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ConfigLoad.php',
+ 'Smarty\\Compile\\Tag\\ContinueTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ContinueTag.php',
+ 'Smarty\\Compile\\Tag\\Debug' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Debug.php',
+ 'Smarty\\Compile\\Tag\\ElseIfTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ElseIfTag.php',
+ 'Smarty\\Compile\\Tag\\ElseTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ElseTag.php',
+ 'Smarty\\Compile\\Tag\\EvalTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/EvalTag.php',
+ 'Smarty\\Compile\\Tag\\ExtendsTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ExtendsTag.php',
+ 'Smarty\\Compile\\Tag\\ForClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForClose.php',
+ 'Smarty\\Compile\\Tag\\ForElse' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForElse.php',
+ 'Smarty\\Compile\\Tag\\ForTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForTag.php',
+ 'Smarty\\Compile\\Tag\\ForeachClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachClose.php',
+ 'Smarty\\Compile\\Tag\\ForeachElse' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachElse.php',
+ 'Smarty\\Compile\\Tag\\ForeachSection' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachSection.php',
+ 'Smarty\\Compile\\Tag\\ForeachTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachTag.php',
+ 'Smarty\\Compile\\Tag\\FunctionClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/FunctionClose.php',
+ 'Smarty\\Compile\\Tag\\FunctionTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/FunctionTag.php',
+ 'Smarty\\Compile\\Tag\\IfClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/IfClose.php',
+ 'Smarty\\Compile\\Tag\\IfTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/IfTag.php',
+ 'Smarty\\Compile\\Tag\\IncludeTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/IncludeTag.php',
+ 'Smarty\\Compile\\Tag\\Inheritance' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Inheritance.php',
+ 'Smarty\\Compile\\Tag\\Ldelim' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Ldelim.php',
+ 'Smarty\\Compile\\Tag\\Nocache' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Nocache.php',
+ 'Smarty\\Compile\\Tag\\NocacheClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/NocacheClose.php',
+ 'Smarty\\Compile\\Tag\\Rdelim' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Rdelim.php',
+ 'Smarty\\Compile\\Tag\\Section' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Section.php',
+ 'Smarty\\Compile\\Tag\\SectionClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/SectionClose.php',
+ 'Smarty\\Compile\\Tag\\SectionElse' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/SectionElse.php',
+ 'Smarty\\Compile\\Tag\\Setfilter' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Setfilter.php',
+ 'Smarty\\Compile\\Tag\\SetfilterClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/SetfilterClose.php',
+ 'Smarty\\Compile\\Tag\\WhileClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/WhileClose.php',
+ 'Smarty\\Compile\\Tag\\WhileTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/WhileTag.php',
+ 'Smarty\\CompilerException' => __DIR__ . '/..' . '/smarty/smarty/src/CompilerException.php',
+ 'Smarty\\Compiler\\BaseCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/BaseCompiler.php',
+ 'Smarty\\Compiler\\CodeFrame' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/CodeFrame.php',
+ 'Smarty\\Compiler\\Configfile' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/Configfile.php',
+ 'Smarty\\Compiler\\Template' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/Template.php',
+ 'Smarty\\Data' => __DIR__ . '/..' . '/smarty/smarty/src/Data.php',
+ 'Smarty\\Debug' => __DIR__ . '/..' . '/smarty/smarty/src/Debug.php',
+ 'Smarty\\ErrorHandler' => __DIR__ . '/..' . '/smarty/smarty/src/ErrorHandler.php',
+ 'Smarty\\Exception' => __DIR__ . '/..' . '/smarty/smarty/src/Exception.php',
+ 'Smarty\\Extension\\BCPluginsAdapter' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/BCPluginsAdapter.php',
+ 'Smarty\\Extension\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/Base.php',
+ 'Smarty\\Extension\\CallbackWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/CallbackWrapper.php',
+ 'Smarty\\Extension\\CoreExtension' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/CoreExtension.php',
+ 'Smarty\\Extension\\DefaultExtension' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/DefaultExtension.php',
+ 'Smarty\\Extension\\ExtensionInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/ExtensionInterface.php',
+ 'Smarty\\Filter\\FilterInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Filter/FilterInterface.php',
+ 'Smarty\\Filter\\FilterPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Filter/FilterPluginWrapper.php',
+ 'Smarty\\Filter\\Output\\TrimWhitespace' => __DIR__ . '/..' . '/smarty/smarty/src/Filter/Output/TrimWhitespace.php',
+ 'Smarty\\FunctionHandler\\BCPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php',
+ 'Smarty\\FunctionHandler\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Base.php',
+ 'Smarty\\FunctionHandler\\Count' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Count.php',
+ 'Smarty\\FunctionHandler\\Counter' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Counter.php',
+ 'Smarty\\FunctionHandler\\Cycle' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Cycle.php',
+ 'Smarty\\FunctionHandler\\Fetch' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Fetch.php',
+ 'Smarty\\FunctionHandler\\FunctionHandlerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php',
+ 'Smarty\\FunctionHandler\\HtmlBase' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlBase.php',
+ 'Smarty\\FunctionHandler\\HtmlCheckboxes' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php',
+ 'Smarty\\FunctionHandler\\HtmlImage' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlImage.php',
+ 'Smarty\\FunctionHandler\\HtmlOptions' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlOptions.php',
+ 'Smarty\\FunctionHandler\\HtmlRadios' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlRadios.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectDate' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectTime' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php',
+ 'Smarty\\FunctionHandler\\HtmlTable' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlTable.php',
+ 'Smarty\\FunctionHandler\\Mailto' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Mailto.php',
+ 'Smarty\\FunctionHandler\\Math' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Math.php',
+ 'Smarty\\Lexer\\ConfigfileLexer' => __DIR__ . '/..' . '/smarty/smarty/src/Lexer/ConfigfileLexer.php',
+ 'Smarty\\Lexer\\TemplateLexer' => __DIR__ . '/..' . '/smarty/smarty/src/Lexer/TemplateLexer.php',
+ 'Smarty\\ParseTree\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Base.php',
+ 'Smarty\\ParseTree\\Code' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Code.php',
+ 'Smarty\\ParseTree\\Dq' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Dq.php',
+ 'Smarty\\ParseTree\\DqContent' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/DqContent.php',
+ 'Smarty\\ParseTree\\Tag' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Tag.php',
+ 'Smarty\\ParseTree\\Template' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Template.php',
+ 'Smarty\\ParseTree\\Text' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Text.php',
+ 'Smarty\\Parser\\ConfigfileParser' => __DIR__ . '/..' . '/smarty/smarty/src/Parser/ConfigfileParser.php',
+ 'Smarty\\Parser\\TemplateParser' => __DIR__ . '/..' . '/smarty/smarty/src/Parser/TemplateParser.php',
+ 'Smarty\\Resource\\BasePlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/BasePlugin.php',
+ 'Smarty\\Resource\\CustomPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/CustomPlugin.php',
+ 'Smarty\\Resource\\ExtendsPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/ExtendsPlugin.php',
+ 'Smarty\\Resource\\FilePlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/FilePlugin.php',
+ 'Smarty\\Resource\\RecompiledPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/RecompiledPlugin.php',
+ 'Smarty\\Resource\\StreamPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/StreamPlugin.php',
+ 'Smarty\\Resource\\StringEval' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/StringEval.php',
+ 'Smarty\\Resource\\StringPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/StringPlugin.php',
+ 'Smarty\\Runtime\\Block' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/Block.php',
+ 'Smarty\\Runtime\\CaptureRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/CaptureRuntime.php',
+ 'Smarty\\Runtime\\DefaultPluginHandlerRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php',
+ 'Smarty\\Runtime\\ForeachRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/ForeachRuntime.php',
+ 'Smarty\\Runtime\\InheritanceRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/InheritanceRuntime.php',
+ 'Smarty\\Runtime\\TplFunctionRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/TplFunctionRuntime.php',
+ 'Smarty\\Security' => __DIR__ . '/..' . '/smarty/smarty/src/Security.php',
+ 'Smarty\\Smarty' => __DIR__ . '/..' . '/smarty/smarty/src/Smarty.php',
+ 'Smarty\\Template' => __DIR__ . '/..' . '/smarty/smarty/src/Template.php',
+ 'Smarty\\TemplateBase' => __DIR__ . '/..' . '/smarty/smarty/src/TemplateBase.php',
+ 'Smarty\\Template\\Cached' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Cached.php',
+ 'Smarty\\Template\\Compiled' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Compiled.php',
+ 'Smarty\\Template\\Config' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Config.php',
+ 'Smarty\\Template\\GeneratedPhpFile' => __DIR__ . '/..' . '/smarty/smarty/src/Template/GeneratedPhpFile.php',
+ 'Smarty\\Template\\Source' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Source.php',
+ 'Smarty\\TestInstall' => __DIR__ . '/..' . '/smarty/smarty/src/TestInstall.php',
+ 'Smarty\\UndefinedVariable' => __DIR__ . '/..' . '/smarty/smarty/src/UndefinedVariable.php',
+ 'Smarty\\Variable' => __DIR__ . '/..' . '/smarty/smarty/src/Variable.php',
'StephenHill\\BCMathService' => __DIR__ . '/..' . '/stephenhill/base58/src/BCMathService.php',
'StephenHill\\Base58' => __DIR__ . '/..' . '/stephenhill/base58/src/Base58.php',
'StephenHill\\Benchmarks\\Base16Event' => __DIR__ . '/..' . '/stephenhill/base58/benchmarks/Base16Event.php',
@@ -1460,9 +1469,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'StephenHill\\Benchmarks\\Base64Event' => __DIR__ . '/..' . '/stephenhill/base58/benchmarks/Base64Event.php',
'StephenHill\\GMPService' => __DIR__ . '/..' . '/stephenhill/base58/src/GMPService.php',
'StephenHill\\ServiceInterface' => __DIR__ . '/..' . '/stephenhill/base58/src/ServiceInterface.php',
- 'Symfony\\Polyfill\\Php81\\Php81' => __DIR__ . '/..' . '/symfony/polyfill-php81/Php81.php',
- 'TPC_yyStackEntry' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'TP_yyStackEntry' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
+ 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
'Text_LanguageDetect' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect.php',
'Text_LanguageDetect_Exception' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php',
'Text_LanguageDetect_ISO639' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php',
@@ -1473,6 +1480,24 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Access\\PermissionLimits' => __DIR__ . '/../..' . '/Zotlabs/Access/PermissionLimits.php',
'Zotlabs\\Access\\PermissionRoles' => __DIR__ . '/../..' . '/Zotlabs/Access/PermissionRoles.php',
'Zotlabs\\Access\\Permissions' => __DIR__ . '/../..' . '/Zotlabs/Access/Permissions.php',
+ 'Zotlabs\\ActivityStreams\\ASObject' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/ASObject.php',
+ 'Zotlabs\\ActivityStreams\\Activity' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Activity.php',
+ 'Zotlabs\\ActivityStreams\\Actor' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Actor.php',
+ 'Zotlabs\\ActivityStreams\\AssertionMethod' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/AssertionMethod.php',
+ 'Zotlabs\\ActivityStreams\\Collection' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Collection.php',
+ 'Zotlabs\\ActivityStreams\\CollectionPage' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/CollectionPage.php',
+ 'Zotlabs\\ActivityStreams\\IntransitiveActivity' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/IntransitiveActivity.php',
+ 'Zotlabs\\ActivityStreams\\Link' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Link.php',
+ 'Zotlabs\\ActivityStreams\\OrderedCollection' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/OrderedCollection.php',
+ 'Zotlabs\\ActivityStreams\\OrderedCollectionPage' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/OrderedCollectionPage.php',
+ 'Zotlabs\\ActivityStreams\\Place' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Place.php',
+ 'Zotlabs\\ActivityStreams\\Profile' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Profile.php',
+ 'Zotlabs\\ActivityStreams\\PublicKey' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/PublicKey.php',
+ 'Zotlabs\\ActivityStreams\\Question' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Question.php',
+ 'Zotlabs\\ActivityStreams\\Relationship' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Relationship.php',
+ 'Zotlabs\\ActivityStreams\\Signature' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Signature.php',
+ 'Zotlabs\\ActivityStreams\\Tombstone' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/Tombstone.php',
+ 'Zotlabs\\ActivityStreams\\UnhandledElementException' => __DIR__ . '/../..' . '/Zotlabs/ActivityStreams/UnhandledElementException.php',
'Zotlabs\\Daemon\\Addon' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Addon.php',
'Zotlabs\\Daemon\\Cache_embeds' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cache_embeds.php',
'Zotlabs\\Daemon\\Cache_query' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cache_query.php',
@@ -1506,6 +1531,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Daemon\\Thumbnail' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Thumbnail.php',
'Zotlabs\\Daemon\\Xchan_photo' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Xchan_photo.php',
'Zotlabs\\Daemon\\Zotconvo' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Zotconvo.php',
+ 'Zotlabs\\Entity\\Account' => __DIR__ . '/../..' . '/Zotlabs/Entity/Account.php',
+ 'Zotlabs\\Entity\\Channel' => __DIR__ . '/../..' . '/Zotlabs/Entity/Channel.php',
+ 'Zotlabs\\Entity\\Item' => __DIR__ . '/../..' . '/Zotlabs/Entity/Item.php',
'Zotlabs\\Extend\\Hook' => __DIR__ . '/../..' . '/Zotlabs/Extend/Hook.php',
'Zotlabs\\Extend\\Route' => __DIR__ . '/../..' . '/Zotlabs/Extend/Route.php',
'Zotlabs\\Extend\\Widget' => __DIR__ . '/../..' . '/Zotlabs/Extend/Widget.php',
@@ -1522,6 +1550,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Lib\\ActivityStreams' => __DIR__ . '/../..' . '/Zotlabs/Lib/ActivityStreams.php',
'Zotlabs\\Lib\\Api_router' => __DIR__ . '/../..' . '/Zotlabs/Lib/Api_router.php',
'Zotlabs\\Lib\\Apps' => __DIR__ . '/../..' . '/Zotlabs/Lib/Apps.php',
+ 'Zotlabs\\Lib\\BaseObject' => __DIR__ . '/../..' . '/Zotlabs/Lib/BaseObject.php',
'Zotlabs\\Lib\\Cache' => __DIR__ . '/../..' . '/Zotlabs/Lib/Cache.php',
'Zotlabs\\Lib\\Chatroom' => __DIR__ . '/../..' . '/Zotlabs/Lib/Chatroom.php',
'Zotlabs\\Lib\\Config' => __DIR__ . '/../..' . '/Zotlabs/Lib/Config.php',
@@ -1541,6 +1570,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Lib\\Libsync' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libsync.php',
'Zotlabs\\Lib\\Libzot' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzot.php',
'Zotlabs\\Lib\\Libzotdir' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzotdir.php',
+ 'Zotlabs\\Lib\\Mailer' => __DIR__ . '/../..' . '/Zotlabs/Lib/Mailer.php',
'Zotlabs\\Lib\\MarkdownSoap' => __DIR__ . '/../..' . '/Zotlabs/Lib/MarkdownSoap.php',
'Zotlabs\\Lib\\MessageFilter' => __DIR__ . '/../..' . '/Zotlabs/Lib/MessageFilter.php',
'Zotlabs\\Lib\\Multibase' => __DIR__ . '/../..' . '/Zotlabs/Lib/Multibase.php',
@@ -1551,7 +1581,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Lib\\QueueWorker' => __DIR__ . '/../..' . '/Zotlabs/Lib/QueueWorker.php',
'Zotlabs\\Lib\\SConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/SConfig.php',
'Zotlabs\\Lib\\Share' => __DIR__ . '/../..' . '/Zotlabs/Lib/Share.php',
- 'Zotlabs\\Lib\\SuperCurl' => __DIR__ . '/../..' . '/Zotlabs/Lib/SuperCurl.php',
'Zotlabs\\Lib\\SvgSanitizer' => __DIR__ . '/../..' . '/Zotlabs/Lib/SvgSanitizer.php',
'Zotlabs\\Lib\\System' => __DIR__ . '/../..' . '/Zotlabs/Lib/System.php',
'Zotlabs\\Lib\\Techlevels' => __DIR__ . '/../..' . '/Zotlabs/Lib/Techlevels.php',
@@ -1599,12 +1628,14 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Module\\Branchtopic' => __DIR__ . '/../..' . '/Zotlabs/Module/Branchtopic.php',
'Zotlabs\\Module\\Cal' => __DIR__ . '/../..' . '/Zotlabs/Module/Cal.php',
'Zotlabs\\Module\\Cdav' => __DIR__ . '/../..' . '/Zotlabs/Module/Cdav.php',
+ 'Zotlabs\\Module\\Ceditor' => __DIR__ . '/../..' . '/Zotlabs/Module/Ceditor.php',
'Zotlabs\\Module\\Changeaddr' => __DIR__ . '/../..' . '/Zotlabs/Module/Changeaddr.php',
'Zotlabs\\Module\\Channel' => __DIR__ . '/../..' . '/Zotlabs/Module/Channel.php',
'Zotlabs\\Module\\Channel_calendar' => __DIR__ . '/../..' . '/Zotlabs/Module/Channel_calendar.php',
'Zotlabs\\Module\\Chanview' => __DIR__ . '/../..' . '/Zotlabs/Module/Chanview.php',
'Zotlabs\\Module\\Chat' => __DIR__ . '/../..' . '/Zotlabs/Module/Chat.php',
'Zotlabs\\Module\\Chatsvc' => __DIR__ . '/../..' . '/Zotlabs/Module/Chatsvc.php',
+ 'Zotlabs\\Module\\Cleditor' => __DIR__ . '/../..' . '/Zotlabs/Module/Cleditor.php',
'Zotlabs\\Module\\Cloud' => __DIR__ . '/../..' . '/Zotlabs/Module/Cloud.php',
'Zotlabs\\Module\\Cloud_tiles' => __DIR__ . '/../..' . '/Zotlabs/Module/Cloud_tiles.php',
'Zotlabs\\Module\\Common' => __DIR__ . '/../..' . '/Zotlabs/Module/Common.php',
@@ -1798,7 +1829,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Storage\\CalDAVClient' => __DIR__ . '/../..' . '/Zotlabs/Storage/CalDAVClient.php',
'Zotlabs\\Storage\\Directory' => __DIR__ . '/../..' . '/Zotlabs/Storage/Directory.php',
'Zotlabs\\Storage\\File' => __DIR__ . '/../..' . '/Zotlabs/Storage/File.php',
- 'Zotlabs\\Storage\\GitRepo' => __DIR__ . '/../..' . '/Zotlabs/Storage/GitRepo.php',
'Zotlabs\\Storage\\ZotOauth2Pdo' => __DIR__ . '/../..' . '/Zotlabs/Storage/ZotOauth2Pdo.php',
'Zotlabs\\Text\\Tagadelic' => __DIR__ . '/../..' . '/Zotlabs/Text/Tagadelic.php',
'Zotlabs\\Thumbs\\Epubthumb' => __DIR__ . '/../..' . '/Zotlabs/Thumbs/Epubthumb.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 6fef247bf..65d1f669f 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -70,28 +70,28 @@
},
{
"name": "brick/math",
- "version": "0.11.0",
- "version_normalized": "0.11.0.0",
+ "version": "0.12.1",
+ "version_normalized": "0.12.1.0",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478"
+ "reference": "f510c0a40911935b77b86859eb5223d58d660df1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478",
- "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478",
+ "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1",
+ "reference": "f510c0a40911935b77b86859eb5223d58d660df1",
"shasum": ""
},
"require": {
- "php": "^8.0"
+ "php": "^8.1"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^9.0",
- "vimeo/psalm": "5.0.0"
+ "phpunit/phpunit": "^10.1",
+ "vimeo/psalm": "5.16.0"
},
- "time": "2023-01-15T23:15:59+00:00",
+ "time": "2023-11-29T23:19:16+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -111,12 +111,17 @@
"arithmetic",
"bigdecimal",
"bignum",
+ "bignumber",
"brick",
- "math"
+ "decimal",
+ "integer",
+ "math",
+ "mathematics",
+ "rational"
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.11.0"
+ "source": "https://github.com/brick/math/tree/0.12.1"
},
"funding": [
{
@@ -193,34 +198,37 @@
},
{
"name": "chillerlan/php-qrcode",
- "version": "4.3.4",
- "version_normalized": "4.3.4.0",
+ "version": "4.4.2",
+ "version_normalized": "4.4.2.0",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
+ "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
+ "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
"shasum": ""
},
"require": {
- "chillerlan/php-settings-container": "^2.1.4",
+ "chillerlan/php-settings-container": "^2.1.6 || ^3.2.1",
"ext-mbstring": "*",
"php": "^7.4 || ^8.0"
},
"require-dev": {
- "phan/phan": "^5.3",
- "phpunit/phpunit": "^9.5",
- "setasign/fpdf": "^1.8.2"
+ "phan/phan": "^5.4.5",
+ "phpmd/phpmd": "^2.15",
+ "phpunit/phpunit": "^9.6",
+ "setasign/fpdf": "^1.8.2",
+ "squizlabs/php_codesniffer": "^3.11"
},
"suggest": {
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
- "setasign/fpdf": "Required to use the QR FPDF output."
+ "setasign/fpdf": "Required to use the QR FPDF output.",
+ "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code"
},
- "time": "2022-07-25T09:12:45+00:00",
+ "time": "2024-11-15T15:36:24+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -247,7 +255,7 @@
"homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
}
],
- "description": "A QR code generator. PHP 7.4+",
+ "description": "A QR code generator with a user friendly API. PHP 7.4+",
"homepage": "https://github.com/chillerlan/php-qrcode",
"keywords": [
"phpqrcode",
@@ -258,14 +266,10 @@
],
"support": {
"issues": "https://github.com/chillerlan/php-qrcode/issues",
- "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.4.2"
},
"funding": [
{
- "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
- "type": "custom"
- },
- {
"url": "https://ko-fi.com/codemasher",
"type": "ko_fi"
}
@@ -274,33 +278,36 @@
},
{
"name": "chillerlan/php-settings-container",
- "version": "2.1.4",
- "version_normalized": "2.1.4.0",
+ "version": "3.2.1",
+ "version_normalized": "3.2.1.0",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-settings-container.git",
- "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a"
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
- "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
"shasum": ""
},
"require": {
"ext-json": "*",
- "php": "^7.4 || ^8.0"
+ "php": "^8.1"
},
"require-dev": {
- "phan/phan": "^5.3",
- "phpunit/phpunit": "^9.5"
+ "phpmd/phpmd": "^2.15",
+ "phpstan/phpstan": "^1.11",
+ "phpstan/phpstan-deprecation-rules": "^1.2",
+ "phpunit/phpunit": "^10.5",
+ "squizlabs/php_codesniffer": "^3.10"
},
- "time": "2022-07-05T22:32:14+00:00",
+ "time": "2024-07-16T11:13:48+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
- "chillerlan\\Settings\\": "src/"
+ "chillerlan\\Settings\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -314,10 +321,9 @@
"homepage": "https://github.com/codemasher"
}
],
- "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "description": "A container class for immutable settings objects. Not a DI container.",
"homepage": "https://github.com/chillerlan/php-settings-container",
"keywords": [
- "PHP7",
"Settings",
"configuration",
"container",
@@ -437,21 +443,21 @@
},
{
"name": "ezyang/htmlpurifier",
- "version": "v4.17.0",
- "version_normalized": "4.17.0.0",
+ "version": "v4.18.0",
+ "version_normalized": "4.18.0.0",
"source": {
"type": "git",
"url": "https://github.com/ezyang/htmlpurifier.git",
- "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c"
+ "reference": "cb56001e54359df7ae76dc522d08845dc741621b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c",
- "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c",
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b",
+ "reference": "cb56001e54359df7ae76dc522d08845dc741621b",
"shasum": ""
},
"require": {
- "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
"cerdic/css-tidy": "^1.7 || ^2.0",
@@ -463,7 +469,7 @@
"ext-iconv": "Converts text to and from non-UTF-8 encodings",
"ext-tidy": "Used for pretty-printing HTML"
},
- "time": "2023-11-17T15:01:25+00:00",
+ "time": "2024-11-01T03:51:45+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -495,7 +501,7 @@
],
"support": {
"issues": "https://github.com/ezyang/htmlpurifier/issues",
- "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0"
+ "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0"
},
"install-path": "../ezyang/htmlpurifier"
},
@@ -826,27 +832,27 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.6.3",
- "version_normalized": "2.6.3.0",
+ "version": "v3.0.0",
+ "version_normalized": "3.0.0.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ "reference": "df1e7fde177501eee2037dd159cf04f5f301a512"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512",
+ "reference": "df1e7fde177501eee2037dd159cf04f5f301a512",
"shasum": ""
},
"require": {
- "php": "^7|^8"
+ "php": "^8"
},
"require-dev": {
- "phpunit/phpunit": "^6|^7|^8|^9",
- "vimeo/psalm": "^1|^2|^3|^4"
+ "phpunit/phpunit": "^9",
+ "vimeo/psalm": "^4|^5"
},
- "time": "2022-06-14T06:56:20+00:00",
+ "time": "2024-05-08T12:36:18+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1001,17 +1007,17 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "2.0.47",
- "version_normalized": "2.0.47.0",
+ "version": "2.0.48",
+ "version_normalized": "2.0.48.0",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb"
+ "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/b7d7d90ee7df7f33a664b4aea32d50a305d35adb",
- "reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/eaa7be704b8b93a6913b69eb7f645a59d7731b61",
+ "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61",
"shasum": ""
},
"require": {
@@ -1029,7 +1035,7 @@
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.",
"ext-xml": "Install the XML extension to load XML formatted public keys."
},
- "time": "2024-02-26T04:55:38+00:00",
+ "time": "2024-12-14T21:03:54+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1094,7 +1100,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/2.0.47"
+ "source": "https://github.com/phpseclib/phpseclib/tree/2.0.48"
},
"funding": [
{
@@ -1113,28 +1119,79 @@
"install-path": "../phpseclib/phpseclib"
},
{
+ "name": "psr/clock",
+ "version": "1.0.0",
+ "version_normalized": "1.0.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/clock.git",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "time": "2022-11-25T14:36:26+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for reading the clock.",
+ "homepage": "https://github.com/php-fig/clock",
+ "keywords": [
+ "clock",
+ "now",
+ "psr",
+ "psr-20",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/clock/issues",
+ "source": "https://github.com/php-fig/clock/tree/1.0.0"
+ },
+ "install-path": "../psr/clock"
+ },
+ {
"name": "psr/log",
- "version": "2.0.0",
- "version_normalized": "2.0.0.0",
+ "version": "3.0.2",
+ "version_normalized": "3.0.2.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
- "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
"php": ">=8.0.0"
},
- "time": "2021-07-14T16:41:46+00:00",
+ "time": "2024-09-11T13:17:53+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "3.x-dev"
}
},
"installation-source": "dist",
@@ -1161,50 +1218,60 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/2.0.0"
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
},
"install-path": "../psr/log"
},
{
"name": "ramsey/collection",
- "version": "1.2.2",
- "version_normalized": "1.2.2.0",
+ "version": "2.0.0",
+ "version_normalized": "2.0.0.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
- "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
- "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"shasum": ""
},
"require": {
- "php": "^7.3 || ^8",
- "symfony/polyfill-php81": "^1.23"
+ "php": "^8.1"
},
"require-dev": {
- "captainhook/captainhook": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "ergebnis/composer-normalize": "^2.6",
- "fakerphp/faker": "^1.5",
- "hamcrest/hamcrest-php": "^2",
- "jangregor/phpstan-prophecy": "^0.8",
- "mockery/mockery": "^1.3",
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.28.3",
+ "fakerphp/faker": "^1.21",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^1.0",
+ "mockery/mockery": "^1.5",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpcsstandards/phpcsutils": "^1.0.0-rc1",
"phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1",
- "phpstan/phpstan": "^0.12.32",
- "phpstan/phpstan-mockery": "^0.12.5",
- "phpstan/phpstan-phpunit": "^0.12.11",
- "phpunit/phpunit": "^8.5 || ^9",
- "psy/psysh": "^0.10.4",
- "slevomat/coding-standard": "^6.3",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.4"
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.9",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^9.5",
+ "psalm/plugin-mockery": "^1.1",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "ramsey/coding-standard": "^2.0.3",
+ "ramsey/conventional-commits": "^1.3",
+ "vimeo/psalm": "^5.4"
},
- "time": "2021-10-10T03:01:02+00:00",
+ "time": "2022-12-31T21:50:55+00:00",
"type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
"installation-source": "dist",
"autoload": {
"psr-4": {
@@ -1233,7 +1300,7 @@
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/1.2.2"
+ "source": "https://github.com/ramsey/collection/tree/2.0.0"
},
"funding": [
{
@@ -1249,21 +1316,21 @@
},
{
"name": "ramsey/uuid",
- "version": "4.7.5",
- "version_normalized": "4.7.5.0",
+ "version": "4.7.6",
+ "version_normalized": "4.7.6.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e"
+ "reference": "91039bc1faa45ba123c4328958e620d382ec7088"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e",
- "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
+ "reference": "91039bc1faa45ba123c4328958e620d382ec7088",
"shasum": ""
},
"require": {
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11",
+ "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
"ext-json": "*",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
@@ -1300,7 +1367,7 @@
"paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
- "time": "2023-11-08T05:53:05+00:00",
+ "time": "2024-04-27T21:32:50+00:00",
"type": "library",
"extra": {
"captainhook": {
@@ -1328,7 +1395,7 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.7.5"
+ "source": "https://github.com/ramsey/uuid/tree/4.7.6"
},
"funding": [
{
@@ -1344,17 +1411,17 @@
},
{
"name": "sabre/dav",
- "version": "4.6.0",
- "version_normalized": "4.6.0.0",
+ "version": "4.7.0",
+ "version_normalized": "4.7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/dav.git",
- "reference": "554145304b4a026477d130928d16e626939b0b2a"
+ "reference": "074373bcd689a30bcf5aaa6bbb20a3395964ce7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/dav/zipball/554145304b4a026477d130928d16e626939b0b2a",
- "reference": "554145304b4a026477d130928d16e626939b0b2a",
+ "url": "https://api.github.com/repos/sabre-io/dav/zipball/074373bcd689a30bcf5aaa6bbb20a3395964ce7a",
+ "reference": "074373bcd689a30bcf5aaa6bbb20a3395964ce7a",
"shasum": ""
},
"require": {
@@ -1388,7 +1455,7 @@
"ext-imap": "*",
"ext-pdo": "*"
},
- "time": "2023-12-11T13:01:23+00:00",
+ "time": "2024-10-29T11:46:02+00:00",
"bin": [
"bin/sabredav",
"bin/naturalselection"
@@ -1430,28 +1497,28 @@
},
{
"name": "sabre/event",
- "version": "5.1.4",
- "version_normalized": "5.1.4.0",
+ "version": "5.1.7",
+ "version_normalized": "5.1.7.0",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/event.git",
- "reference": "d7da22897125d34d7eddf7977758191c06a74497"
+ "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497",
- "reference": "d7da22897125d34d7eddf7977758191c06a74497",
+ "url": "https://api.github.com/repos/sabre-io/event/zipball/86d57e305c272898ba3c28e9bd3d65d5464587c2",
+ "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||^3.63",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
- "time": "2021-11-04T06:51:17+00:00",
+ "time": "2024-08-27T11:23:05+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1499,17 +1566,17 @@
},
{
"name": "sabre/http",
- "version": "5.1.6",
- "version_normalized": "5.1.6.0",
+ "version": "5.1.12",
+ "version_normalized": "5.1.12.0",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/http.git",
- "reference": "9976ac34ced206bd6579b7b37b401de9fac98dae"
+ "reference": "dedff73f3995578bc942fa4c8484190cac14f139"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/http/zipball/9976ac34ced206bd6579b7b37b401de9fac98dae",
- "reference": "9976ac34ced206bd6579b7b37b401de9fac98dae",
+ "url": "https://api.github.com/repos/sabre-io/http/zipball/dedff73f3995578bc942fa4c8484190cac14f139",
+ "reference": "dedff73f3995578bc942fa4c8484190cac14f139",
"shasum": ""
},
"require": {
@@ -1521,14 +1588,14 @@
"sabre/uri": "^2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||^3.63",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
"suggest": {
"ext-curl": " to make http requests with the Client class"
},
- "time": "2022-07-15T14:51:14+00:00",
+ "time": "2024-08-27T16:07:41+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1565,28 +1632,31 @@
},
{
"name": "sabre/uri",
- "version": "2.3.2",
- "version_normalized": "2.3.2.0",
+ "version": "2.3.4",
+ "version_normalized": "2.3.4.0",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/uri.git",
- "reference": "eceb4a1b8b680b45e215574222d6ca00be541970"
+ "reference": "b76524c22de90d80ca73143680a8e77b1266c291"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/uri/zipball/eceb4a1b8b680b45e215574222d6ca00be541970",
- "reference": "eceb4a1b8b680b45e215574222d6ca00be541970",
+ "url": "https://api.github.com/repos/sabre-io/uri/zipball/b76524c22de90d80ca73143680a8e77b1266c291",
+ "reference": "b76524c22de90d80ca73143680a8e77b1266c291",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.9",
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit": "^9.0"
- },
- "time": "2022-09-19T11:58:52+00:00",
+ "friendsofphp/php-cs-fixer": "^3.63",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^1.12",
+ "phpstan/phpstan-phpunit": "^1.4",
+ "phpstan/phpstan-strict-rules": "^1.6",
+ "phpunit/phpunit": "^9.6"
+ },
+ "time": "2024-08-27T12:18:16+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1625,17 +1695,17 @@
},
{
"name": "sabre/vobject",
- "version": "4.5.4",
- "version_normalized": "4.5.4.0",
+ "version": "4.5.6",
+ "version_normalized": "4.5.6.0",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/vobject.git",
- "reference": "a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772"
+ "reference": "900266bb3bd448a9f7f41f82344ad0aba237cb27"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/vobject/zipball/a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772",
- "reference": "a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772",
+ "url": "https://api.github.com/repos/sabre-io/vobject/zipball/900266bb3bd448a9f7f41f82344ad0aba237cb27",
+ "reference": "900266bb3bd448a9f7f41f82344ad0aba237cb27",
"shasum": ""
},
"require": {
@@ -1645,14 +1715,14 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "~2.17.1",
- "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan": "^0.12 || ^1.11",
"phpunit/php-invoker": "^2.0 || ^3.1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
"suggest": {
"hoa/bench": "If you would like to run the benchmark scripts"
},
- "time": "2023-11-09T12:54:37+00:00",
+ "time": "2024-10-14T11:53:54+00:00",
"bin": [
"bin/vobject",
"bin/generate_vcards"
@@ -1732,17 +1802,17 @@
},
{
"name": "sabre/xml",
- "version": "2.2.5",
- "version_normalized": "2.2.5.0",
+ "version": "2.2.11",
+ "version_normalized": "2.2.11.0",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/xml.git",
- "reference": "a6af111850e7536d200d9637c34885cd3c77a86c"
+ "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sabre-io/xml/zipball/a6af111850e7536d200d9637c34885cd3c77a86c",
- "reference": "a6af111850e7536d200d9637c34885cd3c77a86c",
+ "url": "https://api.github.com/repos/sabre-io/xml/zipball/01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc",
+ "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc",
"shasum": ""
},
"require": {
@@ -1754,11 +1824,11 @@
"sabre/uri": ">=1.0,<3.0.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6"
},
- "time": "2021-11-04T06:37:27+00:00",
+ "time": "2024-09-06T07:37:46+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1804,17 +1874,17 @@
},
{
"name": "scssphp/scssphp",
- "version": "v1.12.1",
- "version_normalized": "1.12.1.0",
+ "version": "v1.13.0",
+ "version_normalized": "1.13.0.0",
"source": {
"type": "git",
"url": "https://github.com/scssphp/scssphp.git",
- "reference": "394ed1e960138710a60d035c1a85d43d0bf0faeb"
+ "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scssphp/scssphp/zipball/394ed1e960138710a60d035c1a85d43d0bf0faeb",
- "reference": "394ed1e960138710a60d035c1a85d43d0bf0faeb",
+ "url": "https://api.github.com/repos/scssphp/scssphp/zipball/63d1157457e5554edf00b0c1fabab4c1511d2520",
+ "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520",
"shasum": ""
},
"require": {
@@ -1837,7 +1907,7 @@
"ext-iconv": "Can be used as fallback when ext-mbstring is not available",
"ext-mbstring": "For best performance, mbstring should be installed as it is faster than ext-iconv"
},
- "time": "2024-01-13T12:36:40+00:00",
+ "time": "2024-08-17T21:02:11+00:00",
"bin": [
"bin/pscss"
],
@@ -1881,23 +1951,23 @@
],
"support": {
"issues": "https://github.com/scssphp/scssphp/issues",
- "source": "https://github.com/scssphp/scssphp/tree/v1.12.1"
+ "source": "https://github.com/scssphp/scssphp/tree/v1.13.0"
},
"install-path": "../scssphp/scssphp"
},
{
"name": "simplepie/simplepie",
- "version": "1.8.0",
- "version_normalized": "1.8.0.0",
+ "version": "1.8.1",
+ "version_normalized": "1.8.1.0",
"source": {
"type": "git",
"url": "https://github.com/simplepie/simplepie.git",
- "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55"
+ "reference": "a567b8ab9b6145a23e6a9ec2b6b74f56d52f7ad1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/simplepie/simplepie/zipball/65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
- "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
+ "url": "https://api.github.com/repos/simplepie/simplepie/zipball/a567b8ab9b6145a23e6a9ec2b6b74f56d52f7ad1",
+ "reference": "a567b8ab9b6145a23e6a9ec2b6b74f56d52f7ad1",
"shasum": ""
},
"require": {
@@ -1918,28 +1988,18 @@
"ext-mbstring": "",
"mf2/mf2": "Microformat module that allows for parsing HTML for microformats"
},
- "time": "2023-01-20T08:37:35+00:00",
+ "time": "2024-11-22T16:33:20+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
- "psr-4": {
- "SimplePie\\": "src"
- },
"psr-0": {
"SimplePie": "library"
- }
- },
- "autoload-dev": {
+ },
"psr-4": {
- "SimplePie\\Tests\\Fixtures\\": "tests/Fixtures",
- "SimplePie\\Tests\\Unit\\": "tests/Unit"
+ "SimplePie\\": "src"
}
},
- "scripts": {
- "test": [
- "phpunit"
- ]
- },
+ "notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
@@ -1969,45 +2029,49 @@
"rss"
],
"support": {
- "source": "https://github.com/simplepie/simplepie/tree/1.8.0",
- "issues": "https://github.com/simplepie/simplepie/issues"
+ "issues": "https://github.com/simplepie/simplepie/issues",
+ "source": "https://github.com/simplepie/simplepie/tree/1.8.1"
},
"install-path": "../simplepie/simplepie"
},
{
"name": "smarty/smarty",
- "version": "v4.5.4",
- "version_normalized": "4.5.4.0",
+ "version": "v5.4.3",
+ "version_normalized": "5.4.3.0",
"source": {
"type": "git",
"url": "https://github.com/smarty-php/smarty.git",
- "reference": "c11676e85aa71bc7c3cd9100f1655a9f4d14616e"
+ "reference": "c6bff5795081ca5e60aabda59fb87daa511acd1e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c11676e85aa71bc7c3cd9100f1655a9f4d14616e",
- "reference": "c11676e85aa71bc7c3cd9100f1655a9f4d14616e",
+ "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c6bff5795081ca5e60aabda59fb87daa511acd1e",
+ "reference": "c6bff5795081ca5e60aabda59fb87daa511acd1e",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.27"
},
"require-dev": {
"phpunit/phpunit": "^8.5 || ^7.5",
- "smarty/smarty-lexer": "^3.1"
+ "smarty/smarty-lexer": "^4.0.2"
},
- "time": "2024-08-14T20:04:35+00:00",
+ "time": "2024-12-23T00:38:44+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "5.0.x-dev"
}
},
"installation-source": "dist",
"autoload": {
- "classmap": [
- "libs/"
- ]
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Smarty\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2039,45 +2103,47 @@
"support": {
"forum": "https://github.com/smarty-php/smarty/discussions",
"issues": "https://github.com/smarty-php/smarty/issues",
- "source": "https://github.com/smarty-php/smarty/tree/v4.5.4"
+ "source": "https://github.com/smarty-php/smarty/tree/v5.4.3"
},
"install-path": "../smarty/smarty"
},
{
"name": "spomky-labs/otphp",
- "version": "11.2.0",
- "version_normalized": "11.2.0.0",
+ "version": "11.3.0",
+ "version_normalized": "11.3.0.0",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/otphp.git",
- "reference": "9a1569038bb1c8e98040b14b8bcbba54f25e7795"
+ "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9a1569038bb1c8e98040b14b8bcbba54f25e7795",
- "reference": "9a1569038bb1c8e98040b14b8bcbba54f25e7795",
+ "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33",
+ "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "paragonie/constant_time_encoding": "^2.0",
- "php": "^8.1"
+ "paragonie/constant_time_encoding": "^2.0 || ^3.0",
+ "php": ">=8.1",
+ "psr/clock": "^1.0",
+ "symfony/deprecation-contracts": "^3.2"
},
"require-dev": {
"ekino/phpstan-banned-code": "^1.0",
- "infection/infection": "^0.26",
+ "infection/infection": "^0.26|^0.27|^0.28|^0.29",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-strict-rules": "^1.0",
- "phpunit/phpunit": "^9.5.26",
+ "phpunit/phpunit": "^9.5.26|^10.0|^11.0",
"qossmic/deptrac-shim": "^1.0",
- "rector/rector": "^0.15",
- "symfony/phpunit-bridge": "^6.1",
- "symplify/easy-coding-standard": "^11.0"
+ "rector/rector": "^1.0",
+ "symfony/phpunit-bridge": "^6.1|^7.0",
+ "symplify/easy-coding-standard": "^12.0"
},
- "time": "2023-03-16T19:16:25+00:00",
+ "time": "2024-06-12T11:22:32+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -2112,7 +2178,7 @@
],
"support": {
"issues": "https://github.com/Spomky-Labs/otphp/issues",
- "source": "https://github.com/Spomky-Labs/otphp/tree/11.2.0"
+ "source": "https://github.com/Spomky-Labs/otphp/tree/11.3.0"
},
"funding": [
{
@@ -2172,29 +2238,105 @@
"install-path": "../stephenhill/base58"
},
{
- "name": "symfony/polyfill-php81",
- "version": "v1.29.0",
- "version_normalized": "1.29.0.0",
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.5.1",
+ "version_normalized": "3.5.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "time": "2024-09-25T14:20:29+00:00",
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.5-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "install-path": "../symfony/deprecation-contracts"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.31.0",
+ "version_normalized": "1.31.0.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d"
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d",
- "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
},
- "time": "2024-01-29T20:11:03+00:00",
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "time": "2024-09-09T11:45:10+00:00",
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"installation-source": "dist",
@@ -2203,11 +2345,8 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2223,16 +2362,17 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
+ "mbstring",
"polyfill",
"portable",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
},
"funding": [
{
@@ -2248,7 +2388,7 @@
"type": "tidelift"
}
],
- "install-path": "../symfony/polyfill-php81"
+ "install-path": "../symfony/polyfill-mbstring"
},
{
"name": "twbs/bootstrap",
@@ -2347,17 +2487,17 @@
},
{
"name": "voku/portable-ascii",
- "version": "2.0.1",
- "version_normalized": "2.0.1.0",
+ "version": "2.0.3",
+ "version_normalized": "2.0.3.0",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-ascii.git",
- "reference": "b56450eed252f6801410d810c8e1727224ae0743"
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743",
- "reference": "b56450eed252f6801410d810c8e1727224ae0743",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
"shasum": ""
},
"require": {
@@ -2369,7 +2509,7 @@
"suggest": {
"ext-intl": "Use Intl for transliterator_transliterate() support"
},
- "time": "2022-03-08T17:03:00+00:00",
+ "time": "2024-11-21T01:49:47+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -2384,7 +2524,7 @@
"authors": [
{
"name": "Lars Moelleken",
- "homepage": "http://www.moelleken.org/"
+ "homepage": "https://www.moelleken.org/"
}
],
"description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
@@ -2396,7 +2536,7 @@
],
"support": {
"issues": "https://github.com/voku/portable-ascii/issues",
- "source": "https://github.com/voku/portable-ascii/tree/2.0.1"
+ "source": "https://github.com/voku/portable-ascii/tree/2.0.3"
},
"funding": [
{
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index 08afaebaa..dbbd87201 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -3,7 +3,7 @@
'name' => 'zotlabs/hubzilla',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => 'c12ef4fbf4b2046e0af68b11e8fe5af2d335f32e',
+ 'reference' => 'cfcac590c3a5d183db3a496fa2e9be344b599705',
'type' => 'application',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -20,9 +20,9 @@
'dev_requirement' => false,
),
'brick/math' => array(
- 'pretty_version' => '0.11.0',
- 'version' => '0.11.0.0',
- 'reference' => '0ad82ce168c82ba30d1c01ec86116ab52f589478',
+ 'pretty_version' => '0.12.1',
+ 'version' => '0.12.1.0',
+ 'reference' => 'f510c0a40911935b77b86859eb5223d58d660df1',
'type' => 'library',
'install_path' => __DIR__ . '/../brick/math',
'aliases' => array(),
@@ -38,18 +38,18 @@
'dev_requirement' => false,
),
'chillerlan/php-qrcode' => array(
- 'pretty_version' => '4.3.4',
- 'version' => '4.3.4.0',
- 'reference' => '2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d',
+ 'pretty_version' => '4.4.2',
+ 'version' => '4.4.2.0',
+ 'reference' => '345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4',
'type' => 'library',
'install_path' => __DIR__ . '/../chillerlan/php-qrcode',
'aliases' => array(),
'dev_requirement' => false,
),
'chillerlan/php-settings-container' => array(
- 'pretty_version' => '2.1.4',
- 'version' => '2.1.4.0',
- 'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
+ 'pretty_version' => '3.2.1',
+ 'version' => '3.2.1.0',
+ 'reference' => '95ed3e9676a1d47cab2e3174d19b43f5dbf52681',
'type' => 'library',
'install_path' => __DIR__ . '/../chillerlan/php-settings-container',
'aliases' => array(),
@@ -74,9 +74,9 @@
'dev_requirement' => false,
),
'ezyang/htmlpurifier' => array(
- 'pretty_version' => 'v4.17.0',
- 'version' => '4.17.0.0',
- 'reference' => 'bbc513d79acf6691fa9cf10f192c90dd2957f18c',
+ 'pretty_version' => 'v4.18.0',
+ 'version' => '4.18.0.0',
+ 'reference' => 'cb56001e54359df7ae76dc522d08845dc741621b',
'type' => 'library',
'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
'aliases' => array(),
@@ -128,9 +128,9 @@
'dev_requirement' => false,
),
'paragonie/constant_time_encoding' => array(
- 'pretty_version' => 'v2.6.3',
- 'version' => '2.6.3.0',
- 'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
+ 'pretty_version' => 'v3.0.0',
+ 'version' => '3.0.0.0',
+ 'reference' => 'df1e7fde177501eee2037dd159cf04f5f301a512',
'type' => 'library',
'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',
'aliases' => array(),
@@ -155,36 +155,45 @@
'dev_requirement' => false,
),
'phpseclib/phpseclib' => array(
- 'pretty_version' => '2.0.47',
- 'version' => '2.0.47.0',
- 'reference' => 'b7d7d90ee7df7f33a664b4aea32d50a305d35adb',
+ 'pretty_version' => '2.0.48',
+ 'version' => '2.0.48.0',
+ 'reference' => 'eaa7be704b8b93a6913b69eb7f645a59d7731b61',
'type' => 'library',
'install_path' => __DIR__ . '/../phpseclib/phpseclib',
'aliases' => array(),
'dev_requirement' => false,
),
+ 'psr/clock' => array(
+ 'pretty_version' => '1.0.0',
+ 'version' => '1.0.0.0',
+ 'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../psr/clock',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'psr/log' => array(
- 'pretty_version' => '2.0.0',
- 'version' => '2.0.0.0',
- 'reference' => 'ef29f6d262798707a9edd554e2b82517ef3a9376',
+ 'pretty_version' => '3.0.2',
+ 'version' => '3.0.2.0',
+ 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/log',
'aliases' => array(),
'dev_requirement' => false,
),
'ramsey/collection' => array(
- 'pretty_version' => '1.2.2',
- 'version' => '1.2.2.0',
- 'reference' => 'cccc74ee5e328031b15640b51056ee8d3bb66c0a',
+ 'pretty_version' => '2.0.0',
+ 'version' => '2.0.0.0',
+ 'reference' => 'a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5',
'type' => 'library',
'install_path' => __DIR__ . '/../ramsey/collection',
'aliases' => array(),
'dev_requirement' => false,
),
'ramsey/uuid' => array(
- 'pretty_version' => '4.7.5',
- 'version' => '4.7.5.0',
- 'reference' => '5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e',
+ 'pretty_version' => '4.7.6',
+ 'version' => '4.7.6.0',
+ 'reference' => '91039bc1faa45ba123c4328958e620d382ec7088',
'type' => 'library',
'install_path' => __DIR__ . '/../ramsey/uuid',
'aliases' => array(),
@@ -193,94 +202,94 @@
'rhumsaa/uuid' => array(
'dev_requirement' => false,
'replaced' => array(
- 0 => '4.7.5',
+ 0 => '4.7.6',
),
),
'sabre/dav' => array(
- 'pretty_version' => '4.6.0',
- 'version' => '4.6.0.0',
- 'reference' => '554145304b4a026477d130928d16e626939b0b2a',
+ 'pretty_version' => '4.7.0',
+ 'version' => '4.7.0.0',
+ 'reference' => '074373bcd689a30bcf5aaa6bbb20a3395964ce7a',
'type' => 'library',
'install_path' => __DIR__ . '/../sabre/dav',
'aliases' => array(),
'dev_requirement' => false,
),
'sabre/event' => array(
- 'pretty_version' => '5.1.4',
- 'version' => '5.1.4.0',
- 'reference' => 'd7da22897125d34d7eddf7977758191c06a74497',
+ 'pretty_version' => '5.1.7',
+ 'version' => '5.1.7.0',
+ 'reference' => '86d57e305c272898ba3c28e9bd3d65d5464587c2',
'type' => 'library',
'install_path' => __DIR__ . '/../sabre/event',
'aliases' => array(),
'dev_requirement' => false,
),
'sabre/http' => array(
- 'pretty_version' => '5.1.6',
- 'version' => '5.1.6.0',
- 'reference' => '9976ac34ced206bd6579b7b37b401de9fac98dae',
+ 'pretty_version' => '5.1.12',
+ 'version' => '5.1.12.0',
+ 'reference' => 'dedff73f3995578bc942fa4c8484190cac14f139',
'type' => 'library',
'install_path' => __DIR__ . '/../sabre/http',
'aliases' => array(),
'dev_requirement' => false,
),
'sabre/uri' => array(
- 'pretty_version' => '2.3.2',
- 'version' => '2.3.2.0',
- 'reference' => 'eceb4a1b8b680b45e215574222d6ca00be541970',
+ 'pretty_version' => '2.3.4',
+ 'version' => '2.3.4.0',
+ 'reference' => 'b76524c22de90d80ca73143680a8e77b1266c291',
'type' => 'library',
'install_path' => __DIR__ . '/../sabre/uri',
'aliases' => array(),
'dev_requirement' => false,
),
'sabre/vobject' => array(
- 'pretty_version' => '4.5.4',
- 'version' => '4.5.4.0',
- 'reference' => 'a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772',
+ 'pretty_version' => '4.5.6',
+ 'version' => '4.5.6.0',
+ 'reference' => '900266bb3bd448a9f7f41f82344ad0aba237cb27',
'type' => 'library',
'install_path' => __DIR__ . '/../sabre/vobject',
'aliases' => array(),
'dev_requirement' => false,
),
'sabre/xml' => array(
- 'pretty_version' => '2.2.5',
- 'version' => '2.2.5.0',
- 'reference' => 'a6af111850e7536d200d9637c34885cd3c77a86c',
+ 'pretty_version' => '2.2.11',
+ 'version' => '2.2.11.0',
+ 'reference' => '01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc',
'type' => 'library',
'install_path' => __DIR__ . '/../sabre/xml',
'aliases' => array(),
'dev_requirement' => false,
),
'scssphp/scssphp' => array(
- 'pretty_version' => 'v1.12.1',
- 'version' => '1.12.1.0',
- 'reference' => '394ed1e960138710a60d035c1a85d43d0bf0faeb',
+ 'pretty_version' => 'v1.13.0',
+ 'version' => '1.13.0.0',
+ 'reference' => '63d1157457e5554edf00b0c1fabab4c1511d2520',
'type' => 'library',
'install_path' => __DIR__ . '/../scssphp/scssphp',
'aliases' => array(),
'dev_requirement' => false,
),
'simplepie/simplepie' => array(
- 'pretty_version' => '1.8.0',
- 'version' => '1.8.0.0',
- 'reference' => '65b095d87bc00898d8fa7737bdbcda93a3fbcc55',
+ 'pretty_version' => '1.8.1',
+ 'version' => '1.8.1.0',
+ 'reference' => 'a567b8ab9b6145a23e6a9ec2b6b74f56d52f7ad1',
'type' => 'library',
'install_path' => __DIR__ . '/../simplepie/simplepie',
'aliases' => array(),
'dev_requirement' => false,
),
'smarty/smarty' => array(
- 'pretty_version' => 'v4.5.4',
- 'version' => '4.5.4.0',
- 'reference' => 'c11676e85aa71bc7c3cd9100f1655a9f4d14616e',
+ 'pretty_version' => 'v5.4.3',
+ 'version' => '5.4.3.0',
+ 'reference' => 'c6bff5795081ca5e60aabda59fb87daa511acd1e',
'type' => 'library',
'install_path' => __DIR__ . '/../smarty/smarty',
'aliases' => array(),
'dev_requirement' => false,
),
'spomky-labs/otphp' => array(
- 'pretty_version' => '11.2.0',
- 'version' => '11.2.0.0',
- 'reference' => '9a1569038bb1c8e98040b14b8bcbba54f25e7795',
+ 'pretty_version' => '11.3.0',
+ 'version' => '11.3.0.0',
+ 'reference' => '2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33',
'type' => 'library',
'install_path' => __DIR__ . '/../spomky-labs/otphp',
'aliases' => array(),
@@ -295,12 +304,21 @@
'aliases' => array(),
'dev_requirement' => false,
),
- 'symfony/polyfill-php81' => array(
- 'pretty_version' => 'v1.29.0',
- 'version' => '1.29.0.0',
- 'reference' => 'c565ad1e63f30e7477fc40738343c62b40bc672d',
+ 'symfony/deprecation-contracts' => array(
+ 'pretty_version' => 'v3.5.1',
+ 'version' => '3.5.1.0',
+ 'reference' => '74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
+ 'symfony/polyfill-mbstring' => array(
+ 'pretty_version' => 'v1.31.0',
+ 'version' => '1.31.0.0',
+ 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341',
'type' => 'library',
- 'install_path' => __DIR__ . '/../symfony/polyfill-php81',
+ 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
'aliases' => array(),
'dev_requirement' => false,
),
@@ -329,9 +347,9 @@
),
),
'voku/portable-ascii' => array(
- 'pretty_version' => '2.0.1',
- 'version' => '2.0.1.0',
- 'reference' => 'b56450eed252f6801410d810c8e1727224ae0743',
+ 'pretty_version' => '2.0.3',
+ 'version' => '2.0.3.0',
+ 'reference' => 'b1d923f88091c6bf09699efcd7c8a1b1bfd7351d',
'type' => 'library',
'install_path' => __DIR__ . '/../voku/portable-ascii',
'aliases' => array(),
@@ -349,7 +367,7 @@
'zotlabs/hubzilla' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => 'c12ef4fbf4b2046e0af68b11e8fe5af2d335f32e',
+ 'reference' => 'cfcac590c3a5d183db3a496fa2e9be344b599705',
'type' => 'application',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
diff --git a/vendor/ezyang/htmlpurifier/VERSION b/vendor/ezyang/htmlpurifier/VERSION
index 8643e7227..ef8ffbdd9 100644
--- a/vendor/ezyang/htmlpurifier/VERSION
+++ b/vendor/ezyang/htmlpurifier/VERSION
@@ -1 +1 @@
-4.17.0 \ No newline at end of file
+4.18.0 \ No newline at end of file
diff --git a/vendor/ezyang/htmlpurifier/composer.json b/vendor/ezyang/htmlpurifier/composer.json
index ed46bd5cf..7799d1d22 100644
--- a/vendor/ezyang/htmlpurifier/composer.json
+++ b/vendor/ezyang/htmlpurifier/composer.json
@@ -13,7 +13,7 @@
}
],
"require": {
- "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
"cerdic/css-tidy": "^1.7 || ^2.0",
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php
index 77ebf2de7..4c713a33a 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php
@@ -7,7 +7,7 @@
* primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
* FILE, changes will be overwritten the next time the script is run.
*
- * @version 4.17.0
+ * @version 4.18.0
*
* @warning
* You must *not* include any other HTML Purifier files before this file,
@@ -101,6 +101,7 @@ require 'HTMLPurifier/AttrDef/CSS/Length.php';
require 'HTMLPurifier/AttrDef/CSS/ListStyle.php';
require 'HTMLPurifier/AttrDef/CSS/Multiple.php';
require 'HTMLPurifier/AttrDef/CSS/Percentage.php';
+require 'HTMLPurifier/AttrDef/CSS/Ratio.php';
require 'HTMLPurifier/AttrDef/CSS/TextDecoration.php';
require 'HTMLPurifier/AttrDef/CSS/URI.php';
require 'HTMLPurifier/AttrDef/HTML/Bool.php';
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php
index 5c14a335d..e3bca8a22 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php
@@ -19,7 +19,7 @@
*/
/*
- HTML Purifier 4.17.0 - Standards Compliant HTML Filtering
+ HTML Purifier 4.18.0 - Standards Compliant HTML Filtering
Copyright (C) 2006-2008 Edward Z. Yang
This library is free software; you can redistribute it and/or
@@ -58,12 +58,12 @@ class HTMLPurifier
* Version of HTML Purifier.
* @type string
*/
- public $version = '4.17.0';
+ public $version = '4.18.0';
/**
* Constant with version of HTML Purifier.
*/
- const VERSION = '4.17.0';
+ const VERSION = '4.18.0';
/**
* Global configuration object.
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php
index 94543f593..8a417d246 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php
@@ -95,6 +95,7 @@ require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Length.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ListStyle.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Multiple.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Percentage.php';
+require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Ratio.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/TextDecoration.php';
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/URI.php';
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Bool.php';
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php
index ad2cb90ad..af6b8a05d 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php
@@ -27,6 +27,13 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
$definition = $config->getCSSDefinition();
$allow_duplicates = $config->get("CSS.AllowDuplicates");
+ $universal_attrdef = new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'initial',
+ 'inherit',
+ 'unset',
+ )
+ );
// According to the CSS2.1 spec, the places where a
// non-delimiting semicolon can appear are in strings
@@ -96,16 +103,13 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
if (!$ok) {
continue;
}
- // inefficient call, since the validator will do this again
- if (strtolower(trim($value)) !== 'inherit') {
- // inherit works for everything (but only on the base property)
+ $result = $universal_attrdef->validate($value, $config, $context);
+ if ($result === false) {
$result = $definition->info[$property]->validate(
$value,
$config,
$context
);
- } else {
- $result = 'inherit';
}
if ($result === false) {
continue;
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php
new file mode 100644
index 000000000..e08e2c496
--- /dev/null
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Validates a ratio as defined by the CSS spec.
+ */
+class HTMLPurifier_AttrDef_CSS_Ratio extends HTMLPurifier_AttrDef
+{
+ /**
+ * @param string $ratio Ratio to validate
+ * @param HTMLPurifier_Config $config Configuration options
+ * @param HTMLPurifier_Context $context Context
+ *
+ * @return string|boolean
+ *
+ * @warning Some contexts do not pass $config, $context. These
+ * variables should not be used without checking HTMLPurifier_Length
+ */
+ public function validate($ratio, $config, $context)
+ {
+ $ratio = $this->parseCDATA($ratio);
+
+ $parts = explode('/', $ratio, 2);
+ $length = count($parts);
+
+ if ($length < 1 || $length > 2) {
+ return false;
+ }
+
+ $num = new \HTMLPurifier_AttrDef_CSS_Number();
+
+ if ($length === 1) {
+ return $num->validate($parts[0], $config, $context);
+ }
+
+ $num1 = $num->validate($parts[0], $config, $context);
+ $num2 = $num->validate($parts[1], $config, $context);
+
+ if ($num1 === false || $num2 === false) {
+ return false;
+ }
+
+ return $num1 . '/' . $num2;
+ }
+}
+
+// vim: et sw=4 sts=4
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php
index ddc5dfbea..17a97c1ec 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php
@@ -63,24 +63,18 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef
// This doesn't match I18N domain names, but we don't have proper IRI support,
// so force users to insert Punycode.
- // There is not a good sense in which underscores should be
- // allowed, since it's technically not! (And if you go as
- // far to allow everything as specified by the DNS spec...
- // well, that's literally everything, modulo some space limits
- // for the components and the overall name (which, by the way,
- // we are NOT checking!). So we (arbitrarily) decide this:
- // let's allow underscores wherever we would have allowed
- // hyphens, if they are enabled. This is a pretty good match
- // for browser behavior, for example, a large number of browsers
- // cannot handle foo_.example.com, but foo_bar.example.com is
- // fairly well supported.
+ // Underscores defined as Unreserved Characters in RFC 3986 are
+ // allowed in a URI. There are cases where we want to consider a
+ // URI containing "_" such as "_dmarc.example.com".
+ // Underscores are not allowed in the default. If you want to
+ // allow it, set Core.AllowHostnameUnderscore to true.
$underscore = $config->get('Core.AllowHostnameUnderscore') ? '_' : '';
// Based off of RFC 1738, but amended so that
// as per RFC 3696, the top label need only not be all numeric.
// The productions describing this are:
$a = '[a-z]'; // alpha
- $an = '[a-z0-9]'; // alphanum
+ $an = "[a-z0-9$underscore]"; // alphanum
$and = "[a-z0-9-$underscore]"; // alphanum | "-"
// domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
$domainlabel = "$an(?:$and*$an)?";
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php
index 1bc419c53..3732c076a 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php
@@ -116,8 +116,6 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
'auto',
'cover',
'contain',
- 'initial',
- 'inherit',
]
),
new HTMLPurifier_AttrDef_CSS_Percentage(),
@@ -236,21 +234,20 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
[
new HTMLPurifier_AttrDef_CSS_Length('0'),
new HTMLPurifier_AttrDef_CSS_Percentage(true),
- new HTMLPurifier_AttrDef_Enum(['auto', 'initial', 'inherit'])
+ new HTMLPurifier_AttrDef_Enum(['auto'])
]
);
$trusted_min_wh = new HTMLPurifier_AttrDef_CSS_Composite(
[
new HTMLPurifier_AttrDef_CSS_Length('0'),
new HTMLPurifier_AttrDef_CSS_Percentage(true),
- new HTMLPurifier_AttrDef_Enum(['initial', 'inherit'])
]
);
$trusted_max_wh = new HTMLPurifier_AttrDef_CSS_Composite(
[
new HTMLPurifier_AttrDef_CSS_Length('0'),
new HTMLPurifier_AttrDef_CSS_Percentage(true),
- new HTMLPurifier_AttrDef_Enum(['none', 'initial', 'inherit'])
+ new HTMLPurifier_AttrDef_Enum(['none'])
]
);
$max = $config->get('CSS.MaxImgLength');
@@ -278,12 +275,7 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
new HTMLPurifier_AttrDef_Switch(
'img',
// For img tags:
- new HTMLPurifier_AttrDef_CSS_Composite(
- [
- new HTMLPurifier_AttrDef_CSS_Length('0', $max),
- new HTMLPurifier_AttrDef_Enum(['initial', 'inherit'])
- ]
- ),
+ new HTMLPurifier_AttrDef_CSS_Length('0', $max),
// For everyone else:
$trusted_min_wh
);
@@ -297,22 +289,29 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
new HTMLPurifier_AttrDef_CSS_Composite(
[
new HTMLPurifier_AttrDef_CSS_Length('0', $max),
- new HTMLPurifier_AttrDef_Enum(['none', 'initial', 'inherit'])
+ new HTMLPurifier_AttrDef_Enum(['none'])
]
),
// For everyone else:
$trusted_max_wh
);
+ $this->info['aspect-ratio'] = new HTMLPurifier_AttrDef_CSS_Multiple(
+ new HTMLPurifier_AttrDef_CSS_Composite([
+ new HTMLPurifier_AttrDef_CSS_Ratio(),
+ new HTMLPurifier_AttrDef_Enum(['auto']),
+ ])
+ );
+
// text-decoration and related shorthands
$this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration();
$this->info['text-decoration-line'] = new HTMLPurifier_AttrDef_Enum(
- ['none', 'underline', 'overline', 'line-through', 'initial', 'inherit']
+ ['none', 'underline', 'overline', 'line-through']
);
$this->info['text-decoration-style'] = new HTMLPurifier_AttrDef_Enum(
- ['solid', 'double', 'dotted', 'dashed', 'wavy', 'initial', 'inherit']
+ ['solid', 'double', 'dotted', 'dashed', 'wavy']
);
$this->info['text-decoration-color'] = new HTMLPurifier_AttrDef_CSS_Color();
@@ -320,7 +319,7 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
$this->info['text-decoration-thickness'] = new HTMLPurifier_AttrDef_CSS_Composite([
new HTMLPurifier_AttrDef_CSS_Length(),
new HTMLPurifier_AttrDef_CSS_Percentage(),
- new HTMLPurifier_AttrDef_Enum(['auto', 'from-font', 'initial', 'inherit'])
+ new HTMLPurifier_AttrDef_Enum(['auto', 'from-font'])
]);
$this->info['font-family'] = new HTMLPurifier_AttrDef_CSS_FontFamily();
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php
index 67c7e9535..d92205b32 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php
@@ -190,6 +190,9 @@ class HTMLPurifier_ChildDef_Table extends HTMLPurifier_ChildDef
$current_tr_tbody = null;
foreach($content as $node) {
+ if (!isset($node->name)) {
+ continue;
+ }
switch ($node->name) {
case 'tbody':
$current_tr_tbody = null;
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php
index f7511ca41..e6566e802 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php
@@ -21,7 +21,7 @@ class HTMLPurifier_Config
* HTML Purifier's version
* @type string
*/
- public $version = '4.17.0';
+ public $version = '4.18.0';
/**
* Whether or not to automatically finalize
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema.ser b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema.ser
index a5426c736..3cd756bee 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema.ser
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema.ser
@@ -1 +1 @@
-O:25:"HTMLPurifier_ConfigSchema":3:{s:8:"defaults";a:127:{s:19:"Attr.AllowedClasses";N;s:24:"Attr.AllowedFrameTargets";a:0:{}s:15:"Attr.AllowedRel";a:0:{}s:15:"Attr.AllowedRev";a:0:{}s:18:"Attr.ClassUseCDATA";N;s:20:"Attr.DefaultImageAlt";N;s:24:"Attr.DefaultInvalidImage";s:0:"";s:27:"Attr.DefaultInvalidImageAlt";s:13:"Invalid image";s:19:"Attr.DefaultTextDir";s:3:"ltr";s:13:"Attr.EnableID";b:0;s:21:"Attr.ForbiddenClasses";a:0:{}s:13:"Attr.ID.HTML5";N;s:16:"Attr.IDBlacklist";a:0:{}s:22:"Attr.IDBlacklistRegexp";N;s:13:"Attr.IDPrefix";s:0:"";s:18:"Attr.IDPrefixLocal";s:0:"";s:24:"AutoFormat.AutoParagraph";b:0;s:17:"AutoFormat.Custom";a:0:{}s:25:"AutoFormat.DisplayLinkURI";b:0;s:18:"AutoFormat.Linkify";b:0;s:33:"AutoFormat.PurifierLinkify.DocURL";s:3:"#%s";s:26:"AutoFormat.PurifierLinkify";b:0;s:32:"AutoFormat.RemoveEmpty.Predicate";a:4:{s:8:"colgroup";a:0:{}s:2:"th";a:0:{}s:2:"td";a:0:{}s:6:"iframe";a:1:{i:0;s:3:"src";}}s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";a:2:{s:2:"td";b:1;s:2:"th";b:1;}s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";b:0;s:22:"AutoFormat.RemoveEmpty";b:0;s:39:"AutoFormat.RemoveSpansWithoutAttributes";b:0;s:19:"CSS.AllowDuplicates";b:0;s:18:"CSS.AllowImportant";b:0;s:15:"CSS.AllowTricky";b:0;s:16:"CSS.AllowedFonts";N;s:21:"CSS.AllowedProperties";N;s:17:"CSS.DefinitionRev";i:1;s:23:"CSS.ForbiddenProperties";a:0:{}s:16:"CSS.MaxImgLength";s:6:"1200px";s:15:"CSS.Proprietary";b:0;s:11:"CSS.Trusted";b:0;s:20:"Cache.DefinitionImpl";s:10:"Serializer";s:20:"Cache.SerializerPath";N;s:27:"Cache.SerializerPermissions";i:493;s:22:"Core.AggressivelyFixLt";b:1;s:29:"Core.AggressivelyRemoveScript";b:1;s:28:"Core.AllowHostnameUnderscore";b:0;s:23:"Core.AllowParseManyTags";b:0;s:18:"Core.CollectErrors";b:0;s:18:"Core.ColorKeywords";a:148:{s:9:"aliceblue";s:7:"#F0F8FF";s:12:"antiquewhite";s:7:"#FAEBD7";s:4:"aqua";s:7:"#00FFFF";s:10:"aquamarine";s:7:"#7FFFD4";s:5:"azure";s:7:"#F0FFFF";s:5:"beige";s:7:"#F5F5DC";s:6:"bisque";s:7:"#FFE4C4";s:5:"black";s:7:"#000000";s:14:"blanchedalmond";s:7:"#FFEBCD";s:4:"blue";s:7:"#0000FF";s:10:"blueviolet";s:7:"#8A2BE2";s:5:"brown";s:7:"#A52A2A";s:9:"burlywood";s:7:"#DEB887";s:9:"cadetblue";s:7:"#5F9EA0";s:10:"chartreuse";s:7:"#7FFF00";s:9:"chocolate";s:7:"#D2691E";s:5:"coral";s:7:"#FF7F50";s:14:"cornflowerblue";s:7:"#6495ED";s:8:"cornsilk";s:7:"#FFF8DC";s:7:"crimson";s:7:"#DC143C";s:4:"cyan";s:7:"#00FFFF";s:8:"darkblue";s:7:"#00008B";s:8:"darkcyan";s:7:"#008B8B";s:13:"darkgoldenrod";s:7:"#B8860B";s:8:"darkgray";s:7:"#A9A9A9";s:8:"darkgrey";s:7:"#A9A9A9";s:9:"darkgreen";s:7:"#006400";s:9:"darkkhaki";s:7:"#BDB76B";s:11:"darkmagenta";s:7:"#8B008B";s:14:"darkolivegreen";s:7:"#556B2F";s:10:"darkorange";s:7:"#FF8C00";s:10:"darkorchid";s:7:"#9932CC";s:7:"darkred";s:7:"#8B0000";s:10:"darksalmon";s:7:"#E9967A";s:12:"darkseagreen";s:7:"#8FBC8F";s:13:"darkslateblue";s:7:"#483D8B";s:13:"darkslategray";s:7:"#2F4F4F";s:13:"darkslategrey";s:7:"#2F4F4F";s:13:"darkturquoise";s:7:"#00CED1";s:10:"darkviolet";s:7:"#9400D3";s:8:"deeppink";s:7:"#FF1493";s:11:"deepskyblue";s:7:"#00BFFF";s:7:"dimgray";s:7:"#696969";s:7:"dimgrey";s:7:"#696969";s:10:"dodgerblue";s:7:"#1E90FF";s:9:"firebrick";s:7:"#B22222";s:11:"floralwhite";s:7:"#FFFAF0";s:11:"forestgreen";s:7:"#228B22";s:7:"fuchsia";s:7:"#FF00FF";s:9:"gainsboro";s:7:"#DCDCDC";s:10:"ghostwhite";s:7:"#F8F8FF";s:4:"gold";s:7:"#FFD700";s:9:"goldenrod";s:7:"#DAA520";s:4:"gray";s:7:"#808080";s:4:"grey";s:7:"#808080";s:5:"green";s:7:"#008000";s:11:"greenyellow";s:7:"#ADFF2F";s:8:"honeydew";s:7:"#F0FFF0";s:7:"hotpink";s:7:"#FF69B4";s:9:"indianred";s:7:"#CD5C5C";s:6:"indigo";s:7:"#4B0082";s:5:"ivory";s:7:"#FFFFF0";s:5:"khaki";s:7:"#F0E68C";s:8:"lavender";s:7:"#E6E6FA";s:13:"lavenderblush";s:7:"#FFF0F5";s:9:"lawngreen";s:7:"#7CFC00";s:12:"lemonchiffon";s:7:"#FFFACD";s:9:"lightblue";s:7:"#ADD8E6";s:10:"lightcoral";s:7:"#F08080";s:9:"lightcyan";s:7:"#E0FFFF";s:20:"lightgoldenrodyellow";s:7:"#FAFAD2";s:9:"lightgray";s:7:"#D3D3D3";s:9:"lightgrey";s:7:"#D3D3D3";s:10:"lightgreen";s:7:"#90EE90";s:9:"lightpink";s:7:"#FFB6C1";s:11:"lightsalmon";s:7:"#FFA07A";s:13:"lightseagreen";s:7:"#20B2AA";s:12:"lightskyblue";s:7:"#87CEFA";s:14:"lightslategray";s:7:"#778899";s:14:"lightslategrey";s:7:"#778899";s:14:"lightsteelblue";s:7:"#B0C4DE";s:11:"lightyellow";s:7:"#FFFFE0";s:4:"lime";s:7:"#00FF00";s:9:"limegreen";s:7:"#32CD32";s:5:"linen";s:7:"#FAF0E6";s:7:"magenta";s:7:"#FF00FF";s:6:"maroon";s:7:"#800000";s:16:"mediumaquamarine";s:7:"#66CDAA";s:10:"mediumblue";s:7:"#0000CD";s:12:"mediumorchid";s:7:"#BA55D3";s:12:"mediumpurple";s:7:"#9370DB";s:14:"mediumseagreen";s:7:"#3CB371";s:15:"mediumslateblue";s:7:"#7B68EE";s:17:"mediumspringgreen";s:7:"#00FA9A";s:15:"mediumturquoise";s:7:"#48D1CC";s:15:"mediumvioletred";s:7:"#C71585";s:12:"midnightblue";s:7:"#191970";s:9:"mintcream";s:7:"#F5FFFA";s:9:"mistyrose";s:7:"#FFE4E1";s:8:"moccasin";s:7:"#FFE4B5";s:11:"navajowhite";s:7:"#FFDEAD";s:4:"navy";s:7:"#000080";s:7:"oldlace";s:7:"#FDF5E6";s:5:"olive";s:7:"#808000";s:9:"olivedrab";s:7:"#6B8E23";s:6:"orange";s:7:"#FFA500";s:9:"orangered";s:7:"#FF4500";s:6:"orchid";s:7:"#DA70D6";s:13:"palegoldenrod";s:7:"#EEE8AA";s:9:"palegreen";s:7:"#98FB98";s:13:"paleturquoise";s:7:"#AFEEEE";s:13:"palevioletred";s:7:"#DB7093";s:10:"papayawhip";s:7:"#FFEFD5";s:9:"peachpuff";s:7:"#FFDAB9";s:4:"peru";s:7:"#CD853F";s:4:"pink";s:7:"#FFC0CB";s:4:"plum";s:7:"#DDA0DD";s:10:"powderblue";s:7:"#B0E0E6";s:6:"purple";s:7:"#800080";s:13:"rebeccapurple";s:7:"#663399";s:3:"red";s:7:"#FF0000";s:9:"rosybrown";s:7:"#BC8F8F";s:9:"royalblue";s:7:"#4169E1";s:11:"saddlebrown";s:7:"#8B4513";s:6:"salmon";s:7:"#FA8072";s:10:"sandybrown";s:7:"#F4A460";s:8:"seagreen";s:7:"#2E8B57";s:8:"seashell";s:7:"#FFF5EE";s:6:"sienna";s:7:"#A0522D";s:6:"silver";s:7:"#C0C0C0";s:7:"skyblue";s:7:"#87CEEB";s:9:"slateblue";s:7:"#6A5ACD";s:9:"slategray";s:7:"#708090";s:9:"slategrey";s:7:"#708090";s:4:"snow";s:7:"#FFFAFA";s:11:"springgreen";s:7:"#00FF7F";s:9:"steelblue";s:7:"#4682B4";s:3:"tan";s:7:"#D2B48C";s:4:"teal";s:7:"#008080";s:7:"thistle";s:7:"#D8BFD8";s:6:"tomato";s:7:"#FF6347";s:9:"turquoise";s:7:"#40E0D0";s:6:"violet";s:7:"#EE82EE";s:5:"wheat";s:7:"#F5DEB3";s:5:"white";s:7:"#FFFFFF";s:10:"whitesmoke";s:7:"#F5F5F5";s:6:"yellow";s:7:"#FFFF00";s:11:"yellowgreen";s:7:"#9ACD32";}s:30:"Core.ConvertDocumentToFragment";b:1;s:36:"Core.DirectLexLineNumberSyncInterval";i:0;s:20:"Core.DisableExcludes";b:0;s:15:"Core.EnableIDNA";b:0;s:13:"Core.Encoding";s:5:"utf-8";s:26:"Core.EscapeInvalidChildren";b:0;s:22:"Core.EscapeInvalidTags";b:0;s:29:"Core.EscapeNonASCIICharacters";b:0;s:19:"Core.HiddenElements";a:2:{s:6:"script";b:1;s:5:"style";b:1;}s:13:"Core.Language";s:2:"en";s:24:"Core.LegacyEntityDecoder";b:0;s:14:"Core.LexerImpl";N;s:24:"Core.MaintainLineNumbers";N;s:22:"Core.NormalizeNewlines";b:1;s:21:"Core.RemoveInvalidImg";b:1;s:33:"Core.RemoveProcessingInstructions";b:0;s:25:"Core.RemoveScriptContents";N;s:13:"Filter.Custom";a:0:{}s:34:"Filter.ExtractStyleBlocks.Escaping";b:1;s:31:"Filter.ExtractStyleBlocks.Scope";N;s:34:"Filter.ExtractStyleBlocks.TidyImpl";N;s:25:"Filter.ExtractStyleBlocks";b:0;s:14:"Filter.YouTube";b:0;s:12:"HTML.Allowed";N;s:22:"HTML.AllowedAttributes";N;s:20:"HTML.AllowedComments";a:0:{}s:26:"HTML.AllowedCommentsRegexp";N;s:20:"HTML.AllowedElements";N;s:19:"HTML.AllowedModules";N;s:23:"HTML.Attr.Name.UseCDATA";b:0;s:17:"HTML.BlockWrapper";s:1:"p";s:16:"HTML.CoreModules";a:7:{s:9:"Structure";b:1;s:4:"Text";b:1;s:9:"Hypertext";b:1;s:4:"List";b:1;s:22:"NonXMLCommonAttributes";b:1;s:19:"XMLCommonAttributes";b:1;s:16:"CommonAttributes";b:1;}s:18:"HTML.CustomDoctype";N;s:17:"HTML.DefinitionID";N;s:18:"HTML.DefinitionRev";i:1;s:12:"HTML.Doctype";N;s:25:"HTML.FlashAllowFullScreen";b:0;s:24:"HTML.ForbiddenAttributes";a:0:{}s:22:"HTML.ForbiddenElements";a:0:{}s:10:"HTML.Forms";b:0;s:17:"HTML.MaxImgLength";i:1200;s:13:"HTML.Nofollow";b:0;s:11:"HTML.Parent";s:3:"div";s:16:"HTML.Proprietary";b:0;s:14:"HTML.SafeEmbed";b:0;s:15:"HTML.SafeIframe";b:0;s:15:"HTML.SafeObject";b:0;s:18:"HTML.SafeScripting";a:0:{}s:11:"HTML.Strict";b:0;s:16:"HTML.TargetBlank";b:0;s:19:"HTML.TargetNoopener";b:1;s:21:"HTML.TargetNoreferrer";b:1;s:12:"HTML.TidyAdd";a:0:{}s:14:"HTML.TidyLevel";s:6:"medium";s:15:"HTML.TidyRemove";a:0:{}s:12:"HTML.Trusted";b:0;s:10:"HTML.XHTML";b:1;s:28:"Output.CommentScriptContents";b:1;s:19:"Output.FixInnerHTML";b:1;s:18:"Output.FlashCompat";b:0;s:14:"Output.Newline";N;s:15:"Output.SortAttr";b:0;s:17:"Output.TidyFormat";b:0;s:17:"Test.ForceNoIconv";b:0;s:18:"URI.AllowedSchemes";a:7:{s:4:"http";b:1;s:5:"https";b:1;s:6:"mailto";b:1;s:3:"ftp";b:1;s:4:"nntp";b:1;s:4:"news";b:1;s:3:"tel";b:1;}s:8:"URI.Base";N;s:17:"URI.DefaultScheme";s:4:"http";s:16:"URI.DefinitionID";N;s:17:"URI.DefinitionRev";i:1;s:11:"URI.Disable";b:0;s:19:"URI.DisableExternal";b:0;s:28:"URI.DisableExternalResources";b:0;s:20:"URI.DisableResources";b:0;s:8:"URI.Host";N;s:17:"URI.HostBlacklist";a:0:{}s:16:"URI.MakeAbsolute";b:0;s:9:"URI.Munge";N;s:18:"URI.MungeResources";b:0;s:18:"URI.MungeSecretKey";N;s:26:"URI.OverrideAllowedSchemes";b:1;s:20:"URI.SafeIframeRegexp";N;}s:12:"defaultPlist";O:25:"HTMLPurifier_PropertyList":3:{s:7:"
+O:25:"HTMLPurifier_ConfigSchema":3:{s:8:"defaults";a:128:{s:19:"Attr.AllowedClasses";N;s:24:"Attr.AllowedFrameTargets";a:0:{}s:15:"Attr.AllowedRel";a:0:{}s:15:"Attr.AllowedRev";a:0:{}s:18:"Attr.ClassUseCDATA";N;s:20:"Attr.DefaultImageAlt";N;s:24:"Attr.DefaultInvalidImage";s:0:"";s:27:"Attr.DefaultInvalidImageAlt";s:13:"Invalid image";s:19:"Attr.DefaultTextDir";s:3:"ltr";s:13:"Attr.EnableID";b:0;s:21:"Attr.ForbiddenClasses";a:0:{}s:13:"Attr.ID.HTML5";N;s:16:"Attr.IDBlacklist";a:0:{}s:22:"Attr.IDBlacklistRegexp";N;s:13:"Attr.IDPrefix";s:0:"";s:18:"Attr.IDPrefixLocal";s:0:"";s:24:"AutoFormat.AutoParagraph";b:0;s:17:"AutoFormat.Custom";a:0:{}s:25:"AutoFormat.DisplayLinkURI";b:0;s:18:"AutoFormat.Linkify";b:0;s:33:"AutoFormat.PurifierLinkify.DocURL";s:3:"#%s";s:26:"AutoFormat.PurifierLinkify";b:0;s:32:"AutoFormat.RemoveEmpty.Predicate";a:4:{s:8:"colgroup";a:0:{}s:2:"th";a:0:{}s:2:"td";a:0:{}s:6:"iframe";a:1:{i:0;s:3:"src";}}s:44:"AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions";a:2:{s:2:"td";b:1;s:2:"th";b:1;}s:33:"AutoFormat.RemoveEmpty.RemoveNbsp";b:0;s:22:"AutoFormat.RemoveEmpty";b:0;s:39:"AutoFormat.RemoveSpansWithoutAttributes";b:0;s:19:"CSS.AllowDuplicates";b:0;s:18:"CSS.AllowImportant";b:0;s:15:"CSS.AllowTricky";b:0;s:16:"CSS.AllowedFonts";N;s:21:"CSS.AllowedProperties";N;s:17:"CSS.DefinitionRev";i:1;s:23:"CSS.ForbiddenProperties";a:0:{}s:16:"CSS.MaxImgLength";s:6:"1200px";s:15:"CSS.Proprietary";b:0;s:11:"CSS.Trusted";b:0;s:20:"Cache.DefinitionImpl";s:10:"Serializer";s:20:"Cache.SerializerPath";N;s:27:"Cache.SerializerPermissions";i:493;s:22:"Core.AggressivelyFixLt";b:1;s:29:"Core.AggressivelyRemoveScript";b:1;s:28:"Core.AllowHostnameUnderscore";b:0;s:23:"Core.AllowParseManyTags";b:0;s:18:"Core.CollectErrors";b:0;s:18:"Core.ColorKeywords";a:148:{s:9:"aliceblue";s:7:"#F0F8FF";s:12:"antiquewhite";s:7:"#FAEBD7";s:4:"aqua";s:7:"#00FFFF";s:10:"aquamarine";s:7:"#7FFFD4";s:5:"azure";s:7:"#F0FFFF";s:5:"beige";s:7:"#F5F5DC";s:6:"bisque";s:7:"#FFE4C4";s:5:"black";s:7:"#000000";s:14:"blanchedalmond";s:7:"#FFEBCD";s:4:"blue";s:7:"#0000FF";s:10:"blueviolet";s:7:"#8A2BE2";s:5:"brown";s:7:"#A52A2A";s:9:"burlywood";s:7:"#DEB887";s:9:"cadetblue";s:7:"#5F9EA0";s:10:"chartreuse";s:7:"#7FFF00";s:9:"chocolate";s:7:"#D2691E";s:5:"coral";s:7:"#FF7F50";s:14:"cornflowerblue";s:7:"#6495ED";s:8:"cornsilk";s:7:"#FFF8DC";s:7:"crimson";s:7:"#DC143C";s:4:"cyan";s:7:"#00FFFF";s:8:"darkblue";s:7:"#00008B";s:8:"darkcyan";s:7:"#008B8B";s:13:"darkgoldenrod";s:7:"#B8860B";s:8:"darkgray";s:7:"#A9A9A9";s:8:"darkgrey";s:7:"#A9A9A9";s:9:"darkgreen";s:7:"#006400";s:9:"darkkhaki";s:7:"#BDB76B";s:11:"darkmagenta";s:7:"#8B008B";s:14:"darkolivegreen";s:7:"#556B2F";s:10:"darkorange";s:7:"#FF8C00";s:10:"darkorchid";s:7:"#9932CC";s:7:"darkred";s:7:"#8B0000";s:10:"darksalmon";s:7:"#E9967A";s:12:"darkseagreen";s:7:"#8FBC8F";s:13:"darkslateblue";s:7:"#483D8B";s:13:"darkslategray";s:7:"#2F4F4F";s:13:"darkslategrey";s:7:"#2F4F4F";s:13:"darkturquoise";s:7:"#00CED1";s:10:"darkviolet";s:7:"#9400D3";s:8:"deeppink";s:7:"#FF1493";s:11:"deepskyblue";s:7:"#00BFFF";s:7:"dimgray";s:7:"#696969";s:7:"dimgrey";s:7:"#696969";s:10:"dodgerblue";s:7:"#1E90FF";s:9:"firebrick";s:7:"#B22222";s:11:"floralwhite";s:7:"#FFFAF0";s:11:"forestgreen";s:7:"#228B22";s:7:"fuchsia";s:7:"#FF00FF";s:9:"gainsboro";s:7:"#DCDCDC";s:10:"ghostwhite";s:7:"#F8F8FF";s:4:"gold";s:7:"#FFD700";s:9:"goldenrod";s:7:"#DAA520";s:4:"gray";s:7:"#808080";s:4:"grey";s:7:"#808080";s:5:"green";s:7:"#008000";s:11:"greenyellow";s:7:"#ADFF2F";s:8:"honeydew";s:7:"#F0FFF0";s:7:"hotpink";s:7:"#FF69B4";s:9:"indianred";s:7:"#CD5C5C";s:6:"indigo";s:7:"#4B0082";s:5:"ivory";s:7:"#FFFFF0";s:5:"khaki";s:7:"#F0E68C";s:8:"lavender";s:7:"#E6E6FA";s:13:"lavenderblush";s:7:"#FFF0F5";s:9:"lawngreen";s:7:"#7CFC00";s:12:"lemonchiffon";s:7:"#FFFACD";s:9:"lightblue";s:7:"#ADD8E6";s:10:"lightcoral";s:7:"#F08080";s:9:"lightcyan";s:7:"#E0FFFF";s:20:"lightgoldenrodyellow";s:7:"#FAFAD2";s:9:"lightgray";s:7:"#D3D3D3";s:9:"lightgrey";s:7:"#D3D3D3";s:10:"lightgreen";s:7:"#90EE90";s:9:"lightpink";s:7:"#FFB6C1";s:11:"lightsalmon";s:7:"#FFA07A";s:13:"lightseagreen";s:7:"#20B2AA";s:12:"lightskyblue";s:7:"#87CEFA";s:14:"lightslategray";s:7:"#778899";s:14:"lightslategrey";s:7:"#778899";s:14:"lightsteelblue";s:7:"#B0C4DE";s:11:"lightyellow";s:7:"#FFFFE0";s:4:"lime";s:7:"#00FF00";s:9:"limegreen";s:7:"#32CD32";s:5:"linen";s:7:"#FAF0E6";s:7:"magenta";s:7:"#FF00FF";s:6:"maroon";s:7:"#800000";s:16:"mediumaquamarine";s:7:"#66CDAA";s:10:"mediumblue";s:7:"#0000CD";s:12:"mediumorchid";s:7:"#BA55D3";s:12:"mediumpurple";s:7:"#9370DB";s:14:"mediumseagreen";s:7:"#3CB371";s:15:"mediumslateblue";s:7:"#7B68EE";s:17:"mediumspringgreen";s:7:"#00FA9A";s:15:"mediumturquoise";s:7:"#48D1CC";s:15:"mediumvioletred";s:7:"#C71585";s:12:"midnightblue";s:7:"#191970";s:9:"mintcream";s:7:"#F5FFFA";s:9:"mistyrose";s:7:"#FFE4E1";s:8:"moccasin";s:7:"#FFE4B5";s:11:"navajowhite";s:7:"#FFDEAD";s:4:"navy";s:7:"#000080";s:7:"oldlace";s:7:"#FDF5E6";s:5:"olive";s:7:"#808000";s:9:"olivedrab";s:7:"#6B8E23";s:6:"orange";s:7:"#FFA500";s:9:"orangered";s:7:"#FF4500";s:6:"orchid";s:7:"#DA70D6";s:13:"palegoldenrod";s:7:"#EEE8AA";s:9:"palegreen";s:7:"#98FB98";s:13:"paleturquoise";s:7:"#AFEEEE";s:13:"palevioletred";s:7:"#DB7093";s:10:"papayawhip";s:7:"#FFEFD5";s:9:"peachpuff";s:7:"#FFDAB9";s:4:"peru";s:7:"#CD853F";s:4:"pink";s:7:"#FFC0CB";s:4:"plum";s:7:"#DDA0DD";s:10:"powderblue";s:7:"#B0E0E6";s:6:"purple";s:7:"#800080";s:13:"rebeccapurple";s:7:"#663399";s:3:"red";s:7:"#FF0000";s:9:"rosybrown";s:7:"#BC8F8F";s:9:"royalblue";s:7:"#4169E1";s:11:"saddlebrown";s:7:"#8B4513";s:6:"salmon";s:7:"#FA8072";s:10:"sandybrown";s:7:"#F4A460";s:8:"seagreen";s:7:"#2E8B57";s:8:"seashell";s:7:"#FFF5EE";s:6:"sienna";s:7:"#A0522D";s:6:"silver";s:7:"#C0C0C0";s:7:"skyblue";s:7:"#87CEEB";s:9:"slateblue";s:7:"#6A5ACD";s:9:"slategray";s:7:"#708090";s:9:"slategrey";s:7:"#708090";s:4:"snow";s:7:"#FFFAFA";s:11:"springgreen";s:7:"#00FF7F";s:9:"steelblue";s:7:"#4682B4";s:3:"tan";s:7:"#D2B48C";s:4:"teal";s:7:"#008080";s:7:"thistle";s:7:"#D8BFD8";s:6:"tomato";s:7:"#FF6347";s:9:"turquoise";s:7:"#40E0D0";s:6:"violet";s:7:"#EE82EE";s:5:"wheat";s:7:"#F5DEB3";s:5:"white";s:7:"#FFFFFF";s:10:"whitesmoke";s:7:"#F5F5F5";s:6:"yellow";s:7:"#FFFF00";s:11:"yellowgreen";s:7:"#9ACD32";}s:30:"Core.ConvertDocumentToFragment";b:1;s:36:"Core.DirectLexLineNumberSyncInterval";i:0;s:20:"Core.DisableExcludes";b:0;s:15:"Core.EnableIDNA";b:0;s:13:"Core.Encoding";s:5:"utf-8";s:26:"Core.EscapeInvalidChildren";b:0;s:22:"Core.EscapeInvalidTags";b:0;s:29:"Core.EscapeNonASCIICharacters";b:0;s:19:"Core.HiddenElements";a:2:{s:6:"script";b:1;s:5:"style";b:1;}s:13:"Core.Language";s:2:"en";s:24:"Core.LegacyEntityDecoder";b:0;s:14:"Core.LexerImpl";N;s:24:"Core.MaintainLineNumbers";N;s:22:"Core.NormalizeNewlines";b:1;s:17:"Core.RemoveBlanks";b:0;s:21:"Core.RemoveInvalidImg";b:1;s:33:"Core.RemoveProcessingInstructions";b:0;s:25:"Core.RemoveScriptContents";N;s:13:"Filter.Custom";a:0:{}s:34:"Filter.ExtractStyleBlocks.Escaping";b:1;s:31:"Filter.ExtractStyleBlocks.Scope";N;s:34:"Filter.ExtractStyleBlocks.TidyImpl";N;s:25:"Filter.ExtractStyleBlocks";b:0;s:14:"Filter.YouTube";b:0;s:12:"HTML.Allowed";N;s:22:"HTML.AllowedAttributes";N;s:20:"HTML.AllowedComments";a:0:{}s:26:"HTML.AllowedCommentsRegexp";N;s:20:"HTML.AllowedElements";N;s:19:"HTML.AllowedModules";N;s:23:"HTML.Attr.Name.UseCDATA";b:0;s:17:"HTML.BlockWrapper";s:1:"p";s:16:"HTML.CoreModules";a:7:{s:9:"Structure";b:1;s:4:"Text";b:1;s:9:"Hypertext";b:1;s:4:"List";b:1;s:22:"NonXMLCommonAttributes";b:1;s:19:"XMLCommonAttributes";b:1;s:16:"CommonAttributes";b:1;}s:18:"HTML.CustomDoctype";N;s:17:"HTML.DefinitionID";N;s:18:"HTML.DefinitionRev";i:1;s:12:"HTML.Doctype";N;s:25:"HTML.FlashAllowFullScreen";b:0;s:24:"HTML.ForbiddenAttributes";a:0:{}s:22:"HTML.ForbiddenElements";a:0:{}s:10:"HTML.Forms";b:0;s:17:"HTML.MaxImgLength";i:1200;s:13:"HTML.Nofollow";b:0;s:11:"HTML.Parent";s:3:"div";s:16:"HTML.Proprietary";b:0;s:14:"HTML.SafeEmbed";b:0;s:15:"HTML.SafeIframe";b:0;s:15:"HTML.SafeObject";b:0;s:18:"HTML.SafeScripting";a:0:{}s:11:"HTML.Strict";b:0;s:16:"HTML.TargetBlank";b:0;s:19:"HTML.TargetNoopener";b:1;s:21:"HTML.TargetNoreferrer";b:1;s:12:"HTML.TidyAdd";a:0:{}s:14:"HTML.TidyLevel";s:6:"medium";s:15:"HTML.TidyRemove";a:0:{}s:12:"HTML.Trusted";b:0;s:10:"HTML.XHTML";b:1;s:28:"Output.CommentScriptContents";b:1;s:19:"Output.FixInnerHTML";b:1;s:18:"Output.FlashCompat";b:0;s:14:"Output.Newline";N;s:15:"Output.SortAttr";b:0;s:17:"Output.TidyFormat";b:0;s:17:"Test.ForceNoIconv";b:0;s:18:"URI.AllowedSchemes";a:7:{s:4:"http";b:1;s:5:"https";b:1;s:6:"mailto";b:1;s:3:"ftp";b:1;s:4:"nntp";b:1;s:4:"news";b:1;s:3:"tel";b:1;}s:8:"URI.Base";N;s:17:"URI.DefaultScheme";s:4:"http";s:16:"URI.DefinitionID";N;s:17:"URI.DefinitionRev";i:1;s:11:"URI.Disable";b:0;s:19:"URI.DisableExternal";b:0;s:28:"URI.DisableExternalResources";b:0;s:20:"URI.DisableResources";b:0;s:8:"URI.Host";N;s:17:"URI.HostBlacklist";a:0:{}s:16:"URI.MakeAbsolute";b:0;s:9:"URI.Munge";N;s:18:"URI.MungeResources";b:0;s:18:"URI.MungeSecretKey";N;s:26:"URI.OverrideAllowedSchemes";b:1;s:20:"URI.SafeIframeRegexp";N;}s:12:"defaultPlist";O:25:"HTMLPurifier_PropertyList":3:{s:7:"
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema/Core.RemoveBlanks.txt b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema/Core.RemoveBlanks.txt
new file mode 100644
index 000000000..95e5285ca
--- /dev/null
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema/Core.RemoveBlanks.txt
@@ -0,0 +1,10 @@
+Core.RemoveBlanks
+TYPE: bool
+DEFAULT: false
+VERSION: 4.18
+--DESCRIPTION--
+<p>
+ If set to true, blank nodes will be removed. This can be useful for maintaining
+ backwards compatibility when upgrading from previous versions of PHP.
+</p>
+--# vim: et sw=4 sts=4
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php
index 3ef2d09ec..0f2b83dc8 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php
@@ -116,8 +116,8 @@ class HTMLPurifier_EntityParser
protected function entityCallback($matches)
{
$entity = $matches[0];
- $hex_part = @$matches[1];
- $dec_part = @$matches[2];
+ $hex_part = isset($matches[1]) ? $matches[1] : null;
+ $dec_part = isset($matches[2]) ? $matches[2] : null;
$named_part = empty($matches[3]) ? (empty($matches[4]) ? "" : $matches[4]) : $matches[3];
if ($hex_part !== NULL && $hex_part !== "") {
return HTMLPurifier_Encoder::unichr(hexdec($hex_part));
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php
index 6f8e7790e..e7e3cac1a 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php
@@ -54,6 +54,11 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
*/
private $_enum_attrdef;
+ /**
+ * @type HTMLPurifier_AttrDef_Enum
+ */
+ private $_universal_attrdef;
+
public function __construct()
{
$this->_tidy = new csstidy();
@@ -70,6 +75,13 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
'focus'
)
);
+ $this->_universal_attrdef = new HTMLPurifier_AttrDef_Enum(
+ array(
+ 'initial',
+ 'inherit',
+ 'unset',
+ )
+ );
}
/**
@@ -307,6 +319,11 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
unset($style[$name]);
continue;
}
+ $uni_ret = $this->_universal_attrdef->validate($value, $config, $context);
+ if ($uni_ret !== false) {
+ $style[$name] = $uni_ret;
+ continue;
+ }
$def = $css_definition->info[$name];
$ret = $def->validate($value, $config, $context);
if ($ret === false) {
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php
index f7e7c91c0..71dfc7744 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php
@@ -28,22 +28,28 @@ class HTMLPurifier_HTMLModule_Iframe extends HTMLPurifier_HTMLModule
if ($config->get('HTML.SafeIframe')) {
$this->safe = true;
}
+ $attrs = array(
+ 'src' => 'URI#embedded',
+ 'width' => 'Length',
+ 'height' => 'Length',
+ 'name' => 'ID',
+ 'scrolling' => 'Enum#yes,no,auto',
+ 'frameborder' => 'Enum#0,1',
+ 'longdesc' => 'URI',
+ 'marginheight' => 'Pixels',
+ 'marginwidth' => 'Pixels',
+ );
+
+ if ($config->get('HTML.Trusted')) {
+ $attrs['allowfullscreen'] = 'Bool#allowfullscreen';
+ }
+
$this->addElement(
'iframe',
'Inline',
'Flow',
'Common',
- array(
- 'src' => 'URI#embedded',
- 'width' => 'Length',
- 'height' => 'Length',
- 'name' => 'ID',
- 'scrolling' => 'Enum#yes,no,auto',
- 'frameborder' => 'Enum#0,1',
- 'longdesc' => 'URI',
- 'marginheight' => 'Pixels',
- 'marginwidth' => 'Pixels',
- )
+ $attrs
);
}
}
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php
index 1f552a17a..fe87fa4ba 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php
@@ -270,20 +270,6 @@ class HTMLPurifier_Lexer
}
/**
- * Special Internet Explorer conditional comments should be removed.
- * @param string $string HTML string to process.
- * @return string HTML with conditional comments removed.
- */
- protected static function removeIEConditional($string)
- {
- return preg_replace(
- '#<!--\[if [^>]+\]>.*?<!\[endif\]-->#si', // probably should generalize for all strings
- '',
- $string
- );
- }
-
- /**
* Callback function for escapeCDATA() that does the work.
*
* @warning Though this is public in order to let the callback happen,
@@ -323,8 +309,6 @@ class HTMLPurifier_Lexer
// escape CDATA
$html = $this->escapeCDATA($html);
- $html = $this->removeIEConditional($html);
-
// extract body from document if applicable
if ($config->get('Core.ConvertDocumentToFragment')) {
$e = false;
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php
index 5e8104be9..7d579837c 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php
@@ -72,6 +72,9 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
if ($config->get('Core.AllowParseManyTags') && defined('LIBXML_PARSEHUGE')) {
$options |= LIBXML_PARSEHUGE;
}
+ if ($config->get('Core.RemoveBlanks') && defined('LIBXML_NOBLANKS')) {
+ $options |= LIBXML_NOBLANKS;
+ }
set_error_handler(array($this, 'muteErrorHandler'));
// loadHTML() fails on PHP 5.3 when second parameter is given
diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php
index d643fa64e..dcf365589 100644
--- a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php
+++ b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php
@@ -44,7 +44,7 @@ abstract class HTMLPurifier_Token_Tag extends HTMLPurifier_Token
$this->name = ctype_lower($name) ? $name : strtolower($name);
foreach ($attr as $key => $value) {
// normalization only necessary when key is not lowercase
- if (!ctype_lower($key)) {
+ if (!ctype_lower((string)$key)) {
$new_key = strtolower($key);
if (!isset($attr[$new_key])) {
$attr[$new_key] = $attr[$key];
diff --git a/vendor/paragonie/constant_time_encoding/README.md b/vendor/paragonie/constant_time_encoding/README.md
index cedddd863..211f0dc9f 100644
--- a/vendor/paragonie/constant_time_encoding/README.md
+++ b/vendor/paragonie/constant_time_encoding/README.md
@@ -1,6 +1,7 @@
# Constant-Time Encoding
[![Build Status](https://github.com/paragonie/constant_time_encoding/actions/workflows/ci.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)
+[![Static Analysis](https://github.com/paragonie/constant_time_encoding/actions/workflows/psalm.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)
[![Latest Stable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/stable)](https://packagist.org/packages/paragonie/constant_time_encoding)
[![Latest Unstable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/unstable)](https://packagist.org/packages/paragonie/constant_time_encoding)
[![License](https://poser.pugx.org/paragonie/constant_time_encoding/license)](https://packagist.org/packages/paragonie/constant_time_encoding)
@@ -11,7 +12,7 @@ this library aims to offer character encoding functions that do not leak
information about what you are encoding/decoding via processor cache
misses. Further reading on [cache-timing attacks](http://blog.ircmaxell.com/2014/11/its-all-about-time.html).
-Our fork offers the following enchancements:
+Our fork offers the following enhancements:
* `mbstring.func_overload` resistance
* Unit tests
@@ -22,10 +23,13 @@ Our fork offers the following enchancements:
## PHP Version Requirements
-Version 2 of this library should work on **PHP 7** or newer. For PHP 5
-support, see [the v1.x branch](https://github.com/paragonie/constant_time_encoding/tree/v1.x).
+Version 3 of this library should work on **PHP 8** or newer.
-If you are adding this as a dependency to a project intended to work on both PHP 5 and PHP 7, please set the required version to `^1|^2` instead of just `^1` or `^2`.
+Version 2 of this library should work on **PHP 7** or newer. See [the v2.x branch](https://github.com/paragonie/constant_time_encoding/tree/v2.x).
+
+For PHP 5 support, see [the v1.x branch](https://github.com/paragonie/constant_time_encoding/tree/v1.x).
+
+If you are adding this as a dependency to a project intended to work on PHP 5 through 8.4, please set the required version to `^1|^2|^3`.
## How to Install
diff --git a/vendor/paragonie/constant_time_encoding/composer.json b/vendor/paragonie/constant_time_encoding/composer.json
index 2fe9717ad..5023095b4 100644
--- a/vendor/paragonie/constant_time_encoding/composer.json
+++ b/vendor/paragonie/constant_time_encoding/composer.json
@@ -37,11 +37,11 @@
"source": "https://github.com/paragonie/constant_time_encoding"
},
"require": {
- "php": "^7|^8"
+ "php": "^8"
},
"require-dev": {
- "phpunit/phpunit": "^6|^7|^8|^9",
- "vimeo/psalm": "^1|^2|^3|^4"
+ "phpunit/phpunit": "^9",
+ "vimeo/psalm": "^4|^5"
},
"autoload": {
"psr-4": {
diff --git a/vendor/paragonie/constant_time_encoding/src/Base32.php b/vendor/paragonie/constant_time_encoding/src/Base32.php
index 7508b3df6..48d00b991 100644
--- a/vendor/paragonie/constant_time_encoding/src/Base32.php
+++ b/vendor/paragonie/constant_time_encoding/src/Base32.php
@@ -44,8 +44,11 @@ abstract class Base32 implements EncoderInterface
* @param bool $strictPadding
* @return string
*/
- public static function decode(string $encodedString, bool $strictPadding = false): string
- {
+ public static function decode(
+ #[\SensitiveParameter]
+ string $encodedString,
+ bool $strictPadding = false
+ ): string {
return static::doDecode($encodedString, false, $strictPadding);
}
@@ -56,8 +59,11 @@ abstract class Base32 implements EncoderInterface
* @param bool $strictPadding
* @return string
*/
- public static function decodeUpper(string $src, bool $strictPadding = false): string
- {
+ public static function decodeUpper(
+ #[\SensitiveParameter]
+ string $src,
+ bool $strictPadding = false
+ ): string {
return static::doDecode($src, true, $strictPadding);
}
@@ -68,10 +74,13 @@ abstract class Base32 implements EncoderInterface
* @return string
* @throws TypeError
*/
- public static function encode(string $binString): string
- {
+ public static function encode(
+ #[\SensitiveParameter]
+ string $binString
+ ): string {
return static::doEncode($binString, false, true);
}
+
/**
* Encode into Base32 (RFC 4648)
*
@@ -79,8 +88,10 @@ abstract class Base32 implements EncoderInterface
* @return string
* @throws TypeError
*/
- public static function encodeUnpadded(string $src): string
- {
+ public static function encodeUnpadded(
+ #[\SensitiveParameter]
+ string $src
+ ): string {
return static::doEncode($src, false, false);
}
@@ -91,8 +102,10 @@ abstract class Base32 implements EncoderInterface
* @return string
* @throws TypeError
*/
- public static function encodeUpper(string $src): string
- {
+ public static function encodeUpper(
+ #[\SensitiveParameter]
+ string $src
+ ): string {
return static::doEncode($src, true, true);
}
@@ -103,8 +116,10 @@ abstract class Base32 implements EncoderInterface
* @return string
* @throws TypeError
*/
- public static function encodeUpperUnpadded(string $src): string
- {
+ public static function encodeUpperUnpadded(
+ #[\SensitiveParameter]
+ string $src
+ ): string {
return static::doEncode($src, true, false);
}
@@ -191,8 +206,11 @@ abstract class Base32 implements EncoderInterface
* @param bool $upper
* @return string
*/
- public static function decodeNoPadding(string $encodedString, bool $upper = false): string
- {
+ public static function decodeNoPadding(
+ #[\SensitiveParameter]
+ string $encodedString,
+ bool $upper = false
+ ): string {
$srcLen = Binary::safeStrlen($encodedString);
if ($srcLen === 0) {
return '';
@@ -222,9 +240,9 @@ abstract class Base32 implements EncoderInterface
* @return string
*
* @throws TypeError
- * @psalm-suppress RedundantCondition
*/
protected static function doDecode(
+ #[\SensitiveParameter]
string $src,
bool $upper = false,
bool $strictPadding = false
@@ -434,8 +452,12 @@ abstract class Base32 implements EncoderInterface
* @return string
* @throws TypeError
*/
- protected static function doEncode(string $src, bool $upper = false, $pad = true): string
- {
+ protected static function doEncode(
+ #[\SensitiveParameter]
+ string $src,
+ bool $upper = false,
+ $pad = true
+ ): string {
// We do this to reduce code duplication:
$method = $upper
? 'encode5BitsUpper'
diff --git a/vendor/paragonie/constant_time_encoding/src/Base64.php b/vendor/paragonie/constant_time_encoding/src/Base64.php
index f5716179f..2e3ecc859 100644
--- a/vendor/paragonie/constant_time_encoding/src/Base64.php
+++ b/vendor/paragonie/constant_time_encoding/src/Base64.php
@@ -47,8 +47,10 @@ abstract class Base64 implements EncoderInterface
*
* @throws TypeError
*/
- public static function encode(string $binString): string
- {
+ public static function encode(
+ #[\SensitiveParameter]
+ string $binString
+ ): string {
return static::doEncode($binString, true);
}
@@ -62,8 +64,10 @@ abstract class Base64 implements EncoderInterface
*
* @throws TypeError
*/
- public static function encodeUnpadded(string $src): string
- {
+ public static function encodeUnpadded(
+ #[\SensitiveParameter]
+ string $src
+ ): string {
return static::doEncode($src, false);
}
@@ -74,8 +78,11 @@ abstract class Base64 implements EncoderInterface
*
* @throws TypeError
*/
- protected static function doEncode(string $src, bool $pad = true): string
- {
+ protected static function doEncode(
+ #[\SensitiveParameter]
+ string $src,
+ bool $pad = true
+ ): string {
$dest = '';
$srcLen = Binary::safeStrlen($src);
// Main loop (no padding):
@@ -129,10 +136,12 @@ abstract class Base64 implements EncoderInterface
*
* @throws RangeException
* @throws TypeError
- * @psalm-suppress RedundantCondition
*/
- public static function decode(string $encodedString, bool $strictPadding = false): string
- {
+ public static function decode(
+ #[\SensitiveParameter]
+ string $encodedString,
+ bool $strictPadding = false
+ ): string {
// Remove padding
$srcLen = Binary::safeStrlen($encodedString);
if ($srcLen === 0) {
@@ -227,25 +236,21 @@ abstract class Base64 implements EncoderInterface
* @param string $encodedString
* @return string
*/
- public static function decodeNoPadding(string $encodedString): string
- {
+ public static function decodeNoPadding(
+ #[\SensitiveParameter]
+ string $encodedString
+ ): string {
$srcLen = Binary::safeStrlen($encodedString);
if ($srcLen === 0) {
return '';
}
if (($srcLen & 3) === 0) {
- if ($encodedString[$srcLen - 1] === '=') {
+ // If $strLen is not zero, and it is divisible by 4, then it's at least 4.
+ if ($encodedString[$srcLen - 1] === '=' || $encodedString[$srcLen - 2] === '=') {
throw new InvalidArgumentException(
"decodeNoPadding() doesn't tolerate padding"
);
}
- if (($srcLen & 3) > 1) {
- if ($encodedString[$srcLen - 2] === '=') {
- throw new InvalidArgumentException(
- "decodeNoPadding() doesn't tolerate padding"
- );
- }
- }
}
return static::decode(
$encodedString,
diff --git a/vendor/paragonie/constant_time_encoding/src/Binary.php b/vendor/paragonie/constant_time_encoding/src/Binary.php
index 828f3e0f6..a958f2f7c 100644
--- a/vendor/paragonie/constant_time_encoding/src/Binary.php
+++ b/vendor/paragonie/constant_time_encoding/src/Binary.php
@@ -45,8 +45,10 @@ abstract class Binary
* @param string $str
* @return int
*/
- public static function safeStrlen(string $str): int
- {
+ public static function safeStrlen(
+ #[\SensitiveParameter]
+ string $str
+ ): int {
if (\function_exists('mb_strlen')) {
// mb_strlen in PHP 7.x can return false.
/** @psalm-suppress RedundantCast */
@@ -70,9 +72,10 @@ abstract class Binary
* @throws TypeError
*/
public static function safeSubstr(
+ #[\SensitiveParameter]
string $str,
int $start = 0,
- $length = null
+ ?int $length = null
): string {
if ($length === 0) {
return '';
diff --git a/vendor/paragonie/constant_time_encoding/src/Encoding.php b/vendor/paragonie/constant_time_encoding/src/Encoding.php
index 8649f31fc..8b7e3878e 100644
--- a/vendor/paragonie/constant_time_encoding/src/Encoding.php
+++ b/vendor/paragonie/constant_time_encoding/src/Encoding.php
@@ -40,8 +40,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32Encode(string $str): string
- {
+ public static function base32Encode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::encode($str);
}
@@ -52,8 +54,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32EncodeUpper(string $str): string
- {
+ public static function base32EncodeUpper(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::encodeUpper($str);
}
@@ -64,8 +68,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32Decode(string $str): string
- {
+ public static function base32Decode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::decode($str);
}
@@ -76,8 +82,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32DecodeUpper(string $str): string
- {
+ public static function base32DecodeUpper(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::decodeUpper($str);
}
@@ -88,8 +96,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32HexEncode(string $str): string
- {
+ public static function base32HexEncode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32Hex::encode($str);
}
@@ -100,8 +110,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32HexEncodeUpper(string $str): string
- {
+ public static function base32HexEncodeUpper(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32Hex::encodeUpper($str);
}
@@ -112,8 +124,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32HexDecode(string $str): string
- {
+ public static function base32HexDecode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32Hex::decode($str);
}
@@ -124,8 +138,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base32HexDecodeUpper(string $str): string
- {
+ public static function base32HexDecodeUpper(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32Hex::decodeUpper($str);
}
@@ -136,8 +152,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base64Encode(string $str): string
- {
+ public static function base64Encode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64::encode($str);
}
@@ -148,8 +166,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base64Decode(string $str): string
- {
+ public static function base64Decode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64::decode($str);
}
@@ -161,8 +181,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base64EncodeDotSlash(string $str): string
- {
+ public static function base64EncodeDotSlash(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64DotSlash::encode($str);
}
@@ -176,8 +198,10 @@ abstract class Encoding
* @throws \RangeException
* @throws TypeError
*/
- public static function base64DecodeDotSlash(string $str): string
- {
+ public static function base64DecodeDotSlash(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64DotSlash::decode($str);
}
@@ -189,8 +213,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function base64EncodeDotSlashOrdered(string $str): string
- {
+ public static function base64EncodeDotSlashOrdered(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64DotSlashOrdered::encode($str);
}
@@ -204,8 +230,10 @@ abstract class Encoding
* @throws \RangeException
* @throws TypeError
*/
- public static function base64DecodeDotSlashOrdered(string $str): string
- {
+ public static function base64DecodeDotSlashOrdered(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64DotSlashOrdered::decode($str);
}
@@ -217,8 +245,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function hexEncode(string $bin_string): string
- {
+ public static function hexEncode(
+ #[\SensitiveParameter]
+ string $bin_string
+ ): string {
return Hex::encode($bin_string);
}
@@ -230,8 +260,10 @@ abstract class Encoding
* @return string (raw binary)
* @throws \RangeException
*/
- public static function hexDecode(string $hex_string): string
- {
+ public static function hexDecode(
+ #[\SensitiveParameter]
+ string $hex_string
+ ): string {
return Hex::decode($hex_string);
}
@@ -243,8 +275,10 @@ abstract class Encoding
* @return string
* @throws TypeError
*/
- public static function hexEncodeUpper(string $bin_string): string
- {
+ public static function hexEncodeUpper(
+ #[\SensitiveParameter]
+ string $bin_string
+ ): string {
return Hex::encodeUpper($bin_string);
}
@@ -255,8 +289,10 @@ abstract class Encoding
* @param string $bin_string (raw binary)
* @return string
*/
- public static function hexDecodeUpper(string $bin_string): string
- {
+ public static function hexDecodeUpper(
+ #[\SensitiveParameter]
+ string $bin_string
+ ): string {
return Hex::decode($bin_string);
}
}
diff --git a/vendor/paragonie/constant_time_encoding/src/Hex.php b/vendor/paragonie/constant_time_encoding/src/Hex.php
index a9e058cd3..97c2046f0 100644
--- a/vendor/paragonie/constant_time_encoding/src/Hex.php
+++ b/vendor/paragonie/constant_time_encoding/src/Hex.php
@@ -42,8 +42,10 @@ abstract class Hex implements EncoderInterface
* @return string
* @throws TypeError
*/
- public static function encode(string $binString): string
- {
+ public static function encode(
+ #[\SensitiveParameter]
+ string $binString
+ ): string {
$hex = '';
$len = Binary::safeStrlen($binString);
for ($i = 0; $i < $len; ++$i) {
@@ -69,8 +71,10 @@ abstract class Hex implements EncoderInterface
* @return string
* @throws TypeError
*/
- public static function encodeUpper(string $binString): string
- {
+ public static function encodeUpper(
+ #[\SensitiveParameter]
+ string $binString
+ ): string {
$hex = '';
$len = Binary::safeStrlen($binString);
@@ -99,6 +103,7 @@ abstract class Hex implements EncoderInterface
* @throws RangeException
*/
public static function decode(
+ #[\SensitiveParameter]
string $encodedString,
bool $strictPadding = false
): string {
diff --git a/vendor/paragonie/constant_time_encoding/src/RFC4648.php b/vendor/paragonie/constant_time_encoding/src/RFC4648.php
index f124d65bf..7cd2e9909 100644
--- a/vendor/paragonie/constant_time_encoding/src/RFC4648.php
+++ b/vendor/paragonie/constant_time_encoding/src/RFC4648.php
@@ -46,8 +46,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base64Encode(string $str): string
- {
+ public static function base64Encode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64::encode($str);
}
@@ -61,8 +63,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base64Decode(string $str): string
- {
+ public static function base64Decode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64::decode($str, true);
}
@@ -76,8 +80,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base64UrlSafeEncode(string $str): string
- {
+ public static function base64UrlSafeEncode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64UrlSafe::encode($str);
}
@@ -91,8 +97,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base64UrlSafeDecode(string $str): string
- {
+ public static function base64UrlSafeDecode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base64UrlSafe::decode($str, true);
}
@@ -106,8 +114,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base32Encode(string $str): string
- {
+ public static function base32Encode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::encodeUpper($str);
}
@@ -121,8 +131,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base32Decode(string $str): string
- {
+ public static function base32Decode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::decodeUpper($str, true);
}
@@ -136,8 +148,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base32HexEncode(string $str): string
- {
+ public static function base32HexEncode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::encodeUpper($str);
}
@@ -151,8 +165,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base32HexDecode(string $str): string
- {
+ public static function base32HexDecode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Base32::decodeUpper($str, true);
}
@@ -166,8 +182,10 @@ abstract class RFC4648
*
* @throws TypeError
*/
- public static function base16Encode(string $str): string
- {
+ public static function base16Encode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Hex::encodeUpper($str);
}
@@ -179,8 +197,10 @@ abstract class RFC4648
* @param string $str
* @return string
*/
- public static function base16Decode(string $str): string
- {
+ public static function base16Decode(
+ #[\SensitiveParameter]
+ string $str
+ ): string {
return Hex::decode($str, true);
}
-} \ No newline at end of file
+}
diff --git a/vendor/phpseclib/phpseclib/BACKERS.md b/vendor/phpseclib/phpseclib/BACKERS.md
index efca482ad..cafcf60a2 100644
--- a/vendor/phpseclib/phpseclib/BACKERS.md
+++ b/vendor/phpseclib/phpseclib/BACKERS.md
@@ -14,4 +14,6 @@ phpseclib ongoing development is made possible by [Tidelift](https://tidelift.co
- Tharyrok
- [cjhaas](https://github.com/cjhaas)
- [istiak-tridip](https://github.com/istiak-tridip)
-- [Anna Filina](https://github.com/afilina) \ No newline at end of file
+- [Anna Filina](https://github.com/afilina)
+- [blakemckeeby](https://github.com/blakemckeeby)
+- [ssddanbrown](https://github.com/ssddanbrown) \ No newline at end of file
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
index ab5944cde..2d4225a3f 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
@@ -611,7 +611,6 @@ abstract class Base
*
* @access public
* @param string $key
- * @internal Could, but not must, extend by the child Crypt_* class
*/
function setKey($key)
{
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
index fec689585..7f5df1d5f 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
@@ -1396,9 +1396,14 @@ class RSA
$this->components = array();
$xml = xml_parser_create('UTF-8');
- xml_set_object($xml, $this);
- xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler');
- xml_set_character_data_handler($xml, '_data_handler');
+ if (version_compare(PHP_VERSION, '8.4.0', '>=')) {
+ xml_set_element_handler($xml, array($this, '_start_element_handler'), array($this, '_stop_element_handler'));
+ xml_set_character_data_handler($xml, array($this, '_data_handler'));
+ } else {
+ xml_set_object($xml, $this);
+ xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler');
+ xml_set_character_data_handler($xml, '_data_handler');
+ }
// add <xml></xml> to account for "dangling" tags like <BitStrength>...</BitStrength> that are sometimes added
if (!xml_parse($xml, '<xml>' . $key . '</xml>')) {
xml_parser_free($xml);
diff --git a/vendor/phpseclib/phpseclib/phpseclib/File/X509.php b/vendor/phpseclib/phpseclib/phpseclib/File/X509.php
index 7b8d96e29..64e22655c 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/File/X509.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/File/X509.php
@@ -3847,7 +3847,8 @@ class X509
array(
'version' => 'v1',
'subject' => $this->dn,
- 'subjectPKInfo' => $publicKey
+ 'subjectPKInfo' => $publicKey,
+ 'attributes' => array()
),
'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
'signature' => false // this is going to be overwritten later
@@ -4003,11 +4004,11 @@ class X509
$version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0;
if (!$version) {
if (!empty($tbsCertList['crlExtensions'])) {
- $version = 1; // v2.
+ $version = 'v2'; // v2.
} elseif (!empty($tbsCertList['revokedCertificates'])) {
foreach ($tbsCertList['revokedCertificates'] as $cert) {
if (!empty($cert['crlEntryExtensions'])) {
- $version = 1; // v2.
+ $version = 'v2'; // v2.
}
}
}
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php
index 7747a95b6..5f2283678 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php
@@ -251,8 +251,17 @@ class BigInteger
function __construct($x = 0, $base = 10)
{
if (!defined('MATH_BIGINTEGER_MODE')) {
+
+ // https://github.com/php/php-src/commit/e0a0e216a909dc4ee4ea7c113a5f41d49525f02e broke GMP
+ // https://github.com/php/php-src/commit/424ba0f2ff9677d16b4e339e90885bd4bc49fcf1 fixed it
+ // see https://github.com/php/php-src/issues/16870 for more info
+ if (version_compare(PHP_VERSION, '8.2.26', '<')) {
+ $gmpOK = true;
+ } else {
+ $gmpOK = !in_array(PHP_VERSION_ID, array(80226, 80314, 80400, 80401));
+ }
switch (true) {
- case extension_loaded('gmp'):
+ case extension_loaded('gmp') && $gmpOK:
define('MATH_BIGINTEGER_MODE', self::MODE_GMP);
break;
case extension_loaded('bcmath'):
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
index 28b568062..1c6ef7f9a 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
@@ -758,7 +758,8 @@ class SFTP extends SSH2
return false;
}
$this->canonicalize_paths = false;
- $this->_reset_connection(NET_SSH2_DISCONNECT_CONNECTION_LOST);
+ $this->_reset_sftp();
+ return $this->_init_sftp_connection();
}
$this->_update_stat_cache($this->pwd, array());
@@ -3629,14 +3630,12 @@ class SFTP extends SSH2
}
/**
- * Resets a connection for re-use
+ * Resets the SFTP channel for re-use
*
- * @param int $reason
* @access private
*/
- function _reset_connection($reason)
+ function _reset_sftp()
{
- parent::_reset_connection($reason);
$this->use_request_id = false;
$this->pwd = false;
$this->requestBuffer = array();
@@ -3644,6 +3643,18 @@ class SFTP extends SSH2
}
/**
+ * Resets a connection for re-use
+ *
+ * @param int $reason
+ * @access private
+ */
+ function _reset_connection($reason)
+ {
+ parent::_reset_connection($reason);
+ $this->_reset_sftp();
+ }
+
+ /**
* Receives SFTP Packets
*
* See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
index 607cc2145..775d894fb 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
@@ -147,6 +147,10 @@ class SSH2
*/
const LOG_REALTIME_FILE = 4;
/**
+ * Dumps the message numbers real-time
+ */
+ const LOG_REALTIME_SIMPLE = 5;
+ /**
* Make sure that the log never gets larger than this
*/
const LOG_MAX_SIZE = 1048576; // 1024 * 1024
@@ -1005,7 +1009,7 @@ class SSH2
* @var bool
* @access private
*/
- var $retry_connect = false;
+ var $login_credentials_finalized = false;
/**
* Binary Packet Buffer
@@ -1097,12 +1101,57 @@ class SSH2
var $smartMFA = true;
/**
- * Extra packets counter
+ * Bytes Transferred Since Last Key Exchange
+ *
+ * Includes outbound and inbound totals
*
+ * @var int
+ * @access private
+ */
+ var $bytesTransferredSinceLastKEX = 0;
+
+ /**
+ * After how many transferred byte should phpseclib initiate a key re-exchange?
+ *
+ * @var int
+ * @access private
+ */
+ var $doKeyReexchangeAfterXBytes = 1073741824;
+
+ /**
+ * Has a key re-exchange been initialized?
+ *
* @var bool
* @access private
*/
- var $extra_packets;
+ var $keyExchangeInProgress = false;
+
+ /**
+ * KEX Buffer
+ *
+ * If we're in the middle of a key exchange we want to buffer any additional packets we get until
+ * the key exchange is over
+ *
+ * @see self::_get_binary_packet()
+ * @see self::_key_exchange()
+ * @see self::exec()
+ * @var array
+ * @access private
+ */
+ var $kex_buffer = array();
+
+ /**
+ * Strict KEX Flag
+ *
+ * If kex-strict-s-v00@openssh.com is present in the first KEX packet it need not
+ * be present in subsequent packet
+ *
+ * @see self::_key_exchange()
+ * @see self::exec()
+ * @var array
+ * @access private
+ */
+ var $strict_kex_flag = false;
/**
* Default Constructor.
@@ -1361,25 +1410,17 @@ class SSH2
}
$temp = stream_get_line($this->fsock, 255, "\n");
- if (strlen($temp) == 255) {
- continue;
- }
if ($temp === false) {
return false;
}
- $line.= "$temp\n";
-
- // quoting RFC4253, "Implementers who wish to maintain
- // compatibility with older, undocumented versions of this protocol may
- // want to process the identification string without expecting the
- // presence of the carriage return character for reasons described in
- // Section 5 of this document."
+ $line .= $temp;
+ if (strlen($temp) == 255) {
+ continue;
+ }
- //if (substr($line, -2) == "\r\n") {
- // break;
- //}
+ $line .= "\n";
break;
}
@@ -1400,7 +1441,8 @@ class SSH2
$this->_append_log('->', $this->identifier . "\r\n");
}
- $this->server_identifier = trim($temp, "\r\n");
+ $this->server_identifier = trim($data, "\r\n");
+
if (strlen($extra)) {
$this->errors[] = $data;
}
@@ -1485,8 +1527,13 @@ class SSH2
*/
function _key_exchange($kexinit_payload_server = false)
{
+ $this->bytesTransferredSinceLastKEX = 0;
+
$preferred = $this->preferred;
- $send_kex = true;
+ // for the initial key exchange $send_kex is true (no key re-exchange has been started)
+ // for phpseclib initiated key exchanges $send_kex is false
+ $send_kex = !$this->keyExchangeInProgress;
+ $this->keyExchangeInProgress = true;
$kex_algorithms = isset($preferred['kex']) ?
$preferred['kex'] :
@@ -1572,22 +1619,29 @@ class SSH2
0
);
- if ($kexinit_payload_server === false) {
+ if ($kexinit_payload_server === false && $send_kex) {
if (!$this->_send_binary_packet($kexinit_payload_client)) {
return false;
}
- $this->extra_packets = 0;
- $kexinit_payload_server = $this->_get_binary_packet();
- if ($kexinit_payload_server === false) {
- $this->bitmap = 0;
- user_error('Connection closed by server');
- return false;
- }
+ while (true) {
+ $kexinit_payload_server = $this->_get_binary_packet();
+ if ($kexinit_payload_server === false) {
+ $this->bitmap = 0;
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ if (strlen($kexinit_payload_server)) {
+ switch (ord($kexinit_payload_server[0])) {
+ case NET_SSH2_MSG_KEXINIT:
+ break 2;
+ case NET_SSH2_MSG_DISCONNECT:
+ return $this->_handleDisconnect($kexinit_payload_server);
+ }
+ }
- if (!strlen($kexinit_payload_server) || ord($kexinit_payload_server[0]) != NET_SSH2_MSG_KEXINIT) {
- user_error('Expected SSH_MSG_KEXINIT');
- return false;
+ $this->kex_buffer[] = $kexinit_payload_server;
}
$send_kex = false;
@@ -1603,9 +1657,14 @@ class SSH2
$temp = unpack('Nlength', $this->_string_shift($response, 4));
$this->kex_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
if (in_array('kex-strict-s-v00@openssh.com', $this->kex_algorithms)) {
- if ($this->session_id === false && $this->extra_packets) {
- user_error('Possible Terrapin Attack detected');
- return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ if ($this->session_id === false) {
+ // [kex-strict-s-v00@openssh.com is] only valid in the initial SSH2_MSG_KEXINIT and MUST be ignored
+ // if [it is] present in subsequent SSH2_MSG_KEXINIT packets
+ $this->strict_kex_flag = true;
+ if (count($this->kex_buffer)) {
+ user_error('Possible Terrapin Attack detected');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
}
}
@@ -2014,7 +2073,9 @@ class SSH2
return false;
}
- if (in_array('kex-strict-s-v00@openssh.com', $this->kex_algorithms)) {
+ $this->keyExchangeInProgress = false;
+
+ if ($this->strict_kex_flag) {
$this->get_seq_no = $this->send_seq_no = 0;
}
@@ -2292,7 +2353,7 @@ class SSH2
function login($username)
{
$args = func_get_args();
- if (!$this->retry_connect) {
+ if (!$this->login_credentials_finalized) {
$this->auth[] = $args;
}
@@ -2383,6 +2444,7 @@ class SSH2
foreach ($newargs as $arg) {
if ($this->_login_helper($username, $arg)) {
+ $this->login_credentials_finalized = true;
return true;
}
}
@@ -2418,10 +2480,14 @@ class SSH2
return false;
}
+ $bad_key_size_fix = $this->bad_key_size_fix;
$response = $this->_get_binary_packet();
if ($response === false) {
- if ($this->retry_connect) {
- $this->retry_connect = false;
+ // bad_key_size_fix is only ever re-assigned to true
+ // under certain conditions. when it's newly set we'll
+ // retry the connection with that new setting but we'll
+ // only try it once.
+ if ($bad_key_size_fix != $this->bad_key_size_fix) {
if (!$this->_connect()) {
return false;
}
@@ -2790,10 +2856,12 @@ class SSH2
{
$this->agent = $agent;
$keys = $agent->requestIdentities();
+ $orig_algorithms = $this->supported_private_key_algorithms;
foreach ($keys as $key) {
if ($this->_privatekey_login($username, $key)) {
return true;
}
+ $this->supported_private_key_algorithms = $orig_algorithms;
}
return false;
@@ -3551,7 +3619,6 @@ class SSH2
function _reconnect()
{
$this->_reset_connection(NET_SSH2_DISCONNECT_CONNECTION_LOST);
- $this->retry_connect = true;
if (!$this->_connect()) {
return false;
}
@@ -3575,7 +3642,6 @@ class SSH2
$this->hmac_check = $this->hmac_create = false;
$this->hmac_size = false;
$this->session_id = false;
- $this->retry_connect = true;
$this->get_seq_no = $this->send_seq_no = 0;
}
@@ -3590,6 +3656,10 @@ class SSH2
*/
function _get_binary_packet($skip_channel_filter = false)
{
+ if (!$this->keyExchangeInProgress && count($this->kex_buffer)) {
+ return $this->_filter(array_shift($this->kex_buffer), $skip_channel_filter);
+ }
+
if ($skip_channel_filter) {
$read = array($this->fsock);
$write = $except = null;
@@ -3674,9 +3744,13 @@ class SSH2
$remaining_length = $packet_length + 4 - $this->decrypt_block_size;
+ if (!$this->keyExchangeInProgress) {
+ $this->bytesTransferredSinceLastKEX+= $packet_length + $padding_length + 5;
+ }
+
// quoting <http://tools.ietf.org/html/rfc4253#section-6.1>,
// "implementations SHOULD check that the packet length is reasonable"
- // PuTTY uses 0x9000 as the actual max packet size and so to shall we
+ // PuTTY uses 0x9000 as the actual max packet size and so, too, shall we
if ($remaining_length < -$this->decrypt_block_size || $remaining_length > 0x9000 || $remaining_length % $this->decrypt_block_size != 0) {
if (!$this->bad_key_size_fix && $this->_bad_algorithm_candidate($this->decryptName) && !($this->bitmap & SSH2::MASK_LOGIN)) {
$this->bad_key_size_fix = true;
@@ -3766,7 +3840,34 @@ class SSH2
$this->last_packet = $current;
}
- return $this->_filter($payload, $skip_channel_filter);
+ if ($this->bytesTransferredSinceLastKEX > $this->doKeyReexchangeAfterXBytes) {
+ $this->_key_exchange();
+ }
+
+ // don't filter if we're in the middle of a key exchange (since _filter might send out packets)
+ return $this->keyExchangeInProgress ? $payload : $this->_filter($payload, $skip_channel_filter);
+ }
+
+ /**
+ * Handle Disconnect
+ *
+ * Because some binary packets need to be ignored...
+ *
+ * @see self::_filter()
+ * @see self::_key_exchange
+ * @return boolean
+ * @access private
+ */
+ function _handleDisconnect($payload)
+ {
+ $this->_string_shift($payload, 1);
+ if (strlen($payload) < 8) {
+ return false;
+ }
+ extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
+ $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . $this->_string_shift($payload, $length);
+ $this->bitmap = 0;
+ return false;
}
/**
@@ -3782,20 +3883,11 @@ class SSH2
{
switch (ord($payload[0])) {
case NET_SSH2_MSG_DISCONNECT:
- $this->_string_shift($payload, 1);
- if (strlen($payload) < 8) {
- return false;
- }
- extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
- $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . $this->_string_shift($payload, $length);
- $this->bitmap = 0;
- return false;
+ return $this->_handleDisconnect($payload);
case NET_SSH2_MSG_IGNORE:
- $this->extra_packets++;
$payload = $this->_get_binary_packet($skip_channel_filter);
break;
case NET_SSH2_MSG_DEBUG:
- $this->extra_packets++;
$this->_string_shift($payload, 2);
if (strlen($payload) < 4) {
return false;
@@ -3807,7 +3899,7 @@ class SSH2
case NET_SSH2_MSG_UNIMPLEMENTED:
return false;
case NET_SSH2_MSG_KEXINIT:
- // this is here for key re-exchanges after the initial key exchange
+ // this is here for server initiated key re-exchanges after the initial key exchange
if ($this->session_id !== false) {
$this->send_kex_first = false;
if (!$this->_key_exchange($payload)) {
@@ -3816,6 +3908,28 @@ class SSH2
}
$payload = $this->_get_binary_packet($skip_channel_filter);
}
+ break;
+ case NET_SSH2_MSG_EXT_INFO:
+ $this->_string_shift($payload, 1);
+ if (strlen($payload) < 4) {
+ return false;
+ }
+ $nr_extensions = unpack('Nlength', $this->_string_shift($payload, 4));
+ for ($i = 0; $i < $nr_extensions['length']; $i++) {
+ if (strlen($payload) < 4) {
+ return false;
+ }
+ $temp = unpack('Nlength', $this->_string_shift($payload, 4));
+ $extension_name = $this->_string_shift($payload, $temp['length']);
+ if ($extension_name == 'server-sig-algs') {
+ if (strlen($payload) < 4) {
+ return false;
+ }
+ $temp = unpack('Nlength', $this->_string_shift($payload, 4));
+ $this->supported_private_key_algorithms = explode(',', $this->_string_shift($payload, $temp['length']));
+ }
+ }
+ $payload = $this->_get_binary_packet($skip_channel_filter);
}
// see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in
@@ -4059,9 +4173,6 @@ class SSH2
} else {
$response = $this->_get_binary_packet(true);
if ($response === true && $this->is_timeout) {
- if ($client_channel == self::CHANNEL_EXEC && !$this->request_pty) {
- $this->_close_channel($client_channel);
- }
return true;
}
if ($response === false) {
@@ -4352,6 +4463,10 @@ class SSH2
$packet.= $hmac;
+ if (!$this->keyExchangeInProgress) {
+ $this->bytesTransferredSinceLastKEX+= strlen($packet);
+ }
+
$start = microtime(true);
$result = strlen($packet) == @fputs($this->fsock, $packet);
$stop = microtime(true);
@@ -4365,6 +4480,10 @@ class SSH2
$this->last_packet = $current;
}
+ if ($this->bytesTransferredSinceLastKEX > $this->doKeyReexchangeAfterXBytes) {
+ $this->_key_exchange();
+ }
+
return $result;
}
@@ -4442,6 +4561,10 @@ class SSH2
$this->realtime_log_wrap = true;
}
fputs($this->realtime_log_file, $entry);
+ break;
+ case NET_SSH2_LOG_REALTIME_SIMPLE:
+ echo $message_number;
+ echo PHP_SAPI == 'cli' ? "\r\n" : '<br>';
}
}
@@ -5111,42 +5234,66 @@ class SSH2
*/
function setPreferredAlgorithms($methods)
{
+ $keys = array('client_to_server', 'server_to_client');
+
+ if (isset($methods['kex']) && is_string($methods['kex'])) {
+ $methods['kex'] = explode(',', $methods['kex']);
+ }
+
+ if (isset($methods['hostkey']) && is_string($methods['hostkey'])) {
+ $methods['hostkey'] = explode(',', $methods['hostkey']);
+ }
+
+ foreach ($keys as $key) {
+ if (isset($methods[$key])) {
+ $a = &$methods[$key];
+ if (isset($a['crypt']) && is_string($a['crypt'])) {
+ $a['crypt'] = explode(',', $a['crypt']);
+ }
+ if (isset($a['comp']) && is_string($a['comp'])) {
+ $a['comp'] = explode(',', $a['comp']);
+ }
+ if (isset($a['mac']) && is_string($a['mac'])) {
+ $a['mac'] = explode(',', $a['mac']);
+ }
+ }
+ }
+
$preferred = $methods;
if (isset($preferred['kex'])) {
$preferred['kex'] = array_intersect(
$preferred['kex'],
- $this->getSupportedKEXAlgorithms()
+ static::getSupportedKEXAlgorithms()
);
}
if (isset($preferred['hostkey'])) {
$preferred['hostkey'] = array_intersect(
$preferred['hostkey'],
- $this->getSupportedHostKeyAlgorithms()
+ static::getSupportedHostKeyAlgorithms()
);
}
- $keys = array('client_to_server', 'server_to_client');
foreach ($keys as $key) {
if (isset($preferred[$key])) {
$a = &$preferred[$key];
if (isset($a['crypt'])) {
$a['crypt'] = array_intersect(
$a['crypt'],
- $this->getSupportedEncryptionAlgorithms()
+ static::getSupportedEncryptionAlgorithms()
);
}
if (isset($a['comp'])) {
$a['comp'] = array_intersect(
$a['comp'],
- $this->getSupportedCompressionAlgorithms()
+ static::getSupportedCompressionAlgorithms()
);
}
if (isset($a['mac'])) {
$a['mac'] = array_intersect(
$a['mac'],
- $this->getSupportedMACAlgorithms()
+ static::getSupportedMACAlgorithms()
);
}
}
@@ -5526,4 +5673,12 @@ class SSH2
{
$this->smartMFA = false;
}
+
+ /**
+ * How many bytes until the next key re-exchange?
+ */
+ function bytesUntilKeyReexchange($bytes)
+ {
+ $this->doKeyReexchangeAfterXBytes = $bytes;
+ }
}
diff --git a/vendor/psr/clock/CHANGELOG.md b/vendor/psr/clock/CHANGELOG.md
new file mode 100644
index 000000000..3cd6b9b75
--- /dev/null
+++ b/vendor/psr/clock/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Changelog
+
+All notable changes to this project will be documented in this file, in reverse chronological order by release.
+
+## 1.0.0
+
+First stable release after PSR-20 acceptance
+
+## 0.1.0
+
+First release
diff --git a/vendor/symfony/polyfill-php81/LICENSE b/vendor/psr/clock/LICENSE
index 99c6bdf35..be6834212 100644
--- a/vendor/symfony/polyfill-php81/LICENSE
+++ b/vendor/psr/clock/LICENSE
@@ -1,14 +1,14 @@
-Copyright (c) 2021-present Fabien Potencier
+Copyright (c) 2017 PHP Framework Interoperability Group
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
diff --git a/vendor/psr/clock/README.md b/vendor/psr/clock/README.md
new file mode 100644
index 000000000..6ca877eeb
--- /dev/null
+++ b/vendor/psr/clock/README.md
@@ -0,0 +1,61 @@
+# PSR Clock
+
+This repository holds the interface for [PSR-20][psr-url].
+
+Note that this is not a clock of its own. It is merely an interface that
+describes a clock. See the specification for more details.
+
+## Installation
+
+```bash
+composer require psr/clock
+```
+
+## Usage
+
+If you need a clock, you can use the interface like this:
+
+```php
+<?php
+
+use Psr\Clock\ClockInterface;
+
+class Foo
+{
+ private ClockInterface $clock;
+
+ public function __construct(ClockInterface $clock)
+ {
+ $this->clock = $clock;
+ }
+
+ public function doSomething()
+ {
+ /** @var DateTimeImmutable $currentDateAndTime */
+ $currentDateAndTime = $this->clock->now();
+ // do something useful with that information
+ }
+}
+```
+
+You can then pick one of the [implementations][implementation-url] of the interface to get a clock.
+
+If you want to implement the interface, you can require this package and
+implement `Psr\Clock\ClockInterface` in your code.
+
+Don't forget to add `psr/clock-implementation` to your `composer.json`s `provides`-section like this:
+
+```json
+{
+ "provides": {
+ "psr/clock-implementation": "1.0"
+ }
+}
+```
+
+And please read the [specification text][specification-url] for details on the interface.
+
+[psr-url]: https://www.php-fig.org/psr/psr-20
+[package-url]: https://packagist.org/packages/psr/clock
+[implementation-url]: https://packagist.org/providers/psr/clock-implementation
+[specification-url]: https://github.com/php-fig/fig-standards/blob/master/proposed/clock.md
diff --git a/vendor/psr/clock/composer.json b/vendor/psr/clock/composer.json
new file mode 100644
index 000000000..77992eda7
--- /dev/null
+++ b/vendor/psr/clock/composer.json
@@ -0,0 +1,21 @@
+{
+ "name": "psr/clock",
+ "description": "Common interface for reading the clock.",
+ "keywords": ["psr", "psr-20", "time", "clock", "now"],
+ "homepage": "https://github.com/php-fig/clock",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
+ }
+}
diff --git a/vendor/psr/clock/src/ClockInterface.php b/vendor/psr/clock/src/ClockInterface.php
new file mode 100644
index 000000000..7b6d8d8aa
--- /dev/null
+++ b/vendor/psr/clock/src/ClockInterface.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Psr\Clock;
+
+use DateTimeImmutable;
+
+interface ClockInterface
+{
+ /**
+ * Returns the current time as a DateTimeImmutable Object
+ */
+ public function now(): DateTimeImmutable;
+}
diff --git a/vendor/psr/log/composer.json b/vendor/psr/log/composer.json
index f3f066719..879fc6f53 100644
--- a/vendor/psr/log/composer.json
+++ b/vendor/psr/log/composer.json
@@ -20,7 +20,7 @@
},
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "3.x-dev"
}
}
}
diff --git a/vendor/psr/log/src/LoggerAwareInterface.php b/vendor/psr/log/src/LoggerAwareInterface.php
index 4d64f4786..062187057 100644
--- a/vendor/psr/log/src/LoggerAwareInterface.php
+++ b/vendor/psr/log/src/LoggerAwareInterface.php
@@ -9,10 +9,6 @@ interface LoggerAwareInterface
{
/**
* Sets a logger instance on the object.
- *
- * @param LoggerInterface $logger
- *
- * @return void
*/
- public function setLogger(LoggerInterface $logger);
+ public function setLogger(LoggerInterface $logger): void;
}
diff --git a/vendor/psr/log/src/LoggerAwareTrait.php b/vendor/psr/log/src/LoggerAwareTrait.php
index 5f1553a4c..85104dbc1 100644
--- a/vendor/psr/log/src/LoggerAwareTrait.php
+++ b/vendor/psr/log/src/LoggerAwareTrait.php
@@ -9,17 +9,13 @@ trait LoggerAwareTrait
{
/**
* The logger instance.
- *
- * @var LoggerInterface|null
*/
protected ?LoggerInterface $logger = null;
/**
* Sets a logger.
- *
- * @param LoggerInterface $logger
*/
- public function setLogger(LoggerInterface $logger)
+ public function setLogger(LoggerInterface $logger): void
{
$this->logger = $logger;
}
diff --git a/vendor/psr/log/src/LoggerInterface.php b/vendor/psr/log/src/LoggerInterface.php
index b4d062b9b..cb4cf648b 100644
--- a/vendor/psr/log/src/LoggerInterface.php
+++ b/vendor/psr/log/src/LoggerInterface.php
@@ -22,12 +22,9 @@ interface LoggerInterface
/**
* System is unusable.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function emergency(string|\Stringable $message, array $context = []);
+ public function emergency(string|\Stringable $message, array $context = []): void;
/**
* Action must be taken immediately.
@@ -35,35 +32,26 @@ interface LoggerInterface
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function alert(string|\Stringable $message, array $context = []);
+ public function alert(string|\Stringable $message, array $context = []): void;
/**
* Critical conditions.
*
* Example: Application component unavailable, unexpected exception.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function critical(string|\Stringable $message, array $context = []);
+ public function critical(string|\Stringable $message, array $context = []): void;
/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function error(string|\Stringable $message, array $context = []);
+ public function error(string|\Stringable $message, array $context = []): void;
/**
* Exceptional occurrences that are not errors.
@@ -71,55 +59,40 @@ interface LoggerInterface
* Example: Use of deprecated APIs, poor use of an API, undesirable things
* that are not necessarily wrong.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function warning(string|\Stringable $message, array $context = []);
+ public function warning(string|\Stringable $message, array $context = []): void;
/**
* Normal but significant events.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function notice(string|\Stringable $message, array $context = []);
+ public function notice(string|\Stringable $message, array $context = []): void;
/**
* Interesting events.
*
* Example: User logs in, SQL logs.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function info(string|\Stringable $message, array $context = []);
+ public function info(string|\Stringable $message, array $context = []): void;
/**
* Detailed debug information.
*
- * @param string|\Stringable $message
* @param mixed[] $context
- *
- * @return void
*/
- public function debug(string|\Stringable $message, array $context = []);
+ public function debug(string|\Stringable $message, array $context = []): void;
/**
* Logs with an arbitrary level.
*
- * @param mixed $level
- * @param string|\Stringable $message
+ * @param mixed $level
* @param mixed[] $context
*
- * @return void
- *
* @throws \Psr\Log\InvalidArgumentException
*/
- public function log($level, string|\Stringable $message, array $context = []);
+ public function log($level, string|\Stringable $message, array $context = []): void;
}
diff --git a/vendor/psr/log/src/LoggerTrait.php b/vendor/psr/log/src/LoggerTrait.php
index 920bda77f..a5d9980b6 100644
--- a/vendor/psr/log/src/LoggerTrait.php
+++ b/vendor/psr/log/src/LoggerTrait.php
@@ -14,13 +14,8 @@ trait LoggerTrait
{
/**
* System is unusable.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function emergency(string|\Stringable $message, array $context = [])
+ public function emergency(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::EMERGENCY, $message, $context);
}
@@ -30,13 +25,8 @@ trait LoggerTrait
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function alert(string|\Stringable $message, array $context = [])
+ public function alert(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::ALERT, $message, $context);
}
@@ -45,13 +35,8 @@ trait LoggerTrait
* Critical conditions.
*
* Example: Application component unavailable, unexpected exception.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function critical(string|\Stringable $message, array $context = [])
+ public function critical(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::CRITICAL, $message, $context);
}
@@ -59,13 +44,8 @@ trait LoggerTrait
/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function error(string|\Stringable $message, array $context = [])
+ public function error(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::ERROR, $message, $context);
}
@@ -75,26 +55,16 @@ trait LoggerTrait
*
* Example: Use of deprecated APIs, poor use of an API, undesirable things
* that are not necessarily wrong.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function warning(string|\Stringable $message, array $context = [])
+ public function warning(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::WARNING, $message, $context);
}
/**
* Normal but significant events.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function notice(string|\Stringable $message, array $context = [])
+ public function notice(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::NOTICE, $message, $context);
}
@@ -103,26 +73,16 @@ trait LoggerTrait
* Interesting events.
*
* Example: User logs in, SQL logs.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function info(string|\Stringable $message, array $context = [])
+ public function info(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::INFO, $message, $context);
}
/**
* Detailed debug information.
- *
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
*/
- public function debug(string|\Stringable $message, array $context = [])
+ public function debug(string|\Stringable $message, array $context = []): void
{
$this->log(LogLevel::DEBUG, $message, $context);
}
@@ -130,13 +90,9 @@ trait LoggerTrait
/**
* Logs with an arbitrary level.
*
- * @param mixed $level
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
+ * @param mixed $level
*
* @throws \Psr\Log\InvalidArgumentException
*/
- abstract public function log($level, string|\Stringable $message, array $context = []);
+ abstract public function log($level, string|\Stringable $message, array $context = []): void;
}
diff --git a/vendor/psr/log/src/NullLogger.php b/vendor/psr/log/src/NullLogger.php
index 560770571..de0561e2a 100644
--- a/vendor/psr/log/src/NullLogger.php
+++ b/vendor/psr/log/src/NullLogger.php
@@ -15,15 +15,11 @@ class NullLogger extends AbstractLogger
/**
* Logs with an arbitrary level.
*
- * @param mixed $level
- * @param string|\Stringable $message
- * @param array $context
- *
- * @return void
+ * @param mixed[] $context
*
* @throws \Psr\Log\InvalidArgumentException
*/
- public function log($level, string|\Stringable $message, array $context = [])
+ public function log($level, string|\Stringable $message, array $context = []): void
{
// noop
}
diff --git a/vendor/ramsey/collection/LICENSE b/vendor/ramsey/collection/LICENSE
index ae15f590c..a7fcf1201 100644
--- a/vendor/ramsey/collection/LICENSE
+++ b/vendor/ramsey/collection/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015-2021 Ben Ramsey <ben@benramsey.com>
+Copyright (c) 2015-2022 Ben Ramsey <ben@benramsey.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/ramsey/collection/README.md b/vendor/ramsey/collection/README.md
index 9124dd77e..c77ffcb18 100644
--- a/vendor/ramsey/collection/README.md
+++ b/vendor/ramsey/collection/README.md
@@ -9,7 +9,7 @@
<a href="https://packagist.org/packages/ramsey/collection"><img src="https://img.shields.io/packagist/v/ramsey/collection.svg?style=flat-square&label=release" alt="Download Package"></a>
<a href="https://php.net"><img src="https://img.shields.io/packagist/php-v/ramsey/collection.svg?style=flat-square&colorB=%238892BF" alt="PHP Programming Language"></a>
<a href="https://github.com/ramsey/collection/blob/master/LICENSE"><img src="https://img.shields.io/packagist/l/ramsey/collection.svg?style=flat-square&colorB=darkcyan" alt="Read License"></a>
- <a href="https://github.com/ramsey/collection/actions?query=workflow%3ACI"><img src="https://img.shields.io/github/workflow/status/ramsey/collection/CI?label=CI&logo=github&style=flat-square" alt="Build Status"></a>
+ <a href="https://github.com/ramsey/collection/actions/workflows/continuous-integration.yml"><img src="https://img.shields.io/github/actions/workflow/status/ramsey/collection/continuous-integration.yml?branch=main&logo=github&style=flat-square" alt="Build Status"></a>
<a href="https://codecov.io/gh/ramsey/collection"><img src="https://img.shields.io/codecov/c/gh/ramsey/collection?label=codecov&logo=codecov&style=flat-square" alt="Codecov Code Coverage"></a>
<a href="https://shepherd.dev/github/ramsey/collection"><img src="https://img.shields.io/endpoint?style=flat-square&url=https%3A%2F%2Fshepherd.dev%2Fgithub%2Framsey%2Fcollection%2Fcoverage" alt="Psalm Type Coverage"></a>
</p>
@@ -34,25 +34,13 @@ composer require ramsey/collection
## Usage
-Examples of how to use this framework can be found in the
+Examples of how to use this library may be found in the
[Wiki pages](https://github.com/ramsey/collection/wiki/Examples).
## Contributing
-Contributions are welcome! Before contributing to this project, familiarize
-yourself with [CONTRIBUTING.md](CONTRIBUTING.md).
-
-To develop this project, you will need [PHP](https://www.php.net) 7.3 or greater
-and [Composer](https://getcomposer.org).
-
-After cloning this repository locally, execute the following commands:
-
-``` bash
-cd /path/to/repository
-composer install
-```
-
-Now, you are ready to develop!
+Contributions are welcome! To contribute, please familiarize yourself with
+[CONTRIBUTING.md](CONTRIBUTING.md).
## Coordinated Disclosure
@@ -79,4 +67,4 @@ MIT License (MIT). Please see [LICENSE](LICENSE) for more information.
[java]: http://docs.oracle.com/javase/8/docs/technotes/guides/collections/index.html
-[security.md]: https://github.com/ramsey/collection/blob/master/SECURITY.md
+[security.md]: https://github.com/ramsey/collection/blob/main/SECURITY.md
diff --git a/vendor/ramsey/collection/SECURITY.md b/vendor/ramsey/collection/SECURITY.md
index b052f3b65..3de4c0cbd 100644
--- a/vendor/ramsey/collection/SECURITY.md
+++ b/vendor/ramsey/collection/SECURITY.md
@@ -1,29 +1,59 @@
<!--
- This policy was created using the HackerOne Policy Builder:
- https://hackerone.com/policy-builder/
+ This policy template was created using the HackerOne Policy Builder [1],
+ with guidance from the National Telecommunications and Information
+ Administration Coordinated Vulnerability Disclosure Template [2].
-->
-# Vulnerability Disclosure Policy
+# Vulnerability Disclosure Policy (VDP)
+
+## Brand Promise
+
+<!--
+ This is your brand promise. Its objective is to "demonstrate a clear, good
+ faith commitment to customers and other stakeholders potentially impacted by
+ security vulnerabilities" [2].
+-->
Keeping user information safe and secure is a top priority, and we welcome the
contribution of external security researchers.
## Scope
+<!--
+ This is your initial scope. It tells vulnerability finders and reporters
+ "which systems and capabilities are 'fair game' versus 'off limits'" [2].
+ For software packages, this is often a list of currently maintained versions
+ of the package.
+-->
+
If you believe you've found a security issue in software that is maintained in
this repository, we encourage you to notify us.
| Version | In scope | Source code |
-| :-----: | :------: | :---------- |
+| ------- | :------: | ----------- |
| latest | ✅ | https://github.com/ramsey/collection |
## How to Submit a Report
-To submit a vulnerability report, please contact us at <security@ramsey.dev>.
+<!--
+ This is your communication process. It tells security researchers how to
+ contact you to report a vulnerability. It may be a link to a web form that
+ uses HTTPS for secure communication, or it may be an email address.
+ Optionally, you may choose to include a PGP public key, so that researchers
+ may send you encrypted messages.
+-->
+
+To submit a vulnerability report, please contact us at security@ramsey.dev.
Your submission will be reviewed and validated by a member of our team.
## Safe Harbor
+<!--
+ This section assures vulnerability finders and reporters that they will
+ receive good faith responses to their good faith acts. In other words,
+ "we will not take legal action if..." [2].
+-->
+
We support safe harbor for security researchers who:
* Make a good faith effort to avoid privacy violations, destruction of data, and
@@ -33,7 +63,7 @@ We support safe harbor for security researchers who:
us immediately, do not proceed with access, and immediately purge any local
information.
* Provide us with a reasonable amount of time to resolve vulnerabilities prior
- to any disclosure to the public or a third-party.
+ to any disclosure to the public or a third party.
We will consider activities conducted consistent with this policy to constitute
"authorized" conduct and will not pursue civil action or initiate a complaint to
@@ -45,15 +75,41 @@ with or unaddressed by this policy.
## Preferences
+<!--
+ The preferences section sets expectations based on priority and submission
+ volume, rather than legal objection or restriction [2].
+
+ According to the NTIA [2]:
+
+ This section is a living document that sets expectations for preferences
+ and priorities, typically maintained by the support and engineering
+ team. This can outline classes of vulnerabilities, reporting style
+ (crash dumps, CVSS scoring, proof-of-concept, etc.), tools, etc. Too
+ many preferences can set the wrong tone or make reporting findings
+ difficult to navigate. This section also sets expectations to the
+ researcher community for what types of issues are considered important
+ or not.
+-->
+
* Please provide detailed reports with reproducible steps and a clearly defined
impact.
* Include the version number of the vulnerable package in your report
* Social engineering (e.g. phishing, vishing, smishing) is prohibited.
+<!--
+ References
+
+ [1] HackerOne. Policy builder. Retrieved from https://hackerone.com/policy-builder/
+
+ [2] NTIA Safety Working Group. 2016. "Early stage" coordinated vulnerability
+ disclosure template: Version 1.1. (15 December 2016). Retrieved from
+ https://www.ntia.doc.gov/files/ntia/publications/ntia_vuln_disclosure_early_stage_template.pdf
+-->
+
## Encryption Key for security@ramsey.dev
For increased privacy when reporting sensitive issues, you may encrypt your
-messages using the following key:
+message using the following public key:
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
diff --git a/vendor/ramsey/collection/composer.json b/vendor/ramsey/collection/composer.json
index 98862ee46..56709015a 100644
--- a/vendor/ramsey/collection/composer.json
+++ b/vendor/ramsey/collection/composer.json
@@ -1,7 +1,8 @@
{
"name": "ramsey/collection",
- "type": "library",
"description": "A PHP library for representing and manipulating collections.",
+ "license": "MIT",
+ "type": "library",
"keywords": [
"array",
"collection",
@@ -10,7 +11,6 @@
"queue",
"set"
],
- "license": "MIT",
"authors": [
{
"name": "Ben Ramsey",
@@ -19,31 +19,32 @@
}
],
"require": {
- "php": "^7.3 || ^8",
- "symfony/polyfill-php81": "^1.23"
+ "php": "^8.1"
},
"require-dev": {
- "captainhook/captainhook": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "ergebnis/composer-normalize": "^2.6",
- "fakerphp/faker": "^1.5",
- "hamcrest/hamcrest-php": "^2",
- "jangregor/phpstan-prophecy": "^0.8",
- "mockery/mockery": "^1.3",
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.28.3",
+ "fakerphp/faker": "^1.21",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^1.0",
+ "mockery/mockery": "^1.5",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpcsstandards/phpcsutils": "^1.0.0-rc1",
"phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1",
- "phpstan/phpstan": "^0.12.32",
- "phpstan/phpstan-mockery": "^0.12.5",
- "phpstan/phpstan-phpunit": "^0.12.11",
- "phpunit/phpunit": "^8.5 || ^9",
- "psy/psysh": "^0.10.4",
- "slevomat/coding-standard": "^6.3",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.4"
- },
- "config": {
- "sort-packages": true
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.9",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^9.5",
+ "psalm/plugin-mockery": "^1.1",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "ramsey/coding-standard": "^2.0.3",
+ "ramsey/conventional-commits": "^1.3",
+ "vimeo/psalm": "^5.4"
},
+ "minimum-stability": "RC",
+ "prefer-stable": true,
"autoload": {
"psr-4": {
"Ramsey\\Collection\\": "src/"
@@ -51,7 +52,6 @@
},
"autoload-dev": {
"psr-4": {
- "Ramsey\\Console\\": "resources/console/",
"Ramsey\\Collection\\Test\\": "tests/",
"Ramsey\\Test\\Generics\\": "tests/generics/"
},
@@ -59,44 +59,61 @@
"vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php"
]
},
+ "config": {
+ "allow-plugins": {
+ "dealerdirect/phpcodesniffer-composer-installer": true,
+ "ergebnis/composer-normalize": true,
+ "phpstan/extension-installer": true,
+ "captainhook/plugin-composer": true
+ },
+ "sort-packages": true
+ },
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
"scripts": {
- "post-autoload-dump": "captainhook install --ansi -f -s",
"dev:analyze": [
"@dev:analyze:phpstan",
"@dev:analyze:psalm"
],
- "dev:analyze:phpstan": "phpstan --memory-limit=1G analyse",
- "dev:analyze:psalm": "psalm --diff --config=psalm.xml",
- "dev:build:clean": "git clean -fX build/.",
- "dev:build:clear-cache": "git clean -fX build/cache/.",
- "dev:lint": "phpcs --cache=build/cache/phpcs.cache",
- "dev:lint:fix": "./bin/lint-fix.sh",
- "dev:repl": [
- "echo ; echo 'Type ./bin/repl to start the REPL.'"
+ "dev:analyze:phpstan": "phpstan analyse --ansi --memory-limit=1G",
+ "dev:analyze:psalm": "psalm",
+ "dev:build:clean": "git clean -fX build/",
+ "dev:lint": [
+ "@dev:lint:syntax",
+ "@dev:lint:style"
],
- "dev:test": "phpunit",
- "dev:test:all": [
+ "dev:lint:fix": "phpcbf",
+ "dev:lint:style": "phpcs --colors",
+ "dev:lint:syntax": "parallel-lint --colors src/ tests/",
+ "dev:test": [
"@dev:lint",
"@dev:analyze",
- "@dev:test"
+ "@dev:test:unit"
],
- "dev:test:coverage:ci": "phpunit --coverage-clover build/logs/clover.xml",
- "dev:test:coverage:html": "phpunit --coverage-html build/coverage",
- "test": "@dev:test:all"
+ "dev:test:coverage:ci": "phpunit --colors=always --coverage-text --coverage-clover build/coverage/clover.xml --coverage-cobertura build/coverage/cobertura.xml --coverage-crap4j build/coverage/crap4j.xml --coverage-xml build/coverage/coverage-xml --log-junit build/junit.xml",
+ "dev:test:coverage:html": "phpunit --colors=always --coverage-html build/coverage/coverage-html/",
+ "dev:test:unit": "phpunit --colors=always",
+ "test": "@dev:test"
},
"scripts-descriptions": {
- "dev:analyze": "Performs static analysis on the code base.",
+ "dev:analyze": "Runs all static analysis checks.",
"dev:analyze:phpstan": "Runs the PHPStan static analyzer.",
"dev:analyze:psalm": "Runs the Psalm static analyzer.",
- "dev:build:clean": "Removes everything not under version control from the build directory.",
- "dev:build:clear-cache": "Removes everything not under version control from build/cache/.",
- "dev:lint": "Checks all source code for coding standards issues.",
- "dev:lint:fix": "Checks source code for coding standards issues and fixes them, if possible.",
- "dev:repl": "Note: Use ./bin/repl to run the REPL.",
- "dev:test": "Runs the full unit test suite.",
- "dev:test:all": "Runs linting, static analysis, and unit tests.",
- "dev:test:coverage:ci": "Runs the unit test suite and generates a Clover coverage report.",
- "dev:test:coverage:html": "Runs the unit tests suite and generates an HTML coverage report.",
- "test": "Shortcut to run the full test suite."
+ "dev:build:clean": "Cleans the build/ directory.",
+ "dev:lint": "Runs all linting checks.",
+ "dev:lint:fix": "Auto-fixes coding standards issues, if possible.",
+ "dev:lint:style": "Checks for coding standards issues.",
+ "dev:lint:syntax": "Checks for syntax errors.",
+ "dev:test": "Runs linting, static analysis, and unit tests.",
+ "dev:test:coverage:ci": "Runs unit tests and generates CI coverage reports.",
+ "dev:test:coverage:html": "Runs unit tests and generates HTML coverage report.",
+ "dev:test:unit": "Runs unit tests.",
+ "test": "Runs linting, static analysis, and unit tests."
}
}
diff --git a/vendor/ramsey/collection/conventional-commits.json b/vendor/ramsey/collection/conventional-commits.json
new file mode 100644
index 000000000..5fe21d2fa
--- /dev/null
+++ b/vendor/ramsey/collection/conventional-commits.json
@@ -0,0 +1,22 @@
+{
+ "typeCase": "kebab",
+ "types": [
+ "chore",
+ "ci",
+ "docs",
+ "feat",
+ "fix",
+ "refactor",
+ "security",
+ "style",
+ "test"
+ ],
+ "scopeCase": "kebab",
+ "scopeRequired": false,
+ "scopes": [],
+ "descriptionCase": null,
+ "descriptionEndMark": "",
+ "bodyRequired": false,
+ "bodyWrapWidth": 72,
+ "requiredFooters": []
+}
diff --git a/vendor/ramsey/collection/src/AbstractArray.php b/vendor/ramsey/collection/src/AbstractArray.php
index d72dbe697..5ce622aa7 100644
--- a/vendor/ramsey/collection/src/AbstractArray.php
+++ b/vendor/ramsey/collection/src/AbstractArray.php
@@ -17,8 +17,7 @@ namespace Ramsey\Collection;
use ArrayIterator;
use Traversable;
-use function serialize;
-use function unserialize;
+use function count;
/**
* This class provides a basic implementation of `ArrayInterface`, to minimize
@@ -34,7 +33,7 @@ abstract class AbstractArray implements ArrayInterface
*
* @var array<array-key, T>
*/
- protected $data = [];
+ protected array $data = [];
/**
* Constructs a new array object.
@@ -69,7 +68,7 @@ abstract class AbstractArray implements ArrayInterface
*
* @param array-key $offset The offset to check.
*/
- public function offsetExists($offset): bool
+ public function offsetExists(mixed $offset): bool
{
return isset($this->data[$offset]);
}
@@ -81,15 +80,12 @@ abstract class AbstractArray implements ArrayInterface
*
* @param array-key $offset The offset for which a value should be returned.
*
- * @return T|null the value stored at the offset, or null if the offset
+ * @return T the value stored at the offset, or null if the offset
* does not exist.
- *
- * @psalm-suppress InvalidAttribute
*/
- #[\ReturnTypeWillChange] // phpcs:ignore
- public function offsetGet($offset)
+ public function offsetGet(mixed $offset): mixed
{
- return $this->data[$offset] ?? null;
+ return $this->data[$offset];
}
/**
@@ -97,12 +93,11 @@ abstract class AbstractArray implements ArrayInterface
*
* @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet()
*
- * @param array-key|null $offset The offset to set. If `null`, the value may be
- * set at a numerically-indexed offset.
+ * @param array-key | null $offset The offset to set. If `null`, the value
+ * may be set at a numerically-indexed offset.
* @param T $value The value to set at the given offset.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function offsetSet($offset, $value): void
+ public function offsetSet(mixed $offset, mixed $value): void
{
if ($offset === null) {
$this->data[] = $value;
@@ -118,26 +113,12 @@ abstract class AbstractArray implements ArrayInterface
*
* @param array-key $offset The offset to remove from the array.
*/
- public function offsetUnset($offset): void
+ public function offsetUnset(mixed $offset): void
{
unset($this->data[$offset]);
}
/**
- * Returns a serialized string representation of this array object.
- *
- * @deprecated The Serializable interface will go away in PHP 9.
- *
- * @link http://php.net/manual/en/serializable.serialize.php Serializable::serialize()
- *
- * @return string a PHP serialized string.
- */
- public function serialize(): string
- {
- return serialize($this->data);
- }
-
- /**
* Returns data suitable for PHP serialization.
*
* @link https://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.serialize
@@ -151,25 +132,6 @@ abstract class AbstractArray implements ArrayInterface
}
/**
- * Converts a serialized string representation into an instance object.
- *
- * @deprecated The Serializable interface will go away in PHP 9.
- *
- * @link http://php.net/manual/en/serializable.unserialize.php Serializable::unserialize()
- *
- * @param string $serialized A PHP serialized string to unserialize.
- *
- * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- */
- public function unserialize($serialized): void
- {
- /** @var array<array-key, T> $data */
- $data = unserialize($serialized, ['allowed_classes' => false]);
-
- $this->data = $data;
- }
-
- /**
* Adds unserialized data to the object.
*
* @param array<array-key, T> $data
@@ -204,6 +166,6 @@ abstract class AbstractArray implements ArrayInterface
public function isEmpty(): bool
{
- return count($this->data) === 0;
+ return $this->data === [];
}
}
diff --git a/vendor/ramsey/collection/src/AbstractCollection.php b/vendor/ramsey/collection/src/AbstractCollection.php
index d2cd1151c..8cb21ec02 100644
--- a/vendor/ramsey/collection/src/AbstractCollection.php
+++ b/vendor/ramsey/collection/src/AbstractCollection.php
@@ -17,25 +17,27 @@ namespace Ramsey\Collection;
use Closure;
use Ramsey\Collection\Exception\CollectionMismatchException;
use Ramsey\Collection\Exception\InvalidArgumentException;
-use Ramsey\Collection\Exception\InvalidSortOrderException;
-use Ramsey\Collection\Exception\OutOfBoundsException;
+use Ramsey\Collection\Exception\InvalidPropertyOrMethod;
+use Ramsey\Collection\Exception\NoSuchElementException;
+use Ramsey\Collection\Exception\UnsupportedOperationException;
use Ramsey\Collection\Tool\TypeTrait;
use Ramsey\Collection\Tool\ValueExtractorTrait;
use Ramsey\Collection\Tool\ValueToStringTrait;
use function array_filter;
+use function array_key_first;
+use function array_key_last;
use function array_map;
use function array_merge;
+use function array_reduce;
use function array_search;
use function array_udiff;
use function array_uintersect;
-use function current;
-use function end;
use function in_array;
use function is_int;
-use function reset;
+use function is_object;
+use function spl_object_id;
use function sprintf;
-use function unserialize;
use function usort;
/**
@@ -53,32 +55,29 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
use ValueExtractorTrait;
/**
- * @inheritDoc
+ * @throws InvalidArgumentException if $element is of the wrong type.
*/
- public function add($element): bool
+ public function add(mixed $element): bool
{
$this[] = $element;
return true;
}
- /**
- * @inheritDoc
- */
- public function contains($element, bool $strict = true): bool
+ public function contains(mixed $element, bool $strict = true): bool
{
return in_array($element, $this->data, $strict);
}
/**
- * @inheritDoc
+ * @throws InvalidArgumentException if $element is of the wrong type.
*/
- public function offsetSet($offset, $value): void
+ public function offsetSet(mixed $offset, mixed $value): void
{
if ($this->checkType($this->getType(), $value) === false) {
throw new InvalidArgumentException(
'Value must be of type ' . $this->getType() . '; value is '
- . $this->toolValueToString($value)
+ . $this->toolValueToString($value),
);
}
@@ -89,13 +88,10 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
}
}
- /**
- * @inheritDoc
- */
- public function remove($element): bool
+ public function remove(mixed $element): bool
{
if (($position = array_search($element, $this->data, true)) !== false) {
- unset($this->data[$position]);
+ unset($this[$position]);
return true;
}
@@ -104,6 +100,11 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
}
/**
+ * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist
+ * on the elements in this collection.
+ * @throws UnsupportedOperationException if unable to call column() on this
+ * collection.
+ *
* @inheritDoc
*/
public function column(string $propertyOrMethod): array
@@ -111,55 +112,55 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
$temp = [];
foreach ($this->data as $item) {
- /** @var mixed $value */
- $value = $this->extractValue($item, $propertyOrMethod);
-
/** @psalm-suppress MixedAssignment */
- $temp[] = $value;
+ $temp[] = $this->extractValue($item, $propertyOrMethod);
}
return $temp;
}
/**
- * @inheritDoc
+ * @return T
+ *
+ * @throws NoSuchElementException if this collection is empty.
*/
- public function first()
+ public function first(): mixed
{
- if ($this->isEmpty()) {
- throw new OutOfBoundsException('Can\'t determine first item. Collection is empty');
- }
-
- reset($this->data);
+ $firstIndex = array_key_first($this->data);
- /** @var T $first */
- $first = current($this->data);
+ if ($firstIndex === null) {
+ throw new NoSuchElementException('Can\'t determine first item. Collection is empty');
+ }
- return $first;
+ return $this->data[$firstIndex];
}
/**
- * @inheritDoc
+ * @return T
+ *
+ * @throws NoSuchElementException if this collection is empty.
*/
- public function last()
+ public function last(): mixed
{
- if ($this->isEmpty()) {
- throw new OutOfBoundsException('Can\'t determine last item. Collection is empty');
- }
+ $lastIndex = array_key_last($this->data);
- /** @var T $item */
- $item = end($this->data);
- reset($this->data);
+ if ($lastIndex === null) {
+ throw new NoSuchElementException('Can\'t determine last item. Collection is empty');
+ }
- return $item;
+ return $this->data[$lastIndex];
}
- public function sort(string $propertyOrMethod, string $order = self::SORT_ASC): CollectionInterface
+ /**
+ * @return CollectionInterface<T>
+ *
+ * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist
+ * on the elements in this collection.
+ * @throws UnsupportedOperationException if unable to call sort() on this
+ * collection.
+ */
+ public function sort(?string $propertyOrMethod = null, Sort $order = Sort::Ascending): CollectionInterface
{
- if (!in_array($order, [self::SORT_ASC, self::SORT_DESC], true)) {
- throw new InvalidSortOrderException('Invalid sort order given: ' . $order);
- }
-
$collection = clone $this;
usort(
@@ -168,20 +169,25 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
* @param T $a
* @param T $b
*/
- function ($a, $b) use ($propertyOrMethod, $order): int {
+ function (mixed $a, mixed $b) use ($propertyOrMethod, $order): int {
/** @var mixed $aValue */
$aValue = $this->extractValue($a, $propertyOrMethod);
/** @var mixed $bValue */
$bValue = $this->extractValue($b, $propertyOrMethod);
- return ($aValue <=> $bValue) * ($order === self::SORT_DESC ? -1 : 1);
- }
+ return ($aValue <=> $bValue) * ($order === Sort::Descending ? -1 : 1);
+ },
);
return $collection;
}
+ /**
+ * @param callable(T): bool $callback A callable to use for filtering elements.
+ *
+ * @return CollectionInterface<T>
+ */
public function filter(callable $callback): CollectionInterface
{
$collection = clone $this;
@@ -191,23 +197,66 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
}
/**
- * {@inheritdoc}
+ * @return CollectionInterface<T>
+ *
+ * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist
+ * on the elements in this collection.
+ * @throws UnsupportedOperationException if unable to call where() on this
+ * collection.
*/
- public function where(string $propertyOrMethod, $value): CollectionInterface
+ public function where(?string $propertyOrMethod, mixed $value): CollectionInterface
{
- return $this->filter(function ($item) use ($propertyOrMethod, $value) {
- /** @var mixed $accessorValue */
- $accessorValue = $this->extractValue($item, $propertyOrMethod);
+ return $this->filter(
+ /**
+ * @param T $item
+ */
+ function (mixed $item) use ($propertyOrMethod, $value): bool {
+ /** @var mixed $accessorValue */
+ $accessorValue = $this->extractValue($item, $propertyOrMethod);
- return $accessorValue === $value;
- });
+ return $accessorValue === $value;
+ },
+ );
}
+ /**
+ * @param callable(T): TCallbackReturn $callback A callable to apply to each
+ * item of the collection.
+ *
+ * @return CollectionInterface<TCallbackReturn>
+ *
+ * @template TCallbackReturn
+ */
public function map(callable $callback): CollectionInterface
{
+ /** @var Collection<TCallbackReturn> */
return new Collection('mixed', array_map($callback, $this->data));
}
+ /**
+ * @param callable(TCarry, T): TCarry $callback A callable to apply to each
+ * item of the collection to reduce it to a single value.
+ * @param TCarry $initial This is the initial value provided to the callback.
+ *
+ * @return TCarry
+ *
+ * @template TCarry
+ */
+ public function reduce(callable $callback, mixed $initial): mixed
+ {
+ /** @var TCarry */
+ return array_reduce($this->data, $callback, $initial);
+ }
+
+ /**
+ * @param CollectionInterface<T> $other The collection to check for divergent
+ * items.
+ *
+ * @return CollectionInterface<T>
+ *
+ * @throws CollectionMismatchException if the compared collections are of
+ * differing types.
+ */
public function diff(CollectionInterface $other): CollectionInterface
{
$this->compareCollectionTypes($other);
@@ -224,6 +273,15 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
return $collection;
}
+ /**
+ * @param CollectionInterface<T> $other The collection to check for
+ * intersecting items.
+ *
+ * @return CollectionInterface<T>
+ *
+ * @throws CollectionMismatchException if the compared collections are of
+ * differing types.
+ */
public function intersect(CollectionInterface $other): CollectionInterface
{
$this->compareCollectionTypes($other);
@@ -237,6 +295,15 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
return $collection;
}
+ /**
+ * @param CollectionInterface<T> ...$collections The collections to merge.
+ *
+ * @return CollectionInterface<T>
+ *
+ * @throws CollectionMismatchException if unable to merge any of the given
+ * collections or items within the given collections due to type
+ * mismatch errors.
+ */
public function merge(CollectionInterface ...$collections): CollectionInterface
{
$mergedCollection = clone $this;
@@ -244,15 +311,19 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
foreach ($collections as $index => $collection) {
if (!$collection instanceof static) {
throw new CollectionMismatchException(
- sprintf('Collection with index %d must be of type %s', $index, static::class)
+ sprintf('Collection with index %d must be of type %s', $index, static::class),
);
}
// When using generics (Collection.php, Set.php, etc),
// we also need to make sure that the internal types match each other
- if ($collection->getType() !== $this->getType()) {
+ if ($this->getUniformType($collection) !== $this->getUniformType($this)) {
throw new CollectionMismatchException(
- sprintf('Collection items in collection with index %d must be of type %s', $index, $this->getType())
+ sprintf(
+ 'Collection items in collection with index %d must be of type %s',
+ $index,
+ $this->getType(),
+ ),
);
}
@@ -269,18 +340,9 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
}
/**
- * @inheritDoc
- */
- public function unserialize($serialized): void
- {
- /** @var array<array-key, T> $data */
- $data = unserialize($serialized, ['allowed_classes' => [$this->getType()]]);
-
- $this->data = $data;
- }
-
- /**
* @param CollectionInterface<T> $other
+ *
+ * @throws CollectionMismatchException
*/
private function compareCollectionTypes(CollectionInterface $other): void
{
@@ -290,7 +352,7 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
// When using generics (Collection.php, Set.php, etc),
// we also need to make sure that the internal types match each other
- if ($other->getType() !== $this->getType()) {
+ if ($this->getUniformType($other) !== $this->getUniformType($this)) {
throw new CollectionMismatchException('Collection items must be of type ' . $this->getType());
}
}
@@ -301,7 +363,7 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
* @param T $a
* @param T $b
*/
- function ($a, $b): int {
+ function (mixed $a, mixed $b): int {
// If the two values are object, we convert them to unique scalars.
// If the collection contains mixed values (unlikely) where some are objects
// and some are not, we leave them as they are.
@@ -315,4 +377,17 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt
return $a === $b ? 0 : ($a < $b ? 1 : -1);
};
}
+
+ /**
+ * @param CollectionInterface<mixed> $collection
+ */
+ private function getUniformType(CollectionInterface $collection): string
+ {
+ return match ($collection->getType()) {
+ 'integer' => 'int',
+ 'boolean' => 'bool',
+ 'double' => 'float',
+ default => $collection->getType(),
+ };
+ }
}
diff --git a/vendor/ramsey/collection/src/AbstractSet.php b/vendor/ramsey/collection/src/AbstractSet.php
index 1126ccb0a..7186939d7 100644
--- a/vendor/ramsey/collection/src/AbstractSet.php
+++ b/vendor/ramsey/collection/src/AbstractSet.php
@@ -24,10 +24,7 @@ namespace Ramsey\Collection;
*/
abstract class AbstractSet extends AbstractCollection
{
- /**
- * @inheritDoc
- */
- public function add($element): bool
+ public function add(mixed $element): bool
{
if ($this->contains($element)) {
return false;
@@ -36,10 +33,7 @@ abstract class AbstractSet extends AbstractCollection
return parent::add($element);
}
- /**
- * @inheritDoc
- */
- public function offsetSet($offset, $value): void
+ public function offsetSet(mixed $offset, mixed $value): void
{
if ($this->contains($value)) {
return;
diff --git a/vendor/ramsey/collection/src/ArrayInterface.php b/vendor/ramsey/collection/src/ArrayInterface.php
index 27af6102b..bc7f6f424 100644
--- a/vendor/ramsey/collection/src/ArrayInterface.php
+++ b/vendor/ramsey/collection/src/ArrayInterface.php
@@ -17,7 +17,6 @@ namespace Ramsey\Collection;
use ArrayAccess;
use Countable;
use IteratorAggregate;
-use Serializable;
/**
* `ArrayInterface` provides traversable array functionality to data types.
@@ -29,8 +28,7 @@ use Serializable;
interface ArrayInterface extends
ArrayAccess,
Countable,
- IteratorAggregate,
- Serializable
+ IteratorAggregate
{
/**
* Removes all items from this array.
diff --git a/vendor/ramsey/collection/src/Collection.php b/vendor/ramsey/collection/src/Collection.php
index 1299c12c2..44d26bf2e 100644
--- a/vendor/ramsey/collection/src/Collection.php
+++ b/vendor/ramsey/collection/src/Collection.php
@@ -76,26 +76,15 @@ namespace Ramsey\Collection;
class Collection extends AbstractCollection
{
/**
- * The type of elements stored in this collection.
- *
- * A collection's type is immutable once it is set. For this reason, this
- * property is set private.
- *
- * @var string
- */
- private $collectionType;
-
- /**
* Constructs a collection object of the specified type, optionally with the
* specified data.
*
- * @param string $collectionType The type (FQCN) associated with this
+ * @param string $collectionType The type or class name associated with this
* collection.
* @param array<array-key, T> $data The initial items to store in the collection.
*/
- public function __construct(string $collectionType, array $data = [])
+ public function __construct(private readonly string $collectionType, array $data = [])
{
- $this->collectionType = $collectionType;
parent::__construct($data);
}
diff --git a/vendor/ramsey/collection/src/CollectionInterface.php b/vendor/ramsey/collection/src/CollectionInterface.php
index aa86feb04..e3ad01470 100644
--- a/vendor/ramsey/collection/src/CollectionInterface.php
+++ b/vendor/ramsey/collection/src/CollectionInterface.php
@@ -14,8 +14,14 @@ declare(strict_types=1);
namespace Ramsey\Collection;
+use Ramsey\Collection\Exception\CollectionMismatchException;
+use Ramsey\Collection\Exception\InvalidArgumentException;
+use Ramsey\Collection\Exception\InvalidPropertyOrMethod;
+use Ramsey\Collection\Exception\NoSuchElementException;
+use Ramsey\Collection\Exception\UnsupportedOperationException;
+
/**
- * A collection represents a group of objects, known as its elements.
+ * A collection represents a group of values, known as its elements.
*
* Some collections allow duplicate elements and others do not. Some are ordered
* and others unordered.
@@ -26,16 +32,6 @@ namespace Ramsey\Collection;
interface CollectionInterface extends ArrayInterface
{
/**
- * Ascending sort type.
- */
- public const SORT_ASC = 'asc';
-
- /**
- * Descending sort type.
- */
- public const SORT_DESC = 'desc';
-
- /**
* Ensures that this collection contains the specified element (optional
* operation).
*
@@ -58,9 +54,11 @@ interface CollectionInterface extends ArrayInterface
* @param T $element The element to add to the collection.
*
* @return bool `true` if this collection changed as a result of the call.
+ *
+ * @throws InvalidArgumentException if the collection refuses to add the
+ * $element for any reason other than that it already contains the element.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function add($element): bool;
+ public function add(mixed $element): bool;
/**
* Returns `true` if this collection contains the specified element.
@@ -68,8 +66,7 @@ interface CollectionInterface extends ArrayInterface
* @param T $element The element to check whether the collection contains.
* @param bool $strict Whether to perform a strict type check on the value.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function contains($element, bool $strict = true): bool;
+ public function contains(mixed $element, bool $strict = true): bool;
/**
* Returns the type associated with this collection.
@@ -84,15 +81,20 @@ interface CollectionInterface extends ArrayInterface
*
* @return bool `true` if an element was removed as a result of this call.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function remove($element): bool;
+ public function remove(mixed $element): bool;
/**
- * Returns the values from the given property or method.
+ * Returns the values from the given property, method, or array key.
+ *
+ * @param string $propertyOrMethod The name of the property, method, or
+ * array key to evaluate and return.
*
- * @param string $propertyOrMethod The property or method name to filter by.
+ * @return array<int, mixed>
*
- * @return list<mixed>
+ * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist
+ * on the elements in this collection.
+ * @throws UnsupportedOperationException if unable to call column() on this
+ * collection.
*/
public function column(string $propertyOrMethod): array;
@@ -100,29 +102,41 @@ interface CollectionInterface extends ArrayInterface
* Returns the first item of the collection.
*
* @return T
+ *
+ * @throws NoSuchElementException if this collection is empty.
*/
- public function first();
+ public function first(): mixed;
/**
* Returns the last item of the collection.
*
* @return T
+ *
+ * @throws NoSuchElementException if this collection is empty.
*/
- public function last();
+ public function last(): mixed;
/**
- * Sort the collection by a property or method with the given sort order.
+ * Sort the collection by a property, method, or array key with the given
+ * sort order.
+ *
+ * If $propertyOrMethod is `null`, this will sort by comparing each element.
*
* This will always leave the original collection untouched and will return
* a new one.
*
- * @param string $propertyOrMethod The property or method to sort by.
- * @param string $order The sort order for the resulting collection (one of
- * this interface's `SORT_*` constants).
+ * @param string | null $propertyOrMethod The property, method, or array key
+ * to sort by.
+ * @param Sort $order The sort order for the resulting collection.
*
* @return CollectionInterface<T>
+ *
+ * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist
+ * on the elements in this collection.
+ * @throws UnsupportedOperationException if unable to call sort() on this
+ * collection.
*/
- public function sort(string $propertyOrMethod, string $order = self::SORT_ASC): self;
+ public function sort(?string $propertyOrMethod = null, Sort $order = Sort::Ascending): self;
/**
* Filter out items of the collection which don't match the criteria of
@@ -134,24 +148,31 @@ interface CollectionInterface extends ArrayInterface
* See the {@link http://php.net/manual/en/function.array-filter.php PHP array_filter() documentation}
* for examples of how the `$callback` parameter works.
*
- * @param callable(T):bool $callback A callable to use for filtering elements.
+ * @param callable(T): bool $callback A callable to use for filtering elements.
*
* @return CollectionInterface<T>
*/
public function filter(callable $callback): self;
/**
- * Create a new collection where items match the criteria of given callback.
+ * Create a new collection where the result of the given property, method,
+ * or array key of each item in the collection equals the given value.
*
* This will always leave the original collection untouched and will return
* a new one.
*
- * @param string $propertyOrMethod The property or method to evaluate.
+ * @param string | null $propertyOrMethod The property, method, or array key
+ * to evaluate. If `null`, the element itself is compared to $value.
* @param mixed $value The value to match.
*
* @return CollectionInterface<T>
+ *
+ * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist
+ * on the elements in this collection.
+ * @throws UnsupportedOperationException if unable to call where() on this
+ * collection.
*/
- public function where(string $propertyOrMethod, $value): self;
+ public function where(?string $propertyOrMethod, mixed $value): self;
/**
* Apply a given callback method on each item of the collection.
@@ -163,7 +184,7 @@ interface CollectionInterface extends ArrayInterface
* See the {@link http://php.net/manual/en/function.array-map.php PHP array_map() documentation}
* for examples of how the `$callback` parameter works.
*
- * @param callable(T):TCallbackReturn $callback A callable to apply to each
+ * @param callable(T): TCallbackReturn $callback A callable to apply to each
* item of the collection.
*
* @return CollectionInterface<TCallbackReturn>
@@ -173,6 +194,23 @@ interface CollectionInterface extends ArrayInterface
public function map(callable $callback): self;
/**
+ * Apply a given callback method on each item of the collection
+ * to reduce it to a single value.
+ *
+ * See the {@link http://php.net/manual/en/function.array-reduce.php PHP array_reduce() documentation}
+ * for examples of how the `$callback` and `$initial` parameters work.
+ *
+ * @param callable(TCarry, T): TCarry $callback A callable to apply to each
+ * item of the collection to reduce it to a single value.
+ * @param TCarry $initial This is the initial value provided to the callback.
+ *
+ * @return TCarry
+ *
+ * @template TCarry
+ */
+ public function reduce(callable $callback, mixed $initial): mixed;
+
+ /**
* Create a new collection with divergent items between current and given
* collection.
*
@@ -180,6 +218,9 @@ interface CollectionInterface extends ArrayInterface
* items.
*
* @return CollectionInterface<T>
+ *
+ * @throws CollectionMismatchException if the compared collections are of
+ * differing types.
*/
public function diff(CollectionInterface $other): self;
@@ -191,6 +232,9 @@ interface CollectionInterface extends ArrayInterface
* intersecting items.
*
* @return CollectionInterface<T>
+ *
+ * @throws CollectionMismatchException if the compared collections are of
+ * differing types.
*/
public function intersect(CollectionInterface $other): self;
@@ -200,6 +244,10 @@ interface CollectionInterface extends ArrayInterface
* @param CollectionInterface<T> ...$collections The collections to merge.
*
* @return CollectionInterface<T>
+ *
+ * @throws CollectionMismatchException if unable to merge any of the given
+ * collections or items within the given collections due to type
+ * mismatch errors.
*/
public function merge(CollectionInterface ...$collections): self;
}
diff --git a/vendor/ramsey/collection/src/DoubleEndedQueue.php b/vendor/ramsey/collection/src/DoubleEndedQueue.php
index c9c59502d..62947a24f 100644
--- a/vendor/ramsey/collection/src/DoubleEndedQueue.php
+++ b/vendor/ramsey/collection/src/DoubleEndedQueue.php
@@ -17,6 +17,10 @@ namespace Ramsey\Collection;
use Ramsey\Collection\Exception\InvalidArgumentException;
use Ramsey\Collection\Exception\NoSuchElementException;
+use function array_key_last;
+use function array_pop;
+use function array_unshift;
+
/**
* This class provides a basic implementation of `DoubleEndedQueueInterface`, to
* minimize the effort required to implement this interface.
@@ -28,160 +32,135 @@ use Ramsey\Collection\Exception\NoSuchElementException;
class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface
{
/**
- * Index of the last element in the queue.
+ * Constructs a double-ended queue (dequeue) object of the specified type,
+ * optionally with the specified data.
*
- * @var int
- */
- private $tail = -1;
-
- /**
- * @inheritDoc
+ * @param string $queueType The type or class name associated with this dequeue.
+ * @param array<array-key, T> $data The initial items to store in the dequeue.
*/
- public function offsetSet($offset, $value): void
+ public function __construct(private readonly string $queueType, array $data = [])
{
- if ($this->checkType($this->getType(), $value) === false) {
- throw new InvalidArgumentException(
- 'Value must be of type ' . $this->getType() . '; value is '
- . $this->toolValueToString($value)
- );
- }
-
- $this->tail++;
-
- $this->data[$this->tail] = $value;
+ parent::__construct($this->queueType, $data);
}
/**
- * @inheritDoc
+ * @throws InvalidArgumentException if $element is of the wrong type
*/
- public function addFirst($element): bool
+ public function addFirst(mixed $element): bool
{
if ($this->checkType($this->getType(), $element) === false) {
throw new InvalidArgumentException(
'Value must be of type ' . $this->getType() . '; value is '
- . $this->toolValueToString($element)
+ . $this->toolValueToString($element),
);
}
- $this->index--;
-
- $this->data[$this->index] = $element;
+ array_unshift($this->data, $element);
return true;
}
/**
- * @inheritDoc
+ * @throws InvalidArgumentException if $element is of the wrong type
*/
- public function addLast($element): bool
+ public function addLast(mixed $element): bool
{
return $this->add($element);
}
- /**
- * @inheritDoc
- */
- public function offerFirst($element): bool
+ public function offerFirst(mixed $element): bool
{
try {
return $this->addFirst($element);
- } catch (InvalidArgumentException $e) {
+ } catch (InvalidArgumentException) {
return false;
}
}
- /**
- * @inheritDoc
- */
- public function offerLast($element): bool
+ public function offerLast(mixed $element): bool
{
return $this->offer($element);
}
/**
- * @inheritDoc
+ * @return T the first element in this queue.
+ *
+ * @throws NoSuchElementException if the queue is empty
*/
- public function removeFirst()
+ public function removeFirst(): mixed
{
return $this->remove();
}
/**
- * @inheritDoc
+ * @return T the last element in this queue.
+ *
+ * @throws NoSuchElementException if this queue is empty.
*/
- public function removeLast()
+ public function removeLast(): mixed
{
- $tail = $this->pollLast();
-
- if ($tail === null) {
- throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.');
- }
-
- return $tail;
+ return $this->pollLast() ?? throw new NoSuchElementException(
+ 'Can\'t return element from Queue. Queue is empty.',
+ );
}
/**
- * @inheritDoc
+ * @return T | null the head of this queue, or `null` if this queue is empty.
*/
- public function pollFirst()
+ public function pollFirst(): mixed
{
return $this->poll();
}
/**
- * @inheritDoc
+ * @return T | null the tail of this queue, or `null` if this queue is empty.
*/
- public function pollLast()
+ public function pollLast(): mixed
{
- if ($this->count() === 0) {
- return null;
- }
-
- $tail = $this[$this->tail];
-
- unset($this[$this->tail]);
- $this->tail--;
-
- return $tail;
+ return array_pop($this->data);
}
/**
- * @inheritDoc
+ * @return T the head of this queue.
+ *
+ * @throws NoSuchElementException if this queue is empty.
*/
- public function firstElement()
+ public function firstElement(): mixed
{
return $this->element();
}
/**
- * @inheritDoc
+ * @return T the tail of this queue.
+ *
+ * @throws NoSuchElementException if this queue is empty.
*/
- public function lastElement()
+ public function lastElement(): mixed
{
- if ($this->count() === 0) {
- throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.');
- }
-
- return $this->data[$this->tail];
+ return $this->peekLast() ?? throw new NoSuchElementException(
+ 'Can\'t return element from Queue. Queue is empty.',
+ );
}
/**
- * @inheritDoc
+ * @return T | null the head of this queue, or `null` if this queue is empty.
*/
- public function peekFirst()
+ public function peekFirst(): mixed
{
return $this->peek();
}
/**
- * @inheritDoc
+ * @return T | null the tail of this queue, or `null` if this queue is empty.
*/
- public function peekLast()
+ public function peekLast(): mixed
{
- if ($this->count() === 0) {
+ $lastIndex = array_key_last($this->data);
+
+ if ($lastIndex === null) {
return null;
}
- return $this->data[$this->tail];
+ return $this->data[$lastIndex];
}
}
diff --git a/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php b/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php
index d7df53469..15cc0e97b 100644
--- a/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php
+++ b/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php
@@ -15,6 +15,7 @@ declare(strict_types=1);
namespace Ramsey\Collection;
use Ramsey\Collection\Exception\NoSuchElementException;
+use RuntimeException;
/**
* A linear collection that supports element insertion and removal at both ends.
@@ -175,13 +176,12 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @return bool `true` if this queue changed as a result of the call.
*
- * @throws \RuntimeException if a queue refuses to add a particular element
+ * @throws RuntimeException if a queue refuses to add a particular element
* for any reason other than that it already contains the element.
* Implementations should use a more-specific exception that extends
* `\RuntimeException`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function addFirst($element): bool;
+ public function addFirst(mixed $element): bool;
/**
* Inserts the specified element at the end of this queue if it is possible
@@ -196,13 +196,12 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @return bool `true` if this queue changed as a result of the call.
*
- * @throws \RuntimeException if a queue refuses to add a particular element
+ * @throws RuntimeException if a queue refuses to add a particular element
* for any reason other than that it already contains the element.
* Implementations should use a more-specific exception that extends
* `\RuntimeException`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function addLast($element): bool;
+ public function addLast(mixed $element): bool;
/**
* Inserts the specified element at the front of this queue if it is
@@ -216,8 +215,7 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @return bool `true` if the element was added to this queue, else `false`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function offerFirst($element): bool;
+ public function offerFirst(mixed $element): bool;
/**
* Inserts the specified element at the end of this queue if it is possible
@@ -231,8 +229,7 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @return bool `true` if the element was added to this queue, else `false`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function offerLast($element): bool;
+ public function offerLast(mixed $element): bool;
/**
* Retrieves and removes the head of this queue.
@@ -244,7 +241,7 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @throws NoSuchElementException if this queue is empty.
*/
- public function removeFirst();
+ public function removeFirst(): mixed;
/**
* Retrieves and removes the tail of this queue.
@@ -256,23 +253,23 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @throws NoSuchElementException if this queue is empty.
*/
- public function removeLast();
+ public function removeLast(): mixed;
/**
* Retrieves and removes the head of this queue, or returns `null` if this
* queue is empty.
*
- * @return T|null the head of this queue, or `null` if this queue is empty.
+ * @return T | null the head of this queue, or `null` if this queue is empty.
*/
- public function pollFirst();
+ public function pollFirst(): mixed;
/**
* Retrieves and removes the tail of this queue, or returns `null` if this
* queue is empty.
*
- * @return T|null the tail of this queue, or `null` if this queue is empty.
+ * @return T | null the tail of this queue, or `null` if this queue is empty.
*/
- public function pollLast();
+ public function pollLast(): mixed;
/**
* Retrieves, but does not remove, the head of this queue.
@@ -284,7 +281,7 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @throws NoSuchElementException if this queue is empty.
*/
- public function firstElement();
+ public function firstElement(): mixed;
/**
* Retrieves, but does not remove, the tail of this queue.
@@ -296,21 +293,21 @@ interface DoubleEndedQueueInterface extends QueueInterface
*
* @throws NoSuchElementException if this queue is empty.
*/
- public function lastElement();
+ public function lastElement(): mixed;
/**
* Retrieves, but does not remove, the head of this queue, or returns `null`
* if this queue is empty.
*
- * @return T|null the head of this queue, or `null` if this queue is empty.
+ * @return T | null the head of this queue, or `null` if this queue is empty.
*/
- public function peekFirst();
+ public function peekFirst(): mixed;
/**
* Retrieves, but does not remove, the tail of this queue, or returns `null`
* if this queue is empty.
*
- * @return T|null the tail of this queue, or `null` if this queue is empty.
+ * @return T | null the tail of this queue, or `null` if this queue is empty.
*/
- public function peekLast();
+ public function peekLast(): mixed;
}
diff --git a/vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php b/vendor/ramsey/collection/src/Exception/CollectionException.php
index 9337ccc66..4aa92bed8 100644
--- a/vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php
+++ b/vendor/ramsey/collection/src/Exception/CollectionException.php
@@ -14,9 +14,8 @@ declare(strict_types=1);
namespace Ramsey\Collection\Exception;
-/**
- * Thrown when attempting to use a sort order that is not recognized.
- */
-class InvalidSortOrderException extends \RuntimeException
+use Throwable;
+
+interface CollectionException extends Throwable
{
}
diff --git a/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php b/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php
index d4b335f45..42f5be2df 100644
--- a/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php
+++ b/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php
@@ -14,9 +14,11 @@ declare(strict_types=1);
namespace Ramsey\Collection\Exception;
+use RuntimeException;
+
/**
* Thrown when attempting to operate on collections of differing types.
*/
-class CollectionMismatchException extends \RuntimeException
+class CollectionMismatchException extends RuntimeException implements CollectionException
{
}
diff --git a/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php b/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php
index dcc3eac60..7b41b4a7c 100644
--- a/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php
+++ b/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php
@@ -14,9 +14,11 @@ declare(strict_types=1);
namespace Ramsey\Collection\Exception;
+use InvalidArgumentException as PhpInvalidArgumentException;
+
/**
* Thrown to indicate an argument is not of the expected type.
*/
-class InvalidArgumentException extends \InvalidArgumentException
+class InvalidArgumentException extends PhpInvalidArgumentException implements CollectionException
{
}
diff --git a/vendor/ramsey/collection/src/Exception/ValueExtractionException.php b/vendor/ramsey/collection/src/Exception/InvalidPropertyOrMethod.php
index f6c6cb4ec..a53be14aa 100644
--- a/vendor/ramsey/collection/src/Exception/ValueExtractionException.php
+++ b/vendor/ramsey/collection/src/Exception/InvalidPropertyOrMethod.php
@@ -14,9 +14,13 @@ declare(strict_types=1);
namespace Ramsey\Collection\Exception;
+use RuntimeException;
+
/**
- * Thrown when attempting to extract a value for a method or property that does not exist.
+ * Thrown when attempting to evaluate a property, method, or array key
+ * that doesn't exist on an element or cannot otherwise be evaluated in the
+ * current context.
*/
-class ValueExtractionException extends \RuntimeException
+class InvalidPropertyOrMethod extends RuntimeException implements CollectionException
{
}
diff --git a/vendor/ramsey/collection/src/Exception/NoSuchElementException.php b/vendor/ramsey/collection/src/Exception/NoSuchElementException.php
index 9debe8f66..cd98f0c0f 100644
--- a/vendor/ramsey/collection/src/Exception/NoSuchElementException.php
+++ b/vendor/ramsey/collection/src/Exception/NoSuchElementException.php
@@ -14,9 +14,11 @@ declare(strict_types=1);
namespace Ramsey\Collection\Exception;
+use RuntimeException;
+
/**
* Thrown when attempting to access an element that does not exist.
*/
-class NoSuchElementException extends \RuntimeException
+class NoSuchElementException extends RuntimeException implements CollectionException
{
}
diff --git a/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php b/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php
index 4e9d16fa3..c75294e53 100644
--- a/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php
+++ b/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php
@@ -14,9 +14,11 @@ declare(strict_types=1);
namespace Ramsey\Collection\Exception;
+use OutOfBoundsException as PhpOutOfBoundsException;
+
/**
* Thrown when attempting to access an element out of the range of the collection.
*/
-class OutOfBoundsException extends \OutOfBoundsException
+class OutOfBoundsException extends PhpOutOfBoundsException implements CollectionException
{
}
diff --git a/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php b/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php
index 8f45e5836..d074f45fd 100644
--- a/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php
+++ b/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php
@@ -14,9 +14,11 @@ declare(strict_types=1);
namespace Ramsey\Collection\Exception;
+use RuntimeException;
+
/**
* Thrown to indicate that the requested operation is not supported.
*/
-class UnsupportedOperationException extends \RuntimeException
+class UnsupportedOperationException extends RuntimeException implements CollectionException
{
}
diff --git a/vendor/ramsey/collection/src/Map/AbstractMap.php b/vendor/ramsey/collection/src/Map/AbstractMap.php
index ae9f2fe61..7a851a80f 100644
--- a/vendor/ramsey/collection/src/Map/AbstractMap.php
+++ b/vendor/ramsey/collection/src/Map/AbstractMap.php
@@ -16,48 +16,65 @@ namespace Ramsey\Collection\Map;
use Ramsey\Collection\AbstractArray;
use Ramsey\Collection\Exception\InvalidArgumentException;
+use Traversable;
use function array_key_exists;
use function array_keys;
use function in_array;
+use function var_export;
/**
* This class provides a basic implementation of `MapInterface`, to minimize the
* effort required to implement this interface.
*
+ * @template K of array-key
* @template T
* @extends AbstractArray<T>
- * @implements MapInterface<T>
+ * @implements MapInterface<K, T>
*/
abstract class AbstractMap extends AbstractArray implements MapInterface
{
/**
+ * @param array<K, T> $data The initial items to add to this map.
+ */
+ public function __construct(array $data = [])
+ {
+ parent::__construct($data);
+ }
+
+ /**
+ * @return Traversable<K, T>
+ */
+ public function getIterator(): Traversable
+ {
+ return parent::getIterator();
+ }
+
+ /**
+ * @param K $offset The offset to set
+ * @param T $value The value to set at the given offset.
+ *
* @inheritDoc
+ * @psalm-suppress MoreSpecificImplementedParamType,DocblockTypeContradiction
*/
- public function offsetSet($offset, $value): void
+ public function offsetSet(mixed $offset, mixed $value): void
{
if ($offset === null) {
throw new InvalidArgumentException(
'Map elements are key/value pairs; a key must be provided for '
- . 'value ' . var_export($value, true)
+ . 'value ' . var_export($value, true),
);
}
$this->data[$offset] = $value;
}
- /**
- * @inheritDoc
- */
- public function containsKey($key): bool
+ public function containsKey(int | string $key): bool
{
return array_key_exists($key, $this->data);
}
- /**
- * @inheritDoc
- */
- public function containsValue($value): bool
+ public function containsValue(mixed $value): bool
{
return in_array($value, $this->data, true);
}
@@ -71,21 +88,24 @@ abstract class AbstractMap extends AbstractArray implements MapInterface
}
/**
- * @inheritDoc
+ * @param K $key The key to return from the map.
+ * @param T | null $defaultValue The default value to use if `$key` is not found.
+ *
+ * @return T | null the value or `null` if the key could not be found.
*/
- public function get($key, $defaultValue = null)
+ public function get(int | string $key, mixed $defaultValue = null): mixed
{
- if (!$this->containsKey($key)) {
- return $defaultValue;
- }
-
- return $this[$key];
+ return $this[$key] ?? $defaultValue;
}
/**
- * @inheritDoc
+ * @param K $key The key to put or replace in the map.
+ * @param T $value The value to store at `$key`.
+ *
+ * @return T | null the previous value associated with key, or `null` if
+ * there was no mapping for `$key`.
*/
- public function put($key, $value)
+ public function put(int | string $key, mixed $value): mixed
{
$previousValue = $this->get($key);
$this[$key] = $value;
@@ -94,9 +114,13 @@ abstract class AbstractMap extends AbstractArray implements MapInterface
}
/**
- * @inheritDoc
+ * @param K $key The key to put in the map.
+ * @param T $value The value to store at `$key`.
+ *
+ * @return T | null the previous value associated with key, or `null` if
+ * there was no mapping for `$key`.
*/
- public function putIfAbsent($key, $value)
+ public function putIfAbsent(int | string $key, mixed $value): mixed
{
$currentValue = $this->get($key);
@@ -108,9 +132,12 @@ abstract class AbstractMap extends AbstractArray implements MapInterface
}
/**
- * @inheritDoc
+ * @param K $key The key to remove from the map.
+ *
+ * @return T | null the previous value associated with key, or `null` if
+ * there was no mapping for `$key`.
*/
- public function remove($key)
+ public function remove(int | string $key): mixed
{
$previousValue = $this->get($key);
unset($this[$key]);
@@ -118,10 +145,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface
return $previousValue;
}
- /**
- * @inheritDoc
- */
- public function removeIf($key, $value): bool
+ public function removeIf(int | string $key, mixed $value): bool
{
if ($this->get($key) === $value) {
unset($this[$key]);
@@ -133,9 +157,13 @@ abstract class AbstractMap extends AbstractArray implements MapInterface
}
/**
- * @inheritDoc
+ * @param K $key The key to replace.
+ * @param T $value The value to set at `$key`.
+ *
+ * @return T | null the previous value associated with key, or `null` if
+ * there was no mapping for `$key`.
*/
- public function replace($key, $value)
+ public function replace(int | string $key, mixed $value): mixed
{
$currentValue = $this->get($key);
@@ -146,10 +174,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface
return $currentValue;
}
- /**
- * @inheritDoc
- */
- public function replaceIf($key, $oldValue, $newValue): bool
+ public function replaceIf(int | string $key, mixed $oldValue, mixed $newValue): bool
{
if ($this->get($key) === $oldValue) {
$this[$key] = $newValue;
@@ -159,4 +184,20 @@ abstract class AbstractMap extends AbstractArray implements MapInterface
return false;
}
+
+ /**
+ * @return array<K, T>
+ */
+ public function __serialize(): array
+ {
+ return parent::__serialize();
+ }
+
+ /**
+ * @return array<K, T>
+ */
+ public function toArray(): array
+ {
+ return parent::toArray();
+ }
}
diff --git a/vendor/ramsey/collection/src/Map/AbstractTypedMap.php b/vendor/ramsey/collection/src/Map/AbstractTypedMap.php
index 551d2e6c6..92fdcd54c 100644
--- a/vendor/ramsey/collection/src/Map/AbstractTypedMap.php
+++ b/vendor/ramsey/collection/src/Map/AbstractTypedMap.php
@@ -22,10 +22,10 @@ use Ramsey\Collection\Tool\ValueToStringTrait;
* This class provides a basic implementation of `TypedMapInterface`, to
* minimize the effort required to implement this interface.
*
- * @template K
+ * @template K of array-key
* @template T
- * @extends AbstractMap<T>
- * @implements TypedMapInterface<T>
+ * @extends AbstractMap<K, T>
+ * @implements TypedMapInterface<K, T>
*/
abstract class AbstractTypedMap extends AbstractMap implements TypedMapInterface
{
@@ -33,37 +33,28 @@ abstract class AbstractTypedMap extends AbstractMap implements TypedMapInterface
use ValueToStringTrait;
/**
- * @param K|null $offset
+ * @param K $offset
* @param T $value
*
* @inheritDoc
- *
* @psalm-suppress MoreSpecificImplementedParamType
*/
- public function offsetSet($offset, $value): void
+ public function offsetSet(mixed $offset, mixed $value): void
{
- if ($offset === null) {
- throw new InvalidArgumentException(
- 'Map elements are key/value pairs; a key must be provided for '
- . 'value ' . var_export($value, true)
- );
- }
-
if ($this->checkType($this->getKeyType(), $offset) === false) {
throw new InvalidArgumentException(
'Key must be of type ' . $this->getKeyType() . '; key is '
- . $this->toolValueToString($offset)
+ . $this->toolValueToString($offset),
);
}
if ($this->checkType($this->getValueType(), $value) === false) {
throw new InvalidArgumentException(
'Value must be of type ' . $this->getValueType() . '; value is '
- . $this->toolValueToString($value)
+ . $this->toolValueToString($value),
);
}
- /** @psalm-suppress MixedArgumentTypeCoercion */
parent::offsetSet($offset, $value);
}
}
diff --git a/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php b/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php
index 79a314d96..34e4e853b 100644
--- a/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php
+++ b/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php
@@ -17,8 +17,7 @@ namespace Ramsey\Collection\Map;
/**
* `AssociativeArrayMap` represents a standard associative array object.
*
- * @template T
- * @extends AbstractMap<T>
+ * @extends AbstractMap<string, mixed>
*/
class AssociativeArrayMap extends AbstractMap
{
diff --git a/vendor/ramsey/collection/src/Map/MapInterface.php b/vendor/ramsey/collection/src/Map/MapInterface.php
index 6ed0b2967..22ba1bdd1 100644
--- a/vendor/ramsey/collection/src/Map/MapInterface.php
+++ b/vendor/ramsey/collection/src/Map/MapInterface.php
@@ -21,6 +21,7 @@ use Ramsey\Collection\ArrayInterface;
*
* A map cannot contain duplicate keys; each key can map to at most one value.
*
+ * @template K of array-key
* @template T
* @extends ArrayInterface<T>
*/
@@ -29,9 +30,9 @@ interface MapInterface extends ArrayInterface
/**
* Returns `true` if this map contains a mapping for the specified key.
*
- * @param array-key $key The key to check in the map.
+ * @param K $key The key to check in the map.
*/
- public function containsKey($key): bool;
+ public function containsKey(int | string $key): bool;
/**
* Returns `true` if this map maps one or more keys to the specified value.
@@ -40,13 +41,12 @@ interface MapInterface extends ArrayInterface
*
* @param T $value The value to check in the map.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function containsValue($value): bool;
+ public function containsValue(mixed $value): bool;
/**
* Return an array of the keys contained in this map.
*
- * @return list<array-key>
+ * @return list<K>
*/
public function keys(): array;
@@ -55,13 +55,12 @@ interface MapInterface extends ArrayInterface
* map contains no mapping for the key, or (optionally) `$defaultValue` if
* this map contains no mapping for the key.
*
- * @param array-key $key The key to return from the map.
- * @param T|null $defaultValue The default value to use if `$key` is not found.
+ * @param K $key The key to return from the map.
+ * @param T | null $defaultValue The default value to use if `$key` is not found.
*
- * @return T|null the value or `null` if the key could not be found.
+ * @return T | null the value or `null` if the key could not be found.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function get($key, $defaultValue = null);
+ public function get(int | string $key, mixed $defaultValue = null): mixed;
/**
* Associates the specified value with the specified key in this map.
@@ -69,14 +68,13 @@ interface MapInterface extends ArrayInterface
* If the map previously contained a mapping for the key, the old value is
* replaced by the specified value.
*
- * @param array-key $key The key to put or replace in the map.
+ * @param K $key The key to put or replace in the map.
* @param T $value The value to store at `$key`.
*
- * @return T|null the previous value associated with key, or `null` if
+ * @return T | null the previous value associated with key, or `null` if
* there was no mapping for `$key`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function put($key, $value);
+ public function put(int | string $key, mixed $value): mixed;
/**
* Associates the specified value with the specified key in this map only if
@@ -85,25 +83,23 @@ interface MapInterface extends ArrayInterface
* If there is already a value associated with `$key`, this returns that
* value without replacing it.
*
- * @param array-key $key The key to put in the map.
+ * @param K $key The key to put in the map.
* @param T $value The value to store at `$key`.
*
- * @return T|null the previous value associated with key, or `null` if
+ * @return T | null the previous value associated with key, or `null` if
* there was no mapping for `$key`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function putIfAbsent($key, $value);
+ public function putIfAbsent(int | string $key, mixed $value): mixed;
/**
* Removes the mapping for a key from this map if it is present.
*
- * @param array-key $key The key to remove from the map.
+ * @param K $key The key to remove from the map.
*
- * @return T|null the previous value associated with key, or `null` if
+ * @return T | null the previous value associated with key, or `null` if
* there was no mapping for `$key`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function remove($key);
+ public function remove(int | string $key): mixed;
/**
* Removes the entry for the specified key only if it is currently mapped to
@@ -111,26 +107,24 @@ interface MapInterface extends ArrayInterface
*
* This performs a strict type check on the value.
*
- * @param array-key $key The key to remove from the map.
+ * @param K $key The key to remove from the map.
* @param T $value The value to match.
*
* @return bool true if the value was removed.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function removeIf($key, $value): bool;
+ public function removeIf(int | string $key, mixed $value): bool;
/**
* Replaces the entry for the specified key only if it is currently mapped
* to some value.
*
- * @param array-key $key The key to replace.
+ * @param K $key The key to replace.
* @param T $value The value to set at `$key`.
*
- * @return T|null the previous value associated with key, or `null` if
+ * @return T | null the previous value associated with key, or `null` if
* there was no mapping for `$key`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function replace($key, $value);
+ public function replace(int | string $key, mixed $value): mixed;
/**
* Replaces the entry for the specified key only if currently mapped to the
@@ -138,12 +132,11 @@ interface MapInterface extends ArrayInterface
*
* This performs a strict type check on the value.
*
- * @param array-key $key The key to remove from the map.
+ * @param K $key The key to remove from the map.
* @param T $oldValue The value to match.
* @param T $newValue The value to use as a replacement.
*
* @return bool true if the value was replaced.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function replaceIf($key, $oldValue, $newValue): bool;
+ public function replaceIf(int | string $key, mixed $oldValue, mixed $newValue): bool;
}
diff --git a/vendor/ramsey/collection/src/Map/NamedParameterMap.php b/vendor/ramsey/collection/src/Map/NamedParameterMap.php
index 9926ddd8c..f948e476c 100644
--- a/vendor/ramsey/collection/src/Map/NamedParameterMap.php
+++ b/vendor/ramsey/collection/src/Map/NamedParameterMap.php
@@ -26,7 +26,7 @@ use function is_int;
* `NamedParameterMap` represents a mapping of values to a set of named keys
* that may optionally be typed
*
- * @extends AbstractMap<mixed>
+ * @extends AbstractMap<string, mixed>
*/
class NamedParameterMap extends AbstractMap
{
@@ -38,13 +38,13 @@ class NamedParameterMap extends AbstractMap
*
* @var array<string, string>
*/
- protected $namedParameters;
+ private readonly array $namedParameters;
/**
* Constructs a new `NamedParameterMap`.
*
* @param array<array-key, string> $namedParameters The named parameters defined for this map.
- * @param array<array-key, mixed> $data An initial set of data to set on this map.
+ * @param array<string, mixed> $data An initial set of data to set on this map.
*/
public function __construct(array $namedParameters, array $data = [])
{
@@ -62,22 +62,12 @@ class NamedParameterMap extends AbstractMap
return $this->namedParameters;
}
- /**
- * @inheritDoc
- */
- public function offsetSet($offset, $value): void
+ public function offsetSet(mixed $offset, mixed $value): void
{
- if ($offset === null) {
- throw new InvalidArgumentException(
- 'Map elements are key/value pairs; a key must be provided for '
- . 'value ' . var_export($value, true)
- );
- }
-
if (!array_key_exists($offset, $this->namedParameters)) {
throw new InvalidArgumentException(
'Attempting to set value for unconfigured parameter \''
- . $offset . '\''
+ . $this->toolValueToString($offset) . '\'',
);
}
@@ -85,7 +75,7 @@ class NamedParameterMap extends AbstractMap
throw new InvalidArgumentException(
'Value for \'' . $offset . '\' must be of type '
. $this->namedParameters[$offset] . '; value is '
- . $this->toolValueToString($value)
+ . $this->toolValueToString($value),
);
}
diff --git a/vendor/ramsey/collection/src/Map/TypedMap.php b/vendor/ramsey/collection/src/Map/TypedMap.php
index 2e796377a..f914d9c70 100644
--- a/vendor/ramsey/collection/src/Map/TypedMap.php
+++ b/vendor/ramsey/collection/src/Map/TypedMap.php
@@ -14,13 +14,11 @@ declare(strict_types=1);
namespace Ramsey\Collection\Map;
-use Ramsey\Collection\Tool\TypeTrait;
-
/**
* A `TypedMap` represents a map of elements where key and value are typed.
*
* Each element is identified by a key with defined type and a value of defined
- * type. The keys of the map must be unique. The values on the map can be=
+ * type. The keys of the map must be unique. The values on the map can be
* repeated but each with its own different key.
*
* The most common case is to use a string type key, but it's not limited to
@@ -80,34 +78,12 @@ use Ramsey\Collection\Tool\TypeTrait;
* }
* ```
*
- * @template K
+ * @template K of array-key
* @template T
* @extends AbstractTypedMap<K, T>
*/
class TypedMap extends AbstractTypedMap
{
- use TypeTrait;
-
- /**
- * The data type of keys stored in this collection.
- *
- * A map key's type is immutable once it is set. For this reason, this
- * property is set private.
- *
- * @var string data type of the map key.
- */
- private $keyType;
-
- /**
- * The data type of values stored in this collection.
- *
- * A map value's type is immutable once it is set. For this reason, this
- * property is set private.
- *
- * @var string data type of the map value.
- */
- private $valueType;
-
/**
* Constructs a map object of the specified key and value types,
* optionally with the specified data.
@@ -116,12 +92,11 @@ class TypedMap extends AbstractTypedMap
* @param string $valueType The data type of the map's values.
* @param array<K, T> $data The initial data to set for this map.
*/
- public function __construct(string $keyType, string $valueType, array $data = [])
- {
- $this->keyType = $keyType;
- $this->valueType = $valueType;
-
- /** @psalm-suppress MixedArgumentTypeCoercion */
+ public function __construct(
+ private readonly string $keyType,
+ private readonly string $valueType,
+ array $data = [],
+ ) {
parent::__construct($data);
}
diff --git a/vendor/ramsey/collection/src/Map/TypedMapInterface.php b/vendor/ramsey/collection/src/Map/TypedMapInterface.php
index 0308109cc..5a44f0647 100644
--- a/vendor/ramsey/collection/src/Map/TypedMapInterface.php
+++ b/vendor/ramsey/collection/src/Map/TypedMapInterface.php
@@ -18,8 +18,9 @@ namespace Ramsey\Collection\Map;
* A `TypedMapInterface` represents a map of elements where key and value are
* typed.
*
+ * @template K of array-key
* @template T
- * @extends MapInterface<T>
+ * @extends MapInterface<K, T>
*/
interface TypedMapInterface extends MapInterface
{
diff --git a/vendor/ramsey/collection/src/Queue.php b/vendor/ramsey/collection/src/Queue.php
index 93e032b43..0f5b33740 100644
--- a/vendor/ramsey/collection/src/Queue.php
+++ b/vendor/ramsey/collection/src/Queue.php
@@ -19,6 +19,8 @@ use Ramsey\Collection\Exception\NoSuchElementException;
use Ramsey\Collection\Tool\TypeTrait;
use Ramsey\Collection\Tool\ValueToStringTrait;
+use function array_key_first;
+
/**
* This class provides a basic implementation of `QueueInterface`, to minimize
* the effort required to implement this interface.
@@ -33,32 +35,14 @@ class Queue extends AbstractArray implements QueueInterface
use ValueToStringTrait;
/**
- * The type of elements stored in this queue.
- *
- * A queue's type is immutable once it is set. For this reason, this
- * property is set private.
- *
- * @var string
- */
- private $queueType;
-
- /**
- * The index of the head of the queue.
- *
- * @var int
- */
- protected $index = 0;
-
- /**
* Constructs a queue object of the specified type, optionally with the
* specified data.
*
- * @param string $queueType The type (FQCN) associated with this queue.
- * @param array<array-key, T> $data The initial items to store in the collection.
+ * @param string $queueType The type or class name associated with this queue.
+ * @param array<array-key, T> $data The initial items to store in the queue.
*/
- public function __construct(string $queueType, array $data = [])
+ public function __construct(private readonly string $queueType, array $data = [])
{
- $this->queueType = $queueType;
parent::__construct($data);
}
@@ -68,13 +52,15 @@ class Queue extends AbstractArray implements QueueInterface
* Since arbitrary offsets may not be manipulated in a queue, this method
* serves only to fulfill the `ArrayAccess` interface requirements. It is
* invoked by other operations when adding values to the queue.
+ *
+ * @throws InvalidArgumentException if $value is of the wrong type.
*/
- public function offsetSet($offset, $value): void
+ public function offsetSet(mixed $offset, mixed $value): void
{
if ($this->checkType($this->getType(), $value) === false) {
throw new InvalidArgumentException(
'Value must be of type ' . $this->getType() . '; value is '
- . $this->toolValueToString($value)
+ . $this->toolValueToString($value),
);
}
@@ -82,9 +68,9 @@ class Queue extends AbstractArray implements QueueInterface
}
/**
- * @inheritDoc
+ * @throws InvalidArgumentException if $value is of the wrong type.
*/
- public function add($element): bool
+ public function add(mixed $element): bool
{
$this[] = $element;
@@ -92,74 +78,67 @@ class Queue extends AbstractArray implements QueueInterface
}
/**
- * @inheritDoc
+ * @return T
+ *
+ * @throws NoSuchElementException if this queue is empty.
*/
- public function element()
+ public function element(): mixed
{
- $element = $this->peek();
-
- if ($element === null) {
- throw new NoSuchElementException(
- 'Can\'t return element from Queue. Queue is empty.'
- );
- }
-
- return $element;
+ return $this->peek() ?? throw new NoSuchElementException(
+ 'Can\'t return element from Queue. Queue is empty.',
+ );
}
- /**
- * @inheritDoc
- */
- public function offer($element): bool
+ public function offer(mixed $element): bool
{
try {
return $this->add($element);
- } catch (InvalidArgumentException $e) {
+ } catch (InvalidArgumentException) {
return false;
}
}
/**
- * @inheritDoc
+ * @return T | null
*/
- public function peek()
+ public function peek(): mixed
{
- if ($this->count() === 0) {
+ $index = array_key_first($this->data);
+
+ if ($index === null) {
return null;
}
- return $this[$this->index];
+ return $this[$index];
}
/**
- * @inheritDoc
+ * @return T | null
*/
- public function poll()
+ public function poll(): mixed
{
- if ($this->count() === 0) {
+ $index = array_key_first($this->data);
+
+ if ($index === null) {
return null;
}
- $head = $this[$this->index];
-
- unset($this[$this->index]);
- $this->index++;
+ $head = $this[$index];
+ unset($this[$index]);
return $head;
}
/**
- * @inheritDoc
+ * @return T
+ *
+ * @throws NoSuchElementException if this queue is empty.
*/
- public function remove()
+ public function remove(): mixed
{
- $head = $this->poll();
-
- if ($head === null) {
- throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.');
- }
-
- return $head;
+ return $this->poll() ?? throw new NoSuchElementException(
+ 'Can\'t return element from Queue. Queue is empty.',
+ );
}
public function getType(): string
diff --git a/vendor/ramsey/collection/src/QueueInterface.php b/vendor/ramsey/collection/src/QueueInterface.php
index 8c7383df8..f29ce43ab 100644
--- a/vendor/ramsey/collection/src/QueueInterface.php
+++ b/vendor/ramsey/collection/src/QueueInterface.php
@@ -15,6 +15,7 @@ declare(strict_types=1);
namespace Ramsey\Collection;
use Ramsey\Collection\Exception\NoSuchElementException;
+use RuntimeException;
/**
* A queue is a collection in which the entities in the collection are kept in
@@ -123,13 +124,12 @@ interface QueueInterface extends ArrayInterface
*
* @return bool `true` if this queue changed as a result of the call.
*
- * @throws \RuntimeException if a queue refuses to add a particular element
+ * @throws RuntimeException if a queue refuses to add a particular element
* for any reason other than that it already contains the element.
* Implementations should use a more-specific exception that extends
* `\RuntimeException`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function add($element): bool;
+ public function add(mixed $element): bool;
/**
* Retrieves, but does not remove, the head of this queue.
@@ -143,7 +143,7 @@ interface QueueInterface extends ArrayInterface
*
* @throws NoSuchElementException if this queue is empty.
*/
- public function element();
+ public function element(): mixed;
/**
* Inserts the specified element into this queue if it is possible to do so
@@ -159,8 +159,7 @@ interface QueueInterface extends ArrayInterface
*
* @return bool `true` if the element was added to this queue, else `false`.
*/
- // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
- public function offer($element): bool;
+ public function offer(mixed $element): bool;
/**
* Retrieves, but does not remove, the head of this queue, or returns `null`
@@ -168,9 +167,9 @@ interface QueueInterface extends ArrayInterface
*
* @see self::element()
*
- * @return T|null the head of this queue, or `null` if this queue is empty.
+ * @return T | null the head of this queue, or `null` if this queue is empty.
*/
- public function peek();
+ public function peek(): mixed;
/**
* Retrieves and removes the head of this queue, or returns `null`
@@ -178,9 +177,9 @@ interface QueueInterface extends ArrayInterface
*
* @see self::remove()
*
- * @return T|null the head of this queue, or `null` if this queue is empty.
+ * @return T | null the head of this queue, or `null` if this queue is empty.
*/
- public function poll();
+ public function poll(): mixed;
/**
* Retrieves and removes the head of this queue.
@@ -194,7 +193,7 @@ interface QueueInterface extends ArrayInterface
*
* @throws NoSuchElementException if this queue is empty.
*/
- public function remove();
+ public function remove(): mixed;
/**
* Returns the type associated with this queue.
diff --git a/vendor/ramsey/collection/src/Set.php b/vendor/ramsey/collection/src/Set.php
index 6932f247a..aa93351c4 100644
--- a/vendor/ramsey/collection/src/Set.php
+++ b/vendor/ramsey/collection/src/Set.php
@@ -28,7 +28,7 @@ namespace Ramsey\Collection;
* $foo = new \My\Foo();
* $set = new Set(\My\Foo::class);
*
- * $set->add($foo); // returns TRUE, the element don't exists
+ * $set->add($foo); // returns TRUE, the element doesn't exist
* $set->add($foo); // returns FALSE, the element already exists
*
* $bar = new \My\Foo();
@@ -41,24 +41,14 @@ namespace Ramsey\Collection;
class Set extends AbstractSet
{
/**
- * The type of elements stored in this set
- *
- * A set's type is immutable. For this reason, this property is private.
- *
- * @var string
- */
- private $setType;
-
- /**
* Constructs a set object of the specified type, optionally with the
* specified data.
*
- * @param string $setType The type (FQCN) associated with this set.
+ * @param string $setType The type or class name associated with this set.
* @param array<array-key, T> $data The initial items to store in the set.
*/
- public function __construct(string $setType, array $data = [])
+ public function __construct(private readonly string $setType, array $data = [])
{
- $this->setType = $setType;
parent::__construct($data);
}
diff --git a/vendor/ramsey/collection/src/Sort.php b/vendor/ramsey/collection/src/Sort.php
new file mode 100644
index 000000000..0c3c19213
--- /dev/null
+++ b/vendor/ramsey/collection/src/Sort.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * This file is part of the ramsey/collection library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Collection;
+
+/**
+ * Collection sorting
+ */
+enum Sort: string
+{
+ /**
+ * Sort items in a collection in ascending order.
+ */
+ case Ascending = 'asc';
+
+ /**
+ * Sort items in a collection in descending order.
+ */
+ case Descending = 'desc';
+}
diff --git a/vendor/ramsey/collection/src/Tool/TypeTrait.php b/vendor/ramsey/collection/src/Tool/TypeTrait.php
index 8214e9654..ac51b7f10 100644
--- a/vendor/ramsey/collection/src/Tool/TypeTrait.php
+++ b/vendor/ramsey/collection/src/Tool/TypeTrait.php
@@ -36,38 +36,22 @@ trait TypeTrait
* @param string $type The type to check the value against.
* @param mixed $value The value to check.
*/
- protected function checkType(string $type, $value): bool
+ protected function checkType(string $type, mixed $value): bool
{
- switch ($type) {
- case 'array':
- return is_array($value);
- case 'bool':
- case 'boolean':
- return is_bool($value);
- case 'callable':
- return is_callable($value);
- case 'float':
- case 'double':
- return is_float($value);
- case 'int':
- case 'integer':
- return is_int($value);
- case 'null':
- return $value === null;
- case 'numeric':
- return is_numeric($value);
- case 'object':
- return is_object($value);
- case 'resource':
- return is_resource($value);
- case 'scalar':
- return is_scalar($value);
- case 'string':
- return is_string($value);
- case 'mixed':
- return true;
- default:
- return $value instanceof $type;
- }
+ return match ($type) {
+ 'array' => is_array($value),
+ 'bool', 'boolean' => is_bool($value),
+ 'callable' => is_callable($value),
+ 'float', 'double' => is_float($value),
+ 'int', 'integer' => is_int($value),
+ 'null' => $value === null,
+ 'numeric' => is_numeric($value),
+ 'object' => is_object($value),
+ 'resource' => is_resource($value),
+ 'scalar' => is_scalar($value),
+ 'string' => is_string($value),
+ 'mixed' => true,
+ default => $value instanceof $type,
+ };
}
}
diff --git a/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php b/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php
index f9be1be28..44c422252 100644
--- a/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php
+++ b/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php
@@ -14,9 +14,11 @@ declare(strict_types=1);
namespace Ramsey\Collection\Tool;
-use Ramsey\Collection\Exception\ValueExtractionException;
+use Ramsey\Collection\Exception\InvalidPropertyOrMethod;
+use Ramsey\Collection\Exception\UnsupportedOperationException;
-use function get_class;
+use function is_array;
+use function is_object;
use function method_exists;
use function property_exists;
use function sprintf;
@@ -27,32 +29,53 @@ use function sprintf;
trait ValueExtractorTrait
{
/**
- * Extracts the value of the given property or method from the object.
+ * Extracts the value of the given property, method, or array key from the
+ * element.
*
- * @param mixed $object The object to extract the value from.
- * @param string $propertyOrMethod The property or method for which the
+ * If `$propertyOrMethod` is `null`, we return the element as-is.
+ *
+ * @param mixed $element The element to extract the value from.
+ * @param string | null $propertyOrMethod The property or method for which the
* value should be extracted.
*
- * @return mixed the value extracted from the specified property or method.
+ * @return mixed the value extracted from the specified property, method,
+ * or array key, or the element itself.
*
- * @throws ValueExtractionException if the method or property is not defined.
+ * @throws InvalidPropertyOrMethod
+ * @throws UnsupportedOperationException
*/
- protected function extractValue($object, string $propertyOrMethod)
+ protected function extractValue(mixed $element, ?string $propertyOrMethod): mixed
{
- if (!is_object($object)) {
- throw new ValueExtractionException('Unable to extract a value from a non-object');
+ if ($propertyOrMethod === null) {
+ return $element;
+ }
+
+ if (!is_object($element) && !is_array($element)) {
+ throw new UnsupportedOperationException(sprintf(
+ 'The collection type "%s" does not support the $propertyOrMethod parameter',
+ $this->getType(),
+ ));
+ }
+
+ if (is_array($element)) {
+ return $element[$propertyOrMethod] ?? throw new InvalidPropertyOrMethod(sprintf(
+ 'Key or index "%s" not found in collection elements',
+ $propertyOrMethod,
+ ));
}
- if (property_exists($object, $propertyOrMethod)) {
- return $object->$propertyOrMethod;
+ if (property_exists($element, $propertyOrMethod)) {
+ return $element->$propertyOrMethod;
}
- if (method_exists($object, $propertyOrMethod)) {
- return $object->{$propertyOrMethod}();
+ if (method_exists($element, $propertyOrMethod)) {
+ return $element->{$propertyOrMethod}();
}
- throw new ValueExtractionException(
- sprintf('Method or property "%s" not defined in %s', $propertyOrMethod, get_class($object))
- );
+ throw new InvalidPropertyOrMethod(sprintf(
+ 'Method or property "%s" not defined in %s',
+ $propertyOrMethod,
+ $element::class,
+ ));
}
}
diff --git a/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php b/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php
index 721ade002..64fc5fa42 100644
--- a/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php
+++ b/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php
@@ -16,11 +16,12 @@ namespace Ramsey\Collection\Tool;
use DateTimeInterface;
-use function get_class;
+use function assert;
use function get_resource_type;
use function is_array;
use function is_bool;
use function is_callable;
+use function is_object;
use function is_resource;
use function is_scalar;
@@ -44,7 +45,7 @@ trait ValueToStringTrait
*
* @param mixed $value the value to return as a string.
*/
- protected function toolValueToString($value): string
+ protected function toolValueToString(mixed $value): string
{
// null
if ($value === null) {
@@ -71,12 +72,8 @@ trait ValueToStringTrait
return '(' . get_resource_type($value) . ' resource #' . (int) $value . ')';
}
- // If we don't know what it is, use var_export().
- if (!is_object($value)) {
- return '(' . var_export($value, true) . ')';
- }
-
// From here, $value should be an object.
+ assert(is_object($value));
// __toString() is implemented
if (is_callable([$value, '__toString'])) {
@@ -89,6 +86,6 @@ trait ValueToStringTrait
}
// unknown type
- return '(' . get_class($value) . ' Object)';
+ return '(' . $value::class . ' Object)';
}
}
diff --git a/vendor/ramsey/uuid/composer.json b/vendor/ramsey/uuid/composer.json
index 9ea4e06b3..8139b54e3 100644
--- a/vendor/ramsey/uuid/composer.json
+++ b/vendor/ramsey/uuid/composer.json
@@ -11,7 +11,7 @@
"require": {
"php": "^8.0",
"ext-json": "*",
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11",
+ "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
"ramsey/collection": "^1.2 || ^2.0"
},
"require-dev": {
diff --git a/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php b/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php
index f2d86788c..f065acd46 100644
--- a/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php
+++ b/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php
@@ -136,9 +136,11 @@ final class BrickMathCalculator implements CalculatorInterface
/**
* Maps ramsey/uuid rounding modes to those used by brick/math
+ *
+ * @return BrickMathRounding::*
*/
- private function getBrickRoundingMode(int $roundingMode): int
+ private function getBrickRoundingMode(int $roundingMode)
{
- return self::ROUNDING_MODE_MAP[$roundingMode] ?? 0;
+ return self::ROUNDING_MODE_MAP[$roundingMode] ?? BrickMathRounding::UNNECESSARY;
}
}
diff --git a/vendor/sabre/dav/bin/googlecode_upload.py b/vendor/sabre/dav/bin/googlecode_upload.py
deleted file mode 100755
index caafd5ded..000000000
--- a/vendor/sabre/dav/bin/googlecode_upload.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006, 2007 Google Inc. All Rights Reserved.
-# Author: danderson@google.com (David Anderson)
-#
-# Script for uploading files to a Google Code project.
-#
-# This is intended to be both a useful script for people who want to
-# streamline project uploads and a reference implementation for
-# uploading files to Google Code projects.
-#
-# To upload a file to Google Code, you need to provide a path to the
-# file on your local machine, a small summary of what the file is, a
-# project name, and a valid account that is a member or owner of that
-# project. You can optionally provide a list of labels that apply to
-# the file. The file will be uploaded under the same name that it has
-# in your local filesystem (that is, the "basename" or last path
-# component). Run the script with '--help' to get the exact syntax
-# and available options.
-#
-# Note that the upload script requests that you enter your
-# googlecode.com password. This is NOT your Gmail account password!
-# This is the password you use on googlecode.com for committing to
-# Subversion and uploading files. You can find your password by going
-# to http://code.google.com/hosting/settings when logged in with your
-# Gmail account. If you have already committed to your project's
-# Subversion repository, the script will automatically retrieve your
-# credentials from there (unless disabled, see the output of '--help'
-# for details).
-#
-# If you are looking at this script as a reference for implementing
-# your own Google Code file uploader, then you should take a look at
-# the upload() function, which is the meat of the uploader. You
-# basically need to build a multipart/form-data POST request with the
-# right fields and send it to https://PROJECT.googlecode.com/files .
-# Authenticate the request using HTTP Basic authentication, as is
-# shown below.
-#
-# Licensed under the terms of the Apache Software License 2.0:
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Questions, comments, feature requests and patches are most welcome.
-# Please direct all of these to the Google Code users group:
-# http://groups.google.com/group/google-code-hosting
-
-"""Google Code file uploader script.
-"""
-
-__author__ = 'danderson@google.com (David Anderson)'
-
-import httplib
-import os.path
-import optparse
-import getpass
-import base64
-import sys
-
-
-def upload(file, project_name, user_name, password, summary, labels=None):
- """Upload a file to a Google Code project's file server.
-
- Args:
- file: The local path to the file.
- project_name: The name of your project on Google Code.
- user_name: Your Google account name.
- password: The googlecode.com password for your account.
- Note that this is NOT your global Google Account password!
- summary: A small description for the file.
- labels: an optional list of label strings with which to tag the file.
-
- Returns: a tuple:
- http_status: 201 if the upload succeeded, something else if an
- error occurred.
- http_reason: The human-readable string associated with http_status
- file_url: If the upload succeeded, the URL of the file on Google
- Code, None otherwise.
- """
- # The login is the user part of user@gmail.com. If the login provided
- # is in the full user@domain form, strip it down.
- if user_name.endswith('@gmail.com'):
- user_name = user_name[:user_name.index('@gmail.com')]
-
- form_fields = [('summary', summary)]
- if labels is not None:
- form_fields.extend([('label', l.strip()) for l in labels])
-
- content_type, body = encode_upload_request(form_fields, file)
-
- upload_host = '%s.googlecode.com' % project_name
- upload_uri = '/files'
- auth_token = base64.b64encode('%s:%s'% (user_name, password))
- headers = {
- 'Authorization': 'Basic %s' % auth_token,
- 'User-Agent': 'Googlecode.com uploader v0.9.4',
- 'Content-Type': content_type,
- }
-
- server = httplib.HTTPSConnection(upload_host)
- server.request('POST', upload_uri, body, headers)
- resp = server.getresponse()
- server.close()
-
- if resp.status == 201:
- location = resp.getheader('Location', None)
- else:
- location = None
- return resp.status, resp.reason, location
-
-
-def encode_upload_request(fields, file_path):
- """Encode the given fields and file into a multipart form body.
-
- fields is a sequence of (name, value) pairs. file is the path of
- the file to upload. The file will be uploaded to Google Code with
- the same file name.
-
- Returns: (content_type, body) ready for httplib.HTTP instance
- """
- BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla'
- CRLF = '\r\n'
-
- body = []
-
- # Add the metadata about the upload first
- for key, value in fields:
- body.extend(
- ['--' + BOUNDARY,
- 'Content-Disposition: form-data; name="%s"' % key,
- '',
- value,
- ])
-
- # Now add the file itself
- file_name = os.path.basename(file_path)
- f = open(file_path, 'rb')
- file_content = f.read()
- f.close()
-
- body.extend(
- ['--' + BOUNDARY,
- 'Content-Disposition: form-data; name="filename"; filename="%s"'
- % file_name,
- # The upload server determines the mime-type, no need to set it.
- 'Content-Type: application/octet-stream',
- '',
- file_content,
- ])
-
- # Finalize the form body
- body.extend(['--' + BOUNDARY + '--', ''])
-
- return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body)
-
-
-def upload_find_auth(file_path, project_name, summary, labels=None,
- user_name=None, password=None, tries=3):
- """Find credentials and upload a file to a Google Code project's file server.
-
- file_path, project_name, summary, and labels are passed as-is to upload.
-
- Args:
- file_path: The local path to the file.
- project_name: The name of your project on Google Code.
- summary: A small description for the file.
- labels: an optional list of label strings with which to tag the file.
- config_dir: Path to Subversion configuration directory, 'none', or None.
- user_name: Your Google account name.
- tries: How many attempts to make.
- """
-
- while tries > 0:
- if user_name is None:
- # Read username if not specified or loaded from svn config, or on
- # subsequent tries.
- sys.stdout.write('Please enter your googlecode.com username: ')
- sys.stdout.flush()
- user_name = sys.stdin.readline().rstrip()
- if password is None:
- # Read password if not loaded from svn config, or on subsequent tries.
- print 'Please enter your googlecode.com password.'
- print '** Note that this is NOT your Gmail account password! **'
- print 'It is the password you use to access Subversion repositories,'
- print 'and can be found here: http://code.google.com/hosting/settings'
- password = getpass.getpass()
-
- status, reason, url = upload(file_path, project_name, user_name, password,
- summary, labels)
- # Returns 403 Forbidden instead of 401 Unauthorized for bad
- # credentials as of 2007-07-17.
- if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]:
- # Rest for another try.
- user_name = password = None
- tries = tries - 1
- else:
- # We're done.
- break
-
- return status, reason, url
-
-
-def main():
- parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY '
- '-p PROJECT [options] FILE')
- parser.add_option('-s', '--summary', dest='summary',
- help='Short description of the file')
- parser.add_option('-p', '--project', dest='project',
- help='Google Code project name')
- parser.add_option('-u', '--user', dest='user',
- help='Your Google Code username')
- parser.add_option('-w', '--password', dest='password',
- help='Your Google Code password')
- parser.add_option('-l', '--labels', dest='labels',
- help='An optional list of comma-separated labels to attach '
- 'to the file')
-
- options, args = parser.parse_args()
-
- if not options.summary:
- parser.error('File summary is missing.')
- elif not options.project:
- parser.error('Project name is missing.')
- elif len(args) < 1:
- parser.error('File to upload not provided.')
- elif len(args) > 1:
- parser.error('Only one file may be specified.')
-
- file_path = args[0]
-
- if options.labels:
- labels = options.labels.split(',')
- else:
- labels = None
-
- status, reason, url = upload_find_auth(file_path, options.project,
- options.summary, labels,
- options.user, options.password)
- if url:
- print 'The file was uploaded successfully.'
- print 'URL: %s' % url
- return 0
- else:
- print 'An error occurred. Your file was not uploaded.'
- print 'Google Code upload server said: %s (%s)' % (reason, status)
- return 1
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/vendor/sabre/dav/lib/CalDAV/Backend/BackendInterface.php b/vendor/sabre/dav/lib/CalDAV/Backend/BackendInterface.php
index 8bfa7446a..ccaa2519a 100644
--- a/vendor/sabre/dav/lib/CalDAV/Backend/BackendInterface.php
+++ b/vendor/sabre/dav/lib/CalDAV/Backend/BackendInterface.php
@@ -221,7 +221,7 @@ interface BackendInterface
*
* This default may well be good enough for personal use, and calendars
* that aren't very large. But if you anticipate high usage, big calendars
- * or high loads, you are strongly adviced to optimize certain paths.
+ * or high loads, you are strongly advised to optimize certain paths.
*
* The best way to do so is override this method and to optimize
* specifically for 'common filters'.
diff --git a/vendor/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php b/vendor/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php
index 6e48d5454..5c04ae44c 100644
--- a/vendor/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php
+++ b/vendor/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php
@@ -36,7 +36,7 @@ interface NotificationSupport extends BackendInterface
public function getNotificationsForPrincipal($principalUri);
/**
- * This deletes a specific notifcation.
+ * This deletes a specific notification.
*
* This may be called by a client once it deems a notification handled.
*
diff --git a/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php b/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php
index b9f112cf8..634b9828c 100644
--- a/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php
+++ b/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php
@@ -196,7 +196,7 @@ SQL
//$stmt2 = $this->pdo->prepare('SELECT principaluri FROM ' . $this->calendarInstancesTableName . ' WHERE access = 1 AND id = ?');
//$stmt2->execute([$row['id']]);
- // read-only is for backwards compatbility. Might go away in
+ // read-only is for backwards compatibility. Might go away in
// the future.
$calendar['read-only'] = \Sabre\DAV\Sharing\Plugin::ACCESS_READ === (int) $row['access'];
}
@@ -730,7 +730,7 @@ SQL
*
* This default may well be good enough for personal use, and calendars
* that aren't very large. But if you anticipate high usage, big calendars
- * or high loads, you are strongly adviced to optimize certain paths.
+ * or high loads, you are strongly advised to optimize certain paths.
*
* The best way to do so is override this method and to optimize
* specifically for 'common filters'.
diff --git a/vendor/sabre/dav/lib/CalDAV/Calendar.php b/vendor/sabre/dav/lib/CalDAV/Calendar.php
index 6c0bf5411..ba8c704a5 100644
--- a/vendor/sabre/dav/lib/CalDAV/Calendar.php
+++ b/vendor/sabre/dav/lib/CalDAV/Calendar.php
@@ -435,7 +435,7 @@ class Calendar implements ICalendar, DAV\IProperties, DAV\Sync\ISyncCollection,
* return null.
*
* The limit is 'suggestive'. You are free to ignore it.
- * TODO: RFC6578 Setion 3.7 says that the server must fail when the server
+ * TODO: RFC6578 Section 3.7 says that the server must fail when the server
* cannot truncate according to the limit, so it may not be just suggestive.
*
* @param string $syncToken
diff --git a/vendor/sabre/dav/lib/CalDAV/Notifications/Node.php b/vendor/sabre/dav/lib/CalDAV/Notifications/Node.php
index 7d3a3f46b..5bf9a6018 100644
--- a/vendor/sabre/dav/lib/CalDAV/Notifications/Node.php
+++ b/vendor/sabre/dav/lib/CalDAV/Notifications/Node.php
@@ -70,7 +70,7 @@ class Node extends DAV\File implements INode, DAVACL\IACL
/**
* Returns the etag for the notification.
*
- * The etag must be surrounded by litteral double-quotes.
+ * The etag must be surrounded by literal double-quotes.
*
* @return string
*/
@@ -101,7 +101,7 @@ class Node extends DAV\File implements INode, DAVACL\IACL
/**
* Returns the owner principal.
*
- * This must be a url to a principal, or null if there's no owner
+ * This must be an url to a principal, or null if there's no owner
*
* @return string|null
*/
diff --git a/vendor/sabre/dav/lib/CalDAV/Plugin.php b/vendor/sabre/dav/lib/CalDAV/Plugin.php
index 98f4f554c..ccb722f85 100644
--- a/vendor/sabre/dav/lib/CalDAV/Plugin.php
+++ b/vendor/sabre/dav/lib/CalDAV/Plugin.php
@@ -720,7 +720,7 @@ class Plugin extends DAV\ServerPlugin
return;
}
- // We're onyl interested in ICalendarObject nodes that are inside of a
+ // We're only interested in ICalendarObject nodes that are inside of a
// real calendar. This is to avoid triggering validation and scheduling
// for non-calendars (such as an inbox).
list($parent) = Uri\split($path);
@@ -913,7 +913,7 @@ class Plugin extends DAV\ServerPlugin
}
/**
- * This method is triggered whenever a subsystem reqeuests the privileges
+ * This method is triggered whenever a subsystem requests the privileges
* that are supported on a particular node.
*/
public function getSupportedPrivilegeSet(INode $node, array &$supportedPrivilegeSet)
diff --git a/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php b/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php
index 5e5659610..5bca56d47 100644
--- a/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php
+++ b/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php
@@ -25,6 +25,7 @@ use Sabre\HTTP\ResponseInterface;
use Sabre\VObject;
use Sabre\VObject\Component\VCalendar;
use Sabre\VObject\ITip;
+use Sabre\VObject\ITip\Broker;
use Sabre\VObject\ITip\Message;
use Sabre\VObject\Reader;
@@ -389,7 +390,7 @@ class Plugin extends ServerPlugin
$node->getOwner()
);
- $broker = new ITip\Broker();
+ $broker = $this->createITipBroker();
$messages = $broker->parseEvent(null, $addresses, $node->get());
foreach ($messages as $message) {
@@ -500,7 +501,7 @@ class Plugin extends ServerPlugin
$isNewNode = true;
}
- $broker = new ITip\Broker();
+ $broker = $this->createITipBroker();
$newObject = $broker->processMessage($iTipMessage, $currentObject);
$inbox->createFile($newFileName, $iTipMessage->message->serialize());
@@ -611,7 +612,7 @@ class Plugin extends ServerPlugin
*/
protected function processICalendarChange($oldObject, VCalendar $newObject, array $addresses, array $ignore = [], &$modified = false)
{
- $broker = new ITip\Broker();
+ $broker = $this->createITipBroker();
$messages = $broker->parseEvent($newObject, $addresses, $oldObject);
if ($messages) {
@@ -994,4 +995,12 @@ class Plugin extends ServerPlugin
'link' => 'http://sabre.io/dav/scheduling/',
];
}
+
+ /**
+ * Returns an instance of the iTip\Broker.
+ */
+ protected function createITipBroker(): Broker
+ {
+ return new Broker();
+ }
}
diff --git a/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php b/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php
index f7dca9be6..bacfe0441 100644
--- a/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php
+++ b/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php
@@ -136,7 +136,7 @@ class SharingPlugin extends DAV\ServerPlugin
}
/**
- * This method is trigged when a user attempts to update a node's
+ * This method is triggered when a user attempts to update a node's
* properties.
*
* A previous draft of the sharing spec stated that it was possible to use
diff --git a/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarMultiGetReport.php b/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarMultiGetReport.php
index 3b3a94b26..4771a2070 100644
--- a/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarMultiGetReport.php
+++ b/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarMultiGetReport.php
@@ -48,7 +48,7 @@ class CalendarMultiGetReport implements XmlDeserializable
public $expand = null;
/**
- * The mimetype of the content that should be returend. Usually
+ * The mimetype of the content that should be returned. Usually
* text/calendar.
*
* @var string
diff --git a/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarQueryReport.php b/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarQueryReport.php
index b3cc299d3..5a4df4674 100644
--- a/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarQueryReport.php
+++ b/vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarQueryReport.php
@@ -48,7 +48,7 @@ class CalendarQueryReport implements XmlDeserializable
public $expand = null;
/**
- * The mimetype of the content that should be returend. Usually
+ * The mimetype of the content that should be returned. Usually
* text/calendar.
*
* @var string
diff --git a/vendor/sabre/dav/lib/CardDAV/Backend/BackendInterface.php b/vendor/sabre/dav/lib/CardDAV/Backend/BackendInterface.php
index 6ef34d173..f9955ac83 100644
--- a/vendor/sabre/dav/lib/CardDAV/Backend/BackendInterface.php
+++ b/vendor/sabre/dav/lib/CardDAV/Backend/BackendInterface.php
@@ -88,7 +88,7 @@ interface BackendInterface
* * size - The size of the card in bytes.
*
* If these last two properties are provided, less time will be spent
- * calculating them. If they are specified, you can also ommit carddata.
+ * calculating them. If they are specified, you can also omit carddata.
* This may speed up certain requests, especially with large cards.
*
* @param mixed $addressbookId
@@ -98,7 +98,7 @@ interface BackendInterface
public function getCards($addressbookId);
/**
- * Returns a specfic card.
+ * Returns a specific card.
*
* The same set of properties must be returned as with getCards. The only
* exception is that 'carddata' is absolutely required.
diff --git a/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php b/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php
index 4ca9284a9..7b935a4ae 100644
--- a/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php
+++ b/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php
@@ -205,7 +205,7 @@ class PDO extends AbstractBackend implements SyncSupport
* * size - The size of the card in bytes.
*
* If these last two properties are provided, less time will be spent
- * calculating them. If they are specified, you can also ommit carddata.
+ * calculating them. If they are specified, you can also omit carddata.
* This may speed up certain requests, especially with large cards.
*
* @param mixed $addressbookId
diff --git a/vendor/sabre/dav/lib/CardDAV/Plugin.php b/vendor/sabre/dav/lib/CardDAV/Plugin.php
index c2d31d9df..810ae3a1a 100644
--- a/vendor/sabre/dav/lib/CardDAV/Plugin.php
+++ b/vendor/sabre/dav/lib/CardDAV/Plugin.php
@@ -800,7 +800,7 @@ class Plugin extends DAV\ServerPlugin
*
* @return string
*/
- protected function convertVCard($data, $target, array $propertiesFilter = null)
+ protected function convertVCard($data, $target, ?array $propertiesFilter = null)
{
if (is_resource($data)) {
$data = stream_get_contents($data);
diff --git a/vendor/sabre/dav/lib/CardDAV/Xml/Property/SupportedAddressData.php b/vendor/sabre/dav/lib/CardDAV/Xml/Property/SupportedAddressData.php
index fe5f976a0..536c5a19f 100644
--- a/vendor/sabre/dav/lib/CardDAV/Xml/Property/SupportedAddressData.php
+++ b/vendor/sabre/dav/lib/CardDAV/Xml/Property/SupportedAddressData.php
@@ -34,7 +34,7 @@ class SupportedAddressData implements XmlSerializable
/**
* Creates the property.
*/
- public function __construct(array $supportedData = null)
+ public function __construct(?array $supportedData = null)
{
if (is_null($supportedData)) {
$supportedData = [
diff --git a/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php b/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php
index e1096fe28..02402f6c7 100644
--- a/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php
+++ b/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php
@@ -82,7 +82,7 @@ class AddressBookQueryReport implements XmlDeserializable
public $test;
/**
- * The mimetype of the content that should be returend. Usually
+ * The mimetype of the content that should be returned. Usually
* text/vcard.
*
* @var string
diff --git a/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php b/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php
index 39324e4db..d142cbfbf 100644
--- a/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php
+++ b/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php
@@ -44,7 +44,7 @@ class PDOBasicAuth extends AbstractBasic
* Digest prefix:
* if the backend you are using for is prefixing
* your password hashes set this option to your prefix to
- * cut it off before verfiying.
+ * cut it off before verifying.
*
* @var string
*/
diff --git a/vendor/sabre/dav/lib/DAV/Auth/Plugin.php b/vendor/sabre/dav/lib/DAV/Auth/Plugin.php
index eb4f27ca6..47fbe205a 100644
--- a/vendor/sabre/dav/lib/DAV/Auth/Plugin.php
+++ b/vendor/sabre/dav/lib/DAV/Auth/Plugin.php
@@ -58,7 +58,7 @@ class Plugin extends ServerPlugin
*
* @param Backend\BackendInterface $authBackend
*/
- public function __construct(Backend\BackendInterface $authBackend = null)
+ public function __construct(?Backend\BackendInterface $authBackend = null)
{
if (!is_null($authBackend)) {
$this->addBackend($authBackend);
diff --git a/vendor/sabre/dav/lib/DAV/Browser/Plugin.php b/vendor/sabre/dav/lib/DAV/Browser/Plugin.php
index 89495e5db..a8a6f430e 100644
--- a/vendor/sabre/dav/lib/DAV/Browser/Plugin.php
+++ b/vendor/sabre/dav/lib/DAV/Browser/Plugin.php
@@ -522,7 +522,7 @@ HTML;
/**
* This method takes a path/name of an asset and turns it into url
- * suiteable for http access.
+ * suitable for http access.
*
* @param string $assetName
*
diff --git a/vendor/sabre/dav/lib/DAV/Exception/InvalidSyncToken.php b/vendor/sabre/dav/lib/DAV/Exception/InvalidSyncToken.php
index 37b28ca54..f28d20f41 100644
--- a/vendor/sabre/dav/lib/DAV/Exception/InvalidSyncToken.php
+++ b/vendor/sabre/dav/lib/DAV/Exception/InvalidSyncToken.php
@@ -9,7 +9,7 @@ use Sabre\DAV;
/**
* InvalidSyncToken.
*
- * This exception is emited for the {DAV:}valid-sync-token pre-condition, as
+ * This exception is emitted for the {DAV:}valid-sync-token pre-condition, as
* defined in rfc6578, section 3.2.
*
* http://tools.ietf.org/html/rfc6578#section-3.2
diff --git a/vendor/sabre/dav/lib/DAV/Exception/Locked.php b/vendor/sabre/dav/lib/DAV/Exception/Locked.php
index 28263cf13..24fad7095 100644
--- a/vendor/sabre/dav/lib/DAV/Exception/Locked.php
+++ b/vendor/sabre/dav/lib/DAV/Exception/Locked.php
@@ -32,7 +32,7 @@ class Locked extends DAV\Exception
*
* @param DAV\Locks\LockInfo $lock
*/
- public function __construct(DAV\Locks\LockInfo $lock = null)
+ public function __construct(?DAV\Locks\LockInfo $lock = null)
{
parent::__construct();
diff --git a/vendor/sabre/dav/lib/DAV/Exception/TooManyMatches.php b/vendor/sabre/dav/lib/DAV/Exception/TooManyMatches.php
index 3f7d2d5fb..ef6f50243 100644
--- a/vendor/sabre/dav/lib/DAV/Exception/TooManyMatches.php
+++ b/vendor/sabre/dav/lib/DAV/Exception/TooManyMatches.php
@@ -9,7 +9,7 @@ use Sabre\DAV;
/**
* TooManyMatches.
*
- * This exception is emited for the {DAV:}number-of-matches-within-limits
+ * This exception is emitted for the {DAV:}number-of-matches-within-limits
* post-condition, as defined in rfc6578, section 3.2.
*
* http://tools.ietf.org/html/rfc6578#section-3.2
diff --git a/vendor/sabre/dav/lib/DAV/INodeByPath.php b/vendor/sabre/dav/lib/DAV/INodeByPath.php
index 4d63a33bd..349ea1053 100644
--- a/vendor/sabre/dav/lib/DAV/INodeByPath.php
+++ b/vendor/sabre/dav/lib/DAV/INodeByPath.php
@@ -9,7 +9,7 @@ namespace Sabre\DAV;
*
* This interface adds a tiny bit of functionality to collections.
*
- * Getting a node that is deep in the tree normally requires going trough each parent node
+ * Getting a node that is deep in the tree normally requires going through each parent node
* which can cause a significant performance overhead.
*
* Implementing this interface allows solving this overhead by directly jumping to the target node.
diff --git a/vendor/sabre/dav/lib/DAV/Server.php b/vendor/sabre/dav/lib/DAV/Server.php
index 1f8300d4a..3133e54ad 100644
--- a/vendor/sabre/dav/lib/DAV/Server.php
+++ b/vendor/sabre/dav/lib/DAV/Server.php
@@ -211,7 +211,7 @@ class Server implements LoggerAwareInterface, EmitterInterface
*
* @throws Exception
*/
- public function __construct($treeOrNode = null, HTTP\Sapi $sapi = null)
+ public function __construct($treeOrNode = null, ?HTTP\Sapi $sapi = null)
{
if ($treeOrNode instanceof Tree) {
$this->tree = $treeOrNode;
@@ -882,7 +882,7 @@ class Server implements LoggerAwareInterface, EmitterInterface
*
* @return \Traversable
*/
- private function generatePathNodes(PropFind $propFind, array $yieldFirst = null)
+ private function generatePathNodes(PropFind $propFind, ?array $yieldFirst = null)
{
if (null !== $yieldFirst) {
yield $yieldFirst;
@@ -1635,6 +1635,8 @@ class Server implements LoggerAwareInterface, EmitterInterface
*/
public function generateMultiStatus($fileProperties, $strip404s = false)
{
+ $this->emit('beforeMultiStatus', [&$fileProperties]);
+
$w = $this->xml->getWriter();
if (self::$streamMultiStatus) {
return function () use ($fileProperties, $strip404s, $w) {
diff --git a/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php b/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php
index e7adbeee6..d766ae0de 100644
--- a/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php
+++ b/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php
@@ -194,7 +194,7 @@ class Plugin extends ServerPlugin
}
/**
- * This method is triggered whenever a subsystem reqeuests the privileges
+ * This method is triggered whenever a subsystem requests the privileges
* hat are supported on a particular node.
*
* We need to add a number of privileges for scheduling purposes.
diff --git a/vendor/sabre/dav/lib/DAV/Tree.php b/vendor/sabre/dav/lib/DAV/Tree.php
index 65b4583ce..1483e1bc5 100644
--- a/vendor/sabre/dav/lib/DAV/Tree.php
+++ b/vendor/sabre/dav/lib/DAV/Tree.php
@@ -62,9 +62,21 @@ class Tree implements INodeByPath
return $this->rootNode;
}
- $parts = explode('/', $path);
$node = $this->rootNode;
+ // look for any cached parent and collect the parts below the parent
+ $parts = [];
+ $remainingPath = $path;
+ do {
+ list($remainingPath, $baseName) = Uri\split($remainingPath);
+ array_unshift($parts, $baseName);
+
+ if (isset($this->cache[$remainingPath])) {
+ $node = $this->cache[$remainingPath];
+ break;
+ }
+ } while ('' !== $remainingPath);
+
while (count($parts)) {
if (!($node instanceof ICollection)) {
throw new Exception\NotFound('Could not find node at path: '.$path);
diff --git a/vendor/sabre/dav/lib/DAV/Version.php b/vendor/sabre/dav/lib/DAV/Version.php
index 345c62d7e..e6aee097c 100644
--- a/vendor/sabre/dav/lib/DAV/Version.php
+++ b/vendor/sabre/dav/lib/DAV/Version.php
@@ -16,5 +16,5 @@ class Version
/**
* Full version number.
*/
- public const VERSION = '4.6.0';
+ public const VERSION = '4.7.0';
}
diff --git a/vendor/sabre/dav/lib/DAVACL/Plugin.php b/vendor/sabre/dav/lib/DAVACL/Plugin.php
index 46d680e15..f0497844d 100644
--- a/vendor/sabre/dav/lib/DAVACL/Plugin.php
+++ b/vendor/sabre/dav/lib/DAVACL/Plugin.php
@@ -716,7 +716,7 @@ class Plugin extends DAV\ServerPlugin
* @param array $requestedProperties this is the list of properties to
* return for every match
* @param string $collectionUri the principal collection to search on.
- * If this is ommitted, the standard
+ * If this is omitted, the standard
* principal collection-set will be used
* @param string $test "allof" to use AND to search the
* properties. 'anyof' for OR.
diff --git a/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/PDO.php b/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/PDO.php
index 17bc245c5..178bd7276 100644
--- a/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/PDO.php
+++ b/vendor/sabre/dav/lib/DAVACL/PrincipalBackend/PDO.php
@@ -80,7 +80,7 @@ class PDO extends AbstractBackend implements CreatePrincipalSupport
* return any additional properties if you wish so. Common properties are:
* {DAV:}displayname
* {http://sabredav.org/ns}email-address - This is a custom SabreDAV
- * field that's actualy injected in a number of other properties. If
+ * field that's actually injected in a number of other properties. If
* you have an email address, use this property.
*
* @param string $prefixPath
diff --git a/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php b/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php
index 52092128f..5b9ee4517 100644
--- a/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php
+++ b/vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php
@@ -149,7 +149,7 @@ class Principal extends DAV\Xml\Property\Href
/**
* The deserialize method is called during xml parsing.
*
- * This method is called staticly, this is because in theory this method
+ * This method is called statically, this is because in theory this method
* may be used as a type of constructor, or factory method.
*
* Often you want to return an instance of the current class, but you are
diff --git a/vendor/sabre/event/.github/workflows/ci.yml b/vendor/sabre/event/.github/workflows/ci.yml
deleted file mode 100644
index 3473cd2de..000000000
--- a/vendor/sabre/event/.github/workflows/ci.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-name: continuous-integration
-on:
- push:
- branches:
- - master
- - release/*
- pull_request:
-jobs:
- unit-testing:
- name: PHPUnit (PHP ${{ matrix.php-versions }})
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1']
- coverage: ['pcov']
- code-analysis: ['no']
- include:
- - php-versions: '7.1'
- coverage: 'none'
- code-analysis: 'yes'
- steps:
- - name: Checkout
- uses: actions/checkout@v2
-
- - name: Setup PHP, with composer and extensions
- uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
- with:
- php-version: ${{ matrix.php-versions }}
- extensions: mbstring, dom, fileinfo, mysql, redis, opcache
- coverage: ${{ matrix.coverage }}
- tools: composer
-
- - name: Get composer cache directory
- id: composer-cache
- run: echo "::set-output name=dir::$(composer config cache-files-dir)"
-
- - name: Cache composer dependencies
- uses: actions/cache@v2
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- # Use composer.json for key, if composer.lock is not committed.
- # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer-
-
- - name: Install composer dependencies
- run: composer install --no-progress --prefer-dist --optimize-autoloader
-
- - name: Code Analysis (PHP CS-Fixer)
- if: matrix.code-analysis == 'yes'
- run: php vendor/bin/php-cs-fixer fix --dry-run --diff
-
- - name: Code Analysis (PHPStan)
- if: matrix.code-analysis == 'yes'
- run: composer phpstan
-
- - name: Test with phpunit
- run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml
-
- - name: Code Coverage
- uses: codecov/codecov-action@v2
- if: matrix.coverage != 'none'
diff --git a/vendor/sabre/event/.php-cs-fixer.dist.php b/vendor/sabre/event/.php-cs-fixer.dist.php
new file mode 100644
index 000000000..319886c6b
--- /dev/null
+++ b/vendor/sabre/event/.php-cs-fixer.dist.php
@@ -0,0 +1,18 @@
+<?php
+
+$finder = PhpCsFixer\Finder::create()
+ ->exclude('vendor')
+ ->in(__DIR__);
+
+$config = new PhpCsFixer\Config();
+$config->setRules([
+ '@PSR1' => true,
+ '@Symfony' => true,
+ 'blank_line_between_import_groups' => false,
+ 'nullable_type_declaration' => [
+ 'syntax' => 'question_mark',
+ ],
+ 'nullable_type_declaration_for_default_null_value' => true,
+]);
+$config->setFinder($finder);
+return $config; \ No newline at end of file
diff --git a/vendor/sabre/event/.php_cs.dist b/vendor/sabre/event/.php_cs.dist
deleted file mode 100644
index c5c78a971..000000000
--- a/vendor/sabre/event/.php_cs.dist
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-$config = PhpCsFixer\Config::create();
-$config->getFinder()
- ->exclude('vendor')
- ->in(__DIR__);
-$config->setRules([
- '@PSR1' => true,
- '@Symfony' => true
-]);
-
-return $config; \ No newline at end of file
diff --git a/vendor/sabre/event/composer.json b/vendor/sabre/event/composer.json
index 42fb4aa22..0d3ec0621 100644
--- a/vendor/sabre/event/composer.json
+++ b/vendor/sabre/event/composer.json
@@ -46,16 +46,16 @@
}
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||^3.63",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.6"
},
"scripts": {
"phpstan": [
"phpstan analyse lib tests"
],
"cs-fixer": [
- "php-cs-fixer fix"
+ "PHP_CS_FIXER_IGNORE_ENV=true php-cs-fixer fix"
],
"phpunit": [
"phpunit --configuration tests/phpunit.xml"
diff --git a/vendor/sabre/event/lib/EmitterInterface.php b/vendor/sabre/event/lib/EmitterInterface.php
index 6ce0f34db..662efd739 100644
--- a/vendor/sabre/event/lib/EmitterInterface.php
+++ b/vendor/sabre/event/lib/EmitterInterface.php
@@ -47,7 +47,7 @@ interface EmitterInterface
* Lastly, if there are 5 event handlers for an event. The continueCallback
* will be called at most 4 times.
*/
- public function emit(string $eventName, array $arguments = [], callable $continueCallBack = null): bool;
+ public function emit(string $eventName, array $arguments = [], ?callable $continueCallBack = null): bool;
/**
* Returns the list of listeners for an event.
@@ -74,5 +74,5 @@ interface EmitterInterface
* removed. If it is not specified, every listener for every event is
* removed.
*/
- public function removeAllListeners(string $eventName = null);
+ public function removeAllListeners(?string $eventName = null);
}
diff --git a/vendor/sabre/event/lib/EmitterTrait.php b/vendor/sabre/event/lib/EmitterTrait.php
index 5502ef9f3..5a0a23457 100644
--- a/vendor/sabre/event/lib/EmitterTrait.php
+++ b/vendor/sabre/event/lib/EmitterTrait.php
@@ -73,7 +73,7 @@ trait EmitterTrait
* Lastly, if there are 5 event handlers for an event. The continueCallback
* will be called at most 4 times.
*/
- public function emit(string $eventName, array $arguments = [], callable $continueCallBack = null): bool
+ public function emit(string $eventName, array $arguments = [], ?callable $continueCallBack = null): bool
{
if (\is_null($continueCallBack)) {
foreach ($this->listeners($eventName) as $listener) {
@@ -160,7 +160,7 @@ trait EmitterTrait
* removed. If it is not specified, every listener for every event is
* removed.
*/
- public function removeAllListeners(string $eventName = null)
+ public function removeAllListeners(?string $eventName = null)
{
if (!\is_null($eventName)) {
unset($this->listeners[$eventName]);
diff --git a/vendor/sabre/event/lib/Loop/Loop.php b/vendor/sabre/event/lib/Loop/Loop.php
index b85a7a440..74981da08 100644
--- a/vendor/sabre/event/lib/Loop/Loop.php
+++ b/vendor/sabre/event/lib/Loop/Loop.php
@@ -24,7 +24,7 @@ class Loop
*/
public function setTimeout(callable $cb, float $timeout)
{
- $triggerTime = microtime(true) + ($timeout);
+ $triggerTime = microtime(true) + $timeout;
if (!$this->timers) {
// Special case when the timers array was empty.
@@ -265,7 +265,7 @@ class Loop
* If $timeout is 0, it will return immediately. If $timeout is null, it
* will wait indefinitely.
*
- * @param float|null timeout
+ * @param float|null $timeout
*/
protected function runStreams($timeout)
{
diff --git a/vendor/sabre/event/lib/Loop/functions.php b/vendor/sabre/event/lib/Loop/functions.php
index bf4d933f2..9412a77ff 100644
--- a/vendor/sabre/event/lib/Loop/functions.php
+++ b/vendor/sabre/event/lib/Loop/functions.php
@@ -130,7 +130,7 @@ function stop()
/**
* Retrieves or sets the global Loop object.
*/
-function instance(Loop $newLoop = null): Loop
+function instance(?Loop $newLoop = null): Loop
{
static $loop;
if ($newLoop) {
diff --git a/vendor/sabre/event/lib/Promise.php b/vendor/sabre/event/lib/Promise.php
index 42969a55f..66903fb9f 100644
--- a/vendor/sabre/event/lib/Promise.php
+++ b/vendor/sabre/event/lib/Promise.php
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Sabre\Event;
use Exception;
-use Throwable;
/**
* An implementation of the Promise pattern.
@@ -30,17 +29,17 @@ class Promise
/**
* The asynchronous operation is pending.
*/
- const PENDING = 0;
+ public const PENDING = 0;
/**
* The asynchronous operation has completed, and has a result.
*/
- const FULFILLED = 1;
+ public const FULFILLED = 1;
/**
* The asynchronous operation has completed with an error.
*/
- const REJECTED = 2;
+ public const REJECTED = 2;
/**
* The current state of this promise.
@@ -58,7 +57,7 @@ class Promise
* Each are callbacks that map to $this->fulfill and $this->reject.
* Using the executor is optional.
*/
- public function __construct(callable $executor = null)
+ public function __construct(?callable $executor = null)
{
if ($executor) {
$executor(
@@ -87,7 +86,7 @@ class Promise
* If either of the callbacks throw an exception, the returned promise will
* be rejected and the exception will be passed back.
*/
- public function then(callable $onFulfilled = null, callable $onRejected = null): Promise
+ public function then(?callable $onFulfilled = null, ?callable $onRejected = null): Promise
{
// This new subPromise will be returned from this function, and will
// be fulfilled with the result of the onFulfilled or onRejected event
@@ -128,8 +127,6 @@ class Promise
/**
* Marks this promise as fulfilled and sets its return value.
- *
- * @param mixed $value
*/
public function fulfill($value = null)
{
@@ -146,7 +143,7 @@ class Promise
/**
* Marks this promise as rejected, and set its rejection reason.
*/
- public function reject(Throwable $reason)
+ public function reject(\Throwable $reason)
{
if (self::PENDING !== $this->state) {
throw new PromiseAlreadyResolvedException('This promise is already resolved, and you\'re not allowed to resolve a promise more than once');
@@ -169,7 +166,6 @@ class Promise
* one. In PHP it might be useful to call this on the last promise in a
* chain.
*
- * @return mixed
* @psalm-return TReturn
*/
public function wait()
@@ -208,10 +204,8 @@ class Promise
*
* If the promise was fulfilled, this will be the result value. If the
* promise was rejected, this property hold the rejection reason.
- *
- * @var mixed
*/
- protected $value = null;
+ protected $value;
/**
* This method is used to call either an onFulfilled or onRejected callback.
@@ -219,10 +213,8 @@ class Promise
* This method makes sure that the result of these callbacks are handled
* correctly, and any chained promises are also correctly fulfilled or
* rejected.
- *
- * @param callable $callBack
*/
- private function invokeCallback(Promise $subPromise, callable $callBack = null)
+ private function invokeCallback(Promise $subPromise, ?callable $callBack = null)
{
// We use 'nextTick' to ensure that the event handlers are always
// triggered outside of the calling stack in which they were originally
@@ -244,7 +236,7 @@ class Promise
// immediately fulfill the chained promise.
$subPromise->fulfill($result);
}
- } catch (Throwable $e) {
+ } catch (\Throwable $e) {
// If the event handler threw an exception, we need to make sure that
// the chained promise is rejected as well.
$subPromise->reject($e);
diff --git a/vendor/sabre/event/lib/Promise/functions.php b/vendor/sabre/event/lib/Promise/functions.php
index fbed63471..67e80cbe4 100644
--- a/vendor/sabre/event/lib/Promise/functions.php
+++ b/vendor/sabre/event/lib/Promise/functions.php
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Sabre\Event\Promise;
use Sabre\Event\Promise;
-use Throwable;
/**
* This file contains a set of functions that are useful for dealing with the
@@ -101,8 +100,6 @@ function race(array $promises): Promise
*
* If the value is a promise, the returned promise will attach itself to that
* promise and eventually get the same state as the followed promise.
- *
- * @param mixed $value
*/
function resolve($value): Promise
{
@@ -119,7 +116,7 @@ function resolve($value): Promise
/**
* Returns a Promise that will reject with the given reason.
*/
-function reject(Throwable $reason): Promise
+function reject(\Throwable $reason): Promise
{
$promise = new Promise();
$promise->reject($reason);
diff --git a/vendor/sabre/event/lib/Version.php b/vendor/sabre/event/lib/Version.php
index fe8f5c3bf..10a98c607 100644
--- a/vendor/sabre/event/lib/Version.php
+++ b/vendor/sabre/event/lib/Version.php
@@ -16,5 +16,5 @@ class Version
/**
* Full version number.
*/
- const VERSION = '5.1.4';
+ public const VERSION = '5.1.7';
}
diff --git a/vendor/sabre/event/lib/WildcardEmitterTrait.php b/vendor/sabre/event/lib/WildcardEmitterTrait.php
index 206a8f3c5..69243ff83 100644
--- a/vendor/sabre/event/lib/WildcardEmitterTrait.php
+++ b/vendor/sabre/event/lib/WildcardEmitterTrait.php
@@ -82,7 +82,7 @@ trait WildcardEmitterTrait
* Lastly, if there are 5 event handlers for an event. The continueCallback
* will be called at most 4 times.
*/
- public function emit(string $eventName, array $arguments = [], callable $continueCallBack = null): bool
+ public function emit(string $eventName, array $arguments = [], ?callable $continueCallBack = null): bool
{
if (\is_null($continueCallBack)) {
foreach ($this->listeners($eventName) as $listener) {
@@ -195,7 +195,7 @@ trait WildcardEmitterTrait
* removed. If it is not specified, every listener for every event is
* removed.
*/
- public function removeAllListeners(string $eventName = null)
+ public function removeAllListeners(?string $eventName = null)
{
if (\is_null($eventName)) {
$this->listeners = [];
diff --git a/vendor/sabre/event/lib/coroutine.php b/vendor/sabre/event/lib/coroutine.php
index cdf2d3ecd..f664efa78 100644
--- a/vendor/sabre/event/lib/coroutine.php
+++ b/vendor/sabre/event/lib/coroutine.php
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Sabre\Event;
use Generator;
-use Throwable;
/**
* Turn asynchronous promise-based code into something that looks synchronous
@@ -42,10 +41,10 @@ use Throwable;
*
* });
*
- * @return \Sabre\Event\Promise
- *
* @psalm-template TReturn
+ *
* @psalm-param callable():\Generator<mixed, mixed, mixed, TReturn> $gen
+ *
* @psalm-return Promise<TReturn>
*
* @copyright Copyright (C) fruux GmbH (https://fruux.com/)
@@ -55,7 +54,7 @@ use Throwable;
function coroutine(callable $gen): Promise
{
$generator = $gen();
- if (!$generator instanceof Generator) {
+ if (!$generator instanceof \Generator) {
throw new \InvalidArgumentException('You must pass a generator function');
}
@@ -75,11 +74,11 @@ function coroutine(callable $gen): Promise
$generator->send($value);
$advanceGenerator();
},
- function (Throwable $reason) use ($generator, $advanceGenerator) {
+ function (\Throwable $reason) use ($generator, $advanceGenerator) {
$generator->throw($reason);
$advanceGenerator();
}
- )->otherwise(function (Throwable $reason) use ($promise) {
+ )->otherwise(function (\Throwable $reason) use ($promise) {
// This error handler would be called, if something in the
// generator throws an exception, and it's not caught
// locally.
@@ -104,7 +103,7 @@ function coroutine(callable $gen): Promise
if ($returnValue instanceof Promise) {
$returnValue->then(function ($value) use ($promise) {
$promise->fulfill($value);
- }, function (Throwable $reason) use ($promise) {
+ }, function (\Throwable $reason) use ($promise) {
$promise->reject($reason);
});
} else {
@@ -115,7 +114,7 @@ function coroutine(callable $gen): Promise
try {
$advanceGenerator();
- } catch (Throwable $e) {
+ } catch (\Throwable $e) {
$promise->reject($e);
}
diff --git a/vendor/sabre/event/phpstan.neon b/vendor/sabre/event/phpstan.neon
deleted file mode 100644
index 213da6dad..000000000
--- a/vendor/sabre/event/phpstan.neon
+++ /dev/null
@@ -1,2 +0,0 @@
-parameters:
- level: 1
diff --git a/vendor/sabre/http/.github/workflows/ci.yml b/vendor/sabre/http/.github/workflows/ci.yml
index cbb681e53..56bc1a321 100644
--- a/vendor/sabre/http/.github/workflows/ci.yml
+++ b/vendor/sabre/http/.github/workflows/ci.yml
@@ -12,15 +12,20 @@ jobs:
strategy:
fail-fast: false
matrix:
- php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1']
+ php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
coverage: ['xdebug']
+ code-style: ['yes']
code-analysis: ['no']
include:
- php-versions: '7.1'
+ code-style: 'yes'
+ code-analysis: 'yes'
+ - php-versions: '8.4'
+ code-style: 'yes'
code-analysis: 'yes'
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
@@ -35,7 +40,7 @@ jobs:
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache composer dependencies
- uses: actions/cache@v2
+ uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
@@ -45,8 +50,8 @@ jobs:
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: Code Analysis (PHP CS-Fixer)
- if: matrix.code-analysis == 'yes'
- run: php vendor/bin/php-cs-fixer fix --dry-run --diff
+ if: matrix.code-style == 'yes'
+ run: PHP_CS_FIXER_IGNORE_ENV=true php vendor/bin/php-cs-fixer fix --dry-run --diff
- name: Code Analysis (PHPStan)
if: matrix.code-analysis == 'yes'
@@ -59,5 +64,5 @@ jobs:
run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml
- name: Code Coverage
- uses: codecov/codecov-action@v2
+ uses: codecov/codecov-action@v4
if: matrix.coverage != 'none'
diff --git a/vendor/sabre/http/.gitignore b/vendor/sabre/http/.gitignore
index 367bba576..a5356dd00 100644
--- a/vendor/sabre/http/.gitignore
+++ b/vendor/sabre/http/.gitignore
@@ -6,3 +6,4 @@ composer.lock
tests/cov/
.phpunit.result.cache
.php_cs.cache
+.php-cs-fixer.cache
diff --git a/vendor/sabre/http/.php-cs-fixer.dist.php b/vendor/sabre/http/.php-cs-fixer.dist.php
new file mode 100644
index 000000000..f9d4b7a8d
--- /dev/null
+++ b/vendor/sabre/http/.php-cs-fixer.dist.php
@@ -0,0 +1,17 @@
+<?php
+
+$finder = PhpCsFixer\Finder::create()
+ ->exclude('vendor')
+ ->in(__DIR__);
+
+$config = new PhpCsFixer\Config();
+$config->setRules([
+ '@PSR1' => true,
+ '@Symfony' => true,
+ 'nullable_type_declaration' => [
+ 'syntax' => 'question_mark',
+ ],
+ 'nullable_type_declaration_for_default_null_value' => true,
+]);
+$config->setFinder($finder);
+return $config; \ No newline at end of file
diff --git a/vendor/sabre/http/CHANGELOG.md b/vendor/sabre/http/CHANGELOG.md
index 2dddce4fb..4158150f4 100644
--- a/vendor/sabre/http/CHANGELOG.md
+++ b/vendor/sabre/http/CHANGELOG.md
@@ -1,6 +1,37 @@
ChangeLog
=========
+5.1.12 (2024-08-27)
+------------------
+
+* #243 add cs-fixer v3 (@phil-davis)
+
+5.1.11 (2024-07-26)
+------------------
+
+* #241 PHP 8.4 compliance (@phil-davis)
+
+5.1.10 (2023-08-18)
+------------------
+
+* #225 Enhance tests/bootstrap.php to find autoloader in more environments (@phil-davis)
+
+5.1.9 (2023-08-17)
+------------------
+
+* #223 skip testParseMimeTypeOnInvalidMimeType (@phil-davis)
+
+5.1.8 (2023-08-17)
+------------------
+
+* #215 Improve CURLOPT_HTTPHEADER Setting Assignment (@amrita-shrestha)
+
+5.1.7 (2023-06-26)
+------------------
+
+* #98 and #176 Add more tests (@peter279k)
+* #207 fix: handle client disconnect properly with ignore_user_abort true (@kesselb)
+
5.1.6 (2022-07-15)
------------------
diff --git a/vendor/sabre/http/composer.json b/vendor/sabre/http/composer.json
index 353646a28..48caa44f8 100644
--- a/vendor/sabre/http/composer.json
+++ b/vendor/sabre/http/composer.json
@@ -13,9 +13,9 @@
"sabre/uri" : "^2.0"
},
"require-dev" : {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||^3.63",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.6"
},
"suggest" : {
"ext-curl" : " to make http requests with the Client class"
@@ -50,7 +50,7 @@
"phpstan analyse lib tests"
],
"cs-fixer": [
- "php-cs-fixer fix"
+ "PHP_CS_FIXER_IGNORE_ENV=true php-cs-fixer fix"
],
"phpunit": [
"phpunit --configuration tests/phpunit.xml"
diff --git a/vendor/sabre/http/lib/Auth/AWS.php b/vendor/sabre/http/lib/Auth/AWS.php
index ffda3cf15..2690c634d 100644
--- a/vendor/sabre/http/lib/Auth/AWS.php
+++ b/vendor/sabre/http/lib/Auth/AWS.php
@@ -22,14 +22,14 @@ class AWS extends AbstractAuth
*
* @var string
*/
- private $signature = null;
+ private $signature;
/**
* The accesskey supplied by the HTTP client.
*
* @var string
*/
- private $accessKey = null;
+ private $accessKey;
/**
* An error code, if any.
@@ -40,11 +40,11 @@ class AWS extends AbstractAuth
*/
public $errorCode = 0;
- const ERR_NOAWSHEADER = 1;
- const ERR_MD5CHECKSUMWRONG = 2;
- const ERR_INVALIDDATEFORMAT = 3;
- const ERR_REQUESTTIMESKEWED = 4;
- const ERR_INVALIDSIGNATURE = 5;
+ public const ERR_NOAWSHEADER = 1;
+ public const ERR_MD5CHECKSUMWRONG = 2;
+ public const ERR_INVALIDDATEFORMAT = 3;
+ public const ERR_REQUESTTIMESKEWED = 4;
+ public const ERR_INVALIDSIGNATURE = 5;
/**
* Gathers all information from the headers.
@@ -212,7 +212,7 @@ class AWS extends AbstractAuth
}
$key = str_pad($key, $blocksize, chr(0x00));
$ipad = str_repeat(chr(0x36), $blocksize);
- $opad = str_repeat(chr(0x5c), $blocksize);
+ $opad = str_repeat(chr(0x5C), $blocksize);
$hmac = pack('H*', sha1(($key ^ $opad).pack('H*', sha1(($key ^ $ipad).$message))));
return $hmac;
diff --git a/vendor/sabre/http/lib/Auth/Digest.php b/vendor/sabre/http/lib/Auth/Digest.php
index e80e78305..08fa34f90 100644
--- a/vendor/sabre/http/lib/Auth/Digest.php
+++ b/vendor/sabre/http/lib/Auth/Digest.php
@@ -34,8 +34,8 @@ class Digest extends AbstractAuth
/**
* These constants are used in setQOP();.
*/
- const QOP_AUTH = 1;
- const QOP_AUTHINT = 2;
+ public const QOP_AUTH = 1;
+ public const QOP_AUTHINT = 2;
protected $nonce;
protected $opaque;
@@ -177,8 +177,6 @@ class Digest extends AbstractAuth
* It should be compatible with mod_php format and other webservers.
*
* If the header could not be found, null will be returned
- *
- * @return mixed
*/
public function getDigest()
{
diff --git a/vendor/sabre/http/lib/Client.php b/vendor/sabre/http/lib/Client.php
index 2bc7483a7..c00f9e1b1 100644
--- a/vendor/sabre/http/lib/Client.php
+++ b/vendor/sabre/http/lib/Client.php
@@ -175,7 +175,7 @@ class Client extends EventEmitter
* After calling sendAsync, you must therefore occasionally call the poll()
* method, or wait().
*/
- public function sendAsync(RequestInterface $request, callable $success = null, callable $error = null)
+ public function sendAsync(RequestInterface $request, ?callable $success = null, ?callable $error = null)
{
$this->emit('beforeRequest', [$request]);
$this->sendAsyncInternal($request, $success, $error);
@@ -299,8 +299,6 @@ class Client extends EventEmitter
* Adds a CURL setting.
*
* These settings will be included in every HTTP request.
- *
- * @param mixed $value
*/
public function addCurlSetting(int $name, $value)
{
@@ -402,7 +400,10 @@ class Client extends EventEmitter
$nHeaders[] = $key.': '.$value;
}
}
- $settings[CURLOPT_HTTPHEADER] = $nHeaders;
+
+ if ([] !== $nHeaders) {
+ $settings[CURLOPT_HTTPHEADER] = $nHeaders;
+ }
$settings[CURLOPT_URL] = $request->getUrl();
// FIXME: CURLOPT_PROTOCOLS is currently unsupported by HHVM
if (defined('CURLOPT_PROTOCOLS')) {
@@ -416,9 +417,9 @@ class Client extends EventEmitter
return $settings;
}
- const STATUS_SUCCESS = 0;
- const STATUS_CURLERROR = 1;
- const STATUS_HTTPERROR = 2;
+ public const STATUS_SUCCESS = 0;
+ public const STATUS_CURLERROR = 1;
+ public const STATUS_HTTPERROR = 2;
private function parseResponse(string $response, $curlHandle): array
{
diff --git a/vendor/sabre/http/lib/Request.php b/vendor/sabre/http/lib/Request.php
index b8395ff45..99a13d25a 100644
--- a/vendor/sabre/http/lib/Request.php
+++ b/vendor/sabre/http/lib/Request.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace Sabre\HTTP;
-use LogicException;
use Sabre\Uri;
/**
diff --git a/vendor/sabre/http/lib/Response.php b/vendor/sabre/http/lib/Response.php
index c06c9637e..78ebb220d 100644
--- a/vendor/sabre/http/lib/Response.php
+++ b/vendor/sabre/http/lib/Response.php
@@ -100,10 +100,9 @@ class Response extends Message implements ResponseInterface
* Creates the response object.
*
* @param string|int $status
- * @param array $headers
* @param resource $body
*/
- public function __construct($status = 500, array $headers = null, $body = null)
+ public function __construct($status = 500, ?array $headers = null, $body = null)
{
if (null !== $status) {
$this->setStatus($status);
diff --git a/vendor/sabre/http/lib/Sapi.php b/vendor/sabre/http/lib/Sapi.php
index f8e8397fc..4c8fb6732 100644
--- a/vendor/sabre/http/lib/Sapi.php
+++ b/vendor/sabre/http/lib/Sapi.php
@@ -4,8 +4,6 @@ declare(strict_types=1);
namespace Sabre\HTTP;
-use InvalidArgumentException;
-
/**
* PHP SAPI.
*
@@ -115,6 +113,12 @@ class Sapi
if ($copied <= 0) {
break;
}
+ // Abort on client disconnect.
+ // With ignore_user_abort(true), the script is not aborted on client disconnect.
+ // To avoid reading the entire stream and dismissing the data afterward, check between the chunks if the client is still there.
+ if (1 === ignore_user_abort() && 1 === connection_aborted()) {
+ break;
+ }
$left -= $copied;
}
} else {
@@ -162,7 +166,7 @@ class Sapi
$url = $value;
break;
- // These sometimes show up without a HTTP_ prefix
+ // These sometimes show up without a HTTP_ prefix
case 'CONTENT_TYPE':
$headers['Content-Type'] = $value;
break;
@@ -170,21 +174,21 @@ class Sapi
$headers['Content-Length'] = $value;
break;
- // mod_php on apache will put credentials in these variables.
- // (fast)cgi does not usually do this, however.
+ // mod_php on apache will put credentials in these variables.
+ // (fast)cgi does not usually do this, however.
case 'PHP_AUTH_USER':
if (isset($serverArray['PHP_AUTH_PW'])) {
$headers['Authorization'] = 'Basic '.base64_encode($value.':'.$serverArray['PHP_AUTH_PW']);
}
break;
- // Similarly, mod_php may also screw around with digest auth.
+ // Similarly, mod_php may also screw around with digest auth.
case 'PHP_AUTH_DIGEST':
$headers['Authorization'] = 'Digest '.$value;
break;
- // Apache may prefix the HTTP_AUTHORIZATION header with
- // REDIRECT_, if mod_rewrite was used.
+ // Apache may prefix the HTTP_AUTHORIZATION header with
+ // REDIRECT_, if mod_rewrite was used.
case 'REDIRECT_HTTP_AUTHORIZATION':
$headers['Authorization'] = $value;
break;
@@ -220,11 +224,11 @@ class Sapi
}
if (null === $url) {
- throw new InvalidArgumentException('The _SERVER array must have a REQUEST_URI key');
+ throw new \InvalidArgumentException('The _SERVER array must have a REQUEST_URI key');
}
if (null === $method) {
- throw new InvalidArgumentException('The _SERVER array must have a REQUEST_METHOD key');
+ throw new \InvalidArgumentException('The _SERVER array must have a REQUEST_METHOD key');
}
$r = new Request($method, $url, $headers);
$r->setHttpVersion($httpVersion);
diff --git a/vendor/sabre/http/lib/Version.php b/vendor/sabre/http/lib/Version.php
index 47582f22e..4ac82f6d7 100644
--- a/vendor/sabre/http/lib/Version.php
+++ b/vendor/sabre/http/lib/Version.php
@@ -16,5 +16,5 @@ class Version
/**
* Full version number.
*/
- const VERSION = '5.1.6';
+ public const VERSION = '5.1.12';
}
diff --git a/vendor/sabre/http/lib/functions.php b/vendor/sabre/http/lib/functions.php
index d0477d943..9ecc1758a 100644
--- a/vendor/sabre/http/lib/functions.php
+++ b/vendor/sabre/http/lib/functions.php
@@ -4,9 +4,6 @@ declare(strict_types=1);
namespace Sabre\HTTP;
-use DateTime;
-use InvalidArgumentException;
-
/**
* A collection of useful helpers for parsing or generating various HTTP
* headers.
@@ -29,7 +26,7 @@ use InvalidArgumentException;
* See:
* http://tools.ietf.org/html/rfc7231#section-7.1.1.1
*
- * @return bool|DateTime
+ * @return bool|\DateTime
*/
function parseDate(string $dateString)
{
@@ -65,7 +62,7 @@ function parseDate(string $dateString)
}
try {
- return new DateTime($dateString, new \DateTimeZone('UTC'));
+ return new \DateTime($dateString, new \DateTimeZone('UTC'));
} catch (\Exception $e) {
return false;
}
@@ -74,7 +71,7 @@ function parseDate(string $dateString)
/**
* Transforms a DateTime object to a valid HTTP/1.1 Date header value.
*/
-function toDate(DateTime $dateTime): string
+function toDate(\DateTime $dateTime): string
{
// We need to clone it, as we don't want to affect the existing
// DateTime.
@@ -171,9 +168,9 @@ function negotiateContentType($acceptHeaderValue, array $availableOptions)
// Does this entry win?
if (
- ($proposal['quality'] > $lastQuality) ||
- ($proposal['quality'] === $lastQuality && $specificity > $lastSpecificity) ||
- ($proposal['quality'] === $lastQuality && $specificity === $lastSpecificity && $optionIndex < $lastOptionIndex)
+ ($proposal['quality'] > $lastQuality)
+ || ($proposal['quality'] === $lastQuality && $specificity > $lastSpecificity)
+ || ($proposal['quality'] === $lastQuality && $specificity === $lastSpecificity && $optionIndex < $lastOptionIndex)
) {
$lastQuality = $proposal['quality'];
$lastSpecificity = $specificity;
@@ -331,7 +328,7 @@ function parseMimeType(string $str): array
if (2 !== count($mimeType)) {
// Illegal value
var_dump($mimeType);
- exit();
+ exit;
// throw new InvalidArgumentException('Not a valid mime-type: '.$str);
}
list($type, $subType) = $mimeType;
diff --git a/vendor/sabre/uri/.php-cs-fixer.dist.php b/vendor/sabre/uri/.php-cs-fixer.dist.php
index 87337520b..f9d4b7a8d 100644
--- a/vendor/sabre/uri/.php-cs-fixer.dist.php
+++ b/vendor/sabre/uri/.php-cs-fixer.dist.php
@@ -7,7 +7,11 @@ $finder = PhpCsFixer\Finder::create()
$config = new PhpCsFixer\Config();
$config->setRules([
'@PSR1' => true,
- '@Symfony' => true
+ '@Symfony' => true,
+ 'nullable_type_declaration' => [
+ 'syntax' => 'question_mark',
+ ],
+ 'nullable_type_declaration_for_default_null_value' => true,
]);
$config->setFinder($finder);
return $config; \ No newline at end of file
diff --git a/vendor/sabre/uri/composer.json b/vendor/sabre/uri/composer.json
index 0e0cf2d36..ba4a8e093 100644
--- a/vendor/sabre/uri/composer.json
+++ b/vendor/sabre/uri/composer.json
@@ -37,9 +37,12 @@
}
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.9",
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit" : "^9.0"
+ "friendsofphp/php-cs-fixer": "^3.63",
+ "phpstan/phpstan": "^1.12",
+ "phpstan/phpstan-phpunit": "^1.4",
+ "phpstan/phpstan-strict-rules": "^1.6",
+ "phpstan/extension-installer": "^1.4",
+ "phpunit/phpunit" : "^9.6"
},
"scripts": {
"phpstan": [
@@ -56,5 +59,10 @@
"composer cs-fixer",
"composer phpunit"
]
+ },
+ "config": {
+ "allow-plugins": {
+ "phpstan/extension-installer": true
+ }
}
}
diff --git a/vendor/sabre/uri/lib/Version.php b/vendor/sabre/uri/lib/Version.php
index e4f289e90..c7652f4f2 100644
--- a/vendor/sabre/uri/lib/Version.php
+++ b/vendor/sabre/uri/lib/Version.php
@@ -16,5 +16,5 @@ class Version
/**
* Full version number.
*/
- public const VERSION = '2.3.2';
+ public const VERSION = '2.3.4';
}
diff --git a/vendor/sabre/uri/lib/functions.php b/vendor/sabre/uri/lib/functions.php
index 64e64027f..ce3027e2e 100644
--- a/vendor/sabre/uri/lib/functions.php
+++ b/vendor/sabre/uri/lib/functions.php
@@ -26,15 +26,15 @@ function resolve(string $basePath, string $newPath): string
// If the new path defines a scheme, it's absolute and we can just return
// that.
- if ($delta['scheme']) {
+ if (null !== $delta['scheme']) {
return build($delta);
}
$base = parse($basePath);
$pick = function ($part) use ($base, $delta) {
- if ($delta[$part]) {
+ if (null !== $delta[$part]) {
return $delta[$part];
- } elseif ($base[$part]) {
+ } elseif (null !== $base[$part]) {
return $base[$part];
}
@@ -47,7 +47,6 @@ function resolve(string $basePath, string $newPath): string
$newParts['host'] = $pick('host');
$newParts['port'] = $pick('port');
- $path = '';
if (is_string($delta['path']) and strlen($delta['path']) > 0) {
// If the path starts with a slash
if ('/' === $delta['path'][0]) {
@@ -62,7 +61,10 @@ function resolve(string $basePath, string $newPath): string
$path .= '/'.$delta['path'];
}
} else {
- $path = $base['path'] ?: '/';
+ $path = $base['path'] ?? '/';
+ if ('' === $path) {
+ $path = '/';
+ }
}
// Removing .. and .
$pathParts = explode('/', $path);
@@ -85,13 +87,17 @@ function resolve(string $basePath, string $newPath): string
// If the source url ended with a /, we want to preserve that.
$newParts['path'] = 0 === strpos($path, '/') ? $path : '/'.$path;
- if ($delta['query']) {
+ // From PHP 8, no "?" query at all causes 'query' to be null.
+ // An empty query "http://example.com/foo?" causes 'query' to be the empty string
+ if (null !== $delta['query'] && '' !== $delta['query']) {
$newParts['query'] = $delta['query'];
- } elseif (!empty($base['query']) && empty($delta['host']) && empty($delta['path'])) {
+ } elseif (isset($base['query']) && null === $delta['host'] && null === $delta['path']) {
// Keep the old query if host and path didn't change
$newParts['query'] = $base['query'];
}
- if ($delta['fragment']) {
+ // From PHP 8, no "#" fragment at all causes 'fragment' to be null.
+ // An empty fragment "http://example.com/foo#" causes 'fragment' to be the empty string
+ if (null !== $delta['fragment'] && '' !== $delta['fragment']) {
$newParts['fragment'] = $delta['fragment'];
}
@@ -113,7 +119,7 @@ function normalize(string $uri): string
{
$parts = parse($uri);
- if (!empty($parts['path'])) {
+ if (null !== $parts['path']) {
$pathParts = explode('/', ltrim($parts['path'], '/'));
$newPathParts = [];
foreach ($pathParts as $pathPart) {
@@ -134,14 +140,14 @@ function normalize(string $uri): string
$parts['path'] = '/'.implode('/', $newPathParts);
}
- if ($parts['scheme']) {
+ if (null !== $parts['scheme']) {
$parts['scheme'] = strtolower($parts['scheme']);
$defaultPorts = [
'http' => '80',
'https' => '443',
];
- if (!empty($parts['port']) && isset($defaultPorts[$parts['scheme']]) && $defaultPorts[$parts['scheme']] == $parts['port']) {
+ if (null !== $parts['port'] && isset($defaultPorts[$parts['scheme']]) && $defaultPorts[$parts['scheme']] == $parts['port']) {
// Removing default ports.
unset($parts['port']);
}
@@ -149,7 +155,7 @@ function normalize(string $uri): string
switch ($parts['scheme']) {
case 'http':
case 'https':
- if (empty($parts['path'])) {
+ if (null === $parts['path']) {
// An empty path is equivalent to / in http.
$parts['path'] = '/';
}
@@ -157,7 +163,7 @@ function normalize(string $uri): string
}
}
- if ($parts['host']) {
+ if (null !== $parts['host']) {
$parts['host'] = strtolower($parts['host']);
}
@@ -201,7 +207,7 @@ function parse(string $uri): array
}
$result = parse_url($uri);
- if (!$result) {
+ if (false === $result) {
$result = _parse_fallback($uri);
}
@@ -217,14 +223,14 @@ function parse(string $uri): array
*/
return
$result + [
- 'scheme' => null,
- 'host' => null,
- 'path' => null,
- 'port' => null,
- 'user' => null,
- 'query' => null,
- 'fragment' => null,
- ];
+ 'scheme' => null,
+ 'host' => null,
+ 'path' => null,
+ 'port' => null,
+ 'user' => null,
+ 'query' => null,
+ 'fragment' => null,
+ ];
}
/**
@@ -238,32 +244,32 @@ function build(array $parts): string
$uri = '';
$authority = '';
- if (!empty($parts['host'])) {
+ if (isset($parts['host'])) {
$authority = $parts['host'];
- if (!empty($parts['user'])) {
+ if (isset($parts['user'])) {
$authority = $parts['user'].'@'.$authority;
}
- if (!empty($parts['port'])) {
+ if (isset($parts['port'])) {
$authority = $authority.':'.$parts['port'];
}
}
- if (!empty($parts['scheme'])) {
+ if (isset($parts['scheme'])) {
// If there's a scheme, there's also a host.
$uri = $parts['scheme'].':';
}
- if ($authority || (!empty($parts['scheme']) && 'file' === $parts['scheme'])) {
+ if ('' !== $authority || (isset($parts['scheme']) && 'file' === $parts['scheme'])) {
// No scheme, but there is a host.
$uri .= '//'.$authority;
}
- if (!empty($parts['path'])) {
+ if (isset($parts['path'])) {
$uri .= $parts['path'];
}
- if (!empty($parts['query'])) {
+ if (isset($parts['query'])) {
$uri .= '?'.$parts['query'];
}
- if (!empty($parts['fragment'])) {
+ if (isset($parts['fragment'])) {
$uri .= '#'.$parts['fragment'];
}
@@ -290,7 +296,7 @@ function build(array $parts): string
function split(string $path): array
{
$matches = [];
- if (preg_match('/^(?:(?:(.*)(?:\/+))?([^\/]+))(?:\/?)$/u', $path, $matches)) {
+ if (1 === preg_match('/^(?:(?:(.*)(?:\/+))?([^\/]+))(?:\/?)$/u', $path, $matches)) {
return [$matches[1], $matches[2]];
}
@@ -307,7 +313,7 @@ function split(string $path): array
* This function is only called if the main parse method fails. It's pretty
* crude and probably slow, so the original parse_url is usually preferred.
*
- * @return array<string, mixed>
+ * @return array{scheme: string|null, host: string|null, path: string|null, port: positive-int|null, user: string|null, query: string|null, fragment: string|null}
*
* @throws InvalidUriException
*/
@@ -340,10 +346,14 @@ function _parse_fallback(string $uri): array
'query' => null,
];
- if (preg_match('% ^([A-Za-z][A-Za-z0-9+-\.]+): %x', $uri, $matches)) {
+ if (1 === preg_match('% ^([A-Za-z][A-Za-z0-9+-\.]+): %x', $uri, $matches)) {
$result['scheme'] = $matches[1];
// Take what's left.
$uri = substr($uri, strlen($result['scheme']) + 1);
+ if (false === $uri) {
+ // There was nothing left.
+ $uri = '';
+ }
}
// Taking off a fragment part
@@ -358,7 +368,11 @@ function _parse_fallback(string $uri): array
if ('///' === substr($uri, 0, 3)) {
// The triple slash uris are a bit unusual, but we have special handling
// for them.
- $result['path'] = substr($uri, 2);
+ $path = substr($uri, 2);
+ if (false === $path) {
+ throw new \RuntimeException('The string cannot be false');
+ }
+ $result['path'] = $path;
$result['host'] = '';
} elseif ('//' === substr($uri, 0, 2)) {
// Uris that have an authority part.
@@ -369,22 +383,25 @@ function _parse_fallback(string $uri): array
(?: : (?<port> [0-9]+))?
(?<path> / .*)?
$%x';
- if (!preg_match($regex, $uri, $matches)) {
+ if (1 !== preg_match($regex, $uri, $matches)) {
throw new InvalidUriException('Invalid, or could not parse URI');
}
- if ($matches['host']) {
+ if (isset($matches['host']) && '' !== $matches['host']) {
$result['host'] = $matches['host'];
}
if (isset($matches['port'])) {
- $result['port'] = (int) $matches['port'];
+ $port = (int) $matches['port'];
+ if ($port > 0) {
+ $result['port'] = $port;
+ }
}
if (isset($matches['path'])) {
$result['path'] = $matches['path'];
}
- if ($matches['user']) {
+ if (isset($matches['user']) && '' !== $matches['user']) {
$result['user'] = $matches['user'];
}
- if ($matches['pass']) {
+ if (isset($matches['pass']) && '' !== $matches['pass']) {
$result['pass'] = $matches['pass'];
}
} else {
diff --git a/vendor/sabre/vobject/composer.json b/vendor/sabre/vobject/composer.json
index b08684bce..df0261feb 100644
--- a/vendor/sabre/vobject/composer.json
+++ b/vendor/sabre/vobject/composer.json
@@ -38,9 +38,9 @@
},
"require-dev" : {
"friendsofphp/php-cs-fixer": "~2.17.1",
- "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0",
+ "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.6",
"phpunit/php-invoker" : "^2.0 || ^3.1",
- "phpstan/phpstan": "^0.12"
+ "phpstan/phpstan": "^0.12 || ^1.11"
},
"suggest" : {
"hoa/bench" : "If you would like to run the benchmark scripts"
diff --git a/vendor/sabre/vobject/lib/Component/VCalendar.php b/vendor/sabre/vobject/lib/Component/VCalendar.php
index 4db318135..017aed70c 100644
--- a/vendor/sabre/vobject/lib/Component/VCalendar.php
+++ b/vendor/sabre/vobject/lib/Component/VCalendar.php
@@ -281,7 +281,7 @@ class VCalendar extends VObject\Document
*
* @return VCalendar
*/
- public function expand(DateTimeInterface $start, DateTimeInterface $end, DateTimeZone $timeZone = null)
+ public function expand(DateTimeInterface $start, DateTimeInterface $end, ?DateTimeZone $timeZone = null)
{
$newChildren = [];
$recurringEvents = [];
diff --git a/vendor/sabre/vobject/lib/DateTimeParser.php b/vendor/sabre/vobject/lib/DateTimeParser.php
index c5dbac97d..69072ef8c 100644
--- a/vendor/sabre/vobject/lib/DateTimeParser.php
+++ b/vendor/sabre/vobject/lib/DateTimeParser.php
@@ -31,7 +31,7 @@ class DateTimeParser
*
* @return DateTimeImmutable
*/
- public static function parseDateTime($dt, DateTimeZone $tz = null)
+ public static function parseDateTime($dt, ?DateTimeZone $tz = null)
{
// Format is YYYYMMDD + "T" + hhmmss
$result = preg_match('/^([0-9]{4})([0-1][0-9])([0-3][0-9])T([0-2][0-9])([0-5][0-9])([0-5][0-9])([Z]?)$/', $dt, $matches);
@@ -61,7 +61,7 @@ class DateTimeParser
*
* @return DateTimeImmutable
*/
- public static function parseDate($date, DateTimeZone $tz = null)
+ public static function parseDate($date, ?DateTimeZone $tz = null)
{
// Format is YYYYMMDD
$result = preg_match('/^([0-9]{4})([0-1][0-9])([0-3][0-9])$/', $date, $matches);
diff --git a/vendor/sabre/vobject/lib/Document.php b/vendor/sabre/vobject/lib/Document.php
index 14a77c911..d2131f479 100644
--- a/vendor/sabre/vobject/lib/Document.php
+++ b/vendor/sabre/vobject/lib/Document.php
@@ -157,7 +157,7 @@ abstract class Document extends Component
*
* @return Component
*/
- public function createComponent($name, array $children = null, $defaults = true)
+ public function createComponent($name, ?array $children = null, $defaults = true)
{
$name = strtoupper($name);
$class = Component::class;
@@ -186,10 +186,8 @@ abstract class Document extends Component
* @param mixed $value
* @param array $parameters
* @param string $valueType Force a specific valuetype, such as URI or TEXT
- *
- * @return Property
*/
- public function createProperty($name, $value = null, array $parameters = null, $valueType = null)
+ public function createProperty($name, $value = null, ?array $parameters = null, $valueType = null, ?int $lineIndex = null, ?string $lineString = null): Property
{
// If there's a . in the name, it means it's prefixed by a groupname.
if (false !== ($i = strpos($name, '.'))) {
@@ -223,7 +221,7 @@ abstract class Document extends Component
$parameters = [];
}
- return new $class($this, $name, $value, $parameters, $group);
+ return new $class($this, $name, $value, $parameters, $group, $lineIndex, $lineString);
}
/**
diff --git a/vendor/sabre/vobject/lib/FreeBusyGenerator.php b/vendor/sabre/vobject/lib/FreeBusyGenerator.php
index 81b8126d5..56ae166fa 100644
--- a/vendor/sabre/vobject/lib/FreeBusyGenerator.php
+++ b/vendor/sabre/vobject/lib/FreeBusyGenerator.php
@@ -89,7 +89,7 @@ class FreeBusyGenerator
* @param mixed $objects
* @param DateTimeZone $timeZone
*/
- public function __construct(DateTimeInterface $start = null, DateTimeInterface $end = null, $objects = null, DateTimeZone $timeZone = null)
+ public function __construct(?DateTimeInterface $start = null, ?DateTimeInterface $end = null, $objects = null, ?DateTimeZone $timeZone = null)
{
$this->setTimeRange($start, $end);
@@ -158,7 +158,7 @@ class FreeBusyGenerator
* @param DateTimeInterface $start
* @param DateTimeInterface $end
*/
- public function setTimeRange(DateTimeInterface $start = null, DateTimeInterface $end = null)
+ public function setTimeRange(?DateTimeInterface $start = null, ?DateTimeInterface $end = null)
{
if (!$start) {
$start = new DateTimeImmutable(Settings::$minDate);
diff --git a/vendor/sabre/vobject/lib/ITip/Broker.php b/vendor/sabre/vobject/lib/ITip/Broker.php
index 80d9a5b31..9d68fc4c6 100644
--- a/vendor/sabre/vobject/lib/ITip/Broker.php
+++ b/vendor/sabre/vobject/lib/ITip/Broker.php
@@ -108,7 +108,7 @@ class Broker
*
* @return VCalendar|null
*/
- public function processMessage(Message $itipMessage, VCalendar $existingObject = null)
+ public function processMessage(Message $itipMessage, ?VCalendar $existingObject = null)
{
// We only support events at the moment.
if ('VEVENT' !== $itipMessage->component) {
@@ -266,7 +266,7 @@ class Broker
*
* @return VCalendar|null
*/
- protected function processMessageRequest(Message $itipMessage, VCalendar $existingObject = null)
+ protected function processMessageRequest(Message $itipMessage, ?VCalendar $existingObject = null)
{
if (!$existingObject) {
// This is a new invite, and we're just going to copy over
@@ -301,7 +301,7 @@ class Broker
*
* @return VCalendar|null
*/
- protected function processMessageCancel(Message $itipMessage, VCalendar $existingObject = null)
+ protected function processMessageCancel(Message $itipMessage, ?VCalendar $existingObject = null)
{
if (!$existingObject) {
// The event didn't exist in the first place, so we're just
@@ -326,7 +326,7 @@ class Broker
*
* @return VCalendar|null
*/
- protected function processMessageReply(Message $itipMessage, VCalendar $existingObject = null)
+ protected function processMessageReply(Message $itipMessage, ?VCalendar $existingObject = null)
{
// A reply can only be processed based on an existing object.
// If the object is not available, the reply is ignored.
@@ -338,7 +338,10 @@ class Broker
// Finding all the instances the attendee replied to.
foreach ($itipMessage->message->VEVENT as $vevent) {
- $recurId = isset($vevent->{'RECURRENCE-ID'}) ? $vevent->{'RECURRENCE-ID'}->getValue() : 'master';
+ // Use the Unix timestamp returned by getTimestamp as a unique identifier for the recurrence.
+ // The Unix timestamp will be the same for an event, even if the reply from the attendee
+ // used a different format/timezone to express the event date-time.
+ $recurId = isset($vevent->{'RECURRENCE-ID'}) ? $vevent->{'RECURRENCE-ID'}->getDateTime()->getTimestamp() : 'master';
$attendee = $vevent->ATTENDEE;
$instances[$recurId] = $attendee['PARTSTAT']->getValue();
if (isset($vevent->{'REQUEST-STATUS'})) {
@@ -351,7 +354,8 @@ class Broker
// all the instances where we have a reply for.
$masterObject = null;
foreach ($existingObject->VEVENT as $vevent) {
- $recurId = isset($vevent->{'RECURRENCE-ID'}) ? $vevent->{'RECURRENCE-ID'}->getValue() : 'master';
+ // Use the Unix timestamp returned by getTimestamp as a unique identifier for the recurrence.
+ $recurId = isset($vevent->{'RECURRENCE-ID'}) ? $vevent->{'RECURRENCE-ID'}->getDateTime()->getTimestamp() : 'master';
if ('master' === $recurId) {
$masterObject = $vevent;
}
@@ -398,7 +402,10 @@ class Broker
$newObject = $recurrenceIterator->getEventObject();
$recurrenceIterator->next();
- if (isset($newObject->{'RECURRENCE-ID'}) && $newObject->{'RECURRENCE-ID'}->getValue() === $recurId) {
+ // Compare the Unix timestamp returned by getTimestamp with the previously calculated timestamp.
+ // If they are the same, then this is a matching recurrence, even though its date-time may have
+ // been expressed in a different format/timezone.
+ if (isset($newObject->{'RECURRENCE-ID'}) && $newObject->{'RECURRENCE-ID'}->getDateTime()->getTimestamp() === $recurId) {
$found = true;
}
--$iterations;
@@ -503,10 +510,11 @@ class Broker
$icalMsg->add(clone $timezone);
}
- if (!$attendee['newInstances']) {
- // If there are no instances the attendee is a part of, it
- // means the attendee was removed and we need to send him a
- // CANCEL.
+ if (!$attendee['newInstances'] || 'CANCELLED' === $eventInfo['status']) {
+ // If there are no instances the attendee is a part of, it means
+ // the attendee was removed and we need to send them a CANCEL message.
+ // Also If the meeting STATUS property was changed to CANCELLED
+ // we need to send the attendee a CANCEL message.
$message->method = 'CANCEL';
$icalMsg->METHOD = $message->method;
@@ -800,7 +808,7 @@ class Broker
*
* @return array
*/
- protected function parseEventInfo(VCalendar $calendar = null)
+ protected function parseEventInfo(?VCalendar $calendar = null)
{
$uid = null;
$organizer = null;
diff --git a/vendor/sabre/vobject/lib/Parser/MimeDir.php b/vendor/sabre/vobject/lib/Parser/MimeDir.php
index 513f7bd0c..d484d6a39 100644
--- a/vendor/sabre/vobject/lib/Parser/MimeDir.php
+++ b/vendor/sabre/vobject/lib/Parser/MimeDir.php
@@ -83,6 +83,12 @@ class MimeDir extends Parser
$this->setInput($input);
}
+ if (!\is_resource($this->input)) {
+ // Null was passed as input, but there was no existing input buffer
+ // There is nothing to parse.
+ throw new ParseException('No input provided to parse');
+ }
+
if (0 !== $options) {
$this->options = $options;
}
@@ -447,7 +453,7 @@ class MimeDir extends Parser
}
}
- $propObj = $this->root->createProperty($property['name'], null, $namedParameters);
+ $propObj = $this->root->createProperty($property['name'], null, $namedParameters, null, $this->startLine, $line);
foreach ($namelessParameters as $namelessParameter) {
$propObj->add(null, $namelessParameter);
diff --git a/vendor/sabre/vobject/lib/Property.php b/vendor/sabre/vobject/lib/Property.php
index f6550246a..f52760f9c 100644
--- a/vendor/sabre/vobject/lib/Property.php
+++ b/vendor/sabre/vobject/lib/Property.php
@@ -57,6 +57,20 @@ abstract class Property extends Node
public $delimiter = ';';
/**
+ * The line number in the original iCalendar / vCard file
+ * that corresponds with the current node
+ * if the node was read from a file.
+ */
+ public $lineIndex;
+
+ /**
+ * The line string from the original iCalendar / vCard file
+ * that corresponds with the current node
+ * if the node was read from a file.
+ */
+ public $lineString;
+
+ /**
* Creates the generic property.
*
* Parameters must be specified in key=>value syntax.
@@ -67,7 +81,7 @@ abstract class Property extends Node
* @param array $parameters List of parameters
* @param string $group The vcard property group
*/
- public function __construct(Component $root, $name, $value = null, array $parameters = [], $group = null)
+ public function __construct(Component $root, $name, $value = null, array $parameters = [], $group = null, ?int $lineIndex = null, ?string $lineString = null)
{
$this->name = $name;
$this->group = $group;
@@ -81,6 +95,14 @@ abstract class Property extends Node
if (!is_null($value)) {
$this->setValue($value);
}
+
+ if (!is_null($lineIndex)) {
+ $this->lineIndex = $lineIndex;
+ }
+
+ if (!is_null($lineString)) {
+ $this->lineString = $lineString;
+ }
}
/**
diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php b/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php
index ca71633b9..3ea21e2ec 100644
--- a/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php
+++ b/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php
@@ -131,7 +131,7 @@ class DateTime extends Property
*
* @return \DateTimeImmutable
*/
- public function getDateTime(DateTimeZone $timeZone = null)
+ public function getDateTime(?DateTimeZone $timeZone = null)
{
$dt = $this->getDateTimes($timeZone);
if (!$dt) {
@@ -153,7 +153,7 @@ class DateTime extends Property
* @return \DateTimeImmutable[]
* @return \DateTime[]
*/
- public function getDateTimes(DateTimeZone $timeZone = null)
+ public function getDateTimes(?DateTimeZone $timeZone = null)
{
// Does the property have a TZID?
$tzid = $this['TZID'];
diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/Recur.php b/vendor/sabre/vobject/lib/Property/ICalendar/Recur.php
index 3d632fec1..cd3d7a5e4 100644
--- a/vendor/sabre/vobject/lib/Property/ICalendar/Recur.php
+++ b/vendor/sabre/vobject/lib/Property/ICalendar/Recur.php
@@ -2,6 +2,7 @@
namespace Sabre\VObject\Property\ICalendar;
+use Sabre\VObject\InvalidDataException;
use Sabre\VObject\Property;
use Sabre\Xml;
@@ -198,7 +199,14 @@ class Recur extends Property
if (empty($part)) {
continue;
}
- list($partName, $partValue) = explode('=', $part);
+
+ $parts = explode('=', $part);
+
+ if (2 !== count($parts)) {
+ throw new InvalidDataException('The supplied iCalendar RRULE part is incorrect: '.$part);
+ }
+
+ list($partName, $partValue) = $parts;
// The value itself had multiple values..
if (false !== strpos($partValue, ',')) {
diff --git a/vendor/sabre/vobject/lib/Recur/EventIterator.php b/vendor/sabre/vobject/lib/Recur/EventIterator.php
index 61f05d7de..55d6e4779 100644
--- a/vendor/sabre/vobject/lib/Recur/EventIterator.php
+++ b/vendor/sabre/vobject/lib/Recur/EventIterator.php
@@ -93,7 +93,7 @@ class EventIterator implements \Iterator
* @param DateTimeZone $timeZone reference timezone for floating dates and
* times
*/
- public function __construct($input, $uid = null, DateTimeZone $timeZone = null)
+ public function __construct($input, $uid = null, ?DateTimeZone $timeZone = null)
{
if (is_null($timeZone)) {
$timeZone = new DateTimeZone('UTC');
diff --git a/vendor/sabre/vobject/lib/Recur/RRuleIterator.php b/vendor/sabre/vobject/lib/Recur/RRuleIterator.php
index 4f0e9070d..ca53b63ee 100644
--- a/vendor/sabre/vobject/lib/Recur/RRuleIterator.php
+++ b/vendor/sabre/vobject/lib/Recur/RRuleIterator.php
@@ -173,6 +173,14 @@ class RRuleIterator implements Iterator
protected $currentDate;
/**
+ * The number of hours that the next occurrence of an event
+ * jumped forward, usually because summer time started and
+ * the requested time-of-day like 0230 did not exist on that
+ * day. And so the event was scheduled 1 hour later at 0330.
+ */
+ protected $hourJump = 0;
+
+ /**
* Frequency is one of: secondly, minutely, hourly, daily, weekly, monthly,
* yearly.
*
@@ -320,11 +328,64 @@ class RRuleIterator implements Iterator
/* Functions that advance the iterator {{{ */
/**
+ * Gets the original start time of the RRULE.
+ *
+ * The value is formatted as a string with 24-hour:minute:second
+ */
+ protected function startTime(): string
+ {
+ return $this->startDate->format('H:i:s');
+ }
+
+ /**
+ * Advances currentDate by the interval.
+ * The time is set from the original startDate.
+ * If the recurrence is on a day when summer time started, then the
+ * time on that day may have jumped forward, for example, from 0230 to 0330.
+ * Using the original time means that the next recurrence will be calculated
+ * based on the original start time and the day/week/month/year interval.
+ * So the start time of the next occurrence can correctly revert to 0230.
+ */
+ protected function advanceTheDate(string $interval): void
+ {
+ $this->currentDate = $this->currentDate->modify($interval.' '.$this->startTime());
+ }
+
+ /**
+ * Does the processing for adjusting the time of multi-hourly events when summer time starts.
+ */
+ protected function adjustForTimeJumpsOfHourlyEvent(DateTimeInterface $previousEventDateTime): void
+ {
+ if (0 === $this->hourJump) {
+ // Remember if the clock time jumped forward on the next occurrence.
+ // That happens if the next event time is on a day when summer time starts
+ // and the event time is in the non-existent hour of the day.
+ // For example, an event that normally starts at 02:30 will
+ // have to start at 03:30 on that day.
+ // If the interval is just 1 hour, then there is no "jumping back" to do.
+ // The events that day will happen, for example, at 0030 0130 0330 0430 0530...
+ if ($this->interval > 1) {
+ $expectedHourOfNextDate = ((int) $previousEventDateTime->format('G') + $this->interval) % 24;
+ $actualHourOfNextDate = (int) $this->currentDate->format('G');
+ $this->hourJump = $actualHourOfNextDate - $expectedHourOfNextDate;
+ }
+ } else {
+ // The hour "jumped" for the previous occurrence, to avoid the non-existent time.
+ // currentDate got set ahead by (usually) 1 hour on that day.
+ // Adjust it back for this next occurrence.
+ $this->currentDate = $this->currentDate->sub(new \DateInterval('PT'.$this->hourJump.'H'));
+ $this->hourJump = 0;
+ }
+ }
+
+ /**
* Does the processing for advancing the iterator for hourly frequency.
*/
protected function nextHourly()
{
+ $previousEventDateTime = clone $this->currentDate;
$this->currentDate = $this->currentDate->modify('+'.$this->interval.' hours');
+ $this->adjustForTimeJumpsOfHourlyEvent($previousEventDateTime);
}
/**
@@ -333,7 +394,7 @@ class RRuleIterator implements Iterator
protected function nextDaily()
{
if (!$this->byHour && !$this->byDay) {
- $this->currentDate = $this->currentDate->modify('+'.$this->interval.' days');
+ $this->advanceTheDate('+'.$this->interval.' days');
return;
}
@@ -392,7 +453,7 @@ class RRuleIterator implements Iterator
protected function nextWeekly()
{
if (!$this->byHour && !$this->byDay) {
- $this->currentDate = $this->currentDate->modify('+'.$this->interval.' weeks');
+ $this->advanceTheDate('+'.$this->interval.' weeks');
return;
}
@@ -414,7 +475,7 @@ class RRuleIterator implements Iterator
if ($this->byHour) {
$this->currentDate = $this->currentDate->modify('+1 hours');
} else {
- $this->currentDate = $this->currentDate->modify('+1 days');
+ $this->advanceTheDate('+1 days');
}
// Current day of the week
@@ -449,13 +510,13 @@ class RRuleIterator implements Iterator
// occur to the next month. We Must skip these invalid
// entries.
if ($currentDayOfMonth < 29) {
- $this->currentDate = $this->currentDate->modify('+'.$this->interval.' months');
+ $this->advanceTheDate('+'.$this->interval.' months');
} else {
$increase = 0;
do {
++$increase;
$tempDate = clone $this->currentDate;
- $tempDate = $tempDate->modify('+ '.($this->interval * $increase).' months');
+ $tempDate = $tempDate->modify('+ '.($this->interval * $increase).' months '.$this->startTime());
} while ($tempDate->format('j') != $currentDayOfMonth);
$this->currentDate = $tempDate;
}
@@ -506,11 +567,15 @@ class RRuleIterator implements Iterator
}
}
+ // Set the currentDate to the year and month that we are in, and the day of the month that we have selected.
+ // That day could be a day when summer time starts, and if the time of the event is, for example, 0230,
+ // then 0230 will not be a valid time on that day. So always apply the start time from the original startDate.
+ // The "modify" method will set the time forward to 0330, for example, if needed.
$this->currentDate = $this->currentDate->setDate(
(int) $this->currentDate->format('Y'),
(int) $this->currentDate->format('n'),
(int) $occurrence
- );
+ )->modify($this->startTime());
}
/**
@@ -627,7 +692,7 @@ class RRuleIterator implements Iterator
}
// The easiest form
- $this->currentDate = $this->currentDate->modify('+'.$this->interval.' years');
+ $this->advanceTheDate('+'.$this->interval.' years');
return;
}
@@ -651,7 +716,11 @@ class RRuleIterator implements Iterator
// If we advanced to the next month or year, the first
// occurrence is always correct.
if ($occurrence > $currentDayOfMonth || $advancedToNewMonth) {
- break 2;
+ // only consider byMonth matches,
+ // otherwise, we don't follow RRule correctly
+ if (in_array($currentMonth, $this->byMonth)) {
+ break 2;
+ }
}
}
@@ -687,7 +756,7 @@ class RRuleIterator implements Iterator
(int) $currentYear,
(int) $currentMonth,
(int) $occurrence
- );
+ )->modify($this->startTime());
return;
} else {
@@ -704,7 +773,7 @@ class RRuleIterator implements Iterator
(int) $currentYear,
(int) $currentMonth,
(int) $currentDayOfMonth
- );
+ )->modify($this->startTime());
return;
}
diff --git a/vendor/sabre/vobject/lib/TimeZoneUtil.php b/vendor/sabre/vobject/lib/TimeZoneUtil.php
index 6422c0930..0d77e71ed 100644
--- a/vendor/sabre/vobject/lib/TimeZoneUtil.php
+++ b/vendor/sabre/vobject/lib/TimeZoneUtil.php
@@ -75,7 +75,7 @@ class TimeZoneUtil
* Alternatively, if $failIfUncertain is set to true, it will throw an
* exception if we cannot accurately determine the timezone.
*/
- private function findTimeZone(string $tzid, Component $vcalendar = null, bool $failIfUncertain = false): DateTimeZone
+ private function findTimeZone(string $tzid, ?Component $vcalendar = null, bool $failIfUncertain = false): DateTimeZone
{
foreach ($this->timezoneFinders as $timezoneFinder) {
$timezone = $timezoneFinder->find($tzid, $failIfUncertain);
@@ -126,7 +126,7 @@ class TimeZoneUtil
*
* @return DateTimeZone
*/
- public static function getTimeZone($tzid, Component $vcalendar = null, $failIfUncertain = false)
+ public static function getTimeZone($tzid, ?Component $vcalendar = null, $failIfUncertain = false)
{
return self::getInstance()->findTimeZone($tzid, $vcalendar, $failIfUncertain);
}
diff --git a/vendor/sabre/vobject/lib/Version.php b/vendor/sabre/vobject/lib/Version.php
index c7ca69e14..060c69a30 100644
--- a/vendor/sabre/vobject/lib/Version.php
+++ b/vendor/sabre/vobject/lib/Version.php
@@ -14,5 +14,5 @@ class Version
/**
* Full version number.
*/
- public const VERSION = '4.5.4';
+ public const VERSION = '4.5.6';
}
diff --git a/vendor/sabre/xml/.github/workflows/ci.yml b/vendor/sabre/xml/.github/workflows/ci.yml
index 3473cd2de..5775abaf8 100644
--- a/vendor/sabre/xml/.github/workflows/ci.yml
+++ b/vendor/sabre/xml/.github/workflows/ci.yml
@@ -12,16 +12,22 @@ jobs:
strategy:
fail-fast: false
matrix:
- php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1']
+ php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
coverage: ['pcov']
+ code-style: ['yes']
code-analysis: ['no']
include:
- php-versions: '7.1'
coverage: 'none'
+ code-style: 'yes'
+ code-analysis: 'yes'
+ - php-versions: '8.4'
+ coverage: 'pcov'
+ code-style: 'yes'
code-analysis: 'yes'
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
@@ -36,7 +42,7 @@ jobs:
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache composer dependencies
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
# Use composer.json for key, if composer.lock is not committed.
@@ -48,8 +54,8 @@ jobs:
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: Code Analysis (PHP CS-Fixer)
- if: matrix.code-analysis == 'yes'
- run: php vendor/bin/php-cs-fixer fix --dry-run --diff
+ if: matrix.code-style == 'yes'
+ run: PHP_CS_FIXER_IGNORE_ENV=true php vendor/bin/php-cs-fixer fix --dry-run --diff
- name: Code Analysis (PHPStan)
if: matrix.code-analysis == 'yes'
@@ -59,5 +65,5 @@ jobs:
run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml
- name: Code Coverage
- uses: codecov/codecov-action@v2
+ uses: codecov/codecov-action@v3
if: matrix.coverage != 'none'
diff --git a/vendor/sabre/xml/.php-cs-fixer.dist.php b/vendor/sabre/xml/.php-cs-fixer.dist.php
new file mode 100644
index 000000000..f9d4b7a8d
--- /dev/null
+++ b/vendor/sabre/xml/.php-cs-fixer.dist.php
@@ -0,0 +1,17 @@
+<?php
+
+$finder = PhpCsFixer\Finder::create()
+ ->exclude('vendor')
+ ->in(__DIR__);
+
+$config = new PhpCsFixer\Config();
+$config->setRules([
+ '@PSR1' => true,
+ '@Symfony' => true,
+ 'nullable_type_declaration' => [
+ 'syntax' => 'question_mark',
+ ],
+ 'nullable_type_declaration_for_default_null_value' => true,
+]);
+$config->setFinder($finder);
+return $config; \ No newline at end of file
diff --git a/vendor/sabre/xml/composer.json b/vendor/sabre/xml/composer.json
index 4524cf59b..d7577c2cf 100644
--- a/vendor/sabre/xml/composer.json
+++ b/vendor/sabre/xml/composer.json
@@ -44,16 +44,16 @@
}
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2.17.1",
+ "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2",
"phpstan/phpstan": "^0.12",
- "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0"
+ "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.6"
},
"scripts": {
"phpstan": [
"phpstan analyse lib tests"
],
"cs-fixer": [
- "php-cs-fixer fix"
+ "PHP_CS_FIXER_IGNORE_ENV=true php-cs-fixer fix"
],
"phpunit": [
"phpunit --configuration tests/phpunit.xml"
diff --git a/vendor/sabre/xml/lib/Deserializer/functions.php b/vendor/sabre/xml/lib/Deserializer/functions.php
index c4f240970..50818098b 100644
--- a/vendor/sabre/xml/lib/Deserializer/functions.php
+++ b/vendor/sabre/xml/lib/Deserializer/functions.php
@@ -55,7 +55,7 @@ use Sabre\Xml\Reader;
* Attributes will be removed from the top-level elements. If elements with
* the same name appear twice in the list, only the last one will be kept.
*/
-function keyValue(Reader $reader, string $namespace = null): array
+function keyValue(Reader $reader, ?string $namespace = null): array
{
// If there's no children, we don't do anything.
if ($reader->isEmptyElement) {
@@ -144,7 +144,7 @@ function keyValue(Reader $reader, string $namespace = null): array
*
* @return string[]
*/
-function enum(Reader $reader, string $namespace = null): array
+function enum(Reader $reader, ?string $namespace = null): array
{
// If there's no children, we don't do anything.
if ($reader->isEmptyElement) {
@@ -215,8 +215,11 @@ function valueObject(Reader $reader, string $className, string $namespace)
// Ignore property
$reader->next();
}
+ } elseif (Reader::ELEMENT === $reader->nodeType) {
+ // Skipping element from different namespace
+ $reader->next();
} else {
- if (!$reader->read()) {
+ if (Reader::END_ELEMENT !== $reader->nodeType && !$reader->read()) {
break;
}
}
@@ -322,8 +325,6 @@ function mixedContent(Reader $reader): array
*
* You can use, e.g., a named constructor (factory method) to create an object using
* this function.
- *
- * @return mixed
*/
function functionCaller(Reader $reader, callable $func, string $namespace)
{
diff --git a/vendor/sabre/xml/lib/Element/Base.php b/vendor/sabre/xml/lib/Element/Base.php
index 8a93191b1..02fd76966 100644
--- a/vendor/sabre/xml/lib/Element/Base.php
+++ b/vendor/sabre/xml/lib/Element/Base.php
@@ -21,8 +21,6 @@ class Base implements Xml\Element
{
/**
* PHP value to serialize.
- *
- * @var mixed
*/
protected $value;
@@ -72,8 +70,6 @@ class Base implements Xml\Element
*
* $reader->parseInnerTree() will parse the entire sub-tree, and advance to
* the next element.
- *
- * @return mixed
*/
public static function xmlDeserialize(Xml\Reader $reader)
{
diff --git a/vendor/sabre/xml/lib/Element/Elements.php b/vendor/sabre/xml/lib/Element/Elements.php
index fecce4c75..6915fd462 100644
--- a/vendor/sabre/xml/lib/Element/Elements.php
+++ b/vendor/sabre/xml/lib/Element/Elements.php
@@ -90,8 +90,6 @@ class Elements implements Xml\Element
*
* $reader->parseSubTree() will parse the entire sub-tree, and advance to
* the next element.
- *
- * @return mixed
*/
public static function xmlDeserialize(Xml\Reader $reader)
{
diff --git a/vendor/sabre/xml/lib/Element/KeyValue.php b/vendor/sabre/xml/lib/Element/KeyValue.php
index 17448880d..7d75a3ac8 100644
--- a/vendor/sabre/xml/lib/Element/KeyValue.php
+++ b/vendor/sabre/xml/lib/Element/KeyValue.php
@@ -90,8 +90,6 @@ class KeyValue implements Xml\Element
*
* $reader->parseInnerTree() will parse the entire sub-tree, and advance to
* the next element.
- *
- * @return mixed
*/
public static function xmlDeserialize(Xml\Reader $reader)
{
diff --git a/vendor/sabre/xml/lib/Element/Uri.php b/vendor/sabre/xml/lib/Element/Uri.php
index 336212a53..65276380e 100644
--- a/vendor/sabre/xml/lib/Element/Uri.php
+++ b/vendor/sabre/xml/lib/Element/Uri.php
@@ -84,8 +84,6 @@ class Uri implements Xml\Element
*
* $reader->parseSubTree() will parse the entire sub-tree, and advance to
* the next element.
- *
- * @return mixed
*/
public static function xmlDeserialize(Xml\Reader $reader)
{
diff --git a/vendor/sabre/xml/lib/Element/XmlFragment.php b/vendor/sabre/xml/lib/Element/XmlFragment.php
index bf110eaee..99d1f87f9 100644
--- a/vendor/sabre/xml/lib/Element/XmlFragment.php
+++ b/vendor/sabre/xml/lib/Element/XmlFragment.php
@@ -135,8 +135,6 @@ XML;
*
* $reader->parseInnerTree() will parse the entire sub-tree, and advance to
* the next element.
- *
- * @return mixed
*/
public static function xmlDeserialize(Reader $reader)
{
diff --git a/vendor/sabre/xml/lib/LibXMLException.php b/vendor/sabre/xml/lib/LibXMLException.php
index fb074f97d..993f95fd9 100644
--- a/vendor/sabre/xml/lib/LibXMLException.php
+++ b/vendor/sabre/xml/lib/LibXMLException.php
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Sabre\Xml;
use LibXMLError;
-use Throwable;
/**
* This exception is thrown when the Reader runs into a parsing error.
@@ -30,10 +29,9 @@ class LibXMLException extends ParseException
*
* You should pass a list of LibXMLError objects in its constructor.
*
- * @param LibXMLError[] $errors
- * @param Throwable $previousException
+ * @param \LibXMLError[] $errors
*/
- public function __construct(array $errors, int $code = 0, Throwable $previousException = null)
+ public function __construct(array $errors, int $code = 0, ?\Throwable $previousException = null)
{
$this->errors = $errors;
parent::__construct($errors[0]->message.' on line '.$errors[0]->line.', column '.$errors[0]->column, $code, $previousException);
diff --git a/vendor/sabre/xml/lib/ParseException.php b/vendor/sabre/xml/lib/ParseException.php
index e237b8732..158cf0119 100644
--- a/vendor/sabre/xml/lib/ParseException.php
+++ b/vendor/sabre/xml/lib/ParseException.php
@@ -13,6 +13,6 @@ use Exception;
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
-class ParseException extends Exception
+class ParseException extends \Exception
{
}
diff --git a/vendor/sabre/xml/lib/Reader.php b/vendor/sabre/xml/lib/Reader.php
index 7871a74f5..f680bf4cd 100644
--- a/vendor/sabre/xml/lib/Reader.php
+++ b/vendor/sabre/xml/lib/Reader.php
@@ -19,7 +19,7 @@ use XMLReader;
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
-class Reader extends XMLReader
+class Reader extends \XMLReader
{
use ContextStackTrait;
@@ -103,7 +103,7 @@ class Reader extends XMLReader
* If the $elementMap argument is specified, the existing elementMap will
* be overridden while parsing the tree, and restored after this process.
*/
- public function parseGetElements(array $elementMap = null): array
+ public function parseGetElements(?array $elementMap = null): array
{
$result = $this->parseInnerTree($elementMap);
if (!is_array($result)) {
@@ -126,7 +126,7 @@ class Reader extends XMLReader
*
* @return array|string|null
*/
- public function parseInnerTree(array $elementMap = null)
+ public function parseInnerTree(?array $elementMap = null)
{
$text = null;
$elements = [];
@@ -205,7 +205,7 @@ class Reader extends XMLReader
$previousDepth = $this->depth;
while ($this->read() && $this->depth != $previousDepth) {
- if (in_array($this->nodeType, [XMLReader::TEXT, XMLReader::CDATA, XMLReader::WHITESPACE])) {
+ if (in_array($this->nodeType, [\XMLReader::TEXT, \XMLReader::CDATA, \XMLReader::WHITESPACE])) {
$result .= $this->value;
}
}
diff --git a/vendor/sabre/xml/lib/Serializer/functions.php b/vendor/sabre/xml/lib/Serializer/functions.php
index 8d0330558..23f22d4c8 100644
--- a/vendor/sabre/xml/lib/Serializer/functions.php
+++ b/vendor/sabre/xml/lib/Serializer/functions.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace Sabre\Xml\Serializer;
-use InvalidArgumentException;
use Sabre\Xml\Writer;
use Sabre\Xml\XmlSerializable;
@@ -197,12 +196,12 @@ function standardSerializer(Writer $writer, $value)
$writer->write($item);
$writer->endElement();
} else {
- throw new InvalidArgumentException('The writer does not know how to serialize arrays with keys of type: '.gettype($name));
+ throw new \InvalidArgumentException('The writer does not know how to serialize arrays with keys of type: '.gettype($name));
}
}
} elseif (is_object($value)) {
- throw new InvalidArgumentException('The writer cannot serialize objects of class: '.get_class($value));
+ throw new \InvalidArgumentException('The writer cannot serialize objects of class: '.get_class($value));
} elseif (!is_null($value)) {
- throw new InvalidArgumentException('The writer cannot serialize values of type: '.gettype($value));
+ throw new \InvalidArgumentException('The writer cannot serialize values of type: '.gettype($value));
}
}
diff --git a/vendor/sabre/xml/lib/Service.php b/vendor/sabre/xml/lib/Service.php
index a8e34d254..6e522630e 100644
--- a/vendor/sabre/xml/lib/Service.php
+++ b/vendor/sabre/xml/lib/Service.php
@@ -105,16 +105,23 @@ class Service
*
* @param string|resource $input
*
- * @throws ParseException
- *
* @return array|object|string
+ *
+ * @throws ParseException
*/
- public function parse($input, string $contextUri = null, string &$rootElementName = null)
+ public function parse($input, ?string $contextUri = null, ?string &$rootElementName = null)
{
- if (is_resource($input)) {
+ if (!is_string($input)) {
// Unfortunately the XMLReader doesn't support streams. When it
// does, we can optimize this.
- $input = (string) stream_get_contents($input);
+ if (is_resource($input)) {
+ $input = (string) stream_get_contents($input);
+ } else {
+ // Input is not a string and not a resource.
+ // Therefore, it has to be a closed resource.
+ // Effectively empty input has been passed in.
+ $input = '';
+ }
}
// If input is empty, then it's safe to throw an exception
@@ -149,16 +156,23 @@ class Service
* @param string|string[] $rootElementName
* @param string|resource $input
*
- * @throws ParseException
- *
* @return array|object|string
+ *
+ * @throws ParseException
*/
- public function expect($rootElementName, $input, string $contextUri = null)
+ public function expect($rootElementName, $input, ?string $contextUri = null)
{
- if (is_resource($input)) {
+ if (!is_string($input)) {
// Unfortunately the XMLReader doesn't support streams. When it
// does, we can optimize this.
- $input = (string) stream_get_contents($input);
+ if (is_resource($input)) {
+ $input = (string) stream_get_contents($input);
+ } else {
+ // Input is not a string and not a resource.
+ // Therefore, it has to be a closed resource.
+ // Effectively empty input has been passed in.
+ $input = '';
+ }
}
// If input is empty, then it's safe to throw an exception
@@ -204,7 +218,7 @@ class Service
*
* @return string
*/
- public function write(string $rootElementName, $value, string $contextUri = null)
+ public function write(string $rootElementName, $value, ?string $contextUri = null)
{
$w = $this->getWriter();
$w->openMemory();
@@ -266,7 +280,7 @@ class Service
*
* @throws \InvalidArgumentException
*/
- public function writeValueObject($object, string $contextUri = null)
+ public function writeValueObject($object, ?string $contextUri = null)
{
if (!isset($this->valueObjectMap[get_class($object)])) {
throw new \InvalidArgumentException('"'.get_class($object).'" is not a registered value object class. Register your class with mapValueObject.');
diff --git a/vendor/sabre/xml/lib/Version.php b/vendor/sabre/xml/lib/Version.php
index 1144bf085..c2da842ec 100644
--- a/vendor/sabre/xml/lib/Version.php
+++ b/vendor/sabre/xml/lib/Version.php
@@ -16,5 +16,5 @@ class Version
/**
* Full version number.
*/
- const VERSION = '2.2.5';
+ public const VERSION = '2.2.11';
}
diff --git a/vendor/sabre/xml/lib/Writer.php b/vendor/sabre/xml/lib/Writer.php
index e3238a7ed..76989612e 100644
--- a/vendor/sabre/xml/lib/Writer.php
+++ b/vendor/sabre/xml/lib/Writer.php
@@ -30,7 +30,7 @@ use XMLWriter;
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
-class Writer extends XMLWriter
+class Writer extends \XMLWriter
{
use ContextStackTrait;
@@ -93,8 +93,6 @@ class Writer extends XMLWriter
* ]
* ]
* ]
- *
- * @param mixed $value
*/
public function write($value)
{
@@ -151,7 +149,7 @@ class Writer extends XMLWriter
if (!$this->namespacesWritten) {
foreach ($this->namespaceMap as $namespace => $prefix) {
- $this->writeAttribute(($prefix ? 'xmlns:'.$prefix : 'xmlns'), $namespace);
+ $this->writeAttribute($prefix ? 'xmlns:'.$prefix : 'xmlns', $namespace);
}
$this->namespacesWritten = true;
}
diff --git a/vendor/sabre/xml/lib/XmlDeserializable.php b/vendor/sabre/xml/lib/XmlDeserializable.php
index 83f33db1e..0a5720334 100644
--- a/vendor/sabre/xml/lib/XmlDeserializable.php
+++ b/vendor/sabre/xml/lib/XmlDeserializable.php
@@ -31,8 +31,6 @@ interface XmlDeserializable
*
* $reader->parseInnerTree() will parse the entire sub-tree, and advance to
* the next element.
- *
- * @return mixed
*/
public static function xmlDeserialize(Reader $reader);
}
diff --git a/vendor/scssphp/scssphp/src/Block/DirectiveBlock.php b/vendor/scssphp/scssphp/src/Block/DirectiveBlock.php
index b1d3d1a81..22b346e9b 100644
--- a/vendor/scssphp/scssphp/src/Block/DirectiveBlock.php
+++ b/vendor/scssphp/scssphp/src/Block/DirectiveBlock.php
@@ -13,6 +13,7 @@
namespace ScssPhp\ScssPhp\Block;
use ScssPhp\ScssPhp\Block;
+use ScssPhp\ScssPhp\Node\Number;
use ScssPhp\ScssPhp\Type;
/**
@@ -26,7 +27,7 @@ class DirectiveBlock extends Block
public $name;
/**
- * @var string|array|null
+ * @var array|Number|null
*/
public $value;
diff --git a/vendor/scssphp/scssphp/src/Block/EachBlock.php b/vendor/scssphp/scssphp/src/Block/EachBlock.php
index b3289579d..1217994ea 100644
--- a/vendor/scssphp/scssphp/src/Block/EachBlock.php
+++ b/vendor/scssphp/scssphp/src/Block/EachBlock.php
@@ -13,6 +13,7 @@
namespace ScssPhp\ScssPhp\Block;
use ScssPhp\ScssPhp\Block;
+use ScssPhp\ScssPhp\Node\Number;
use ScssPhp\ScssPhp\Type;
/**
@@ -26,7 +27,7 @@ class EachBlock extends Block
public $vars = [];
/**
- * @var array
+ * @var array|Number
*/
public $list;
diff --git a/vendor/scssphp/scssphp/src/Block/ElseifBlock.php b/vendor/scssphp/scssphp/src/Block/ElseifBlock.php
index 4622bca79..f732c2d70 100644
--- a/vendor/scssphp/scssphp/src/Block/ElseifBlock.php
+++ b/vendor/scssphp/scssphp/src/Block/ElseifBlock.php
@@ -13,6 +13,7 @@
namespace ScssPhp\ScssPhp\Block;
use ScssPhp\ScssPhp\Block;
+use ScssPhp\ScssPhp\Node\Number;
use ScssPhp\ScssPhp\Type;
/**
@@ -21,7 +22,7 @@ use ScssPhp\ScssPhp\Type;
class ElseifBlock extends Block
{
/**
- * @var array
+ * @var array|Number
*/
public $cond;
diff --git a/vendor/scssphp/scssphp/src/Block/ForBlock.php b/vendor/scssphp/scssphp/src/Block/ForBlock.php
index a9cf6733b..962944111 100644
--- a/vendor/scssphp/scssphp/src/Block/ForBlock.php
+++ b/vendor/scssphp/scssphp/src/Block/ForBlock.php
@@ -13,6 +13,7 @@
namespace ScssPhp\ScssPhp\Block;
use ScssPhp\ScssPhp\Block;
+use ScssPhp\ScssPhp\Node\Number;
use ScssPhp\ScssPhp\Type;
/**
@@ -26,12 +27,12 @@ class ForBlock extends Block
public $var;
/**
- * @var array
+ * @var array|Number
*/
public $start;
/**
- * @var array
+ * @var array|Number
*/
public $end;
diff --git a/vendor/scssphp/scssphp/src/Block/IfBlock.php b/vendor/scssphp/scssphp/src/Block/IfBlock.php
index 9f21bf88a..659c7c274 100644
--- a/vendor/scssphp/scssphp/src/Block/IfBlock.php
+++ b/vendor/scssphp/scssphp/src/Block/IfBlock.php
@@ -13,6 +13,7 @@
namespace ScssPhp\ScssPhp\Block;
use ScssPhp\ScssPhp\Block;
+use ScssPhp\ScssPhp\Node\Number;
use ScssPhp\ScssPhp\Type;
/**
@@ -21,7 +22,7 @@ use ScssPhp\ScssPhp\Type;
class IfBlock extends Block
{
/**
- * @var array
+ * @var array|Number
*/
public $cond;
diff --git a/vendor/scssphp/scssphp/src/Block/MediaBlock.php b/vendor/scssphp/scssphp/src/Block/MediaBlock.php
index c49ee1b2b..ab975c74e 100644
--- a/vendor/scssphp/scssphp/src/Block/MediaBlock.php
+++ b/vendor/scssphp/scssphp/src/Block/MediaBlock.php
@@ -13,6 +13,7 @@
namespace ScssPhp\ScssPhp\Block;
use ScssPhp\ScssPhp\Block;
+use ScssPhp\ScssPhp\Node\Number;
use ScssPhp\ScssPhp\Type;
/**
@@ -21,7 +22,7 @@ use ScssPhp\ScssPhp\Type;
class MediaBlock extends Block
{
/**
- * @var string|array|null
+ * @var string|array|Number|null
*/
public $value;
diff --git a/vendor/scssphp/scssphp/src/Compiler.php b/vendor/scssphp/scssphp/src/Compiler.php
index d4e7c6896..d654ee6eb 100644
--- a/vendor/scssphp/scssphp/src/Compiler.php
+++ b/vendor/scssphp/scssphp/src/Compiler.php
@@ -140,13 +140,28 @@ class Compiler
/** @deprecated */
public static $Infinity = [Type::T_KEYWORD, 'Infinity'];
public static $null = [Type::T_NULL];
+ /**
+ * @internal
+ */
public static $nullString = [Type::T_STRING, '', []];
+ /**
+ * @internal
+ */
public static $defaultValue = [Type::T_KEYWORD, ''];
+ /**
+ * @internal
+ */
public static $selfSelector = [Type::T_SELF];
public static $emptyList = [Type::T_LIST, '', []];
public static $emptyMap = [Type::T_MAP, [], []];
public static $emptyString = [Type::T_STRING, '"', []];
+ /**
+ * @internal
+ */
public static $with = [Type::T_KEYWORD, 'with'];
+ /**
+ * @internal
+ */
public static $without = [Type::T_KEYWORD, 'without'];
private static $emptyArgumentList = [Type::T_LIST, '', [], []];
@@ -1656,6 +1671,7 @@ class Compiler
$parser = $this->parserFactory(__METHOD__);
if ($parser->parseValue($buffer, $reParsedWith)) {
+ \assert(\is_array($reParsedWith));
$withCondition = $reParsedWith;
}
}
@@ -5702,10 +5718,36 @@ EOL;
@trigger_error('Omitting the argument declaration when registering custom function is deprecated and won\'t be supported in ScssPhp 2.0 anymore.', E_USER_DEPRECATED);
}
+ if ($this->reflectCallable($callback)->getNumberOfRequiredParameters() > 1) {
+ @trigger_error('The second argument passed to the callback of custom functions is deprecated and won\'t be supported in ScssPhp 2.0 anymore. Register a callback accepting only 1 parameter instead.', E_USER_DEPRECATED);
+ }
+
$this->userFunctions[$this->normalizeName($name)] = [$callback, $argumentDeclaration];
}
/**
+ * @return \ReflectionFunctionAbstract
+ */
+ private function reflectCallable(callable $c)
+ {
+ if (\is_object($c) && !$c instanceof \Closure) {
+ $c = [$c, '__invoke'];
+ }
+
+ if (\is_string($c) && false !== strpos($c, '::')) {
+ $c = explode('::', $c, 2);
+ }
+
+ if (\is_array($c)) {
+ return new \ReflectionMethod($c[0], $c[1]);
+ }
+
+ \assert(\is_string($c) || $c instanceof \Closure);
+
+ return new \ReflectionFunction($c);
+ }
+
+ /**
* Unregister function
*
* @api
diff --git a/vendor/scssphp/scssphp/src/Parser.php b/vendor/scssphp/scssphp/src/Parser.php
index 2666a263c..e7cb2e8c1 100644
--- a/vendor/scssphp/scssphp/src/Parser.php
+++ b/vendor/scssphp/scssphp/src/Parser.php
@@ -310,8 +310,9 @@ class Parser
*
* @api
*
- * @param string $buffer
- * @param string|array $out
+ * @param string $buffer
+ * @param mixed $out
+ * @param-out array|Number $out
*
* @return bool
*/
@@ -345,9 +346,9 @@ class Parser
*
* @api
*
- * @param string $buffer
- * @param string|array $out
- * @param bool $shouldValidate
+ * @param string $buffer
+ * @param array $out
+ * @param bool $shouldValidate
*
* @return bool
*/
@@ -1255,10 +1256,10 @@ class Parser
/**
* Assert a parsed part is plain CSS Valid
*
- * @param array|false $parsed
+ * @param array|Number|false $parsed
* @param int $startPos
*
- * @return array
+ * @return array|Number
*
* @throws ParserException
*/
@@ -1288,10 +1289,10 @@ class Parser
/**
* Check a parsed element is plain CSS Valid
*
- * @param array $parsed
+ * @param array|Number|string $parsed
* @param bool $allowExpression
*
- * @return array|false
+ * @return ($parsed is string ? string : ($parsed is Number ? Number : array|false))
*/
protected function isPlainCssValidElement($parsed, $allowExpression = false)
{
@@ -1300,6 +1301,10 @@ class Parser
return $parsed;
}
+ if ($parsed instanceof Number) {
+ return $parsed;
+ }
+
if (
\in_array($parsed[0], [Type::T_FUNCTION, Type::T_FUNCTION_CALL]) &&
!\in_array($parsed[1], [
@@ -2094,8 +2099,9 @@ class Parser
/**
* Parse directive value list that considers $vars as keyword
*
- * @param array $out
+ * @param mixed $out
* @param string|false $endChar
+ * @param-out array|Number $out
*
* @return bool
*
@@ -2158,7 +2164,8 @@ class Parser
/**
* Parse comma separated value list
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array|Number $out
*
* @return bool
*/
@@ -2176,10 +2183,11 @@ class Parser
* Parse a function call, where externals () are part of the call
* and not of the value list
*
- * @param array $out
+ * @param mixed $out
* @param bool $mandatoryEnclos
* @param null|string $charAfter
* @param null|bool $eatWhiteSp
+ * @param-out array|Number $out
*
* @return bool
*/
@@ -2215,7 +2223,8 @@ class Parser
/**
* Parse space separated value list
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array|Number $out
*
* @return bool
*/
@@ -2227,10 +2236,11 @@ class Parser
/**
* Parse generic list
*
- * @param array $out
+ * @param mixed $out
* @param string $parseItem The name of the method used to parse items
* @param string $delim
* @param bool $flatten
+ * @param-out ($flatten is false ? array : array|Number) $out
*
* @return bool
*/
@@ -2334,9 +2344,10 @@ class Parser
/**
* Parse expression
*
- * @param array $out
+ * @param mixed $out
* @param bool $listOnly
* @param bool $lookForExp
+ * @param-out array|Number $out
*
* @return bool
*
@@ -2401,10 +2412,11 @@ class Parser
/**
* Parse expression specifically checking for lists in parenthesis or brackets
*
- * @param array $out
+ * @param mixed $out
* @param int $s
* @param string $closingParen
* @param string[] $allowedTypes
+ * @param-out array|Number $out
*
* @return bool
*
@@ -2463,10 +2475,10 @@ class Parser
/**
* Parse left-hand side of subexpression
*
- * @param array $lhs
- * @param int $minP
+ * @param array|Number $lhs
+ * @param int $minP
*
- * @return array
+ * @return array|Number
*/
protected function expHelper($lhs, $minP)
{
@@ -2517,7 +2529,8 @@ class Parser
/**
* Parse value
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array|Number $out
*
* @return bool
*/
@@ -2725,7 +2738,8 @@ class Parser
/**
* Parse parenthesized value
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array|Number $out
*
* @return bool
*/
@@ -2797,7 +2811,8 @@ class Parser
* Parse function call
*
* @param string $name
- * @param array $func
+ * @param mixed $func
+ * @param-out array $func
*
* @return bool
*/
@@ -2900,7 +2915,8 @@ class Parser
/**
* Parse mixin/function definition argument list
*
- * @param array $out
+ * @param mixed $out
+ * @param-out list<array{string, array|Number|null, bool}> $out
*
* @return bool
*/
@@ -2962,7 +2978,8 @@ class Parser
/**
* Parse map
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array $out
*
* @return bool
*/
@@ -3004,7 +3021,8 @@ class Parser
/**
* Parse color
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array $out
*
* @return bool
*/
@@ -3030,7 +3048,8 @@ class Parser
/**
* Parse number with unit
*
- * @param array $unit
+ * @param mixed $unit
+ * @param-out Number $unit
*
* @return bool
*/
@@ -3236,11 +3255,12 @@ class Parser
* Parse an unbounded string stopped by $end
*
* @param string $end
- * @param array $out
+ * @param mixed $out
* @param string $nestOpen
* @param string $nestClose
* @param bool $rtrim
* @param string $disallow
+ * @param-out array $out
*
* @return bool
*/
@@ -3317,8 +3337,9 @@ class Parser
/**
* Parser interpolation
*
- * @param string|array $out
- * @param bool $lookWhite save information about whitespace before and after
+ * @param mixed $out
+ * @param bool $lookWhite save information about whitespace before and after
+ * @param-out array $out
*
* @return bool
*/
@@ -3852,7 +3873,8 @@ class Parser
/**
* Parse a variable
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array{Type::*, string} $out
*
* @return bool
*/
@@ -3881,9 +3903,10 @@ class Parser
/**
* Parse a keyword
*
- * @param string $word
- * @param bool $eatWhitespace
- * @param bool $inSelector
+ * @param mixed $word
+ * @param bool $eatWhitespace
+ * @param bool $inSelector
+ * @param-out string $word
*
* @return bool
*/
@@ -3999,7 +4022,8 @@ class Parser
/**
* Parse a url
*
- * @param array $out
+ * @param mixed $out
+ * @param-out array $out
*
* @return bool
*/
@@ -4009,10 +4033,10 @@ class Parser
$s = $this->count;
if (
- ($this->string($out) || $this->spaceList($out)) &&
+ ($this->string($inner) || $this->spaceList($inner)) &&
$this->matchChar(')')
) {
- $out = [Type::T_STRING, '', ['url(', $out, ')']];
+ $out = [Type::T_STRING, '', ['url(', $inner, ')']];
return true;
}
@@ -4055,7 +4079,7 @@ class Parser
/**
* Strip assignment flag from the list
*
- * @param array $value
+ * @param array|Number $value
*
* @return string[]
*/
diff --git a/vendor/scssphp/scssphp/src/Type.php b/vendor/scssphp/scssphp/src/Type.php
index d43088785..2f8ab6506 100644
--- a/vendor/scssphp/scssphp/src/Type.php
+++ b/vendor/scssphp/scssphp/src/Type.php
@@ -95,6 +95,9 @@ class Type
* @internal
*/
const T_FOR = 'for';
+ /**
+ * @internal
+ */
const T_FUNCTION = 'function';
/**
* @internal
diff --git a/vendor/scssphp/scssphp/src/Version.php b/vendor/scssphp/scssphp/src/Version.php
index 89bd59526..45fc9835c 100644
--- a/vendor/scssphp/scssphp/src/Version.php
+++ b/vendor/scssphp/scssphp/src/Version.php
@@ -19,5 +19,5 @@ namespace ScssPhp\ScssPhp;
*/
class Version
{
- const VERSION = '1.12.1';
+ const VERSION = '1.13.0';
}
diff --git a/vendor/simplepie/simplepie/.php-cs-fixer.dist.php b/vendor/simplepie/simplepie/.php-cs-fixer.dist.php
index d26f7c6c6..ed111568f 100644
--- a/vendor/simplepie/simplepie/.php-cs-fixer.dist.php
+++ b/vendor/simplepie/simplepie/.php-cs-fixer.dist.php
@@ -14,6 +14,8 @@ return (new PhpCsFixer\Config())
'@PHP71Migration:risky' => true,
'void_return' => false,
'@PHPUnit84Migration:risky' => true,
+ 'declare_strict_types' => false,
])
+ ->setRiskyAllowed(true)
->setFinder($finder)
;
diff --git a/vendor/simplepie/simplepie/CHANGELOG.md b/vendor/simplepie/simplepie/CHANGELOG.md
index dba92bbf7..afc58588b 100644
--- a/vendor/simplepie/simplepie/CHANGELOG.md
+++ b/vendor/simplepie/simplepie/CHANGELOG.md
@@ -5,7 +5,22 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [Unreleased](https://github.com/simplepie/simplepie/compare/1.8.0...master)
+## [Unreleased](https://github.com/simplepie/simplepie/compare/1.8.1...one-dot-eight)
+
+Nothing yet.
+
+## [1.8.1](https://github.com/simplepie/simplepie/compare/1.8.0...1.8.1) - 2024-10-01
+
+### Changed
+
+- Disable Composer lockfile by @jrfnl in [#887](https://github.com/simplepie/simplepie/pull/887), backported in [#895](https://github.com/simplepie/simplepie/pull/895)
+
+### Fixed
+
+- Fixes for PHP 8.4 deprecations by @Girgias, @jrfnl and @jtojnar, backported in [#875](https://github.com/simplepie/simplepie/pull/875)
+- Fix locator with website missing `Content-Type` header by @jtojnar in [#891](https://github.com/simplepie/simplepie/pull/891)
+- Fix `encode` argument of `SimplePie::strip_htmltags()` @jtojnar in [#894](https://github.com/simplepie/simplepie/pull/894), backported in [#898](https://github.com/simplepie/simplepie/pull/898)
+- Reverted `strict_types` by @jtojnar in [#842](https://github.com/simplepie/simplepie/pull/842)
## [1.8.0](https://github.com/simplepie/simplepie/compare/1.7.0...1.8.0) - 2023-01-20
diff --git a/vendor/simplepie/simplepie/README.markdown b/vendor/simplepie/simplepie/README.markdown
index 5500f03c2..ee8d08672 100644
--- a/vendor/simplepie/simplepie/README.markdown
+++ b/vendor/simplepie/simplepie/README.markdown
@@ -18,6 +18,22 @@ Requirements
* PCRE support
+PSR-16: Caching support
+--------------
+
+Since SimplePie 1.8.0 you can use the [PSR-16](https://www.php-fig.org/psr/psr-16/) cache from
+[Symfony](https://symfony.com/doc/current/components/cache.html)
+or [every other implementation](https://packagist.org/providers/psr/simple-cache-implementation).
+
+```php
+$simplepie = new \SimplePie\SimplePie();
+$simplepie->set_cache(
+ new \Symfony\Component\Cache\Psr16Cache(
+ new \Symfony\Component\Cache\Adapter\FilesystemAdapter()
+ ),
+);
+```
+
What comes in the package?
--------------------------
1. `src/` - SimplePie classes for use with the autoloader
diff --git a/vendor/simplepie/simplepie/autoloader.php b/vendor/simplepie/simplepie/autoloader.php
index a19c25476..b1635ff15 100644
--- a/vendor/simplepie/simplepie/autoloader.php
+++ b/vendor/simplepie/simplepie/autoloader.php
@@ -88,7 +88,7 @@ spl_autoload_register(array(new SimplePie_Autoloader(), 'autoload'));
if (!class_exists('SimplePie'))
{
- trigger_error('Autoloader not registered properly', E_USER_ERROR);
+ exit('Autoloader not registered properly');
}
/**
diff --git a/vendor/simplepie/simplepie/composer.json b/vendor/simplepie/simplepie/composer.json
index cfede2b53..f0a800c80 100644
--- a/vendor/simplepie/simplepie/composer.json
+++ b/vendor/simplepie/simplepie/composer.json
@@ -57,6 +57,7 @@
},
"config": {
"bin-dir": "bin",
+ "lock": false,
"sort-packages": true
},
"scripts": {
diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php
index 8a2b334e1..14f5380c2 100755
--- a/vendor/simplepie/simplepie/library/SimplePie.php
+++ b/vendor/simplepie/simplepie/library/SimplePie.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Author.php b/vendor/simplepie/simplepie/library/SimplePie/Author.php
index 3b3ab50e6..b4b7aaf8d 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Author.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Author.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache.php b/vendor/simplepie/simplepie/library/SimplePie/Cache.php
index 9f2883ed6..6e453d510 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php
index 2988ce7c8..f59928bb8 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php
index 4fb8d2c65..0393df331 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
index cd5646f20..7c224ed38 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php
index a5e088f00..3c0cbc653 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php
index aef5b953a..ccf68e592 100755
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
index 01ea48cbb..6215e952b 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
index 7d68c9795..6a96c1e29 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
@@ -1,7 +1,5 @@
<?php
-declare(strict_types=1);
-
/**
* SimplePie Redis Cache Extension
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Caption.php b/vendor/simplepie/simplepie/library/SimplePie/Caption.php
index 6e96e11b2..1f3a475c8 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Caption.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Caption.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Category.php b/vendor/simplepie/simplepie/library/SimplePie/Category.php
index 7bdf595df..fad39f069 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Category.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Category.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
index 016755753..dc30fc8c8 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
index fd50d702c..dcb2d4a83 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Core.php b/vendor/simplepie/simplepie/library/SimplePie/Core.php
index 7f3313345..5abf38a0a 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Core.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Core.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Credit.php b/vendor/simplepie/simplepie/library/SimplePie/Credit.php
index 14a197224..b88c3f484 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Credit.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Credit.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
index 496c7bf52..dba7688ea 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
index a0e057511..51e75d3d5 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Exception.php b/vendor/simplepie/simplepie/library/SimplePie/Exception.php
index 218a8e3c4..5a2a600cb 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Exception.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Exception.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/File.php b/vendor/simplepie/simplepie/library/SimplePie/File.php
index 99f14fa6b..803080dd9 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/File.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/File.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
index 65f6c9f6d..d70131591 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/IRI.php b/vendor/simplepie/simplepie/library/SimplePie/IRI.php
index 561cfca06..b947d63bf 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/IRI.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/IRI.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Item.php b/vendor/simplepie/simplepie/library/SimplePie/Item.php
index 13c51c3b7..b0d7820b9 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Item.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Item.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Locator.php b/vendor/simplepie/simplepie/library/SimplePie/Locator.php
index 77f83d6af..e975851e4 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Locator.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Locator.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Misc.php b/vendor/simplepie/simplepie/library/SimplePie/Misc.php
index d357b040c..5f33c3406 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Misc.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Misc.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
index 8d125e3a0..f8b402343 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
index e55c2f468..da1033b0c 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/Parser.php
index 1a1ff9ab4..e281e107e 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Parser.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Rating.php b/vendor/simplepie/simplepie/library/SimplePie/Rating.php
index c096850c4..00d99492f 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Rating.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Rating.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Registry.php b/vendor/simplepie/simplepie/library/SimplePie/Registry.php
index eaf32c05a..6788c0614 100755
--- a/vendor/simplepie/simplepie/library/SimplePie/Registry.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Registry.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
index 28a1ebfb2..566dee29c 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
index 36c59ebce..849edb472 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Source.php b/vendor/simplepie/simplepie/library/SimplePie/Source.php
index d2205e5dd..24b0f7c46 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Source.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Source.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
index 3bedaabe2..7ccc73178 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
index dea37ed47..c428194b7 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Author.php b/vendor/simplepie/simplepie/src/Author.php
index f82a021e2..2cb7ad9ed 100644
--- a/vendor/simplepie/simplepie/src/Author.php
+++ b/vendor/simplepie/simplepie/src/Author.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache.php b/vendor/simplepie/simplepie/src/Cache.php
index 740091f08..8ed7038b4 100644
--- a/vendor/simplepie/simplepie/src/Cache.php
+++ b/vendor/simplepie/simplepie/src/Cache.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache/Base.php b/vendor/simplepie/simplepie/src/Cache/Base.php
index 134d097fc..674fe8c10 100644
--- a/vendor/simplepie/simplepie/src/Cache/Base.php
+++ b/vendor/simplepie/simplepie/src/Cache/Base.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php b/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php
index b8b239195..44dbd66d4 100644
--- a/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php
+++ b/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -86,12 +85,12 @@ final class BaseDataCache implements DataCache
{
$data = $this->cache->load();
- if (! is_array($data)) {
+ if (!is_array($data)) {
return $default;
}
// ignore data if internal cache expiration time is not set
- if (! array_key_exists('__cache_expiration_time', $data)) {
+ if (!array_key_exists('__cache_expiration_time', $data)) {
return $default;
}
diff --git a/vendor/simplepie/simplepie/src/Cache/DB.php b/vendor/simplepie/simplepie/src/Cache/DB.php
index 7994e3210..a5357b26d 100644
--- a/vendor/simplepie/simplepie/src/Cache/DB.php
+++ b/vendor/simplepie/simplepie/src/Cache/DB.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -80,13 +79,13 @@ abstract class DB implements Base
}
if (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) {
- $channel =& $data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
+ $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
} elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) {
- $channel =& $data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
+ $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
} elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) {
- $channel =& $data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
+ $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
} elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0])) {
- $channel =& $data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0];
+ $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0];
} else {
$channel = null;
}
diff --git a/vendor/simplepie/simplepie/src/Cache/DataCache.php b/vendor/simplepie/simplepie/src/Cache/DataCache.php
index bf3aebe90..e75413243 100644
--- a/vendor/simplepie/simplepie/src/Cache/DataCache.php
+++ b/vendor/simplepie/simplepie/src/Cache/DataCache.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache/File.php b/vendor/simplepie/simplepie/src/Cache/File.php
index 248d41a8a..0ffcdf9e2 100644
--- a/vendor/simplepie/simplepie/src/Cache/File.php
+++ b/vendor/simplepie/simplepie/src/Cache/File.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache/Memcache.php b/vendor/simplepie/simplepie/src/Cache/Memcache.php
index aeabd51b3..d20f9bfcf 100644
--- a/vendor/simplepie/simplepie/src/Cache/Memcache.php
+++ b/vendor/simplepie/simplepie/src/Cache/Memcache.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache/Memcached.php b/vendor/simplepie/simplepie/src/Cache/Memcached.php
index 4aa3701b5..8a8d31e7b 100644
--- a/vendor/simplepie/simplepie/src/Cache/Memcached.php
+++ b/vendor/simplepie/simplepie/src/Cache/Memcached.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache/MySQL.php b/vendor/simplepie/simplepie/src/Cache/MySQL.php
index 62abb12cd..1d7986bfc 100644
--- a/vendor/simplepie/simplepie/src/Cache/MySQL.php
+++ b/vendor/simplepie/simplepie/src/Cache/MySQL.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -290,13 +289,13 @@ class MySQL extends DB
if ($items !== 0) {
if (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) {
- $feed =& $data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
+ $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
} elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) {
- $feed =& $data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
+ $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
} elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) {
- $feed =& $data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
+ $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
} elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0])) {
- $feed =& $data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0];
+ $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0];
} else {
$feed = null;
}
diff --git a/vendor/simplepie/simplepie/src/Cache/Psr16.php b/vendor/simplepie/simplepie/src/Cache/Psr16.php
index 710996b4d..15fe6db92 100644
--- a/vendor/simplepie/simplepie/src/Cache/Psr16.php
+++ b/vendor/simplepie/simplepie/src/Cache/Psr16.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -94,7 +93,7 @@ final class Psr16 implements DataCache
{
$data = $this->cache->get($key, $default);
- if (! is_array($data) || $data === $default) {
+ if (!is_array($data) || $data === $default) {
return $default;
}
diff --git a/vendor/simplepie/simplepie/src/Cache/Redis.php b/vendor/simplepie/simplepie/src/Cache/Redis.php
index 0effccadb..5997668c0 100644
--- a/vendor/simplepie/simplepie/src/Cache/Redis.php
+++ b/vendor/simplepie/simplepie/src/Cache/Redis.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Caption.php b/vendor/simplepie/simplepie/src/Caption.php
index 467183239..ef72c0b7a 100644
--- a/vendor/simplepie/simplepie/src/Caption.php
+++ b/vendor/simplepie/simplepie/src/Caption.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Category.php b/vendor/simplepie/simplepie/src/Category.php
index b49b4fd96..d7da8e683 100644
--- a/vendor/simplepie/simplepie/src/Category.php
+++ b/vendor/simplepie/simplepie/src/Category.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php b/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php
index 33c27b64b..8c7e089ac 100644
--- a/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php
+++ b/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Copyright.php b/vendor/simplepie/simplepie/src/Copyright.php
index 878e4ffa4..150362f01 100644
--- a/vendor/simplepie/simplepie/src/Copyright.php
+++ b/vendor/simplepie/simplepie/src/Copyright.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Credit.php b/vendor/simplepie/simplepie/src/Credit.php
index 6b1402266..947f231e8 100644
--- a/vendor/simplepie/simplepie/src/Credit.php
+++ b/vendor/simplepie/simplepie/src/Credit.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Enclosure.php b/vendor/simplepie/simplepie/src/Enclosure.php
index 065577653..e7dcb2527 100644
--- a/vendor/simplepie/simplepie/src/Enclosure.php
+++ b/vendor/simplepie/simplepie/src/Enclosure.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -725,7 +724,7 @@ class Enclosure
{
$length = $this->get_length();
if ($length !== null) {
- return round($length/1048576, 2);
+ return round($length / 1048576, 2);
}
return null;
@@ -812,7 +811,7 @@ class Enclosure
* @param array|string $options See first parameter to {@see embed}
* @return string HTML string to output
*/
- public function native_embed($options='')
+ public function native_embed($options = '')
{
return $this->embed($options, true);
}
@@ -943,9 +942,9 @@ class Enclosure
if ($height === 'auto') {
$width = 480;
} elseif ($widescreen) {
- $width = round((intval($height)/9)*16);
+ $width = round((intval($height) / 9) * 16);
} else {
- $width = round((intval($height)/3)*4);
+ $width = round((intval($height) / 3) * 4);
}
} else {
$width = '100%';
@@ -963,9 +962,9 @@ class Enclosure
$height = 360;
}
} elseif ($widescreen) {
- $height = round((intval($width)/16)*9);
+ $height = round((intval($width) / 16) * 9);
} else {
- $height = round((intval($width)/4)*3);
+ $height = round((intval($width) / 4) * 3);
}
} else {
$height = 376;
@@ -1115,7 +1114,7 @@ class Enclosure
$type = 'audio/x-ms-wma';
break;
- // Video mime-types
+ // Video mime-types
case '3gp':
case '3gpp':
$type = 'video/3gpp';
@@ -1178,7 +1177,7 @@ class Enclosure
$type = 'video/x-ms-wvx';
break;
- // Flash mime-types
+ // Flash mime-types
case 'spl':
$type = 'application/futuresplash';
break;
diff --git a/vendor/simplepie/simplepie/src/Exception.php b/vendor/simplepie/simplepie/src/Exception.php
index a20681f55..ae67ae38c 100644
--- a/vendor/simplepie/simplepie/src/Exception.php
+++ b/vendor/simplepie/simplepie/src/Exception.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/File.php b/vendor/simplepie/simplepie/src/File.php
index bdbf56927..fac7aabc1 100644
--- a/vendor/simplepie/simplepie/src/File.php
+++ b/vendor/simplepie/simplepie/src/File.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Gzdecode.php b/vendor/simplepie/simplepie/src/Gzdecode.php
index 67cbfefe0..acb120126 100644
--- a/vendor/simplepie/simplepie/src/Gzdecode.php
+++ b/vendor/simplepie/simplepie/src/Gzdecode.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -182,7 +181,7 @@ class Gzdecode
*/
public function __set($name, $value)
{
- trigger_error("Cannot write property $name", E_USER_ERROR);
+ throw new Exception("Cannot write property $name");
}
/**
diff --git a/vendor/simplepie/simplepie/src/HTTP/Parser.php b/vendor/simplepie/simplepie/src/HTTP/Parser.php
index 15c46ebe8..524885a1a 100644
--- a/vendor/simplepie/simplepie/src/HTTP/Parser.php
+++ b/vendor/simplepie/simplepie/src/HTTP/Parser.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/IRI.php b/vendor/simplepie/simplepie/src/IRI.php
index ce4c2c211..dfd5eaa8a 100644
--- a/vendor/simplepie/simplepie/src/IRI.php
+++ b/vendor/simplepie/simplepie/src/IRI.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Item.php b/vendor/simplepie/simplepie/src/Item.php
index f25b50d04..3ec8f2f98 100644
--- a/vendor/simplepie/simplepie/src/Item.php
+++ b/vendor/simplepie/simplepie/src/Item.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -878,12 +877,12 @@ class Item implements RegistryAware
if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
- $this->data['links'][$key] =& $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
+ $this->data['links'][$key] = &$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
} else {
- $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
}
} elseif (substr($key, 0, 41) === \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY) {
- $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
}
$this->data['links'][$key] = array_unique($this->data['links'][$key]);
}
diff --git a/vendor/simplepie/simplepie/src/Locator.php b/vendor/simplepie/simplepie/src/Locator.php
index 1dc005b47..e17b3a376 100644
--- a/vendor/simplepie/simplepie/src/Locator.php
+++ b/vendor/simplepie/simplepie/src/Locator.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Misc.php b/vendor/simplepie/simplepie/src/Misc.php
index 87d7f6e2c..cc5db8aea 100644
--- a/vendor/simplepie/simplepie/src/Misc.php
+++ b/vendor/simplepie/simplepie/src/Misc.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Net/IPv6.php b/vendor/simplepie/simplepie/src/Net/IPv6.php
index da25f8353..a68dc169a 100644
--- a/vendor/simplepie/simplepie/src/Net/IPv6.php
+++ b/vendor/simplepie/simplepie/src/Net/IPv6.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Parse/Date.php b/vendor/simplepie/simplepie/src/Parse/Date.php
index 4792bc5e6..3254cca3c 100644
--- a/vendor/simplepie/simplepie/src/Parse/Date.php
+++ b/vendor/simplepie/simplepie/src/Parse/Date.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Parser.php b/vendor/simplepie/simplepie/src/Parser.php
index 4987825e6..baf70d2bd 100644
--- a/vendor/simplepie/simplepie/src/Parser.php
+++ b/vendor/simplepie/simplepie/src/Parser.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -151,9 +150,8 @@ class Parser implements RegistryAware
$xml = xml_parser_create_ns($this->encoding, $this->separator);
xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
- xml_set_object($xml, $this);
- xml_set_character_data_handler($xml, 'cdata');
- xml_set_element_handler($xml, 'tag_open', 'tag_close');
+ xml_set_character_data_handler($xml, [$this, 'cdata']);
+ xml_set_element_handler($xml, [$this, 'tag_open'], [$this, 'tag_close']);
// Parse!
$wrapper = @is_writable(sys_get_temp_dir()) ? 'php://temp' : 'php://memory';
@@ -303,8 +301,8 @@ class Parser implements RegistryAware
$this->data['data'] .= '>';
}
} else {
- $this->datas[] =& $this->data;
- $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][];
+ $this->datas[] = &$this->data;
+ $this->data = &$this->data['child'][end($this->namespace)][end($this->element)][];
$this->data = ['data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)];
if ((end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_ATOM_03 && in_array(end($this->element), ['title', 'tagline', 'copyright', 'info', 'summary', 'content']) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml')
|| (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_ATOM_10 && in_array(end($this->element), ['rights', 'subtitle', 'summary', 'info', 'title', 'content']) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml')
@@ -334,7 +332,7 @@ class Parser implements RegistryAware
}
}
if ($this->current_xhtml_construct === -1) {
- $this->data =& $this->datas[count($this->datas) - 1];
+ $this->data = &$this->datas[count($this->datas) - 1];
array_pop($this->datas);
}
diff --git a/vendor/simplepie/simplepie/src/Rating.php b/vendor/simplepie/simplepie/src/Rating.php
index f4f303d99..24c27337f 100644
--- a/vendor/simplepie/simplepie/src/Rating.php
+++ b/vendor/simplepie/simplepie/src/Rating.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Registry.php b/vendor/simplepie/simplepie/src/Registry.php
index 8e2ea13e3..6040d8bf3 100644
--- a/vendor/simplepie/simplepie/src/Registry.php
+++ b/vendor/simplepie/simplepie/src/Registry.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -156,7 +155,7 @@ class Registry
$type = $this->legacyTypes[$type];
}
- if (! array_key_exists($type, $this->default)) {
+ if (!array_key_exists($type, $this->default)) {
return false;
}
@@ -197,7 +196,7 @@ class Registry
$type = $this->legacyTypes[$type];
}
- if (! array_key_exists($type, $this->default)) {
+ if (!array_key_exists($type, $this->default)) {
return null;
}
diff --git a/vendor/simplepie/simplepie/src/RegistryAware.php b/vendor/simplepie/simplepie/src/RegistryAware.php
index 9d60bdd0f..525d93140 100644
--- a/vendor/simplepie/simplepie/src/RegistryAware.php
+++ b/vendor/simplepie/simplepie/src/RegistryAware.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Restriction.php b/vendor/simplepie/simplepie/src/Restriction.php
index 42b456a1c..d3cae11f1 100644
--- a/vendor/simplepie/simplepie/src/Restriction.php
+++ b/vendor/simplepie/simplepie/src/Restriction.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Sanitize.php b/vendor/simplepie/simplepie/src/Sanitize.php
index 7416c88e4..5c22d9c6f 100644
--- a/vendor/simplepie/simplepie/src/Sanitize.php
+++ b/vendor/simplepie/simplepie/src/Sanitize.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -133,7 +132,7 @@ class Sanitize implements RegistryAware
$this->registry = $registry;
}
- public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie\Cache', DataCache $cache = null)
+ public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie\Cache', ?DataCache $cache = null)
{
if (isset($enable_cache)) {
$this->enable_cache = (bool) $enable_cache;
@@ -143,7 +142,7 @@ class Sanitize implements RegistryAware
$this->cache_location = (string) $cache_location;
}
- if (! is_string($cache_name_function) && ! is_object($cache_name_function) && ! $cache_name_function instanceof NameFilter) {
+ if (!is_string($cache_name_function) && !is_object($cache_name_function) && !$cache_name_function instanceof NameFilter) {
throw new InvalidArgumentException(sprintf(
'%s(): Argument #3 ($cache_name_function) must be of type %s',
__METHOD__,
@@ -297,7 +296,7 @@ class Sanitize implements RegistryAware
foreach ($domains as $domain) {
$domain = trim($domain, ". \t\n\r\0\x0B");
$segments = array_reverse(explode('.', $domain));
- $node =& $this->https_domains;
+ $node = &$this->https_domains;
foreach ($segments as $segment) {//Build a tree
if ($node === true) {
break;
@@ -305,7 +304,7 @@ class Sanitize implements RegistryAware
if (!isset($node[$segment])) {
$node[$segment] = [];
}
- $node =& $node[$segment];
+ $node = &$node[$segment];
}
$node = true;
}
@@ -316,16 +315,12 @@ class Sanitize implements RegistryAware
*/
protected function is_https_domain($domain)
{
-
- // https://github.com/simplepie/simplepie/issues/852
- $domain = (string) $domain;
-
$domain = trim($domain, '. ');
$segments = array_reverse(explode('.', $domain));
- $node =& $this->https_domains;
+ $node = &$this->https_domains;
foreach ($segments as $segment) {//Explore the tree
if (isset($node[$segment])) {
- $node =& $node[$segment];
+ $node = &$node[$segment];
} else {
break;
}
diff --git a/vendor/simplepie/simplepie/src/SimplePie.php b/vendor/simplepie/simplepie/src/SimplePie.php
index 1dfa39fad..a0f6c17f4 100644
--- a/vendor/simplepie/simplepie/src/SimplePie.php
+++ b/vendor/simplepie/simplepie/src/SimplePie.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -71,7 +70,7 @@ class SimplePie
/**
* SimplePie Version
*/
- public const VERSION = '1.8.0';
+ public const VERSION = '1.8.1';
/**
* SimplePie Website URL
@@ -691,8 +690,7 @@ class SimplePie
public function __construct()
{
if (version_compare(PHP_VERSION, '7.2', '<')) {
- trigger_error('Please upgrade to PHP 7.2 or newer.');
- die();
+ exit('Please upgrade to PHP 7.2 or newer.');
}
$this->set_useragent();
@@ -803,7 +801,7 @@ class SimplePie
if ($file instanceof \SimplePie\File) {
$this->feed_url = $file->url;
$this->permanent_url = $this->feed_url;
- $this->file =& $file;
+ $this->file = &$file;
return true;
}
return false;
@@ -1375,7 +1373,7 @@ class SimplePie
}
$this->sanitize->strip_htmltags($tags);
if ($encode !== null) {
- $this->sanitize->encode_instead_of_strip($tags);
+ $this->sanitize->encode_instead_of_strip($encode);
}
}
@@ -1666,7 +1664,7 @@ class SimplePie
// Cache the file if caching is enabled
$this->data['cache_expiration_time'] = $this->cache_duration + time();
- if ($cache && ! $cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->cache_duration)) {
+ if ($cache && !$cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->cache_duration)) {
trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
}
return true;
@@ -1716,7 +1714,7 @@ class SimplePie
$cache = new BaseDataCache($cache);
}
- if ($cache !== false && ! $cache instanceof DataCache) {
+ if ($cache !== false && !$cache instanceof DataCache) {
throw new InvalidArgumentException(sprintf(
'%s(): Argument #1 ($cache) must be of type %s|false',
__METHOD__,
@@ -1774,7 +1772,7 @@ class SimplePie
$headers['if-none-match'] = $this->data['headers']['etag'];
}
- $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
+ $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout / 10, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
$this->status_code = $file->status_code;
if ($file->success) {
@@ -1811,7 +1809,7 @@ class SimplePie
// If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
if (!isset($file)) {
if ($this->file instanceof \SimplePie\File && $this->file->url === $this->feed_url) {
- $file =& $this->file;
+ $file = &$this->file;
} else {
$headers = [
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
@@ -1833,7 +1831,7 @@ class SimplePie
if (!$locate->is_feed($file)) {
$copyStatusCode = $file->status_code;
- $copyContentType = $file->headers['content-type'];
+ $copyContentType = $file->headers['content-type'] ?? '';
try {
$microformats = false;
if (class_exists('DOMXpath') && function_exists('Mf2\parse')) {
@@ -2641,12 +2639,12 @@ class SimplePie
if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
if (isset($this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key])) {
$this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key]);
- $this->data['links'][$key] =& $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key];
+ $this->data['links'][$key] = &$this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key];
} else {
- $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
}
} elseif (substr($key, 0, 41) === self::IANA_LINK_RELATIONS_REGISTRY) {
- $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
}
$this->data['links'][$key] = array_unique($this->data['links'][$key]);
}
@@ -3103,7 +3101,7 @@ class SimplePie
$trace = debug_backtrace();
$file = $trace[0]['file'];
$line = $trace[0]['line'];
- trigger_error("Call to undefined method $class::$method() in $file on line $line", E_USER_ERROR);
+ throw new SimplePieException("Call to undefined method $class::$method() in $file on line $line");
}
/**
diff --git a/vendor/simplepie/simplepie/src/Source.php b/vendor/simplepie/simplepie/src/Source.php
index c7ed11600..5a8f86de9 100644
--- a/vendor/simplepie/simplepie/src/Source.php
+++ b/vendor/simplepie/simplepie/src/Source.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
@@ -348,12 +347,12 @@ class Source implements RegistryAware
if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
- $this->data['links'][$key] =& $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
+ $this->data['links'][$key] = &$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
} else {
- $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
}
} elseif (substr($key, 0, 41) === \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY) {
- $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
}
$this->data['links'][$key] = array_unique($this->data['links'][$key]);
}
diff --git a/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php b/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php
index 5062e683f..59a0d83ee 100644
--- a/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php
+++ b/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php
@@ -1,6 +1,5 @@
<?php
-declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/smarty/smarty/CHANGELOG.md b/vendor/smarty/smarty/CHANGELOG.md
index bff690d84..1483be86e 100644
--- a/vendor/smarty/smarty/CHANGELOG.md
+++ b/vendor/smarty/smarty/CHANGELOG.md
@@ -6,42 +6,155 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
-## [4.5.4] - 2024-08-14
-- Fixed that using `count()` would trigger a deprecation notice. [#813](https://github.com/smarty-php/smarty/issues/813)
+## [5.4.3] - 2024-12-23
+- Fix PHP backtraces by qualifying/replacing `call_user_func_array` calls [#1074](https://github.com/smarty-php/smarty/issues/1074)
-## [4.5.3] - 2024-05-28
+## [5.4.2] - 2024-11-20
+
+
+- Support the deprecations introduced in PHP 8.4 and added tests for PHP 8.4 [#1043](https://github.com/smarty-php/smarty/pull/1043)
+
+## [5.4.1] - 2024-08-29
+
+
+- Enable (and fix) unit tests for Windows [#1046](https://github.com/smarty-php/smarty/pull/1046)
+- Fix the use of "extends:" to define the inheritance tree on Windows [#1018](https://github.com/smarty-php/smarty/issues/1018)
+
+## [5.4.0] - 2024-08-14
+- Fixing forced OpCache invalidation on every template include, which is resulting in fast raising wasted OpCache memory [#1007](https://github.com/smarty-php/smarty/issues/1007)
+- Improvement of auto-escaping [#1030](https://github.com/smarty-php/smarty/pull/1030)
+
+
+## [5.3.1] - 2024-06-16
+- Fixed error when using section with nocache [#1034](https://github.com/smarty-php/smarty/issues/1034)
+
+
+## [5.3.0] - 2024-05-30
+- Fix warning when calling hasVariable for an undefined variable [#977](https://github.com/smarty-php/smarty/issues/977)
+- Added `$smarty->prependTemplateDir()` method [#1022](https://github.com/smarty-php/smarty/issues/1022)
+
+
+## [5.2.0] - 2024-05-28
- Fixed a code injection vulnerability in extends-tag. This addresses CVE-2024-35226.
+- Added `$smarty->setCacheModifiedCheck()` setter for cache_modified_check
+- Added a PSR-4 loading script to allow Smarty to be used without Composer [#1017](https://github.com/smarty-php/smarty/pull/1017)
+
+
+## [5.1.0] - 2024-04-22
+- Prevent deprecation notices during compilation in PHP8.3 [#996](https://github.com/smarty-php/smarty/issues/996)
+- Fix that getTemplateVars would return an array of objects instead of the assigned variables values [#994](https://github.com/smarty-php/smarty/issues/994)
+- Fix Smarty::assign() not returning $this when called with an array as first parameter [#972](https://github.com/smarty-php/smarty/pull/972)
+- Documented support for `{if $element is in $array}` syntax [#937](https://github.com/smarty-php/smarty/issues/937)
+- Added support for `{if $element is not in $array}` syntax [#937](https://github.com/smarty-php/smarty/issues/937)
+- Using stream variables in templates now throws a deprecation notice [#933](https://github.com/smarty-php/smarty/pull/933)
+- Internal compiler classes always return a string (the internal has_code flag has been removed for simplicity) [#918](https://github.com/smarty-php/smarty/pull/918)
+- Fix invalid classnames in Runtime code for foreach [#1000](https://github.com/smarty-php/smarty/issues/1000)
+## [5.0.2] - 2024-03-28
+- Fix Smarty::assign() not returning $this when called with an array as first parameter [#972](https://github.com/smarty-php/smarty/pull/972)
-## [4.5.2] - 2024-04-06
-- Fixed argument must be passed by reference error introduced in v4.5.1 [#964](https://github.com/smarty-php/smarty/issues/964)
+## [5.0.1] - 2024-03-27
+- Fix error in Smarty\Smarty::compileAllTemplates() by including missing FilesystemIterator class [#966](https://github.com/smarty-php/smarty/issues/966)
-## [4.5.1] - 2024-03-18
-- Using unregistered static class methods in expressions now also triggers a deprecation notice because we will drop support for this in the next major release [#813](https://github.com/smarty-php/smarty/issues/813)
+## [5.0.0] - 2024-03-25
+- Fixed that scoped variables would overwrite parent scope [#952](https://github.com/smarty-php/smarty/issues/952)
+- Removed publicly accessible `$tpl->_var_stack` variable
-## [4.5.0] - 2024-03-18
-- (this release accidentally didn't contain any changes, fixed in 4.5.1)
+### Fixed
+- Too many shorthand attributes error when using a modifier as a function with more than 3 parameters in an expression [#949](https://github.com/smarty-php/smarty/issues/949)
-## [4.4.1] - 2024-02-26
-- Fixed internal release-tooling
+### Removed
+- Dropped support for undocumented `{time()}` added in v5.0.0 since we already have the documented `{$smarty.now}`
-## [4.4.0] - 2024-02-26
-- Using the `|implode`, `|json_encode` and `|substr` modifiers does not generate a deprecation warning anymore as they will continue to be supported in v5 [#939](https://github.com/smarty-php/smarty/issues/939)
+## [5.0.0-rc3] - 2024-02-26
### Added
- PHP8.3 support [#925](https://github.com/smarty-php/smarty/issues/925)
+- Backlink to GitHub in docs
+- Explain how to do escaping and set-up auto-escaping in docs [#865](https://github.com/smarty-php/smarty/issues/865)
+- Link to variable scope page in the documentation for the assign tag [#878](https://github.com/smarty-php/smarty/issues/878)
+- Add support for implode, substr and json_encode as modifiers/functions in templates [#939](https://github.com/smarty-php/smarty/issues/939)
+- Add template path to CompilerException to enable rich debug features [#935](https://github.com/smarty-php/smarty/issues/935)
### Fixed
-- Incorrect compilation of expressions when escape_html=true [#930](https://github.com/smarty-php/smarty/pull/930)
+- The {debug} tag was broken in v5 [#922](https://github.com/smarty-php/smarty/issues/922)
+- Documentation on `{if $x is even by $y}` syntax
+- Fix incorrect compilation of expressions when escape_html=true [#930](https://github.com/smarty-php/smarty/pull/930)
+
+## [5.0.0-rc2] - 2023-11-11
+
+### Fixed
+- Registered output filters wouldn't run [#899](https://github.com/smarty-php/smarty/issues/899)
+- Use of negative numbers in {math} equations [#895](https://github.com/smarty-php/smarty/issues/895)
+- Do not auto-html-escape custom function results [#906](https://github.com/smarty-php/smarty/issues/906)
+- Fix case-sensitive tag names [#907](https://github.com/smarty-php/smarty/issues/907)
+
+### Removed
+- Removed `$smarty->registered_filters` array
+
+## [5.0.0-rc1] - 2023-08-08
-## [4.3.4] - 2023-09-14
+### Added
+- Added support for PHP8.2
+- Added a new way to extend Smarty functionality using `Smarty::addExtension()` or `Smarty::setExtensions()`. Please see the docs for more information.
+- Custom tags can accept positional parameters, so you can write a block compiler that support this: `{trans "Jack" "dull boy"}All work and no play makes %s a %s.{/trans}` [#164](https://github.com/smarty-php/smarty/issues/164)
+- Full support for ternary operator: `{$test ? $a : $b}` and `{$var ?: $value_if_falsy}` [#881](https://github.com/smarty-php/smarty/issues/881)
+- Full support for null coalescing operator: `{$var ?? $value_if_null}` [#882](https://github.com/smarty-php/smarty/issues/882)
-## [4.3.3] - 2023-09-14
+### Changed
+- All Smarty code is now in the \Smarty namespace. For simple use-cases, you only need to add
+ `use \Smarty\Smarty;` to your script and everything will work. If you extend Smarty or use
+ Smarty plug-ins, please review your code to see if they assume specific class or method names.
+ E.g.: `Smarty_Internal_Template` is now `\Smarty\Template\`, `SmartyException` is now `\Smarty\Exception`.
+- Template variable scope bubbling has been simplified and made more consistent.
+ The global scope now equals the Smarty scope in order to avoid global state side effects. Please read
+ the documentation for more details.
+- Lexers and Parsers PHP files are reliably generated from sources (.y and .plex) using the make file
+- Smarty now always runs in multibyte mode, using `symfony/polyfill-mbstring` if required. Please use the
+ multibyte extension for optimal performance.
+- Smarty no longer calls `mb_internal_encoding()` and doesn't check for deprecated `mbstring.func_overload` ini directive [#480](https://github.com/smarty-php/smarty/issues/480)
+- Generated `<script>` tags lo longer have deprecated `type="text/javascript"` or `language="Javascript"` attributes [#815](https://github.com/smarty-php/smarty/issues/815)
+- Smarty will throw a compiler exception instead of silently ignoring a modifier on a function call, like this: `{include|dot:"x-template-id" file="included.dot.tpl"}` [#526](https://github.com/smarty-php/smarty/issues/526)
+- The documentation was largely rewritten
+
+### Deprecated
+- `$smarty->getPluginsDir()`
+- `$smarty->loadFilter()`
+- `$smarty->setPluginsDir()`
+- `$smarty->assignGlobal()`
+- Using `$smarty->registerFilter()` for registering variable filters will trigger a notice.
+
+### Removed
+- Dropped support for PHP7.1
+- Removed `$smarty->left_delimiter` and `$smarty->right_delimiter`, use `$smarty->getLeftDelimiter()`/`$smarty->setLeftDelimiter()` and `$smarty->getRightDelimiter()`/`$smarty->setRightDelimiter()`
+- Removed support for the `$cache_attrs` parameter for registered plugins
+- Removed support for undocumented `{make_nocache}` tag
+- Removed support for deprecated `{insert}` tag, the 'insert' plugin type and the associated $smarty->trusted_dir variable
+- Removed the undocumented `{block_parent}` and `{parent}` alternatives to `{$smarty.block.parent}`
+- Removed the undocumented `{block_child}` and `{child}` alternatives to `{$smarty.block.child}`
+- Removed support for loading config files into a non-local scope using `{config_load}` from a template
+- Removed `$smarty->autoload_filters` in favor of `$smarty->registerFilter()`
+- Removed `$smarty->trusted_dir` and `$smarty->allow_php_templates` since support for executing php scripts from templates has been dropped
+- Removed `$smarty->php_functions` and `$smarty->php_modifiers`.
+- You can no longer use native PHP-functions or userland functions in your templates without registering them. If you need a function in your templates,
+ register it first.
+- Removed support for `$smarty->getTags()`
+- Removed the abandoned `$smarty->direct_access_security` setting
+- Dropped support for `$smarty->plugins_dir` and `$smarty->use_include_path`. If you must, use `$smarty->addPluginsDir()` instead,
+ but it's better to use Smarty::addExtension() to add an extension or Smarty::registerPlugin to
+ quickly register a plugin using a callback function.
+- Removed constants such as SMARTY_DIR to prevent global side effects.
+- Removed direct access to `$smarty->template_dir`. Use `$smarty->setTemplateDir()`.
+- Removed direct access to `$smarty->cache_dir`. Use `$smarty->setCacheDir()`.
+- Removed direct access to `$smarty->compile_dir`. Use `$smarty->setCompileDir()`.
+- Removed `$smarty->loadPlugin()`, use `$smarty->registerPlugin()` instead.
+- Removed `$smarty->appendByRef()` and `$smarty->assignByRef()`.
+- Removed `$smarty->_current_file`
+- Removed `$smarty->allow_ambiguous_resources` (ambiguous resources handlers should still work)
### Fixed
- `|strip_tags` does not work if the input is 0 [#890](https://github.com/smarty-php/smarty/issues/890)
-- Use of negative numbers in {math} equations [#895](https://github.com/smarty-php/smarty/issues/895)
## [4.3.2] - 2023-07-19
@@ -1824,7 +1937,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
27.09.2011
- bugfix possible warning "attempt to modify property of non-object" in {section} (issue #34)
-- added chaining to Smarty_Internal_Data so $smarty->assign('a',1)->assign('b',2); is possible now
+- added chaining to \Smarty\Data so $smarty->assign('a',1)->assign('b',2); is possible now
- bugfix remove race condition when a custom resource did change timestamp during compilation
- bugfix variable property did not work on objects variable in template
- bugfix smarty_make_timestamp() failed to process DateTime objects properly
@@ -2159,7 +2272,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- optimize smarty_modified_escape for hex, hexentity, decentity.
28/12/2010
-- changed $tpl_vars, $config_vars and $parent to belong to Smarty_Internal_Data
+- changed $tpl_vars, $config_vars and $parent to belong to \Smarty\Data
- added Smarty::registerCacheResource() for dynamic cache resource object registration
27/12/2010
diff --git a/vendor/smarty/smarty/CONTRIBUTING.md b/vendor/smarty/smarty/CONTRIBUTING.md
new file mode 100644
index 000000000..8dfdf32b2
--- /dev/null
+++ b/vendor/smarty/smarty/CONTRIBUTING.md
@@ -0,0 +1,119 @@
+# Contributing to Smarty
+
+First off, thanks for taking the time to contribute! ❤️
+
+> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:
+> - Star the project
+> - Tell a friend about it
+> - Refer this project in your project's readme
+> - Mention the project at local meetups and tell your friends/colleagues
+
+## I Have a Question
+
+> If you want to ask a question, we assume that you have read the available [Documentation](https://smarty-php.github.io/smarty).
+
+Before you ask a question, it is best to search for existing [Issues](https://github.com/smarty-php/smarty/issues) that might help you.
+In case you have found a suitable issue and still need clarification, you can write your question in this issue.
+It is also advisable to search the internet for answers first.
+
+If you then still feel the need to ask a question and need clarification, we recommend the following:
+
+- [Open an Issue](https://github.com/smarty-php/smarty/issues/new).
+- Provide as much context as you can about what you're running into.
+- Provide Smarty and PHP versions
+
+We will then take care of the issue as soon as possible.
+
+## I Want To Contribute
+
+> ### Legal Notice
+> When contributing to this project, you must agree that you have authored 100% of the content,
+> that you have the necessary rights to the content and that the content you contribute may be provided under the project license.
+
+### Reporting Bugs
+
+#### Before Submitting a Bug Report
+
+A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to
+investigate carefully, collect information and describe the issue in detail in your report. Please complete the
+following steps in advance to help us fix any potential bug as fast as possible.
+
+- Make sure that you are using the latest version.
+- Determine if your bug is really a bug and not an error on your side. (Make sure that you have read the [documentation](https://smarty-php.github.io/smarty). If you are looking for support, you might want to check [this section](#i-have-a-question)).
+- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/smarty-php/smarty/issues?q=label%3Abug).
+- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue.
+- Collect information about the bug:
+ - For an Exception: please provide the Stack trace
+ - OS (Windows, Linux, macOS)
+ - PHP version
+ - Smarty version
+ - A minimal snippet of (your) code that triggers the bug
+ - Expected output versus actual output
+ - Can you reliably reproduce the issue? And can you also reproduce it with older versions?
+
+#### How Do I Submit a Good Bug Report?
+
+> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public.
+> For sensitive bugs, please see [SECURITY.md](SECURITY.md).
+
+We use GitHub issues to track bugs and errors. If you run into an issue with the project:
+
+- Open an [Issue](https://github.com/smarty-php/smarty/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.)
+- Explain the behavior you would expect and the actual behavior.
+- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case.
+- Provide the information you collected in the previous section.
+
+Once it's filed:
+
+- The project team will label the issue accordingly.
+- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced.
+- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be implemented by someone.
+
+
+
+### Suggesting Enhancements
+
+This section guides you through submitting an enhancement suggestion for CONTRIBUTING.md, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.
+
+
+#### Before Submitting an Enhancement
+
+- Make sure that you are using the latest version.
+- Read the [documentation](https://smarty-php.github.io/smarty) carefully and find out if the functionality is already covered, maybe by an individual configuration.
+- Perform a [search](https://github.com/smarty-php/smarty/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
+- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library.
+
+
+#### How Do I Submit a Good Enhancement Suggestion?
+
+Enhancement suggestions are tracked as [GitHub issues](https://github.com/smarty-php/smarty/issues).
+
+- Use a **clear and descriptive title** for the issue to identify the suggestion.
+- Provide a **step-by-step description of the suggested enhancement** in as many details as possible.
+- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you.
+- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux.
+- **Explain why this enhancement would be useful** to most CONTRIBUTING.md users. You may also want to point out the other projects that solved it better and which could serve as inspiration.
+
+
+### Improving The Documentation
+
+The [docs](docs/index.md) are written in markdown, configured in [mkdocs.yml](mkdocs.yml) and published
+to [GitHub pages](https://smarty-php.github.io/smarty) using [mkdocs](https://www.mkdocs.org/) and [mike](https://github.com/jimporter/mike).
+
+To preview the docs while you are writing, run:
+```bash
+mkdocs serve
+```
+This should launch a local web server and give you a link to open in your browser.
+
+When you are finished, commit your changes and provide a [Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request).
+
+#### Publishing the docs
+If you are a maintainer, you can publish the document using [mike](https://github.com/jimporter/mike). Make sure you provide the correct version.
+
+```bash
+mike deploy 5.x
+```
+
+## Attribution
+This guide is based on the **contributing.md**. [Make your own](https://contributing.md/)!
diff --git a/vendor/smarty/smarty/Makefile b/vendor/smarty/smarty/Makefile
new file mode 100644
index 000000000..38afdbf1b
--- /dev/null
+++ b/vendor/smarty/smarty/Makefile
@@ -0,0 +1,19 @@
+all: lexers parsers
+
+lexers: src/Lexer/ConfigfileLexer.php src/Lexer/TemplateLexer.php
+parsers: src/Parser/ConfigfileParser.php src/Parser/TemplateParser.php
+
+src/Lexer/ConfigfileLexer.php: src/Lexer/ConfigfileLexer.plex
+ php ./utilities/make-lexer.php src/Lexer/ConfigfileLexer.plex src/Lexer/ConfigfileLexer.php
+
+src/Lexer/TemplateLexer.php: src/Lexer/TemplateLexer.plex
+ php ./utilities/make-lexer.php src/Lexer/TemplateLexer.plex src/Lexer/TemplateLexer.php
+
+src/Parser/ConfigfileParser.php: src/Parser/ConfigfileParser.y
+ php ./utilities/make-parser.php src/Parser/ConfigfileParser.y src/Parser/ConfigfileParser.php
+
+src/Parser/TemplateParser.php: src/Parser/TemplateParser.y
+ php ./utilities/make-parser.php src/Parser/TemplateParser.y src/Parser/TemplateParser.php
+
+clean:
+ rm -f src/Lexer/ConfigfileLexer.php src/Lexer/TemplateLexer.php src/Parser/ConfigfileParser.php src/Parser/TemplateParser.php \ No newline at end of file
diff --git a/vendor/smarty/smarty/README.md b/vendor/smarty/smarty/README.md
index 9b8706d45..755d73ea0 100644
--- a/vendor/smarty/smarty/README.md
+++ b/vendor/smarty/smarty/README.md
@@ -7,7 +7,7 @@ Smarty is a template engine for PHP, facilitating the separation of presentation
Read the [documentation](https://smarty-php.github.io/smarty/) to find out how to use it.
## Requirements
-Smarty can be run with PHP 7.1 to PHP 8.3.
+Smarty v5 can be run with PHP 7.2 to PHP 8.4.
## Installation
Smarty versions 3.1.11 or later can be installed with [Composer](https://getcomposer.org/).
diff --git a/vendor/smarty/smarty/SECURITY.md b/vendor/smarty/smarty/SECURITY.md
index 80b5ef5c8..9685c254f 100644
--- a/vendor/smarty/smarty/SECURITY.md
+++ b/vendor/smarty/smarty/SECURITY.md
@@ -2,13 +2,13 @@
## Supported Versions
-Smarty currently supports the latest minor version of Smarty 3 and Smarty 4.
+Smarty currently supports the latest minor version of Smarty 4 and Smarty 5.
| Version | Supported |
|---------|--------------------|
+| 5.0.x | :white_check_mark: |
| 4.3.x | :white_check_mark: |
-| 3.1.x | :white_check_mark: |
-| < 3.1 | :x: |
+| < 4.3 | :x: |
## Reporting a Vulnerability
diff --git a/vendor/smarty/smarty/TODO.txt b/vendor/smarty/smarty/TODO.txt
new file mode 100644
index 000000000..aabbf6543
--- /dev/null
+++ b/vendor/smarty/smarty/TODO.txt
@@ -0,0 +1,32 @@
+# @TODO
+
+## CI-building optimization
+- compiled & cached templates should not contain references to local filesystem paths. Add an optional rootpath param
+ to `(add|set)TemplateDir` or as a separate method. Make it default to `getcwd()`. If a relative path is passed to
+ `(add|set)TemplateDir`, prefix it with the rootpath at runtime, but do not store the path.
+
+## Review direct variable property access
+- review ->value{$index} in ForTag
+
+## include inline
+- Re-introduce merge_compiled_includes and the {include inline} attribute?
+
+## Output buffering
+- Fix ob_ output buffering commands being scattered around the codebase
+
+## Review public static vars
+- such as _CHARSET and _IS_WINDOWS
+
+## Block / inheritance
+- Consider phasing out $smarty.block.child as this reverses the inheritance hierarchy and might cause infinite loops
+ when combined with $smarty.block.parent
+
+## Plugin system
+- fix template security checks in one place in compiler
+
+## Beatify output
+- compiled templates could be proper classes, possibly using [nette/php-generator](https://packagist.org/packages/nette/php-generator)
+
+## Unrelated / other
+- review (and avoid) use of 'clone' keyword
+- what is 'user literal support', why are unit tests skipped?
diff --git a/vendor/smarty/smarty/composer.json b/vendor/smarty/smarty/composer.json
index 165bfd2a1..87d865d78 100644
--- a/vendor/smarty/smarty/composer.json
+++ b/vendor/smarty/smarty/composer.json
@@ -30,20 +30,24 @@
"forum": "https://github.com/smarty-php/smarty/discussions"
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.27"
},
"autoload": {
- "classmap": [
- "libs/"
+ "psr-4" : {
+ "Smarty\\" : "src/"
+ },
+ "files": [
+ "src/functions.php"
]
},
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "5.0.x-dev"
}
},
"require-dev": {
"phpunit/phpunit": "^8.5 || ^7.5",
- "smarty/smarty-lexer": "^3.1"
+ "smarty/smarty-lexer": "^4.0.2"
}
}
diff --git a/vendor/smarty/smarty/demo/index.php b/vendor/smarty/smarty/demo/index.php
index 3aed37168..705478ff3 100644
--- a/vendor/smarty/smarty/demo/index.php
+++ b/vendor/smarty/smarty/demo/index.php
@@ -2,11 +2,11 @@
/**
* Example Application
*
- * @package Example-application
+
*/
-require '../libs/Smarty.class.php';
-$smarty = new Smarty;
-//$smarty->force_compile = true;
+
+$smarty = new \Smarty\Smarty;
+
$smarty->debugging = true;
$smarty->caching = true;
$smarty->cache_lifetime = 120;
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php b/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php
deleted file mode 100644
index 7867cc598..000000000
--- a/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-
-/**
- * APC CacheResource
- * CacheResource Implementation based on the KeyValueStore API to use
- * memcache as the storage resource for Smarty's output caching.
- * *
- *
- * @package CacheResource-examples
- * @author Uwe Tews
- */
-class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore
-{
- /**
- * Smarty_CacheResource_Apc constructor.
- *
- * @throws \Exception
- */
- public function __construct()
- {
- // test if APC is present
- if (!function_exists('apc_cache_info')) {
- throw new Exception('APC Template Caching Error: APC is not installed');
- }
- }
-
- /**
- * Read values for a set of keys from cache
- *
- * @param array $keys list of keys to fetch
- *
- * @return array list of values with the given keys used as indexes
- * @return boolean true on success, false on failure
- */
- protected function read(array $keys)
- {
- $_res = array();
- $res = apc_fetch($keys);
- foreach ($res as $k => $v) {
- $_res[ $k ] = $v;
- }
- return $_res;
- }
-
- /**
- * Save values for a set of keys to cache
- *
- * @param array $keys list of values to save
- * @param int $expire expiration time
- *
- * @return boolean true on success, false on failure
- */
- protected function write(array $keys, $expire = null)
- {
- foreach ($keys as $k => $v) {
- apc_store($k, $v, $expire);
- }
- return true;
- }
-
- /**
- * Remove values from cache
- *
- * @param array $keys list of keys to delete
- *
- * @return boolean true on success, false on failure
- */
- protected function delete(array $keys)
- {
- foreach ($keys as $k) {
- apc_delete($k);
- }
- return true;
- }
-
- /**
- * Remove *all* values from cache
- *
- * @return boolean true on success, false on failure
- */
- protected function purge()
- {
- return apc_clear_cache('user');
- }
-}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php b/vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php
deleted file mode 100644
index 71fe9d3f1..000000000
--- a/vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-
-/**
- * Memcache CacheResource
- * CacheResource Implementation based on the KeyValueStore API to use
- * memcache as the storage resource for Smarty's output caching.
- * Note that memcache has a limitation of 256 characters per cache-key.
- * To avoid complications all cache-keys are translated to a sha1 hash.
- *
- * @package CacheResource-examples
- * @author Rodney Rehm
- */
-class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore
-{
- /**
- * memcache instance
- *
- * @var Memcache
- */
- protected $memcache = null;
-
- /**
- * Smarty_CacheResource_Memcache constructor.
- */
- public function __construct()
- {
- if (class_exists('Memcached')) {
- $this->memcache = new Memcached();
- } else {
- $this->memcache = new Memcache();
- }
- $this->memcache->addServer('127.0.0.1', 11211);
- }
-
- /**
- * Read values for a set of keys from cache
- *
- * @param array $keys list of keys to fetch
- *
- * @return array list of values with the given keys used as indexes
- * @return boolean true on success, false on failure
- */
- protected function read(array $keys)
- {
- $res = array();
- foreach ($keys as $key) {
- $k = sha1($key);
- $res[$key] = $this->memcache->get($k);
- }
- return $res;
- }
-
- /**
- * Save values for a set of keys to cache
- *
- * @param array $keys list of values to save
- * @param int $expire expiration time
- *
- * @return boolean true on success, false on failure
- */
- protected function write(array $keys, $expire = null)
- {
- foreach ($keys as $k => $v) {
- $k = sha1($k);
- if (class_exists('Memcached')) {
- $this->memcache->set($k, $v, $expire);
- } else {
- $this->memcache->set($k, $v, 0, $expire);
- }
- }
- return true;
- }
-
- /**
- * Remove values from cache
- *
- * @param array $keys list of keys to delete
- *
- * @return boolean true on success, false on failure
- */
- protected function delete(array $keys)
- {
- foreach ($keys as $k) {
- $k = sha1($k);
- $this->memcache->delete($k);
- }
- return true;
- }
-
- /**
- * Remove *all* values from cache
- *
- * @return boolean true on success, false on failure
- */
- protected function purge()
- {
- return $this->memcache->flush();
- }
-}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php b/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php
deleted file mode 100644
index c5037eb13..000000000
--- a/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-
-/**
- * MySQL CacheResource
- * CacheResource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's output caching.
- * Table definition:
- * <pre>CREATE TABLE IF NOT EXISTS `output_cache` (
- * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash',
- * `name` VARCHAR(250) NOT NULL,
- * `cache_id` VARCHAR(250) NULL DEFAULT NULL,
- * `compile_id` VARCHAR(250) NULL DEFAULT NULL,
- * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- * `content` LONGTEXT NOT NULL,
- * PRIMARY KEY (`id`),
- * INDEX(`name`),
- * INDEX(`cache_id`),
- * INDEX(`compile_id`),
- * INDEX(`modified`)
- * ) ENGINE = InnoDB;</pre>
- *
- * @package CacheResource-examples
- * @author Rodney Rehm
- */
-class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom
-{
- /**
- * @var \PDO
- */
- protected $db;
-
- /**
- * @var \PDOStatement
- */
- protected $fetch;
-
- /**
- * @var \PDOStatement
- */
- protected $fetchTimestamp;
-
- /**
- * @var \PDOStatement
- */
- protected $save;
-
- /**
- * Smarty_CacheResource_Mysql constructor.
- *
- * @throws \SmartyException
- */
- public function __construct()
- {
- try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
- } catch (PDOException $e) {
- throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
- }
- $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id');
- $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id');
- $this->save = $this->db->prepare(
- 'REPLACE INTO output_cache (id, name, cache_id, compile_id, content)
- VALUES (:id, :name, :cache_id, :compile_id, :content)'
- );
- }
-
- /**
- * 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)
- *
- * @return void
- */
- protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
- {
- $this->fetch->execute(array('id' => $id));
- $row = $this->fetch->fetch();
- $this->fetch->closeCursor();
- if ($row) {
- $content = $row[ 'content' ];
- $mtime = strtotime($row[ 'modified' ]);
- } else {
- $content = null;
- $mtime = null;
- }
- }
-
- /**
- * Fetch cached content's modification timestamp from data source
- *
- * @note 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
- *
- * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
- */
- protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
- {
- $this->fetchTimestamp->execute(array('id' => $id));
- $mtime = strtotime($this->fetchTimestamp->fetchColumn());
- $this->fetchTimestamp->closeCursor();
- return $mtime;
- }
-
- /**
- * 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 time in seconds or null
- * @param string $content content to cache
- *
- * @return boolean success
- */
- protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
- {
- $this->save->execute(
- array('id' => $id,
- 'name' => $name,
- 'cache_id' => $cache_id,
- 'compile_id' => $compile_id,
- 'content' => $content,)
- );
- return !!$this->save->rowCount();
- }
-
- /**
- * 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 or null
- *
- * @return integer number of deleted caches
- */
- protected function delete($name, $cache_id, $compile_id, $exp_time)
- {
- // delete the whole cache
- if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
- // returning the number of deleted caches would require a second query to count them
- $query = $this->db->query('TRUNCATE TABLE output_cache');
- return -1;
- }
- // build the filter
- $where = array();
- // equal test name
- if ($name !== null) {
- $where[] = 'name = ' . $this->db->quote($name);
- }
- // equal test compile_id
- if ($compile_id !== null) {
- $where[] = 'compile_id = ' . $this->db->quote($compile_id);
- }
- // range test expiration time
- if ($exp_time !== null) {
- $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)';
- }
- // equal test cache_id and match sub-groups
- if ($cache_id !== null) {
- $where[] =
- '(cache_id = ' .
- $this->db->quote($cache_id) .
- ' OR cache_id LIKE ' .
- $this->db->quote($cache_id . '|%') .
- ')';
- }
- // run delete query
- $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where));
- return $query->rowCount();
- }
-}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php
deleted file mode 100644
index ae3ebbf7d..000000000
--- a/vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php
+++ /dev/null
@@ -1,346 +0,0 @@
-<?php
-
-/**
- * PDO Cache Handler
- * Allows you to store Smarty Cache files into your db.
- * Example table :
- * CREATE TABLE `smarty_cache` (
- * `id` char(40) NOT NULL COMMENT 'sha1 hash',
- * `name` varchar(250) NOT NULL,
- * `cache_id` varchar(250) DEFAULT NULL,
- * `compile_id` varchar(250) DEFAULT NULL,
- * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- * `expire` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- * `content` mediumblob NOT NULL,
- * PRIMARY KEY (`id`),
- * KEY `name` (`name`),
- * KEY `cache_id` (`cache_id`),
- * KEY `compile_id` (`compile_id`),
- * KEY `modified` (`modified`),
- * KEY `expire` (`expire`)
- * ) ENGINE=InnoDB
- * Example usage :
- * $cnx = new PDO("mysql:host=localhost;dbname=mydb", "username", "password");
- * $smarty->setCachingType('pdo');
- * $smarty->loadPlugin('Smarty_CacheResource_Pdo');
- * $smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdo($cnx, 'smarty_cache'));
- *
- * @author Beno!t POLASZEK - 2014
- */
-class Smarty_CacheResource_Pdo extends Smarty_CacheResource_Custom
-{
- /**
- * @var string[]
- */
- protected $fetchStatements = array('default' => 'SELECT %2$s
- FROM %1$s
- WHERE 1
- AND id = :id
- AND cache_id IS NULL
- AND compile_id IS NULL',
- 'withCacheId' => 'SELECT %2$s
- FROM %1$s
- WHERE 1
- AND id = :id
- AND cache_id = :cache_id
- AND compile_id IS NULL',
- 'withCompileId' => 'SELECT %2$s
- FROM %1$s
- WHERE 1
- AND id = :id
- AND compile_id = :compile_id
- AND cache_id IS NULL',
- 'withCacheIdAndCompileId' => 'SELECT %2$s
- FROM %1$s
- WHERE 1
- AND id = :id
- AND cache_id = :cache_id
- AND compile_id = :compile_id');
-
- /**
- * @var string
- */
- protected $insertStatement = 'INSERT INTO %s
-
- SET id = :id,
- name = :name,
- cache_id = :cache_id,
- compile_id = :compile_id,
- modified = CURRENT_TIMESTAMP,
- expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND),
- content = :content
-
- ON DUPLICATE KEY UPDATE
- name = :name,
- cache_id = :cache_id,
- compile_id = :compile_id,
- modified = CURRENT_TIMESTAMP,
- expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND),
- content = :content';
-
- /**
- * @var string
- */
- protected $deleteStatement = 'DELETE FROM %1$s WHERE %2$s';
-
- /**
- * @var string
- */
- protected $truncateStatement = 'TRUNCATE TABLE %s';
-
- /**
- * @var string
- */
- protected $fetchColumns = 'modified, content';
-
- /**
- * @var string
- */
- protected $fetchTimestampColumns = 'modified';
-
- /**
- * @var \PDO
- */
- protected $pdo;
-
- /**
- * @var
- */
- protected $table;
-
- /**
- * @var null
- */
- protected $database;
-
- /**
- * Constructor
- *
- * @param PDO $pdo PDO : active connection
- * @param string $table : table (or view) name
- * @param string $database : optional - if table is located in another db
- *
- * @throws \SmartyException
- */
- public function __construct(PDO $pdo, $table, $database = null)
- {
- if (is_null($table)) {
- throw new SmartyException("Table name for caching can't be null");
- }
- $this->pdo = $pdo;
- $this->table = $table;
- $this->database = $database;
- $this->fillStatementsWithTableName();
- }
-
- /**
- * Fills the table name into the statements.
- *
- * @return $this Current Instance
- * @access protected
- */
- protected function fillStatementsWithTableName()
- {
- foreach ($this->fetchStatements as &$statement) {
- $statement = sprintf($statement, $this->getTableName(), '%s');
- }
- $this->insertStatement = sprintf($this->insertStatement, $this->getTableName());
- $this->deleteStatement = sprintf($this->deleteStatement, $this->getTableName(), '%s');
- $this->truncateStatement = sprintf($this->truncateStatement, $this->getTableName());
- return $this;
- }
-
- /**
- * Gets the fetch statement, depending on what you specify
- *
- * @param string $columns : the column(s) name(s) you want to retrieve from the database
- * @param string $id unique cache content identifier
- * @param string|null $cache_id cache id
- * @param string|null $compile_id compile id
- *
- * @access protected
- * @return \PDOStatement
- */
- protected function getFetchStatement($columns, $id, $cache_id = null, $compile_id = null)
- {
- $args = array();
- if (!is_null($cache_id) && !is_null($compile_id)) {
- $query = $this->fetchStatements[ 'withCacheIdAndCompileId' ] and
- $args = array('id' => $id, 'cache_id' => $cache_id, 'compile_id' => $compile_id);
- } elseif (is_null($cache_id) && !is_null($compile_id)) {
- $query = $this->fetchStatements[ 'withCompileId' ] and
- $args = array('id' => $id, 'compile_id' => $compile_id);
- } elseif (!is_null($cache_id) && is_null($compile_id)) {
- $query = $this->fetchStatements[ 'withCacheId' ] and $args = array('id' => $id, 'cache_id' => $cache_id);
- } else {
- $query = $this->fetchStatements[ 'default' ] and $args = array('id' => $id);
- }
- $query = sprintf($query, $columns);
- $stmt = $this->pdo->prepare($query);
- foreach ($args as $key => $value) {
- $stmt->bindValue($key, $value);
- }
- return $stmt;
- }
-
- /**
- * fetch cached content and its modification time from data source
- *
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string|null $cache_id cache id
- * @param string|null $compile_id compile id
- * @param string $content cached content
- * @param integer $mtime cache modification timestamp (epoch)
- *
- * @return void
- * @access protected
- */
- protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
- {
- $stmt = $this->getFetchStatement($this->fetchColumns, $id, $cache_id, $compile_id);
- $stmt->execute();
- $row = $stmt->fetch();
- $stmt->closeCursor();
- if ($row) {
- $content = $this->outputContent($row[ 'content' ]);
- $mtime = strtotime($row[ 'modified' ]);
- } else {
- $content = null;
- $mtime = null;
- }
- }
-
- /**
- * 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|null $cache_id cache id
- * @param string|null $compile_id compile id
- *
- * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
- * @access protected
- */
- // protected function fetchTimestamp($id, $name, $cache_id = null, $compile_id = null) {
- // $stmt = $this->getFetchStatement($this->fetchTimestampColumns, $id, $cache_id, $compile_id);
- // $stmt -> execute();
- // $mtime = strtotime($stmt->fetchColumn());
- // $stmt -> closeCursor();
- // return $mtime;
- // }
- /**
- * Save content to cache
- *
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string|null $cache_id cache id
- * @param string|null $compile_id compile id
- * @param integer|null $exp_time seconds till expiration time in seconds or null
- * @param string $content content to cache
- *
- * @return boolean success
- * @access protected
- */
- protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
- {
- $stmt = $this->pdo->prepare($this->insertStatement);
- $stmt->bindValue('id', $id);
- $stmt->bindValue('name', $name);
- $stmt->bindValue('cache_id', $cache_id, (is_null($cache_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR);
- $stmt->bindValue('compile_id', $compile_id, (is_null($compile_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR);
- $stmt->bindValue('expire', (int)$exp_time, PDO::PARAM_INT);
- $stmt->bindValue('content', $this->inputContent($content));
- $stmt->execute();
- return !!$stmt->rowCount();
- }
-
- /**
- * Encodes the content before saving to database
- *
- * @param string $content
- *
- * @return string $content
- * @access protected
- */
- protected function inputContent($content)
- {
- return $content;
- }
-
- /**
- * Decodes the content before saving to database
- *
- * @param string $content
- *
- * @return string $content
- * @access protected
- */
- protected function outputContent($content)
- {
- return $content;
- }
-
- /**
- * Delete content from cache
- *
- * @param string|null $name template name
- * @param string|null $cache_id cache id
- * @param string|null $compile_id compile id
- * @param integer|null|-1 $exp_time seconds till expiration or null
- *
- * @return integer number of deleted caches
- * @access protected
- */
- protected function delete($name = null, $cache_id = null, $compile_id = null, $exp_time = null)
- {
- // delete the whole cache
- if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
- // returning the number of deleted caches would require a second query to count them
- $this->pdo->query($this->truncateStatement);
- return -1;
- }
- // build the filter
- $where = array();
- // equal test name
- if ($name !== null) {
- $where[] = 'name = ' . $this->pdo->quote($name);
- }
- // equal test cache_id and match sub-groups
- if ($cache_id !== null) {
- $where[] =
- '(cache_id = ' .
- $this->pdo->quote($cache_id) .
- ' OR cache_id LIKE ' .
- $this->pdo->quote($cache_id . '|%') .
- ')';
- }
- // equal test compile_id
- if ($compile_id !== null) {
- $where[] = 'compile_id = ' . $this->pdo->quote($compile_id);
- }
- // for clearing expired caches
- if ($exp_time === Smarty::CLEAR_EXPIRED) {
- $where[] = 'expire < CURRENT_TIMESTAMP';
- } // range test expiration time
- elseif ($exp_time !== null) {
- $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)';
- }
- // run delete query
- $query = $this->pdo->query(sprintf($this->deleteStatement, join(' AND ', $where)));
- return $query->rowCount();
- }
-
- /**
- * Gets the formatted table name
- *
- * @return string
- * @access protected
- */
- protected function getTableName()
- {
- return (is_null($this->database)) ? "`{$this->table}`" : "`{$this->database}`.`{$this->table}`";
- }
-}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php
deleted file mode 100644
index 5560b9e39..000000000
--- a/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-require_once 'cacheresource.pdo.php';
-
-/**
- * PDO Cache Handler with GZIP support
- * Example usage :
- * $cnx = new PDO("mysql:host=localhost;dbname=mydb", "username", "password");
- * $smarty->setCachingType('pdo_gzip');
- * $smarty->loadPlugin('Smarty_CacheResource_Pdo_Gzip');
- * $smarty->registerCacheResource('pdo_gzip', new Smarty_CacheResource_Pdo_Gzip($cnx, 'smarty_cache'));
- *
- * @require Smarty_CacheResource_Pdo class
- * @author Beno!t POLASZEK - 2014
- */
-class Smarty_CacheResource_Pdo_Gzip extends Smarty_CacheResource_Pdo
-{
- /**
- * Encodes the content before saving to database
- *
- * @param string $content
- *
- * @return string $content
- * @access protected
- */
- protected function inputContent($content)
- {
- return gzdeflate($content);
- }
-
- /**
- * Decodes the content before saving to database
- *
- * @param string $content
- *
- * @return string $content
- * @access protected
- */
- protected function outputContent($content)
- {
- return gzinflate($content);
- }
-}
diff --git a/vendor/smarty/smarty/demo/plugins/resource.extendsall.php b/vendor/smarty/smarty/demo/plugins/resource.extendsall.php
deleted file mode 100644
index a547d41db..000000000
--- a/vendor/smarty/smarty/demo/plugins/resource.extendsall.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-/**
- * Extends All Resource
- * Resource Implementation modifying the extends-Resource to walk
- * through the template_dirs and inherit all templates of the same name
- *
- * @package Resource-examples
- * @author Rodney Rehm
- */
-class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends
-{
- /**
- * 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)
- {
- $uid = '';
- $sources = array();
- $timestamp = 0;
- foreach ($source->smarty->getTemplateDir() as $key => $directory) {
- try {
- $s = Smarty_Resource::source(null, $source->smarty, 'file:' . '[' . $key . ']' . $source->name);
- if (!$s->exists) {
- continue;
- }
- $sources[ $s->uid ] = $s;
- $uid .= $s->filepath;
- $timestamp = $s->timestamp > $timestamp ? $s->timestamp : $timestamp;
- } catch (SmartyException $e) {
- }
- }
- if (!$sources) {
- $source->exists = false;
- return;
- }
- $sources = array_reverse($sources, true);
- reset($sources);
- $s = current($sources);
- $source->components = $sources;
- $source->filepath = $s->filepath;
- $source->uid = sha1($uid . $source->smarty->_joined_template_dir);
- $source->exists = true;
- $source->timestamp = $timestamp;
- }
-
- /**
- * Disable timestamp checks for extendsall resource.
- * The individual source components will be checked.
- *
- * @return bool false
- */
- public function checkTimestamps()
- {
- return false;
- }
-}
diff --git a/vendor/smarty/smarty/demo/plugins/resource.mysql.php b/vendor/smarty/smarty/demo/plugins/resource.mysql.php
deleted file mode 100644
index 95a3c2baf..000000000
--- a/vendor/smarty/smarty/demo/plugins/resource.mysql.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-/**
- * MySQL Resource
- * Resource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's templates and configs.
- * Table definition:
- * <pre>CREATE TABLE IF NOT EXISTS `templates` (
- * `name` varchar(100) NOT NULL,
- * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- * `source` text,
- * PRIMARY KEY (`name`)
- * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- * Demo data:
- * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello
- * world"}{$x}');</pre>
- *
- *
- * @package Resource-examples
- * @author Rodney Rehm
- */
-class Smarty_Resource_Mysql extends Smarty_Resource_Custom
-{
- /**
- * PDO instance
- *
- * @var \PDO
- */
- protected $db;
-
- /**
- * prepared fetch() statement
- *
- * @var \PDOStatement
- */
- protected $fetch;
-
- /**
- * prepared fetchTimestamp() statement
- *
- * @var \PDOStatement
- */
- protected $mtime;
-
- /**
- * Smarty_Resource_Mysql constructor.
- *
- * @throws \SmartyException
- */
- public function __construct()
- {
- try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
- } catch (PDOException $e) {
- throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
- }
- $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
- $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
- }
-
- /**
- * Fetch a template and its modification time from database
- *
- * @param string $name template name
- * @param string $source template source
- * @param integer $mtime template modification timestamp (epoch)
- *
- * @return void
- */
- protected function fetch($name, &$source, &$mtime)
- {
- $this->fetch->execute(array('name' => $name));
- $row = $this->fetch->fetch();
- $this->fetch->closeCursor();
- if ($row) {
- $source = $row[ 'source' ];
- $mtime = strtotime($row[ 'modified' ]);
- } else {
- $source = null;
- $mtime = null;
- }
- }
-
- /**
- * Fetch a template's modification time from database
- *
- * @note implementing this method is optional. Only implement it if modification times can be accessed faster than
- * loading the comple template source.
- *
- * @param string $name template name
- *
- * @return integer timestamp (epoch) the template was modified
- */
- protected function fetchTimestamp($name)
- {
- $this->mtime->execute(array('name' => $name));
- $mtime = $this->mtime->fetchColumn();
- $this->mtime->closeCursor();
- return strtotime($mtime);
- }
-}
diff --git a/vendor/smarty/smarty/demo/plugins/resource.mysqls.php b/vendor/smarty/smarty/demo/plugins/resource.mysqls.php
deleted file mode 100644
index 148a8dd61..000000000
--- a/vendor/smarty/smarty/demo/plugins/resource.mysqls.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-/**
- * MySQL Resource
- * Resource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's templates and configs.
- * Note that this MySQL implementation fetches the source and timestamps in
- * a single database query, instead of two separate like resource.mysql.php does.
- * Table definition:
- * <pre>CREATE TABLE IF NOT EXISTS `templates` (
- * `name` varchar(100) NOT NULL,
- * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- * `source` text,
- * PRIMARY KEY (`name`)
- * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- * Demo data:
- * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello
- * world"}{$x}');</pre>
- *
- *
- * @package Resource-examples
- * @author Rodney Rehm
- */
-class Smarty_Resource_Mysqls extends Smarty_Resource_Custom
-{
- /**
- * PDO instance
- *
- * @var \PDO
- */
- protected $db;
-
- /**
- * prepared fetch() statement
- *
- * @var \PDOStatement
- */
- protected $fetch;
-
- /**
- * Smarty_Resource_Mysqls constructor.
- *
- * @throws \SmartyException
- */
- public function __construct()
- {
- try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
- } catch (PDOException $e) {
- throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
- }
- $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
- }
-
- /**
- * Fetch a template and its modification time from database
- *
- * @param string $name template name
- * @param string $source template source
- * @param integer $mtime template modification timestamp (epoch)
- *
- * @return void
- */
- protected function fetch($name, &$source, &$mtime)
- {
- $this->fetch->execute(array('name' => $name));
- $row = $this->fetch->fetch();
- $this->fetch->closeCursor();
- if ($row) {
- $source = $row[ 'source' ];
- $mtime = strtotime($row[ 'modified' ]);
- } else {
- $source = null;
- $mtime = null;
- }
- }
-}
diff --git a/vendor/smarty/smarty/demo/templates/index.tpl b/vendor/smarty/smarty/demo/templates/index.tpl
index 1fbb6d379..1a0f431bb 100644
--- a/vendor/smarty/smarty/demo/templates/index.tpl
+++ b/vendor/smarty/smarty/demo/templates/index.tpl
@@ -11,8 +11,6 @@
The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
- The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME}
-
Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME}
The value of {ldelim}$Name{rdelim} is <b>{$Name}</b>
diff --git a/vendor/smarty/smarty/docs/api/basics.md b/vendor/smarty/smarty/docs/api/basics.md
new file mode 100644
index 000000000..ef5292dab
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/basics.md
@@ -0,0 +1,93 @@
+# Basics
+
+## Installation
+For installation instructies, please see the [getting started section](../getting-started.md).
+
+## Rendering a template
+Here's how you create an instance of Smarty in your PHP scripts:
+```php
+<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+```
+
+You now have a Smarty object that you can use to render templates.
+
+```php
+<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('string:The current smarty version is: {$smarty.version}.');
+// or
+echo $smarty->fetch('string:The current smarty version is: {$smarty.version}.');
+```
+
+## Using file-based templates
+You probably want to manage your templates as files. Create a subdirectory called 'templates' and
+then configure Smarty to use that:
+
+```php
+<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setTemplateDir(__DIR__ . '/templates');
+```
+
+Say you have a template file called 'version.tpl', stored in the 'templates' directory like this:
+```smarty
+<h1>Hi</h1>
+The current smarty version is: {$smarty.version|escape}.
+```
+
+You can now render this, using:
+```php
+<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setTemplateDir(__DIR__ . '/templates');
+$smarty->display('version.tpl');
+```
+
+## Assigning variables
+
+Templates start to become really useful once you add variables to the mix.
+
+Create a template called 'footer.tpl' in the 'templates' directory like this:
+```smarty
+<small>Copyright {$companyName|escape}</small>
+```
+
+Now assign a value to the 'companyName' variable and render your template like this:
+
+```php
+<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setTemplateDir(__DIR__ . '/templates');
+$smarty->assign('companyName', 'AC & ME Corp.');
+$smarty->display('footer.tpl');
+```
+
+Run this, and you will see:
+
+```html
+<small>Copyright AC &amp; ME Corp.</small>
+```
+
+Note how the [escape modifier](../designers/language-modifiers/language-modifier-escape.md)
+translated the `&` character into the proper HTML syntax `&amp;`.
+Read more about auto-escaping in the [next section](./configuring.md). \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/api/caching/basics.md b/vendor/smarty/smarty/docs/api/caching/basics.md
new file mode 100644
index 000000000..19c04c997
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/caching/basics.md
@@ -0,0 +1,184 @@
+# Caching
+
+Caching is used to speed up the rendering of a template by saving and re-using the output.
+
+If a cached version of the call is available, that is displayed instead of
+regenerating the output. Caching can speed things up tremendously,
+especially templates with longer computation times.
+
+Since templates can include or extend other templates, one
+cache file could conceivably be made up of several template files,
+config files, etc.
+
+> ** Note **
+>
+> Since templates are dynamic, it is important to be careful what you are
+> caching and for how long. For instance, if you are displaying the front
+> page of your website that does not change its content very often, it
+> might work well to cache this page for an hour or more. On the other
+> hand, if you are displaying a page with a timetable containing new
+> information by the minute, it would not make sense to cache this page.
+
+## Setting Up Caching
+
+The first thing to do is enable caching by calling `Smarty::setCaching()` with either
+`\Smarty\Smarty::CACHING_LIFETIME_CURRENT` or `\Smarty\Smarty::CACHING_LIFETIME_SAVED`.
+Or with `\Smarty\Smarty::CACHING_OFF` to disable caching again.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// enable caching, using the current lifetime (see below)
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// enable caching, using the lifetime set when the cache was saved (see below)
+$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
+
+// disable caching
+$smarty->setCaching(Smarty::CACHING_OFF);
+
+$smarty->display('index.tpl');
+```
+
+With caching enabled, the function call to `$smarty->display('index.tpl')` will
+render the template as usual, but also saves a copy of its output. On the
+next call to `$smarty->display('index.tpl')`, the cached copy will be used
+instead of rendering the template again.
+
+> **Note**
+>
+> By default, Smarty saved its caches as files in a dir called `cache` relative to the current
+> directory. The default directory can be changed using `$smarty->setCacheDir('/some/cache/dir');`
+> The files are named similar
+> to the template name. Although they end in the `.php` extension, they
+> are not intended to be directly executable. Do not edit these files!
+
+## Cache lifetime
+
+Each cached page has a limited lifetime. The default value is 3600
+seconds, or one hour. After that time expires, the cache is regenerated.
+
+You can change the lifetime as follows:
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+// or $smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
+
+// set the cache_lifetime to 5 minutes
+$smarty->setCacheLifetime(5 * 60);
+```
+
+Setting caching to a value of `\Smarty\Smarty::CACHING_LIFETIME_CURRENT` tells Smarty to use
+the current lifetime to determine if the cache has expired.
+
+A value of `\Smarty\Smarty::CACHING\_LIFETIME\_SAVED` tells Smarty to use the lifetime value at the time the
+cache was generated. This way you can set the just before rendering a template to have granular control over
+when that particular cache expires.
+
+An example:
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// retain current cache lifetime for each specific display call
+$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
+
+// set the cache_lifetime for index.tpl to 5 minutes
+$smarty->setCacheLifetime(300);
+$smarty->display('index.tpl');
+
+// set the cache_lifetime for home.tpl to 1 hour
+$smarty->setCacheLifetime(3600);
+$smarty->display('home.tpl');
+
+// NOTE: the following $cache_lifetime setting will not work when $caching
+// is set to Smarty::CACHING_LIFETIME_SAVED.
+// The cache lifetime for home.tpl has already been set
+// to 1 hour, and will no longer respect the value of $cache_lifetime.
+// The home.tpl cache will still expire after 1 hour.
+$smarty->setCacheLifetime(30); // 30 seconds
+$smarty->display('home.tpl');
+```
+
+## Compile check
+
+By default, every template file and config file that is involved with the cache file
+is checked for modification. If any of the files have been modified
+since the cache was generated, the cache is immediately regenerated.
+
+This is a computational overhead, so for optimum performance, disable this on a production environment:
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+$smarty->setCompileCheck(Smarty::COMPILECHECK_OFF);
+
+$smarty->display('index.tpl');
+```
+
+## Checking if a template is cached
+
+Smarty's `isCached() method can be used to test if a
+template has a valid cache or not. If you have a cached template that
+requires something like a database fetch, you can use this to skip that
+process.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+if (!$smarty->isCached('index.tpl')) {
+ // No cache available, do variable assignments here.
+ $smarty->assign('data', do_expensive_database_calls());
+}
+
+$smarty->display('index.tpl');
+```
+
+## Nocache-blocks
+You can keep parts of a page dynamic (disable caching) with the
+[`{nocache}{/nocache}`](../../designers/language-builtin-functions/language-function-nocache.md) block function,
+or by using the `nocache` parameter for most template functions.
+
+Let's say the whole page can be cached except for a banner that is
+displayed down the side of the page. By using a [`{nocache}{/nocache}`](../../designers/language-builtin-functions/language-function-nocache.md)
+block for the banner, you can
+keep this element dynamic within the cached content.
+
+## Clearing the cache
+You can clear all the cache files with Smarty's `clearAllCache()` method, or individual cache
+files with the `clearCache()` method.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// clear only cache for index.tpl
+$smarty->clearCache('index.tpl');
+
+// clear out all cache files
+$smarty->clearAllCache();
+
+// clear out all cache files older than one hour
+$smarty->clearAllCache(3600);
+
+// or, clear all expired caches
+$smarty->clearAllCache(Smarty::CLEAR_EXPIRED);
+```
+
+
diff --git a/vendor/smarty/smarty/docs/api/caching/custom-storage-layers.md b/vendor/smarty/smarty/docs/api/caching/custom-storage-layers.md
new file mode 100644
index 000000000..f43e724e6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/caching/custom-storage-layers.md
@@ -0,0 +1,36 @@
+# Custom cache storage layers
+
+As an alternative to using the default file-based caching mechanism, you
+can specify a custom cache implementation that will be used to read,
+write and clear cached files.
+
+With a custom cache implementation you could replace the slow filesystem by a
+faster storage engine, centralize the cache to be accessible to multiple
+servers.
+
+Smarty requires implementations to extend `\Smarty\Cacheresource\Base`, but encourages you to either extend
+`\Smarty\Cacheresource\Custom` or `\Smarty\Cacheresource\KeyValueStore`.
+
+- `\Smarty\Cacheresource\Custom` is a simple API directing all read, write,
+clear calls to your implementation. This API allows you to store
+wherever and however you deem fit.
+- `\Smarty\Cacheresource\KeyValueStore` allows you to turn any
+KeyValue-Store (like APC or Memcache) into a full-featured
+CacheResource implementation. Everything around deep
+cache-groups like "a|b|c" is being handled for you in a way that
+guarantees clearing the cache-group "a" will clear all nested groups
+as well - even though KeyValue-Stores don't allow this kind of
+hierarchy by nature.
+
+Custom CacheResources must be registered on
+runtime with `Smarty\Smarty::setCacheResource()`:
+
+```php
+<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setCacheResource(new My_CacheResource_Mysql());
+```
+
diff --git a/vendor/smarty/smarty/docs/api/caching/multiple-caches-per-template.md b/vendor/smarty/smarty/docs/api/caching/multiple-caches-per-template.md
new file mode 100644
index 000000000..c3da9d0a4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/caching/multiple-caches-per-template.md
@@ -0,0 +1,137 @@
+# Multiple caches per template
+
+## Introduction
+
+You can have multiple cache files for a single call to
+`display()` or `fetch()`.
+
+Let's say that
+a call to `$smarty->display('index.tpl')` may have several different output
+contents depending on some condition, and you want separate caches for
+each one. You can do this by passing a `$cache_id` as the second
+parameter to the function call:
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+$my_cache_id = (int) $_GET['article_id'];
+
+$smarty->display('index.tpl', $my_cache_id);
+```
+
+
+Above, we are passing the variable `$my_cache_id` to
+[`display()`](#api.display) as the `$cache_id`. For each unique value of
+`$my_cache_id`, a separate cache will be generated for `index.tpl`. In
+this example, `article_id` was passed in the URL and is used as the
+`$cache_id`.
+
+> **Note**
+>
+> Be very cautious when passing values from a client (web browser) into
+> Smarty or any PHP application. Although the above example of using the
+> article_id from the URL looks handy, it could have bad consequences.
+> The `$cache_id` is used to create a directory on the file system, so
+> if the user decided to write a script that sends random article_id's at a rapid pace,
+> this could possibly cause problems at the server level.
+> Be sure to sanitize any data passed in before using it. In this example, you might want to check if
+> the article_id is a valid ID in the database.
+
+Be sure to pass the same `$cache_id` as the second parameter to
+`isCached()` and `clearCache()`.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+$my_cache_id = (int) $_GET['article_id'];
+
+if (!$smarty->isCached('index.tpl', $my_cache_id)) {
+ // ...
+}
+
+$smarty->display('index.tpl', $my_cache_id);
+```
+
+## Clearing specific caches
+
+You can clear all caches for a particular `$cache_id` by passing NULL as
+the first parameter to `clearCache()`.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// clear all caches with "sports" as the $cache_id
+$smarty->clearCache(null, 'sports');
+
+$smarty->display('index.tpl', 'sports');
+```
+
+In this manner, you can "group" your caches together by giving them the
+same `$cache_id`.
+
+## Advanced cache grouping
+
+You can do more elaborate grouping by setting up `$cache_id` groups.
+This is accomplished by separating each sub-group with a vertical bar
+`|` in the `$cache_id` value. You can have as many sub-groups as you
+like.
+
+- You can think of cache groups like a directory hierarchy. For
+ instance, a cache group of `'a|b|c'` could be thought of as the
+ directory structure `'/a/b/c/'`.
+
+- `clearCache(null, 'a|b|c')` would be like removing the files
+ `'/a/b/c/*'`. `clearCache(null, 'a|b')` would be like removing the
+ files `'/a/b/*'`.
+
+- If you specify a template name such as
+ `clearCache('foo.tpl', 'a|b|c')` then Smarty will attempt to remove
+ `'/a/b/c/foo.tpl'`.
+
+- You CANNOT remove a specified template name under multiple cache
+ groups such as `'/a/b/*/foo.tpl'`, the cache grouping works
+ left-to-right ONLY. You will need to group your templates under a
+ single cache group hierarchy to be able to clear them as a group.
+
+Cache grouping should not be confused with your template directory
+hierarchy, the cache grouping has no knowledge of how your templates are
+structured. So for example, if you have a template structure like
+`themes/blue/index.tpl` and you want to be able to clear all the cache
+files for the "blue" theme, you will need to create a cache group
+structure that mimics your template file structure, such as
+`display('themes/blue/index.tpl', 'themes|blue')`, then clear them with
+`clearCache(null, 'themes|blue')`.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// clear all caches with 'sports|basketball' as the first two cache_id groups
+$smarty->clearCache(null, 'sports|basketball');
+
+// clear all caches with "sports" as the first cache_id group. This would
+// include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..."
+$smarty->clearCache(null, 'sports');
+
+// clear the foo.tpl cache file with "sports|basketball" as the cache_id
+$smarty->clearCache('foo.tpl', 'sports|basketball');
+
+$smarty->display('index.tpl', 'sports|basketball');
+```
+
+
diff --git a/vendor/smarty/smarty/docs/api/configuring.md b/vendor/smarty/smarty/docs/api/configuring.md
new file mode 100644
index 000000000..540f6906d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/configuring.md
@@ -0,0 +1,225 @@
+# Configuring Smarty
+
+## Setting the template path
+By default, Smarty looks for templates to render in `./templates`.
+
+You can change this, or even use multiple paths to use when looking for templates.
+
+If you need to change this, you can use `setTemplateDir()` or `addTemplateDir()`.
+Use `getTemplateDir()` to retrieve the configured paths.
+
+```php
+<?php
+
+ // set a single directory where the config files are stored
+$smarty->setTemplateDir('./templates');
+
+// set multiple directories where templates are stored
+$smarty->setTemplateDir(['./templates', './templates_2', './templates_3']);
+
+// add directory where templates files are stored to the current list of dirs
+$smarty->addTemplateDir('./templates_1');
+
+// add multiple directories to the current list of dirs
+$smarty->addTemplateDir([
+ './templates_2',
+ './templates_3',
+]);
+
+// chaining of method calls
+$smarty->setTemplateDir('./templates')
+ ->addTemplateDir('./templates_1')
+ ->addTemplateDir('./templates_2');
+
+// insert a template dir before exising template dirs
+$smarty->prependTemplateDir('./more_important_templates')
+
+// get all directories where config files are stored
+$template_dirs = $smarty->getTemplateDir();
+var_dump($template_dirs); // array
+
+// get directory identified by key
+$template_dir = $smarty->getTemplateDir(0);
+var_dump($template_dir); // string
+```
+
+## Setting the path for compiled templates
+Smarty compiles templates to native PHP to be as fast as possible.
+The default path where these PHP-files are stored is `./templates_c`.
+
+If you need to change this, you can use `setCompileDir()`.
+Use `getCompileDir()` to retrieve the configured path.
+
+```php
+<?php
+
+// set another path to store compiled templates
+$smarty->setCompileDir('/data/compiled_templates');
+
+// get directory where compiled templates are stored
+$compileDir = $smarty->getCompileDir();
+```
+
+
+## Setting the config path
+Smarty can [load data from config files](./variables/config-files.md).
+By default, Smarty loads the config files from `./configs`.
+
+You can change this, or even use multiple paths to use when looking for config files.
+
+If you need to change this, you can use `setConfigDir()` or `addConfigDir()`.
+Use `getConfigDir()` to retrieve the configured paths.
+
+```php
+<?php
+
+ // set a single directory where the config files are stored
+$smarty->setConfigDir('./config');
+
+// set multiple directories where config files are stored
+$smarty->setConfigDir(['./config', './config_2', './config_3']);
+
+// add directory where config files are stored to the current list of dirs
+$smarty->addConfigDir('./config_1');
+
+// add multiple directories to the current list of dirs
+$smarty->addConfigDir([
+ './config_2',
+ './config_3',
+]);
+
+// chaining of method calls
+$smarty->setConfigDir('./config')
+ ->addConfigDir('./config_1', 'one')
+ ->addConfigDir('./config_2', 'two');
+
+// get all directories where config files are stored
+$config_dirs = $smarty->getConfigDir();
+var_dump($config_dirs); // array
+
+// get directory identified by key
+$config_dir = $smarty->getConfigDir(0);
+var_dump($config_dir); // string
+```
+
+## Setting the path for caches
+Even though Smarty runs templates as native PHP for maximum speed, it still needs to
+execute the PHP code on each call. If your data doesn't change all that often, you
+may be able to speed up your application even more by using output caching.
+
+Output caching can be a tricky subject, so we devoted an entire [section to caching](./caching/basics.md).
+Be sure to read that if you want to use caching.
+
+By default, Smarty stores caches to PHP-files in a subdirectory named `./cache`.
+
+If you need to change this, you can use `setCacheDir()`.
+Use `getCacheDir()` to retrieve the configured path.
+
+```php
+<?php
+
+// set another path to store caches
+$smarty->setCacheDir('/data/caches');
+
+// get directory where cached templates are stored
+$cacheDir = $smarty->getCacheDir();
+```
+
+## Enabling auto-escaping
+By default, Smarty does not escape anything you render in your templates. If you use
+Smarty to render a HTML-page, this means that you will have to make sure that you do
+not render any characters that have a special meaning in HTML, such as `&`, `<` and `>`,
+or apply the [escape modifier](../designers/language-modifiers/language-modifier-escape.md)
+to anything you want to render.
+
+If you forget to do so, you may break your HTML page, or even create a vulnerability for
+attacks known as [XSS or Cross Site Scripting](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html).
+
+Luckily, you can tell Smarty to automatically apply the escape modifier to any dynamic part of your template.
+It's like Smarty magically adds `|escape` to every variable you use on a web page.
+
+Enable auto-escaping for HTML as follows:
+```php
+$smarty->setEscapeHtml(true);
+```
+
+When auto-escaping is enabled, the `|escape` modifier's default mode (`html`) has no effect,
+to avoid double-escaping. It is possible to force it with the `force` mode.
+Other modes (`htmlall`, `url`, `urlpathinfo`, `quotes`, `javascript`) may be used
+with the result you might expect, without double-escaping.
+
+Even when auto-escaping is enabled, you might want to display the content of a variable without
+escaping it. To do so, use the `|raw` modifier.
+
+Examples (with auto-escaping enabled):
+```smarty
+{* these three statements are identical *}
+{$myVar}
+{$myVar|escape}
+{$myVar|escape:'html'}
+
+{* no double-escaping on these statements *}
+{$var|escape:'htmlall'}
+{$myVar|escape:'url'}
+{$myVar|escape:'urlpathinfo'}
+{$myVar|escape:'quotes'}
+{$myVar|escape:'javascript'}
+
+{* no escaping at all *}
+{$myVar|raw}
+
+{* force double-escaping *}
+{$myVar|escape:'force'}
+```
+
+## Disabling compile check
+By default, Smarty tests to see if the
+current template has changed since the last time
+it was compiled. If it has changed, it recompiles that template.
+
+Once an application is put into production, this compile-check step
+is usually no longer needed and the extra checks can significantly hurt performance.
+Be sure to disable compile checking on production for maximum performance.
+```php
+<?php
+$smarty->setCompileCheck(\Smarty\Smarty::COMPILECHECK_OFF);
+```
+
+If [`caching`](./caching/basics.md) is enabled and compile-check is
+enabled, then the cache files will get regenerated if an involved
+template file or config file was updated.
+
+## Charset encoding
+
+There are a variety of encodings for textual data, ISO-8859-1 (Latin1)
+and UTF-8 being the most popular. Unless you change `\Smarty\Smarty::$_CHARSET`,
+Smarty recognizes `UTF-8` as the internal charset.
+
+> **Note**
+>
+> `ISO-8859-1` has been PHP\'s default internal charset since the
+> beginning. Unicode has been evolving since 1991. Since then, it has
+> become the one charset to conquer them all, as it is capable of
+> encoding most of the known characters even across different character
+> systems (latin, cyrillic, japanese, ...). `UTF-8` is unicode\'s most
+> used encoding, as it allows referencing the thousands of character
+> with the smallest size overhead possible.
+>
+> Since unicode and UTF-8 are very widespread nowadays, their use is
+> strongly encouraged.
+
+> **Note**
+>
+> Smarty\'s internals and core plugins are truly UTF-8 compatible since
+> Smarty 3.1.
+
+```php
+<?php
+
+// use japanese character encoding
+mb_internal_charset('EUC-JP');
+
+\Smarty\Smarty::$_CHARSET = 'EUC-JP';
+$smarty = new \Smarty\Smarty();
+```
+
diff --git a/vendor/smarty/smarty/docs/api/extending/block-tags.md b/vendor/smarty/smarty/docs/api/extending/block-tags.md
new file mode 100644
index 000000000..2ae6e77b0
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/extending/block-tags.md
@@ -0,0 +1,59 @@
+# Custom block tags
+
+Block tags are tags of the form: `{func} .. {/func}`. In other
+words, they enclose a template block and operate on the contents of this
+block.
+
+Block functions take precedence over normal tags of the same name, that is, you
+cannot have both custom tag `{func}` and block tag `{func}..{/func}`.
+
+- By default, your function implementation is called twice by Smarty:
+ once for the opening tag, and once for the closing tag. (See
+ `$repeat` below on how to change this.)
+
+- Only the opening tag of the block has attributes. All attributes are contained in the `$params`
+ variable as an associative array. The opening tag attributes are
+ also accessible to your function when processing the closing tag.
+
+- The value of the `$content` variable depends on whether your
+ function is called for the opening or closing tag. In case of the
+ opening tag, it will be NULL, and in case of the closing tag it will
+ be the contents of the template block. Note that the template block
+ will have already been processed by Smarty, so all you will receive
+ is the template output, not the template source.
+
+- The parameter `$repeat` is passed by reference to the function
+ implementation and provides a possibility for it to control how many
+ times the block is displayed. By default `$repeat` is TRUE at the
+ first call of the block function (the opening tag) and FALSE on all
+ subsequent calls to the block function (the block's closing tag).
+ Each time the function implementation returns with `$repeat` being
+ TRUE, the contents between `{func}...{/func}` are evaluated and the
+ function implementation is called again with the new block contents
+ in the parameter `$content`.
+
+Example:
+```php
+<?php
+
+function smarty_block_translate($params, $content, \Smarty\Template $template, &$repeat) {
+ // only output on the closing tag
+ if (!$repeat){
+ if (isset($content)) {
+ $lang = $params['lang'];
+ // do some intelligent translation thing here with $content
+ return $translation;
+ }
+ }
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_BLOCK, 'translate', 'smarty_block_translate');
+```
+
+This can now be used in your templates as follows:
+
+```smarty
+{translate lang='nl'}
+ Quia omnis nulla omnis iusto est id et.
+{/translate}
+```
diff --git a/vendor/smarty/smarty/docs/api/extending/extensions.md b/vendor/smarty/smarty/docs/api/extending/extensions.md
new file mode 100644
index 000000000..5c87d4dc6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/extending/extensions.md
@@ -0,0 +1,101 @@
+# Creating an extension
+
+## Default extensions
+
+In order to organize your custom tags and modifiers, you can create an Extension.
+In fact, most of Smarty itself is organized into two extensions:
+
+- the core extension, which provides the basic language tags such as `{if}`, `{for}` and `{assign}`.
+- the default extension, which provides all default modifiers such as `|escape`, `|nl2br` and `|number_format`
+ and tags such as `{html_image}`, `{mailto}` and `{textformat}` that are enabled by default, but not necessarily universal.
+
+> ** Note **
+>
+> There is also the 'BCPluginsAdapter' extension, which does not add any new functionality, but
+> wraps calls to deprecated methods such as `Smarty\Smarty::addPluginsDir()` and `Smarty\Smarty::loadFilter()`.
+
+## Writing your own extension
+
+In order to write your own custom extension, you must write a class that implements `Smarty\Extension\ExtensionInterface`.
+However, it is usually easier to extend `Smarty\Extension\Base` which provides empty implementation for each of the methods
+required by `Smarty\Extension\ExtensionInterface`. This allows you to only override the method(s) you need.
+
+Example:
+```php
+<?php
+
+use Smarty\Extension\Base;
+
+class MyExtension extends Base {
+
+ public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+
+ switch ($modifier) {
+ case 'array_escape': return new MyArrayEscapeModifierCompiler();
+ case 'array_unescape': return new MyArrayUnescapeModifierCompiler();
+ }
+
+ return null;
+ }
+}
+
+```
+Another example, that would allow you to use any valid PHP callable as a modifier in your templates:
+
+```php
+<?php
+
+use Smarty\Extension\Base;
+
+class MyCallablePassThroughExtension extends Base {
+
+ public function getModifierCallback(string $modifierName) {
+
+ if (is_callable($modifierName)) {
+ return $modifierName;
+ }
+
+ return null;
+ }
+}
+
+```
+
+Writing an extension allows you to add a group of tags, block tags and modifiers to the Smarty language.
+It also allows you to register pre-, post- and output-filters in a structured way.
+The files in `src/Extension/` in the `smarty/smarty` dir should give you all the information you need to start
+writing your own extension.
+
+## Registering an extension
+
+When you have written your extension, add it to a Smarty instance as follows:
+
+```php
+<?php
+
+use Smarty\Smarty;
+
+$smarty = new Smarty();
+
+$smarty->addExtension(new MyCustomExtension());
+```
+
+This will add `MyCustomExtension` to the end of the extension list, meaning that you cannot override tags or modifiers
+from one of Smarty's default extensions.
+
+Should you wish to insert your extension at the top of the extension list, or create a very limited Smarty version that
+only contains the core extension, you can use `Smarty\Smarty::setExtensions()` to override the list of extensions.
+
+```php
+<?php
+
+use Smarty\Smarty;
+
+$smarty = new Smarty();
+
+$smarty->setExtensions([
+ new Smarty\Extension\CoreExtension(),
+ new MyCustomExtension(),
+ new Smarty\Extension\DefaultExtension(),
+]);
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/api/extending/introduction.md b/vendor/smarty/smarty/docs/api/extending/introduction.md
new file mode 100644
index 000000000..69cbce2ac
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/extending/introduction.md
@@ -0,0 +1,10 @@
+# Extending Smarty
+
+By default, Smarty is already very complete and powerful. However, you can unlock its real potential by
+extending Smarty.
+
+There are various ways to extend Smarty for it to suit your needs. You can create custom
+[tags](tags.md), [block tags](block-tags.md) and [modifiers](modifiers.md) by registering a method as a plugin.
+
+If this becomes too messy, you can group your custom tags, modifiers, and more into an [Extension](extensions.md).
+
diff --git a/vendor/smarty/smarty/docs/api/extending/modifiers.md b/vendor/smarty/smarty/docs/api/extending/modifiers.md
new file mode 100644
index 000000000..78540cf97
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/extending/modifiers.md
@@ -0,0 +1,27 @@
+# Custom modifiers
+
+Modifiers are little functions that are applied
+to a variable in the template before it is displayed or used in some
+other context. Smarty comes with a bunch of [modifiers](../../designers/language-modifiers/index.md), but you can
+easily add your own.
+
+In order to do so, you must write a function that accepts as its first parameter the value on which the
+modifier is to operate. The rest of the parameters are optional, depending on what kind of operation is to be performed.
+
+The modifier has to return the result of its processing.
+
+For example:
+```php
+<?php
+
+function smarty_modifier_substr($string, $offset, $length) {
+ return substr($string, $offset, $length);
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_MODIFIER, 'substr', 'smarty_modifier_substr');
+```
+
+You can now use this in your templates as follows:
+```smarty
+{$applicationName|substr:0:20}
+```
diff --git a/vendor/smarty/smarty/docs/api/extending/tags.md b/vendor/smarty/smarty/docs/api/extending/tags.md
new file mode 100644
index 000000000..38cd4e923
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/extending/tags.md
@@ -0,0 +1,84 @@
+# Custom tags
+
+You can add your own tags to the Smarty language.
+
+## Runtime tags
+
+Usually, you'll add a runtime tag. Adding a runtime tag requires you to provide a callback function that accepts
+two parameters:
+
+- `$params`: all attributes from the template as an associative array.
+- `$template`: a `Smarty\Template` object representing the template where tag was used.
+
+The output (return value) of the function will be substituted in place
+of the tag in the template.
+
+If the function needs to assign some variables to the template or use
+some other Smarty-provided functionality, it can use the supplied
+`$template` object to do so.
+
+```php
+<?php
+
+function smarty_tag_eightball($params, \Smarty\Template $template): string {
+ $answers = [
+ 'Yes',
+ 'No',
+ 'No way',
+ 'Outlook not so good',
+ 'Ask again soon',
+ 'Maybe in your reality'
+ ];
+
+ $result = array_rand($answers);
+ return $answers[$result];
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_FUNCTION, 'eightball', 'smarty_tag_eightball');
+```
+
+Which can now be used in the template as:
+
+```smarty
+Question: Will we ever have time travel?
+Answer: {eightball}.
+```
+
+## Compiler tags
+
+Compiler tags are called only during compilation of the template.
+
+They are useful for injecting PHP code or time-sensitive static content
+into the template. If there is both a compiler function and a runtime tag registered under the same name,
+the compiler function has precedence.
+
+The compiler function is passed two parameters: the params array which
+contains precompiled strings for the attribute values and the Smarty
+object. It's supposed to return the code to be injected into the
+compiled template including the surrounding PHP tags.
+
+Example:
+```php
+<?php
+
+function smarty_compiler_tplheader($params, Smarty $smarty) {
+ return "<?php\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';\n?>";
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_COMPILER, 'tplheader', 'smarty_compiler_tplheader');
+```
+
+This function can be called from the template as:
+
+```smarty
+{* this function gets executed at compile time only *}
+{tplheader}
+```
+
+The resulting PHP code in the compiled template would be something like
+this:
+
+```php
+<?php
+echo 'index.tpl compiled at 2023-02-20 20:02';
+```
diff --git a/vendor/smarty/smarty/docs/api/filters/output-filters.md b/vendor/smarty/smarty/docs/api/filters/output-filters.md
new file mode 100644
index 000000000..9de318924
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/filters/output-filters.md
@@ -0,0 +1,35 @@
+# Output filters
+
+When a template is rendered, its output can be sent through one or more
+output filters.
+
+> **Note**
+> This differs from [`prefilters`](prefilters.md) and
+> [`postfilters`](postfilters.md) because, pre- and postfilters
+> operate on compiled templates before they are saved to the disk, whereas
+> output filters operate on the template output when it is executed.
+
+Smarty will pass the template output as the first argument, and expect the function
+to return the result of the processing.
+
+Output filters can be either added as part of an [Extension](../extending/extensions.md) or
+registered as shown below.
+
+This will provide a rudimentary protection against spambots:
+```php
+<?php
+
+function protect_email($tpl_output, \Smarty\Template\ $template)
+{
+ return preg_replace(
+ '!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+ '$1%40$2',
+ $tpl_output
+ );
+}
+
+// register the outputfilter
+$smarty->registerFilter("output", "protect_email");
+$smarty->display("index.tpl');
+
+```
diff --git a/vendor/smarty/smarty/docs/api/filters/postfilters.md b/vendor/smarty/smarty/docs/api/filters/postfilters.md
new file mode 100644
index 000000000..0f4ba9dcc
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/filters/postfilters.md
@@ -0,0 +1,33 @@
+# Postfilters
+
+Template postfilters are PHP functions that your templates are ran
+through *after they are compiled*.
+
+Smarty will
+pass the compiled template code as the first argument, and expect the
+function to return the result of the processing, which must also be valid PHP code.
+
+Prefilters can be either added as part of an [Extension](../extending/extensions.md) or
+registered as shown below.
+
+
+```php
+<?php
+
+function add_header_comment($tpl_source, \Smarty\Template\ $template)
+{
+ return "<?php echo \"<!-- Created by Smarty! -->\n\"; ?>\n".$tpl_source;
+}
+
+// register the postfilter
+$smarty->registerFilter('post', 'add_header_comment');
+$smarty->display('index.tpl');
+```
+
+The postfilter above will make the compiled Smarty template `index.tpl`
+look like:
+
+```smarty
+<!-- Created by Smarty! -->
+{* rest of template content... *}
+```
diff --git a/vendor/smarty/smarty/docs/api/filters/prefilters.md b/vendor/smarty/smarty/docs/api/filters/prefilters.md
new file mode 100644
index 000000000..2d5c19f94
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/filters/prefilters.md
@@ -0,0 +1,26 @@
+# Prefilters
+
+Template prefilters are PHP functions that your templates are ran
+through *before they are compiled*. This is good for preprocessing your
+templates to remove unwanted comments, keeping an eye on what people are
+putting in their templates, etc.
+
+Smarty will pass the template source code as the first argument, and
+expect the function to return the resulting template source code.
+
+Prefilters can be either added as part of an [Extension](../extending/extensions.md) or
+registered as shown below.
+
+This will remove all the html comments in the template source:
+```php
+<?php
+
+function remove_dw_comments($tpl_source, \Smarty\Template\ $template)
+{
+ return preg_replace("/<!--#.*-->/U",'',$tpl_source);
+}
+
+// register the prefilter
+$smarty->registerFilter('pre', 'remove_dw_comments');
+$smarty->display('index.tpl');
+```
diff --git a/vendor/smarty/smarty/docs/api/inheritance.md b/vendor/smarty/smarty/docs/api/inheritance.md
new file mode 100644
index 000000000..f58369e65
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/inheritance.md
@@ -0,0 +1,130 @@
+# Template Inheritance
+
+Inheritance allows you to define base templates that can
+be extended by child templates. Extending means that the child template
+can override all or some of the named block areas in the base template.
+
+When you render the child template, the result will as if you rendered
+the base template, with only the block(s) that you have overridden in the
+child templates differing.
+
+- The inheritance tree can be as deep as you want, meaning you can
+ extend a file that extends another one that extends another one and
+ so on.
+
+- The child templates can not define any content besides what's
+ inside [`{block}`](../designers/language-builtin-functions/language-function-block.md) tags they override.
+ Anything outside of [`{block}`](../designers/language-builtin-functions/language-function-block.md) tags will
+ be removed.
+
+- Template inheritance is a compile time process which creates a
+ single compiled template file. Compared to corresponding solutions
+ based on subtemplates included with the
+ [`{include}`](../designers/language-builtin-functions/language-function-include.md) tag it does have much
+ better performance when rendering.
+
+## Basic inheritance
+
+First, create a base template with one or more [blocks](../designers/language-builtin-functions/language-function-block.md).
+Then, create a child template. The child template
+must have an [{extends} tag](../designers/language-builtin-functions/language-function-extends.md) on its first line.
+
+The child template can redefine one or more blocks defined in the base template.
+
+See below for a simple example.
+
+layout.tpl (base)
+
+```smarty
+<html>
+ <head>
+ <title>{block name=title}Default Page Title{/block}</title>
+ {block name=head}{/block}
+ </head>
+ <body>
+ {block name=body}{/block}
+ </body>
+</html>
+```
+
+
+myproject.tpl (child)
+
+```smarty
+{extends file='layout.tpl'}
+{block name=head}
+ <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+ <script src="/js/mypage.js"></script>
+{/block}
+```
+
+mypage.tpl (grandchild)
+
+```smarty
+{extends file='myproject.tpl'}
+{block name=title}My Page Title{/block}
+{block name=head}
+ <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+ <script src="/js/mypage.js"></script>
+{/block}
+{block name=body}My HTML Page Body goes here{/block}
+```
+
+
+To render the above, you would use:
+
+```php
+<?php
+$smarty->display('mypage.tpl');
+```
+
+The resulting output is:
+
+```html
+<html>
+ <head>
+ <title>My Page Title</title>
+ <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+ <script src="/js/mypage.js"></script>
+ </head>
+ <body>
+ My HTML Page Body goes here
+ </body>
+</html>
+```
+
+> **Note**
+>
+> When [compile-check](./configuring.md#disabling-compile-check) is enabled, all files
+> in the inheritance tree
+> are checked for modifications upon each invocation. You may want to
+> disable compile-check on production servers for this reason.
+
+> **Note**
+>
+> If you have a subtemplate which is included with
+> [`{include}`](../designers/language-builtin-functions/language-function-include.md) and it contains
+> [`{block}`](../designers/language-builtin-functions/language-function-block.md) areas it works only if the
+> [`{include}`](../designers/language-builtin-functions/language-function-include.md) itself is called from within
+> a surrounding [`{block}`](../designers/language-builtin-functions/language-function-block.md). In the final
+> parent template you may need a dummy
+> [`{block}`](../designers/language-builtin-functions/language-function-block.md) for it.
+
+
+## Using append and prepend
+The content of [`{block}`](../designers/language-builtin-functions/language-function-block.md) tags from child
+and parent templates can be merged by the `append` or `prepend`
+[`{block}`](../designers/language-builtin-functions/language-function-block.md) tag option flags and
+`{$smarty.block.parent}` or `{$smarty.block.child}` placeholders.
+
+## Extends resource type
+Instead of using [`{extends}`](../designers/language-builtin-functions/language-function-extends.md) tags in the
+template files you can define the inheritance tree in your PHP script by
+using the [`extends:` resource](resources.md#the-extends-resource) type.
+
+The code below will return same result as the example above.
+
+```php
+<?php
+$smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
+```
diff --git a/vendor/smarty/smarty/docs/api/rendering.md b/vendor/smarty/smarty/docs/api/rendering.md
new file mode 100644
index 000000000..a66b61269
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/rendering.md
@@ -0,0 +1,86 @@
+# Rendering templates
+
+## Fetching or rendering templates directly
+As explained in [basics](basics.md), you can use `$smarty->fetch()` or `$smarty->display()`
+to render a template directly.
+
+```php
+<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('homepage.tpl');
+
+// or
+
+$output = $smarty->fetch('homepage.tpl');
+```
+
+When you use `display()`, Smarty renders the template to the standard output stream.
+`fetch()` returns the output instead of echoing it.
+
+The example above uses simple filenames to load the template. Smarty also supports
+[loading templates from resources](resources.md).
+
+## Creating a template object
+You can also create a template object which later can be prepared first,
+and rendered later. This can be useful, for example if you plan to re-use several
+templates.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// create template object with its private variable scope
+$tpl = $smarty->createTemplate('index.tpl');
+
+// assign a variable (available only to this template)
+$tpl->assign('title', 'My Homepage!');
+
+// display the template
+$tpl->display();
+```
+
+More on assigning variables in [using data in templates](variables/assigning.md).
+
+
+## Testing if a template exists
+You can use `templateExists()` to check whether a template exists before you attempt to use it.
+
+It accepts either a path to the template on the filesystem or a
+resource string specifying the template.
+
+This example uses `$_GET['page']` to
+[`{include}`](../designers/language-builtin-functions/language-function-include.md) a content template. If the
+template does not exist then an error page is displayed instead. First,
+the `page_container.tpl`
+
+```smarty
+<html>
+ <head>
+ <title>{$title|escape}</title>
+ </head>
+ <body>
+ {* include middle content page *}
+ {include file=$content_template}
+ </body>
+</html>
+```
+
+And the php script:
+
+```php
+<?php
+
+// set the filename eg index.inc.tpl
+$mid_template = $_GET['page'].'.inc.tpl';
+
+if (!$smarty->templateExists($mid_template)){
+ $mid_template = 'page_not_found.tpl';
+}
+$smarty->assign('content_template', $mid_template);
+
+$smarty->display('page_container.tpl');
+```
diff --git a/vendor/smarty/smarty/docs/api/resources.md b/vendor/smarty/smarty/docs/api/resources.md
new file mode 100644
index 000000000..5ca52b12d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/resources.md
@@ -0,0 +1,322 @@
+# Template resources
+
+## The filesystem resource
+
+So far in our examples, we have used simple filenames or paths when loading a template.
+
+For example, to load a template file called `homepage.tpl`, from the filesystem, you could write:
+```php
+<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('homepage.tpl');
+```
+
+The filesystem is the default resource. Templates, however, may come
+from a variety of sources. When you render a template, or
+when you include a template from within another template, you supply a
+resource type, followed by `:` and the appropriate path and template name.
+
+If a resource is not explicitly given, the default resource type is assumed.
+The resource type for the filesystem is `file`, which means that the previous example
+can be rewritten as follows:
+```php
+<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('file:homepage.tpl');
+```
+
+The file resource pulls templates source files from the directories
+specified using `Smarty::setTemplateDir()` (see [Configuring Smarty](configuring.md)).
+
+`setTemplateDir` accepts a single path, but can also ben called with an array of paths.
+In that case, the list of directories is traversed in the order they appear in the array. The
+first template found is the one to process.
+
+### Templates from a specific directory
+
+Smarty 3.1 introduced the bracket-syntax for specifying an element from
+`Smarty::setTemplateDir()`. This allows websites
+employing multiple sets of templates better control over which template
+to access.
+
+The bracket-syntax can be used as follows:
+```php
+<?php
+
+// setup template directories
+$smarty->setTemplateDir([
+ './templates', // element: 0, index: 0
+ './templates_2', // element: 1, index: 1
+ '10' => 'templates_10', // element: 2, index: '10'
+ 'foo' => 'templates_foo', // element: 3, index: 'foo'
+]);
+
+/*
+ assume the template structure
+ ./templates/foo.tpl
+ ./templates_2/foo.tpl
+ ./templates_2/bar.tpl
+ ./templates_10/foo.tpl
+ ./templates_10/bar.tpl
+ ./templates_foo/foo.tpl
+*/
+
+// regular access
+$smarty->display('file:foo.tpl');
+// will load ./templates/foo.tpl
+
+// using numeric index
+$smarty->display('file:[1]foo.tpl');
+// will load ./templates_2/foo.tpl
+
+// using numeric string index
+$smarty->display('file:[10]foo.tpl');
+// will load ./templates_10/foo.tpl
+
+// using string index
+$smarty->display('file:[foo]foo.tpl');
+// will load ./templates_foo/foo.tpl
+
+// using "unknown" numeric index (using element number)
+$smarty->display('file:[2]foo.tpl');
+// will load ./templates_10/foo.tpl
+```
+
+And, from within a Smarty template:
+
+```smarty
+{include file="file:foo.tpl"}
+{* will load ./templates/foo.tpl *}
+
+{include file="file:[1]foo.tpl"}
+{* will load ./templates_2/foo.tpl *}
+
+{include file="file:[foo]foo.tpl"}
+{* will load ./templates_foo/foo.tpl *}
+```
+
+### Using absolute paths
+
+Templates outside the specified template directories
+require the `file:` template resource type, followed by the absolute
+path to the template (with leading slash).
+
+```php
+<?php
+$smarty->display('file:/export/templates/index.tpl');
+$smarty->display('file:/path/to/my/templates/menu.tpl');
+````
+
+And from within a Smarty template:
+```smarty
+{include file='file:/usr/local/share/templates/navigation.tpl'}
+```
+
+> **Note**
+>
+> With [`Security`](security.md) enabled, access to
+> templates outside of the specified templates directories is
+> not allowed unless you whitelist those directories.
+
+### Windows file paths
+If you are running on Windows, file paths usually include a drive
+letter (such as `C:`) at the beginning of the pathname. Be sure to use `file:` in
+the path to avoid namespace conflicts and get the desired results.
+```php
+<?php
+$smarty->display('file:C:/export/templates/index.tpl');
+$smarty->display('file:F:/path/to/my/templates/menu.tpl');
+```
+
+And from within Smarty template:
+```smarty
+{include file='file:D:/usr/local/share/templates/navigation.tpl'}
+```
+
+### Handling missing templates
+If the file resource cannot find the requested template, it will check if there is
+a default template handler to call. By default, there is none, and Smarty will return an error,
+but you can register a default template handler calling `Smarty::registerDefaultTemplateHandler`
+with any [callable](https://www.php.net/manual/en/language.types.callable.php).
+
+```php
+<?php
+
+$smarty->registerDefaultTemplateHandler([$this, 'handleMissingTemplate']);
+
+// ...
+
+public function handleMissingTemplate($type, $name, &$content, &$modified, Smarty $smarty) {
+ if (/* ... */) {
+ // return corrected filepath
+ return "/tmp/some/foobar.tpl";
+ } elseif (/* ... */) {
+ // return a template directly
+ $content = "the template source";
+ $modified = time();
+ return true;
+ } else {
+ // tell smarty that we failed
+ return false;
+ }
+}
+
+```
+
+## The string and eval resources
+
+Smarty can render templates from a string by using the `string:` or
+`eval:` resource.
+
+- The `string:` resource behaves much the same as a template file. The
+ template source is compiled from a string and stores the compiled
+ template code for later reuse. Each unique template string will
+ create a new compiled template file. If your template strings are
+ accessed frequently, this is a good choice. If you have frequently
+ changing template strings (or strings with low reuse value), the
+ `eval:` resource may be a better choice, as it doesn\'t save
+ compiled templates to disk.
+
+- The `eval:` resource evaluates the template source every time a page
+ is rendered. This is a good choice for strings with low reuse value.
+ If the same string is accessed frequently, the `string:` resource
+ may be a better choice.
+
+> **Note**
+>
+> With a `string:` resource type, each unique string generates a
+> compiled file. Smarty cannot detect a string that has changed, and
+> therefore will generate a new compiled file for each unique string. It
+> is important to choose the correct resource so that you do not fill
+> your disk space with wasted compiled strings.
+
+```php
+<?php
+$smarty->assign('foo', 'value');
+$template_string = 'display {$foo} here';
+$smarty->display('string:' . $template_string); // compiles for later reuse
+$smarty->display('eval:' . $template_string); // compiles every time
+```
+From within a Smarty template:
+```smarty
+{include file="string:$template_string"} {* compiles for later reuse *}
+{include file="eval:$template_string"} {* compiles every time *}
+```
+
+Both `string:` and `eval:` resources may be encoded with
+[`urlencode()`](https://www.php.net/urlencode) or
+[`base64_encode()`](https://www.php.net/urlencode). This is not necessary
+for the usual use of `string:` and `eval:`, but is required when using
+either of them in conjunction with the [`extends resource`](#the-extends-resource).
+
+```php
+ <?php
+ $smarty->assign('foo','value');
+ $template_string_urlencode = urlencode('display {$foo} here');
+ $template_string_base64 = base64_encode('display {$foo} here');
+ $smarty->display('eval:urlencode:' . $template_string_urlencode); // will decode string using urldecode()
+ $smarty->display('eval:base64:' . $template_string_base64); // will decode string using base64_decode()
+```
+
+From within a Smarty template:
+```smarty
+ {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *}
+ {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *}
+```
+
+## The extends resource
+
+The `extends:` resource is used to define child/parent relationships. For details see section of
+[Template inheritance](inheritance.md).
+
+> **Note**
+>
+> Using the extends resource is usually not necessary. If you have a choice, it is normally more flexible and
+> intuitive to handle inheritance chains from within the templates using the [{extends} tag](inheritance.md).
+
+When `string:` and `eval:` templates are used, make sure they are properly url or base64 encoded.
+
+The templates within an inheritance chain are not compiled separately. Only a single compiled template will be generated.
+(If an `eval:` resource is found within an inheritance chain, its "don't save a compile file" property is superseded by
+the `extends:` resource.)
+
+Example:
+```php
+<?php
+$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl');
+
+// inheritance from multiple template sources
+$smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}');
+```
+
+## The stream resource
+
+Smarty allow you to use [PHP streams](https://www.php.net/manual/en/function.stream-wrapper-register.php)
+as a template resource. Smarty will first look for a registered template resource. If nothing is
+found, it will check if a PHP stream is available. If a stream is available, Smarty will use it
+to fetch the template.
+
+For example,
+```php
+<?php
+stream_wrapper_register('myresource', MyResourceStream::class);
+$smarty->display('myresource:bar.tpl');
+```
+
+Or, from within a template:
+```smarty
+ {include file="myresource:bar.tpl"}
+```
+
+## Adding your own resource type
+You can create a class that extends `Smarty\Resource\CustomPlugin` to add your own resource type,
+for example to load template from a database.
+
+For example:
+```php
+<?php
+class HelloWorldResource extends Smarty\Resource\CustomPlugin {
+
+ protected function fetch($name, &$source, &$mtime) {
+ $source = '{$x="hello world"}{$x}'; // load your template here based on $name
+ $mtime = time();
+ }
+
+}
+
+// ..
+
+$smarty->registerResource('helloworld', new HelloWorldResource());
+```
+
+If a Resource's templates should not be run through the Smarty
+compiler, the Custom Resource may extend `\Smarty\Resource\UncompiledPlugin`.
+The Resource Handler must then implement the function
+`renderUncompiled(\Smarty\Template $_template)`. `$_template` is
+a reference to the current template and contains all assigned variables
+which the implementor can access via
+`$_template->getSmarty()->getTemplateVars()`. These Resources simply echo
+their rendered content to the output stream. The rendered output will be
+output-cached if the Smarty instance was configured accordingly. See
+`src/Resource/PhpPlugin.php` for an example.
+
+If the Resource's compiled templates should not be cached on disk, the
+Custom Resource may extend `\Smarty\Resource\RecompiledPlugin`. These Resources
+are compiled every time they are accessed. This may be an expensive
+overhead. See `src/Resource/StringEval.php` for an
+example.
+
+## Changing the default resource type
+The default resource type is `file`. If you want to change it, use `Smarty::setDefaultResourceType`.
+
+The following example will change the default resource type to `mysql`:
+```php
+<?php
+$smarty->setDefaultResourceType('mysql');
+```
diff --git a/vendor/smarty/smarty/docs/api/security.md b/vendor/smarty/smarty/docs/api/security.md
new file mode 100644
index 000000000..07120afdb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/security.md
@@ -0,0 +1,119 @@
+# Security
+
+Security is good for situations when you have untrusted parties editing
+the templates, and you want to reduce the risk of system
+security compromises through the template language.
+
+The settings of the security policy are defined by overriding public properties of an
+instance of the \Smarty\Security class. These are the possible settings:
+
+- `$secure_dir` is an array of template directories that are
+ considered secure. A directory configured using `$smarty->setTemplateDir()` is
+ considered secure implicitly. The default is an empty array.
+- `$trusted_uri` is an array of regular expressions matching URIs that
+ are considered trusted. This security directive is used by
+ [`{fetch}`](../designers/language-custom-functions/language-function-fetch.md) and
+ [`{html_image}`](../designers/language-custom-functions/language-function-html-image.md). URIs passed to
+ these functions are reduced to `{$PROTOCOL}://{$HOSTNAME}` to allow
+ simple regular expressions (without having to deal with edge cases
+ like authentication-tokens).
+
+ The expression `'#https?://.*smarty.net$#i'` would allow accessing
+ the following URIs:
+
+ - `http://smarty.net/foo`
+ - `http://smarty.net/foo`
+ - `http://www.smarty.net/foo`
+ - `http://smarty.net/foo`
+ - `https://foo.bar.www.smarty.net/foo/bla?blubb=1`
+
+ but deny access to these URIs:
+
+ - `http://smarty.com/foo` (not matching top-level domain \"com\")
+ - `ftp://www.smarty.net/foo` (not matching protocol \"ftp\")
+ - `http://www.smarty.net.otherdomain.com/foo` (not matching end of
+ domain \"smarty.net\")
+
+- `$static_classes` is an array of classes that are considered
+ trusted. The default is an empty array which allows access to all
+ static classes. To disable access to all static classes set
+ $static_classes = null.
+
+- `$streams` is an array of streams that are considered trusted and
+ can be used from within template. To disable access to all streams
+ set $streams = null. An empty array ( $streams = [] ) will
+ allow all streams. The default is array('file').
+
+- `$allowed_modifiers` is an array of (registered / autoloaded)
+ modifiers that should be accessible to the template. If this array
+ is non-empty, only the herein listed modifiers may be used. This is
+ a whitelist.
+
+- `$disabled_modifiers` is an array of (registered / autoloaded)
+ modifiers that may not be accessible to the template.
+
+- `$allowed_tags` is a boolean flag which controls if constants can
+ function-, block and filter plugins that should be accessible to the
+ template. If this array is non-empty, only the herein listed
+ modifiers may be used. This is a whitelist.
+
+- `$disabled_tags` is an array of (registered / autoloaded) function-,
+ block and filter plugins that may not be accessible to the template.
+
+- `$allow_constants` is a boolean flag which controls if constants can
+ be accessed by the template. The default is "true".
+
+- `$allow_super_globals` is a boolean flag which controls if the PHP
+ super globals can be accessed by the template. The default is
+ "true".
+
+If security is enabled, no private methods, functions or properties of
+static classes or assigned objects can be accessed (beginning with
+'_') by the template.
+
+To customize the security policy settings you can extend the
+\Smarty\Security class or create an instance of it.
+
+```php
+<?php
+
+use Smarty\Smarty;
+
+class My_Security_Policy extends \Smarty\Security {
+ public $allow_constants = false;
+}
+
+$smarty = new Smarty();
+
+$smarty->enableSecurity('My_Security_Policy');
+```
+
+```php
+<?php
+
+use Smarty\Smarty;
+
+$smarty = new Smarty();
+
+$my_security_policy = new \Smarty\Security($smarty);
+$my_security_policy->allow_constants = false;
+
+$smarty->enableSecurity($my_security_policy);
+```
+
+```php
+<?php
+
+use Smarty\Smarty;
+
+$smarty = new Smarty();
+
+// enable default security
+$smarty->enableSecurity();
+```
+
+> **Note**
+>
+> Most security policy settings are only checked when the template gets
+> compiled. For that reason you should delete all cached and compiled
+> template files when you change your security settings.
diff --git a/vendor/smarty/smarty/docs/api/variables/assigning.md b/vendor/smarty/smarty/docs/api/variables/assigning.md
new file mode 100644
index 000000000..40a02c13b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/variables/assigning.md
@@ -0,0 +1,139 @@
+# Assigning variables
+
+Templates start to become really useful once you know how to use variables.
+
+## Basic assigning
+Let's revisit the example from the [basics section](../basics.md). The following script assigns a value to
+the 'companyName' variable and renders the template:
+
+```php
+<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->assign('companyName', 'AC & ME Corp.');
+
+$smarty->display('footer.tpl');
+```
+
+footer.tpl:
+```smarty
+<small>Copyright {$companyName|escape}</small>
+```
+
+Smarty will apply the [escape modifier](../../designers/language-modifiers/language-modifier-escape.md)
+to the value assigned to the variable
+`companyName` and replace `{$companyName|escape}` with the result.
+
+```html
+<small>Copyright AC &amp; ME Corp.</small>
+```
+
+Using `$smarty->assign()` is the most common way of assigning data to templates, but there are several other methods.
+
+## Appending data to an existing variable
+Using `append()`, you can add data to an existing variable, usually an array.
+
+If you append to a string value, it is converted to an array value and
+then appended to. You can explicitly pass name/value pairs, or
+associative arrays containing the name/value pairs. If you pass the
+optional third parameter of TRUE, the value will be merged with the
+current array instead of appended.
+
+Examples:
+
+```php
+<?php
+// This is effectively the same as assign()
+$smarty->append('foo', 'Fred');
+// After this line, foo will now be seen as an array in the template
+$smarty->append('foo', 'Albert');
+
+$array = [1 => 'one', 2 => 'two'];
+$smarty->append('X', $array);
+$array2 = [3 => 'three', 4 => 'four'];
+// The following line will add a second element to the X array
+$smarty->append('X', $array2);
+
+// passing an associative array
+$smarty->append(['city' => 'Lincoln', 'state' => 'Nebraska']);
+```
+
+## Assigning to template objects
+When you use a template objects, as explained in [rendering a template](../rendering.md#creating-a-template-object),
+you can assign data to the template objects directly instead of assigning it to Smarty. This way, you can use different
+sets of data for different templates.
+
+For example:
+```php
+<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$tplBlue = $smarty->createTemplate('blue.tpl');
+$tplBlue->assign('name', 'The one');
+$tplBlue->display();
+
+$tplRed = $smarty->createTemplate('red.tpl');
+$tplRed->assign('name', 'Neo');
+$tplRed->display();
+```
+
+## Using data objects
+For more complex use cases, Smarty supports the concept of data objects.
+Data objects are containers to hold data. Data objects can be attached to templates when creating them.
+This allows for fine-grained re-use of data.
+
+For example:
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// create a data object
+$data = $smarty->createData();
+
+// assign variable to the data object
+$data->assign('name', 'Neo');
+
+// create template object which will use variables from the data object
+$tpl = $smarty->createTemplate('index.tpl', $data);
+
+// display the template
+$tpl->display();
+```
+
+## Clearing assigned data
+When re-using templates, you may need to clear data assigned in a previous run. Use `clearAllAssign()` to
+clear the values of all assigned variables on data objects, template objects or the Smarty object.
+
+Examples:
+```php
+<?php
+// assigning data to the Smarty object
+$smarty->assign('Name', 'Fred');
+// ...
+$smarty->clearAllAssign();
+
+// using a data object
+$data = $smarty->createData();
+$data->assign('name', 'Neo');
+// ...
+$data->clearAllAssign();
+
+// using a template
+$tplBlue = $smarty->createTemplate('blue.tpl');
+$tplBlue->assign('name', 'The one');
+// ...
+$tplBlue->clearAllAssign();
+```
+
+Note that there it's only useful to clear assigned data if you:
+
+1. repeatedly re-use templates, and
+2. the variables used may change on each repetition
+
+If your script simply runs once and then ends, or you always assign the same variables, clearing assigned data
+is of no use. \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/api/variables/config-files.md b/vendor/smarty/smarty/docs/api/variables/config-files.md
new file mode 100644
index 000000000..107353bb7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/variables/config-files.md
@@ -0,0 +1,88 @@
+# Loading data from config files
+
+Instead of [assigning data to templates from PHP](assigning.md), you can also
+use a config file.
+
+## Example config file
+Config files are best suited to manage template settings
+from one file. One example is a multi-language application.
+Instead of writing multiple templates to support different languages,
+you can write a single template file and load your language dependent strings
+from config files.
+
+Example `lang.en.ini`:
+```ini
+# global variables
+pageTitle = "Main Menu"
+
+[Customer]
+pageTitle = "Customer Info"
+
+[Login]
+pageTitle = "Login"
+focus = "username"
+Intro = """This is a value that spans more
+ than one line. you must enclose
+ it in triple quotes."""
+
+```
+
+Values of [config file variables](../../designers/language-variables/language-config-variables.md) can be in
+quotes, but not necessary. You can use either single or double quotes.
+If you have a value that spans more than one line, enclose the entire
+value with triple quotes \("""\). You can put comments into config
+files by any syntax that is not a valid config file syntax. We recommend
+using a `#` (hash) at the beginning of the line.
+
+The example config file above has two sections. Section names are
+enclosed in \[brackets\]. Section names can be arbitrary strings not
+containing `[` or `]` symbols. The variable at the top is a global
+variable. Global variables are always
+loaded from the config file. If a particular section is loaded, then the
+global variables and the variables from that section are also loaded. If
+a variable exists both as a global and in a section, the section
+variable is used.
+
+## Loading a config file
+
+Config files are loaded into templates with the built-in template
+function [`{config_load}`](../../designers/language-builtin-functions/language-function-config-load.md) or by calling
+`configLoad()` from PHP:
+
+```php
+<?php
+$smarty->configLoad('lang.en.ini');
+```
+
+Load a specific section with:
+
+```php
+<?php
+$smarty->configLoad('lang.en.ini', 'Customer');
+```
+
+Note that the global section will always be loaded.
+
+## Retrieving config variables in PHP
+
+
+## Loading from a resource
+Config files (or resources) are loaded by the same resource facilities
+as templates. That means that a config file can also be loaded from a db. See [resources](../resources.md)
+for more information.
+
+## Config overwrite
+If you name two variables the same within a section,
+the last one will be used unless you call:
+```php
+<?php
+$smarty->setConfigOverwrite(false);
+```
+When config overwrite is disabled, Smarty will create arrays of config file variables when it encounters
+multiple entries with the same name.
+
+See also [`{config_load}`](../../designers/language-builtin-functions/language-function-config-load.md),
+[`$default_config_handler_func`](../../programmers/api-variables/variable-default-config-handler-func.md),
+[`getConfigVars()`](../../programmers/api-functions/api-get-config-vars.md),
+[`clearConfig()`](../../programmers/api-functions/api-clear-config.md) and
+[`configLoad()`](../../programmers/api-functions/api-config-load.md)
diff --git a/vendor/smarty/smarty/docs/api/variables/objects.md b/vendor/smarty/smarty/docs/api/variables/objects.md
new file mode 100644
index 000000000..9befcb18e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/variables/objects.md
@@ -0,0 +1,106 @@
+# Objects
+
+Smarty allows access to PHP [objects](https://www.php.net/object) through
+the templates.
+
+> **Note**
+>
+> When you assign/register objects to templates, be sure that all
+> properties and methods accessed from the template are for presentation
+> purposes only. It is very easy to inject application logic through
+> objects, and this leads to poor designs that are difficult to manage.
+> See the Best Practices section of the Smarty website.
+
+There are two ways to access them.
+
+## Assign the object
+You can assign objects to a template and access them much like any other assigned variable.
+
+Example:
+```php
+<?php
+// the object
+
+class My_Object {
+ public function meth1($params, $smarty_obj) {
+ return 'this is my meth1';
+ }
+}
+
+// We can also assign objects. assign_by_ref when possible.
+$smarty->assign('myobj', new My_Object());
+
+$smarty->display('index.tpl');
+```
+
+And here's how to access your object in `index.tpl`:
+
+```smarty
+{$myobj->meth1('foo',$bar)}
+```
+
+
+
+## Register the object
+Registerd objects use a different template syntax. Also, a registered object
+can be restricted to certain methods or
+properties. However, **a registered object cannot be looped over or
+assigned in arrays of objects**, etc.
+
+If security is enabled, no private methods or functions can be accessed
+(beginning with '_'). If a method and property of the same name exist,
+the method will be used.
+
+You can restrict the methods and properties that can be accessed by
+listing them in an array as the third registration parameter.
+
+By default, parameters passed to objects through the templates are
+passed the same way [custom tags](../../designers/language-custom-functions/index.md) get
+them. An associative array is passed as the first parameter, and the
+smarty object as the second. If you want the parameters passed one at a
+time for each argument like traditional object parameter passing, set
+the fourth registration parameter to FALSE.
+
+The optional fifth parameter has only effect with `format` being TRUE
+and contains a list of methods that should be treated as blocks. That
+means these methods have a closing tag in the template
+(`{foobar->meth2}...{/foobar->meth2}`) and the parameters to the methods
+have the same synopsis as the parameters for
+[`block tags`](../extending/block-tags.md): They get the four
+parameters `$params`, `$content`, `$smarty` and `&$repeat` and they also
+behave like block tags.
+
+```php
+<?php
+// the object
+
+class My_Object {
+ function meth1($params, $smarty_obj) {
+ return 'this is my meth1';
+ }
+}
+
+$myobj = new My_Object;
+
+// registering the object
+$smarty->registerObject('foobar', $myobj);
+
+// if we want to restrict access to certain methods or properties, list them
+$smarty->registerObject('foobar', $myobj, array('meth1','meth2','prop1'));
+
+// if you want to use the traditional object parameter format, pass a boolean of false
+$smarty->registerObject('foobar', $myobj, null, false);
+
+$smarty->display('index.tpl');
+```
+
+And here's how to access your objects in `index.tpl`:
+
+```smarty
+{* access our registered object *}
+{foobar->meth1 p1='foo' p2=$bar}
+
+{* you can also assign the output *}
+{foobar->meth1 p1='foo' p2=$bar assign='output'}
+the output was {$output}
+```
diff --git a/vendor/smarty/smarty/docs/api/variables/static-class-methods.md b/vendor/smarty/smarty/docs/api/variables/static-class-methods.md
new file mode 100644
index 000000000..fd3fea4c8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/variables/static-class-methods.md
@@ -0,0 +1,39 @@
+# Static Classes
+
+You can directly access static classes. The syntax is roughly the same as in
+PHP.
+
+> **Note**
+>
+> Direct access to PHP classes is not recommended. This ties the
+> underlying application code structure directly to the presentation,
+> and also complicates template syntax. It is recommended to register
+> plugins which insulate templates from PHP classes/objects. Use at your
+> own discretion.
+
+## Examples
+
+**class constant BAR**
+```smarty
+{assign var=foo value=myclass::BAR}
+```
+
+**method result**
+```smarty
+{assign var=foo value=myclass::method()}
+```
+
+**method chaining**
+```smarty
+{assign var=foo value=myclass::method1()->method2}
+```
+
+**property bar of class myclass**
+```smarty
+{assign var=foo value=myclass::$bar}
+```
+
+**using Smarty variable bar as class name**
+```smarty
+{assign var=foo value=$bar::method}
+```
diff --git a/vendor/smarty/smarty/docs/api/variables/streams.md b/vendor/smarty/smarty/docs/api/variables/streams.md
new file mode 100644
index 000000000..c872cf8bb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/api/variables/streams.md
@@ -0,0 +1,16 @@
+# Streams
+
+You can also use streams to call variables. *{$foo:bar}* will use the
+*foo://bar* stream to get the template variable.
+
+Using a PHP stream for a template variable resource from within a
+template.
+
+```smarty
+{$foo:bar}
+```
+
+NB. Support for using streams to call variables is deprecated since Smarty v5.1 and will be removed
+in a future version.
+
+See also [`Template Resources`](../resources.md)
diff --git a/vendor/smarty/smarty/docs/appendixes/tips.md b/vendor/smarty/smarty/docs/appendixes/tips.md
index 3c6e6b96f..e4e38d4be 100644
--- a/vendor/smarty/smarty/docs/appendixes/tips.md
+++ b/vendor/smarty/smarty/docs/appendixes/tips.md
@@ -209,8 +209,7 @@ fetching the data up front?
You can do this by writing a custom plugin for fetching the content and
assigning it to a template variable.
-`function.load_ticker.php` - drop file in
-[`$plugins directory`](../programmers/api-variables/variable-plugins-dir.md)
+`function.load_ticker.php`
```php
diff --git a/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md
index 6704fce2f..50acd1950 100644
--- a/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md
+++ b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md
@@ -10,8 +10,7 @@ of the console.
Set [`$debugging`](../programmers/api-variables/variable-debugging.md) to TRUE in Smarty, and if needed
set [`$debug_tpl`](../programmers/api-variables/variable-debug-template.md) to the template resource
-path to `debug.tpl` (this is in [`SMARTY_DIR`](../programmers/smarty-constants.md) by
-default). When you load the page, a Javascript console window will pop
+path to `debug.tpl`. When you load the page, a Javascript console window will pop
up and give you the names of all the included templates and assigned
variables for the current page.
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md
index c0a12a9be..e054d143c 100644
--- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md
@@ -14,7 +14,7 @@ A simple Smarty template could look like this:
All Smarty template tags are enclosed within delimiters. By default
these are `{` and `}`, but they can be
-[changed](../../programmers/api-variables/variable-left-delimiter.md).
+[changed](../../designers/language-basic-syntax/language-escaping.md).
For the examples in this manual, we will assume that you are using the
default delimiters. In Smarty, all content outside of delimiters is
@@ -22,12 +22,12 @@ displayed as static content, or unchanged. When Smarty encounters
template tags, it attempts to interpret them, and displays the
appropriate output in their place.
-The basis components of the Smarty syntax are:
+The basic components of the Smarty syntax are:
- [Comments](language-syntax-comments.md)
- [Variables](language-syntax-variables.md)
-- [Functions](language-syntax-functions.md)
+- [Operators](language-syntax-operators.md)
+- [Tags](language-syntax-tags.md)
- [Attributes](language-syntax-attributes.md)
- [Quotes](language-syntax-quotes.md)
-- [Math](language-math.md)
- [Escaping](language-escaping.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
index 4c75e09e6..9132b8c02 100644
--- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
@@ -45,8 +45,7 @@ variables.
Smarty's default delimiters { and } cleanly represent presentational
content. However, if another set of delimiters suit your needs better,
you can change them with Smarty's
-[`$left_delimiter`](../../programmers/api-variables/variable-left-delimiter.md) and
-[`$right_delimiter`](../../programmers/api-variables/variable-right-delimiter.md) values.
+`setLeftDelimiter()` and `setRightDelimiter()` methods.
> **Note**
>
@@ -57,8 +56,8 @@ you can change them with Smarty's
```php
<?php
-$smarty->left_delimiter = '<!--{';
-$smarty->right_delimiter = '}-->';
+$smarty->setLeftDelimiter('<!--{');
+$smarty->setRightDelimiter('}-->');
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
@@ -69,7 +68,7 @@ Where the template is:
```smarty
Welcome <!--{$name}--> to Smarty
-<script language="javascript">
+ <script>
var foo = <!--{$foo}-->;
function dosomething() {
alert("foo is " + foo);
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md
deleted file mode 100644
index a9a43efd9..000000000
--- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Math
-
-Math can be applied directly to variable values.
-
-## Examples
-```smarty
-{$foo+1}
-
-{$foo*$bar}
-
-{* some more complicated examples *}
-
-{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}
-
-{if ($foo+$bar.test%$baz*134232+10+$b+10)}
-
-{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
-
-{assign var="foo" value="`$foo+$bar`"}
-```
-
-> **Note**
->
-> Although Smarty can handle some very complex expressions and syntax,
-> it is a good rule of thumb to keep the template syntax minimal and
-> focused on presentation. If you find your template syntax getting too
-> complex, it may be a good idea to move the bits that do not deal
-> explicitly with presentation to PHP by way of plugins or modifiers.
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md
index 41f6c458d..e3c7d58b2 100644
--- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md
@@ -1,6 +1,6 @@
# Attributes
-Most of the [functions](./language-syntax-functions.md) take attributes that
+Most of the [tags](./language-syntax-tags.md) take attributes that
specify or modify their behavior. Attributes to Smarty functions are
much like HTML attributes. Static values don't have to be enclosed in
quotes, but it is required for literal strings. Variables with or
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md
index 7052c20ef..379418efb 100644
--- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md
@@ -1,7 +1,7 @@
# Comments
Template comments are surrounded by asterisks, and that is surrounded by
-the [delimiter](../../programmers/api-variables/variable-left-delimiter.md) tags like so:
+the [delimiter](../../designers/language-basic-syntax/language-escaping.md) tags like so:
## Examples
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md
new file mode 100644
index 000000000..98a56538e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md
@@ -0,0 +1,88 @@
+# Operators
+
+## Basic
+
+Various basic operators can be applied directly to variable values.
+
+## Examples
+```smarty
+{$foo + 1}
+
+{$foo * $bar}
+
+{$foo->bar - $bar[1] * $baz->foo->bar() -3 * 7}
+
+{if ($foo + $bar.test % $baz * 134232 + 10 + $b + 10)}
+ ...
+{/if}
+
+{$foo = $foo + $bar}
+```
+
+> **Note**
+>
+> Although Smarty can handle some very complex expressions and syntax,
+> it is a good rule of thumb to keep the template syntax minimal and
+> focused on presentation. If you find your template syntax getting too
+> complex, it may be a good idea to move the bits that do not deal
+> explicitly with presentation to PHP by way of plugins or modifiers.
+
+## List
+The following is a list of recognized operators, which must be
+separated from surrounding elements by spaces. Note that items listed in
+\[brackets\] are optional. PHP equivalents are shown where applicable.
+
+| Operator | Alternates | Syntax Example | Meaning | PHP Equivalent |
+|--------------------|------------|----------------------|--------------------------------|--------------------|
+| == | eq | $a eq $b | equals | == |
+| != | ne, neq | $a neq $b | not equals | != |
+| > | gt | $a gt $b | greater than | > |
+| < | lt | $a lt $b | less than | < |
+| >= | gte, ge | $a ge $b | greater than or equal | >= |
+| <= | lte, le | $a le $b | less than or equal | <= |
+| === | | $a === 0 | check for identity | === |
+| ! | not | not $a | negation (unary) | ! |
+| % | mod | $a mod $b | modulo | % |
+| is \[not\] div by | | $a is not div by 4 | divisible by | $a % $b == 0 |
+| is \[not\] even | | $a is not even | \[not\] an even number (unary) | $a % 2 == 0 |
+| is \[not\] even by | | $a is not even by $b | grouping level \[not\] even | ($a / $b) % 2 == 0 |
+| is \[not\] odd | | $a is not odd | \[not\] an odd number (unary) | $a % 2 != 0 |
+| is \[not\] odd by | | $a is not odd by $b | \[not\] an odd grouping | ($a / $b) % 2 != 0 |
+| is in | | $a is in $b | exists in array | in_array($a, $b) |
+| is \[not\] in | | $a is not in $b | does not exist in array | !in_array($a, $b) |
+
+## Ternary
+You can use the `?:` (or ternary) operator to test one expression and present the value
+of the second or third expression, based on the result of the test.
+
+In other words:
+```smarty
+{$test ? "OK" : "FAIL"}
+```
+will result in OK if `$test` is set to true, and in FAIL otherwise.
+
+There is also a shorthand `?:` operator:
+```smarty
+{$myVar ?: "empty"}
+```
+will result in 'empty' if `$myVar` is not set or set to something that evaluates to false, such as an empty string.
+If `$myVar` is set to something that evaluates to true, the value of `$myVar` is returned. So, the following will
+return 'hello':
+```smarty
+{$myVar="hello"}
+{$myVar ?: "empty"}
+```
+
+## Testing for null
+If "something that evaluates to false" is to broad a test for you, you can use the `??` (or null coalescing) operator
+to trigger only if the tested value is undefined or set to null.
+```smarty
+{$myVar ?? "empty"}
+```
+will result in 'empty' if `$myVar` is not set or set to null.
+If `$myVar` is set to something that evaluates to anything else, the value of `$myVar` is returned. So, the following will
+return an empty string (''):
+```smarty
+{$myVar=""}
+{$myVar ?: "this is not shown"}
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-tags.md
index c3c8c21ce..7142f0da4 100644
--- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-tags.md
@@ -1,4 +1,4 @@
-# Functions
+# Tags
Every Smarty tag either prints a [variable](./language-syntax-variables.md) or
invokes some sort of function. These are processed and displayed by
@@ -11,7 +11,6 @@ within delimiters like so: `{funcname attr1="val1" attr2="val2"}`.
{config_load file="colors.conf"}
{include file="header.tpl"}
-{insert file="banner_ads.tpl" title="My Site"}
{if $logged_in}
Welcome, <span style="color:{#fontColor#}">{$name}!</span>
@@ -32,8 +31,8 @@ within delimiters like so: `{funcname attr1="val1" attr2="val2"}`.
[`{strip}`](../language-builtin-functions/language-function-strip.md). There should be no need to
change or modify them.
-- Custom functions are **additional** functions implemented via
- [plugins](../../programmers/plugins.md). They can be modified to your liking, or you can
+- Custom tags are **additional** tags implemented via
+ [plugins](../../api/extending/introduction.md). They can be modified to your liking, or you can
create new ones. [`{html_options}`](../language-custom-functions/language-function-html-options.md)
is an example of a custom function.
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md
index c0285d078..78d309ace 100644
--- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md
@@ -88,9 +88,6 @@ Object chaining:
{$object->method1($x)->method2($y)}
-Direct PHP function access:
-
-{time()}
```
> **Note**
diff --git a/vendor/sabre/event/bin/.empty b/vendor/smarty/smarty/docs/designers/language-builtin-functions.md
index e69de29bb..e69de29bb 100644
--- a/vendor/sabre/event/bin/.empty
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions.md
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md
index 10dc3a6f0..852b392fc 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md
@@ -4,7 +4,7 @@ Smarty comes with several built-in functions. These built-in functions
are the integral part of the smarty template engine. They are compiled
into corresponding inline PHP code for maximum performance.
-You cannot create your own [custom functions](../language-custom-functions/index.md) with the same name; and you
+You cannot create your own [custom tags](../language-custom-functions/index.md) with the same name; and you
should not need to modify the built-in functions.
A few of these functions have an `assign` attribute which collects the
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md
index f5faa46d5..abcc8e5a6 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md
@@ -8,12 +8,12 @@ execution of a template**.
|----------------|------------|-----------------------------------------------------------------------|
| var | | The name of the variable being assigned |
| value | | The value being assigned |
-| scope | (optional) | The scope of the assigned variable: \'parent\',\'root\' or \'global\' |
+| scope | (optional) | The scope of the assigned variable: 'parent','root' or 'global' |
## Attributes of the {$var=...} syntax
| Attribute Name | Required | Description |
|----------------|------------|-----------------------------------------------------------------------|
-| scope | (optional) | The scope of the assigned variable: \'parent\',\'root\' or \'global\' |
+| scope | (optional) | The scope of the assigned variable: 'parent','root' or 'global' |
## Option Flags
| Name | Description |
@@ -102,6 +102,8 @@ A global variable is seen by all templates.
{$foo="bar" scope="global"}
```
+For more information on variable scope, please read the page on [variable scopes](../language-variables/language-variable-scopes.md).
+
To access `{assign}` variables from a php script use
[`getTemplateVars()`](../../programmers/api-functions/api-get-template-vars.md).
Here's the template that creates the variable `$foo`.
@@ -134,7 +136,6 @@ echo $smarty->getTemplateVars('foo');
The following functions can also *optionally* assign template variables: [`{capture}`](#language.function.capture),
[`{include}`](#language.function.include),
-[`{insert}`](#language.function.insert),
[`{counter}`](#language.function.counter),
[`{cycle}`](#language.function.cycle),
[`{eval}`](#language.function.eval),
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md
index c2acd1972..05334e2f6 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md
@@ -2,7 +2,7 @@
`{block}` is used to define a named area of template source for template
inheritance. For details see section of [Template
-Inheritance](../../programmers/advanced-features/advanced-features-template-inheritance.md).
+Inheritance](../../api/inheritance.md).
The `{block}` template source area of a child template will replace the
corresponding areas in the parent template(s).
@@ -195,7 +195,7 @@ The result would look like
```
See also [Template
-Inheritance](../../programmers/advanced-features/advanced-features-template-inheritance.md),
+Inheritance](../../api/inheritance.md),
[`$smarty.block.parent`](../language-variables/language-variables-smarty.md#smartyblockparent-languagevariablessmartyblockparent),
[`$smarty.block.child`](../language-variables/language-variables-smarty.md#smartyblockchild-languagevariablessmartyblockchild), and
[`{extends}`](./language-function-extends.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md
index 657f077cd..83f4d02d7 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md
@@ -27,12 +27,6 @@ is the value passed in the `name` attribute. If you do not supply the
|---------|-----------------------------------------|
| nocache | Disables caching of this captured block |
-> **Note**
->
-> Be careful when capturing [`{insert}`](#language.function.insert)
-> output. If you have [`$caching`](#caching) enabled and you have
-> [`{insert}`](#language.function.insert) commands that you expect to
-> run within cached content, do not capture this content.
## Examples
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md
index e13c30836..1972179d1 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md
@@ -9,7 +9,6 @@
|----------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| file | Yes | The name of the config file to include |
| section | No | The name of the section to load |
-| scope | no | How the scope of the loaded variables are treated, which must be one of local, parent or global. local means variables are loaded into the local template context. parent means variables are loaded into both the local context and the parent template that called it. global means variables are available to all templates. |
## Examples
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md
index eba17b9bd..06241d93b 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md
@@ -2,7 +2,7 @@
`{extends}` tags are used in child templates in template inheritance for
extending parent templates. For details see section of [Template
-Inheritance](../../programmers/advanced-features/advanced-features-template-inheritance.md).
+Inheritance](../../api/inheritance.md).
- The `{extends}` tag must be on the first line of the template.
@@ -10,7 +10,7 @@ Inheritance](../../programmers/advanced-features/advanced-features-template-inhe
tag it may contain only `{block}` tags. Any other template content
is ignored.
-- Use the syntax for [template resources](../../programmers/resources.md) to extend files
+- Use the syntax for [template resources](../../api/resources.md) to extend files
outside the [`$template_dir`](../../programmers/api-variables/variable-template-dir.md) directory.
## Attributes
@@ -33,5 +33,5 @@ Inheritance](../../programmers/advanced-features/advanced-features-template-inhe
{extends 'parent.tpl'} {* short-hand *}
```
-See also [Template Inheritance](../../programmers/advanced-features/advanced-features-template-inheritance.md)
+See also [Template Inheritance](../../api/inheritance.md)
and [`{block}`](./language-function-block.md).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md
index 645d6c52c..38d151169 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md
@@ -166,7 +166,7 @@ looping over a PHP iterator instead of an array().
```php
<?php
- include('Smarty.class.php');
+ use Smarty\Smarty;
$smarty = new Smarty;
@@ -252,7 +252,7 @@ iteration.
```smarty
{foreach $myNames as $name}
- {if $name@iteration is even by 3}
+ {if $name@index is even by 3}
<span style="color: #000">{$name}</span>
{else}
<span style="color: #eee">{$name}</span>
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md
index c7be37a2c..eb00cfda3 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md
@@ -3,36 +3,8 @@
`{if}` statements in Smarty have much the same flexibility as PHP
[if](https://www.php.net/if) statements, with a few added features for the
template engine. Every `{if}` must be paired with a matching `{/if}`.
-`{else}` and `{elseif}` are also permitted. All PHP conditionals and
-functions are recognized, such as *\|\|*, *or*, *&&*, *and*,
-*is_array()*, etc.
-
-If security is enabled, only PHP functions from `$php_functions` property
-of the security policy are allowed. See the
-[Security](../../programmers/advanced-features/advanced-features-security.md) section for details.
-
-The following is a list of recognized qualifiers, which must be
-separated from surrounding elements by spaces. Note that items listed in
-\[brackets\] are optional. PHP equivalents are shown where applicable.
-
-## Qualifiers
-
-| Qualifier | Alternates | Syntax Example | Meaning | PHP Equivalent |
-|--------------------|------------|----------------------|--------------------------------|--------------------|
-| == | eq | $a eq $b | equals | == |
-| != | ne, neq | $a neq $b | not equals | != |
-| > | gt | $a gt $b | greater than | > |
-| < | lt | $a lt $b | less than | < |
-| >= | gte, ge | $a ge $b | greater than or equal | >= |
-| <= | lte, le | $a le $b | less than or equal | <= |
-| === | | $a === 0 | check for identity | === |
-| ! | not | not $a | negation (unary) | ! |
-| % | mod | $a mod $b | modulo | % |
-| is \[not\] div by | | $a is not div by 4 | divisible by | $a % $b == 0 |
-| is \[not\] even | | $a is not even | \[not\] an even number (unary) | $a % 2 == 0 |
-| is \[not\] even by | | $a is not even by $b | grouping level \[not\] even | ($a / $b) % 2 == 0 |
-| is \[not\] odd | | $a is not odd | \[not\] an odd number (unary) | $a % 2 != 0 |
-| is \[not\] odd by | | $a is not odd by $b | \[not\] an odd grouping | ($a / $b) % 2 != 0 |
+`{else}` and `{elseif}` are also permitted. All [operators](../language-basic-syntax/language-syntax-operators.md) are recognized, such as *==*,
+*\|\|*, *or*, *&&*, *and*, etc and you can use modifiers as functions, such as *is_array()*.
## Examples
```smarty
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md
index d12a817e0..0710db7d8 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md
@@ -41,7 +41,7 @@ available within the included template.
is useful to return values from the included template to the
including template.
-- Use the syntax for [template resources](../../programmers/resources.md) to `{include}`
+- Use the syntax for [template resources](../../api/resources.md) to `{include}`
files outside of the [`$template_dir`](../../programmers/api-variables/variable-template-dir.md)
directory.
@@ -85,11 +85,11 @@ The template above includes the example `links.tpl` below
```smarty
<div id="box">
- <h3>{$title}{/h3>
+ <h3>{$title}</h3>
<ul>
{foreach from=$links item=l}
.. do stuff ...
- </foreach}
+ {/foreach}
</ul>
</div>
```
@@ -183,5 +183,5 @@ current template.
{include file="$style_dir/$module.$view.tpl"}
```
-See also [`{insert}`](./language-function-insert.md), [template resources](../../programmers/resources.md) and
+See also [template resources](../../api/resources.md) and
[componentized templates](../../appendixes/tips.md#componentized-templates).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md
index 54f0729dd..e69de29bb 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md
@@ -1,86 +0,0 @@
-# {insert}
-
-> **Note**
->
-> `{insert}` tags are deprecated from Smarty, and should not be used.
-> Put your PHP logic in PHP scripts or plugin functions instead.
-> As of Smarty 3.1 the `{insert}` tags are only available from
-> [SmartyBC](#bc).
-
-`{insert}` tags work much like [`{include}`](./language-function-include.md)
-tags, except that `{insert}` tags are NOT cached when template
-[caching](../../programmers/caching.md) is enabled. They will be executed on every
-invocation of the template.
-
-| Attribute Name | Required | Description |
-|----------------|----------|----------------------------------------------------------------------------------|
-| name | Yes | The name of the insert function (insert_`name`) or insert plugin |
-| assign | No | The name of the template variable the output will be assigned to |
-| script | No | The name of the php script that is included before the insert function is called |
-| \[var \...\] | No | variable to pass to insert function |
-
-## Examples
-
-Let's say you have a template with a banner slot at the top of the
-page. The banner can contain any mixture of HTML, images, flash, etc. so
-we can't just use a static link here, and we don't want this contents
-cached with the page. In comes the {insert} tag: the template knows
-\#banner\_location\_id\# and \#site\_id\# values (gathered from a
-[config file](../config-files.md)), and needs to call a function to get the
-banner contents.
-
-```smarty
- {* example of fetching a banner *}
- {insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
- {insert "getBanner" lid=#banner_location_id# sid=#site_id#} {* short-hand *}
-```
-
-In this example, we are using the name "getBanner" and passing the
-parameters \#banner\_location\_id\# and \#site\_id\#. Smarty will look
-for a function named insert\_getBanner() in your PHP application,
-passing the values of \#banner\_location\_id\# and \#site\_id\# as the
-first argument in an associative array. All {insert} function names in
-your application must be prepended with "insert_" to remedy possible
-function name-space conflicts. Your insert\_getBanner() function should
-do something with the passed values and return the results. These
-results are then displayed in the template in place of the {insert} tag.
-In this example, Smarty would call this function:
-insert_getBanner(array("lid" => "12345","sid" => "67890"));
-and display the returned results in place of the {insert} tag.
-
-- If you supply the `assign` attribute, the output of the `{insert}`
- tag will be assigned to this template variable instead of being
- output to the template.
-
- > **Note**
- >
- > Assigning the output to a template variable isn't too useful with
- > [caching](../../programmers/api-variables/variable-caching.md) enabled.
-
-- If you supply the `script` attribute, this php script will be
- included (only once) before the `{insert}` function is executed.
- This is the case where the insert function may not exist yet, and a
- php script must be included first to make it work.
-
- The path can be either absolute, or relative to
- [`$trusted_dir`](../../programmers/api-variables/variable-trusted-dir.md). If security is enabled,
- then the script must be located in the `$trusted_dir` path of the
- security policy. See the [Security](../../programmers/advanced-features/advanced-features-security.md)
- section for details.
-
-The Smarty object is passed as the second argument. This way you can
-reference and modify information in the Smarty object from within the
-`{insert}` function.
-
-If no PHP script can be found Smarty is looking for a corresponding
-insert plugin.
-
-> **Note**
->
-> It is possible to have portions of the template not cached. If you
-> have [caching](../../programmers/api-variables/variable-caching.md) turned on, `{insert}` tags will not be
-> cached. They will run dynamically every time the page is created, even
-> within cached pages. This works good for things like banners, polls,
-> live weather, search results, user feedback areas, etc.
-
-See also [`{include}`](./language-function-include.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md
index c9f73c307..05bc8ecca 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md
@@ -4,7 +4,7 @@
template delimiters, by default **{** and **}**. You can also use
[`{literal}{/literal}`](./language-function-literal.md) to escape blocks of
text eg Javascript or CSS. See also the complementary
-[`{$smarty.ldelim}`](../../programmers/api-variables/variable-left-delimiter.md).
+[`{$smarty.ldelim}`](../../designers/language-basic-syntax/language-escaping.md).
```smarty
{* this will print literal delimiters out of the template *}
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md
index 4bc12f9d0..0253f260e 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md
@@ -3,7 +3,7 @@
`{literal}` tags allow a block of data to be taken literally. This is
typically used around Javascript or stylesheet blocks where {curly
braces} would interfere with the template
-[delimiter](../../programmers/api-variables/variable-left-delimiter.md) syntax. Anything within
+[delimiter](../../designers/language-basic-syntax/language-escaping.md) syntax. Anything within
`{literal}{/literal}` tags is not interpreted, but displayed as-is. If
you need template tags embedded in a `{literal}` block, consider using
[`{ldelim}{rdelim}`](./language-function-ldelim.md) to escape the individual
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md
index e6d8453fd..7997ecfb6 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md
@@ -17,4 +17,4 @@ Today's date is
The above code will output the current date on a cached page.
-See also the [caching section](../../programmers/caching.md).
+See also the [caching section](../../api/caching/basics.md).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md
index 427902512..afa6366cd 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md
@@ -178,14 +178,14 @@ The above example will output:
</p>
<p>
name: Jack Jones<br />
- home: 777-555-5555<br />
- cell: 888-555-5555<br />
+ home phone: 777-555-5555<br />
+ cell phone: 888-555-5555<br />
e-mail: jack@myexample.com
</p>
<p>
name: Jane Munson<br />
- home: 000-555-5555<br />
- cell: 123456<br />
+ home phone: 000-555-5555<br />
+ cell phone: 123456<br />
e-mail: jane@myexample.com
</p>
```
@@ -326,10 +326,10 @@ The template to output the database result in a HTML table
```smarty
<table>
- <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
+ <tr><th>&nbsp;</th><th>Name</th><th>Home</th><th>Cell</th><th>Email</th></tr>
{section name=co loop=$contacts}
<tr>
- <td><a href="view.php?id={$contacts[co].id}">view<a></td>
+ <td><a href="view.php?id={$contacts[co].id}">view</a></td>
<td>{$contacts[co].name}</td>
<td>{$contacts[co].home}</td>
<td>{$contacts[co].cell}</td>
@@ -465,7 +465,7 @@ header block every five rows.
<table>
{section name=co loop=$contacts}
{if $smarty.section.co.iteration is div by 5}
- <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
+ <tr><th>&nbsp;</th><th>Name</th><th>Home</th><th>Cell</th><th>Email</th></tr>
{/if}
<tr>
<td><a href="view.php?id={$contacts[co].id}">view<a></td>
@@ -478,13 +478,13 @@ header block every five rows.
</table>
```
-An example that uses the `iteration` property to alternate a text color every
+An example that uses the `index` property to alternate a text color every
third row.
```smarty
<table>
{section name=co loop=$contacts}
- {if $smarty.section.co.iteration is even by 3}
+ {if $smarty.section.co.index is even by 3}
<span style="color: #ffffff">{$contacts[co].name}</span>
{else}
<span style="color: #dddddd">{$contacts[co].name}</span>
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md
index 13eaef9b4..d0a4b2f3c 100644
--- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md
@@ -3,31 +3,8 @@
`{while}` loops in Smarty have much the same flexibility as PHP
[while](https://www.php.net/while) statements, with a few added features for
the template engine. Every `{while}` must be paired with a matching
-`{/while}`. All PHP conditionals and functions are recognized, such as
-*\|\|*, *or*, *&&*, *and*, *is_array()*, etc.
-
-The following is a list of recognized qualifiers, which must be
-separated from surrounding elements by spaces. Note that items listed in
-\[brackets\] are optional. PHP equivalents are shown where applicable.
-
-## Qualifiers
-
-| Qualifier | Alternates | Syntax Example | Meaning | PHP Equivalent |
-|--------------------|------------|----------------------|--------------------------------|--------------------|
-| == | eq | $a eq $b | equals | == |
-| != | ne, neq | $a neq $b | not equals | != |
-| > | gt | $a gt $b | greater than | > |
-| < | lt | $a lt $b | less than | < |
-| >= | gte, ge | $a ge $b | greater than or equal | >= |
-| <= | lte, le | $a le $b | less than or equal | <= |
-| === | | $a === 0 | check for identity | === |
-| ! | not | not $a | negation (unary) | ! |
-| % | mod | $a mod $b | modulo | % |
-| is \[not\] div by | | $a is not div by 4 | divisible by | $a % $b == 0 |
-| is \[not\] even | | $a is not even | \[not\] an even number (unary) | $a % 2 == 0 |
-| is \[not\] even by | | $a is not even by $b | grouping level \[not\] even | ($a / $b) % 2 == 0 |
-| is \[not\] odd | | $a is not odd | \[not\] an odd number (unary) | $a % 2 != 0 |
-| is \[not\] odd by | | $a is not odd by $b | \[not\] an odd grouping | ($a / $b) % 2 != 0 |
+`{/while}`. All [operators](../language-basic-syntax/language-syntax-operators.md) are recognized, such as *==*,
+*\|\|*, *or*, *&&*, *and*, etc and you can use modifiers as functions, such as *is_array()*.
## Examples
```smarty
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/index.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/index.md
index 81979654c..2c1d9b709 100644
--- a/vendor/smarty/smarty/docs/designers/language-custom-functions/index.md
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/index.md
@@ -1,4 +1,4 @@
-# Custom Functions
+# Custom Tags
Smarty comes with several custom plugin functions that you can use in
the templates.
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md
index 70c7a3d19..e44862c22 100644
--- a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md
@@ -22,7 +22,7 @@ output to the template.
> templates.
>
> - Evaluated variables are compiled on every invocation, the compiled
-> versions are not saved! However, if you have [caching](../../programmers/caching.md)
+> versions are not saved! However, if you have [caching](../../api/caching/basics.md)
> enabled, the output will be cached with the rest of the template.
>
> - If the content to evaluate doesn't change often, or is used
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md
index 2ff494fdd..a2f07f3a1 100644
--- a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md
@@ -28,7 +28,7 @@ ftp and display the contents.
> If security is enabled, and you are fetching a file from the local
> file system, `{fetch}` will only allow files from within the
> `$secure_dir` path of the security policy. See the
- > [Security](../../programmers/advanced-features/advanced-features-security.md) section for details.
+ > [Security](../../api/security.md) section for details.
- If the `assign` attribute is set, the output of the `{fetch}`
function will be assigned to this template variable instead of being
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md
index 7ecde2654..0ae02cae2 100644
--- a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md
@@ -20,7 +20,7 @@ automatically calculated from the image file if they are not supplied.
from. If not given, the web server's document root
`$_ENV['DOCUMENT_ROOT']` is used as the base. If security is
enabled, then the image must be located in the `$secure_dir` path of
- the security policy. See the [Security](../../programmers/advanced-features/advanced-features-security.md)
+ the security policy. See the [Security](../../api/security.md)
section for details.
- `href` is the href value to link the image to. If link is supplied,
@@ -37,7 +37,7 @@ automatically calculated from the image file if they are not supplied.
>
> `{html_image}` requires a hit to the disk to read the image and
> calculate the height and width. If you don't use template
-> [caching](../../programmers/caching.md), it is generally better to avoid `{html_image}`
+> [caching](../../api/caching/basics.md), it is generally better to avoid `{html_image}`
> and leave image tags static for optimal performance.
## Examples
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md
index bcb8b7d4d..c32c23871 100644
--- a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md
@@ -34,7 +34,7 @@ spiders to lift email addresses off of a site.
<a href="mailto:me@example.com" >send me some mail</a>
{mailto address="me@example.com" encode="javascript"}
-<script type="text/javascript" language="javascript">
+ <script>
eval(unescape('%64%6f% ... snipped ...%61%3e%27%29%3b'))
</script>
@@ -51,7 +51,7 @@ spiders to lift email addresses off of a site.
<a href="mailto:me@example.com" class="email">me@example.com</a>
{mailto address="me@example.com" encode="javascript_charcode"}
-<script type="text/javascript" language="javascript">
+ <script>
{document.write(String.fromCharCode(60,97, ... snipped ....60,47,97,62))}
</script>
```
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
index 4089fdb33..cb2a8d708 100644
--- a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
@@ -1,6 +1,6 @@
# {textformat}
-`{textformat}` is a [block function](../../programmers/plugins/plugins-block-functions.md) used to
+`{textformat}` is a block tag used to
format text. It basically cleans up spaces and special characters, and
formats paragraphs by wrapping at a boundary and indenting lines.
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/index.md b/vendor/smarty/smarty/docs/designers/language-modifiers/index.md
index c9aeef887..3f52c2e77 100644
--- a/vendor/smarty/smarty/docs/designers/language-modifiers/index.md
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/index.md
@@ -1,39 +1,15 @@
# Variable Modifiers
Variable modifiers can be applied to
-[variables](../language-variables/index.md), [custom functions](../language-custom-functions/index.md)
+[variables](../language-variables/index.md), [custom tags](../language-custom-functions/index.md)
or strings. To apply a modifier,
specify the value followed by a `|` (pipe) and the modifier name. A
modifier may accept additional parameters that affect its behavior.
These parameters follow the modifier name and are separated by a `:`
-(colon). Also, *all php-functions can be used as modifiers implicitly*
-(more below) and modifiers can be
-[combined](../language-combining-modifiers.md).
-
-- [capitalize](language-modifier-capitalize.md)
-- [cat](language-modifier-cat.md)
-- [count_characters](language-modifier-count-characters.md)
-- [count_paragraphs](language-modifier-count-paragraphs.md)
-- [count_sentences](language-modifier-count-sentences.md)
-- [count_words](language-modifier-count-words.md)
-- [date_format](language-modifier-date-format.md)
-- [default](language-modifier-default.md)
-- [escape](language-modifier-escape.md)
-- [from_charset](language-modifier-from-charset.md)
-- [indent](language-modifier-indent.md)
-- [lower](language-modifier-lower.md)
-- [nl2br](language-modifier-nl2br.md)
-- [regex_replace](language-modifier-regex-replace.md)
-- [replace](language-modifier-replace.md)
-- [spacify](language-modifier-spacify.md)
-- [string_format](language-modifier-string-format.md)
-- [strip](language-modifier-strip.md)
-- [strip_tags](language-modifier-strip-tags.md)
-- [to_charset](language-modifier-to-charset.md)
-- [truncate](language-modifier-truncate.md)
-- [unescape](language-modifier-unescape.md)
-- [upper](language-modifier-upper.md)
-- [wordwrap](language-modifier-wordwrap.md)
+(colon).
+
+Modifiers can be applied to any type of variables, including arrays
+and objects.
## Examples
@@ -65,58 +41,64 @@ These parameters follow the modifier name and are separated by a `:`
{* php's count *}
{$myArray|@count}
-{* this will uppercase and truncate the whole array *}
+{* this will uppercase the whole array *}
<select name="name_id">
-{html_options output=$my_array|upper|truncate:20}
+{html_options output=$my_array|upper}
</select>
+```
+
+## Combining Modifiers
+
+You can apply any number of modifiers to a variable. They will be
+applied in the order they are combined, from left to right. They must be
+separated with a `|` (pipe) character.
+
+```php
+<?php
+
+$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
+```
+
+where template is:
+
+```smarty
+{$articleTitle}
+{$articleTitle|upper|spacify}
+{$articleTitle|lower|spacify|truncate}
+{$articleTitle|lower|truncate:30|spacify}
+{$articleTitle|lower|spacify|truncate:30:". . ."}
+```
+
+
+The above example will output:
+
+```
+Smokers are Productive, but Death Cuts Efficiency.
+S M O K E R S A R ....snip.... H C U T S E F F I C I E N C Y .
+s m o k e r s a r ....snip.... b u t d e a t h c u t s...
+s m o k e r s a r e p r o d u c t i v e , b u t . . .
+s m o k e r s a r e p. . .
+```
+
+## Using modifiers in expressions
+
+Modifiers can also be used in expressions. For example, you can use the [isset modifier](./language-modifier-isset.md)
+to test if a variable holds a value different from null.
+
+```smarty
+{if $varA|isset}
+ <b>variable A is set</b>
+{/if}
+```
+
+You can also use modifiers in expressions in a PHP-style syntax:
+
+```smarty
+{if isset($varA)}
+ <b>variable A is set</b>
+{/if}
```
-
-- Modifiers can be applied to any type of variables, including arrays
- and objects.
-
- > **Note**
- >
- > The default behavior was changed with Smarty 3. In Smarty 2.x, you
- > had to use an "`@`" symbol to apply a modifier to an array, such
- > as `{$articleTitle|@count}`. With Smarty 3, the "`@`" is no
- > longer necessary, and is ignored.
- >
- > If you want a modifier to apply to each individual item of an
- > array, you will either need to loop the array in the template, or
- > provide for this functionality inside your modifier function.
-
- > **Note**
- >
- > Second, in Smarty 2.x, modifiers were applied to the result of
- > math expressions like `{8+2}`, meaning that
- > `{8+2|count_characters}` would give `2`, as 8+2=10 and 10 is two
- > characters long. With Smarty 3, modifiers are applied to the
- > variables or atomic expressions before executing the calculations,
- > so since 2 is one character long, `{8+2|count_characters}`
- > gives 9. To get the old result use parentheses like
- > `{(8+2)|count_characters}`.
-
-- Modifiers are autoloaded from the
- [`$plugins_dir`](../../programmers/api-variables/variable-plugins-dir.md) or can be registered
- explicitly with the [`registerPlugin()`](../../programmers/api-functions/api-register-plugin.md)
- function. The later is useful for sharing a function between php
- scripts and smarty templates.
-
-- All php-functions can be used as modifiers implicitly, as
- demonstrated in the example above. However, using php-functions as
- modifiers has two little pitfalls:
-
- - First - sometimes the order of the function-parameters is not
- the desirable one. Formatting `$foo` with
- `{"%2.f"|sprintf:$foo}` actually works, but asks for the more
- intuitive, like `{$foo|string_format:"%2.f"}` that is provided
- by the Smarty distribution.
-
- - Secondly - if security is enabled, all php-functions that are to
- be used as modifiers have to be declared trusted in the
- `$modifiers` property of the security policy. See the
- [Security](../../programmers/advanced-features/advanced-features-security.md) section for details.
See also [`registerPlugin()`](../../programmers/api-functions/api-register-plugin.md), [combining
modifiers](../language-combining-modifiers.md). and [extending smarty with
-plugins](../../programmers/plugins.md)
+plugins](../../api/extending/introduction.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md
new file mode 100644
index 000000000..36436a398
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md
@@ -0,0 +1,21 @@
+# count
+
+Returns the number of elements in an array (or Countable object). Will return 0 for null.
+Returns 1 for any other type (such as a string).
+
+If the optional mode parameter is set to 1, count() will recursively count the array.
+This is particularly useful for counting all the elements of a multidimensional array.
+
+## Basic usage
+```smarty
+{if $myVar|count > 3}4 or more{/if}
+{if count($myVar) > 3}4 or more{/if}
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|--------------------------------------------------------|
+| 1 | int | No | If set to 1, count() will recursively count the array. |
+
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md
new file mode 100644
index 000000000..ce3f86a73
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md
@@ -0,0 +1,26 @@
+# debug_print_var
+
+
+
+Returns the value of the given variable in a human-readable format in HTML.
+Used in the [debug console](../chapter-debugging-console.md), but you can also use it in your template
+while developing to see what is going on under the hood.
+
+> **Note**
+>
+> Use for debugging only! Since you may accidentally reveal sensitive information or introduce vulnerabilities such as XSS using this
+method never use it in production.
+
+## Basic usage
+```smarty
+{$myVar|debug_print_var}
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|------------------------------------------------------------------------|
+| 1 | int | No | maximum recursion depth if $var is an array or object (defaults to 10) |
+| 2 | int | No | maximum string length if $var is a string (defaults to 40) |
+
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
index 6fd5dd2b4..18c98f1cb 100644
--- a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
@@ -73,6 +73,6 @@ This snippet is useful for emails, but see also
<a href="mailto:{$EmailAddress|escape:'hex'}">{$EmailAddress|escape:'mail'}</a>
```
-See also [escaping smarty parsing](../language-basic-syntax/language-escaping.md),
+See also [auto-escaping](../../api/configuring.md#enabling-auto-escaping), [escaping smarty parsing](../language-basic-syntax/language-escaping.md),
[`{mailto}`](../language-custom-functions/language-function-mailto.md) and the [obfuscating email
-addresses](../../appendixes/tips.md#obfuscating-e-mail-addresses) page.
+addresses](../../appendixes/tips.md#obfuscating-e-mail-addresses) pages.
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
index bf4b4769e..25c4d2d9e 100644
--- a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
@@ -16,5 +16,5 @@ modifier](language-modifier-to-charset.md).
> modifier should only be used in cases where the application cannot
> anticipate that a certain string is required in another encoding.
-See also [Charset Encoding](../../programmers/charset.md), [to_charset
+See also [Configuring Smarty](../../api/configuring.md), [to_charset
modifier](language-modifier-to-charset.md).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md
new file mode 100644
index 000000000..f6cfffcd1
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md
@@ -0,0 +1,9 @@
+# is_array
+
+Return true if the variable passed to it is an array.
+
+## Basic usage
+
+```smarty
+{if $myVar|is_array}it's an array{/if}
+```
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md
new file mode 100644
index 000000000..83e31dfa9
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md
@@ -0,0 +1,11 @@
+# isset
+
+Returns true if the variable(s) passed to it are different from null.
+
+If multiple parameters are supplied then isset() will return true only if all of the parameters are
+not null.
+
+## Basic usage
+```smarty
+{if $myVar|isset}all set!{/if}
+```
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md
new file mode 100644
index 000000000..9a044714d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md
@@ -0,0 +1,26 @@
+# join
+
+Returns a string containing all the element of the given array
+with the separator string between each.
+
+## Basic usage
+
+For `$myArray` populated with `['a','b','c']`, the following will return the string `abc`.
+```smarty
+{$myArray|join}
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|--------|----------|-------------------------------------------------------------|
+| 1 | string | No | glue used between array elements. Defaults to empty string. |
+
+## Examples
+
+
+For `$myArray` populated with `[1,2,3]`, the following will return the string `1-2-3`.
+```smarty
+{$myArray|join:"-"}
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md
new file mode 100644
index 000000000..4e70f0c26
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md
@@ -0,0 +1,27 @@
+# json_encode
+
+Transforms a value into a valid JSON string.
+
+## Basic usage
+```smarty
+{$user|json_encode}
+```
+Depending on the value of `$user` this would return a string in JSON-format, e.g. `{"username":"my_username","email":"my_username@smarty.net"}`.
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------------------------------------------------------------------------------------|
+| 1 | int | No | bitmask of flags, directly passed to [PHP's json_encode](https://www.php.net/json_encode) |
+
+
+## Examples
+
+By passing `16` as the second parameter, you can force json_encode to always format the JSON-string as an object.
+Without it, an array `$myArray = ["a","b"]` would be formatted as a javascript array:
+
+```smarty
+{$myArray|json_encode} # renders: ["a","b"]
+{$myArray|json_encode:16} # renders: {"0":"a","1":"b"}
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md
new file mode 100644
index 000000000..5dbfaa30d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md
@@ -0,0 +1,9 @@
+# noprint
+
+Always returns an empty string. This can be used to call a function or a method on an object that
+returns output, and suppress the output.
+
+## Basic usage
+```smarty
+{$controller->sendEmail()|noprint}
+```
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md
new file mode 100644
index 000000000..44c3acf44
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md
@@ -0,0 +1,32 @@
+# number_format
+
+Allows you to format a number using decimals and a thousands-separator. By default, the number of decimals is 0
+and the number is rounded.
+
+## Basic usage
+```smarty
+{$num = 2000.151}
+{$num|number_format} # renders: 2,000
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|--------|----------|---------------------------------------|
+| 1 | int | No | number of decimals (defaults to 0) |
+| 2 | string | No | decimal separator (defaults to ".") |
+| 3 | string | No | thousands-separator (defaults to ",") |
+
+
+## Examples
+
+```smarty
+{$num = 2000.151}
+{$num|number_format:2} # renders: 2,000.15
+```
+
+```smarty
+{$num = 2000.151}
+{$num|number_format:2:".":""} # renders: 2000.15
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md
new file mode 100644
index 000000000..e9cce97d3
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md
@@ -0,0 +1,8 @@
+# raw
+
+Prevents variable escaping when [auto-escaping](../../api/configuring.md#enabling-auto-escaping) is activated.
+
+## Basic usage
+```smarty
+{$myVar|raw}
+```
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md
new file mode 100644
index 000000000..c05b899a9
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md
@@ -0,0 +1,35 @@
+# round
+
+Rounds a number to the specified precision.
+
+## Basic usage
+```smarty
+{3.14|round} # renders: 3
+```
+
+```smarty
+{3.141592|round:2} # renders: 3.14
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|---------------------------|
+| 1 | int | No | precision (defaults to 0) |
+| 2 | int | No | mode (defaults to 1) |
+
+If 'precision' is negative, the number is rounded to the nearest power of 10. See examples below.
+
+The parameter 'mode' defines how the rounding is done. By default, 2.5 is rounded to 3, whereas 2.45 is rounded to 2.
+You usually don't need to change this. For more details on rounding modes,
+see [PHP's documentation on round](https://www.php.net/manual/en/function.round).
+
+## Examples
+
+By passing `16` as the second parameter, you can force json_encode to always format the JSON-string as an object.
+Without it, an array `$myArray = ["a","b"]` would be formatted as a javascript array:
+
+```smarty
+{$myArray|json_encode} # renders: ["a","b"]
+{$myArray|json_encode:16} # renders: {"0":"a","1":"b"}
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md
new file mode 100644
index 000000000..caef884f5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md
@@ -0,0 +1,32 @@
+# split
+
+Splits a string into an array, using the optional second parameter as the separator.
+
+## Basic usage
+
+For `$chars` populated with `'abc'`, the following will produce a html list with 3 elements (a, b and c).
+```smarty
+<ol>
+ {foreach $chars|split as $char}
+ <li>{$char|escape}</li>
+ {/foreach}
+</ol>
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|--------|----------|------------------------------------------------------------------------------------------------------------------------------|
+| 1 | string | No | separator used to split the string on. Defaults to empty string, causing each character in the source string to be separate. |
+
+## Examples
+
+
+For `$ids` populated with `'1,2,3'`, the following will produce a html list with 3 elements (1, 2 and 3).
+```smarty
+<ol>
+ {foreach $ids|split:',' as $id}
+ <li>{$id|escape}</li>
+ {/foreach}
+</ol>
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md
new file mode 100644
index 000000000..1ae1824d6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md
@@ -0,0 +1,14 @@
+# str_repeat
+
+Repeats the given value n times.
+
+## Basic usage
+```smarty
+{"hi"|str_repeat:2} # renders: hihi
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-----------------------|
+| 1 | int | yes | number of repetitions |
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md
new file mode 100644
index 000000000..4c1f37ab7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md
@@ -0,0 +1,9 @@
+# strlen
+
+Returns the length (number of characters) in the given string, including spaces.
+
+## Basic usage
+```smarty
+{"Smarty"|strlen} # renders: 6
+{156|strlen} # renders: 3
+```
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md
new file mode 100644
index 000000000..a79d8a4d1
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md
@@ -0,0 +1,25 @@
+# substr
+
+Returns a part (substring) of the given string starting at a given offset.
+
+## Basic usage
+```smarty
+{"Smarty"|substr:2} # renders: arty
+{"Smarty"|substr:2:3} # renders: art
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-----------------------------------------------------|
+| 1 | int | yes | offset (zero based, can be negative) |
+| 2 | int | no | length of substring returned (unlimited of omitted) |
+
+
+## Examples
+
+When used with a negative offset, the substring starts n characters from the end of the string counting backwards.
+```smarty
+{"Smarty"|substr:-2} # renders: ty
+{"Smarty"|substr:-2:1} # renders: t
+``` \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
index c0b003842..aa8cfd53f 100644
--- a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
@@ -16,5 +16,5 @@ modifier](#language.modifier.from_charset).
> modifier should only be used in cases where the application cannot
> anticipate that a certain string is required in another encoding.
-See also [Charset Encoding](../../programmers/charset.md), [from_charset
+See also [Configuring Smarty](../../api/configuring.md), [from_charset
modifier](language-modifier-from-charset.md).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
index 3173059c9..edce96381 100644
--- a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
@@ -29,5 +29,5 @@ If Strike isn't Settled Quickly it may Last a While.
IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.
```
-See also [`lower`](lower) and
+See also [`lower`](./language-modifier-lower.md) and
[`capitalize`](language-modifier-capitalize.md).
diff --git a/vendor/smarty/smarty/docs/designers/language-variables/index.md b/vendor/smarty/smarty/docs/designers/language-variables/index.md
index 58ae6eb95..0278c9170 100644
--- a/vendor/smarty/smarty/docs/designers/language-variables/index.md
+++ b/vendor/smarty/smarty/docs/designers/language-variables/index.md
@@ -8,11 +8,11 @@ variable depends on what symbol it is prefixed or enclosed within.
- [{$smarty} reserved variable](language-variables-smarty.md)
Variables in Smarty can be either displayed directly or used as
-arguments for [functions](../language-basic-syntax/language-syntax-functions.md),
+arguments for [tags](../language-basic-syntax/language-syntax-tags.md),
[attributes](../language-basic-syntax/language-syntax-attributes.md) and
[modifiers](../language-modifiers/index.md), inside conditional expressions, etc.
To print a variable, simply enclose it in the
-[delimiters](../../programmers/api-variables/variable-left-delimiter.md) so that it is the only thing
+[delimiters](../../designers/language-basic-syntax/language-escaping.md) so that it is the only thing
contained between them.
```smarty
diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
index bd356a2b0..9465a89c5 100644
--- a/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
+++ b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
@@ -7,7 +7,7 @@ Variables assigned from PHP are referenced by preceding them with a dollar
```php
<?php
-
+use Smarty\Smarty;
$smarty = new Smarty();
$smarty->assign('firstname', 'Doug');
@@ -110,7 +110,7 @@ zaphod@slartibartfast.example.com<br />
## Objects
-Properties of [objects](../../programmers/advanced-features/advanced-features-objects.md) assigned from PHP
+Properties of [objects](../../api/variables/objects.md) assigned from PHP
can be referenced by specifying the property name after the `->` symbol.
```smarty
diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md b/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
index da543fb62..cbeb66874 100644
--- a/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
+++ b/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
@@ -66,8 +66,7 @@ difference.
## {$smarty.const}
-You can access PHP constant values directly. See also [smarty
-constants](../../programmers/smarty-constants.md).
+You can access PHP constant values directly.
```php
<?php
@@ -139,12 +138,12 @@ Returns the version of Smarty the template was compiled with.
## {$smarty.block.child}
Returns block text from child template. See [Template
-inheritance](../../programmers/advanced-features/advanced-features-template-inheritance.md).
+inheritance](../../api/inheritance.md).
## {$smarty.block.parent}
Returns block text from parent template. See [Template
-inheritance](../../programmers/advanced-features/advanced-features-template-inheritance.md)
+inheritance](../../api/inheritance.md)
## {$smarty.ldelim}, {$smarty.rdelim}
diff --git a/vendor/smarty/smarty/docs/features.md b/vendor/smarty/smarty/docs/features.md
index 8405b46eb..f9a873be0 100644
--- a/vendor/smarty/smarty/docs/features.md
+++ b/vendor/smarty/smarty/docs/features.md
@@ -1,36 +1,35 @@
-Features
-=======
+# Features
Some of Smarty's features:
+
- It is extremely fast.
- It is efficient since the PHP parser does the dirty work.
- No template parsing overhead, only compiles once.
-- It is smart about [recompiling](#variable.compile.check) only the
+- It is smart about recompiling only the
template files that have changed.
- You can easily create your own custom
- [functions](#language.custom.functions) and [variable
- modifiers](#language.modifiers), so the template language is
+ [tags](api/extending/tags.md) and [modifiers](api/extending/modifiers.md), so the template language is
extremely extensible.
-- Configurable template [{delimiter}](#variable.left.delimiter) tag
+- Configurable template [{delimiter}](designers/language-basic-syntax/language-escaping.md) tag
syntax, so you can use `{$foo}`, `{{$foo}}`, `<!--{$foo}-->`, etc.
-- The [`{if}..{elseif}..{else}..{/if}`](#language.function.if)
+- The [`{if}..{elseif}..{else}..{/if}`](designers/language-builtin-functions/language-function-if.md)
constructs are passed to the PHP parser, so the `{if...}` expression
syntax can be as simple or as complex an evaluation as you like.
- Allows unlimited nesting of
- [`sections`](#language.function.section), `if's` etc.
-- Built-in [caching](#caching) support
-- Arbitrary [template](#resources) sources
-- [Template Inheritance](#advanced.features.template.inheritance) for
+ [`sections`](designers/language-builtin-functions/language-function-section.md), `if's` etc.
+- Built-in [caching](api/caching/basics.md) support
+- Arbitrary [template](api/resources.md) sources
+- [Template Inheritance](api/inheritance.md) for
easy management of template content.
-- [Plugin](#plugins) architecture
+- [Plugin](api/extending/introduction.md) architecture
## Separation of presentation from application code
- This means templates can certainly contain logic under the condition
that it is for presentation only. Things such as
- [including](./designers/language-builtin-functions/language-function-include.md) other templates,
- [alternating](./designers/language-custom-functions/language-function-cycle.md) table row colors,
- [upper-casing](./designers/language-modifiers/language-modifier-upper.md) a variable,
- [looping](./designers/language-builtin-functions/language-function-foreach.md) over an array of data and
+ [including](designers/language-builtin-functions/language-function-include.md) other templates,
+ [alternating](designers/language-custom-functions/language-function-cycle.md) table row colors,
+ [upper-casing](designers/language-modifiers/language-modifier-upper.md) a variable,
+ [looping](designers/language-builtin-functions/language-function-foreach.md) over an array of data and
rendering it are examples of presentation logic.
- This does not mean however that Smarty forces a separation of
business and presentation logic. Smarty has no knowledge of which is
@@ -61,7 +60,7 @@ inheritance, instead of including other templates we maintain our
templates as single pages. We can then manipulate blocks of content
within by inheriting them. This makes templates intuitive, efficient and
easy to manage. See
-[Template Inheritance](./programmers/advanced-features/advanced-features-template-inheritance.md)
+[Template Inheritance](api/inheritance.md)
for more info.
## Why not use XML/XSLT syntax?
@@ -135,8 +134,8 @@ that would be needed otherwise? Does the codebase or framework you plan
on using have the features you need for the presentation component?
## Sites using Smarty
-Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple, Tiki
-CMS/Groupware and X-Cart to name a few.
+Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple,
+Tiki Wiki CMS Groupware and X-Cart to name a few.
## Summary
Whether you are using Smarty for a small website or massive enterprise
diff --git a/vendor/smarty/smarty/docs/getting-started.md b/vendor/smarty/smarty/docs/getting-started.md
index f549e50e7..3628fd203 100644
--- a/vendor/smarty/smarty/docs/getting-started.md
+++ b/vendor/smarty/smarty/docs/getting-started.md
@@ -1,7 +1,7 @@
# Getting started
## Requirements
-Smarty can be run with PHP 7.1 to PHP 8.3.
+Smarty can be run with PHP 7.2 to PHP 8.3.
## Installation
Smarty can be installed with [Composer](https://getcomposer.org/).
@@ -16,32 +16,39 @@ To get the latest, unreleased version, use:
composer require smarty/smarty:dev-master
```
-To get the previous stable version of Smarty, Smarty 3, use:
+To get the previous stable version of Smarty, Smarty 4, use:
```shell
-composer require smarty/smarty:^3
+composer require smarty/smarty:^4
```
Here's how you create an instance of Smarty in your PHP scripts:
```php
<?php
+// Instantiated via composer
require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+// or ...
+
+// Instantiated directly
+require("/path/to/smarty/libs/Smarty.class.php");
+use Smarty\Smarty;
$smarty = new Smarty();
```
Now that the library files are in place, it's time to set up the Smarty
directories for your application.
-Smarty requires four directories which are by default named
- [`templates`](./programmers/api-variables/variable-template-dir.md),
- [`configs`](./programmers/api-variables/variable-config-dir.md),
- [`templates_c`](./programmers/api-variables/variable-compile-dir.md)
- and
- [`cache`](./programmers/api-variables/variable-cache-dir.md)
- relative to the current working directory.
+Smarty requires four directories which are by default named `templates`, `configs`, `templates_c` and `cache`
+relative to the current working directory.
The defaults can be changed as follows:
+
```php
+<?php
+use Smarty\Smarty;
$smarty = new Smarty();
$smarty->setTemplateDir('/some/template/dir');
$smarty->setConfigDir('/some/config/dir');
@@ -70,6 +77,8 @@ You can verify if your system has the correct access rights for
these directories with [`testInstall()`](./programmers/api-functions/api-test-install.md):
```php
+<?php
+use Smarty\Smarty;
$smarty = new Smarty();
$smarty->setTemplateDir('/some/template/dir');
$smarty->setConfigDir('/some/config/dir');
@@ -78,12 +87,14 @@ $smarty->setCacheDir('/some/cache/dir');
$smarty->testInstall();
```
+## Basic usage
+
Now, let's create the `index.tpl` file that Smarty will display. This
needs to be located in the [`$template_dir`](./programmers/api-variables/variable-template-dir.md).
```smarty
{* Smarty *}
-Hello {$name}, welcome to Smarty!
+<h1>Hello {$name|escape}, welcome to Smarty!</h1>
```
> **Note**
@@ -103,6 +114,7 @@ Now lets edit our php file. We'll create an instance of Smarty,
require 'vendor/autoload.php';
+use Smarty\Smarty;
$smarty = new Smarty();
$smarty->setTemplateDir('/web/www.example.com/guestbook/templates/');
@@ -128,6 +140,20 @@ Now, run your PHP file. You should see *"Hello Ned, welcome to Smarty!"*
You have completed the basic setup for Smarty!
+## Escaping
+You may have noticed that the example template above renders the `$name` variable using
+the [escape modifier](./designers/language-modifiers/language-modifier-escape.md). This
+modifier makes string 'safe' to use in the context of an HTML page.
+
+If you are primarily using Smarty for HTML-pages, it is recommended to enable automatic
+escaping. This way, you don't have to add `|escape` to every variable you use on a web page.
+Smarty will handle it automatically for you!
+
+Enable auto-escaping for HTML as follows:
+```php
+$smarty->setEscapeHtml(true);
+```
+
## Extended Setup
This is a continuation of the [basic installation](#installation), please read that first!
@@ -140,7 +166,9 @@ the same vars, etc., we can do that in one place.
```php
<?php
-class Smarty_GuestBook extends Smarty {
+use Smarty\Smarty;
+
+class My_GuestBook extends Smarty {
public function __construct()
{
@@ -150,6 +178,8 @@ class Smarty_GuestBook extends Smarty {
$this->setCompileDir('/web/www.example.com/guestbook/templates_c/');
$this->setConfigDir('/web/www.example.com/guestbook/configs/');
$this->setCacheDir('/web/www.example.com/guestbook/cache/');
+
+ $this->setEscapeHtml(true);
$this->caching = Smarty::CACHING_LIFETIME_CURRENT;
$this->assign('app_name', 'Guest Book');
@@ -158,10 +188,10 @@ class Smarty_GuestBook extends Smarty {
}
```
-Now, we can use `Smarty_GuestBook` instead of `Smarty` in our scripts:
+Now, we can use `My_GuestBook` instead of `Smarty` in our scripts:
```php
<?php
-$smarty = new Smarty_GuestBook();
+$smarty = new My_GuestBook();
$smarty->assign('name', 'Ned');
$smarty->display('index.tpl');
```
diff --git a/vendor/smarty/smarty/docs/img/smarty.svg b/vendor/smarty/smarty/docs/img/smarty.svg
new file mode 100644
index 000000000..cd8c86639
--- /dev/null
+++ b/vendor/smarty/smarty/docs/img/smarty.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generator: Adobe Illustrator 25.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F5E0B4;}
+ .st1{fill:#383535;}
+ .st2{fill:#FBDE3D;}
+ .st3{fill:#8C919F;}
+ .st4{fill:#CACED5;}
+ .st5{fill:#FFFFFF;}
+</style>
+<g>
+ <polygon class="st0" points="782.2,925.8 733.4,643.2 996.4,532.7 745.7,396.4 823.6,120.2 560.7,232.2 391.6,0 313.7,274.7 26.5,260.1 194.4,491.3 3.6,705.5 289.4,721.3 340.5,1000 529.1,787 "/>
+ <path class="st1" d="M706.9,493.4c0-126-102.2-228.2-228.2-228.2c-126,0-228.2,102.2-228.2,228.2c0,81.8,43.1,153.6,107.8,193.8 v202.6l43.5,43.5l0.2-0.2h150.6l0.2,0.2l43.5-43.5V689C662.6,649,706.9,576.4,706.9,493.4z"/>
+ <path class="st2" d="M682.2,492.9c0-112.7-91.3-204-204-204s-204,91.3-204,204c0,78,43.8,145.8,108.1,180.1v93.6h191.7V673 C638.4,638.7,682.2,571,682.2,492.9z"/>
+ <g>
+ <polygon class="st3" points="382.7,790.4 382.7,881.1 412,910.3 544.9,910.3 574.1,881.1 574.1,790.4 "/>
+ <polygon class="st4" points="540,813.2 540,866.5 527,879.5 540.4,892.9 558.7,874.6 558.9,874.6 558.9,813.2 "/>
+ </g>
+ <path class="st5" d="M478.3,310.4c-5,0-9.1,4.1-9.1,9.1c0,5,4.1,9.1,9.1,9.1c90.7,0,164.3,73.5,164.3,164.3c0,5,4.1,9.1,9.1,9.1 s9.1-4.1,9.1-9.1C660.8,392.1,579.1,310.4,478.3,310.4z"/>
+</g>
+</svg> \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/index.md b/vendor/smarty/smarty/docs/index.md
index cff5e490e..5c788f9ba 100644
--- a/vendor/smarty/smarty/docs/index.md
+++ b/vendor/smarty/smarty/docs/index.md
@@ -1,8 +1,8 @@
-# Smarty 4 Documentation
+# Smarty Documentation
Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic.
It allows you to write **templates**, using **variables**, **modifiers**, **functions** and **comments**, like this:
-```html
+```smarty
<h1>{$title|escape}</h1>
<p>
@@ -20,31 +20,16 @@ and 480 for $height, the result is:
</p>
```
-## Introduction
+## Getting Started
+- [Getting Started](./getting-started.md)
- [Philosophy](./philosophy.md) - or "Why do I need a template engine?"
- [Features](./features.md) - or "Why do I want Smarty?"
-- [Getting Started](./getting-started.md)
-## Smarty for template designers
-- [Basic Syntax](designers/language-basic-syntax/index.md)
-- [Variables](designers/language-variables/index.md)
-- [Variable Modifiers](designers/language-modifiers/index.md)
-- [Combining Modifiers](./designers/language-combining-modifiers.md)
-- [Built-in Functions](designers/language-builtin-functions/index.md)
-- [Custom Functions](designers/language-custom-functions/index.md)
-- [Config Files](./designers/config-files.md)
-- [Debugging Console](./designers/chapter-debugging-console.md)
-
-## Smarty for php developers
-- [Charset Encoding](./programmers/charset.md)
-- [Constants](./programmers/smarty-constants.md)
-- [Smarty Class Variables](./programmers/api-variables.md)
-- [Smarty Class Methods](./programmers/api-functions.md)
-- [Caching](./programmers/caching.md)
-- [Resources](./programmers/resources.md)
-- [Advanced Features](./programmers/advanced-features.md)
-- [Extending Smarty With Plugins](./programmers/plugins.md)
-
-## Other
+## Help
+- [Search or create an issue](https://github.com/smarty-php/smarty/issues)
+- [Upgrading from an older version](upgrading.md)
- [Some random tips & tricks](./appendixes/tips.md)
- [Troubleshooting](./appendixes/troubleshooting.md)
+
+## Source code
+- [Smarty repository at GitHub](https://github.com/smarty-php/smarty) \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/philosophy.md b/vendor/smarty/smarty/docs/philosophy.md
index 34555c288..c5edd3980 100644
--- a/vendor/smarty/smarty/docs/philosophy.md
+++ b/vendor/smarty/smarty/docs/philosophy.md
@@ -8,18 +8,18 @@ presentation. This is best described in a situation where the
application programmer and the template designer play different roles,
or in most cases are not the same person.
-For example, let\'s say you are creating a web page that is displaying a
+For example, let's say you are creating a web page that is displaying a
newspaper article.
- The article `$headline`, `$tagline`, `$author` and `$body` are
content elements, they contain no information about how they will be
- presented. They are [passed](#api.assign) into Smarty by the
+ presented. They are [passed](getting-started.md#basic-usage) into Smarty by the
application.
- Then the template designer edits the templates and uses a
- combination of HTML tags and [template tags](#language.basic.syntax)
+ combination of HTML tags and [template tags](designers/language-basic-syntax/language-syntax-tags.md)
to format the presentation of these
- [variables](#language.syntax.variables) with elements such as
+ [variables](designers/language-basic-syntax/language-syntax-variables.md) with elements such as
tables, div\'s, background colors, font sizes, style sheets, svg
etc.
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features.md b/vendor/smarty/smarty/docs/programmers/advanced-features.md
deleted file mode 100644
index 60d4416b5..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Advanced Features {#advanced.features}
-=================
-
-## Table of contents
-
-- [Security](./advanced-features/advanced-features-security.md)
-- [Changing settings by template](./advanced-features/advanced-features-template-settings.md)
-- [Template Inheritance](./advanced-features/advanced-features-template-inheritance.md)
-- [Streams](./advanced-features/advanced-features-streams.md)
-- [Objects](./advanced-features/advanced-features-objects.md)
-- [Static Classes](./advanced-features/advanced-features-static-classes.md)
-- [Prefilters](./advanced-features/advanced-features-prefilters.md)
-- [Postfilters](./advanced-features/advanced-features-postfilters.md)
-- [Output Filters](./advanced-features/advanced-features-outputfilters.md)
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md
deleted file mode 100644
index b681945e1..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md
+++ /dev/null
@@ -1,99 +0,0 @@
-Objects {#advanced.features.objects}
-=======
-
-Smarty allows access to PHP [objects](https://www.php.net/object) through
-the templates.
-
-> **Note**
->
-> When you assign/register objects to templates, be sure that all
-> properties and methods accessed from the template are for presentation
-> purposes only. It is very easy to inject application logic through
-> objects, and this leads to poor designs that are difficult to manage.
-> See the Best Practices section of the Smarty website.
-
-There are two ways to access them.
-
-- One way is to [register objects](#api.register.object) to the
- template, then use access them via syntax similar to [custom
- functions](#language.custom.functions).
-
-- The other way is to [`assign()`](#api.assign) objects to the
- templates and access them much like any other assigned variable.
-
-The first method has a much nicer template syntax. It is also more
-secure, as a registered object can be restricted to certain methods or
-properties. However, **a registered object cannot be looped over or
-assigned in arrays of objects**, etc. The method you choose will be
-determined by your needs, but use the first method whenever possible to
-keep template syntax to a minimum.
-
-If security is enabled, no private methods or functions can be accessed
-(beginning with \'\_\'). If a method and property of the same name exist,
-the method will be used.
-
-You can restrict the methods and properties that can be accessed by
-listing them in an array as the third registration parameter.
-
-By default, parameters passed to objects through the templates are
-passed the same way [custom functions](#language.custom.functions) get
-them. An associative array is passed as the first parameter, and the
-smarty object as the second. If you want the parameters passed one at a
-time for each argument like traditional object parameter passing, set
-the fourth registration parameter to FALSE.
-
-The optional fifth parameter has only effect with `format` being TRUE
-and contains a list of methods that should be treated as blocks. That
-means these methods have a closing tag in the template
-(`{foobar->meth2}...{/foobar->meth2}`) and the parameters to the methods
-have the same synopsis as the parameters for
-[`block-function-plugins`](#plugins.block.functions): They get the four
-parameters `$params`, `$content`, `$smarty` and `&$repeat` and they also
-behave like block-function-plugins.
-
-
- <?php
- // the object
-
- class My_Object {
- function meth1($params, $smarty_obj) {
- return 'this is my meth1';
- }
- }
-
- $myobj = new My_Object;
-
- // registering the object (will be by reference)
- $smarty->registerObject('foobar',$myobj);
-
- // if we want to restrict access to certain methods or properties, list them
- $smarty->registerObject('foobar',$myobj,array('meth1','meth2','prop1'));
-
- // if you want to use the traditional object parameter format, pass a boolean of false
- $smarty->registerObject('foobar',$myobj,null,false);
-
- // We can also assign objects. assign_by_ref when possible.
- $smarty->assign_by_ref('myobj', $myobj);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-And here\'s how to access your objects in `index.tpl`:
-
-
- {* access our registered object *}
- {foobar->meth1 p1='foo' p2=$bar}
-
- {* you can also assign the output *}
- {foobar->meth1 p1='foo' p2=$bar assign='output'}
- the output was {$output}
-
- {* access our assigned object *}
- {$myobj->meth1('foo',$bar)}
-
-
-
-See also [`registerObject()`](#api.register.object) and
-[`assign()`](#api.assign).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md
deleted file mode 100644
index 393d7da23..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md
+++ /dev/null
@@ -1,43 +0,0 @@
-Output Filters {#advanced.features.outputfilters}
-==============
-
-When the template is invoked via [`display()`](#api.display) or
-[`fetch()`](#api.fetch), its output can be sent through one or more
-output filters. This differs from
-[`postfilters`](#advanced.features.postfilters) because postfilters
-operate on compiled templates before they are saved to the disk, whereas
-output filters operate on the template output when it is executed.
-
-Output filters can be either [registered](#api.register.filter) or
-loaded from the [plugins directory](#variable.plugins.dir) by using the
-[`loadFilter()`](#api.load.filter) method or by setting the
-[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will
-pass the template output as the first argument, and expect the function
-to return the result of the processing.
-
-
- <?php
- // put this in your application
- function protect_email($tpl_output, Smarty_Internal_Template $template)
- {
- $tpl_output =
- preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
- '$1%40$2', $tpl_output);
- return $tpl_output;
- }
-
- // register the outputfilter
- $smarty->registerFilter("output","protect_email");
- $smarty->display("index.tpl');
-
- // now any occurrence of an email address in the template output will have
- // a simple protection against spambots
- ?>
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[`loadFilter()`](#api.load.filter),
-[`$autoload_filters`](#variable.autoload.filters),
-[postfilters](#advanced.features.postfilters) and
-[`$plugins_dir`](#variable.plugins.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md
deleted file mode 100644
index d3bad546a..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md
+++ /dev/null
@@ -1,40 +0,0 @@
-Postfilters {#advanced.features.postfilters}
-===========
-
-Template postfilters are PHP functions that your templates are ran
-through *after they are compiled*. Postfilters can be either
-[registered](#api.register.filter) or loaded from the [plugins
-directory](#variable.plugins.dir) by using the
-[`loadFilter()`](#api.load.filter) function or by setting the
-[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will
-pass the compiled template code as the first argument, and expect the
-function to return the result of the processing.
-
-
- <?php
- // put this in your application
- function add_header_comment($tpl_source, Smarty_Internal_Template $template)
- {
- return "<?php echo \"<!-- Created by Smarty! -->\n\"; ?>\n".$tpl_source;
- }
-
- // register the postfilter
- $smarty->registerFilter('post','add_header_comment');
- $smarty->display('index.tpl');
- ?>
-
-
-
-The postfilter above will make the compiled Smarty template `index.tpl`
-look like:
-
-
- <!-- Created by Smarty! -->
- {* rest of template content... *}
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[prefilters](#advanced.features.prefilters),
-[outputfilters](#advanced.features.outputfilters), and
-[`loadFilter()`](#api.load.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md
deleted file mode 100644
index 76229e633..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md
+++ /dev/null
@@ -1,36 +0,0 @@
-Prefilters {#advanced.features.prefilters}
-==========
-
-Template prefilters are PHP functions that your templates are ran
-through *before they are compiled*. This is good for preprocessing your
-templates to remove unwanted comments, keeping an eye on what people are
-putting in their templates, etc.
-
-Prefilters can be either [registered](#api.register.filter) or loaded
-from the [plugins directory](#variable.plugins.dir) by using
-[`loadFilter()`](#api.load.filter) function or by setting the
-[`$autoload_filters`](#variable.autoload.filters) variable.
-
-Smarty will pass the template source code as the first argument, and
-expect the function to return the resulting template source code.
-
-This will remove all the html comments in the template source.
-
-
- <?php
- // put this in your application
- function remove_dw_comments($tpl_source, Smarty_Internal_Template $template)
- {
- return preg_replace("/<!--#.*-->/U",'',$tpl_source);
- }
-
- // register the prefilter
- $smarty->registerFilter('pre','remove_dw_comments');
- $smarty->display('index.tpl');
- ?>
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[postfilters](#advanced.features.postfilters) and
-[`loadFilter()`](#api.load.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md
deleted file mode 100644
index 730915f14..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md
+++ /dev/null
@@ -1,144 +0,0 @@
-Security {#advanced.features.security}
-========
-
-Security is good for situations when you have untrusted parties editing
-the templates e.g. via ftp, and you want to reduce the risk of system
-security compromises through the template language.
-
-The settings of the security policy are defined by properties of an
-instance of the Smarty\_Security class. These are the possible settings:
-
-- `$secure_dir` is an array of template directories that are
- considered secure. [`$template_dir`](#variable.template.dir)
- considered secure implicitly. The default is an empty array.
-
-- `$trusted_dir` is an array of all directories that are considered
- trusted. Trusted directories are where you keep php scripts that are
- executed directly from the templates with
- [`{insert}`](#language.function.insert.php). The default is an
- empty array.
-
-- `$trusted_uri` is an array of regular expressions matching URIs that
- are considered trusted. This security directive used by
- [`{fetch}`](#language.function.fetch) and
- [`{html_image}`](#language.function.html.image). URIs passed to
- these functions are reduced to `{$PROTOCOL}://{$HOSTNAME}` to allow
- simple regular expressions (without having to deal with edge cases
- like authentication-tokens).
-
- The expression `'#https?://.*smarty.net$#i'` would allow accessing
- the following URIs:
-
- - `http://smarty.net/foo`
-
- - `http://smarty.net/foo`
-
- - `http://www.smarty.net/foo`
-
- - `http://smarty.net/foo`
-
- - `https://foo.bar.www.smarty.net/foo/bla?blubb=1`
-
- but deny access to these URIs:
-
- - `http://smarty.com/foo` (not matching top-level domain \"com\")
-
- - `ftp://www.smarty.net/foo` (not matching protocol \"ftp\")
-
- - `http://www.smarty.net.otherdomain.com/foo` (not matching end of
- domain \"smarty.net\")
-
-- `$static_classes` is an array of classes that are considered
- trusted. The default is an empty array which allows access to all
- static classes. To disable access to all static classes set
- \$static\_classes = null.
-
-- `$php_functions` is an array of PHP functions that are considered
- trusted and can be used from within template. To disable access to
- all PHP functions set \$php\_functions = null. An empty array (
- \$php\_functions = array() ) will allow all PHP functions. The
- default is array(\'isset\', \'empty\', \'count\', \'sizeof\',
- \'in\_array\', \'is\_array\',\'time\',\'nl2br\').
-
-- `$php_modifiers` is an array of PHP functions that are considered
- trusted and can be used from within template as modifier. To disable
- access to all PHP modifier set \$php\_modifier = null. An empty
- array ( \$php\_modifier = array() ) will allow all PHP functions.
- The default is array(\'escape\',\'count\').
-
-- `$streams` is an array of streams that are considered trusted and
- can be used from within template. To disable access to all streams
- set \$streams = null. An empty array ( \$streams = array() ) will
- allow all streams. The default is array(\'file\').
-
-- `$allowed_modifiers` is an array of (registered / autoloaded)
- modifiers that should be accessible to the template. If this array
- is non-empty, only the herein listed modifiers may be used. This is
- a whitelist.
-
-- `$disabled_modifiers` is an array of (registered / autoloaded)
- modifiers that may not be accessible to the template.
-
-- `$allowed_tags` is a boolean flag which controls if constants can
- function-, block and filter plugins that should be accessible to the
- template. If this array is non-empty, only the herein listed
- modifiers may be used. This is a whitelist.
-
-- `$disabled_tags` is an array of (registered / autoloaded) function-,
- block and filter plugins that may not be accessible to the template.
-
-- `$allow_constants` is a boolean flag which controls if constants can
- be accessed by the template. The default is \"true\".
-
-- `$allow_super_globals` is a boolean flag which controls if the PHP
- super globals can be accessed by the template. The default is
- \"true\".
-
-If security is enabled, no private methods, functions or properties of
-static classes or assigned objects can be accessed (beginning with
-\'\_\') by the template.
-
-To customize the security policy settings you can extend the
-Smarty\_Security class or create an instance of it.
-
-
- <?php
- require 'Smarty.class.php';
-
- class My_Security_Policy extends Smarty_Security {
- // disable all PHP functions
- public $php_functions = null;
- // allow everthing as modifier
- public $php_modifiers = array();
- }
- $smarty = new Smarty();
- // enable security
- $smarty->enableSecurity('My_Security_Policy');
- ?>
-
-
- <?php
- require 'Smarty.class.php';
- $smarty = new Smarty();
- $my_security_policy = new Smarty_Security($smarty);
- // disable all PHP functions
- $my_security_policy->php_functions = null;
- // allow everthing as modifier
- $my_security_policy->php_modifiers = array();
- // enable security
- $smarty->enableSecurity($my_security_policy);
- ?>
-
-
- <?php
- require 'Smarty.class.php';
- $smarty = new Smarty();
- // enable default security
- $smarty->enableSecurity();
- ?>
-
-> **Note**
->
-> Most security policy settings are only checked when the template gets
-> compiled. For that reason you should delete all cached and compiled
-> template files when you change your security settings.
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md
deleted file mode 100644
index 8ef79113c..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md
+++ /dev/null
@@ -1,27 +0,0 @@
-Static Classes {#advanced.features.static.classes}
-==============
-
-You can directly access static classes. The syntax is the same as in
-PHP.
-
-> **Note**
->
-> Direct access to PHP classes is not recommended. This ties the
-> underlying application code structure directly to the presentation,
-> and also complicates template syntax. It is recommended to register
-> plugins which insulate templates from PHP classes/objects. Use at your
-> own discretion. See the Best Practices section of the Smarty website.
-
-
- {assign var=foo value=myclass::BAR} <--- class constant BAR
-
- {assign var=foo value=myclass::method()} <--- method result
-
- {assign var=foo value=myclass::method1()->method2} <--- method chaining
-
- {assign var=foo value=myclass::$bar} <--- property bar of class myclass
-
- {assign var=foo value=$bar::method} <--- using Smarty variable bar as class name
-
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md
deleted file mode 100644
index d6f7a0de5..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md
+++ /dev/null
@@ -1,15 +0,0 @@
-Streams {#advanced.features.streams}
-=======
-
-You can also use streams to call variables. *{\$foo:bar}* will use the
-*foo://bar* stream to get the template variable.
-
-Using a PHP stream for a template variable resource from within a
-template.
-
-
- {$foo:bar}
-
-
-
-See also [`Template Resources`](#resources)
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md
deleted file mode 100644
index ce47310ca..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md
+++ /dev/null
@@ -1,128 +0,0 @@
-Template Inheritance {#advanced.features.template.inheritance}
-====================
-
-Inheritance brings the concept of Object Oriented Programming to
-templates, allowing you to define one (or more) base templates that can
-be extended by child templates. Extending means that the child template
-can override all or some of the parent named block areas.
-
-- The inheritance tree can be as deep as you want, meaning you can
- extend a file that extends another one that extends another one and
- so on.
-
-- The child templates can not define any content besides what\'s
- inside [`{block}`](#language.function.block) tags they override.
- Anything outside of [`{block}`](#language.function.block) tags will
- be removed.
-
-- The content of [`{block}`](#language.function.block) tags from child
- and parent templates can be merged by the `append` or `prepend`
- [`{block}`](#language.function.block) tag option flags and
- `{$smarty.block.parent}` or `{$smarty.block.child}` placeholders.
-
-- Template inheritance is a compile time process which creates a
- single compiled template file. Compared to corresponding solutions
- based on subtemplates included with the
- [`{include}`](#language.function.include) tag it does have much
- better performance when rendering.
-
-- The child template extends its parent defined with the
- [`{extends}`](#language.function.extends) tag, which must be the
- first line in the child template. Instead of using the
- [`{extends}`](#language.function.extends) tags in the template files
- you can define the whole template inheritance tree in the PHP script
- when you are calling [`fetch()`](#api.fetch) or
- [`display()`](#api.display) with the `extends:` template resource
- type. The later provides even more flexibility.
-
-> **Note**
->
-> When `$compile_check` is enabled, all files in the inheritance tree
-> are checked for modifications upon each invocation. You may want to
-> disable `$compile_check` on production servers for this reason.
-
-> **Note**
->
-> If you have a subtemplate which is included with
-> [`{include}`](#language.function.include) and it contains
-> [`{block}`](#language.function.block) areas it works only if the
-> [`{include}`](#language.function.include) itself is called from within
-> a surrounding [`{block}`](#language.function.block). In the final
-> parent template you may need a dummy
-> [`{block}`](#language.function.block) for it.
-
-layout.tpl (parent)
-
-
- <html>
- <head>
- <title>{block name=title}Default Page Title{/block}</title>
- {block name=head}{/block}
- </head>
- <body>
- {block name=body}{/block}
- </body>
- </html>
-
-
-
-myproject.tpl (child)
-
-
- {extends file='layout.tpl'}
- {block name=head}
- <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
- <script src="/js/mypage.js"></script>
- {/block}
-
-
-
-
-mypage.tpl (grandchild)
-
-
- {extends file='myproject.tpl'}
- {block name=title}My Page Title{/block}
- {block name=head}
- <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
- <script src="/js/mypage.js"></script>
- {/block}
- {block name=body}My HTML Page Body goes here{/block}
-
-
-
-To render the above use
-
-
- $smarty->display('mypage.tpl');
-
-The resulting output is
-
-
- <html>
- <head>
- <title>My Page Title</title>
- <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
- <script src="/js/mypage.js"></script>
- </head>
- <body>
- My HTML Page Body goes here
- </body>
- </html>
-
-Instead of using [`{extends}`](#language.function.extends) tags in the
-template files you can define the inheritance tree in your PHP script by
-using the [`extends:` resource](#resources.extends) type.
-
-The code below will return same result as the example above.
-
-
- <?php
- $smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
- ?>
-
-
-
-See also [`{block}`](#language.function.block),
-[`{extends}`](#language.function.extends) and [`extends:`
-resource](#resources.extends)
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md
deleted file mode 100644
index b06430ff0..000000000
--- a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md
+++ /dev/null
@@ -1,32 +0,0 @@
-Changing settings by template {#advanced.features.template.settings}
-=============================
-
-Normally you configure the Smarty settings by modifying the
-[`Smarty class variables`](#api.variables). Furthermore you can register
-plugins, filters etc. with [`Smarty functions`](#api.functions).
-Modifications done to the Smarty object will be global for all
-templates.
-
-However the Smarty class variables and functions can be accessed or
-called by individual template objects. Modification done to a template
-object will apply only for that template and its included subtemplates.
-
-
- <?php
- $tpl = $smarty->createTemplate('index.tpl);
- $tpl->cache_lifetime = 600;
- //or
- $tpl->setCacheLifetime(600);
- $smarty->display($tpl);
- ?>
-
-
-
-
- <?php
- $tpl = $smarty->createTemplate('index.tpl);
- $tpl->registerPlugin('modifier','mymodifier');
- $smarty->display($tpl);
- ?>
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions.md b/vendor/smarty/smarty/docs/programmers/api-functions.md
deleted file mode 100644
index 6f120fa9a..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions.md
+++ /dev/null
@@ -1,64 +0,0 @@
-Smarty Class Methods {#api.functions}
-====================
-
-## Table of contents
-
-- [addConfigDir()](./api-functions/api-add-config-dir.md) — add a directory to the list of directories where config files are stored
-- [addPluginsDir()](./api-functions/api-add-plugins-dir.md) — add a directory to the list of directories where plugins are stored
-- [addTemplateDir()](./api-functions/api-add-template-dir.md) — add a directory to the list of directories where templates are stored
-- [append()](./api-functions/api-append.md) — append an element to an assigned array
-- [appendByRef()](./api-functions/api-append-by-ref.md) — append values by reference
-- [assign()](./api-functions/api-assign.md) — assign variables/objects to the templates
-- [assignByRef()](./api-functions/api-assign-by-ref.md) — assign values by reference
-- [clearAllAssign()](./api-functions/api-clear-all-assign.md) — clears the values of all assigned variables
-- [clearAllCache()](./api-functions/api-clear-all-cache.md) — clears the entire template cache
-- [clearAssign()](./api-functions/api-clear-assign.md) — clears the value of an assigned variable
-- [clearCache()](./api-functions/api-clear-cache.md) — clears the cache for a specific template
-- [clearCompiledTemplate()](./api-functions/api-clear-compiled-tpl.md) — clears the compiled version of the specified template resource
-- [clearConfig()](./api-functions/api-clear-config.md) — clears assigned config variables
-- [compileAllConfig()](./api-functions/api-compile-all-config.md) — compiles all known config files
-- [compileAllTemplates()](./api-functions/api-compile-all-templates.md) — compiles all known templates
-- [configLoad()](./api-functions/api-config-load.md) — loads config file data and assigns it to the template
-- [createData()](./api-functions/api-create-data.md) — creates a data object
-- [createTemplate()](./api-functions/api-create-template.md) — returns a template object
-- [disableSecurity()](./api-functions/api-disable-security.md) — disables template security
-- [display()](./api-functions/api-display.md) — displays the template
-- [enableSecurity()](./api-functions/api-enable-security.md) — enables template security
-- [fetch()](./api-functions/api-fetch.md) — returns the template output
-- [getCacheDir()](./api-functions/api-get-cache-dir.md) — return the directory where the rendered template's output is stored
-- [getCompileDir()](./api-functions/api-get-compile-dir.md) — returns the directory where compiled templates are stored
-- [getConfigDir()](./api-functions/api-get-config-dir.md) — return the directory where config files are stored
-- [getConfigVars()](./api-functions/api-get-config-vars.md) — returns the given loaded config variable value
-- [getPluginsDir()](./api-functions/api-get-plugins-dir.md) — return the directory where plugins are stored
-- [getRegisteredObject()](./api-functions/api-get-registered-object.md) — returns a reference to a registered object
-- [getTags()](./api-functions/api-get-tags.md) — return tags used by template
-- [getTemplateDir()](./api-functions/api-get-template-dir.md) — return the directory where templates are stored
-- [getTemplateVars()](./api-functions/api-get-template-vars.md) — returns assigned variable value(s)
-- [isCached()](./api-functions/api-is-cached.md) — returns true if there is a valid cache for this template
-- [loadFilter()](./api-functions/api-load-filter.md) — load a filter plugin
-- [muteExpectedErrors()](./api-functions/api-mute-expected-errors.md) — mutes expected warnings and notices deliberately generated by Smarty
-- [registerCacheResource()](./api-functions/api-register-cacheresource.md) — dynamically register CacheResources
-- [registerClass()](./api-functions/api-register-class.md) — register a class for use in the templates
-- [registerDefaultPluginHandler()](./api-functions/api-register-default-plugin-handler.md) — register a function which gets called on undefined tags
-- [registerFilter()](./api-functions/api-register-filter.md) — dynamically register filters
-- [registerPlugin()](./api-functions/api-register-plugin.md) — dynamically register plugins
-- [registerObject()](./api-functions/api-register-object.md) — register an object for use in the templates
-- [registerResource()](./api-functions/api-register-resource.md) — dynamically register resources
-- [setCacheDir()](./api-functions/api-set-cache-dir.md) — set the directory where the rendered template's output is stored
-- [setCompileDir()](./api-functions/api-set-compile-dir.md) — set the directory where compiled templates are stored
-- [setConfigDir()](./api-functions/api-set-config-dir.md) — set the directories where config files are stored
-- [setPluginsDir()](./api-functions/api-set-plugins-dir.md) — set the directories where plugins are stored
-- [setTemplateDir()](./api-functions/api-set-template-dir.md) — set the directories where templates are stored
-- [templateExists()](./api-functions/api-template-exists.md) — checks whether the specified template exists
-- [unregisterCacheResource()](./api-functions/api-unregister-cacheresource.md) — dynamically unregister a CacheResource plugin
-- [unregisterFilter()](./api-functions/api-unregister-filter.md) — dynamically unregister a filter
-- [unregisterPlugin()](./api-functions/api-unregister-plugin.md) — dynamically unregister plugins
-- [unregisterObject()](./api-functions/api-unregister-object.md) — dynamically unregister an object
-- [unregisterResource()](./api-functions/api-unregister-resource.md) — dynamically unregister a resource plugin
-- [testInstall()](./api-functions/api-test-install.md) — checks Smarty installation
-
-> **Note**
->
-> See
-> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md)
-> section for how to use the functions for individual templates.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/add-extension.md b/vendor/smarty/smarty/docs/programmers/api-functions/add-extension.md
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/add-extension.md
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md
deleted file mode 100644
index c3a052289..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md
+++ /dev/null
@@ -1,49 +0,0 @@
-addConfigDir()
-
-add a directory to the list of directories where config files are stored
-
-Description
-===========
-
-Smarty
-
-addConfigDir
-
-string\|array
-
-config\_dir
-
-string
-
-key
-
-
- <?php
-
- // add directory where config files are stored
- $smarty->addConfigDir('./config_1');
-
- // add directory where config files are stored and specify array-key
- $smarty->addConfigDir('./config_1', 'one');
-
- // add multiple directories where config files are stored and specify array-keys
- $smarty->addTemplateDir(array(
- 'two' => './config_2',
- 'three' => './config_3',
- ));
-
- // view the template dir chain
- var_dump($smarty->getConfigDir());
-
- // chaining of method calls
- $smarty->setConfigDir('./config')
- ->addConfigDir('./config_1', 'one')
- ->addConfigDir('./config_2', 'two');
-
- ?>
-
-
-
-See also [`getConfigDir()`](#api.get.config.dir),
-[`setConfigDir()`](#api.set.config.dir) and
-[`$config_dir`](#variable.config.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md
deleted file mode 100644
index e0d24564c..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md
+++ /dev/null
@@ -1,49 +0,0 @@
-addTemplateDir()
-
-add a directory to the list of directories where templates are stored
-
-Description
-===========
-
-Smarty
-
-addTemplateDir
-
-string\|array
-
-template\_dir
-
-string
-
-key
-
-
- <?php
-
- // add directory where templates are stored
- $smarty->addTemplateDir('./templates_1');
-
- // add directory where templates are stored and specify array-key
- $smarty->addTemplateDir('./templates_1', 'one');
-
- // add multiple directories where templates are stored and specify array-keys
- $smarty->addTemplateDir(array(
- 'two' => './templates_2',
- 'three' => './templates_3',
- ));
-
- // view the template dir chain
- var_dump($smarty->getTemplateDir());
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->addTemplateDir('./templates_1', 'one')
- ->addTemplateDir('./templates_2', 'two');
-
- ?>
-
-
-
-See also [`getTemplateDir()`](#api.get.template.dir),
-[`setTemplateDir()`](#api.set.template.dir) and
-[`$template_dir`](#variable.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md
deleted file mode 100644
index cd396d9cc..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md
+++ /dev/null
@@ -1,46 +0,0 @@
-appendByRef()
-
-append values by reference
-
-Description
-===========
-
-void
-
-appendByRef
-
-string
-
-varname
-
-mixed
-
-var
-
-bool
-
-merge
-
-This is used to [`append()`](#api.append) values to the templates by
-reference.
-
-> **Note**
->
-> With the introduction of PHP5, `appendByRef()` is not necessary for
-> most intents and purposes. `appendByRef()` is useful if you want a PHP
-> array index value to be affected by its reassignment from a template.
-> Assigned object properties behave this way by default.
-
-NOTE.PARAMETER.MERGE
-
-
- <?php
- // appending name/value pairs
- $smarty->appendByRef('Name', $myname);
- $smarty->appendByRef('Address', $address);
- ?>
-
-
-
-See also [`append()`](#api.append), [`assign()`](#api.assign) and
-[`getTemplateVars()`](#api.get.template.vars).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md
index b94586417..d9acff84a 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md
@@ -56,6 +56,5 @@ NOTE.PARAMETER.MERGE
-See also [`appendByRef()`](#api.append.by.ref),
-[`assign()`](#api.assign) and
+See also [`assign()`](#api.assign) and
[`getTemplateVars()`](#api.get.template.vars)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md
deleted file mode 100644
index 7c42b4836..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md
+++ /dev/null
@@ -1,42 +0,0 @@
-assignByRef()
-
-assign values by reference
-
-Description
-===========
-
-void
-
-assignByRef
-
-string
-
-varname
-
-mixed
-
-var
-
-This is used to [`assign()`](#api.assign) values to the templates by
-reference.
-
-> **Note**
->
-> With the introduction of PHP5, `assignByRef()` is not necessary for
-> most intents and purposes. `assignByRef()` is useful if you want a PHP
-> array index value to be affected by its reassignment from a template.
-> Assigned object properties behave this way by default.
-
-
- <?php
- // passing name/value pairs
- $smarty->assignByRef('Name', $myname);
- $smarty->assignByRef('Address', $address);
- ?>
-
-
-
-See also [`assign()`](#api.assign),
-[`clearAllAssign()`](#api.clear.all.assign), [`append()`](#api.append),
-[`{assign}`](#language.function.assign) and
-[`getTemplateVars()`](#api.get.template.vars).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md
index c3b9985d4..31f6a1508 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md
@@ -78,7 +78,6 @@ To access more complex array assignments see
[`{foreach}`](#language.function.foreach) and
[`{section}`](#language.function.section)
-See also [`assignByRef()`](#api.assign.by.ref),
-[`getTemplateVars()`](#api.get.template.vars),
+See also [`getTemplateVars()`](#api.get.template.vars),
[`clearAssign()`](#api.clear.assign), [`append()`](#api.append) and
[`{assign}`](#language.function.assign)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
index a102fc97e..35497d9ad 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
@@ -50,7 +50,7 @@ parameters:
<?php
- include('Smarty.class.php');
+ use Smarty\Smarty;
$smarty = new Smarty;
// force compilation of all config files
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md
index 53a021da8..2be22eef3 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md
@@ -60,7 +60,7 @@ parameters:
<?php
- include('Smarty.class.php');
+ use Smarty\Smarty;
$smarty = new Smarty;
// force compilation of all template files
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md
index 7e083776e..dc03ad94d 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md
@@ -30,7 +30,7 @@ be used to control which variables are seen by which templates.
<?php
- include('Smarty.class.php');
+ use Smarty\Smarty;
$smarty = new Smarty;
// create data object with its private variable scope
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md
index 5129406d4..097b7df95 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md
@@ -80,7 +80,7 @@ following parameters:
<?php
- include('Smarty.class.php');
+ use Smarty\Smarty;
$smarty = new Smarty;
// create template object with its private variable scope
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md
index 59726195e..ced7513f1 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md
@@ -31,7 +31,9 @@ PARAMETER.COMPILEID
<?php
- include(SMARTY_DIR.'Smarty.class.php');
+
+ use Smarty\Smarty;
+
$smarty = new Smarty();
$smarty->setCaching(true);
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md
index 6da05bd0e..491c28d4d 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md
@@ -30,7 +30,7 @@ PARAMETER.COMPILEID
<?php
- include('Smarty.class.php');
+ use Smarty\Smarty;
$smarty = new Smarty;
$smarty->setCaching(true);
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md
deleted file mode 100644
index 9e55d8d0b..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md
+++ /dev/null
@@ -1,23 +0,0 @@
-getCacheDir()
-
-return the directory where the rendered template\'s output is stored
-
-Description
-===========
-
-string
-
-getCacheDir
-
-
- <?php
-
- // get directory where compiled templates are stored
- $cacheDir = $smarty->getCacheDir();
-
- ?>
-
-
-
-See also [`setCacheDir()`](#api.set.cache.dir) and
-[`$cache_dir`](#variable.cache.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md
deleted file mode 100644
index 3bfae7306..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md
+++ /dev/null
@@ -1,23 +0,0 @@
-getCompileDir()
-
-returns the directory where compiled templates are stored
-
-Description
-===========
-
-string
-
-getCompileDir
-
-
- <?php
-
- // get directory where compiled templates are stored
- $compileDir = $smarty->getCompileDir();
-
- ?>
-
-
-
-See also [`setCompileDir()`](#api.set.compile.dir) and
-[`$compile_dir`](#variable.compile.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md
deleted file mode 100644
index 7729b468b..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md
+++ /dev/null
@@ -1,40 +0,0 @@
-getTags()
-
-return tags used by template
-
-Description
-===========
-
-string
-
-getTags
-
-object
-
-template
-
-This function returns an array of tagname/attribute pairs for all tags
-used by the template. It uses the following parameters:
-
-- `template` is the template object.
-
-> **Note**
->
-> This function is experimental.
-
-
- <?php
- include('Smarty.class.php');
- $smarty = new Smarty;
-
- // create template object
- $tpl = $smarty->createTemplate('index.tpl');
-
- // get tags
- $tags = $smarty->getTags($tpl);
-
- print_r($tags);
-
- ?>
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md
deleted file mode 100644
index 42c75908b..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md
+++ /dev/null
@@ -1,40 +0,0 @@
-getTemplateDir()
-
-return the directory where templates are stored
-
-Description
-===========
-
-string\|array
-
-getTemplateDir
-
-string
-
-key
-
-
- <?php
-
- // set some template directories
- $smarty->setTemplateDir(array(
- 'one' => './templates',
- 'two' => './templates_2',
- 'three' => './templates_3',
- ));
-
- // get all directories where templates are stored
- $template_dir = $smarty->getTemplateDir();
- var_dump($template_dir); // array
-
- // get directory identified by key
- $template_dir = $smarty->getTemplateDir('one');
- var_dump($template_dir); // string
-
- ?>
-
-
-
-See also [`setTemplateDir()`](#api.set.template.dir),
-[`addTemplateDir()`](#api.add.template.dir) and
-[`$template_dir`](#variable.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
index 0c41bf04a..d9d3057fb 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
@@ -22,8 +22,8 @@ string
compile\_id
- This only works if [`$caching`](#variable.caching) is set to one of
- `Smarty::CACHING_LIFETIME_CURRENT` or
- `Smarty::CACHING_LIFETIME_SAVED` to enable caching. See the [caching
+ `\Smarty\Smarty::CACHING_LIFETIME_CURRENT` or
+ `\Smarty\Smarty::CACHING_LIFETIME_SAVED` to enable caching. See the [caching
section](#caching) for more info.
- You can also pass a `$cache_id` as an optional second parameter in
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
index 19286ee33..e2738b0c8 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
@@ -18,7 +18,7 @@ string
name
The first argument specifies the type of the filter to load and can be
-one of the following: `pre`, `post` or `output`. The second argument
+one of the following: `variable`, `pre`, `post` or `output`. The second argument
specifies the `name` of the filter plugin.
@@ -37,6 +37,5 @@ specifies the `name` of the filter plugin.
-See also [`registerFilter()`](#api.register.filter),
-[`$autoload_filters`](#variable.autoload.filters) and [advanced
+See also [`registerFilter()`](#api.register.filter) and [advanced
features](#advanced.features).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
index 626288ea6..ac84a6435 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
@@ -15,7 +15,7 @@ handler merely inspects `$errno` and `$errfile` to determine if the
given error was produced deliberately and must be ignored, or should be
passed on to the next error handler.
-`Smarty::unmuteExpectedErrors()` removes the current error handler.
+`\Smarty\Smarty::unmuteExpectedErrors()` removes the current error handler.
Please note, that if you\'ve registered any custom error handlers after
the muteExpectedErrors() call, the unmute will not remove Smarty\'s
muting error handler, but the one registered last.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
index 60ae60308..626091496 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
@@ -31,7 +31,7 @@ how to create custom CacheResources.
<?php
- $smarty->registerCacheResource('mysql', new Smarty_CacheResource_Mysql());
+ $smarty->registerCacheResource('mysql', new My_CacheResource_Mysql());
?>
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md
index ee339cadb..d0156d512 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md
@@ -24,6 +24,7 @@ otherwise. If security is enabled, classes registered with
<?php
+ use Smarty\Smarty;
class Bar {
$property = "hello world";
@@ -44,12 +45,14 @@ otherwise. If security is enabled, classes registered with
<?php
+ use Smarty\Smarty;
+
namespace my\php\application {
class Bar {
$property = "hello world";
}
}
-
+
$smarty = new Smarty();
$smarty->registerClass("Foo", "\my\php\application\Bar");
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
index 03547df71..61ac47612 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
@@ -25,7 +25,7 @@ plugin types.
<?php
-
+ use Smarty\Smarty;
$smarty = new Smarty();
$smarty->registerDefaultPluginHandler('my_plugin_handler');
@@ -37,7 +37,7 @@ plugin types.
* @param string $name name of the undefined tag
* @param string $type tag type (e.g. Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK,
Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_MODIFIER, Smarty::PLUGIN_MODIFIERCOMPILER)
- * @param Smarty_Internal_Template $template template object
+ * @param \Smarty\Template\ $template template object
* @param string &$callback returned function name
* @param string &$script optional returned script filepath if function is external
* @param bool &$cacheable true by default, set to false if plugin is not cachable (Smarty >= 3.1.8)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
index fd91d2661..4a2aa4b02 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
@@ -38,8 +38,7 @@ filters](#advanced.features.outputfilters) for more information on how
to set up an output filter function.
See also [`unregisterFilter()`](#api.unregister.filter),
-[`loadFilter()`](#api.load.filter),
-[`$autoload_filters`](#variable.autoload.filters), [template pre
+[`loadFilter()`](#api.load.filter), [template pre
filters](#advanced.features.prefilters) [template post
filters](#advanced.features.postfilters) [template output
filters](#advanced.features.outputfilters) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
index 6eb433810..51342b8e1 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
@@ -32,9 +32,9 @@ cache\_attrs
This method registers functions or methods defined in your script as
plugin. It uses the following parameters:
-- `cacheable` and `cache_attrs` can be omitted in most cases. See
+- `cacheable` can be omitted in most cases. See
[controlling cacheability of plugins output](#caching.cacheable) on
- how to use them properly.
+ how to use this properly.
<!-- -->
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
index ca4005460..774452bff 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
@@ -37,7 +37,7 @@ information on how to setup a function for fetching templates.
<?php
- $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
+ $smarty->registerResource('mysql', new My_Resource_Mysql());
?>
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md
deleted file mode 100644
index 7f7c4b60d..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md
+++ /dev/null
@@ -1,32 +0,0 @@
-setCacheDir()
-
-set the directory where the rendered template\'s output is stored
-
-Description
-===========
-
-Smarty
-
-setCacheDir
-
-string
-
-cache\_dir
-
-
- <?php
-
- // set directory where rendered template's output is stored
- $smarty->setCacheDir('./cache');
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getCacheDir()`](#api.get.cache.dir) and
-[`$cache_dir`](#variable.cache.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md
deleted file mode 100644
index bfeb55a53..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md
+++ /dev/null
@@ -1,32 +0,0 @@
-setCompileDir()
-
-set the directory where compiled templates are stored
-
-Description
-===========
-
-Smarty
-
-setCompileDir
-
-string
-
-compile\_dir
-
-
- <?php
-
- // set directory where compiled templates are stored
- $smarty->setCompileDir('./templates_c');
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getCompileDir()`](#api.get.compile.dir) and
-[`$compile_dir`](#variable.compile.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md
deleted file mode 100644
index 97a6ae977..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md
+++ /dev/null
@@ -1,47 +0,0 @@
-setConfigDir()
-
-set the directories where config files are stored
-
-Description
-===========
-
-Smarty
-
-setConfigDir
-
-string\|array
-
-config\_dir
-
-
- <?php
-
- // set a single directory where the config files are stored
- $smarty->setConfigDir('./config');
-
- // view the config dir chain
- var_dump($smarty->getConfigDir());
-
- // set multiple directoríes where config files are stored
- $smarty->setConfigDir(array(
- 'one' => './config',
- 'two' => './config_2',
- 'three' => './config_3',
- ));
-
- // view the config dir chain
- var_dump($smarty->getConfigDir());
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setConfigDir('./config')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getConfigDir()`](#api.get.config.dir),
-[`addConfigDir()`](#api.add.config.dir) and
-[`$config_dir`](#variable.config.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md
deleted file mode 100644
index 2de23309b..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md
+++ /dev/null
@@ -1,46 +0,0 @@
-setTemplateDir()
-
-set the directories where templates are stored
-
-Description
-===========
-
-Smarty
-
-setTemplateDir
-
-string\|array
-
-template\_dir
-
-
- <?php
-
- // set a single directory where the templates are stored
- $smarty->setTemplateDir('./cache');
-
- // view the template dir chain
- var_dump($smarty->getTemplateDir());
-
- // set multiple directoríes where templates are stored
- $smarty->setTemplateDir(array(
- 'one' => './templates',
- 'two' => './templates_2',
- 'three' => './templates_3',
- ));
-
- // view the template dir chain
- var_dump($smarty->getTemplateDir());
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getTemplateDir()`](#api.get.template.dir),
-[`addTemplateDir()`](#api.add.template.dir) and
-[`$template_dir`](#variable.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md
deleted file mode 100644
index 07f61b12e..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md
+++ /dev/null
@@ -1,59 +0,0 @@
-templateExists()
-
-checks whether the specified template exists
-
-Description
-===========
-
-bool
-
-templateExists
-
-string
-
-template
-
-It can accept either a path to the template on the filesystem or a
-resource string specifying the template.
-
-This example uses `$_GET['page']` to
-[`{include}`](#language.function.include) a content template. If the
-template does not exist then an error page is displayed instead. First
-the `page_container.tpl`
-
-
- <html>
- <head><title>{$title}</title></head>
- <body>
- {include file='page_top.tpl'}
-
- {* include middle content page *}
- {include file=$content_template}
-
- {include file='page_footer.tpl'}
- </body>
-
-
-
-And the php script
-
-
- <?php
-
- // set the filename eg index.inc.tpl
- $mid_template = $_GET['page'].'.inc.tpl';
-
- if( !$smarty->templateExists($mid_template) ){
- $mid_template = 'page_not_found.tpl';
- }
- $smarty->assign('content_template', $mid_template);
-
- $smarty->display('page_container.tpl');
-
- ?>
-
-
-
-See also [`display()`](#api.display), [`fetch()`](#api.fetch),
-[`{include}`](#language.function.include) and
-[`{insert}`](#language.function.insert)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md
index 918bd220a..bba64a19c 100644
--- a/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md
@@ -14,7 +14,7 @@ installation can be accessed. It does output a corresponding protocol.
<?php
- require_once('Smarty.class.php');
+ use Smarty\Smarty;
$smarty = new Smarty();
$smarty->testInstall();
?>
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables.md b/vendor/smarty/smarty/docs/programmers/api-variables.md
deleted file mode 100644
index ee9c07611..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables.md
+++ /dev/null
@@ -1,63 +0,0 @@
-Smarty Class Variables {#api.variables}
-======================
-
-These are all of the available Smarty class variables. You can access
-them directly, or use the corresponding setter/getter methods.
-
-- [$allow_php_templates](./api-variables/variable-allow-php-templates.md)
-- [$auto_literal](./api-variables/variable-auto-literal.md)
-- [$autoload_filters](./api-variables/variable-autoload-filters.md)
-- [$cache_dir](./api-variables/variable-cache-dir.md)
-- [$cache_id](./api-variables/variable-cache-id.md)
-- [$cache_lifetime](./api-variables/variable-cache-lifetime.md)
-- [$cache_locking](./api-variables/variable-cache-locking.md)
-- [$cache_modified_check](./api-variables/variable-cache-modified-check.md)
-- [$caching](./api-variables/variable-caching.md)
-- [$caching_type](./api-variables/variable-caching-type.md)
-- [$compile_check](./api-variables/variable-compile-check.md)
-- [$compile_dir](./api-variables/variable-compile-dir.md)
-- [$compile_id](./api-variables/variable-compile-id.md)
-- [$compile_locking](./api-variables/variable-compile-locking.md)
-- [$compiler_class](./api-variables/variable-compiler-class.md)
-- [$config_booleanize](./api-variables/variable-config-booleanize.md)
-- [$config_dir](./api-variables/variable-config-dir.md)
-- [$config_overwrite](./api-variables/variable-config-overwrite.md)
-- [$config_read_hidden](./api-variables/variable-config-read-hidden.md)
-- [$debug_tpl](./api-variables/variable-debug-template.md)
-- [$debugging](./api-variables/variable-debugging.md)
-- [$debugging_ctrl](./api-variables/variable-debugging-ctrl.md)
-- [$default_config_type](./api-variables/variable-default-config-type.md)
-- [$default_modifiers](./api-variables/variable-default-modifiers.md)
-- [$default_resource_type](./api-variables/variable-default-resource-type.md)
-- [$default_config_handler_func](./api-variables/variable-default-config-handler-func.md)
-- [$default_template_handler_func](./api-variables/variable-default-template-handler-func.md)
-- [$direct_access_security](./api-variables/variable-direct-access-security.md)
-- [$error_reporting](./api-variables/variable-error-reporting.md)
-- [$escape_html](./api-variables/variable-escape-html.md)
-- [$force_cache](./api-variables/variable-force-cache.md)
-- [$force_compile](./api-variables/variable-force-compile.md)
-- [$left_delimiter](./api-variables/variable-left-delimiter.md)
-- [$locking_timeout](./api-variables/variable-locking-timeout.md)
-- [$merge_compiled_includes](./api-variables/variable-merge-compiled-includes.md)
-- [$plugins_dir](./api-variables/variable-plugins-dir.md)
-- [$right_delimiter](./api-variables/variable-right-delimiter.md)
-- [$smarty_debug_id](./api-variables/variable-smarty-debug-id.md)
-- [$template_dir](./api-variables/variable-template-dir.md)
-- [$trusted_dir](./api-variables/variable-trusted-dir.md)
-- [$use_include_path](./api-variables/variable-use-include-path.md)
-- [$use_sub_dirs](./api-variables/variable-use-sub-dirs.md)
-
-> **Note**
->
-> All class variables have magic setter/getter methods available.
-> setter/getter methods are camelCaseFormat, unlike the variable itself.
-> So for example, you can set and get the \$smarty-\>template\_dir
-> variable with \$smarty-\>setTemplateDir(\$dir) and \$dir =
-> \$smarty-\>getTemplateDir() respectively.
-
-> **Note**
->
-> See
-> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md)
-> section for how to change Smarty class variables for individual
-> templates.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md
deleted file mode 100644
index e15520e2d..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md
+++ /dev/null
@@ -1,18 +0,0 @@
-\$allow\_php\_templates {#variable.allow.php.templates}
-=======================
-
-By default the PHP template file resource is disabled. Setting
-`$allow_php_templates` to TRUE will enable PHP template files.
-
-::: {.informalexample}
-
- <?php
- $smarty->allow_php_templates = true;
- ?>
-
-
-:::
-
-> **Note**
->
-> The PHP template file resource is an undocumented deprecated feature.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md
deleted file mode 100644
index 8a300b065..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md
+++ /dev/null
@@ -1,21 +0,0 @@
-\$autoload\_filters {#variable.autoload.filters}
-===================
-
-If there are some filters that you wish to load on every template
-invocation, you can specify them using this variable and Smarty will
-automatically load them for you. The variable is an associative array
-where keys are filter types and values are arrays of the filter names.
-For example:
-
-::: {.informalexample}
-
- <?php
- $smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
- 'output' => array('convert'));
- ?>
-
-
-:::
-
-See also [`registerFilter()`](#api.register.filter) and
-[`loadFilter()`](#api.load.filter)
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
index c9624b556..481fbee8e 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
@@ -5,8 +5,8 @@ This is the length of time in seconds that a template cache is valid.
Once this time has expired, the cache will be regenerated.
- `$caching` must be turned on (either
- Smarty::CACHING\_LIFETIME\_CURRENT or
- Smarty::CACHING\_LIFETIME\_SAVED) for `$cache_lifetime` to have any
+ \Smarty\Smarty::CACHING\_LIFETIME\_CURRENT or
+ \Smarty\Smarty::CACHING\_LIFETIME\_SAVED) for `$cache_lifetime` to have any
purpose.
- A `$cache_lifetime` value of -1 will force the cache to never
@@ -14,11 +14,11 @@ Once this time has expired, the cache will be regenerated.
- A value of 0 will cause the cache to always regenerate (good for
testing only, to disable caching a more efficient method is to set
- [`$caching`](#variable.caching) = Smarty::CACHING\_OFF).
+ [`$caching`](#variable.caching) = \Smarty\Smarty::CACHING\_OFF).
- If you want to give certain templates their own cache lifetime, you
could do this by setting [`$caching`](#variable.caching) =
- Smarty::CACHING\_LIFETIME\_SAVED, then set `$cache_lifetime` to a
+ \Smarty\Smarty::CACHING\_LIFETIME\_SAVED, then set `$cache_lifetime` to a
unique value just before calling [`display()`](#api.display) or
[`fetch()`](#api.fetch).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
index 05e00bb91..815be2556 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
@@ -4,8 +4,7 @@
If set to TRUE, Smarty will respect the If-Modified-Since header sent
from the client. If the cached file timestamp has not changed since the
last visit, then a `'304: Not Modified'` header will be sent instead of
-the content. This works only on cached content without
-[`{insert}`](#language.function.insert) tags.
+the content.
See also [`$caching`](#variable.caching),
[`$cache_lifetime`](#variable.cache.lifetime), and the [caching
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md
index 9377e3b6d..7304e41d6 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md
@@ -3,21 +3,21 @@
This tells Smarty whether or not to cache the output of the templates to
the [`$cache_dir`](#variable.cache.dir). By default this is set to the
-constant Smarty::CACHING\_OFF. If your templates consistently generate
+constant \Smarty\Smarty::CACHING\_OFF. If your templates consistently generate
the same content, it is advisable to turn on `$caching`, as this may
result in significant performance gains.
You can also have [multiple](#caching.multiple.caches) caches for the
same template.
-- A constant value of Smarty::CACHING\_LIFETIME\_CURRENT or
- Smarty::CACHING\_LIFETIME\_SAVED enables caching.
+- A constant value of \Smarty\Smarty::CACHING\_LIFETIME\_CURRENT or
+ \Smarty\Smarty ::CACHING\_LIFETIME\_SAVED enables caching.
-- A value of Smarty::CACHING\_LIFETIME\_CURRENT tells Smarty to use
+- A value of \Smarty\Smarty::CACHING\_LIFETIME\_CURRENT tells Smarty to use
the current [`$cache_lifetime`](#variable.cache.lifetime) variable
to determine if the cache has expired.
-- A value of Smarty::CACHING\_LIFETIME\_SAVED tells Smarty to use the
+- A value of \Smarty\Smarty::CACHING\_LIFETIME\_SAVED tells Smarty to use the
[`$cache_lifetime`](#variable.cache.lifetime) value at the time the
cache was generated. This way you can set the
[`$cache_lifetime`](#variable.cache.lifetime) just before
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md
deleted file mode 100644
index 075e7f17a..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md
+++ /dev/null
@@ -1,30 +0,0 @@
-\$compile\_check {#variable.compile.check}
-================
-
-Upon each invocation of the PHP application, Smarty tests to see if the
-current template has changed (different timestamp) since the last time
-it was compiled. If it has changed, it recompiles that template. If the
-template has yet not been compiled at all, it will compile regardless of
-this setting. By default this variable is set to TRUE.
-
-Once an application is put into production (ie the templates won\'t be
-changing), the compile check step is no longer needed. Be sure to set
-`$compile_check` to FALSE for maximum performance. Note that if you
-change this to FALSE and a template file is changed, you will \*not\*
-see the change since the template will not get recompiled.
-
-Note that up to Smarty 4.x, Smarty will check for the existence of
-the source template even if `$compile_check` is disabled.
-
-If [`$caching`](#variable.caching) is enabled and `$compile_check` is
-enabled, then the cache files will get regenerated if an involved
-template file or config file was updated.
-
-As of Smarty 3.1 `$compile_check` can be set to the value
-`Smarty::COMPILECHECK_CACHEMISS`. This enables Smarty to revalidate the
-compiled template, once a cache file is regenerated. So if there was a
-cached template, but it\'s expired, Smarty will run a single
-compile\_check before regenerating the cache.
-
-See [`$force_compile`](#variable.force.compile) and
-[`clearCompiledTemplate()`](#api.clear.compiled.tpl).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
index faec0e171..11a805292 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
@@ -2,8 +2,7 @@
============
This is the name of the template file used for the debugging console. By
-default, it is named `debug.tpl` and is located in the
-[`SMARTY_DIR`](#constant.smarty.dir).
+default, it is named `debug.tpl` and is located in `src/debug.tpl`.
See also [`$debugging`](#variable.debugging) and the [debugging
console](#chapter.debugging.console) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
index 0d6ec5e0d..50eb65bb5 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
@@ -8,11 +8,11 @@ resource.
>
> The default handler is currently only invoked for file resources. It
> is not triggered when the resource itself cannot be found, in which
-> case a SmartyException is thrown.
+> case a \Smarty\Exception is thrown.
<?php
-
+ use Smarty\Smarty;
$smarty = new Smarty();
$smarty->default_config_handler_func = 'my_default_config_handler_func';
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
index d8fcbb1ad..96c8190d7 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
@@ -8,11 +8,11 @@ resource.
>
> The default handler is currently only invoked for file resources. It
> is not triggered when the resource itself cannot be found, in which
-> case a SmartyException is thrown.
+> case a \Smarty\Exception is thrown.
<?php
-
+ use Smarty\Smarty;
$smarty = new Smarty();
$smarty->default_template_handler_func = 'my_default_template_handler_func';
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md
deleted file mode 100644
index f471f5de0..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md
+++ /dev/null
@@ -1,13 +0,0 @@
-\$direct\_access\_security {#variable.direct.access.security}
-==========================
-
-Direct access security inhibits direct browser access to compiled or
-cached template files.
-
-Direct access security is enabled by default. To disable it set
-`$direct_access_security` to FALSE.
-
-> **Note**
->
-> This is a compile time option. If you change the setting you must make
-> sure that the templates get recompiled.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
index c0aa9cedb..ee28d47ab 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
@@ -7,7 +7,7 @@ When this value is set to a non-null-value it\'s value is used as php\'s
Smarty 3.1.2 introduced the
[`muteExpectedErrors()`](#api.mute.expected.errors) function. Calling
-`Smarty::muteExpectedErrors();` after setting up custom error handling
+`\Smarty\Smarty::muteExpectedErrors();` after setting up custom error handling
will ensure that warnings and notices (deliberately) produced by Smarty
will not be passed to other custom error handlers. If your error logs
are filling up with warnings regarding `filemtime()` or `unlink()`
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md
deleted file mode 100644
index bcc13f0e5..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-\$left\_delimiter {#variable.left.delimiter}
-=================
-
-This is the left delimiter used by the template language. Default is
-`{`.
-
-See also [`$right_delimiter`](#variable.right.delimiter) and [escaping
-smarty parsing](#language.escaping) .
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md
deleted file mode 100644
index 8a7cfcdb2..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md
+++ /dev/null
@@ -1,28 +0,0 @@
-\$plugins\_dir {#variable.plugins.dir}
-==============
-
-This is the directory or directories where Smarty will look for the
-plugins that it needs. Default is `plugins/` under the
-[`SMARTY_DIR`](#constant.smarty.dir). If you supply a relative path,
-Smarty will first look under the [`SMARTY_DIR`](#constant.smarty.dir),
-then relative to the current working directory, then relative to the PHP
-include\_path. If `$plugins_dir` is an array of directories, Smarty will
-search for your plugin in each plugin directory **in the order they are
-given**.
-
-> **Note**
->
-> For best performance, do not setup your `$plugins_dir` to have to use
-> the PHP include path. Use an absolute pathname, or a path relative to
-> `SMARTY_DIR` or the current working directory.
-
-> **Note**
->
-> As of Smarty 3.1 the attribute \$plugins\_dir is no longer accessible
-> directly. Use [`getPluginsDir()`](#api.get.plugins.dir),
-> [`setPluginsDir()`](#api.set.plugins.dir) and
-> [`addPluginsDir()`](#api.add.plugins.dir) instead.
-
-See also [`getPluginsDir()`](#api.get.plugins.dir),
-[`setPluginsDir()`](#api.set.plugins.dir) and
-[`addPluginsDir()`](#api.add.plugins.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md
deleted file mode 100644
index 14a9b568e..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-\$right\_delimiter {#variable.right.delimiter}
-==================
-
-This is the right delimiter used by the template language. Default is
-`}`.
-
-See also [`$left_delimiter`](#variable.left.delimiter) and [escaping
-smarty parsing](#language.escaping).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
index 1db9c4139..eb91d2c24 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
@@ -15,22 +15,12 @@ found.
> document root.
> **Note**
->
-> If the directories known to `$template_dir` are relative to
-> directories known to the
-> [include\_path](https://www.php.net/ini.core.php#ini.include-path) you
-> need to activate the [`$use_include_path`](#variable.use.include.path)
-> option.
-
-> **Note**
->
> As of Smarty 3.1 the attribute \$template\_dir is no longer accessible
> directly. Use [`getTemplateDir()`](#api.get.template.dir),
> [`setTemplateDir()`](#api.set.template.dir) and
> [`addTemplateDir()`](#api.add.template.dir) instead.
See also [`Template Resources`](#resources),
-[`$use_include_path`](#variable.use.include.path),
[`getTemplateDir()`](#api.get.template.dir),
[`setTemplateDir()`](#api.set.template.dir) and
[`addTemplateDir()`](#api.add.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md
deleted file mode 100644
index 9720ae8a6..000000000
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md
+++ /dev/null
@@ -1,8 +0,0 @@
-\$trusted\_dir {#variable.trusted.dir}
-==============
-
-`$trusted_dir` is only for use when security is enabled. This is an
-array of all directories that are considered trusted. Trusted
-directories are where you keep php scripts that are executed directly
-from the templates with
-[`{insert}`](#language.function.insert.php).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
index 90f55f073..e69de29bb 100644
--- a/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
@@ -1,49 +0,0 @@
-\$use\_include\_path {#variable.use.include.path}
-====================
-
-This tells smarty to respect the
-[include\_path](https://www.php.net/ini.core.php#ini.include-path) within
-the [`File Template Resource`](#resources.file) handler and the plugin
-loader to resolve the directories known to
-[`$template_dir`](#variable.template.dir). The flag also makes the
-plugin loader check the include\_path for
-[`$plugins_dir`](#variable.plugins.dir).
-
-> **Note**
->
-> You should not design your applications to rely on the include\_path,
-> as this may - depending on your implementation - slow down your system
-> (and Smarty) considerably.
-
-If use\_include\_path is enabled, file discovery for
-[`$template_dir`](#variable.template.dir) and
-[`$plugins_dir`](#variable.plugins.dir) work as follows.
-
-- For each element `$directory` in array (\$template\_dir or
- \$plugins\_dir) do
-
-- Test if requested file is in `$directory` relative to the [current
- working directory](https://www.php.net/function.getcwd.php). If file
- found, return it.
-
-- For each `$path` in include\_path do
-
-- Test if requested file is in `$directory` relative to the `$path`
- (possibly relative to the [current working
- directory](https://www.php.net/function.getcwd.php)). If file found,
- return it.
-
-- Try default\_handler or fail.
-
-This means that whenever a directory/file relative to the current
-working directory is encountered, it is preferred over anything
-potentially accessible through the include\_path.
-
-> **Note**
->
-> Smarty does not filter elements of the include\_path. That means a
-> \".:\" within your include path will trigger the current working
-> directory lookup twice.
-
-See also [`Template Resources`](#resources) and
-[`$template_dir`](#variable.template.dir)
diff --git a/vendor/smarty/smarty/docs/programmers/caching.md b/vendor/smarty/smarty/docs/programmers/caching.md
deleted file mode 100644
index 5656b71b5..000000000
--- a/vendor/smarty/smarty/docs/programmers/caching.md
+++ /dev/null
@@ -1,24 +0,0 @@
-Caching
-=======
-
-Caching is used to speed up a call to [`display()`](./api-functions/api-display.md) or
-[`fetch()`](./api-functions/api-fetch.md) by saving its output to a file. If a cached
-version of the call is available, that is displayed instead of
-regenerating the output. Caching can speed things up tremendously,
-especially templates with longer computation times. Since the output of
-[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) is cached, one
-cache file could conceivably be made up of several template files,
-config files, etc.
-
-Since templates are dynamic, it is important to be careful what you are
-caching and for how long. For instance, if you are displaying the front
-page of your website that does not change its content very often, it
-might work well to cache this page for an hour or more. On the other
-hand, if you are displaying a page with a timetable containing new
-information by the minute, it would not make sense to cache this page.
-
-## Table of contents
-- [Setting Up Caching](./caching/caching-setting-up.md)
-- [Multiple Caches Per Page](./caching/caching-multiple-caches.md)
-- [Controlling Cacheability of Output](./caching/caching-groups.md)
-- [Custom Cache Implementation](./caching/caching-custom.md)
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md b/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md
deleted file mode 100644
index ee9b60090..000000000
--- a/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md
+++ /dev/null
@@ -1,176 +0,0 @@
-Controlling Cacheability of Output {#caching.cacheable}
-==================================
-
-If caching is enabled normally the whole final output of the page gets
-cached. However Smarty3 offers several options how to exclude sections
-of your output from caching.
-
-> **Note**
->
-> Be sure any variables used within a non-cached section are also
-> assigned from PHP when the page is loaded from the cache.
-
-Cacheability of Template Section {#cacheability.sections}
---------------------------------
-
-A larger section of your template can easily excluded from caching by
-using the [`{nocache}`](#language.function.nocache) and
-[`{/nocache}`](#language.function.nocache) tags.
-
-
-
- Today's date is
- {nocache}
- {$smarty.now|date_format}
- {/nocache}
-
-
-
-The above code will output the current date on a cached page.
-
-Cacheability of Tags {#cacheability.tags}
---------------------
-
-Caching for an individual tag can be disabled by adding the \"nocache\"
-option flag to the tag.
-
-
- Today's date is
- {$smarty.now|date_format nocache}
-
-
-
-Cacheability of Variables {#cacheability.variables}
--------------------------
-
-You can [`assign()`](#api.assign) variables as not cachable. Any tag
-which uses such variable will be automatically executed in nocache mode.
-
-> **Note**
->
-> If a tag is executed in nocache mode you must make sure that all other
-> variables used by that tag are also assigned from PHP when the page is
-> loaded from the cache.
-
-> **Note**
->
-> The nocache status of an assigned variable will effect the compiled
-> template code. If you change the status you must manually delete
-> existing compiled and cached template files to force a recompile.
-
-
- // assign $foo as nocahe variable
- $smarty->assign('foo',time(),true);
-
-
- Dynamic time value is {$foo}
-
-
-
-Cacheability of Plugins {#cacheability.plugins}
------------------------
-
-The cacheability of plugins can be declared when registering them. The
-third parameter to [`registerPlugin()`](#api.register.plugin) is called
-`$cacheable` and defaults to TRUE.
-
-When registering a plugin with `$cacheable=false` the plugin is called
-everytime the page is displayed, even if the page comes from the cache.
-The plugin function behaves a little like an
-[`{insert}`](#plugins.inserts) function.
-
-> **Note**
->
-> The `$cacheable` status will effect the compiled template code. If you
-> change the status you must manually delete existing compiled and
-> cached template files to force a recompile.
-
-In contrast to [`{insert}`](#plugins.inserts) the attributes to the
-plugins are not cached by default. They can be declared to be cached
-with the fourth parameter `$cache_attrs`. `$cache_attrs` is an array of
-attribute-names that should be cached, so the plugin-function get value
-as it was the time the page was written to cache everytime it is fetched
-from the cache.
-
-
- <?php
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- function remaining_seconds($params, $smarty) {
- $remain = $params['endtime'] - time();
- if($remain >= 0){
- return $remain . ' second(s)';
- }else{
- return 'done';
- }
- }
-
- $smarty->registerPlugin('function','remaining', 'remaining_seconds', false, array('endtime'));
-
- if (!$smarty->isCached('index.tpl')) {
- // fetch $obj from db and assign...
- $smarty->assignByRef('obj', $obj);
- }
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-where `index.tpl` is:
-
-
- Time Remaining: {remaining endtime=$obj->endtime}
-
-
-
-The number of seconds till the endtime of `$obj` is reached changes on
-each display of the page, even if the page is cached. Since the endtime
-attribute is cached the object only has to be pulled from the database
-when page is written to the cache but not on subsequent requests of the
-page.
-
-
- index.php:
-
- <?php
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- function smarty_block_dynamic($param, $content, $smarty) {
- return $content;
- }
- $smarty->registerPlugin('block','dynamic', 'smarty_block_dynamic', false);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-where `index.tpl` is:
-
-
- Page created: {'0'|date_format:'%D %H:%M:%S'}
-
- {dynamic}
-
- Now is: {'0'|date_format:'%D %H:%M:%S'}
-
- ... do other stuff ...
-
- {/dynamic}
-
-
-
-When reloading the page you will notice that both dates differ. One is
-"dynamic" one is "static". You can do everything between
-`{dynamic}...{/dynamic}` and be sure it will not be cached like the rest
-of the page.
-
-> **Note**
->
-> The above example shall just demonstrate how a dynamic block plugins
-> works. See
-> [`Cacheability of Template Section`](#cacheability.sections) on how to
-> disable caching of a template section by the built-in
-> [`{nocache}`](#language.function.nocache) and
-> [`{/nocache}`](#language.function.nocache) tags.
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md b/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md
deleted file mode 100644
index 77d2ce7b3..000000000
--- a/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md
+++ /dev/null
@@ -1,296 +0,0 @@
-Custom Cache Implementation {#caching.custom}
-===========================
-
-As an alternative to using the default file-based caching mechanism, you
-can specify a custom cache implementation that will be used to read,
-write and clear cached files.
-
-> **Note**
->
-> In Smarty2 this used to be a callback function called
-> `$cache_handler_func`. Smarty3 replaced this callback by the
-> `Smarty_CacheResource` module.
-
-With a custom cache implementation you\'re likely trying to achieve at
-least one of the following goals: replace the slow filesystem by a
-faster storage engine, centralize the cache to be accessible to multiple
-servers.
-
-Smarty allows CacheResource implementations to use one of the APIs
-`Smarty_CacheResource_Custom` or `Smarty_CacheResource_KeyValueStore`.
-`Smarty_CacheResource_Custom` is a simple API directing all read, write,
-clear calls to your implementation. This API allows you to store
-wherever and however you deem fit. The
-`Smarty_CacheResource_KeyValueStore` API allows you to turn any \"dumb\"
-KeyValue-Store (like APC, Memcache, ...) into a full-featured
-CacheResource implementation. That is, everything around deep
-cache-groups like \"a\|b\|c\" is being handled for you in way that
-allows clearing the cache-group \"a\" and all nested groups are cleared
-as well - even though KeyValue-Stores don\'t allow this kind of
-hierarchy by nature.
-
-Custom CacheResources may be put in a file `cacheresource.foobarxyz.php`
-within your [`$plugins_dir`](#variable.plugins.dir), or registered on
-runtime with [`registerCacheResource()`](#api.register.cacheresource).
-In either case you need to set [`$caching_type`](#variable.caching.type)
-to invoke your custom CacheResource implementation.
-
-
- <?php
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->caching_type = 'mysql';
-
- /**
- * MySQL CacheResource
- *
- * CacheResource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's output caching.
- *
- * Table definition:
- * <pre>CREATE TABLE IF NOT EXISTS `output_cache` (
- * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash',
- * `name` VARCHAR(250) NOT NULL,
- * `cache_id` VARCHAR(250) NULL DEFAULT NULL,
- * `compile_id` VARCHAR(250) NULL DEFAULT NULL,
- * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- * `content` LONGTEXT NOT NULL,
- * PRIMARY KEY (`id`),
- * INDEX(`name`),
- * INDEX(`cache_id`),
- * INDEX(`compile_id`),
- * INDEX(`modified`)
- * ) ENGINE = InnoDB;</pre>
- *
- * @package CacheResource-examples
- * @author Rodney Rehm
- */
- class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
- // PDO instance
- protected $db;
- protected $fetch;
- protected $fetchTimestamp;
- protected $save;
-
- public function __construct() {
- try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
- } catch (PDOException $e) {
- throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
- }
- $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id');
- $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id');
- $this->save = $this->db->prepare('REPLACE INTO output_cache (id, name, cache_id, compile_id, content)
- VALUES (:id, :name, :cache_id, :compile_id, :content)');
- }
-
- /**
- * 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)
- * @return void
- */
- protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
- {
- $this->fetch->execute(array('id' => $id));
- $row = $this->fetch->fetch();
- $this->fetch->closeCursor();
- if ($row) {
- $content = $row['content'];
- $mtime = strtotime($row['modified']);
- } else {
- $content = null;
- $mtime = null;
- }
- }
-
- /**
- * Fetch cached content's modification timestamp from data source
- *
- * @note 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
- * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
- */
- protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
- {
- $this->fetchTimestamp->execute(array('id' => $id));
- $mtime = strtotime($this->fetchTimestamp->fetchColumn());
- $this->fetchTimestamp->closeCursor();
- return $mtime;
- }
-
- /**
- * 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 time in seconds or null
- * @param string $content content to cache
- * @return boolean success
- */
- protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
- {
- $this->save->execute(array(
- 'id' => $id,
- 'name' => $name,
- 'cache_id' => $cache_id,
- 'compile_id' => $compile_id,
- 'content' => $content,
- ));
- return !!$this->save->rowCount();
- }
-
- /**
- * 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 or null
- * @return integer number of deleted caches
- */
- protected function delete($name, $cache_id, $compile_id, $exp_time)
- {
- // delete the whole cache
- if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
- // returning the number of deleted caches would require a second query to count them
- $query = $this->db->query('TRUNCATE TABLE output_cache');
- return -1;
- }
- // build the filter
- $where = array();
- // equal test name
- if ($name !== null) {
- $where[] = 'name = ' . $this->db->quote($name);
- }
- // equal test compile_id
- if ($compile_id !== null) {
- $where[] = 'compile_id = ' . $this->db->quote($compile_id);
- }
- // range test expiration time
- if ($exp_time !== null) {
- $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)';
- }
- // equal test cache_id and match sub-groups
- if ($cache_id !== null) {
- $where[] = '(cache_id = '. $this->db->quote($cache_id)
- . ' OR cache_id LIKE '. $this->db->quote($cache_id .'|%') .')';
- }
- // run delete query
- $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where));
- return $query->rowCount();
- }
- }
-
-
-
-
- <?php
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->caching_type = 'memcache';
-
- /**
- * Memcache CacheResource
- *
- * CacheResource Implementation based on the KeyValueStore API to use
- * memcache as the storage resource for Smarty's output caching.
- *
- * Note that memcache has a limitation of 256 characters per cache-key.
- * To avoid complications all cache-keys are translated to a sha1 hash.
- *
- * @package CacheResource-examples
- * @author Rodney Rehm
- */
- class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
- /**
- * memcache instance
- * @var Memcache
- */
- protected $memcache = null;
-
- public function __construct()
- {
- $this->memcache = new Memcache();
- $this->memcache->addServer( '127.0.0.1', 11211 );
- }
-
- /**
- * Read values for a set of keys from cache
- *
- * @param array $keys list of keys to fetch
- * @return array list of values with the given keys used as indexes
- * @return boolean true on success, false on failure
- */
- protected function read(array $keys)
- {
- $_keys = $lookup = array();
- foreach ($keys as $k) {
- $_k = sha1($k);
- $_keys[] = $_k;
- $lookup[$_k] = $k;
- }
- $_res = array();
- $res = $this->memcache->get($_keys);
- foreach ($res as $k => $v) {
- $_res[$lookup[$k]] = $v;
- }
- return $_res;
- }
-
- /**
- * Save values for a set of keys to cache
- *
- * @param array $keys list of values to save
- * @param int $expire expiration time
- * @return boolean true on success, false on failure
- */
- protected function write(array $keys, $expire=null)
- {
- foreach ($keys as $k => $v) {
- $k = sha1($k);
- $this->memcache->set($k, $v, 0, $expire);
- }
- return true;
- }
-
- /**
- * Remove values from cache
- *
- * @param array $keys list of keys to delete
- * @return boolean true on success, false on failure
- */
- protected function delete(array $keys)
- {
- foreach ($keys as $k) {
- $k = sha1($k);
- $this->memcache->delete($k);
- }
- return true;
- }
-
- /**
- * Remove *all* values from cache
- *
- * @return boolean true on success, false on failure
- */
- protected function purge()
- {
- return $this->memcache->flush();
- }
- }
-
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md b/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md
deleted file mode 100644
index 7e248b2f3..000000000
--- a/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md
+++ /dev/null
@@ -1,60 +0,0 @@
-Cache Groups {#caching.groups}
-============
-
-You can do more elaborate grouping by setting up `$cache_id` groups.
-This is accomplished by separating each sub-group with a vertical bar
-`|` in the `$cache_id` value. You can have as many sub-groups as you
-like.
-
-- You can think of cache groups like a directory hierarchy. For
- instance, a cache group of `'a|b|c'` could be thought of as the
- directory structure `'/a/b/c/'`.
-
-- `clearCache(null,'a|b|c')` would be like removing the files
- `'/a/b/c/*'`. `clearCache(null,'a|b')` would be like removing the
- files `'/a/b/*'`.
-
-- If you specify a [`$compile_id`](#variable.compile.id) such as
- `clearCache(null,'a|b','foo')` it is treated as an appended cache
- group `'/a/b/c/foo/'`.
-
-- If you specify a template name such as
- `clearCache('foo.tpl','a|b|c')` then Smarty will attempt to remove
- `'/a/b/c/foo.tpl'`.
-
-- You CANNOT remove a specified template name under multiple cache
- groups such as `'/a/b/*/foo.tpl'`, the cache grouping works
- left-to-right ONLY. You will need to group your templates under a
- single cache group hierarchy to be able to clear them as a group.
-
-Cache grouping should not be confused with your template directory
-hierarchy, the cache grouping has no knowledge of how your templates are
-structured. So for example, if you have a template structure like
-`themes/blue/index.tpl` and you want to be able to clear all the cache
-files for the "blue" theme, you will need to create a cache group
-structure that mimics your template file structure, such as
-`display('themes/blue/index.tpl','themes|blue')`, then clear them with
-`clearCache(null,'themes|blue')`.
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- // clear all caches with 'sports|basketball' as the first two cache_id groups
- $smarty->clearCache(null,'sports|basketball');
-
- // clear all caches with "sports" as the first cache_id group. This would
- // include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..."
- $smarty->clearCache(null,'sports');
-
- // clear the foo.tpl cache file with "sports|basketball" as the cache_id
- $smarty->clearCache('foo.tpl','sports|basketball');
-
-
- $smarty->display('index.tpl','sports|basketball');
- ?>
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md b/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md
deleted file mode 100644
index 40fffc3d7..000000000
--- a/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md
+++ /dev/null
@@ -1,87 +0,0 @@
-Multiple Caches Per Page {#caching.multiple.caches}
-========================
-
-You can have multiple cache files for a single call to
-[`display()`](#api.display) or [`fetch()`](#api.fetch). Let\'s say that
-a call to `display('index.tpl')` may have several different output
-contents depending on some condition, and you want separate caches for
-each one. You can do this by passing a `$cache_id` as the second
-parameter to the function call.
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- $my_cache_id = $_GET['article_id'];
-
- $smarty->display('index.tpl', $my_cache_id);
- ?>
-
-
-
-Above, we are passing the variable `$my_cache_id` to
-[`display()`](#api.display) as the `$cache_id`. For each unique value of
-`$my_cache_id`, a separate cache will be generated for `index.tpl`. In
-this example, `article_id` was passed in the URL and is used as the
-`$cache_id`.
-
-> **Note**
->
-> Be very cautious when passing values from a client (web browser) into
-> Smarty or any PHP application. Although the above example of using the
-> article\_id from the URL looks handy, it could have bad consequences.
-> The `$cache_id` is used to create a directory on the file system, so
-> if the user decided to pass an extremely large value for article\_id,
-> or write a script that sends random article\_id\'s at a rapid pace,
-> this could possibly cause problems at the server level. Be sure to
-> sanitize any data passed in before using it. In this instance, maybe
-> you know the article\_id has a length of ten characters and is made up
-> of alpha-numerics only, and must be a valid article\_id in the
-> database. Check for this!
-
-Be sure to pass the same `$cache_id` as the second parameter to
-[`isCached()`](#api.is.cached) and [`clearCache()`](#api.clear.cache).
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- $my_cache_id = $_GET['article_id'];
-
- if(!$smarty->isCached('index.tpl',$my_cache_id)) {
- // No cache available, do variable assignments here.
- $contents = get_database_contents();
- $smarty->assign($contents);
- }
-
- $smarty->display('index.tpl',$my_cache_id);
- ?>
-
-
-
-You can clear all caches for a particular `$cache_id` by passing NULL as
-the first parameter to [`clearCache()`](#api.clear.cache).
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- // clear all caches with "sports" as the $cache_id
- $smarty->clearCache(null,'sports');
-
- $smarty->display('index.tpl','sports');
- ?>
-
-
-
-In this manner, you can "group" your caches together by giving them the
-same `$cache_id`.
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md b/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md
deleted file mode 100644
index bc9d2ad9e..000000000
--- a/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md
+++ /dev/null
@@ -1,153 +0,0 @@
-Setting Up Caching {#caching.setting.up}
-==================
-
-The first thing to do is enable caching by setting
-[`$caching`](#variable.caching) to one of
-`Smarty::CACHING_LIFETIME_CURRENT` or `Smarty::CACHING_LIFETIME_SAVED`.
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- // uses the value of $smarty->cacheLifetime() to determine
- // the number of seconds a cache is good for
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-With caching enabled, the function call to `display('index.tpl')` will
-render the template as usual, but also saves a copy of its output to a
-file (a cached copy) in the [`$cache_dir`](#variable.cache.dir). On the
-next call to `display('index.tpl')`, the cached copy will be used
-instead of rendering the template again.
-
-> **Note**
->
-> The files in the [`$cache_dir`](#variable.cache.dir) are named similar
-> to the template name. Although they end in the `.php` extension, they
-> are not intended to be directly executable. Do not edit these files!
-
-Each cached page has a limited lifetime determined by
-[`$cache_lifetime`](#variable.cache.lifetime). The default value is 3600
-seconds, or one hour. After that time expires, the cache is regenerated.
-It is possible to give individual caches their own expiration time by
-setting [`$caching`](#variable.caching) to
-`Smarty::CACHING_LIFETIME_SAVED`. See
-[`$cache_lifetime`](#variable.cache.lifetime) for more details.
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- // retain current cache lifetime for each specific display call
- $smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
-
- // set the cache_lifetime for index.tpl to 5 minutes
- $smarty->setCacheLifetime(300);
- $smarty->display('index.tpl');
-
- // set the cache_lifetime for home.tpl to 1 hour
- $smarty->setCacheLifetime(3600);
- $smarty->display('home.tpl');
-
- // NOTE: the following $cache_lifetime setting will not work when $caching
- // is set to Smarty::CACHING_LIFETIME_SAVED.
- // The cache lifetime for home.tpl has already been set
- // to 1 hour, and will no longer respect the value of $cache_lifetime.
- // The home.tpl cache will still expire after 1 hour.
- $smarty->setCacheLifetime(30); // 30 seconds
- $smarty->display('home.tpl');
- ?>
-
-
-
-If [`$compile_check`](#variable.compile.check) is enabled (default),
-every template file and config file that is involved with the cache file
-is checked for modification. If any of the files have been modified
-since the cache was generated, the cache is immediately regenerated.
-This is a computational overhead, so for optimum performance set
-[`$compile_check`](#variable.compile.check) to FALSE.
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
- $smarty->setCompileCheck(false);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-If [`$force_compile`](#variable.force.compile) is enabled, the cache
-files will always be regenerated. This effectively disables caching,
-however this also seriously degrades performance.
-[`$force_compile`](#variable.force.compile) is meant to be used for
-[debugging](#chapter.debugging.console) purposes. The appropriate way to
-disable caching is to set [`$caching`](#variable.caching) to
-Smarty::CACHING\_OFF.
-
-The [`isCached()`](#api.is.cached) function can be used to test if a
-template has a valid cache or not. If you have a cached template that
-requires something like a database fetch, you can use this to skip that
-process.
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- if(!$smarty->isCached('index.tpl')) {
- // No cache available, do variable assignments here.
- $contents = get_database_contents();
- $smarty->assign($contents);
- }
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-You can keep parts of a page dynamic (disable caching) with the
-[`{nocache}{/nocache}`](#language.function.nocache) block function, the
-[`{insert}`](#language.function.insert) function, or by using the
-`nocache` parameter for most template functions.
-
-Let\'s say the whole page can be cached except for a banner that is
-displayed down the side of the page. By using the
-[`{insert}`](#language.function.insert) function for the banner, you can
-keep this element dynamic within the cached content. See the
-documentation on [`{insert}`](#language.function.insert) for more
-details and examples.
-
-You can clear all the cache files with the
-[`clearAllCache()`](#api.clear.all.cache) function, or individual cache
-files [and groups](#caching.groups) with the
-[`clearCache()`](#api.clear.cache) function.
-
-
- <?php
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- // clear only cache for index.tpl
- $smarty->clearCache('index.tpl');
-
- // clear out all cache files
- $smarty->clearAllCache();
-
- $smarty->display('index.tpl');
- ?>
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/charset.md b/vendor/smarty/smarty/docs/programmers/charset.md
deleted file mode 100644
index 9dedf4dcd..000000000
--- a/vendor/smarty/smarty/docs/programmers/charset.md
+++ /dev/null
@@ -1,44 +0,0 @@
-Charset Encoding {#charset}
-================
-
-Charset Encoding {#charset.encoding}
-================
-
-There are a variety of encodings for textual data, ISO-8859-1 (Latin1)
-and UTF-8 being the most popular. Unless you change `Smarty::$_CHARSET`,
-Smarty recognizes `UTF-8` as the internal charset if
-[Multibyte String](https://www.php.net/mbstring) is available,
-`ISO-8859-1` if not.
-
-> **Note**
->
-> `ISO-8859-1` has been PHP\'s default internal charset since the
-> beginning. Unicode has been evolving since 1991. Since then it has
-> become the one charset to conquer them all, as it is capable of
-> encoding most of the known characters even across different character
-> systems (latin, cyrillic, japanese, ...). `UTF-8` is unicode\'s most
-> used encoding, as it allows referencing the thousands of character
-> with the smallest size overhead possible.
->
-> Since unicode and UTF-8 are very wide spread nowadays, their use is
-> strongly encouraged.
-
-> **Note**
->
-> Smarty\'s internals and core plugins are truly UTF-8 compatible since
-> Smarty 3.1. To achieve unicode compatibility, the [Multibyte
-> String](https://www.php.net/mbstring) PECL is required. Unless your PHP
-> environment offers this package, Smarty will not be able to offer
-> full-scale UTF-8 compatibility.
-
-
- // use japanese character encoding
- if (function_exists('mb_internal_charset')) {
- mb_internal_charset('EUC-JP');
- }
-
- require_once 'libs/Smarty.class.php';
- Smarty::$_CHARSET = 'EUC-JP';
- $smarty = new Smarty();
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/plugins.md b/vendor/smarty/smarty/docs/programmers/plugins.md
deleted file mode 100644
index 41a7ea0c4..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins.md
+++ /dev/null
@@ -1,44 +0,0 @@
-Extending Smarty With Plugins {#plugins}
-=============================
-
-## Table of contents
-
-- [How Plugins Work](./plugins/plugins-howto.md)
-- [Naming Conventions](./plugins/plugins-naming-conventions.md)
-- [Writing Plugins](./plugins/plugins-writing.md)
-- [Template Functions](./plugins/plugins-functions.md)
-- [Modifiers](./plugins/plugins-modifiers.md)
-- [Block Functions](./plugins/plugins-block-functions.md)
-- [Compiler Functions](./plugins/plugins-compiler-functions.md)
-- [Prefilters/Postfilters](./plugins/plugins-prefilters-postfilters.md)
-- [Output Filters](./plugins/plugins-outputfilters.md)
-- [Resources](./plugins/plugins-resources.md)
-- [Inserts](./plugins/plugins-inserts.md)
-
-Version 2.0 introduced the plugin architecture that is used for almost
-all the customizable functionality of Smarty. This includes:
-
-- functions
-
-- modifiers
-
-- block functions
-
-- compiler functions
-
-- prefilters
-
-- postfilters
-
-- outputfilters
-
-- resources
-
-- inserts
-
-With the exception of resources, backwards compatibility with the old
-way of registering handler functions via register\_\* API is preserved.
-If you did not use the API but instead modified the class variables
-`$custom_funcs`, `$custom_mods`, and other ones directly, then you will
-need to adjust your scripts to either use the API or convert your custom
-functionality into plugins.
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md
deleted file mode 100644
index 0e11c0782..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md
+++ /dev/null
@@ -1,95 +0,0 @@
-Block Functions {#plugins.block.functions}
-===============
-
-void
-
-smarty\_block\_
-
-name
-
-array
-
-\$params
-
-mixed
-
-\$content
-
-object
-
-\$template
-
-boolean
-
-&\$repeat
-
-Block functions are functions of the form: `{func} .. {/func}`. In other
-words, they enclose a template block and operate on the contents of this
-block. Block functions take precedence over [custom
-functions](#language.custom.functions) of the same name, that is, you
-cannot have both custom function `{func}` and block function
-`{func}..{/func}`.
-
-- By default your function implementation is called twice by Smarty:
- once for the opening tag, and once for the closing tag. (See
- `$repeat` below on how to change this.)
-
-- Starting with Smarty 3.1 the returned value of the opening tag call
- is displayed as well.
-
-- Only the opening tag of the block function may have
- [attributes](#language.syntax.attributes). All attributes passed to
- template functions from the template are contained in the `$params`
- variable as an associative array. The opening tag attributes are
- also accessible to your function when processing the closing tag.
-
-- The value of the `$content` variable depends on whether your
- function is called for the opening or closing tag. In case of the
- opening tag, it will be NULL, and in case of the closing tag it will
- be the contents of the template block. Note that the template block
- will have already been processed by Smarty, so all you will receive
- is the template output, not the template source.
-
-- The parameter `$repeat` is passed by reference to the function
- implementation and provides a possibility for it to control how many
- times the block is displayed. By default `$repeat` is TRUE at the
- first call of the block-function (the opening tag) and FALSE on all
- subsequent calls to the block function (the block\'s closing tag).
- Each time the function implementation returns with `$repeat` being
- TRUE, the contents between `{func}...{/func}` are evaluated and the
- function implementation is called again with the new block contents
- in the parameter `$content`.
-
-If you have nested block functions, it\'s possible to find out what the
-parent block function is by accessing `$smarty->_tag_stack` variable.
-Just do a [`var_dump()`](https://www.php.net/var_dump) on it and the
-structure should be apparent.
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: block.translate.php
- * Type: block
- * Name: translate
- * Purpose: translate a block of text
- * -------------------------------------------------------------
- */
- function smarty_block_translate($params, $content, Smarty_Internal_Template $template, &$repeat)
- {
- // only output on the closing tag
- if(!$repeat){
- if (isset($content)) {
- $lang = $params['lang'];
- // do some intelligent translation thing here with $content
- return $translation;
- }
- }
- }
- ?>
-
-
-
-See also: [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md
deleted file mode 100644
index ef2454e8a..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md
+++ /dev/null
@@ -1,66 +0,0 @@
-Compiler Functions {#plugins.compiler.functions}
-==================
-
-Compiler functions are called only during compilation of the template.
-They are useful for injecting PHP code or time-sensitive static content
-into the template. If there is both a compiler function and a [custom
-function](#language.custom.functions) registered under the same name,
-the compiler function has precedence.
-
-mixed
-
-smarty\_compiler\_
-
-name
-
-array
-
-\$params
-
-object
-
-\$smarty
-
-The compiler function is passed two parameters: the params array which
-contains precompiled strings for the attribute values and the Smarty
-object. It\'s supposed to return the code to be injected into the
-compiled template including the surrounding PHP tags.
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: compiler.tplheader.php
- * Type: compiler
- * Name: tplheader
- * Purpose: Output header containing the source file name and
- * the time it was compiled.
- * -------------------------------------------------------------
- */
- function smarty_compiler_tplheader($params, Smarty $smarty)
- {
- return "<?php\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';\n?>";
- }
- ?>
-
-This function can be called from the template as:
-
-
- {* this function gets executed at compile time only *}
- {tplheader}
-
-
-
-The resulting PHP code in the compiled template would be something like
-this:
-
-
- <?php
- echo 'index.tpl compiled at 2002-02-20 20:02';
- ?>
-
-
-
-See also [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md
deleted file mode 100644
index 067b93826..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md
+++ /dev/null
@@ -1,94 +0,0 @@
-Template Functions {#plugins.functions}
-==================
-
-void
-
-smarty\_function\_
-
-name
-
-array
-
-\$params
-
-object
-
-\$template
-
-All [attributes](#language.syntax.attributes) passed to template
-functions from the template are contained in the `$params` as an
-associative array.
-
-The output (return value) of the function will be substituted in place
-of the function tag in the template, eg the
-[`{fetch}`](#language.function.fetch) function. Alternatively, the
-function can simply perform some other task without any output, eg the
-[`{assign}`](#language.function.assign) function.
-
-If the function needs to assign some variables to the template or use
-some other Smarty-provided functionality, it can use the supplied
-`$template` object to do so eg `$template->foo()`.
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: function.eightball.php
- * Type: function
- * Name: eightball
- * Purpose: outputs a random magic answer
- * -------------------------------------------------------------
- */
- function smarty_function_eightball($params, Smarty_Internal_Template $template)
- {
- $answers = array('Yes',
- 'No',
- 'No way',
- 'Outlook not so good',
- 'Ask again soon',
- 'Maybe in your reality');
-
- $result = array_rand($answers);
- return $answers[$result];
- }
- ?>
-
-which can be used in the template as:
-
- Question: Will we ever have time travel?
- Answer: {eightball}.
-
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: function.assign.php
- * Type: function
- * Name: assign
- * Purpose: assign a value to a template variable
- * -------------------------------------------------------------
- */
- function smarty_function_assign($params, Smarty_Internal_Template $template)
- {
- if (empty($params['var'])) {
- trigger_error("assign: missing 'var' parameter");
- return;
- }
-
- if (!in_array('value', array_keys($params))) {
- trigger_error("assign: missing 'value' parameter");
- return;
- }
-
- $template->assign($params['var'], $params['value']);
-
- }
- ?>
-
-
-
-See also: [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md
deleted file mode 100644
index 5738c3fcb..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md
+++ /dev/null
@@ -1,18 +0,0 @@
-How Plugins Work {#plugins.howto}
-================
-
-Plugins are always loaded on demand. Only the specific modifiers,
-functions, resources, etc invoked in the templates scripts will be
-loaded. Moreover, each plugin is loaded only once, even if you have
-several different instances of Smarty running within the same request.
-
-Pre/postfilters and output filters are a bit of a special case. Since
-they are not mentioned in the templates, they must be registered or
-loaded explicitly via API functions before the template is processed.
-The order in which multiple filters of the same type are executed
-depends on the order in which they are registered or loaded.
-
-The [plugins directory](#variable.plugins.dir) can be a string
-containing a path or an array containing multiple paths. To install a
-plugin, simply place it in one of the directories and Smarty will use it
-automatically.
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md
deleted file mode 100644
index 370a97bd0..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md
+++ /dev/null
@@ -1,48 +0,0 @@
-Inserts {#plugins.inserts}
-=======
-
-Insert plugins are used to implement functions that are invoked by
-[`{insert}`](#language.function.insert) tags in the template.
-
-string
-
-smarty\_insert\_
-
-name
-
-array
-
-\$params
-
-object
-
-\$template
-
-The first parameter to the function is an associative array of
-attributes passed to the insert.
-
-The insert function is supposed to return the result which will be
-substituted in place of the `{insert}` tag in the template.
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: insert.time.php
- * Type: time
- * Name: time
- * Purpose: Inserts current date/time according to format
- * -------------------------------------------------------------
- */
- function smarty_insert_time($params, Smarty_Internal_Template $template)
- {
- if (empty($params['format'])) {
- trigger_error("insert time: missing 'format' parameter");
- return;
- }
- return strftime($params['format']);
- }
- ?>
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md
deleted file mode 100644
index a4e99daa3..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md
+++ /dev/null
@@ -1,86 +0,0 @@
-Modifiers {#plugins.modifiers}
-=========
-
-[Modifiers](#language.modifiers) are little functions that are applied
-to a variable in the template before it is displayed or used in some
-other context. Modifiers can be chained together.
-
-mixed
-
-smarty\_modifier\_
-
-name
-
-mixed
-
-\$value
-
-\[mixed
-
-\$param1
-
-, \...\]
-
-The first parameter to the modifier plugin is the value on which the
-modifier is to operate. The rest of the parameters are optional,
-depending on what kind of operation is to be performed.
-
-The modifier has to [return](https://www.php.net/return) the result of its
-processing.
-
-This plugin basically aliases one of the built-in PHP functions. It does
-not have any additional parameters.
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: modifier.capitalize.php
- * Type: modifier
- * Name: capitalize
- * Purpose: capitalize words in the string
- * -------------------------------------------------------------
- */
- function smarty_modifier_capitalize($string)
- {
- return ucwords($string);
- }
- ?>
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: modifier.truncate.php
- * Type: modifier
- * Name: truncate
- * Purpose: Truncate a string to a certain length if necessary,
- * optionally splitting in the middle of a word, and
- * appending the $etc string.
- * -------------------------------------------------------------
- */
- function smarty_modifier_truncate($string, $length = 80, $etc = '...',
- $break_words = false)
- {
- if ($length == 0)
- return '';
-
- if (strlen($string) > $length) {
- $length -= strlen($etc);
- $fragment = substr($string, 0, $length+1);
- if ($break_words)
- $fragment = substr($fragment, 0, -1);
- else
- $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
- return $fragment.$etc;
- } else
- return $string;
- }
- ?>
-
-
-
-See also [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md
deleted file mode 100644
index 15bc26015..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md
+++ /dev/null
@@ -1,51 +0,0 @@
-Naming Conventions {#plugins.naming.conventions}
-==================
-
-Plugin files and functions must follow a very specific naming convention
-in order to be located by Smarty.
-
-**plugin files** must be named as follows:
-
-> `
-> type.name.php
-> `
-
-- Where `type` is one of these plugin types:
-
- - function
-
- - modifier
-
- - block
-
- - compiler
-
- - prefilter
-
- - postfilter
-
- - outputfilter
-
- - resource
-
- - insert
-
-- And `name` should be a valid identifier; letters, numbers, and
- underscores only, see [php
- variables](https://www.php.net/language.variables).
-
-- Some examples: `function.html_select_date.php`, `resource.db.php`,
- `modifier.spacify.php`.
-
-**plugin functions** inside the PHP files must be named as follows:
-
-> `smarty_type_name`
-
-- The meanings of `type` and `name` are the same as above.
-
-- An example modifier name `foo` would be
- `function smarty_modifier_foo()`.
-
-Smarty will output appropriate error messages if the plugin file it
-needs is not found, or if the file or the plugin function are named
-improperly.
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md
deleted file mode 100644
index 4e34ab7eb..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md
+++ /dev/null
@@ -1,48 +0,0 @@
-Output Filters {#plugins.outputfilters}
-==============
-
-Output filter plugins operate on a template\'s output, after the
-template is loaded and executed, but before the output is displayed.
-
-string
-
-smarty\_outputfilter\_
-
-name
-
-string
-
-\$template\_output
-
-object
-
-\$template
-
-The first parameter to the output filter function is the template output
-that needs to be processed, and the second parameter is the instance of
-Smarty invoking the plugin. The plugin is supposed to do the processing
-and return the results.
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: outputfilter.protect_email.php
- * Type: outputfilter
- * Name: protect_email
- * Purpose: Converts @ sign in email addresses to %40 as
- * a simple protection against spambots
- * -------------------------------------------------------------
- */
- function smarty_outputfilter_protect_email($output, Smarty_Internal_Template $template)
- {
- return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
- '$1%40$2', $output);
- }
- ?>
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[`unregisterFilter()`](#api.unregister.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md
deleted file mode 100644
index 39467cbcb..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md
+++ /dev/null
@@ -1,89 +0,0 @@
-Prefilters/Postfilters {#plugins.prefilters.postfilters}
-======================
-
-Prefilter and postfilter plugins are very similar in concept; where they
-differ is in the execution \-- more precisely the time of their
-execution.
-
-string
-
-smarty\_prefilter\_
-
-name
-
-string
-
-\$source
-
-object
-
-\$template
-
-Prefilters are used to process the source of the template immediately
-before compilation. The first parameter to the prefilter function is the
-template source, possibly modified by some other prefilters. The plugin
-is supposed to return the modified source. Note that this source is not
-saved anywhere, it is only used for compilation.
-
-string
-
-smarty\_postfilter\_
-
-name
-
-string
-
-\$compiled
-
-object
-
-\$template
-
-Postfilters are used to process the compiled output of the template (the
-PHP code) immediately after the compilation is done but before the
-compiled template is saved to the filesystem. The first parameter to the
-postfilter function is the compiled template code, possibly modified by
-other postfilters. The plugin is supposed to return the modified version
-of this code.
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: prefilter.pre01.php
- * Type: prefilter
- * Name: pre01
- * Purpose: Convert html tags to be lowercase.
- * -------------------------------------------------------------
- */
- function smarty_prefilter_pre01($source, Smarty_Internal_Template $template)
- {
- return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source);
- }
- ?>
-
-
-
-
- <?php
- /*
- * Smarty plugin
- * -------------------------------------------------------------
- * File: postfilter.post01.php
- * Type: postfilter
- * Name: post01
- * Purpose: Output code that lists all current template vars.
- * -------------------------------------------------------------
- */
- function smarty_postfilter_post01($compiled, Smarty_Internal_Template $template)
- {
- $compiled = "<pre>\n<?php print_r(\$template->getTemplateVars()); ?>\n</pre>" . $compiled;
- return $compiled;
- }
- ?>
-
-
-
-See also [`registerFilter()`](#api.register.filter) and
-[`unregisterFilter()`](#api.unregister.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md
deleted file mode 100644
index 1b1fdf0ab..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md
+++ /dev/null
@@ -1,128 +0,0 @@
-Resources {#plugins.resources}
-=========
-
-Resource plugins are meant as a generic way of providing template
-sources or PHP script components to Smarty. Some examples of resources:
-databases, LDAP, shared memory, sockets, and so on.
-
-Custom Resources may be put in a file `resource.foobarxyz.php` within
-your [`$plugins_dir`](#variable.plugins.dir), or registered on runtime
-with [`registerResource()`](#api.register.resource). In either case you
-will be able to access that resource by prepending its name to the
-template you\'re addressing: `foobarxyz:yourtemplate.tpl`.
-
-If a Resource\'s templates should not be run through the Smarty
-compiler, the Custom Resource may extend `Smarty_Resource_Uncompiled`.
-The Resource Handler must then implement the function
-`renderUncompiled(Smarty_Internal_Template $_template)`. `$_template` is
-a reference to the current template and contains all assigned variables
-which the implementor can access via
-`$_template->smarty->getTemplateVars()`. These Resources simply echo
-their rendered content to the output stream. The rendered output will be
-output-cached if the Smarty instance was configured accordingly. See
-`libs/sysplugins/smarty_internal_resource_php.php` for an example.
-
-If the Resource\'s compiled templates should not be cached on disk, the
-Custom Resource may extend `Smarty_Resource_Recompiled`. These Resources
-are compiled every time they are accessed. This may be an expensive
-overhead. See `libs/sysplugins/smarty_internal_resource_eval.php` for an
-example.
-
-
- <?php
-
- /**
- * MySQL Resource
- *
- * Resource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's templates and configs.
- *
- * Table definition:
- * <pre>CREATE TABLE IF NOT EXISTS `templates` (
- * `name` varchar(100) NOT NULL,
- * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- * `source` text,
- * PRIMARY KEY (`name`)
- * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- *
- * Demo data:
- * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
- *
- * @package Resource-examples
- * @author Rodney Rehm
- */
- class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
- // PDO instance
- protected $db;
- // prepared fetch() statement
- protected $fetch;
- // prepared fetchTimestamp() statement
- protected $mtime;
-
- public function __construct() {
- try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
- } catch (PDOException $e) {
- throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
- }
- $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
- $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
- }
-
- /**
- * Fetch a template and its modification time from database
- *
- * @param string $name template name
- * @param string $source template source
- * @param integer $mtime template modification timestamp (epoch)
- * @return void
- */
- protected function fetch($name, &$source, &$mtime)
- {
- $this->fetch->execute(array('name' => $name));
- $row = $this->fetch->fetch();
- $this->fetch->closeCursor();
- if ($row) {
- $source = $row['source'];
- $mtime = strtotime($row['modified']);
- } else {
- $source = null;
- $mtime = null;
- }
- }
-
- /**
- * Fetch a template's modification time from database
- *
- * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
- * @param string $name template name
- * @return integer timestamp (epoch) the template was modified
- */
- protected function fetchTimestamp($name) {
- $this->mtime->execute(array('name' => $name));
- $mtime = $this->mtime->fetchColumn();
- $this->mtime->closeCursor();
- return strtotime($mtime);
- }
- }
-
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
-
- // using resource from php script
- $smarty->display("mysql:index.tpl");
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='mysql:extras/navigation.tpl'}
-
-
-
-See also [`registerResource()`](#api.register.resource),
-[`unregisterResource()`](#api.unregister.resource).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md
deleted file mode 100644
index 972911d97..000000000
--- a/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md
+++ /dev/null
@@ -1,36 +0,0 @@
-Writing Plugins {#plugins.writing}
-===============
-
-Plugins can be either loaded by Smarty automatically from the filesystem
-or they can be registered at runtime via one of the register\_\* API
-functions. They can also be unregistered by using unregister\_\* API
-functions.
-
-For the plugins that are registered at runtime, the name of the plugin
-function(s) does not have to follow the naming convention.
-
-If a plugin depends on some functionality provided by another plugin (as
-is the case with some plugins bundled with Smarty), then the proper way
-to load the needed plugin is this:
-
-
- <?php
- function smarty_function_yourPlugin(array $params, Smarty_Internal_Template $template)
- {
- // load plugin depended upon
- $template->smarty->loadPlugin('smarty_shared_make_timestamp');
- // plugin code
- }
- ?>
-
-
-
-As a general rule, the currently evaluated template\'s
-Smarty\_Internal\_Template object is always passed to the plugins as the
-last parameter with two exceptions:
-
-- modifiers do not get passed the Smarty\_Internal\_Template object at
- all
-
-- blocks get passed `$repeat` after the Smarty\_Internal\_Template
- object to keep backwards compatibility to older versions of Smarty.
diff --git a/vendor/smarty/smarty/docs/programmers/resources.md b/vendor/smarty/smarty/docs/programmers/resources.md
deleted file mode 100644
index 239690061..000000000
--- a/vendor/smarty/smarty/docs/programmers/resources.md
+++ /dev/null
@@ -1,19 +0,0 @@
-Resources
-=========
-
-The templates may come from a variety of sources. When you
-[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) a template, or
-when you include a template from within another template, you supply a
-resource type, followed by the appropriate path and template name. If a
-resource is not explicitly given, the value of
-[`$default_resource_type`](./api-variables/variable-default-resource-type.md) (default:
-\"file\") is assumed.
-
-## Table of contents
-
-- [File Template Resources](./resources/resources-file.md)
-- [String Template Resources](./resources/resources-string.md)
-- [Stream Template Resources](./resources/resources-streams.md)
-- [Extends Template Resources](./resources/resources-extends.md)
-- [Custom Template Resources](./resources/resources-custom.md)
-
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md b/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md
deleted file mode 100644
index d679afcb1..000000000
--- a/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md
+++ /dev/null
@@ -1,111 +0,0 @@
-Custom Template Resources {#resources.custom}
-=========================
-
-You can retrieve templates using whatever possible source you can access
-with PHP: databases, sockets, files, etc. You do this by writing
-resource plugin functions and registering them with Smarty.
-
-See [resource plugins](#plugins.resources) section for more information
-on the functions you are supposed to provide.
-
-> **Note**
->
-> Note that you cannot override the built-in `file:` resource, but you
-> can provide a resource that fetches templates from the file system in
-> some other way by registering under another resource name.
-
-
- <?php
-
- /**
- * MySQL Resource
- *
- * Resource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's templates and configs.
- *
- * Table definition:
- * <pre>CREATE TABLE IF NOT EXISTS `templates` (
- * `name` varchar(100) NOT NULL,
- * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- * `source` text,
- * PRIMARY KEY (`name`)
- * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- *
- * Demo data:
- * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
- *
- * @package Resource-examples
- * @author Rodney Rehm
- */
- class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
- // PDO instance
- protected $db;
- // prepared fetch() statement
- protected $fetch;
- // prepared fetchTimestamp() statement
- protected $mtime;
-
- public function __construct() {
- try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
- } catch (PDOException $e) {
- throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
- }
- $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
- $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
- }
-
- /**
- * Fetch a template and its modification time from database
- *
- * @param string $name template name
- * @param string $source template source
- * @param integer $mtime template modification timestamp (epoch)
- * @return void
- */
- protected function fetch($name, &$source, &$mtime)
- {
- $this->fetch->execute(array('name' => $name));
- $row = $this->fetch->fetch();
- $this->fetch->closeCursor();
- if ($row) {
- $source = $row['source'];
- $mtime = strtotime($row['modified']);
- } else {
- $source = null;
- $mtime = null;
- }
- }
-
- /**
- * Fetch a template's modification time from database
- *
- * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
- * @param string $name template name
- * @return integer timestamp (epoch) the template was modified
- */
- protected function fetchTimestamp($name) {
- $this->mtime->execute(array('name' => $name));
- $mtime = $this->mtime->fetchColumn();
- $this->mtime->closeCursor();
- return strtotime($mtime);
- }
- }
-
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
-
- // using resource from php script
- $smarty->display("mysql:index.tpl");
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='mysql:extras/navigation.tpl'}
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md b/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md
deleted file mode 100644
index d7213d894..000000000
--- a/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md
+++ /dev/null
@@ -1,36 +0,0 @@
-Extends Template Resources {#resources.extends}
-==========================
-
-The `extends:` resource is used to define child/parent relationships for
-template inheritance from the PHP script. For details see section of
-[Template Inheritance](#advanced.features.template.inheritance).
-
-As of Smarty 3.1 the `extends:` resource may use any available [template
-resource](#resources), including `string:` and `eval:`. When [templates
-from strings](#resources.string) are used, make sure they are properly
-(url or base64) encoded. Is an `eval:` resource found within an
-inheritance chain, its \"don\'t save a compile file\" property is
-superseded by the `extends:` resource. The templates within an
-inheritance chain are not compiled separately, though. Only a single
-compiled template will be generated.
-
-> **Note**
->
-> Use this when inheritance is required programmatically. When inheriting
-> within PHP, it is not obvious from the child template what inheritance
-> took place. If you have a choice, it is normally more flexible and
-> intuitive to handle inheritance chains from within the templates.
-
-
- <?php
- $smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl');
-
- // inheritance from multiple template sources
- $smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}');
- ?>
-
-
-
-See also [Template Inheritance](#advanced.features.template.inheritance)
-[`{block}`](#language.function.block) and
-[`{extends}`](#language.function.extends).
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-file.md b/vendor/smarty/smarty/docs/programmers/resources/resources-file.md
deleted file mode 100644
index 9a89af183..000000000
--- a/vendor/smarty/smarty/docs/programmers/resources/resources-file.md
+++ /dev/null
@@ -1,160 +0,0 @@
-File Template Resources {#resources.file}
-=======================
-
-Smarty ships with a built-in template resource for the filesystem. The
-`file:` is the default resource. The resource key `file:` must only be
-specified, if the
-[`$default_resource_type`](#variable.default.resource.type) has been
-changed.
-
-If the file resource cannot find the requested template, the
-[`$default_template_handler_func`](#variable.default.template.handler.func)
-is invoked.
-
-> **Note**
->
-> As of Smarty 3.1 the file resource no longer walks through the
-> [include\_path](https://www.php.net/ini.core.php#ini.include-path) unless
-> [`$use_include_path` is activated](#variable.use.include.path)
-
-Templates from \$template\_dir {#templates.from.template.dir}
-------------------------------
-
-The file resource pulls templates source files from the directories
-specified in [`$template_dir`](#variable.template.dir). The list of
-directories is traversed in the order they appear in the array. The
-first template found is the one to process.
-
-
- <?php
- $smarty->display('index.tpl');
- $smarty->display('file:index.tpl'); // same as above
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file='index.tpl'}
- {include file='file:index.tpl'} {* same as above *}
-
-
-
-Templates from a specific \$template\_dir {#templates.from.specified.template.dir}
------------------------------------------
-
-Smarty 3.1 introduced the bracket-syntax for specifying an element from
-[`$template_dir`](#variable.template.dir). This allows websites
-employing multiple sets of templates better control over which template
-to access.
-
-The bracket-syntax can be used from anywhere you can specify the `file:`
-resource type.
-
-
- <?php
-
- // setup template directories
- $smarty->setTemplateDir(array(
- './templates', // element: 0, index: 0
- './templates_2', // element: 1, index: 1
- '10' => 'templates_10', // element: 2, index: '10'
- 'foo' => 'templates_foo', // element: 3, index: 'foo'
- ));
-
- /*
- assume the template structure
- ./templates/foo.tpl
- ./templates_2/foo.tpl
- ./templates_2/bar.tpl
- ./templates_10/foo.tpl
- ./templates_10/bar.tpl
- ./templates_foo/foo.tpl
- */
-
- // regular access
- $smarty->display('file:foo.tpl');
- // will load ./templates/foo.tpl
-
- // using numeric index
- $smarty->display('file:[1]foo.tpl');
- // will load ./templates_2/foo.tpl
-
- // using numeric string index
- $smarty->display('file:[10]foo.tpl');
- // will load ./templates_10/foo.tpl
-
- // using string index
- $smarty->display('file:[foo]foo.tpl');
- // will load ./templates_foo/foo.tpl
-
- // using "unknown" numeric index (using element number)
- $smarty->display('file:[2]foo.tpl');
- // will load ./templates_10/foo.tpl
-
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file="file:foo.tpl"}
- {* will load ./templates/foo.tpl *}
-
- {include file="file:[1]foo.tpl"}
- {* will load ./templates_2/foo.tpl *}
-
- {include file="file:[foo]foo.tpl"}
- {* will load ./templates_foo/foo.tpl *}
-
-
-
-Templates from any directory {#templates.from.any.dir}
-----------------------------
-
-Templates outside of the [`$template_dir`](#variable.template.dir)
-require the `file:` template resource type, followed by the absolute
-path to the template (with leading slash.)
-
-> **Note**
->
-> With [`Security`](#advanced.features.security) enabled, access to
-> templates outside of the [`$template_dir`](#variable.template.dir) is
-> not allowed unless you list those directories in `$secure_dir`.
-
-
- <?php
- $smarty->display('file:/export/templates/index.tpl');
- $smarty->display('file:/path/to/my/templates/menu.tpl');
- ?>
-
-
-
-And from within a Smarty template:
-
-
- {include file='file:/usr/local/share/templates/navigation.tpl'}
-
-
-
-Windows Filepaths {#templates.windows.filepath}
------------------
-
-If you are using a Windows machine, filepaths usually include a drive
-letter (C:) at the beginning of the pathname. Be sure to use `file:` in
-the path to avoid namespace conflicts and get the desired results.
-
-
- <?php
- $smarty->display('file:C:/export/templates/index.tpl');
- $smarty->display('file:F:/path/to/my/templates/menu.tpl');
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='file:D:/usr/local/share/templates/navigation.tpl'}
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md b/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md
deleted file mode 100644
index e0596f591..000000000
--- a/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md
+++ /dev/null
@@ -1,27 +0,0 @@
-Stream Template Resources {#resources.streams}
-=========================
-
-Streams allow you to use PHP streams as a template resource. The syntax
-is much the same a traditional template resource names.
-
-Smarty will first look for a registered template resource. If nothing is
-found, it will check if a PHP stream is available. If a stream is
-available, Smarty will use it to fetch the template.
-
-> **Note**
->
-> You can further define allowed streams with security enabled.
-
-Using a PHP stream for a template resource from the display() function.
-
-
- $smarty->display('foo:bar.tpl');
-
-
-
-Using a PHP stream for a template resource from within a template.
-
-
- {include file="foo:bar.tpl"}
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-string.md b/vendor/smarty/smarty/docs/programmers/resources/resources-string.md
deleted file mode 100644
index d3f6d4155..000000000
--- a/vendor/smarty/smarty/docs/programmers/resources/resources-string.md
+++ /dev/null
@@ -1,73 +0,0 @@
-String Template Resources {#resources.string}
-=========================
-
-Smarty can render templates from a string by using the `string:` or
-`eval:` resource.
-
-- The `string:` resource behaves much the same as a template file. The
- template source is compiled from a string and stores the compiled
- template code for later reuse. Each unique template string will
- create a new compiled template file. If your template strings are
- accessed frequently, this is a good choice. If you have frequently
- changing template strings (or strings with low reuse value), the
- `eval:` resource may be a better choice, as it doesn\'t save
- compiled templates to disk.
-
-- The `eval:` resource evaluates the template source every time a page
- is rendered. This is a good choice for strings with low reuse value.
- If the same string is accessed frequently, the `string:` resource
- may be a better choice.
-
-> **Note**
->
-> With a `string:` resource type, each unique string generates a
-> compiled file. Smarty cannot detect a string that has changed, and
-> therefore will generate a new compiled file for each unique string. It
-> is important to choose the correct resource so that you do not fill
-> your disk space with wasted compiled strings.
-
-
- <?php
- $smarty->assign('foo','value');
- $template_string = 'display {$foo} here';
- $smarty->display('string:'.$template_string); // compiles for later reuse
- $smarty->display('eval:'.$template_string); // compiles every time
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file="string:$template_string"} {* compiles for later reuse *}
- {include file="eval:$template_string"} {* compiles every time *}
-
-
-
-
-Both `string:` and `eval:` resources may be encoded with
-[`urlencode()`](https://www.php.net/urlencode) or
-[`base64_encode()`](https://www.php.net/urlencode). This is not necessary
-for the usual use of `string:` and `eval:`, but is required when using
-either of them in conjunction with
-[`Extends Template Resource`](#resources.extends)
-
-
- <?php
- $smarty->assign('foo','value');
- $template_string_urlencode = urlencode('display {$foo} here');
- $template_string_base64 = base64_encode('display {$foo} here');
- $smarty->display('eval:urlencode:'.$template_string_urlencode); // will decode string using urldecode()
- $smarty->display('eval:base64:'.$template_string_base64); // will decode string using base64_decode()
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *}
- {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *}
-
-
-
diff --git a/vendor/smarty/smarty/docs/programmers/resources/template-resources.md b/vendor/smarty/smarty/docs/programmers/resources/template-resources.md
deleted file mode 100644
index 7bb5d752e..000000000
--- a/vendor/smarty/smarty/docs/programmers/resources/template-resources.md
+++ /dev/null
@@ -1,130 +0,0 @@
-Resources {#resasdources}
-=========
-
-The templates may come from a variety of sources. When you
-[`display()`](#api.display) or [`fetch()`](#api.fetch) a template, or
-when you include a template from within another template, you supply a
-resource type, followed by the appropriate path and template name. If a
-resource is not explicitly given, the value of
-[`$default_resource_type`](#variable.default.resource.type) is assumed.
-
-Templates from other sources {#templates.from.elsewhere}
-----------------------------
-
-You can retrieve templates using whatever possible source you can access
-with PHP: databases, sockets, files, etc. You do this by writing
-resource plugin functions and registering them with Smarty.
-
-See [resource plugins](#plugins.resources) section for more information
-on the functions you are supposed to provide.
-
-> **Note**
->
-> Note that you cannot override the built-in `file:` resource, but you
-> can provide a resource that fetches templates from the file system in
-> some other way by registering under another resource name.
-
-
- <?php
-
- /**
- * MySQL Resource
- *
- * Resource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's templates and configs.
- *
- * Table definition:
- * <pre>CREATE TABLE IF NOT EXISTS `templates` (
- * `name` varchar(100) NOT NULL,
- * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- * `source` text,
- * PRIMARY KEY (`name`)
- * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- *
- * Demo data:
- * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
- *
- * @package Resource-examples
- * @author Rodney Rehm
- */
- class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
- // PDO instance
- protected $db;
- // prepared fetch() statement
- protected $fetch;
- // prepared fetchTimestamp() statement
- protected $mtime;
-
- public function __construct() {
- try {
- $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
- } catch (PDOException $e) {
- throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
- }
- $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
- $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
- }
-
- /**
- * Fetch a template and its modification time from database
- *
- * @param string $name template name
- * @param string $source template source
- * @param integer $mtime template modification timestamp (epoch)
- * @return void
- */
- protected function fetch($name, &$source, &$mtime)
- {
- $this->fetch->execute(array('name' => $name));
- $row = $this->fetch->fetch();
- $this->fetch->closeCursor();
- if ($row) {
- $source = $row['source'];
- $mtime = strtotime($row['modified']);
- } else {
- $source = null;
- $mtime = null;
- }
- }
-
- /**
- * Fetch a template's modification time from database
- *
- * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
- * @param string $name template name
- * @return integer timestamp (epoch) the template was modified
- */
- protected function fetchTimestamp($name) {
- $this->mtime->execute(array('name' => $name));
- $mtime = $this->mtime->fetchColumn();
- $this->mtime->closeCursor();
- return strtotime($mtime);
- }
- }
-
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
-
- // using resource from php script
- $smarty->display("mysql:index.tpl");
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='mysql:extras/navigation.tpl'}
-
-
-
-Default template handler function {#default.template.handler.function}
----------------------------------
-
-You can specify a function that is used to retrieve template contents in
-the event the template cannot be retrieved from its resource. One use of
-this is to create templates that do not exist on-the-fly.
-
-See also [`Streams`](#advanced.features.streams)
diff --git a/vendor/smarty/smarty/docs/programmers/smarty-constants.md b/vendor/smarty/smarty/docs/programmers/smarty-constants.md
deleted file mode 100644
index de04e1b59..000000000
--- a/vendor/smarty/smarty/docs/programmers/smarty-constants.md
+++ /dev/null
@@ -1,26 +0,0 @@
-Constants {#smarty.constants}
-=========
-
-SMARTY\_DIR {#constant.smarty.dir}
-===========
-
-This is the **full system path** to the location of the Smarty class
-files. If this is not defined in your script, then Smarty will attempt
-to determine the appropriate value automatically. If defined, the path
-**must end with a trailing slash/**.
-
-
- <?php
- // set path to Smarty directory *nix style
- define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
-
- // path to Smarty windows style
- define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
-
- // include the smarty class, note 'S' is upper case
- require_once(SMARTY_DIR . 'Smarty.class.php');
- ?>
-
-
-
-See also [`$smarty.const`](../designers/language-variables/language-variables-smarty.md).
diff --git a/vendor/smarty/smarty/docs/upgrading.md b/vendor/smarty/smarty/docs/upgrading.md
index 667a1422c..ef9cc4c99 100644
--- a/vendor/smarty/smarty/docs/upgrading.md
+++ b/vendor/smarty/smarty/docs/upgrading.md
@@ -1,12 +1,131 @@
# Upgrading from an older version
+## Upgrading from v4 to v5
+
+Smarty 5 adds support for PHP8.2 and drops support for PHP7.1. Smarty also adds support for new features
+such as the ternary operator (`{$test ? $a : $b}` and `{$var ?: $value_if_falsy}`), the null coalescing operator (`{$var ?? $value_if_null}`)
+and positional parameters for custom tags.
+Smarty 5 also has a brand-new extension architecture that allows you to write neat extension packs.
+
+### Namespaces
+All Smarty code has been moved into the `\Smarty` namespace. This reduces
+the chance of conflicts with other (your) code.
+
+For simple use-cases, you only need to add `use Smarty\Smarty;` to your script and everything will work.
+
+```php
+<?php
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('homepage.tpl');
+```
+For more information, see [getting started](getting-started.md).
+
+If you extend Smarty or use Smarty plug-ins, please review your code to see if they assume specific class or method names.
+E.g.: `Smarty_Internal_Template` is now `\Smarty\Template\`, `SmartyException` is now `\Smarty\Exception`.
+
+### Variable scope bubbling
+Template variable scope bubbling has been simplified and made more consistent. The global scope now equals the Smarty
+scope in order to avoid global state side effects. Please read the [documentation on language variable scope](designers/language-variables/language-variable-scopes.md)
+for more details.
+
+Also, `{config_load}` no longer has a `scope` parameter, which means you can no longer load config
+from inside your template into the global scope (again, to avoid global state side effects). If you
+need to set global config, use the [configLoad API method](api/variables/config-files.md) from your PHP code.
+
+### Using native PHP-functions or userland functions in your templates
+You can no longer use native PHP-functions or userland functions in your templates without registering them.
+If you need a function in your templates, register it first.
+
+The easiest way to do so is as follows:
+```php
+// native PHP functions used as modifiers need to be registered
+$smarty->registerPlugin('modifier', 'substr', 'substr');
+
+// userland PHP functions used as modifiers need to be registered
+$smarty->registerPlugin('modifier', 'my_special_func', 'my_special_func');
+```
+
+But you may want to consider writing a proper [extension](api/extending/extensions.md).
+
+### Removed undocumented tags
+
+Smarty 4 still supported some tags that have been carried over from previous version, but have never been documented.
+
+- `{block_parent}` should be replaced with `{$smarty.block.parent}`
+- `{parent}` should be replaced with `{$smarty.block.parent}`
+- `{block_child}` should be replaced with `{$smarty.block.child}`
+- `{child}` should be replaced with `{$smarty.block.child}`
+
+- `{make_nocache}` is no longer supported
+- `{insert}` is no longer supported
+
+### Removed Smarty API properties
+
+In Smarty 4, you could make many configuration changes by directly accessing public properties on the Smarty object in PHP.
+In many cases, these properties have been made private, and you should now use the appropriate setter method:
+
+- `$smarty->left_delimiter` should be replaced with `$smarty->getLeftDelimiter()`/`$smarty->setLeftDelimiter()`
+- `$smarty->right_delimiter` should be replaced with `$smarty->getRightDelimiter()`/`$smarty->setRightDelimiter()`
+- `$smarty->autoload_filters` should be replaced with `$smarty->registerFilter()`
+- `$smarty->template_dir` should be replaced with `$smarty->setTemplateDir()`
+- `$smarty->cache_dir` should be replaced with `$smarty->setCacheDir()`
+- `$smarty->compile_dir` should be replaced with `$smarty->setCompileDir()`
+
+Other public properties have been removed altogether, and you should no longer access them:
+
+- `$smarty->_current_file`
+- `$smarty->allow_ambiguous_resources` (ambiguous resources handlers should still work)
+- `$smarty->registered_filters`
+- `$smarty->direct_access_security`
+- `$smarty->trusted_dir`
+- `$smarty->allow_php_templates`
+- `$smarty->php_functions`
+- `$smarty->php_modifiers`
+
+### Backwards incompatible changes to custom plugins
+
+We have dropped support for `$smarty->plugins_dir` and `$smarty->use_include_path`.
+Use `$smarty->addPluginsDir()` or consider writing a proper [extension](api/extending/extensions.md).
+
+The 'insert' plugin type is no longer supported.
+
+The `$cache_attrs` parameter for registered plugins is no longer supported.
+
+### Removed Smarty API methods
+
+Search your code for the following changes:
+
+- `$smarty->getTags()` is no longer supported
+- `$smarty->appendByRef()` should be replaced with `$smarty->append()`
+- `$smarty->assignByRef()` should be replaced with `$smarty->assign()`
+- `$smarty->loadPlugin()` should be replaced with `$smarty->registerPlugin()`
+
+### Removed PHP constants
+
+The following constants have been removed to prevent global side effects.
+
+- `SMARTY_DIR`
+- `SMARTY_SYSPLUGINS_DIR`
+- `SMARTY_PLUGINS_DIR`
+- `SMARTY_MBSTRING`
+- `SMARTY_HELPER_FUNCTIONS_LOADED`
+
+### Other changes
+
+- Smarty now always runs in multibyte mode. Make sure you use the [PHP multibyte extension](https://www.php.net/manual/en/book.mbstring.php) in production for optimal performance.
+- Generated `<script>` tags lo longer have deprecated `type="text/javascript"` or `language="Javascript"` attributes
+- Smarty will throw a compiler exception instead of silently ignoring a modifier on a function call, like this: `{include|dot:"x-template-id" file="included.dot.tpl"}`
+- The ::getFile() method of a CompilerException will now return the full path of the template being compiled, if possible. This used to be 'file:relative_dir/filename.tpl'.
+
## Upgrading from v3 to v4
Smarty 4 is mostly identical to Smarty 3. Most notably, it adds support for PHP8 and drops support for PHP7.0 and below.
Additionally, some deprecated features that have long been discouraged have been dropped from the language.
### Muting PHP8 warnings
-If you simultaneously upgrade Smarty to v4 van PHP to v8, you may notice your error logs filling up with warnings about undefined or null template vars
+If you simultaneously upgrade Smarty to v4 van PHP to v8, you may notice your error logs filling up with warnings about undefined or null template vars
due to a change in how PHP handles these. This may be helpful to spot errors, but if you find this annoying, you can use
`$smarty->muteUndefinedOrNullWarnings()` to make Smarty convert these warnings into notices.
@@ -21,16 +140,16 @@ We have dropped deprecated API calls that where only accessible through the Smar
### No more embedded PHP
We have completely dropped support for `{php}` and `{include_php}` tags and embedded PHP in templates.
Check your templates for this, and rewrite any embedded PHP blocks, by moving logic to your PHP files or by
-creating a [plugin function](./programmers/plugins/plugins-functions.md).
+creating a [custom tag](./api/extending/tags.md).
### Other changes
-Search your code for the following changes:
+Search your code for the following changes:
- `SMARTY_RESOURCE_CHAR_SET` and `SMARTY_RESOURCE_DATE_FORMAT` constants have been removed
- `Smarty::muteExpectedErrors` and `Smarty::unmuteExpectedErrors` API methods have been removed
-- `Smarty::getVariable` method has been removed. Use [Smarty::getTemplateVars](programmers/api-functions/api-get-template-vars.md) instead.
-- [Smarty::registerResource](programmers/api-functions/api-register-resource.md) no longer accepts an array of callback functions
+- `Smarty::getVariable` method has been removed. Use [Smarty::getTemplateVars](designers/language-builtin-functions/language-function-assign.md) instead.
+- [Smarty::registerResource](api/resources.md) no longer accepts an array of callback functions
diff --git a/vendor/smarty/smarty/libs/Autoloader.php b/vendor/smarty/smarty/libs/Autoloader.php
deleted file mode 100644
index da7e32abf..000000000
--- a/vendor/smarty/smarty/libs/Autoloader.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * Smarty Autoloader
- *
- * @package Smarty
- */
-
-
-if (!defined('SMARTY_HELPER_FUNCTIONS_LOADED')) {
- include __DIR__ . '/functions.php';
-}
-
-/**
- * Smarty Autoloader
- *
- * @package Smarty
- * @author Uwe Tews
- * Usage:
- * require_once '...path/Autoloader.php';
- * Smarty_Autoloader::register();
- * or
- * include '...path/bootstrap.php';
- *
- * $smarty = new Smarty();
- */
-class Smarty_Autoloader
-{
- /**
- * Filepath to Smarty root
- *
- * @var string
- */
- public static $SMARTY_DIR = null;
-
- /**
- * Filepath to Smarty internal plugins
- *
- * @var string
- */
- public static $SMARTY_SYSPLUGINS_DIR = null;
-
- /**
- * Array with Smarty core classes and their filename
- *
- * @var array
- */
- public static $rootClasses = array('smarty' => 'Smarty.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 : __DIR__ . DIRECTORY_SEPARATOR;
- self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR :
- self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR;
- spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
- }
-
- /**
- * Handles auto loading of classes.
- *
- * @param string $class A class name.
- */
- public static function autoload($class)
- {
- if ($class[ 0 ] !== 'S' || strpos($class, 'Smarty') !== 0) {
- return;
- }
- $_class = smarty_strtolower_ascii($class);
- if (isset(self::$rootClasses[ $_class ])) {
- $file = self::$SMARTY_DIR . self::$rootClasses[ $_class ];
- if (is_file($file)) {
- include $file;
- }
- } else {
- $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
- if (is_file($file)) {
- include $file;
- }
- }
- return;
- }
-}
diff --git a/vendor/smarty/smarty/libs/Smarty.class.php b/vendor/smarty/smarty/libs/Smarty.class.php
index 97706e2aa..459fe2cfb 100644
--- a/vendor/smarty/smarty/libs/Smarty.class.php
+++ b/vendor/smarty/smarty/libs/Smarty.class.php
@@ -1,1405 +1,42 @@
<?php
-/**
- * Project: Smarty: the PHP compiling template engine
- * File: Smarty.class.php
- *
- * 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 3.0 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 https://www.smarty.net/
- * @copyright 2018 New Digital Group, Inc.
- * @copyright 2018 Uwe Tews
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews <uwe dot tews at gmail dot com>
- * @author Rodney Rehm
- * @package Smarty
- */
-/**
- * set SMARTY_DIR to absolute path to Smarty library files.
- * Sets SMARTY_DIR only if user application has not already defined it.
- */
-if (!defined('SMARTY_DIR')) {
- /**
- *
- */
- define('SMARTY_DIR', __DIR__ . DIRECTORY_SEPARATOR);
-}
-/**
- * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins.
- * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it.
- */
-if (!defined('SMARTY_SYSPLUGINS_DIR')) {
- /**
- *
- */
- define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR);
-}
-if (!defined('SMARTY_PLUGINS_DIR')) {
- /**
- *
- */
- define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DIRECTORY_SEPARATOR);
-}
-if (!defined('SMARTY_MBSTRING')) {
- /**
- *
- */
- define('SMARTY_MBSTRING', function_exists('mb_get_info'));
-}
-/**
- * Load helper functions
- */
-if (!defined('SMARTY_HELPER_FUNCTIONS_LOADED')) {
- include __DIR__ . '/functions.php';
-}
-
-/**
- * Load Smarty_Autoloader
- */
-if (!class_exists('Smarty_Autoloader')) {
- include __DIR__ . '/bootstrap.php';
-}
-
-/**
- * Load always needed external class files
- */
-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';
-require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php';
-
-/**
- * This is the main Smarty class
- *
- * @package Smarty
- *
- * The following methods will be dynamically loaded by the extension handler when they are called.
- * They are located in a corresponding Smarty_Internal_Method_xxxx class
- *
- * @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(string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, $max_errors = null)
- * @method int compileAllConfig(string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, $max_errors = null)
- * @method int clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
- */
-class Smarty extends Smarty_Internal_TemplateBase
-{
- /**
- * smarty version
- */
- const SMARTY_VERSION = '4.5.4';
- /**
- * define variable scopes
- */
- const SCOPE_LOCAL = 1;
- const SCOPE_PARENT = 2;
- const SCOPE_TPL_ROOT = 4;
- const SCOPE_ROOT = 8;
- const SCOPE_SMARTY = 16;
- const SCOPE_GLOBAL = 32;
- /**
- * 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;
-
- /**
- * 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';
-
- /**
- * assigned global tpl vars
- */
- public static $global_tpl_vars = 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_MBSTRING ? 'UTF-8' : 'ISO-8859-1';
-
- /**
- * The date format to be used internally
- * (accepts date() and strftime())
- */
- public static $_DATE_FORMAT = '%b %e, %Y';
-
- /**
- * Flag denoting if PCRE should run in UTF-8 mode
- */
- public static $_UTF8_MODIFIER = 'u';
-
- /**
- * Flag denoting if operating system is windows
- */
- public static $_IS_WINDOWS = false;
-
- /**
- * 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 file path in include_path
- *
- * @var boolean
- */
- public $use_include_path = false;
-
- /**
- * flag if template_dir is normalized
- *
- * @var bool
- */
- public $_templateDirNormalized = false;
-
- /**
- * joined template directory string used in cache keys
- *
- * @var string
- */
- public $_joined_template_dir = null;
-
- /**
- * flag if config_dir is normalized
- *
- * @var bool
- */
- public $_configDirNormalized = false;
-
- /**
- * joined config directory string used in cache keys
- *
- * @var string
- */
- 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;
-
- /**
- * flag if template_dir is normalized
- *
- * @var bool
- */
- public $_compileDirNormalized = false;
-
- /**
- * flag if plugins_dir is normalized
- *
- * @var bool
- */
- public $_pluginsDirNormalized = false;
-
- /**
- * flag if template_dir is normalized
- *
- * @var bool
- */
- public $_cacheDirNormalized = false;
-
- /**
- * force template compiling?
- *
- * @var boolean
- */
- public $force_compile = false;
-
- /**
- * 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;
-
- /**
- * merge compiled includes
- *
- * @var boolean
- */
- public $merge_compiled_includes = false;
-
- /*
- * flag for behaviour when extends: resource and {extends} tag are used simultaneous
- * if false disable execution of {extends} in templates called by extends resource.
- * (behaviour as versions < 3.1.28)
- *
- * @var boolean
- */
- public $extends_recursion = true;
-
- /**
- * force cache file creation
- *
- * @var boolean
- */
- public $force_cache = false;
-
- /**
- * template left-delimiter
- *
- * @var string
- */
- public $left_delimiter = "{";
-
- /**
- * template right-delimiter
- *
- * @var string
- */
- public $right_delimiter = "}";
-
- /**
- * array of strings which shall be treated as literal by compiler
- *
- * @var array string
- */
- public $literals = array();
-
- /**
- * 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 if the php template file resource is allowed
- *
- * @var bool
- */
- public $allow_php_templates = false;
-
- /**
- * 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 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;
-
- /**
- * 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;
-
- /**
- * locking concurrent compiles
- *
- * @var boolean
- */
- public $compile_locking = true;
-
- /**
- * 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;
-
- /**
- * 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';
-
- /**
- * config type
- *
- * @var string
- */
- public $default_config_type = 'file';
-
- /**
- * check If-Modified-Since headers
- *
- * @var boolean
- */
- public $cache_modified_check = false;
-
- /**
- * registered plugins
- *
- * @var array
- */
- public $registered_plugins = array();
-
- /**
- * 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();
-
- /**
- * registered cache resources
- *
- * @var array
- */
- public $registered_cache_resources = 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;
-
- /**
- * start time for execution time calculation
- *
- * @var int
- */
- public $start_time = 0;
-
- /**
- * required by the compiler for BC
- *
- * @var string
- */
- public $_current_file = null;
-
- /**
- * internal flag to enable parser debugging
- *
- * @var bool
- */
- public $_parserdebug = false;
-
- /**
- * This object type (Smarty = 1, template = 2, data = 4)
- *
- * @var int
- */
- public $_objType = 1;
-
- /**
- * Debug object
- *
- * @var Smarty_Internal_Debug
- */
- public $_debug = null;
-
- /**
- * template directory
- *
- * @var array
- */
- protected $template_dir = array('./templates/');
-
- /**
- * flags for normalized template directory entries
- *
- * @var array
- */
- protected $_processedTemplateDir = array();
-
- /**
- * config directory
- *
- * @var array
- */
- protected $config_dir = array('./configs/');
-
- /**
- * flags for normalized template directory entries
- *
- * @var array
- */
- protected $_processedConfigDir = array();
-
- /**
- * compile directory
- *
- * @var string
- */
- protected $compile_dir = './templates_c/';
-
- /**
- * plugins directory
- *
- * @var array
- */
- protected $plugins_dir = array();
-
- /**
- * cache directory
- *
- * @var string
- */
- protected $cache_dir = './cache/';
-
- /**
- * removed properties
- *
- * @var string[]
- */
- protected $obsoleteProperties = array(
- 'resource_caching', 'template_resource_caching', 'direct_access_security',
- '_dir_perms', '_file_perms', 'plugin_search_order',
- 'inheritance_merge_compiled_includes', 'resource_cache_mode',
- );
-
- /**
- * List of private properties which will call getter/setter on a direct access
- *
- * @var string[]
- */
- protected $accessMap = array(
- 'template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir',
- 'plugins_dir' => 'PluginsDir', 'compile_dir' => 'CompileDir',
- 'cache_dir' => 'CacheDir',
- );
-
- /**
- * PHP7 Compatibility mode
- * @var bool
- */
- private $isMutingUndefinedOrNullWarnings = false;
-
- /**
- * Initialize new Smarty object
- */
- public function __construct()
- {
- $this->_clearTemplateCache();
- parent::__construct();
- if (is_callable('mb_internal_encoding')) {
- mb_internal_encoding(Smarty::$_CHARSET);
- }
- $this->start_time = microtime(true);
- 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
- *
- * @return bool status
- * @throws \SmartyException
- */
- public function templateExists($resource_name)
- {
- // create source object
- $source = Smarty_Template_Source::load(null, $this, $resource_name);
- return $source->exists;
- }
-
- /**
- * 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
- */
- public function enableSecurity($security_class = null)
- {
- Smarty_Security::enableSecurity($this, $security_class);
- return $this;
- }
-
- /**
- * Disable security
- *
- * @return Smarty current Smarty instance for chaining
- */
- public function disableSecurity()
- {
- $this->security_policy = null;
- 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
- * @param bool $isConfig true for config_dir
- *
- * @return Smarty current Smarty instance for chaining
- */
- public function addTemplateDir($template_dir, $key = null, $isConfig = false)
- {
- if ($isConfig) {
- $processed = &$this->_processedConfigDir;
- $dir = &$this->config_dir;
- $this->_configDirNormalized = false;
- } else {
- $processed = &$this->_processedTemplateDir;
- $dir = &$this->template_dir;
- $this->_templateDirNormalized = false;
- }
- if (is_array($template_dir)) {
- foreach ($template_dir as $k => $v) {
- if (is_int($k)) {
- // indexes are not merged but appended
- $dir[] = $v;
- } else {
- // string indexes are overridden
- $dir[ $k ] = $v;
- unset($processed[ $key ]);
- }
- }
- } else {
- if ($key !== null) {
- // override directory at specified index
- $dir[ $key ] = $template_dir;
- unset($processed[ $key ]);
- } else {
- // append new directory
- $dir[] = $template_dir;
- }
- }
- return $this;
- }
-
- /**
- * Get template directories
- *
- * @param mixed $index index of directory to get, null to get all
- * @param bool $isConfig true for config_dir
- *
- * @return array|string list of template directories, or directory of $index
- */
- public function getTemplateDir($index = null, $isConfig = false)
- {
- if ($isConfig) {
- $dir = &$this->config_dir;
- } else {
- $dir = &$this->template_dir;
- }
- if ($isConfig ? !$this->_configDirNormalized : !$this->_templateDirNormalized) {
- $this->_normalizeTemplateConfig($isConfig);
- }
- if ($index !== null) {
- return isset($dir[ $index ]) ? $dir[ $index ] : null;
- }
- return $dir;
- }
-
- /**
- * Set template directory
- *
- * @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, $isConfig = false)
- {
- if ($isConfig) {
- $this->config_dir = array();
- $this->_processedConfigDir = array();
- } else {
- $this->template_dir = array();
- $this->_processedTemplateDir = array();
- }
- $this->addTemplateDir($template_dir, null, $isConfig);
- return $this;
- }
-
- /**
- * Add config directory(s)
- *
- * @param string|array $config_dir directory(s) of config sources
- * @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)
- {
- return $this->addTemplateDir($config_dir, $key, true);
- }
-
- /**
- * Get config directory
- *
- * @param mixed $index index of directory to get, null to get all
- *
- * @return array configuration directory
- */
- public function getConfigDir($index = null)
- {
- return $this->getTemplateDir($index, true);
- }
-
- /**
- * Set config directory
- *
- * @param $config_dir
- *
- * @return Smarty current Smarty instance for chaining
- */
- public function setConfigDir($config_dir)
- {
- return $this->setTemplateDir($config_dir, true);
- }
-
- /**
- * Adds directory of plugin files
- *
- * @param null|array|string $plugins_dir
- *
- * @return Smarty current Smarty instance for chaining
- */
- public function addPluginsDir($plugins_dir)
- {
- if (empty($this->plugins_dir)) {
- $this->plugins_dir[] = SMARTY_PLUGINS_DIR;
- }
- $this->plugins_dir = array_merge($this->plugins_dir, (array)$plugins_dir);
- $this->_pluginsDirNormalized = false;
- return $this;
- }
-
- /**
- * Get plugin directories
- *
- * @return array list of plugin directories
- */
- public function getPluginsDir()
- {
- if (empty($this->plugins_dir)) {
- $this->plugins_dir[] = SMARTY_PLUGINS_DIR;
- $this->_pluginsDirNormalized = false;
- }
- if (!$this->_pluginsDirNormalized) {
- if (!is_array($this->plugins_dir)) {
- $this->plugins_dir = (array)$this->plugins_dir;
- }
- foreach ($this->plugins_dir as $k => $v) {
- $this->plugins_dir[ $k ] = $this->_realpath(rtrim($v ?? '', '/\\') . DIRECTORY_SEPARATOR, true);
- }
- $this->_cache[ 'plugin_files' ] = array();
- $this->_pluginsDirNormalized = true;
- }
- return $this->plugins_dir;
- }
-
- /**
- * Set plugins directory
- *
- * @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)$plugins_dir;
- $this->_pluginsDirNormalized = false;
- return $this;
- }
-
- /**
- * Get compiled directory
- *
- * @return string path to compiled templates
- */
- public function getCompileDir()
- {
- if (!$this->_compileDirNormalized) {
- $this->_normalizeDir('compile_dir', $this->compile_dir);
- $this->_compileDirNormalized = true;
- }
- return $this->compile_dir;
- }
-
- /**
- *
- * @param string $compile_dir directory to store compiled templates in
- *
- * @return Smarty current Smarty instance for chaining
- */
- public function setCompileDir($compile_dir)
- {
- $this->_normalizeDir('compile_dir', $compile_dir);
- $this->_compileDirNormalized = true;
- return $this;
- }
-
- /**
- * Get cache directory
- *
- * @return string path of cache directory
- */
- public function getCacheDir()
- {
- if (!$this->_cacheDirNormalized) {
- $this->_normalizeDir('cache_dir', $this->cache_dir);
- $this->_cacheDirNormalized = true;
- }
- return $this->cache_dir;
- }
-
- /**
- * Set cache directory
- *
- * @param string $cache_dir directory to store cached templates in
- *
- * @return Smarty current Smarty instance for chaining
- */
- public function setCacheDir($cache_dir)
- {
- $this->_normalizeDir('cache_dir', $cache_dir);
- $this->_cacheDirNormalized = true;
- return $this;
- }
-
- /**
- * 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 \Smarty_Internal_Template template object
- * @throws \SmartyException
- */
- public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
- {
- 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 {
- $data = null;
- }
- if (!$this->_templateDirNormalized) {
- $this->_normalizeTemplateConfig(false);
- }
- $_templateId = $this->_getTemplateId($template, $cache_id, $compile_id);
- $tpl = null;
- if ($this->caching && isset(Smarty_Internal_Template::$isCacheTplObj[ $_templateId ])) {
- $tpl = $do_clone ? clone Smarty_Internal_Template::$isCacheTplObj[ $_templateId ] :
- Smarty_Internal_Template::$isCacheTplObj[ $_templateId ];
- $tpl->inheritance = null;
- $tpl->tpl_vars = $tpl->config_vars = array();
- } elseif (!$do_clone && isset(Smarty_Internal_Template::$tplObjCache[ $_templateId ])) {
- $tpl = clone Smarty_Internal_Template::$tplObjCache[ $_templateId ];
- $tpl->inheritance = null;
- $tpl->tpl_vars = $tpl->config_vars = array();
- } else {
- /* @var Smarty_Internal_Template $tpl */
- $tpl = new $this->template_class($template, $this, null, $cache_id, $compile_id, null, null);
- $tpl->templateId = $_templateId;
- }
- if ($do_clone) {
- $tpl->smarty = clone $tpl->smarty;
- }
- $tpl->parent = $parent ? $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;
- }
-
- /**
- * 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
- * @throws \SmartyException
- */
- public function loadPlugin($plugin_name, $check = true)
- {
- return $this->ext->loadPlugin->loadPlugin($this, $plugin_name, $check);
- }
-
- /**
- * Get unique template id
- *
- * @param string $template_name
- * @param null|mixed $cache_id
- * @param null|mixed $compile_id
- * @param null $caching
- * @param \Smarty_Internal_Template $template
- *
- * @return string
- * @throws \SmartyException
- */
- public function _getTemplateId(
- $template_name,
- $cache_id = null,
- $compile_id = null,
- $caching = null,
- Smarty_Internal_Template $template = null
- ) {
- $template_name = (strpos($template_name, ':') === false) ? "{$this->default_resource_type}:{$template_name}" :
- $template_name;
- $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 ((isset($template) && strpos($template_name, ':.') !== false) || $this->allow_ambiguous_resources) {
- $_templateId =
- Smarty_Resource::getUniqueTemplateName((isset($template) ? $template : $this), $template_name) .
- "#{$cache_id}#{$compile_id}#{$caching}";
- } else {
- $_templateId = $this->_joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}#{$caching}";
- }
- if (isset($_templateId[ 150 ])) {
- $_templateId = sha1($_templateId);
- }
- return $_templateId;
- }
-
- /**
- * Normalize path
- * - remove /./ and /../
- * - make it absolute if required
- *
- * @param string $path file path
- * @param bool $realpath if true - convert to absolute
- * false - convert to relative
- * null - keep as it is but
- * remove /./ /../
- *
- * @return string
- */
- public function _realpath($path, $realpath = null)
- {
- $nds = array('/' => '\\', '\\' => '/');
- preg_match(
- '%^(?<root>(?:[[:alpha:]]:[\\\\/]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?<path>(.*))$%u',
- $path,
- $parts
- );
- $path = $parts[ 'path' ];
- if ($parts[ 'root' ] === '\\') {
- $parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ];
- } else {
- if ($realpath !== null && !$parts[ 'root' ]) {
- $path = getcwd() . DIRECTORY_SEPARATOR . $path;
- }
- }
- // normalize DIRECTORY_SEPARATOR
- $path = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $path);
- $parts[ 'root' ] = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $parts[ 'root' ]);
- do {
- $path = preg_replace(
- array('#[\\\\/]{2}#', '#[\\\\/][.][\\\\/]#', '#[\\\\/]([^\\\\/.]+)[\\\\/][.][.][\\\\/]#'),
- DIRECTORY_SEPARATOR,
- $path,
- -1,
- $count
- );
- } while ($count > 0);
- return $realpath !== false ? $parts[ 'root' ] . $path : str_ireplace(getcwd(), '.', $parts[ 'root' ] . $path);
- }
-
- /**
- * Empty template objects cache
- */
- public function _clearTemplateCache()
- {
- Smarty_Internal_Template::$isCacheTplObj = array();
- Smarty_Internal_Template::$tplObjCache = array();
- }
-
- /**
- * @param boolean $use_sub_dirs
- */
- public function setUseSubDirs($use_sub_dirs)
- {
- $this->use_sub_dirs = $use_sub_dirs;
- }
-
- /**
- * @param int $error_reporting
- */
- public function setErrorReporting($error_reporting)
- {
- $this->error_reporting = $error_reporting;
- }
-
- /**
- * @param boolean $escape_html
- */
- public function setEscapeHtml($escape_html)
- {
- $this->escape_html = $escape_html;
- }
-
- /**
- * Return auto_literal flag
- *
- * @return boolean
- */
- public function getAutoLiteral()
- {
- return $this->auto_literal;
- }
-
- /**
- * Set auto_literal flag
- *
- * @param boolean $auto_literal
- */
- public function setAutoLiteral($auto_literal = true)
- {
- $this->auto_literal = $auto_literal;
- }
-
- /**
- * @param boolean $force_compile
- */
- public function setForceCompile($force_compile)
- {
- $this->force_compile = $force_compile;
- }
-
- /**
- * @param boolean $merge_compiled_includes
- */
- public function setMergeCompiledIncludes($merge_compiled_includes)
- {
- $this->merge_compiled_includes = $merge_compiled_includes;
- }
-
- /**
- * Get left delimiter
- *
- * @return string
- */
- public function getLeftDelimiter()
- {
- return $this->left_delimiter;
- }
-
- /**
- * Set left delimiter
- *
- * @param string $left_delimiter
- */
- public function setLeftDelimiter($left_delimiter)
- {
- $this->left_delimiter = $left_delimiter;
- }
-
- /**
- * Get right delimiter
- *
- * @return string $right_delimiter
- */
- public function getRightDelimiter()
- {
- return $this->right_delimiter;
- }
-
- /**
- * Set right delimiter
- *
- * @param string
- */
- public function setRightDelimiter($right_delimiter)
- {
- $this->right_delimiter = $right_delimiter;
- }
-
- /**
- * @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 setCachingType($caching_type)
- {
- $this->caching_type = $caching_type;
- }
-
- /**
- * Test install
- *
- * @param null $errors
- */
- public function testInstall(&$errors = null)
- {
- Smarty_Internal_TestInstall::testInstall($this, $errors);
- }
-
- /**
- * Get Smarty object
- *
- * @return Smarty
- */
- public function _getSmartyObj()
- {
- return $this;
- }
-
- /**
- * <<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
- */
- public function __get($name)
- {
- if (isset($this->accessMap[ $name ])) {
- $method = 'get' . $this->accessMap[ $name ];
- return $this->{$method}();
- } elseif (isset($this->_cache[ $name ])) {
- return $this->_cache[ $name ];
- } elseif (in_array($name, $this->obsoleteProperties)) {
- return null;
- } else {
- trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
- }
- return null;
- }
-
- /**
- * <<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)
- {
- if (isset($this->accessMap[ $name ])) {
- $method = 'set' . $this->accessMap[ $name ];
- $this->{$method}($value);
- } elseif (in_array($name, $this->obsoleteProperties)) {
- return;
- } elseif (is_object($value) && method_exists($value, $name)) {
- $this->$name = $value;
- } else {
- trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
- }
- }
-
- /**
- * Normalize and set directory string
- *
- * @param string $dirName cache_dir or compile_dir
- * @param string $dir filepath of folder
- */
- private function _normalizeDir($dirName, $dir)
- {
- $this->{$dirName} = $this->_realpath(rtrim($dir ?? '', "/\\") . DIRECTORY_SEPARATOR, true);
- }
-
- /**
- * Normalize template_dir or config_dir
- *
- * @param bool $isConfig true for config_dir
- */
- private function _normalizeTemplateConfig($isConfig)
- {
- if ($isConfig) {
- $processed = &$this->_processedConfigDir;
- $dir = &$this->config_dir;
- } else {
- $processed = &$this->_processedTemplateDir;
- $dir = &$this->template_dir;
- }
- if (!is_array($dir)) {
- $dir = (array)$dir;
- }
- foreach ($dir as $k => $v) {
- if (!isset($processed[ $k ])) {
- $dir[ $k ] = $v = $this->_realpath(rtrim($v ?? '', "/\\") . DIRECTORY_SEPARATOR, true);
- $processed[ $k ] = true;
- }
- }
- $isConfig ? $this->_configDirNormalized = true : $this->_templateDirNormalized = true;
- $isConfig ? $this->_joined_config_dir = join('#', $this->config_dir) :
- $this->_joined_template_dir = join('#', $this->template_dir);
- }
-
- /**
- * Mutes errors for "undefined index", "undefined array key" and "trying to read property of null".
- *
- * @void
- */
- public function muteUndefinedOrNullWarnings(): void {
- $this->isMutingUndefinedOrNullWarnings = true;
- }
-
- /**
- * Indicates if Smarty will mute errors for "undefined index", "undefined array key" and "trying to read property of null".
- * @bool
- */
- public function isMutingUndefinedOrNullWarnings(): bool {
- return $this->isMutingUndefinedOrNullWarnings;
- }
-
-}
+/////////////////////////////////////////////////////////////////////
+// This is a stub PSR-4 loading script that gets all the pieces of //
+// Smarty 5.x loaded without requiring the use of composer. It's //
+// not really a 'class' file, but the name is used so we're //
+// backwards compatible with previous versions of Smarty. //
+// //
+// Example: //
+// require_once("/path/to/smarty/libs/Smarty.class.php"); //
+// //
+// $smarty = new Smarty\Smarty; //
+// $smarty->testInstall(); //
+/////////////////////////////////////////////////////////////////////
+
+define('__SMARTY_DIR', __DIR__ . '/../src/');
+
+// Global function declarations
+require_once(__SMARTY_DIR . "/functions.php");
+
+spl_autoload_register(function ($class) {
+ // Class prefix
+ $prefix = 'Smarty\\';
+
+ // Does the class use the namespace prefix?
+ $len = strlen($prefix);
+ if (strncmp($prefix, $class, $len) !== 0) {
+ // If not, move to the next registered autoloader
+ return;
+ }
+
+ // Hack off the prefix part
+ $relative_class = substr($class, $len);
+
+ // Build a path to the include file
+ $file = __SMARTY_DIR . str_replace('\\', '/', $relative_class) . '.php';
+
+ // If the file exists, require it
+ if (file_exists($file)) {
+ require_once($file);
+ }
+});
diff --git a/vendor/smarty/smarty/libs/bootstrap.php b/vendor/smarty/smarty/libs/bootstrap.php
deleted file mode 100644
index a226ac04e..000000000
--- a/vendor/smarty/smarty/libs/bootstrap.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * This file is part of the Smarty package.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-/**
- * Load and register Smarty Autoloader
- */
-if (!class_exists('Smarty_Autoloader')) {
- include __DIR__ . '/Autoloader.php';
-}
-Smarty_Autoloader::register(true);
diff --git a/vendor/smarty/smarty/libs/functions.php b/vendor/smarty/smarty/libs/functions.php
deleted file mode 100644
index bac00e521..000000000
--- a/vendor/smarty/smarty/libs/functions.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * This file is part of the Smarty package.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-/**
- * Registers some helper/polyfill functions.
- */
-
-const SMARTY_HELPER_FUNCTIONS_LOADED = true;
-
-/**
- * Converts the first characters in $string to uppercase (A-Z) if it is an ASCII lowercase character (a-z).
- *
- * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
- *
- * @param $string
- *
- * @return string
- */
-function smarty_ucfirst_ascii($string): string {
- return smarty_strtoupper_ascii(substr($string, 0, 1)) . substr($string, 1);
-}
-
-/**
- * Converts all uppercase ASCII characters (A-Z) in $string to lowercase (a-z).
- *
- * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
- *
- * @param $string
- *
- * @return string
- */
-function smarty_strtolower_ascii($string): string {
- return strtr($string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
-}
-
-/**
- * Converts all lowercase ASCII characters (a-z) in $string to uppercase (A-Z).
- *
- * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
- *
- * @param $string
- *
- * @return string
- */
-function smarty_strtoupper_ascii($string): string {
- return strtr($string, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
-} \ No newline at end of file
diff --git a/vendor/smarty/smarty/libs/plugins/block.textformat.php b/vendor/smarty/smarty/libs/plugins/block.textformat.php
deleted file mode 100644
index fed090e4d..000000000
--- a/vendor/smarty/smarty/libs/plugins/block.textformat.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-/**
- * Smarty plugin to format text blocks
- *
- * @package Smarty
- * @subpackage PluginsBlock
- */
-/**
- * Smarty {textformat}{/textformat} block plugin
- * Type: block function
- * Name: textformat
- * Purpose: format text a certain way with preset styles
- * or custom wrap/indent settings
- * Params:
- *
- * - style - string (email)
- * - indent - integer (0)
- * - wrap - integer (80)
- * - wrap_char - string ("\n")
- * - indent_char - string (" ")
- * - wrap_boundary - boolean (true)
- *
- * @link https://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>
- * @throws \SmartyException
- */
-function smarty_block_textformat($params, $content, Smarty_Internal_Template $template, &$repeat)
-{
- if (is_null($content)) {
- return;
- }
- if (Smarty::$_MBSTRING) {
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_modifier_mb_wordwrap',
- 'file' => SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php'
- )
- )
- );
- }
- $style = null;
- $indent = 0;
- $indent_first = 0;
- $indent_char = ' ';
- $wrap = 80;
- $wrap_char = "\n";
- $wrap_cut = false;
- $assign = null;
- foreach ($params as $_key => $_val) {
- switch ($_key) {
- case 'style':
- case 'indent_char':
- case 'wrap_char':
- case 'assign':
- $$_key = (string)$_val;
- break;
- case 'indent':
- case 'indent_first':
- case 'wrap':
- $$_key = (int)$_val;
- break;
- case 'wrap_cut':
- $$_key = (bool)$_val;
- break;
- default:
- trigger_error("textformat: unknown attribute '{$_key}'");
- }
- }
- if ($style === 'email') {
- $wrap = 72;
- }
- // split into paragraphs
- $_paragraphs = preg_split('![\r\n]{2}!', $content);
- foreach ($_paragraphs as &$_paragraph) {
- if (!$_paragraph) {
- continue;
- }
- // convert mult. spaces & special chars to single space
- $_paragraph =
- preg_replace(
- array(
- '!\s+!' . Smarty::$_UTF8_MODIFIER,
- '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER
- ),
- array(
- ' ',
- ''
- ),
- $_paragraph
- );
- // indent first line
- if ($indent_first > 0) {
- $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph;
- }
- // wordwrap sentences
- if (Smarty::$_MBSTRING) {
- $_paragraph = smarty_modifier_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
- } else {
- $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
- }
- // indent lines
- if ($indent > 0) {
- $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph);
- }
- }
- $_output = implode($wrap_char . $wrap_char, $_paragraphs);
- if ($assign) {
- $template->assign($assign, $_output);
- } else {
- return $_output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.counter.php b/vendor/smarty/smarty/libs/plugins/function.counter.php
deleted file mode 100644
index 54795459c..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.counter.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {counter} function plugin
- * Type: function
- * Name: counter
- * Purpose: print out a counter value
- *
- * @author Monte Ohrt <monte at ohrt dot com>
- * @link https://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)
-{
- static $counters = array();
- $name = (isset($params[ 'name' ])) ? $params[ 'name' ] : 'default';
- if (!isset($counters[ $name ])) {
- $counters[ $name ] = array('start' => 1, 'skip' => 1, 'direction' => 'up', 'count' => 1);
- }
- $counter =& $counters[ $name ];
- if (isset($params[ 'start' ])) {
- $counter[ 'start' ] = $counter[ 'count' ] = (int)$params[ 'start' ];
- }
- if (!empty($params[ 'assign' ])) {
- $counter[ 'assign' ] = $params[ 'assign' ];
- }
- if (isset($counter[ 'assign' ])) {
- $template->assign($counter[ 'assign' ], $counter[ 'count' ]);
- }
- if (isset($params[ 'print' ])) {
- $print = (bool)$params[ 'print' ];
- } else {
- $print = empty($counter[ 'assign' ]);
- }
- if ($print) {
- $retval = $counter[ 'count' ];
- } else {
- $retval = null;
- }
- if (isset($params[ 'skip' ])) {
- $counter[ 'skip' ] = $params[ 'skip' ];
- }
- if (isset($params[ 'direction' ])) {
- $counter[ 'direction' ] = $params[ 'direction' ];
- }
- if ($counter[ 'direction' ] === 'down') {
- $counter[ 'count' ] -= $counter[ 'skip' ];
- } else {
- $counter[ 'count' ] += $counter[ 'skip' ];
- }
- return $retval;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.cycle.php b/vendor/smarty/smarty/libs/plugins/function.cycle.php
deleted file mode 100644
index 793569991..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.cycle.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {cycle} function plugin
- * Type: function
- * Name: cycle
- * Date: May 3, 2002
- * Purpose: cycle through given values
- * Params:
- *
- * - name - name of cycle (optional)
- * - values - comma separated list of values to cycle, or an array of values to cycle
- * (this can be left out for subsequent calls)
- * - reset - boolean - resets given var to true
- * - print - boolean - print var or not. default is true
- * - advance - boolean - whether or not to advance the cycle
- * - delimiter - the value delimiter, default is ","
- * - assign - boolean, assigns to template var instead of printed.
- *
- * Examples:
- *
- * {cycle values="#eeeeee,#d0d0d0d"}
- * {cycle name=row values="one,two,three" reset=true}
- * {cycle name=row}
- *
- * @link https://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
- */
-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;
- if (!isset($params[ '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' ]) {
- $cycle_vars[ $name ][ 'index' ] = 0;
- }
- $cycle_vars[ $name ][ 'values' ] = $params[ 'values' ];
- }
- if (isset($params[ 'delimiter' ])) {
- $cycle_vars[ $name ][ 'delimiter' ] = $params[ 'delimiter' ];
- } elseif (!isset($cycle_vars[ $name ][ 'delimiter' ])) {
- $cycle_vars[ $name ][ 'delimiter' ] = ',';
- }
- 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' ]);
- }
- if (!isset($cycle_vars[ $name ][ 'index' ]) || $reset) {
- $cycle_vars[ $name ][ 'index' ] = 0;
- }
- if (isset($params[ 'assign' ])) {
- $print = false;
- $template->assign($params[ 'assign' ], $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]);
- }
- if ($print) {
- $retval = $cycle_array[ $cycle_vars[ $name ][ 'index' ] ];
- } else {
- $retval = null;
- }
- if ($advance) {
- if ($cycle_vars[ $name ][ 'index' ] >= count($cycle_array) - 1) {
- $cycle_vars[ $name ][ 'index' ] = 0;
- } else {
- $cycle_vars[ $name ][ 'index' ]++;
- }
- }
- return $retval;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.fetch.php b/vendor/smarty/smarty/libs/plugins/function.fetch.php
deleted file mode 100644
index 4a3e88196..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.fetch.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {fetch} plugin
- * Type: function
- * Name: fetch
- * Purpose: fetch file, web or ftp data and display results
- *
- * @link https://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);
- 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' ])) {
- return;
- }
- } else {
- // local file
- if (!$template->smarty->security_policy->isTrustedResourceDir($params[ 'file' ])) {
- return;
- }
- }
- }
- $content = '';
- if ($protocol === 'http') {
- // http fetch
- 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;
- $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' ])) {
- $port = 80;
- } else {
- $port = $uri_parts[ 'port' ];
- }
- if (!empty($uri_parts[ 'user' ])) {
- $user = $uri_parts[ 'user' ];
- }
- if (!empty($uri_parts[ 'pass' ])) {
- $pass = $uri_parts[ 'pass' ];
- }
- // loop through parameters, setup headers
- foreach ($params as $param_key => $param_value) {
- switch ($param_key) {
- case 'file':
- case 'assign':
- case 'assign_headers':
- break;
- case 'user':
- if (!empty($param_value)) {
- $user = $param_value;
- }
- break;
- case 'pass':
- if (!empty($param_value)) {
- $pass = $param_value;
- }
- break;
- case 'accept':
- 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);
- return;
- } else {
- $extra_headers[] = $param_value;
- }
- }
- break;
- case 'proxy_host':
- if (!empty($param_value)) {
- $proxy_host = $param_value;
- }
- break;
- case 'proxy_port':
- if (!preg_match('!\D!', $param_value)) {
- $proxy_port = (int)$param_value;
- } else {
- trigger_error("[plugin] invalid value for attribute '{$param_key }'", E_USER_NOTICE);
- return;
- }
- break;
- case 'agent':
- if (!empty($param_value)) {
- $agent = $param_value;
- }
- break;
- case 'referer':
- if (!empty($param_value)) {
- $referer = $param_value;
- }
- break;
- case 'timeout':
- if (!preg_match('!\D!', $param_value)) {
- $timeout = (int)$param_value;
- } else {
- 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);
- return;
- }
- }
- if (!empty($proxy_host) && !empty($proxy_port)) {
- $_is_proxy = true;
- $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
- } else {
- $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
- }
- if (!$fp) {
- trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
- return;
- } else {
- 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)) {
- fputs($fp, "Host: $host\r\n");
- }
- if (!empty($accept)) {
- fputs($fp, "Accept: $accept\r\n");
- }
- if (!empty($agent)) {
- fputs($fp, "User-Agent: $agent\r\n");
- }
- 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 (!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);
- }
- fclose($fp);
- $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 ]));
- }
- }
- } else {
- 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' ] . "'");
- }
- }
- if (!empty($params[ 'assign' ])) {
- $template->assign($params[ 'assign' ], $content);
- } else {
- return $content;
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php b/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php
deleted file mode 100644
index a8e7a07d8..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php
+++ /dev/null
@@ -1,286 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {html_checkboxes} function plugin
- * File: function.html_checkboxes.php
- * Type: function
- * Name: html_checkboxes
- * Date: 24.Feb.2003
- * Purpose: Prints out a list of checkbox input types
- * Examples:
- *
- * {html_checkboxes values=$ids output=$names}
- * {html_checkboxes values=$ids name='box' separator='<br>' output=$names}
- * {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names}
- *
- * Params:
- *
- * - name (optional) - string default "checkbox"
- * - values (required) - array
- * - options (optional) - associative array
- * - checked (optional) - array default not set
- * - separator (optional) - ie <br> or &nbsp;
- * - output (optional) - the output next to each checkbox
- * - assign (optional) - assign the output as an array to this variable
- * - escape (optional) - escape the content (not value), defaults to true
- *
- * @link https://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>
- * @version 1.0
- *
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- *
- * @return string
- * @uses smarty_function_escape_special_chars()
- * @throws \SmartyException
- */
-function smarty_function_html_checkboxes($params, Smarty_Internal_Template $template)
-{
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_function_escape_special_chars',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
- )
- )
- );
- $name = 'checkbox';
- $values = null;
- $options = null;
- $selected = array();
- $separator = '';
- $escape = true;
- $labels = true;
- $label_ids = false;
- $output = null;
- $extra = '';
- foreach ($params as $_key => $_val) {
- switch ($_key) {
- case 'name':
- case 'separator':
- $$_key = (string)$_val;
- break;
- case 'escape':
- case 'labels':
- case 'label_ids':
- $$_key = (bool)$_val;
- break;
- case 'options':
- $$_key = (array)$_val;
- break;
- case 'values':
- case 'output':
- $$_key = array_values((array)$_val);
- break;
- case 'checked':
- case 'selected':
- if (is_array($_val)) {
- $selected = array();
- foreach ($_val as $_sel) {
- if (is_object($_sel)) {
- 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
- );
- continue;
- }
- } else {
- $_sel = smarty_function_escape_special_chars((string)$_sel);
- }
- $selected[ $_sel ] = true;
- }
- } elseif (is_object($_val)) {
- 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
- );
- }
- } else {
- $selected = smarty_function_escape_special_chars((string)$_val);
- }
- break;
- case 'checkboxes':
- trigger_error(
- 'html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead',
- E_USER_WARNING
- );
- $options = (array)$_val;
- break;
- case 'assign':
- 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!
- // no break
- default:
- 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);
- }
- break;
- }
- }
- if (!isset($options) && !isset($values)) {
- return '';
- } /* raise error here? */
- $_html_result = array();
- if (isset($options)) {
- 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) {
- $_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' ])) {
- $template->assign($params[ 'assign' ], $_html_result);
- } else {
- return implode("\n", $_html_result);
- }
-}
-
-/**
- * @param $name
- * @param $value
- * @param $output
- * @param $selected
- * @param $extra
- * @param $separator
- * @param $labels
- * @param $label_ids
- * @param bool $escape
- *
- * @return string
- */
-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
- );
- 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
- );
- 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"';
- }
- } elseif ($value === $selected) {
- $_output .= ' checked="checked"';
- }
- $_output .= $extra . ' />' . $output;
- if ($labels) {
- $_output .= '</label>';
- }
- $_output .= $separator;
- return $_output;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_image.php b/vendor/smarty/smarty/libs/plugins/function.html_image.php
deleted file mode 100644
index 71bc63864..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.html_image.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {html_image} function plugin
- * Type: function
- * Name: html_image
- * Date: Feb 24, 2003
- * Purpose: format HTML tags for the image
- * Examples: {html_image file="/images/masthead.gif"}
- * Output: <img src="/images/masthead.gif" width=400 height=23>
- * Params:
- *
- * - file - (required) - file (and path) of image
- * - height - (optional) - image height (default actual height)
- * - width - (optional) - image width (default actual width)
- * - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
- * - path_prefix - prefix for path output (optional, default empty)
- *
- * @link https://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
- *
- * @throws SmartyException
- * @return string
- * @uses smarty_function_escape_special_chars()
- */
-function smarty_function_html_image($params, Smarty_Internal_Template $template)
-{
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_function_escape_special_chars',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
- )
- )
- );
- $alt = '';
- $file = '';
- $height = '';
- $width = '';
- $extra = '';
- $prefix = '';
- $suffix = '';
- $path_prefix = '';
- $basedir = isset($_SERVER[ 'DOCUMENT_ROOT' ]) ? $_SERVER[ 'DOCUMENT_ROOT' ] : '';
- foreach ($params as $_key => $_val) {
- switch ($_key) {
- case 'file':
- case 'height':
- case 'width':
- case 'dpi':
- case 'path_prefix':
- case 'basedir':
- $$_key = $_val;
- break;
- case 'alt':
- if (!is_array($_val)) {
- $$_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':
- case 'href':
- $prefix = '<a href="' . $_val . '">';
- $suffix = '</a>';
- break;
- default:
- if (!is_array($_val)) {
- $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' ])) {
- return;
- }
- } else {
- // local file
- if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) {
- return;
- }
- }
- }
- if (!isset($params[ 'width' ]) || !isset($params[ 'height' ])) {
- // FIXME: (rodneyrehm) getimagesize() loads the complete file off a remote resource, use custom [jpg,png,gif]header reader!
- if (!$_image_data = @getimagesize($_image_path)) {
- if (!file_exists($_image_path)) {
- trigger_error("html_image: unable to find '{$_image_path}'", E_USER_NOTICE);
- return;
- } 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')) {
- // FIXME: (rodneyrehm) wrong dpi assumption
- // don't know who thought this up… even if it was true in 1998, it's definitely wrong in 2011.
- $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;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_options.php b/vendor/smarty/smarty/libs/plugins/function.html_options.php
deleted file mode 100644
index 3e4335340..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.html_options.php
+++ /dev/null
@@ -1,230 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {html_options} function plugin
- * Type: function
- * Name: html_options
- * Purpose: Prints the list of <option> tags generated from
- * the passed parameters
- * Params:
- *
- * - name (optional) - string default "select"
- * - values (required) - if no options supplied) - array
- * - options (required) - if no values supplied) - associative array
- * - selected (optional) - string default not set
- * - output (required) - if not options supplied) - array
- * - id (optional) - string default not set
- * - class (optional) - string default not set
- *
- * @link https://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
- *
- * @return string
- * @uses smarty_function_escape_special_chars()
- * @throws \SmartyException
- */
-function smarty_function_html_options($params, Smarty_Internal_Template $template)
-{
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_function_escape_special_chars',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
- )
- )
- );
- $name = null;
- $values = null;
- $options = null;
- $selected = null;
- $output = null;
- $id = null;
- $class = null;
- $extra = '';
- foreach ($params as $_key => $_val) {
- switch ($_key) {
- case 'name':
- case 'class':
- case 'id':
- $$_key = (string)$_val;
- break;
- case 'options':
- $options = (array)$_val;
- break;
- case 'values':
- case 'output':
- $$_key = array_values((array)$_val);
- break;
- case 'selected':
- if (is_array($_val)) {
- $selected = array();
- foreach ($_val as $_sel) {
- if (is_object($_sel)) {
- 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
- );
- continue;
- }
- } else {
- $_sel = smarty_function_escape_special_chars((string)$_sel);
- }
- $selected[ $_sel ] = true;
- }
- } elseif (is_object($_val)) {
- 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
- );
- }
- } else {
- $selected = smarty_function_escape_special_chars((string)$_val);
- }
- 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!
- // no break
- 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 '';
- }
- $_html_result = '';
- $_idx = 0;
- if (isset($options)) {
- foreach ($options as $_key => $_val) {
- $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
- }
- } else {
- 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_result =
- '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result .
- '</select>' . "\n";
- }
- return $_html_result;
-}
-
-/**
- * @param $key
- * @param $value
- * @param $selected
- * @param $id
- * @param $class
- * @param $idx
- *
- * @return string
- */
-function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx)
-{
- if (!is_array($value)) {
- $_key = smarty_function_escape_special_chars($key);
- $_html_result = '<option value="' . $_key . '"';
- if (is_array($selected)) {
- if (isset($selected[ $_key ])) {
- $_html_result .= ' selected="selected"';
- }
- } elseif ($_key === $selected) {
- $_html_result .= ' selected="selected"';
- }
- $_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
- );
- return '';
- }
- } else {
- $value = smarty_function_escape_special_chars((string)$value);
- }
- $_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n";
- $idx++;
- } else {
- $_idx = 0;
- $_html_result =
- smarty_function_html_options_optgroup(
- $key,
- $value,
- $selected,
- !empty($id) ? ($id . '-' . $idx) : null,
- $class,
- $_idx
- );
- $idx++;
- }
- return $_html_result;
-}
-
-/**
- * @param $key
- * @param $values
- * @param $selected
- * @param $id
- * @param $class
- * @param $idx
- *
- * @return string
- */
-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;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_radios.php b/vendor/smarty/smarty/libs/plugins/function.html_radios.php
deleted file mode 100644
index 2223ff7ee..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.html_radios.php
+++ /dev/null
@@ -1,266 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {html_radios} function plugin
- * File: function.html_radios.php
- * Type: function
- * Name: html_radios
- * Date: 24.Feb.2003
- * Purpose: Prints out a list of radio input types
- * Params:
- *
- * - name (optional) - string default "radio"
- * - values (required) - array
- * - options (required) - associative array
- * - checked (optional) - array default not set
- * - separator (optional) - ie <br> or &nbsp;
- * - output (optional) - the output next to each radio button
- * - assign (optional) - assign the output as an array to this variable
- * - escape (optional) - escape the content (not value), defaults to true
- *
- * Examples:
- *
- * {html_radios values=$ids output=$names}
- * {html_radios values=$ids name='box' separator='<br>' output=$names}
- * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
- *
- * @link https://www.smarty.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()
- * @throws \SmartyException
- */
-function smarty_function_html_radios($params, Smarty_Internal_Template $template)
-{
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_function_escape_special_chars',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
- )
- )
- );
- $name = 'radio';
- $values = null;
- $options = null;
- $selected = null;
- $separator = '';
- $escape = true;
- $labels = true;
- $label_ids = false;
- $output = null;
- $extra = '';
- foreach ($params as $_key => $_val) {
- switch ($_key) {
- case 'name':
- case 'separator':
- $$_key = (string)$_val;
- break;
- case 'checked':
- case 'selected':
- if (is_array($_val)) {
- trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
- } elseif (is_object($_val)) {
- 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
- );
- }
- } else {
- $selected = (string)$_val;
- }
- break;
- case 'escape':
- case 'labels':
- case 'label_ids':
- $$_key = (bool)$_val;
- break;
- case 'options':
- $$_key = (array)$_val;
- break;
- case 'values':
- case 'output':
- $$_key = array_values((array)$_val);
- break;
- case 'radios':
- trigger_error(
- 'html_radios: the use of the "radios" attribute is deprecated, use "options" instead',
- E_USER_WARNING
- );
- $options = (array)$_val;
- break;
- case 'assign':
- 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!
- // no break
- 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 '';
- }
- $_html_result = array();
- if (isset($options)) {
- foreach ($options as $_key => $_val) {
- $_html_result[] =
- smarty_function_html_radios_output(
- $name,
- $_key,
- $_val,
- $selected,
- $extra,
- $separator,
- $labels,
- $label_ids,
- $escape
- );
- }
- } else {
- 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);
- }
-}
-
-/**
- * @param $name
- * @param $value
- * @param $output
- * @param $selected
- * @param $extra
- * @param $separator
- * @param $labels
- * @param $label_ids
- * @param $escape
- *
- * @return string
- */
-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
- );
- 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
- );
- 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) {
- $_output .= ' id="' . $_id . '"';
- }
- if ($value === $selected) {
- $_output .= ' checked="checked"';
- }
- $_output .= $extra . ' />' . $output;
- if ($labels) {
- $_output .= '</label>';
- }
- $_output .= $separator;
- return $_output;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_select_date.php b/vendor/smarty/smarty/libs/plugins/function.html_select_date.php
deleted file mode 100644
index d9c571976..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.html_select_date.php
+++ /dev/null
@@ -1,395 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {html_select_date} plugin
- * Type: function
- * Name: html_select_date
- * Purpose: Prints the dropdowns for date selection.
- * ChangeLog:
- *
- * - 1.0 initial release
- * - 1.1 added support for +/- N syntax for begin
- * and end year values. (Monte)
- * - 1.2 added support for yyyy-mm-dd syntax for
- * time value. (Jan Rosier)
- * - 1.3 added support for choosing format for
- * month values (Gary Loescher)
- * - 1.3.1 added support for choosing format for
- * day values (Marcus Bointon)
- * - 1.3.2 support negative timestamps, force year
- * 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,
- * added attributes month_names, *_id
- *
- * @link https://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
- *
- * @return string
- * @throws \SmartyException
- */
-function smarty_function_html_select_date($params, Smarty_Internal_Template $template)
-{
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_function_escape_special_chars',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
- )
- )
- );
- // generate timestamps used for month names only
- static $_month_timestamps = null;
- static $_current_year = null;
- if ($_month_timestamps === null) {
- $_current_year = date('Y');
- $_month_timestamps = array();
- for ($i = 1; $i <= 12; $i++) {
- $_month_timestamps[ $i ] = mktime(0, 0, 0, $i, 1, 2000);
- }
- }
- /* Default values. */
- $prefix = 'Date_';
- $start_year = null;
- $end_year = null;
- $display_days = true;
- $display_months = true;
- $display_years = true;
- $month_format = '%B';
- /* Write months as numbers by default GL */
- $month_value_format = '%m';
- $day_format = '%02d';
- /* Write day values using this format MB */
- $day_value_format = '%d';
- $year_as_text = false;
- /* Display years in reverse order? Ie. 2000,1999,.... */
- $reverse_years = false;
- /* Should the select boxes be part of an array when returned from PHP?
- e.g. setting it to "birthday", would create "birthday[Day]",
- "birthday[Month]" & "birthday[Year]". Can be combined with prefix */
- $field_array = null;
- /* <select size>'s of the different <select> tags.
- If not set, uses default dropdown. */
- $day_size = null;
- $month_size = null;
- $year_size = null;
- /* Unparsed attributes common to *ALL* the <select>/<input> tags.
- An example might be in the template: all_extra ='class ="foo"'. */
- $all_extra = null;
- /* Separate attributes for the tags. */
- $day_extra = null;
- $month_extra = null;
- $year_extra = null;
- /* Order in which to display the fields.
- "D" -> day, "M" -> month, "Y" -> year. */
- $field_order = 'MDY';
- /* String printed between the different fields. */
- $field_separator = "\n";
- $option_separator = "\n";
- $time = null;
-
- // $all_empty = null;
- // $day_empty = null;
- // $month_empty = null;
- // $year_empty = null;
- $extra_attrs = '';
- $all_id = null;
- $day_id = null;
- $month_id = null;
- $year_id = null;
- foreach ($params as $_key => $_value) {
- switch ($_key) {
- case 'time':
- $$_key = $_value; // we'll handle conversion below
- break;
- case 'month_names':
- if (is_array($_value) && count($_value) === 12) {
- $$_key = $_value;
- } else {
- 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':
- case 'end_year':
- case 'day_format':
- case 'day_value_format':
- case 'month_format':
- case 'month_value_format':
- case 'day_size':
- case 'month_size':
- case 'year_size':
- case 'all_extra':
- case 'day_extra':
- case 'month_extra':
- case 'year_extra':
- case 'field_order':
- case 'field_separator':
- case 'option_separator':
- case 'all_empty':
- case 'month_empty':
- case 'day_empty':
- case 'year_empty':
- case 'all_id':
- case 'month_id':
- case 'day_id':
- case 'year_id':
- $$_key = (string)$_value;
- break;
- case 'display_days':
- case 'display_months':
- case 'display_years':
- case 'year_as_text':
- case 'reverse_years':
- $$_key = (bool)$_value;
- break;
- default:
- if (!is_array($_value)) {
- $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($time) && is_array($time)) {
- if (isset($time[$prefix . 'Year'])) {
- // $_REQUEST[$field_array] given
- foreach ([
- 'Y' => 'Year',
- 'm' => 'Month',
- 'd' => 'Day'
- ] as $_elementKey => $_elementName) {
- $_variableName = '_' . strtolower($_elementName);
- $$_variableName =
- isset($time[$prefix . $_elementName]) ? $time[$prefix . $_elementName] :
- date($_elementKey);
- }
- } elseif (isset($time[$field_array][$prefix . 'Year'])) {
- // $_REQUEST given
- foreach ([
- 'Y' => 'Year',
- 'm' => 'Month',
- 'd' => 'Day'
- ] as $_elementKey => $_elementName) {
- $_variableName = '_' . strtolower($_elementName);
- $$_variableName = isset($time[$field_array][$prefix . $_elementName]) ?
- $time[$field_array][$prefix . $_elementName] : date($_elementKey);
- }
- } else {
- // no date found, use NOW
- [$_year, $_month, $_day] = explode('-', date('Y-m-d'));
- }
- } elseif (isset($time) && preg_match("/(\d*)-(\d*)-(\d*)/", $time, $matches)) {
- $_year = $_month = $_day = null;
- if ($matches[1] > '') $_year = (int) $matches[1];
- if ($matches[2] > '') $_month = (int) $matches[2];
- if ($matches[3] > '') $_day = (int) $matches[3];
- } elseif ($time === null) {
- if (array_key_exists('time', $params)) {
- $_year = $_month = $_day = null;
- } else {
- [$_year, $_month, $_day] = explode('-', date('Y-m-d'));
- }
- } else {
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_make_timestamp',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'
- )
- )
- );
- $time = smarty_make_timestamp($time);
- [$_year, $_month, $_day] = explode('-', date('Y-m-d', $time));
- }
-
- // make syntax "+N" or "-N" work with $start_year and $end_year
- // Note preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match) is slower than trim+substr
- foreach (array(
- 'start',
- 'end'
- ) as $key) {
- $key .= '_year';
- $t = $$key;
- if ($t === null) {
- $$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;
- }
- }
- // flip for ascending or descending
- if (($start_year > $end_year && !$reverse_years) || ($start_year < $end_year && $reverse_years)) {
- $t = $end_year;
- $end_year = $start_year;
- $start_year = $t;
- }
- // generate year <select> or <input>
- if ($display_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)
- ) . '"';
- }
- 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;
- }
- $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) {
- $_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)
- ) . '"';
- }
- 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;
- }
- 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 ]);
- $_html_months .= '<option value="' . $_value . '"' . ($_val == $_month ? ' selected="selected"' : '') .
- '>' . $_text . '</option>' . $option_separator;
- }
- $_html_months .= '</select>';
- }
- // generate day <select> or <input>
- if ($display_days) {
- $_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)
- ) . '"';
- }
- 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;
- }
- 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);
- $_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++) {
- switch ($field_order[ $i ]) {
- case 'Y':
- case 'y':
- if (isset($_html_years)) {
- if ($_html) {
- $_html .= $field_separator;
- }
- $_html .= $_html_years;
- }
- break;
- case 'm':
- case 'M':
- if (isset($_html_months)) {
- if ($_html) {
- $_html .= $field_separator;
- }
- $_html .= $_html_months;
- }
- break;
- case 'd':
- case 'D':
- if (isset($_html_days)) {
- if ($_html) {
- $_html .= $field_separator;
- }
- $_html .= $_html_days;
- }
- break;
- }
- }
- return $_html;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_select_time.php b/vendor/smarty/smarty/libs/plugins/function.html_select_time.php
deleted file mode 100644
index 256b56b1c..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.html_select_time.php
+++ /dev/null
@@ -1,354 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {html_select_time} function plugin
- * Type: function
- * Name: html_select_time
- * Purpose: Prints the dropdowns for time selection
- *
- * @link https://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
- *
- * @return string
- * @uses smarty_make_timestamp()
- * @throws \SmartyException
- */
-function smarty_function_html_select_time($params, Smarty_Internal_Template $template)
-{
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_function_escape_special_chars',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
- )
- )
- );
- $prefix = 'Time_';
- $field_array = null;
- $field_separator = "\n";
- $option_separator = "\n";
- $time = null;
- $display_hours = true;
- $display_minutes = true;
- $display_seconds = true;
- $display_meridian = true;
- $hour_format = '%02d';
- $hour_value_format = '%02d';
- $minute_format = '%02d';
- $minute_value_format = '%02d';
- $second_format = '%02d';
- $second_value_format = '%02d';
- $hour_size = null;
- $minute_size = null;
- $second_size = null;
- $meridian_size = null;
- $all_empty = null;
- $hour_empty = null;
- $minute_empty = null;
- $second_empty = null;
- $meridian_empty = null;
- $all_id = null;
- $hour_id = null;
- $minute_id = null;
- $second_id = null;
- $meridian_id = null;
- $use_24_hours = true;
- $minute_interval = 1;
- $second_interval = 1;
- $extra_attrs = '';
- $all_extra = null;
- $hour_extra = null;
- $minute_extra = null;
- $second_extra = null;
- $meridian_extra = null;
- foreach ($params as $_key => $_value) {
- switch ($_key) {
- case 'time':
- if (!is_array($_value) && $_value !== null) {
- $template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_make_timestamp',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'
- )
- )
- );
- $time = smarty_make_timestamp($_value);
- }
- break;
- case 'prefix':
- case 'field_array':
- case 'field_separator':
- case 'option_separator':
- case 'all_extra':
- case 'hour_extra':
- case 'minute_extra':
- case 'second_extra':
- case 'meridian_extra':
- case 'all_empty':
- case 'hour_empty':
- case 'minute_empty':
- case 'second_empty':
- case 'meridian_empty':
- case 'all_id':
- case 'hour_id':
- case 'minute_id':
- case 'second_id':
- case 'meridian_id':
- case 'hour_format':
- case 'hour_value_format':
- case 'minute_format':
- case 'minute_value_format':
- case 'second_format':
- case 'second_value_format':
- $$_key = (string)$_value;
- break;
- case 'display_hours':
- case 'display_minutes':
- case 'display_seconds':
- case 'display_meridian':
- case 'use_24_hours':
- $$_key = (bool)$_value;
- break;
- case 'minute_interval':
- case 'second_interval':
- case 'hour_size':
- case 'minute_size':
- case 'second_size':
- case 'meridian_size':
- $$_key = (int)$_value;
- break;
- default:
- if (!is_array($_value)) {
- $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;
- }
- }
- 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) {
- $_variableName = '_' . strtolower($_elementName);
- $$_variableName =
- isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] :
- date($_elementKey);
- }
- $_meridian =
- isset($params[ 'time' ][ $prefix . 'Meridian' ]) ? (' ' . $params[ 'time' ][ $prefix . '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) {
- $_variableName = '_' . strtolower($_elementName);
- $$_variableName = isset($params[ 'time' ][ $field_array ][ $prefix . $_elementName ]) ?
- $params[ 'time' ][ $field_array ][ $prefix . $_elementName ] : date($_elementKey);
- }
- $_meridian = isset($params[ 'time' ][ $field_array ][ $prefix . 'Meridian' ]) ?
- (' ' . $params[ 'time' ][ $field_array ][ $prefix . 'Meridian' ]) : '';
- $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
- list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
- } else {
- // no date found, use NOW
- list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
- }
- } elseif ($time === null) {
- if (array_key_exists('time', $params)) {
- $_hour = $_minute = $_second = $time = null;
- } else {
- list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s'));
- }
- } else {
- list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
- }
- // generate hour <select>
- if ($display_hours) {
- $_html_hours = '';
- $_extra = '';
- $_name = $field_array ? ($field_array . '[' . $prefix . 'Hour]') : ($prefix . 'Hour');
- if ($all_extra) {
- $_extra .= ' ' . $all_extra;
- }
- if ($hour_extra) {
- $_extra .= ' ' . $hour_extra;
- }
- $_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)
- ) . '"';
- }
- if ($hour_size) {
- $_html_hours .= ' size="' . $hour_size . '"';
- }
- $_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;
- }
- $start = $use_24_hours ? 0 : 1;
- $end = $use_24_hours ? 23 : 12;
- 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);
- if (!$use_24_hours) {
- $_hour12 = $_hour == 0 ? 12 : ($_hour <= 12 ? $_hour : $_hour - 12);
- }
- $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
- $_html_hours .= '<option value="' . $_value . '"' . ($selected ? ' selected="selected"' : '') . '>' .
- $_text . '</option>' . $option_separator;
- }
- $_html_hours .= '</select>';
- }
- // generate minute <select>
- if ($display_minutes) {
- $_html_minutes = '';
- $_extra = '';
- $_name = $field_array ? ($field_array . '[' . $prefix . 'Minute]') : ($prefix . 'Minute');
- if ($all_extra) {
- $_extra .= ' ' . $all_extra;
- }
- if ($minute_extra) {
- $_extra .= ' ' . $minute_extra;
- }
- $_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)
- ) . '"';
- }
- if ($minute_size) {
- $_html_minutes .= ' size="' . $minute_size . '"';
- }
- $_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;
- }
- $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
- 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);
- $_html_minutes .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') .
- '>' . $_text . '</option>' . $option_separator;
- }
- $_html_minutes .= '</select>';
- }
- // generate second <select>
- if ($display_seconds) {
- $_html_seconds = '';
- $_extra = '';
- $_name = $field_array ? ($field_array . '[' . $prefix . 'Second]') : ($prefix . 'Second');
- if ($all_extra) {
- $_extra .= ' ' . $all_extra;
- }
- if ($second_extra) {
- $_extra .= ' ' . $second_extra;
- }
- $_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)
- ) . '"';
- }
- if ($second_size) {
- $_html_seconds .= ' size="' . $second_size . '"';
- }
- $_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;
- }
- $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
- 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);
- $_html_seconds .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') .
- '>' . $_text . '</option>' . $option_separator;
- }
- $_html_seconds .= '</select>';
- }
- // generate meridian <select>
- if ($display_meridian && !$use_24_hours) {
- $_html_meridian = '';
- $_extra = '';
- $_name = $field_array ? ($field_array . '[' . $prefix . 'Meridian]') : ($prefix . 'Meridian');
- if ($all_extra) {
- $_extra .= ' ' . $all_extra;
- }
- if ($meridian_extra) {
- $_extra .= ' ' . $meridian_extra;
- }
- $_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)
- ) . '"';
- }
- if ($meridian_size) {
- $_html_meridian .= ' size="' . $meridian_size . '"';
- }
- $_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="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') .
- '>AM</option>' . $option_separator . '<option value="pm"' .
- ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator .
- '</select>';
- }
- $_html = '';
- foreach (array(
- '_html_hours',
- '_html_minutes',
- '_html_seconds',
- '_html_meridian'
- ) as $k) {
- if (isset($$k)) {
- if ($_html) {
- $_html .= $field_separator;
- }
- $_html .= $$k;
- }
- }
- return $_html;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_table.php b/vendor/smarty/smarty/libs/plugins/function.html_table.php
deleted file mode 100644
index 17b0586e2..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.html_table.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {html_table} function plugin
- * Type: function
- * Name: html_table
- * Date: Feb 17, 2003
- * Purpose: make an html table from an array of data
- * Params:
- *
- * - loop - array to loop through
- * - cols - number of columns, comma separated list of column names
- * or array of column names
- * - rows - number of rows
- * - table_attr - table attributes
- * - th_attr - table heading attributes (arrays are cycled)
- * - tr_attr - table row attributes (arrays are cycled)
- * - td_attr - table cell attributes (arrays are cycled)
- * - trailpad - value to pad trailing cells with
- * - caption - text for caption element
- * - vdir - vertical direction (default: "down", means top-to-bottom)
- * - hdir - horizontal direction (default: "right", means left-to-right)
- * - inner - inner loop (default "cols": print $loop line by line,
- * $loop will be printed column by column otherwise)
- *
- * Examples:
- *
- * {table loop=$data}
- * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
- * {table loop=$data cols="first,second,third" tr_attr=$colors}
- *
- * @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 https://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)
-{
- $table_attr = 'border="1"';
- $tr_attr = '';
- $th_attr = '';
- $td_attr = '';
- $cols = $cols_count = 3;
- $rows = 3;
- $trailpad = '&nbsp;';
- $vdir = 'down';
- $hdir = 'right';
- $inner = 'cols';
- $caption = '';
- $loop = null;
- if (!isset($params[ 'loop' ])) {
- trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
- return;
- }
- foreach ($params as $_key => $_value) {
- switch ($_key) {
- case 'loop':
- $$_key = (array)$_value;
- break;
- case 'cols':
- if (is_array($_value) && !empty($_value)) {
- $cols = $_value;
- $cols_count = count($_value);
- } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
- $cols = explode(',', $_value);
- $cols_count = count($cols);
- } elseif (!empty($_value)) {
- $cols_count = (int)$_value;
- } else {
- $cols_count = $cols;
- }
- break;
- case 'rows':
- $$_key = (int)$_value;
- break;
- case 'table_attr':
- case 'trailpad':
- case 'hdir':
- case 'vdir':
- case 'inner':
- case 'caption':
- $$_key = (string)$_value;
- break;
- case 'tr_attr':
- case 'td_attr':
- case 'th_attr':
- $$_key = $_value;
- break;
- }
- }
- $loop_count = count($loop);
- if (empty($params[ 'rows' ])) {
- /* no rows specified */
- $rows = ceil($loop_count / $cols_count);
- } elseif (empty($params[ 'cols' ])) {
- if (!empty($params[ 'rows' ])) {
- /* no cols specified, but rows */
- $cols_count = ceil($loop_count / $rows);
- }
- }
- $output = "<table $table_attr>\n";
- if (!empty($caption)) {
- $output .= '<caption>' . $caption . "</caption>\n";
- }
- if (is_array($cols)) {
- $cols = ($hdir === 'right') ? $cols : array_reverse($cols);
- $output .= "<thead><tr>\n";
- for ($r = 0; $r < $cols_count; $r++) {
- $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
- $output .= $cols[ $r ];
- $output .= "</th>\n";
- }
- $output .= "</tr></thead>\n";
- }
- $output .= "<tbody>\n";
- 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;
- 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;
- }
- if ($x < $loop_count) {
- $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[ $x ] . "</td>\n";
- } else {
- $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n";
- }
- }
- $output .= "</tr>\n";
- }
- $output .= "</tbody>\n";
- $output .= "</table>\n";
- return $output;
-}
-
-/**
- * @param $name
- * @param $var
- * @param $no
- *
- * @return string
- */
-function smarty_function_html_table_cycle($name, $var, $no)
-{
- if (!is_array($var)) {
- $ret = $var;
- } else {
- $ret = $var[ $no % count($var) ];
- }
- return ($ret) ? ' ' . $ret : '';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.mailto.php b/vendor/smarty/smarty/libs/plugins/function.mailto.php
deleted file mode 100644
index 671ac0694..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.mailto.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {mailto} function plugin
- * Type: function
- * Name: mailto
- * Date: May 21, 2002
- * Purpose: automate mailto address link creation, and optionally encode them.
- * Params:
- *
- * - address - (required) - e-mail address
- * - text - (optional) - text to display, default is address
- * - encode - (optional) - can be one of:
- * * none : no encoding (default)
- * * javascript : encode with javascript
- * * javascript_charcode : encode with javascript charcode
- * * hex : encode with hexadecimal (no javascript)
- * - cc - (optional) - address(es) to carbon copy
- * - bcc - (optional) - address(es) to blind carbon copy
- * - subject - (optional) - e-mail subject
- * - newsgroups - (optional) - newsgroup(s) to post to
- * - followupto - (optional) - address(es) to follow up to
- * - extra - (optional) - extra tags for the href link
- *
- * Examples:
- *
- * {mailto address="me@domain.com"}
- * {mailto address="me@domain.com" encode="javascript"}
- * {mailto address="me@domain.com" encode="hex"}
- * {mailto address="me@domain.com" subject="Hello to you!"}
- * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
- * {mailto address="me@domain.com" extra='class="mailto"'}
- *
- * @link https://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)
-{
- static $_allowed_encoding = [
- 'javascript' => true,
- 'javascript_charcode' => true,
- 'hex' => true,
- 'none' => true
- ];
-
- $extra = '';
- if (empty($params[ 'address' ])) {
- trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
- return;
- } else {
- $address = $params[ 'address' ];
- }
-
- $text = $address;
-
- // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
- // so, don't encode it.
- $mail_parms = [];
- foreach ($params as $var => $value) {
- switch ($var) {
- case 'cc':
- case 'bcc':
- case 'followupto':
- if (!empty($value)) {
- $mail_parms[] = $var . '=' . str_replace(['%40', '%2C'], ['@', ','], rawurlencode($value));
- }
- break;
- case 'subject':
- case 'newsgroups':
- $mail_parms[] = $var . '=' . rawurlencode($value);
- break;
- case 'extra':
- case 'text':
- $$var = $value;
- // no break
- default:
- }
- }
-
- 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;
- }
-
- $string = '<a href="mailto:' . htmlspecialchars($address, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, Smarty::$_CHARSET) .
- '" ' . $extra . '>' . htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, Smarty::$_CHARSET) . '</a>';
-
- if ($encode === 'javascript') {
- $js_encode = '';
- for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
- $js_encode .= '%' . bin2hex($string[ $x ]);
- }
- return '<script type="text/javascript">document.write(unescape(\'' . $js_encode . '\'))</script>';
- } elseif ($encode === 'javascript_charcode') {
- for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
- $ord[] = ord($string[ $x ]);
- }
- return '<script type="text/javascript">document.write(String.fromCharCode(' . implode(',', $ord) . '))</script>';
- } 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);
- return;
- }
- $address_encode = '';
- for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
- if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[ $x ])) {
- $address_encode .= '%' . bin2hex($address[ $x ]);
- } else {
- $address_encode .= $address[ $x ];
- }
- }
- $text_encode = '';
- 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 $string;
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/function.math.php b/vendor/smarty/smarty/libs/plugins/function.math.php
deleted file mode 100644
index 34912d239..000000000
--- a/vendor/smarty/smarty/libs/plugins/function.math.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-/**
- * Smarty plugin
- * This plugin is only for Smarty2 BC
- *
- * @package Smarty
- * @subpackage PluginsFunction
- */
-/**
- * Smarty {math} function plugin
- * Type: function
- * Name: math
- * Purpose: handle math computations in template
- *
- * @link https://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,
- 'acos' => true,
- 'acosh' => true,
- 'cos' => true,
- 'cosh' => true,
- 'deg2rad' => true,
- 'rad2deg' => true,
- 'exp' => true,
- 'floor' => true,
- 'log' => true,
- 'log10' => true,
- 'max' => true,
- 'min' => true,
- 'pi' => true,
- 'pow' => true,
- 'rand' => true,
- 'round' => true,
- 'asin' => true,
- 'asinh' => true,
- 'sin' => true,
- 'sinh' => true,
- 'sqrt' => true,
- 'srand' => true,
- 'atan' => true,
- 'atanh' => true,
- 'tan' => true,
- 'tanh' => true
- );
-
- // be sure equation parameter is present
- if (empty($params[ 'equation' ])) {
- trigger_error("math: missing equation parameter", E_USER_WARNING);
- return;
- }
- $equation = $params[ 'equation' ];
-
- // Remove whitespaces
- $equation = preg_replace('/\s+/', '', $equation);
-
- // Adapted from https://www.php.net/manual/en/function.eval.php#107377
- $number = '-?(?:\d+(?:[,.]\d+)?|pi|π)'; // What is a number
- $functionsOrVars = '((?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))';
- $operators = '[,+\/*\^%-]'; // Allowed math operators
- $regexp = '/^(('.$number.'|'.$functionsOrVars.'|('.$functionsOrVars.'\s*\((?1)*\)|\((?1)*\)))(?:'.$operators.'(?1))?)+$/';
-
- if (!preg_match($regexp, $equation)) {
- trigger_error("math: illegal characters", E_USER_WARNING);
- return;
- }
-
- // make sure parenthesis are balanced
- if (substr_count($equation, '(') !== substr_count($equation, ')')) {
- trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
- return;
- }
-
- // disallow backticks
- if (strpos($equation, '`') !== false) {
- trigger_error("math: backtick character not allowed in equation", E_USER_WARNING);
- return;
- }
-
- // also disallow dollar signs
- if (strpos($equation, '$') !== false) {
- trigger_error("math: dollar signs not allowed in equation", E_USER_WARNING);
- return;
- }
- 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);
- return;
- }
- if (!is_numeric($val)) {
- trigger_error("math: parameter '{$key}' is not numeric", 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_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)!', $equation, $match);
- 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, or missing parameter '{$curr_var}'",
- E_USER_WARNING
- );
- return;
- }
- }
- foreach ($params as $key => $val) {
- if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
- $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
- }
- }
- $smarty_math_result = null;
- 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);
- }
- } else {
- if (empty($params[ 'assign' ])) {
- printf($params[ 'format' ], $smarty_math_result);
- } else {
- $template->assign($params[ 'assign' ], sprintf($params[ 'format' ], $smarty_math_result));
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php b/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php
deleted file mode 100644
index 2903d61d7..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty capitalize modifier plugin
- * Type: modifier
- * Name: capitalize
- * 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 Rodney Rehm
- */
-function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
-{
- $string = (string) $string;
-
- if (Smarty::$_MBSTRING) {
- if ($lc_rest) {
- // uppercase (including hyphenated words)
- $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
- } else {
- // uppercase word breaks
- $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) {
- $upper_string =
- substr_replace(
- $upper_string,
- mb_strtolower($match[ 0 ], Smarty::$_CHARSET),
- $match[ 1 ],
- strlen($match[ 0 ])
- );
- }
- }
- }
- $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_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) {
- $upper_string =
- substr_replace($upper_string, strtolower($match[ 0 ]), $match[ 1 ], strlen($match[ 0 ]));
- }
- }
- }
- $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
- */
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_mbconvert_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 2 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
-}
-
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_mbconvert2_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
-}
-
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_ucfirst_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 2 ]));
-}
-
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_ucfirst2_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 3 ]));
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.count.php b/vendor/smarty/smarty/libs/plugins/modifier.count.php
deleted file mode 100644
index ca35fc115..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.count.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty count modifier plugin
- * Type: modifier
- * Name: count
- * Purpose: counts all elements in an array or in a Countable object
- * Input:
- * - Countable|array: array or object to count
- * - mode: int defaults to 0 for normal count mode, if set to 1 counts recursive
- *
- * @param mixed $arrayOrObject input array/object
- * @param int $mode count mode
- *
- * @return int
- */
-function smarty_modifier_count($arrayOrObject, $mode = 0)
-{
- /*
- * @see https://www.php.net/count
- * > Prior to PHP 8.0.0, if the parameter was neither an array nor an object that implements the Countable interface,
- * > 1 would be returned, unless value was null, in which case 0 would be returned.
- */
-
- if ($arrayOrObject instanceof Countable || is_array($arrayOrObject)) {
- return count($arrayOrObject, (int) $mode);
- } elseif ($arrayOrObject === null) {
- return 0;
- }
- return 1;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.date_format.php b/vendor/smarty/smarty/libs/plugins/modifier.date_format.php
deleted file mode 100644
index e3589fd07..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.date_format.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty date_format modifier plugin
- * Type: modifier
- * Name: date_format
- * Purpose: format datestamps via strftime
- * Input:
- * - string: input date string
- * - format: strftime format for output
- * - default_date: default date if $string is empty
- *
- * @link https://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()
- */
-function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
-{
- if ($format === null) {
- $format = Smarty::$_DATE_FORMAT;
- }
- /**
- * require_once the {@link shared.make_timestamp.php} plugin
- */
- static $is_loaded = false;
- if (!$is_loaded) {
- if (!is_callable('smarty_make_timestamp')) {
- include_once SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php';
- }
- $is_loaded = true;
- }
- if (!empty($string) && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
- $timestamp = smarty_make_timestamp($string);
- } elseif (!empty($default_date)) {
- $timestamp = smarty_make_timestamp($default_date);
- } else {
- return;
- }
- if ($formatter === 'strftime' || ($formatter === 'auto' && strpos($format, '%') !== false)) {
- if (Smarty::$_IS_WINDOWS) {
- $_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);
- }
- // @ to suppress deprecation errors when running in PHP8.1 or higher.
- return @strftime($format, $timestamp);
- } else {
- return date($format, $timestamp);
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.debug_print_var.php b/vendor/smarty/smarty/libs/plugins/modifier.debug_print_var.php
deleted file mode 100644
index 78397d017..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.debug_print_var.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage Debug
- */
-/**
- * Smarty debug_print_var modifier plugin
- * Type: modifier
- * Name: debug_print_var
- * Purpose: formats variable contents for display in the console
- *
- * @author Monte Ohrt <monte at ohrt dot com>
- *
- * @param array|object $var variable to be formatted
- * @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, $max = 10, $length = 40, $depth = 0, $objects = array())
-{
- $_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, $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, $max, $length, ++$depth, $objects);
- $depth--;
- }
- break;
- case 'boolean':
- case 'NULL':
- case 'resource':
- if (true === $var) {
- $results = 'true';
- } elseif (false === $var) {
- $results = 'false';
- } elseif (null === $var) {
- $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) {
- if (mb_strlen($var, Smarty::$_CHARSET) > $length) {
- $results = mb_substr($var, 0, $length - 3, Smarty::$_CHARSET) . '...';
- }
- } else {
- if (isset($var[ $length ])) {
- $results = substr($var, 0, $length - 3) . '...';
- }
- }
- $results = htmlspecialchars('"' . $results . '"', ENT_QUOTES, Smarty::$_CHARSET);
- break;
- case 'unknown type':
- default:
- $results = strtr((string)$var, $_replace);
- if (Smarty::$_MBSTRING) {
- if (mb_strlen($results, Smarty::$_CHARSET) > $length) {
- $results = mb_substr($results, 0, $length - 3, Smarty::$_CHARSET) . '...';
- }
- } else {
- if (strlen($results) > $length) {
- $results = substr($results, 0, $length - 3) . '...';
- }
- }
- $results = htmlspecialchars($results, ENT_QUOTES, Smarty::$_CHARSET);
- }
- return $results;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.escape.php b/vendor/smarty/smarty/libs/plugins/modifier.escape.php
deleted file mode 100644
index e168679c3..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.escape.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty escape modifier plugin
- * Type: modifier
- * Name: escape
- * Purpose: escape string for output
- *
- * @link https://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)
-{
- static $is_loaded_1 = false;
- static $is_loaded_2 = false;
- if (!$char_set) {
- $char_set = Smarty::$_CHARSET;
- }
-
- $string = (string)$string;
-
- switch ($esc_type) {
- case 'html':
- return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
- // no break
- case 'htmlall':
- if (Smarty::$_MBSTRING) {
- $string = mb_convert_encoding($string, 'UTF-8', $char_set);
- return htmlentities($string, ENT_QUOTES, 'UTF-8', $double_encode);
- }
- // no MBString fallback
- return htmlentities($string, ENT_QUOTES, $char_set, $double_encode);
- // no break
- case 'url':
- return rawurlencode($string);
- case 'urlpathinfo':
- return str_replace('%2F', '/', rawurlencode($string));
- case 'quotes':
- // escape unescaped single quotes
- return preg_replace("%(?<!\\\\)'%", "\\'", $string);
- case 'hex':
- // escape every byte into hex
- // Note that the UTF-8 encoded character ä will be represented as %c3%a4
- $return = '';
- $_length = strlen($string);
- for ($x = 0; $x < $_length; $x++) {
- $return .= '%' . bin2hex($string[ $x ]);
- }
- return $return;
- case 'hexentity':
- $return = '';
- if (Smarty::$_MBSTRING) {
- if (!$is_loaded_1) {
- if (!is_callable('smarty_mb_to_unicode')) {
- include_once SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php';
- }
- $is_loaded_1 = true;
- }
- $return = '';
- 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++) {
- $return .= '&#x' . bin2hex($string[ $x ]) . ';';
- }
- return $return;
- case 'decentity':
- $return = '';
- if (Smarty::$_MBSTRING) {
- if (!$is_loaded_1) {
- if (!is_callable('smarty_mb_to_unicode')) {
- include_once SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php';
- }
- $is_loaded_1 = true;
- }
- $return = '';
- 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++) {
- $return .= '&#' . ord($string[ $x ]) . ';';
- }
- return $return;
- case 'javascript':
- // escape quotes and backslashes, newlines, etc.
- return strtr(
- $string,
- array(
- '\\' => '\\\\',
- "'" => "\\'",
- '"' => '\\"',
- "\r" => '\\r',
- "\n" => '\\n',
- '</' => '<\/',
- // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
- '<!--' => '<\!--',
- '<s' => '<\s',
- '<S' => '<\S',
- "`" => "\\\\`",
- "\${" => "\\\\\\$\\{"
- )
- );
- case 'mail':
- if (Smarty::$_MBSTRING) {
- if (!$is_loaded_2) {
- if (!is_callable('smarty_mb_str_replace')) {
- include_once SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php';
- }
- $is_loaded_2 = true;
- }
- return smarty_mb_str_replace(
- array(
- '@',
- '.'
- ),
- array(
- ' [AT] ',
- ' [DOT] '
- ),
- $string
- );
- }
- // no MBString fallback
- return str_replace(
- array(
- '@',
- '.'
- ),
- array(
- ' [AT] ',
- ' [DOT] '
- ),
- $string
- );
- case 'nonstd':
- // escape non-standard chars, such as ms document quotes
- $return = '';
- if (Smarty::$_MBSTRING) {
- if (!$is_loaded_1) {
- if (!is_callable('smarty_mb_to_unicode')) {
- include_once SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php';
- }
- $is_loaded_1 = true;
- }
- foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
- if ($unicode >= 126) {
- $return .= '&#' . $unicode . ';';
- } else {
- $return .= chr($unicode);
- }
- }
- return $return;
- }
- $_length = strlen($string);
- for ($_i = 0; $_i < $_length; $_i++) {
- $_ord = ord(substr($string, $_i, 1));
- // non-standard char, escape it
- if ($_ord >= 126) {
- $return .= '&#' . $_ord . ';';
- } else {
- $return .= substr($string, $_i, 1);
- }
- }
- return $return;
- default:
- trigger_error("escape: unsupported type: $esc_type - returning unmodified string", E_USER_NOTICE);
- return $string;
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.explode.php b/vendor/smarty/smarty/libs/plugins/modifier.explode.php
deleted file mode 100644
index 5186fde3d..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.explode.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-
-/**
- * Smarty explode modifier plugin
- * Type: modifier
- * Name: explode
- * Purpose: split a string by a string
- *
- * @param string $separator
- * @param string $string
- * @param int|null $limit
- *
- * @return array
- */
-function smarty_modifier_explode($separator, $string, ?int $limit = null)
-{
- // provide $string default to prevent deprecation errors in PHP >=8.1
- return explode($separator, $string ?? '', $limit ?? PHP_INT_MAX);
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.implode.php b/vendor/smarty/smarty/libs/plugins/modifier.implode.php
deleted file mode 100644
index 679d71d72..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.implode.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-
-function smarty_modifier_implode($values, $separator = '')
-{
- if (is_array($separator)) {
- return implode((string) ($values ?? ''), (array) $separator);
- }
- return implode((string) ($separator ?? ''), (array) $values);
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php b/vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php
deleted file mode 100644
index 7c7bd875f..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.mb_wordwrap.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty wordwrap modifier plugin
- * Type: modifier
- * Name: mb_wordwrap
- * Purpose: Wrap a string to a given number of characters
- *
- * @link https://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_modifier_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);
- $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) {
- if ($cut) {
- $_tokens = preg_split(
- '!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER,
- $_token,
- -1,
- PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE
- );
- }
- }
- foreach ($_tokens as $token) {
- $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
- $token_length = mb_strlen($token, Smarty::$_CHARSET);
- $length += $token_length;
- if ($length > $width) {
- // remove space before inserted break
- if ($_previous) {
- $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
- }
- if (!$_space) {
- // add the break before the token
- if (!empty($t)) {
- $t .= $break;
- }
- $length = $token_length;
- }
- } elseif ($token === "\n") {
- // hard break must reset counters
- $length = 0;
- }
- $_previous = $_space;
- // add the token
- $t .= $token;
- }
- }
- return $t;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.number_format.php b/vendor/smarty/smarty/libs/plugins/modifier.number_format.php
deleted file mode 100644
index 8c612601f..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.number_format.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-
-/**
- * Smarty number_format modifier plugin
- * Type: modifier
- * Name: number_format
- * Purpose: Format a number with grouped thousands
- *
- * @param float|null $num
- * @param int $decimals
- * @param string|null $decimal_separator
- * @param string|null $thousands_separator
- *
- * @return string
- */
-function smarty_modifier_number_format(?float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ",")
-{
- // provide $num default to prevent deprecation errors in PHP >=8.1
- return number_format($num ?? 0.0, $decimals, $decimal_separator, $thousands_separator);
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php b/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php
deleted file mode 100644
index cd57cdf33..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.regex_replace.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty regex_replace modifier plugin
- * Type: modifier
- * Name: regex_replace
- * Purpose: regular expression search/replace
- *
- * @link https://www.smarty.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
- * @param int $limit the maximum number of replacements
- *
- * @return string
- */
-function smarty_modifier_regex_replace($string, $search, $replace, $limit = -1)
-{
- 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, $limit);
-}
-
-/**
- * @param string $search string(s) that should be replaced
- *
- * @return string
- * @ignore
- */
-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);
- }
- // 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 ]);
- }
- return $search;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.replace.php b/vendor/smarty/smarty/libs/plugins/modifier.replace.php
deleted file mode 100644
index 71a7c632a..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.replace.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty replace modifier plugin
- * Type: modifier
- * Name: replace
- * Purpose: simple search/replace
- *
- * @link https://www.smarty.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
- */
-function smarty_modifier_replace($string, $search, $replace)
-{
- static $is_loaded = false;
- if (Smarty::$_MBSTRING) {
- if (!$is_loaded) {
- if (!is_callable('smarty_mb_str_replace')) {
- include_once SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php';
- }
- $is_loaded = true;
- }
- return smarty_mb_str_replace($search, $replace, $string);
- }
- return str_replace($search, $replace, $string);
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.spacify.php b/vendor/smarty/smarty/libs/plugins/modifier.spacify.php
deleted file mode 100644
index 251dbe71b..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.spacify.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty spacify modifier plugin
- * Type: modifier
- * Name: spacify
- * Purpose: add spaces between characters in a string
- *
- * @link https://www.smarty.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));
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.truncate.php b/vendor/smarty/smarty/libs/plugins/modifier.truncate.php
deleted file mode 100644
index d253e4a61..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifier.truncate.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifier
- */
-/**
- * Smarty truncate modifier plugin
- * Type: modifier
- * Name: truncate
- * 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 https://www.smarty.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 || $string === null) {
- 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, intval($length / 2), Smarty::$_CHARSET) . $etc .
- mb_substr($string, -intval($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, intval($length / 2)) . $etc . substr($string, -intval($length / 2));
- }
- return $string;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php
deleted file mode 100644
index 2c3a8b2a4..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.cat.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty cat modifier plugin
- * Type: modifier
- * Name: cat
- * Date: Feb 24, 2003
- * Purpose: catenate a value to a variable
- * Input: string to catenate
- * Example: {$var|cat:"foo"}
- *
- * @link https://www.smarty.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)
-{
- return '(' . implode(').(', $params) . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php
deleted file mode 100644
index 7798cabc1..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_characters.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty count_characters modifier plugin
- * Type: modifier
- * Name: count_characters
- * Purpose: count the number of characters in a text
- *
- * @link https://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)
-{
- if (!isset($params[ 1 ]) || $params[ 1 ] !== 'true') {
- return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[ 0 ] . ', $tmp)';
- }
- if (Smarty::$_MBSTRING) {
- return 'mb_strlen((string) ' . $params[ 0 ] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
- }
- // no MBString fallback
- return 'strlen((string) ' . $params[ 0 ] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php
deleted file mode 100644
index 332402968..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_paragraphs.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty count_paragraphs modifier plugin
- * Type: modifier
- * Name: count_paragraphs
- * Purpose: count the number of paragraphs in a text
- *
- * @link https://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
- * count_paragraphs (Smarty online manual)
- * @author Uwe Tews
- *
- * @param array $params parameters
- *
- * @return string with compiled code
- */
-function smarty_modifiercompiler_count_paragraphs($params)
-{
- // count \r or \n characters
- return '(preg_match_all(\'#[\r\n]+#\', ' . $params[ 0 ] . ', $tmp)+1)';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php
deleted file mode 100644
index 30e36e5f0..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_sentences.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty count_sentences modifier plugin
- * Type: modifier
- * Name: count_sentences
- * Purpose: count the number of sentences in a text
- *
- * @link https://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
- * count_sentences (Smarty online manual)
- * @author Uwe Tews
- *
- * @param array $params parameters
- *
- * @return string with compiled code
- */
-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)';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php
deleted file mode 100644
index 48a3daa17..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.count_words.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty count_words modifier plugin
- * Type: modifier
- * Name: count_words
- * Purpose: count the number of words in a text
- *
- * @link https://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)
-{
- if (Smarty::$_MBSTRING) {
- // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
- // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592
- return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . Smarty::$_UTF8_MODIFIER . '\', ' .
- $params[ 0 ] . ', $tmp)';
- }
- // no MBString fallback
- return 'str_word_count((string) ' . $params[ 0 ] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php
deleted file mode 100644
index dffa7a986..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.default.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty default modifier plugin
- * Type: modifier
- * Name: default
- * Purpose: designate default value for empty variables
- *
- * @link https://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)
-{
- $output = $params[ 0 ];
- if (!isset($params[ 1 ])) {
- $params[ 1 ] = "''";
- }
- array_shift($params);
- foreach ($params as $param) {
- $output = '(($tmp = ' . $output . ' ?? null)===null||$tmp===\'\' ? ' . $param . ' ?? null : $tmp)';
- }
- return $output;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php
deleted file mode 100644
index 21b1b4c2a..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty escape modifier plugin
- * Type: modifier
- * Name: escape
- * Purpose: escape string for output
- *
- * @link https://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
- * @author Rodney Rehm
- *
- * @param array $params parameters
- * @param Smarty_Internal_TemplateCompilerBase $compiler
- *
- * @return string with compiled code
- * @throws SmartyException
- */
-function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompilerBase $compiler)
-{
- $compiler->template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_literal_compiler_param',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'
- )
- )
- );
- try {
- $esc_type = smarty_literal_compiler_param($params, 1, 'html');
- $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET);
- $double_encode = smarty_literal_compiler_param($params, 3, true);
- if (!$char_set) {
- $char_set = Smarty::$_CHARSET;
- }
- switch ($esc_type) {
- case 'html':
- return 'htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
- var_export($double_encode, true) . ')';
- // no break
- case 'htmlall':
- if (Smarty::$_MBSTRING) {
- return 'htmlentities(mb_convert_encoding((string)' . $params[ 0 ] . ', \'UTF-8\', ' .
- var_export($char_set, true) . '), ENT_QUOTES, \'UTF-8\', ' .
- var_export($double_encode, true) . ')';
- }
- // no MBString fallback
- return 'htmlentities((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
- var_export($double_encode, true) . ')';
- // no break
- case 'url':
- return 'rawurlencode((string)' . $params[ 0 ] . ')';
- case 'urlpathinfo':
- return 'str_replace("%2F", "/", rawurlencode((string)' . $params[ 0 ] . '))';
- case 'quotes':
- // escape unescaped single quotes
- return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'", (string)' . $params[ 0 ] . ')';
- case 'javascript':
- // escape quotes and backslashes, newlines, etc.
- // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
- return 'strtr((string)' .
- $params[ 0 ] .
- ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r",
- "\\n" => "\\\n", "</" => "<\/", "<!--" => "<\!--", "<s" => "<\s", "<S" => "<\S",
- "`" => "\\\\`", "\${" => "\\\\\\$\\{"))';
- }
- } catch (SmartyException $e) {
- // pass through to regular plugin fallback
- }
- // could not optimize |escape call, so fallback to regular plugin
- if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
- $compiler->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'file' ] =
- SMARTY_PLUGINS_DIR . 'modifier.escape.php';
- $compiler->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'function' ] =
- 'smarty_modifier_escape';
- } else {
- $compiler->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'file' ] =
- SMARTY_PLUGINS_DIR . 'modifier.escape.php';
- $compiler->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'function' ] =
- 'smarty_modifier_escape';
- }
- return 'smarty_modifier_escape(' . join(', ', $params) . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.from_charset.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.from_charset.php
deleted file mode 100644
index acce7784b..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.from_charset.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty from_charset modifier plugin
- * Type: modifier
- * Name: from_charset
- * 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)
-{
- if (!Smarty::$_MBSTRING) {
- // FIXME: (rodneyrehm) shouldn't this throw an error?
- return $params[ 0 ];
- }
- if (!isset($params[ 1 ])) {
- $params[ 1 ] = '"ISO-8859-1"';
- }
- return 'mb_convert_encoding(' . $params[ 0 ] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[ 1 ] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php
deleted file mode 100644
index 636f0edf1..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.indent.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty indent modifier plugin
- * Type: modifier
- * Name: indent
- * Purpose: indent lines of text
- *
- * @link https://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)
-{
- if (!isset($params[ 1 ])) {
- $params[ 1 ] = 4;
- }
- if (!isset($params[ 2 ])) {
- $params[ 2 ] = "' '";
- }
- return 'preg_replace(\'!^!m\',str_repeat(' . $params[ 2 ] . ',' . $params[ 1 ] . '),' . $params[ 0 ] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.json_encode.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.json_encode.php
deleted file mode 100644
index 629277f28..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.json_encode.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-function smarty_modifiercompiler_json_encode($params) {
- return 'json_encode(' . $params[0] . (isset($params[1]) ? ', (int) ' . $params[1] : '') . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php
deleted file mode 100644
index 4144e5619..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.lower.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty lower modifier plugin
- * Type: modifier
- * Name: lower
- * Purpose: convert string to lowercase
- *
- * @link https://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)
-{
- if (Smarty::$_MBSTRING) {
- return 'mb_strtolower((string) ' . $params[ 0 ] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
- }
- // no MBString fallback
- return 'strtolower((string) ' . $params[ 0 ] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php
deleted file mode 100644
index 308c00e42..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty nl2br modifier plugin
- * Type: modifier
- * Name: nl2br
- * Purpose: insert HTML line breaks before all newlines in a string
- *
- * @link https://www.smarty.net/docs/en/language.modifier.nl2br.tpl nl2br (Smarty online manual)
- *
- * @param array $params parameters
- *
- * @return string with compiled code
- */
-function smarty_modifiercompiler_nl2br($params) {
- return 'nl2br((string) ' . $params[0] . ', (bool) ' . ($params[1] ?? true) . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.noprint.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.noprint.php
deleted file mode 100644
index 1275190e0..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.noprint.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty noprint modifier plugin
- * Type: modifier
- * Name: noprint
- * Purpose: return an empty string
- *
- * @author Uwe Tews
- * @return string with compiled code
- */
-function smarty_modifiercompiler_noprint()
-{
- return "''";
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php
deleted file mode 100644
index 97f072f00..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty round modifier plugin
- * Type: modifier
- * Name: round
- * Purpose: Returns the rounded value of num to specified precision (number of digits after the decimal point)
- *
- * @link https://www.smarty.net/docs/en/language.modifier.round.tpl round (Smarty online manual)
- *
- * @param array $params parameters
- *
- * @return string with compiled code
- */
-function smarty_modifiercompiler_round($params) {
- return 'round((float) ' . $params[0] . ', (int) ' . ($params[1] ?? 0) . ', (int) ' . ($params[2] ?? PHP_ROUND_HALF_UP) . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php
deleted file mode 100644
index 18eb7a762..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty str_repeat modifier plugin
- * Type: modifier
- * Name: str_repeat
- * Purpose: returns string repeated times times
- *
- * @link https://www.smarty.net/docs/en/language.modifier.str_repeat.tpl str_repeat (Smarty online manual)
- *
- * @param array $params parameters
- *
- * @return string with compiled code
- */
-function smarty_modifiercompiler_str_repeat($params) {
- return 'str_repeat((string) ' . $params[0] . ', (int) ' . $params[1] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php
deleted file mode 100644
index 8df5632c5..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.string_format.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty string_format modifier plugin
- * Type: modifier
- * Name: string_format
- * Purpose: format strings via sprintf
- *
- * @link https://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)
-{
- return 'sprintf(' . $params[ 1 ] . ',' . $params[ 0 ] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php
deleted file mode 100644
index 51944bde6..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty strip modifier plugin
- * Type: modifier
- * Name: strip
- * Purpose: Replace all repeated spaces, newlines, tabs
- * with a single space or supplied replacement string.
- * Example: {$var|strip} {$var|strip:"&nbsp;"}
- * Date: September 25th, 2002
- *
- * @link https://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)
-{
- if (!isset($params[ 1 ])) {
- $params[ 1 ] = "' '";
- }
- return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})";
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php
deleted file mode 100644
index fd6cc7251..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty strip_tags modifier plugin
- * Type: modifier
- * Name: strip_tags
- * Purpose: strip html tags from text
- *
- * @link https://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)
-{
- if (!isset($params[ 1 ]) || $params[ 1 ] === true || trim($params[ 1 ], '"') === 'true') {
- return "preg_replace('!<[^>]*?>!', ' ', (string) {$params[0]})";
- } else {
- return 'strip_tags((string) ' . $params[ 0 ] . ')';
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php
deleted file mode 100644
index d43e8ef1c..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty strlen modifier plugin
- * Type: modifier
- * Name: strlen
- * Purpose: return the length of the given string
- *
- * @link https://www.smarty.net/docs/en/language.modifier.strlen.tpl strlen (Smarty online manual)
- *
- * @param array $params parameters
- *
- * @return string with compiled code
- */
-function smarty_modifiercompiler_strlen($params) {
- return 'strlen((string) ' . $params[0] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.substr.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.substr.php
deleted file mode 100644
index 17721f52b..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.substr.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-function smarty_modifiercompiler_substr($params) {
- return 'substr((string) ' . $params[0] . ', (int) ' . $params[1] .
- (isset($params[2]) ? ', (int) ' . $params[2] : '') . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.to_charset.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.to_charset.php
deleted file mode 100644
index d652eab1b..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.to_charset.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty to_charset modifier plugin
- * Type: modifier
- * Name: to_charset
- * 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)
-{
- if (!Smarty::$_MBSTRING) {
- // FIXME: (rodneyrehm) shouldn't this throw an error?
- return $params[ 0 ];
- }
- if (!isset($params[ 1 ])) {
- $params[ 1 ] = '"ISO-8859-1"';
- }
- return 'mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 1 ] . ', "' . addslashes(Smarty::$_CHARSET) . '")';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php
deleted file mode 100644
index 9e1f06d67..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty unescape modifier plugin
- * Type: modifier
- * Name: unescape
- * Purpose: unescape html entities
- *
- * @author Rodney Rehm
- *
- * @param array $params parameters
- * @param Smarty_Internal_TemplateCompilerBase $compiler
- *
- * @return string with compiled code
- */
-function smarty_modifiercompiler_unescape($params, Smarty_Internal_TemplateCompilerBase $compiler)
-{
- $compiler->template->_checkPlugins(
- array(
- array(
- 'function' => 'smarty_literal_compiler_param',
- 'file' => SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'
- )
- )
- );
-
- $esc_type = smarty_literal_compiler_param($params, 1, 'html');
-
- if (!isset($params[ 2 ])) {
- $params[ 2 ] = '\'' . addslashes(Smarty::$_CHARSET) . '\'';
- }
-
- switch ($esc_type) {
- case 'entity':
- case 'htmlall':
- if (Smarty::$_MBSTRING) {
- return 'html_entity_decode(mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 2 ] . ', \'UTF-8\'), ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ' . $params[ 2 ] . ')';
- }
- return 'html_entity_decode(' . $params[ 0 ] . ', ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ' . $params[ 2 ] . ')';
- case 'html':
- return 'htmlspecialchars_decode(' . $params[ 0 ] . ', ENT_QUOTES)';
- case 'url':
- return 'rawurldecode(' . $params[ 0 ] . ')';
- default:
- return $params[ 0 ];
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php
deleted file mode 100644
index 96030518e..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.upper.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty upper modifier plugin
- * Type: modifier
- * Name: lower
- * Purpose: convert string to uppercase
- *
- * @link https://www.smarty.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)
-{
- if (Smarty::$_MBSTRING) {
- return 'mb_strtoupper((string) ' . $params[ 0 ] . ' ?? \'\', \'' . addslashes(Smarty::$_CHARSET) . '\')';
- }
- // no MBString fallback
- return 'strtoupper((string) ' . $params[ 0 ] . ' ?? \'\')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php
deleted file mode 100644
index 49cb40b0f..000000000
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.wordwrap.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsModifierCompiler
- */
-/**
- * Smarty wordwrap modifier plugin
- * Type: modifier
- * Name: wordwrap
- * Purpose: wrap a string of text at a given length
- *
- * @link https://www.smarty.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
- * @author Uwe Tews
- *
- * @param array $params parameters
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- *
- * @return string with compiled code
- * @throws \SmartyException
- */
-function smarty_modifiercompiler_wordwrap($params, Smarty_Internal_TemplateCompilerBase $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) {
- $function = $compiler->getPlugin('mb_wordwrap', 'modifier');
- }
- return $function . '(' . $params[ 0 ] . ',' . $params[ 1 ] . ',' . $params[ 2 ] . ',' . $params[ 3 ] . ')';
-}
diff --git a/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php b/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php
deleted file mode 100644
index 180cdd081..000000000
--- a/vendor/smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFilter
- */
-/**
- * Smarty trimwhitespace outputfilter plugin
- * Trim unnecessary whitespace from HTML markup.
- *
- * @author Rodney Rehm
- *
- * @param string $source input string
- *
- * @return string filtered output
- * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
- */
-function smarty_outputfilter_trimwhitespace($source)
-{
- $store = array();
- $_store = 0;
- $_offset = 0;
- // Unify Line-Breaks to \n
- $source = preg_replace('/\015\012|\015|\012/', "\n", $source);
- // capture Internet Explorer and KnockoutJS Conditional Comments
- if (preg_match_all(
- '#<!--((\[[^\]]+\]>.*?<!\[[^\]]+\])|(\s*/?ko\s+.+))-->#is',
- $source,
- $matches,
- PREG_OFFSET_CAPTURE | PREG_SET_ORDER
- )
- ) {
- foreach ($matches as $match) {
- $store[] = $match[ 0 ][ 0 ];
- $_length = strlen($match[ 0 ][ 0 ]);
- $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
- $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
- $_offset += $_length - strlen($replace);
- $_store++;
- }
- }
- // Strip all HTML-Comments
- // yes, even the ones in <script> - see https://stackoverflow.com/a/808850/515124
- $source = preg_replace('#<!--.*?-->#ms', '', $source);
- // capture html elements not to be messed with
- $_offset = 0;
- 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 ]);
- $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
- $source = substr_replace($source, $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, because 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',
- // 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' => '>',
- );
- $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 );
- $_offset = 0;
- if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
- foreach ($matches as $match) {
- $_length = strlen($match[ 0 ][ 0 ]);
- $replace = $store[ $match[ 1 ][ 0 ] ];
- $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
- $_offset += strlen($replace) - $_length;
- $_store++;
- }
- }
- return $source;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php b/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php
deleted file mode 100644
index 355b02b57..000000000
--- a/vendor/smarty/smarty/libs/plugins/shared.escape_special_chars.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Smarty shared plugin
- *
- * @package Smarty
- * @subpackage PluginsShared
- */
-/**
- * escape_special_chars common function
- * Function: smarty_function_escape_special_chars
- * 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
- *
- * @return string
- */
-function smarty_function_escape_special_chars($string)
-{
- if (!is_array($string)) {
- $string = htmlspecialchars((string) $string, ENT_COMPAT, Smarty::$_CHARSET, false);
- }
- return $string;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/shared.literal_compiler_param.php b/vendor/smarty/smarty/libs/plugins/shared.literal_compiler_param.php
deleted file mode 100644
index 65caf03c8..000000000
--- a/vendor/smarty/smarty/libs/plugins/shared.literal_compiler_param.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsShared
- */
-/**
- * evaluate compiler parameter
- *
- * @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)
-{
- // 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 ])) {
- 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/vendor/smarty/smarty/libs/plugins/shared.make_timestamp.php b/vendor/smarty/smarty/libs/plugins/shared.make_timestamp.php
deleted file mode 100644
index 9626dc68e..000000000
--- a/vendor/smarty/smarty/libs/plugins/shared.make_timestamp.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Smarty shared plugin
- *
- * @package Smarty
- * @subpackage PluginsShared
- */
-/**
- * Function: smarty_make_timestamp
- * 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()
- *
- * @return int
- */
-function smarty_make_timestamp($string)
-{
- if (empty($string)) {
- // use "now":
- return time();
- } 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)
- );
- } 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) {
- // strtotime() was not able to parse $string, use "now":
- return time();
- }
- return $time;
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php b/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php
deleted file mode 100644
index 7e85f7aae..000000000
--- a/vendor/smarty/smarty/libs/plugins/shared.mb_str_replace.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-/**
- * Smarty shared plugin
- *
- * @package Smarty
- * @subpackage PluginsShared
- */
-if (!function_exists('smarty_mb_str_replace')) {
- /**
- * Multibyte string replace
- *
- * @param string|string[] $search the string to be searched
- * @param string|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)
- {
- if (!is_array($search) && is_array($replace)) {
- return false;
- }
- 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);
- $count += $c;
- }
- } elseif (is_array($search)) {
- if (!is_array($replace)) {
- foreach ($search as &$string) {
- $subject = smarty_mb_str_replace($string, $replace, $subject, $c);
- $count += $c;
- }
- } else {
- $n = max(count($search), count($replace));
- while ($n--) {
- $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
- $count += $c;
- next($search);
- next($replace);
- }
- }
- } else {
- $mb_reg_charset = mb_regex_encoding();
- // Check if mbstring regex is using UTF-8
- $reg_is_unicode = !strcasecmp($mb_reg_charset, "UTF-8");
- if(!$reg_is_unicode) {
- // ...and set to UTF-8 if not
- mb_regex_encoding("UTF-8");
- }
-
- // See if charset used by Smarty is matching one used by regex...
- $current_charset = mb_regex_encoding();
- $convert_result = (bool)strcasecmp(Smarty::$_CHARSET, $current_charset);
- if($convert_result) {
- // ...convert to it if not.
- $subject = mb_convert_encoding($subject, $current_charset, Smarty::$_CHARSET);
- $search = mb_convert_encoding($search, $current_charset, Smarty::$_CHARSET);
- $replace = mb_convert_encoding($replace, $current_charset, Smarty::$_CHARSET);
- }
-
- $parts = mb_split(preg_quote($search), $subject ?? "") ?: array();
- // If original regex encoding was not unicode...
- if(!$reg_is_unicode) {
- // ...restore original regex encoding to avoid breaking the system.
- mb_regex_encoding($mb_reg_charset);
- }
- if($parts === false) {
- // This exception is thrown if call to mb_split failed.
- // Usually it happens, when $search or $replace are not valid for given mb_regex_encoding().
- // There may be other cases for it to fail, please file an issue if you find a reproducible one.
- throw new SmartyException("Source string is not a valid $current_charset sequence (probably)");
- }
-
- $count = count($parts) - 1;
- $subject = implode($replace, $parts);
- // Convert results back to charset used by Smarty, if needed.
- if($convert_result) {
- $subject = mb_convert_encoding($subject, Smarty::$_CHARSET, $current_charset);
- }
- }
- return $subject;
- }
-}
diff --git a/vendor/smarty/smarty/libs/plugins/shared.mb_unicode.php b/vendor/smarty/smarty/libs/plugins/shared.mb_unicode.php
deleted file mode 100644
index 7d1206506..000000000
--- a/vendor/smarty/smarty/libs/plugins/shared.mb_unicode.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Smarty shared plugin
- *
- * @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
- *
- * @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)
-{
- 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
- *
- * @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)
-{
- $t = '';
- if (!$encoding) {
- $encoding = mb_internal_encoding();
- }
- foreach ((array)$unicode as $utf32be) {
- $character = pack('N*', $utf32be);
- $t .= mb_convert_encoding($character, $encoding, 'UTF-32BE');
- }
- return $t;
-}
diff --git a/vendor/smarty/smarty/libs/plugins/variablefilter.htmlspecialchars.php b/vendor/smarty/smarty/libs/plugins/variablefilter.htmlspecialchars.php
deleted file mode 100644
index 2eb12d20a..000000000
--- a/vendor/smarty/smarty/libs/plugins/variablefilter.htmlspecialchars.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage PluginsFilter
- */
-/**
- * Smarty htmlspecialchars variablefilter plugin
- *
- * @param string $source input string
- * @param \Smarty_Internal_Template $template
- *
- * @return string filtered output
- */
-function smarty_variablefilter_htmlspecialchars($source, Smarty_Internal_Template $template)
-{
- return htmlspecialchars((string) $source, ENT_QUOTES, Smarty::$_CHARSET);
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php
deleted file mode 100644
index db68f9bfd..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php
+++ /dev/null
@@ -1,219 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin
- *
- * @package Smarty
- * @subpackage Cacher
- */
-
-/**
- * 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 boolean $update flag if called because cache update
- *
- * @return boolean 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);
-
- /**
- * Read cached template from cache
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @return string content
- */
- abstract public function readCachedContent(Smarty_Internal_Template $_template);
-
- /**
- * 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();
- $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
- */
- 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)
- $start = microtime(true);
- $hadLock = null;
- while ($this->hasLock($smarty, $cached)) {
- $hadLock = true;
- if (microtime(true) - $start > $smarty->locking_timeout) {
- // abort waiting for lock release
- return false;
- }
- 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
- *
- * @throws SmartyException
- * @return Smarty_CacheResource Cache Resource Handler
- */
- public static function load(Smarty $smarty, $type = null)
- {
- if (!isset($type)) {
- $type = $smarty->caching_type;
- }
- // try smarty's cache
- 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->_cache[ 'cacheresource_handlers' ][ $type ] = $smarty->registered_cache_resources[ $type ];
- }
- // try sysplugins dir
- if (isset(self::$sysplugins[ $type ])) {
- $cache_resource_class = 'Smarty_Internal_CacheResource_' . smarty_ucfirst_ascii($type);
- return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
- }
- // try plugins dir
- $cache_resource_class = 'Smarty_CacheResource_' . smarty_ucfirst_ascii($type);
- if ($smarty->loadPlugin($cache_resource_class)) {
- return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
- }
- // give up
- throw new SmartyException("Unable to load cache resource '{$type}'");
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_data.php b/vendor/smarty/smarty/libs/sysplugins/smarty_data.php
deleted file mode 100644
index 2545ed3a8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_data.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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
- */
- public 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/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
deleted file mode 100644
index c77ae9e17..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
+++ /dev/null
@@ -1,235 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin CacheResource File
- *
- * @package Smarty
- * @subpackage Cacher
- * @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
- * @subpackage Cacher
- */
-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 = &$_template->source;
- $smarty = &$_template->smarty;
- $_compile_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
- $_filepath = sha1($source->uid . $smarty->_joined_template_dir);
- $cached->filepath = $smarty->getCacheDir();
- if (isset($_template->cache_id)) {
- $cached->filepath .= preg_replace(
- array(
- '![^\w|]+!',
- '![|]+!'
- ),
- array(
- '_',
- $_compile_dir_sep
- ),
- $_template->cache_id
- ) . $_compile_dir_sep;
- }
- if (isset($_template->compile_id)) {
- $cached->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . $_compile_dir_sep;
- }
- // if use_sub_dirs, break file into directories
- if ($smarty->use_sub_dirs) {
- $cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . DIRECTORY_SEPARATOR . $_filepath[ 2 ] .
- $_filepath[ 3 ] .
- DIRECTORY_SEPARATOR .
- $_filepath[ 4 ] . $_filepath[ 5 ] . DIRECTORY_SEPARATOR;
- }
- $cached->filepath .= $_filepath;
- $basename = $source->handler->getBasename($source);
- if (!empty($basename)) {
- $cached->filepath .= '.' . $basename;
- }
- if ($smarty->cache_locking) {
- $cached->lock_id = $cached->filepath . '.lock';
- }
- $cached->filepath .= '.php';
- $cached->timestamp = $cached->exists = is_file($cached->filepath);
- if ($cached->exists) {
- $cached->timestamp = filemtime($cached->filepath);
- }
- }
-
- /**
- * 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 = $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 $_smarty_tpl do not change variable name, is used by compiled template
- * @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 $_smarty_tpl,
- Smarty_Template_Cached $cached = null,
- $update = false
- ) {
- $_smarty_tpl->cached->valid = false;
- if ($update && defined('HHVM_VERSION')) {
- eval('?>' . file_get_contents($_smarty_tpl->cached->filepath));
- return true;
- } else {
- return @include $_smarty_tpl->cached->filepath;
- }
- }
-
- /**
- * Write the rendered template output to cache
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- *
- * @return bool success
- * @throws \SmartyException
- */
- public function writeCachedContent(Smarty_Internal_Template $_template, $content)
- {
- if ($_template->smarty->ext->_writeFile->writeFile(
- $_template->cached->filepath,
- $content,
- $_template->smarty
- ) === true
- ) {
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
- ) {
- opcache_invalidate($_template->cached->filepath, true);
- } elseif (function_exists('apc_compile_file')) {
- apc_compile_file($_template->cached->filepath);
- }
- $cached = $_template->cached;
- $cached->timestamp = $cached->exists = is_file($cached->filepath);
- if ($cached->exists) {
- $cached->timestamp = filemtime($cached->filepath);
- return true;
- }
- }
- return false;
- }
-
- /**
- * 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 $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 $smarty->ext->_cacheResourceFile->clear($smarty, null, null, null, $exp_time);
- }
-
- /**
- * 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 function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
- {
- return $smarty->ext->_cacheResourceFile->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_Template_Cached $cached cached object
- *
- * @return boolean true or false if cache is locked
- */
- public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- clearstatcache(true, $cached->lock_id ?? '');
- if (null !== $cached->lock_id && 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_Template_Cached $cached cached object
- *
- * @return bool|void
- */
- public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- $cached->is_locked = true;
- touch($cached->lock_id);
- }
-
- /**
- * Unlock cache for this template
- *
- * @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;
- @unlink($cached->lock_id);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php
deleted file mode 100644
index 1f0ab9b7d..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Assign
- * Compiles the {assign} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Assign Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $option_flags = array('nocache', 'noscope');
-
- /**
- * Valid scope names
- *
- * @var array
- */
- public $valid_scopes = array(
- 'local' => Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT,
- 'root' => Smarty::SCOPE_ROOT, 'global' => Smarty::SCOPE_GLOBAL,
- 'tpl_root' => Smarty::SCOPE_TPL_ROOT, 'smarty' => Smarty::SCOPE_SMARTY
- );
-
- /**
- * Compiles code for the {assign} 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)
- {
- // 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->mapCache = array();
- $_nocache = false;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- // nocache ?
- if ($_var = $compiler->getId($_attr[ 'var' ])) {
- $_var = "'{$_var}'";
- } else {
- $_var = $_attr[ 'var' ];
- }
- if ($compiler->tag_nocache || $compiler->nocache) {
- $_nocache = true;
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($_attr[ 'var' ]);
- }
- // scope setup
- if ($_attr[ 'noscope' ]) {
- $_scope = -1;
- } else {
- $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
- }
- // optional parameter
- $_params = '';
- if ($_nocache || $_scope) {
- $_params .= ' ,' . var_export($_nocache, true);
- }
- if ($_scope) {
- $_params .= ' ,' . $_scope;
- }
- if (isset($parameter[ 'smarty_internal_index' ])) {
- $output =
- "<?php \$_tmp_array = isset(\$_smarty_tpl->tpl_vars[{$_var}]) ? \$_smarty_tpl->tpl_vars[{$_var}]->value : array();\n";
- $output .= "if (!(is_array(\$_tmp_array) || \$_tmp_array instanceof ArrayAccess)) {\n";
- $output .= "settype(\$_tmp_array, 'array');\n";
- $output .= "}\n";
- $output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n";
- $output .= "\$_smarty_tpl->_assignInScope({$_var}, \$_tmp_array{$_params});?>";
- } else {
- $output = "<?php \$_smarty_tpl->_assignInScope({$_var}, {$_attr['value']}{$_params});?>";
- }
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php
deleted file mode 100644
index cbaccd2b3..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?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 Compile Block Class
- *
- * @author Uwe Tews <uwe.tews@googlemail.com>
- */
-class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inheritance
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $option_flags = array('hide', 'nocache');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('assign');
-
- /**
- * 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
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- if (!isset($compiler->_cache[ 'blockNesting' ])) {
- $compiler->_cache[ 'blockNesting' ] = 0;
- }
- 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 {
- $this->option_flags = array('hide', 'nocache');
- }
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- ++$compiler->_cache[ 'blockNesting' ];
- $_className = 'Block_' . preg_replace('![^\w]+!', '_', uniqid(mt_rand(), true));
- $compiler->_cache[ 'blockName' ][ $compiler->_cache[ 'blockNesting' ] ] = $_attr[ 'name' ];
- $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ] = $_className;
- $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ] = array();
- $compiler->_cache[ 'blockParams' ][ 1 ][ 'subBlocks' ][ trim($_attr[ 'name' ], '"\'') ][] = $_className;
- $this->openTag(
- $compiler,
- 'block',
- array(
- $_attr, $compiler->nocache, $compiler->parser->current_buffer,
- $compiler->template->compiled->has_nocache_code,
- $compiler->template->caching
- )
- );
- $compiler->saveRequiredPlugins(true);
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- $compiler->template->compiled->has_nocache_code = false;
- $compiler->suppressNocacheProcessing = true;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile BlockClose Class
- */
-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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return bool true
- */
- 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' ] ]);
- $_name = $_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 ] = 'true';
- }
- }
- $_className = $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ];
- // get compiled block code
- $_functionCode = $compiler->parser->current_buffer;
- // setup buffer for template function code
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- $output = "<?php\n";
- $output .= $compiler->cStyleComment(" {block {$_name}} ") . "\n";
- $output .= "class {$_className} extends Smarty_Internal_Block\n";
- $output .= "{\n";
- foreach ($_block as $property => $value) {
- $output .= "public \${$property} = " . var_export($value, true) . ";\n";
- }
- $output .= "public function callBlock(Smarty_Internal_Template \$_smarty_tpl) {\n";
- $output .= $compiler->compileRequiredPlugins();
- $compiler->restoreRequiredPlugins();
- if ($compiler->template->compiled->has_nocache_code) {
- $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->assign({$_assign}, ob_get_clean());\n";
- }
- $output .= "}\n";
- $output .= "}\n";
- $output .= $compiler->cStyleComment(" {/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);
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- // 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->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name);\n";
- } else {
- $output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name, \$this->tplIndex);\n";
- }
- $output .= "?>\n";
- --$compiler->_cache[ 'blockNesting' ];
- if ($compiler->_cache[ 'blockNesting' ] === 0) {
- unset($compiler->_cache[ 'blockNesting' ]);
- }
- $compiler->has_code = true;
- $compiler->suppressNocacheProcessing = true;
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php
deleted file mode 100644
index 588d18628..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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 Compile Block Child Class
- *
- * @author Uwe Tews <uwe.tews@googlemail.com>
- */
-class Smarty_Internal_Compile_Block_Child extends Smarty_Internal_Compile_Child
-{
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'block_child';
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php
deleted file mode 100644
index 97f11ca43..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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 Compile Block Parent Class
- *
- * @author Uwe Tews <uwe.tews@googlemail.com>
- */
-class Smarty_Internal_Compile_Block_Parent extends Smarty_Internal_Compile_Child
-{
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'block_parent';
-
- /**
- * Block type
- *
- * @var string
- */
- public $blockType = 'Parent';
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php
deleted file mode 100644
index 1ee8d75d7..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Break
- * Compiles the {break} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Break Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('levels');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('levels');
-
- /**
- * Tag name may be overloaded by Smarty_Internal_Compile_Continue
- *
- * @var string
- */
- public $tag = 'break';
-
- /**
- * Compiles code for the {break} tag
- *
- * @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, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- list($levels, $foreachLevels) = $this->checkLevels($args, $compiler);
- $output = "<?php ";
- if ($foreachLevels > 0 && $this->tag === 'continue') {
- $foreachLevels--;
- }
- if ($foreachLevels > 0) {
- /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
- $foreachCompiler = $compiler->getTagCompiler('foreach');
- $output .= $foreachCompiler->compileRestore($foreachLevels);
- }
- $output .= "{$this->tag} {$levels};?>";
- return $output;
- }
-
- /**
- * check attributes and return array of break and foreach levels
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return array
- * @throws \SmartyCompilerException
- */
- public function checkLevels($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- 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', null, true);
- }
- if (isset($_attr[ 'levels' ])) {
- if (!is_numeric($_attr[ 'levels' ])) {
- $compiler->trigger_template_error('level attribute must be a numeric constant', null, true);
- }
- $levels = $_attr[ 'levels' ];
- } else {
- $levels = 1;
- }
- $level_count = $levels;
- $stack_count = count($compiler->_tag_stack) - 1;
- $foreachLevels = 0;
- $lastTag = '';
- while ($level_count > 0 && $stack_count >= 0) {
- if (isset($_is_loopy[ $compiler->_tag_stack[ $stack_count ][ 0 ] ])) {
- $lastTag = $compiler->_tag_stack[ $stack_count ][ 0 ];
- if ($level_count === 0) {
- break;
- }
- $level_count--;
- if ($compiler->_tag_stack[ $stack_count ][ 0 ] === 'foreach') {
- $foreachLevels++;
- }
- }
- $stack_count--;
- }
- if ($level_count !== 0) {
- $compiler->trigger_template_error("cannot {$this->tag} {$levels} level(s)", null, true);
- }
- if ($lastTag === 'foreach' && $this->tag === 'break' && $foreachLevels > 0) {
- $foreachLevels--;
- }
- return array($levels, $foreachLevels);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php
deleted file mode 100644
index 445cabc60..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Function_Call
- * Compiles the calls of user defined tags defined by {function}
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Function_Call Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles the calls of user defined tags defined by {function}
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- // save possible attributes
- if (isset($_attr[ 'assign' ])) {
- // output will be stored in a smarty variable instead of being displayed
- $_assign = $_attr[ 'assign' ];
- }
- //$_name = trim($_attr['name'], "''");
- $_name = $_attr[ 'name' ];
- unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'nocache' ]);
- // set flag (compiled code of {function} must be included in cache file
- if (!$compiler->template->caching || $compiler->nocache || $compiler->tag_nocache) {
- $_nocache = 'true';
- } else {
- $_nocache = 'false';
- }
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- //$compiler->suppressNocacheProcessing = true;
- // was there an assign attribute
- if (isset($_assign)) {
- $_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 {
- $_output =
- "<?php \$_smarty_tpl->smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});?>\n";
- }
- return $_output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php
deleted file mode 100644
index a4ffbc9ea..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Capture
- * Compiles the {capture} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Capture Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('name', 'assign', 'append');
-
- /**
- * 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
- */
- public static function compileSpecialVariable(
- $args,
- Smarty_Internal_TemplateCompilerBase $compiler,
- $parameter = null
- ) {
- return '$_smarty_tpl->smarty->ext->_capture->getBuffer($_smarty_tpl' .
- (isset($parameter[ 1 ]) ? ", {$parameter[ 1 ]})" : ')');
- }
-
- /**
- * Compiles code for the {capture} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param null $parameter
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args, $parameter, 'capture');
- $buffer = isset($_attr[ 'name' ]) ? $_attr[ 'name' ] : "'default'";
- $assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : 'null';
- $append = isset($_attr[ 'append' ]) ? $_attr[ 'append' ] : 'null';
- $compiler->_cache[ 'capture_stack' ][] = array($compiler->nocache);
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- $_output = "<?php \$_smarty_tpl->smarty->ext->_capture->open(\$_smarty_tpl, $buffer, $assign, $append);?>";
- return $_output;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Captureclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/capture} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param null $parameter
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args, $parameter, '/capture');
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($compiler->nocache) = array_pop($compiler->_cache[ 'capture_stack' ]);
- return "<?php \$_smarty_tpl->smarty->ext->_capture->close(\$_smarty_tpl);?>";
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php
deleted file mode 100644
index f728c18bf..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?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 Compile Child Class
- *
- * @author Uwe Tews <uwe.tews@googlemail.com>
- */
-class Smarty_Internal_Compile_Child extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('assign');
-
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'child';
-
- /**
- * Block type
- *
- * @var string
- */
- public $blockType = 'Child';
-
- /**
- * Compiles code for the {child} 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);
- $tag = isset($parameter[ 0 ]) ? "'{$parameter[0]}'" : "'{{$this->tag}}'";
- if (!isset($compiler->_cache[ 'blockNesting' ])) {
- $compiler->trigger_template_error(
- "{$tag} used outside {block} tags ",
- $compiler->parser->lex->taglineno
- );
- }
- $compiler->has_code = true;
- $compiler->suppressNocacheProcessing = true;
- if ($this->blockType === 'Child') {
- $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ][ 'callsChild' ] = 'true';
- }
- $_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
- $output = "<?php \n";
- if (isset($_assign)) {
- $output .= "ob_start();\n";
- }
- $output .= '$_smarty_tpl->inheritance->call' . $this->blockType . '($_smarty_tpl, $this' .
- ($this->blockType === 'Child' ? '' : ", {$tag}") . ");\n";
- if (isset($_assign)) {
- $output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
- }
- $output .= "?>\n";
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php
deleted file mode 100644
index 8fe64ee10..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Config Load
- * Compiles the {config load} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Config Load Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Config_Load extends 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', 'section');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('section', 'scope');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $option_flags = array('nocache', 'noscope');
-
- /**
- * Valid scope names
- *
- * @var array
- */
- public $valid_scopes = array(
- 'local' => Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT,
- 'root' => Smarty::SCOPE_ROOT, 'tpl_root' => Smarty::SCOPE_TPL_ROOT,
- 'smarty' => Smarty::SCOPE_SMARTY, 'global' => Smarty::SCOPE_SMARTY
- );
-
- /**
- * Compiles code for the {config_load} tag
- *
- * @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, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', null, true);
- }
- // save possible attributes
- $conf_file = $_attr[ 'file' ];
- if (isset($_attr[ 'section' ])) {
- $section = $_attr[ 'section' ];
- } else {
- $section = 'null';
- }
- // scope setup
- if ($_attr[ 'noscope' ]) {
- $_scope = -1;
- } else {
- $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
- }
- // create config object
- $_output =
- "<?php\n\$_smarty_tpl->smarty->ext->configLoad->_loadConfigFile(\$_smarty_tpl, {$conf_file}, {$section}, {$_scope});\n?>\n";
- return $_output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php
deleted file mode 100644
index e545728ee..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Continue
- * Compiles the {continue} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Continue Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Continue extends Smarty_Internal_Compile_Break
-{
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'continue';
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php
deleted file mode 100644
index 799416689..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Debug
- * Compiles the {debug} tag.
- * It opens a window the the Smarty Debugging Console.
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Debug Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-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
- *
- * @return string compiled code
- */
- public function compile($args, $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- // compile always as nocache
- $compiler->tag_nocache = true;
- // display debug template
- $_output =
- "<?php \$_smarty_debug = new Smarty_Internal_Debug;\n \$_smarty_debug->display_debug(\$_smarty_tpl);\n";
- $_output .= "unset(\$_smarty_debug);\n?>";
- return $_output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php
deleted file mode 100644
index 8e0174e3e..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Eval
- * Compiles the {eval} tag.
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Eval Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('var');
-
- /**
- * 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
- */
- 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
- *
- * @return string compiled code
- */
- public function compile($args, $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if (isset($_attr[ 'assign' ])) {
- // 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);";
- //was there an assign attribute?
- if (isset($_assign)) {
- $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
- } else {
- $_output .= 'echo $_template->fetch();';
- }
- return "<?php $_output ?>";
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php
deleted file mode 100644
index 69a7b5521..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/**
- * 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_Compile_Shared_Inheritance
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = 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();
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('file');
-
- /**
- * 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)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->line - 1);
- }
- if (strpos($_attr[ 'file' ], '$_tmp') !== false) {
- $compiler->trigger_template_error('illegal value for file attribute', $compiler->parser->lex->line - 1);
- }
- // add code to initialize inheritance
- $this->registerInit($compiler, true);
- $this->compileEndChild($compiler, $_attr[ 'file' ]);
- $compiler->has_code = false;
- return '';
- }
-
- /**
- * Add code for inheritance endChild() method to end of template
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param null|string $template optional inheritance parent template
- *
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler, $template = null)
- {
- $inlineUids = '';
- if (isset($template) && $compiler->smarty->merge_compiled_includes) {
- $code = $compiler->compileTag('include', array($template, array('scope' => 'parent')));
- if (preg_match('/([,][\s]*[\'][a-z0-9]+[\'][,][\s]*[\']content.*[\'])[)]/', $code, $match)) {
- $inlineUids = $match[ 1 ];
- }
- }
- $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- '<?php $_smarty_tpl->inheritance->endChild($_smarty_tpl' .
- (isset($template) ?
- ", {$template}{$inlineUids}" :
- '') . ");\n?>"
- );
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php
deleted file mode 100644
index 969e22c1a..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile For
- * Compiles the {for} {forelse} {/for} tags
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile For Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {for} tag
- * Smarty supports 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.
- *
- * @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');
- } else {
- $this->required_attributes = array('start', 'ifexp', 'var', 'step');
- $this->optional_attributes = array();
- }
- $this->mapCache = array();
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $output = "<?php\n";
- if ($parameter === 1) {
- foreach ($_attr[ 'start' ] as $_statement) {
- 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(null, \$_smarty_tpl->isRenderingCache);\n";
- $output .= "\$_smarty_tpl->tpl_vars[$var]->value{$index} = {$_statement['value']};\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' ];
- 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(null, \$_smarty_tpl->isRenderingCache);";
- if (isset($_attr[ 'step' ])) {
- $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];";
- } else {
- $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;";
- }
- if (isset($_attr[ 'max' ])) {
- $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[$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[$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 .= '?>';
- $this->openTag($compiler, 'for', array('for', $compiler->nocache));
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- // return compiled code
- return $output;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Forelse Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-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
- *
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
- {
- // check and get attributes
- $_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
- * @subpackage Compiler
- */
-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
- *
- * @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?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse'));
- $output = "<?php }\n";
- if ($openTag !== 'forelse') {
- $output .= "}\n";
- }
- $output .= "?>";
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php
deleted file mode 100644
index edfe358be..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php
+++ /dev/null
@@ -1,343 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Foreach
- * Compiles the {foreach} {foreachelse} {/foreach} tags
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Foreach Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_ForeachSection
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('from', 'item');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('name', 'key', 'properties');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $compiler->loopNesting++;
- // init
- $this->isNamed = false;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $from = $_attr[ 'from' ];
- $item = $compiler->getId($_attr[ 'item' ]);
- if ($item === false) {
- $item = $compiler->getVariableName($_attr[ 'item' ]);
- }
- $key = $name = null;
- $attributes = array('item' => $item);
- if (isset($_attr[ 'key' ])) {
- $key = $compiler->getId($_attr[ 'key' ]);
- if ($key === false) {
- $key = $compiler->getVariableName($_attr[ 'key' ]);
- }
- $attributes[ 'key' ] = $key;
- }
- if (isset($_attr[ 'name' ])) {
- $this->isNamed = true;
- $name = $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_' . $attributes[ 'item' ] . '_' . $this->counter++ . '_';
- // 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($_attr[ 'properties' ]) && preg_match_all('/[\'](.*?)[\']/', $_attr[ 'properties' ], $match)) {
- foreach ($match[ 1 ] as $prop) {
- if (in_array($prop, $this->itemProperties)) {
- $itemAttr[ $prop ] = true;
- } else {
- $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
- }
- }
- if ($this->isNamed) {
- foreach ($match[ 1 ] as $prop) {
- if (in_array($prop, $this->nameProperties)) {
- $nameAttr[ $prop ] = true;
- } else {
- $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
- }
- }
- }
- }
- if (isset($itemAttr[ 'first' ])) {
- $itemAttr[ 'index' ] = true;
- }
- if (isset($namedAttr[ 'first' ])) {
- $namedAttr[ 'index' ] = true;
- }
- if (isset($namedAttr[ 'last' ])) {
- $namedAttr[ 'iteration' ] = true;
- $namedAttr[ 'total' ] = true;
- }
- if (isset($itemAttr[ 'last' ])) {
- $itemAttr[ 'iteration' ] = true;
- $itemAttr[ 'total' ] = true;
- }
- if (isset($namedAttr[ 'show' ])) {
- $namedAttr[ 'total' ] = true;
- }
- if (isset($itemAttr[ 'show' ])) {
- $itemAttr[ 'total' ] = true;
- }
- $keyTerm = '';
- if (isset($attributes[ 'key' ])) {
- $keyTerm = "\$_smarty_tpl->tpl_vars['{$key}']->value => ";
- }
- if (isset($itemAttr[ 'key' ])) {
- $keyTerm = "{$itemVar}->key => ";
- }
- if ($this->isNamed) {
- $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']";
- }
- $needTotal = isset($itemAttr[ 'total' ]);
- // Register tag
- $this->openTag(
- $compiler,
- 'foreach',
- array('foreach', $compiler->nocache, $local, $itemVar, empty($itemAttr) ? 1 : 2)
- );
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- // generate output code
- $output = "<?php\n";
- $output .= "\$_from = \$_smarty_tpl->smarty->ext->_foreach->init(\$_smarty_tpl, $from, " .
- var_export($item, true);
- if ($name || $needTotal || $key) {
- $output .= ', ' . var_export($needTotal, true);
- }
- if ($name || $key) {
- $output .= ', ' . var_export($key, true);
- }
- if ($name) {
- $output .= ', ' . var_export($name, true) . ', ' . var_export($namedAttr, true);
- }
- $output .= ");\n";
- if (isset($itemAttr[ 'show' ])) {
- $output .= "{$itemVar}->show = ({$itemVar}->total > 0);\n";
- }
- if (isset($itemAttr[ 'iteration' ])) {
- $output .= "{$itemVar}->iteration = 0;\n";
- }
- if (isset($itemAttr[ 'index' ])) {
- $output .= "{$itemVar}->index = -1;\n";
- }
- $output .= "{$itemVar}->do_else = true;\n";
- $output .= "if (\$_from !== null) foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n";
- $output .= "{$itemVar}->do_else = false;\n";
- if (isset($attributes[ 'key' ]) && isset($itemAttr[ 'key' ])) {
- $output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n";
- }
- if (isset($itemAttr[ 'iteration' ])) {
- $output .= "{$itemVar}->iteration++;\n";
- }
- if (isset($itemAttr[ 'index' ])) {
- $output .= "{$itemVar}->index++;\n";
- }
- if (isset($itemAttr[ 'first' ])) {
- $output .= "{$itemVar}->first = !{$itemVar}->index;\n";
- }
- if (isset($itemAttr[ 'last' ])) {
- $output .= "{$itemVar}->last = {$itemVar}->iteration === {$itemVar}->total;\n";
- }
- if (isset($foreachVar)) {
- if (isset($namedAttr[ 'iteration' ])) {
- $output .= "{$foreachVar}->value['iteration']++;\n";
- }
- if (isset($namedAttr[ 'index' ])) {
- $output .= "{$foreachVar}->value['index']++;\n";
- }
- if (isset($namedAttr[ 'first' ])) {
- $output .= "{$foreachVar}->value['first'] = !{$foreachVar}->value['index'];\n";
- }
- if (isset($namedAttr[ 'last' ])) {
- $output .= "{$foreachVar}->value['last'] = {$foreachVar}->value['iteration'] === {$foreachVar}->value['total'];\n";
- }
- }
- if (!empty($itemAttr)) {
- $output .= "{$local}saved = {$itemVar};\n";
- }
- $output .= '?>';
- return $output;
- }
-
- /**
- * Compiles code for to restore saved template variables
- *
- * @param int $levels number of levels to restore
- *
- * @return string compiled code
- */
- public function compileRestore($levels)
- {
- return "\$_smarty_tpl->smarty->ext->_foreach->restore(\$_smarty_tpl, {$levels});";
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Foreachelse Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {foreachelse} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- list($openTag, $nocache, $local, $itemVar, $restore) = $this->closeTag($compiler, array('foreach'));
- $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $itemVar, 0));
- $output = "<?php\n";
- if ($restore === 2) {
- $output .= "{$itemVar} = {$local}saved;\n";
- }
- $output .= "}\nif ({$itemVar}->do_else) {\n?>";
- return $output;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Foreachclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/foreach} tag
- *
- * @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, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $compiler->loopNesting--;
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list(
- $openTag, $compiler->nocache, $local, $itemVar, $restore
- ) = $this->closeTag($compiler, array('foreach', 'foreachelse'));
- $output = "<?php\n";
- if ($restore === 2) {
- $output .= "{$itemVar} = {$local}saved;\n";
- }
- $output .= "}\n";
- /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
- $foreachCompiler = $compiler->getTagCompiler('foreach');
- $output .= $foreachCompiler->compileRestore(1);
- $output .= "?>";
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php
deleted file mode 100644
index b05a82b74..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php
+++ /dev/null
@@ -1,236 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Function
- * Compiles the {function} {/function} tags
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Function Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the {function} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return bool true
- * @throws \SmartyCompilerException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', null, true);
- }
- unset($_attr[ 'nocache' ]);
- $_name = trim($_attr[ 'name' ], '\'"');
-
- if (!preg_match('/^[a-zA-Z0-9_\x80-\xff]+$/', $_name)) {
- $compiler->trigger_template_error("Function name contains invalid characters: {$_name}", null, true);
- }
-
- $compiler->parent_compiler->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;
- $compiler->saveRequiredPlugins(true);
- return true;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Functionclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-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|\Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return bool true
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $this->compiler = $compiler;
- $saved_data = $this->closeTag($compiler, array('function'));
- $_attr = $saved_data[ 0 ];
- $_name = trim($_attr[ 'name' ], '\'"');
- $compiler->parent_compiler->tpl_function[ $_name ][ 'compiled_filepath' ] =
- $compiler->parent_compiler->template->compiled->filepath;
- $compiler->parent_compiler->tpl_function[ $_name ][ 'uid' ] = $compiler->template->source->uid;
- $_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";
- }
- }
- 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' ] = $_funcNameCaching;
- $output = "<?php\n";
- $output .= $compiler->cStyleComment(" {$_funcNameCaching} ") . "\n";
- $output .= "if (!function_exists('{$_funcNameCaching}')) {\n";
- $output .= "function {$_funcNameCaching} (Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
- $output .= "ob_start();\n";
- $output .= $compiler->compileRequiredPlugins();
- $output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n";
- $output .= $_paramsCode;
- $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
- $output .= "\$params = var_export(\$params, true);\n";
- $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php ";
- $output .= "\\\$_smarty_tpl->smarty->ext->_tplFunction->saveTemplateVariables(\\\$_smarty_tpl, '{$_name}');\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value, \\\$_smarty_tpl->isRenderingCache);\n}\n?>";
- $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";?>";
- $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 .= "\\\$_smarty_tpl->smarty->ext->_tplFunction->restoreTemplateVariables(\\\$_smarty_tpl, '{$_name}');?>\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 .= "}\n}\n";
- $output .= $compiler->cStyleComment("/ {$_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' ] = $_funcName;
- $output = "<?php\n";
- $output .= $compiler->cStyleComment(" {$_funcName} ") . "\n";
- $output .= "if (!function_exists('{$_funcName}')) {\n";
- $output .= "function {$_funcName}(Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
- $output .= $_paramsCode;
- $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
- $output .= $compiler->compileCheckPlugins(array_merge($compiler->required_plugins[ 'compiled' ],
- $compiler->required_plugins[ 'nocache' ]));
- $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}}\n";
- $output .= $compiler->cStyleComment("/ {$_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);
- // restore old buffer
- $compiler->parser->current_buffer = $saved_data[ 1 ];
- // restore old status
- $compiler->restoreRequiredPlugins();
- $compiler->template->compiled->has_nocache_code = $saved_data[ 2 ];
- $compiler->template->caching = $saved_data[ 3 ];
- return true;
- }
-
- /**
- * Remove nocache code
- *
- * @param $match
- *
- * @return string
- */
- public 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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php
deleted file mode 100644
index df3dc3fad..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php
+++ /dev/null
@@ -1,207 +0,0 @@
-<?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 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 \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);
- $this->openTag($compiler, 'if', array(1, $compiler->nocache));
- // must whole block be nocache ?
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- if (!isset($parameter[ 'if condition' ])) {
- $compiler->trigger_template_error('missing if condition', null, true);
- }
- if (is_array($parameter[ 'if condition' ])) {
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- } else {
- $var = $parameter[ 'if condition' ][ 'var' ];
- }
- if ($compiler->nocache) {
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($var);
- }
- $prefixVar = $compiler->getNewPrefixVariable();
- $_output = "<?php {$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]};?>\n";
- $assignAttr = array();
- $assignAttr[][ 'value' ] = $prefixVar;
- $assignCompiler = new Smarty_Internal_Compile_Assign();
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- $_output .= $assignCompiler->compile(
- $assignAttr,
- $compiler,
- array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
- );
- } else {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
- $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
- }
- $_output .= "<?php if ({$prefixVar}) {?>";
- return $_output;
- } else {
- 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
-{
- /**
- * Compiles code for the {else} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
- $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache));
- return '<?php } else { ?>';
- }
-}
-
-/**
- * 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 \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 (!isset($parameter[ 'if condition' ])) {
- $compiler->trigger_template_error('missing elseif condition', null, true);
- }
- $assignCode = '';
- $var = '';
- if (is_array($parameter[ 'if condition' ])) {
- $condition_by_assign = true;
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- } else {
- $var = $parameter[ 'if condition' ][ 'var' ];
- }
- if ($compiler->nocache) {
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($var);
- }
- $prefixVar = $compiler->getNewPrefixVariable();
- $assignCode = "<?php {$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]};?>\n";
- $assignCompiler = new Smarty_Internal_Compile_Assign();
- $assignAttr = array();
- $assignAttr[][ 'value' ] = $prefixVar;
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- $assignCode .= $assignCompiler->compile(
- $assignAttr,
- $compiler,
- array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
- );
- } else {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
- $assignCode .= $assignCompiler->compile($assignAttr, $compiler, array());
- }
- } else {
- $condition_by_assign = false;
- }
- $prefixCode = $compiler->getPrefixCode();
- if (empty($prefixCode)) {
- if ($condition_by_assign) {
- $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
- $_output = $compiler->appendCode("<?php } else {\n?>", $assignCode);
- return $compiler->appendCode($_output, "<?php if ({$prefixVar}) {?>");
- } else {
- $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache));
- return "<?php } elseif ({$parameter['if condition']}) {?>";
- }
- } else {
- $_output = $compiler->appendCode("<?php } else {\n?>", $prefixCode);
- $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
- if ($condition_by_assign) {
- $_output = $compiler->appendCode($_output, $assignCode);
- return $compiler->appendCode($_output, "<?php if ({$prefixVar}) {?>");
- } else {
- return $compiler->appendCode($_output, "<?php if ({$parameter['if condition']}) {?>");
- }
- }
- }
-}
-
-/**
- * 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif'));
- $tmp = '';
- for ($i = 0; $i < $nesting; $i++) {
- $tmp .= '}';
- }
- return "<?php {$tmp}?>";
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php
deleted file mode 100644
index bf62461bc..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php
+++ /dev/null
@@ -1,347 +0,0 @@
-<?php
-/**
- * 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
-{
- /**
- * 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
- */
- public $required_attributes = array('file');
-
- /**
- * 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 $optional_attributes = array('_any');
-
- /**
- * Valid scope names
- *
- * @var array
- */
- public $valid_scopes = array(
- 'parent' => Smarty::SCOPE_PARENT, 'root' => Smarty::SCOPE_ROOT,
- 'global' => Smarty::SCOPE_GLOBAL, 'tpl_root' => Smarty::SCOPE_TPL_ROOT,
- 'smarty' => Smarty::SCOPE_SMARTY
- );
-
- /**
- * Compiles code for the {include} tag
- *
- * @param array $args array with attributes from parser
- * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object
- *
- * @return string
- * @throws \Exception
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler)
- {
- $uid = $t_hash = null;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $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 {
- if ("{$compiler->template->source->type}:{$compiler->template->source->name}" ==
- $fullResourceName
- ) {
- // recursive call of current template
- $compiled->includes[ $fullResourceName ] = 2;
- $cache_tpl = true;
- } else {
- $compiled->includes[ $fullResourceName ] = 1;
- }
- }
- $fullResourceName = $match[ 1 ] . $fullResourceName . $match[ 1 ];
- }
- }
- if (empty($match[ 5 ])) {
- $variable_template = true;
- }
- } else {
- $variable_template = true;
- }
- // scope setup
- $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
- // 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';
- }
- // assume caching is off
- $_caching = Smarty::CACHING_OFF;
- $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) {
- // variable template name ?
- if ($variable_template) {
- $merge_compiled_includes = false;
- }
- // variable compile_id?
- if (isset($_attr[ 'compile_id' ]) && $compiler->isVariable($_attr[ 'compile_id' ])) {
- $merge_compiled_includes = false;
- }
- }
- /*
- * 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' ];
- $call_nocache = true;
- $_caching = $_new_caching;
- } else {
- $_cache_lifetime = '$_smarty_tpl->cache_lifetime';
- }
- if (isset($_attr[ 'cache_id' ])) {
- $_cache_id = $_attr[ 'cache_id' ];
- $call_nocache = true;
- $_caching = $_new_caching;
- } else {
- $_cache_id = '$_smarty_tpl->cache_id';
- }
- if (isset($_attr[ 'compile_id' ])) {
- $_compile_id = $_attr[ 'compile_id' ];
- } else {
- $_compile_id = '$_smarty_tpl->compile_id';
- }
- // if subtemplate will be called in nocache mode do not merge
- if ($compiler->template->caching && $call_nocache) {
- $merge_compiled_includes = false;
- }
- // assign attribute
- if (isset($_attr[ 'assign' ])) {
- // output will be stored in a smarty variable instead of being displayed
- if ($_assign = $compiler->getId($_attr[ 'assign' ])) {
- $_assign = "'{$_assign}'";
- if ($compiler->tag_nocache || $compiler->nocache || $call_nocache) {
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($_attr[ 'assign' ]);
- }
- } else {
- $_assign = $_attr[ 'assign' ];
- }
- }
- $has_compiled_template = false;
- 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'));
- $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
- );
- $uid = $tpl->source->type . $tpl->source->uid;
- if (!isset($compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ])) {
- $has_compiled_template = $this->compileInlineTemplate($compiler, $tpl, $t_hash);
- } else {
- $has_compiled_template = true;
- }
- unset($tpl);
- }
- // 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' ]);
- // remaining attributes must be assigned as smarty variable
- $_vars = 'array()';
- if (!empty($_attr)) {
- $_pairs = array();
- // create variables
- foreach ($_attr as $key => $value) {
- $_pairs[] = "'$key'=>$value";
- }
- $_vars = 'array(' . join(',', $_pairs) . ')';
- }
- $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($_attr) && $_caching === 9999 && $compiler->template->caching) {
- $_vars_nc = "foreach ($_vars as \$ik => \$iv) {\n";
- $_vars_nc .= "\$_smarty_tpl->tpl_vars[\$ik] = new Smarty_Variable(\$iv);\n";
- $_vars_nc .= "}\n";
- $_output .= substr($compiler->processNocacheCode('<?php ' . $_vars_nc . "?>\n", true), 6, -3);
- }
- if (isset($_assign)) {
- $_output .= "ob_start();\n";
- }
- $_output .= "\$_smarty_tpl->_subTemplateRender({$fullResourceName}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_scope}, {$_cache_tpl}, '{$compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['uid']}', '{$compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['func']}');\n";
- if (isset($_assign)) {
- $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
- }
- if ($update_compile_id) {
- $_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n");
- }
- $_output .= "?>";
- 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 .= "ob_start();\n";
- }
- $_output .= "\$_smarty_tpl->_subTemplateRender({$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 .= "?>";
- return $_output;
- }
-
- /**
- * Compile inline sub template
- *
- * @param \Smarty_Internal_SmartyTemplateCompiler $compiler
- * @param \Smarty_Internal_Template $tpl
- * @param string $t_hash
- *
- * @return bool
- * @throws \Exception
- * @throws \SmartyException
- */
- public function compileInlineTemplate(
- Smarty_Internal_SmartyTemplateCompiler $compiler,
- Smarty_Internal_Template $tpl,
- $t_hash
- ) {
- $uid = $tpl->source->type . $tpl->source->uid;
- if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) {
- $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $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[ $uid ][ $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[ $uid ][ $t_hash ][ 'nocache_hash' ] =
- $tpl->compiled->nocache_hash;
- if ($tpl->source->type === 'file') {
- $sourceInfo = $tpl->source->filepath;
- } else {
- $basename = $tpl->source->handler->getBasename($tpl->source);
- $sourceInfo = $tpl->source->type . ':' .
- ($basename ? $basename : $tpl->source->name);
- }
- // get compiled code
- $compiled_code = "<?php\n\n";
- $compiled_code .= $compiler->cStyleComment(" Start inline template \"{$sourceInfo}\" =============================") . "\n";
- $compiled_code .= "function {$tpl->compiled->unifunc} (Smarty_Internal_Template \$_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 .= $compiler->cStyleComment(" End inline template \"{$sourceInfo}\" =============================") . "\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;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php
deleted file mode 100644
index 29031d910..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Insert
- * Compiles the {insert} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Insert Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the {insert} tag
- *
- * @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)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $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 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 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' ] . ';');
- if (!isset($compiler->smarty->security_policy) && file_exists($_script)) {
- $_filepath = $_script;
- } else {
- if (isset($compiler->smarty->security_policy)) {
- $_dir = $compiler->smarty->security_policy->trusted_dir;
- } else {
- $_dir = null;
- }
- if (!empty($_dir)) {
- foreach ((array)$_dir as $_script_dir) {
- $_script_dir = rtrim($_script_dir ?? '', '/\\') . DIRECTORY_SEPARATOR;
- if (file_exists($_script_dir . $_script)) {
- $_filepath = $_script_dir . $_script;
- break;
- }
- }
- }
- }
- if ($_filepath === false) {
- $compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true);
- }
- // code for script file loading
- $_output .= "require_once '{$_filepath}' ;";
- include_once $_filepath;
- if (!is_callable($_function)) {
- $compiler->trigger_template_error(
- " {insert} function '{$_function}' is not callable in script file '{$_script}'",
- null,
- true
- );
- }
- } else {
- $_filepath = 'null';
- $_function = "insert_{$_name}";
- // function in PHP script ?
- if (!is_callable($_function)) {
- // try plugin
- if (!$_function = $compiler->getPlugin($_name, 'insert')) {
- $compiler->trigger_template_error(
- "{insert} no function or plugin found for '{$_name}'",
- null,
- true
- );
- }
- }
- }
- // delete {insert} standard attributes
- unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'script' ], $_attr[ 'nocache' ]);
- // convert attributes into parameter array string
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- $_paramsArray[] = "'$_key' => $_value";
- }
- $_params = 'array(' . implode(", ", $_paramsArray) . ')';
- // call insert
- if (isset($_assign)) {
- 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 {
- if ($_smarty_tpl->caching && !$nocacheParam) {
- $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>";
- } else {
- $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
- }
- }
- $compiler->template->compiled->has_nocache_code = true;
- return $_output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
deleted file mode 100644
index 5493d4ecc..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Ldelim
- * Compiles the {ldelim} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Ldelim Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- 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', null, true);
- }
- return $compiler->smarty->left_delimiter;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php
deleted file mode 100644
index 8a34ccd0a..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Make_Nocache
- * Compiles the {make_nocache} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Make_Nocache Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Make_Nocache extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $option_flags = array();
-
- /**
- * Array of names of required attribute required by tag
- *
- * @var array
- */
- public $required_attributes = array('var');
-
- /**
- * Shorttag attribute order defined by its names
- *
- * @var array
- */
- public $shorttag_order = array('var');
-
- /**
- * Compiles code for the {make_nocache} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($compiler->template->caching) {
- $output = "<?php \$_smarty_tpl->smarty->ext->_make_nocache->save(\$_smarty_tpl, {$_attr[ 'var' ]});\n?>\n";
- $compiler->template->compiled->has_nocache_code = true;
- $compiler->suppressNocacheProcessing = true;
- return $output;
- } else {
- return true;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php
deleted file mode 100644
index 12f64ed2e..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Nocache
- * Compiles the {nocache} {/nocache} tags.
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Nocache Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return bool
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $_attr = $this->getAttributes($compiler, $args);
- $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
- * @subpackage Compiler
- */
-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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return bool
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $_attr = $this->getAttributes($compiler, $args);
- // leave nocache mode
- list($compiler->nocache) = $this->closeTag($compiler, array('nocache'));
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php
deleted file mode 100644
index ff23edf73..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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 Compile Parent Class
- *
- * @author Uwe Tews <uwe.tews@googlemail.com>
- */
-class Smarty_Internal_Compile_Parent extends Smarty_Internal_Compile_Child
-{
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'parent';
-
- /**
- * Block type
- *
- * @var string
- */
- public $blockType = 'Parent';
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
deleted file mode 100644
index 199a296c8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Block Plugin
- * Compiles code for the execution of block plugin
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Block Plugin Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * nesting level
- *
- * @var int
- */
- public $nesting = 0;
-
- /**
- * Compiles code for the execution of block plugin
- *
- * @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
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function = null)
- {
- if (!isset($tag[ 5 ]) || substr($tag, -5) !== 'close') {
- // opening tag of block plugin
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $this->nesting++;
- unset($_attr[ 'nocache' ]);
- list($callback, $_paramsArray, $callable) = $this->setup($compiler, $_attr, $tag, $function);
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- // compile code
- $output = "<?php ";
- if (is_array($callback)) {
- $output .= "\$_block_plugin{$this->nesting} = isset({$callback[0]}) ? {$callback[0]} : null;\n";
- $callback = "\$_block_plugin{$this->nesting}{$callback[1]}";
- }
- if (isset($callable)) {
- $output .= "if (!is_callable({$callable})) {\nthrow new SmartyException('block tag \'{$tag}\' not callable or registered');\n}\n";
- }
- $output .= "\$_smarty_tpl->smarty->_cache['_tag_stack'][] = array('{$tag}', {$_params});\n";
- $output .= "\$_block_repeat=true;\necho {$callback}({$_params}, null, \$_smarty_tpl, \$_block_repeat);\nwhile (\$_block_repeat) {\nob_start();?>";
- $this->openTag($compiler, $tag, array($_params, $compiler->nocache, $callback));
- // maybe nocache because of nocache variables or nocache plugin
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- } else {
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- // closing tag of block plugin, restore nocache
- list($_params, $compiler->nocache, $callback) = $this->closeTag($compiler, substr($tag, 0, -5));
- // compile code
- if (!isset($parameter[ 'modifier_list' ])) {
- $mod_pre = $mod_post = $mod_content = '';
- $mod_content2 = 'ob_get_clean()';
- } else {
- $mod_content2 = "\$_block_content{$this->nesting}";
- $mod_content = "\$_block_content{$this->nesting} = ob_get_clean();\n";
- $mod_pre = "ob_start();\n";
- $mod_post = 'echo ' . $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifier_list' ],
- 'value' => 'ob_get_clean()'
- )
- ) . ";\n";
- }
- $output =
- "<?php {$mod_content}\$_block_repeat=false;\n{$mod_pre}echo {$callback}({$_params}, {$mod_content2}, \$_smarty_tpl, \$_block_repeat);\n{$mod_post}}\n";
- $output .= 'array_pop($_smarty_tpl->smarty->_cache[\'_tag_stack\']);?>';
- }
- return $output;
- }
-
- /**
- * Setup callback and parameter array
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param array $_attr attributes
- * @param string $tag
- * @param string $function
- *
- * @return array
- */
- public function setup(Smarty_Internal_TemplateCompilerBase $compiler, $_attr, $tag, $function)
- {
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- return array($function, $_paramsArray, null);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
deleted file mode 100644
index 246350dc8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?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
-{
- /**
- * 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();
-
- /**
- * Preg search pattern
- *
- * @var string
- */
- private $propertyPreg = '';
-
- /**
- * Offsets in preg match result
- *
- * @var array
- */
- private $resultOffsets = array();
-
- /**
- * Start offset
- *
- * @var int
- */
- private $startOffset = 0;
-
- /**
- * Scan sources for used tag attributes
- *
- * @param array $attributes
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- *
- * @throws \SmartyException
- */
- public function scanForProperties($attributes, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $this->propertyPreg = '~(';
- $this->startOffset = 1;
- $this->resultOffsets = array();
- $this->matchResults = array('named' => array(), 'item' => array());
- if (isset($attributes[ 'name' ])) {
- $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 = $this->startOffset + 3;
- $this->propertyPreg .= "(([\$]smarty[.]{$this->tagName}[.]" .
- ($this->tagName === 'section' ? "|[\[]\s*" : '') .
- "){$attributes['name']}[.](";
- $properties = $this->nameProperties;
- } else {
- $this->resultOffsets[ 'item' ] = $this->startOffset = $this->startOffset + 2;
- $this->propertyPreg .= "([\$]{$attributes['item']}[@](";
- $properties = $this->itemProperties;
- }
- $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);
- foreach ($this->resultOffsets as $key => $offset) {
- foreach ($match[ $offset ] as $m) {
- if (!empty($m)) {
- $this->matchResults[ $key ][ smarty_strtolower_ascii($m) ] = 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
- *
- * @throws \SmartyException
- */
- 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->_filterHandler->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 = smarty_strtolower_ascii(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 ]) ? smarty_strtolower_ascii($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)";
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
deleted file mode 100644
index 055823423..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Function Plugin
- * Compiles code for the execution of function plugin
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Function Plugin Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array();
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the execution of function plugin
- *
- * @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
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- unset($_attr[ 'nocache' ]);
- // convert attributes into parameter array string
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- // compile code
- $output = "{$function}({$_params},\$_smarty_tpl)";
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifierlist' ],
- 'value' => $output
- )
- );
- }
- $output = "<?php echo {$output};?>\n";
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
deleted file mode 100644
index 31fd6e1da..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Modifier
- * Compiles code for modifier execution
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Modifier Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for modifier execution
- *
- * @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
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $output = $parameter[ 'value' ];
- // loop over list of modifiers
- foreach ($parameter[ 'modifierlist' ] as $single_modifier) {
- /* @var string $modifier */
- $modifier = $single_modifier[ 0 ];
- $single_modifier[ 0 ] = $output;
- $params = implode(',', $single_modifier);
- // check if we know already the type of modifier
- if (isset($compiler->known_modifier_type[ $modifier ])) {
- $modifier_types = array($compiler->known_modifier_type[ $modifier ]);
- } else {
- $modifier_types = array(1, 2, 3, 4, 5, 6);
- }
- foreach ($modifier_types as $type) {
- switch ($type) {
- case 1:
- // registered modifier
- if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])) {
- if (is_callable($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ])) {
- $output =
- sprintf(
- 'call_user_func_array($_smarty_tpl->registered_plugins[ \'%s\' ][ %s ][ 0 ], array( %s ))',
- Smarty::PLUGIN_MODIFIER,
- var_export($modifier, true),
- $params
- );
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- }
- break;
- case 2:
- // registered modifier compiler
- if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ])) {
- $output =
- call_user_func(
- $compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ],
- $single_modifier,
- $compiler->smarty
- );
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- break;
- case 3:
- // 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)
- ) {
- $plugin = 'smarty_modifiercompiler_' . $modifier;
- $output = $plugin($single_modifier, $compiler);
- }
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- break;
- case 4:
- // 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)
- ) {
- $output = "{$function}({$params})";
- }
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- break;
- case 5:
- // 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 (!in_array($modifier, ['time', 'join', 'is_array', 'in_array'])) {
- trigger_error('Using unregistered function "' . $modifier . '" in a template is deprecated and will be ' .
- 'removed in a future release. Use Smarty::registerPlugin to explicitly register ' .
- 'a custom modifier.', E_USER_DEPRECATED);
- }
- $output = "{$modifier}({$params})";
- }
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- 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))
- ) {
- $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_array($function)) {
- $output = "{$function}({$params})";
- } else {
- if (is_object($function[ 0 ])) {
- $output = $function[ 0 ] . '->' . $function[ 1 ] . '(' . $params . ')';
- } else {
- $output = $function[ 0 ] . '::' . $function[ 1 ] . '(' . $params . ')';
- }
- }
- }
- if (isset($compiler->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
- ||
- isset($compiler->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
- ) {
- // was a plugin
- $compiler->known_modifier_type[ $modifier ] = 4;
- } else {
- $compiler->known_modifier_type[ $modifier ] = $type;
- }
- break 2;
- }
- }
- }
- if (!isset($compiler->known_modifier_type[ $modifier ])) {
- $compiler->trigger_template_error("unknown modifier '{$modifier}'", null, true);
- }
- }
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
deleted file mode 100644
index baac51b28..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Object Block Function
- * Compiles code for registered objects as block function
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Object Block Function Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_Compile_Private_Block_Plugin
-{
- /**
- * Setup callback and parameter array
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param array $_attr attributes
- * @param string $tag
- * @param string $method
- *
- * @return array
- */
- public function setup(Smarty_Internal_TemplateCompilerBase $compiler, $_attr, $tag, $method)
- {
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $callback = array("\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]", "->{$method}");
- return array($callback, $_paramsArray, "array(\$_block_plugin{$this->nesting}, '{$method}')");
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
deleted file mode 100644
index 2a763c6e3..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Object Function
- * Compiles code for registered objects as function
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Object Function Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the execution of function plugin
- *
- * @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
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- unset($_attr[ 'nocache' ]);
- $_assign = null;
- if (isset($_attr[ 'assign' ])) {
- $_assign = $_attr[ 'assign' ];
- unset($_attr[ 'assign' ]);
- }
- // method or property ?
- if (is_callable(array($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) . ')';
- $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
- } else {
- $_params = implode(',', $_attr);
- $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
- }
- } else {
- // object property
- $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}";
- }
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array('modifierlist' => $parameter[ 'modifierlist' ], 'value' => $output)
- );
- }
- if (empty($_assign)) {
- return "<?php echo {$output};?>\n";
- } else {
- return "<?php \$_smarty_tpl->assign({$_assign},{$output});?>\n";
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
deleted file mode 100644
index 78f1c0763..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?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 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
- */
- public $optional_attributes = array('assign');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $option_flags = array('nocache', 'nofilter');
-
- /**
- * 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);
- $output = $parameter[ 'value' ];
- // tag modifier
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifierlist' ],
- 'value' => $output
- )
- );
- }
- if (isset($_attr[ 'assign' ])) {
- // assign output to variable
- return "<?php \$_smarty_tpl->assign({$_attr['assign']},{$output});?>";
- } else {
- // display value
- if (!$_attr[ 'nofilter' ]) {
- // default modifier
- if (!empty($compiler->smarty->default_modifiers)) {
- if (empty($compiler->default_modifier_list)) {
- $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++) {
- if ($mod_array[ 0 ][ $i ] !== ':') {
- $modifierlist[ $key ][] = $mod_array[ 0 ][ $i ];
- }
- }
- }
- $compiler->default_modifier_list = $modifierlist;
- }
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $compiler->default_modifier_list,
- 'value' => $output
- )
- );
- }
- // autoescape html
- if ($compiler->template->smarty->escape_html) {
- $output = "htmlspecialchars((string) ({$output}), ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
- }
- // 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) {
- if (!is_array($function)) {
- $output = "{$function}({$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)";
- }
- }
- }
- // auto loaded filters
- if (isset($compiler->smarty->autoload_filters[ Smarty::FILTER_VARIABLE ])) {
- foreach ((array)$compiler->template->smarty->autoload_filters[ Smarty::FILTER_VARIABLE ] as $name) {
- $result = $this->compile_variable_filter($compiler, $name, $output);
- if ($result !== false) {
- $output = $result;
- } else {
- // not found, throw exception
- throw new SmartyException("Unable to load variable filter '{$name}'");
- }
- }
- }
- foreach ($compiler->variable_filters as $filter) {
- if (count($filter) === 1
- && ($result = $this->compile_variable_filter($compiler, $filter[ 0 ], $output)) !== false
- ) {
- $output = $result;
- } else {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array('modifierlist' => array($filter), 'value' => $output)
- );
- }
- }
- }
- $output = "<?php echo {$output};?>\n";
- }
- return $output;
- }
-
- /**
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param string $name name of variable filter
- * @param string $output embedded output
- *
- * @return string
- * @throws \SmartyException
- */
- private function compile_variable_filter(Smarty_Internal_TemplateCompilerBase $compiler, $name, $output)
- {
- $function = $compiler->getPlugin($name, 'variablefilter');
- if ($function) {
- return "{$function}({$output},\$_smarty_tpl)";
- } else {
- // not found
- return false;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
deleted file mode 100644
index 0f818d1b3..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Registered Block
- * Compiles code for the execution of a registered block function
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Registered Block Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_Compile_Private_Block_Plugin
-{
- /**
- * Setup callback, parameter array and nocache mode
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param array $_attr attributes
- * @param string $tag
- * @param null $function
- *
- * @return array
- */
- public function setup(Smarty_Internal_TemplateCompilerBase $compiler, $_attr, $tag, $function)
- {
- if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ])) {
- $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
- $callback = $tag_info[ 0 ];
- if (is_array($callback)) {
- if (is_object($callback[ 0 ])) {
- $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
- $callback =
- array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "->{$callback[1]}");
- } else {
- $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
- $callback =
- array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "::{$callback[1]}");
- }
- } else {
- $callable = "\$_block_plugin{$this->nesting}";
- $callback = array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0]", '');
- }
- } else {
- $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
- $callback = $tag_info[ 0 ];
- if (is_array($callback)) {
- $callable = "array('{$callback[0]}', '{$callback[1]}')";
- $callback = "{$callback[1]}::{$callback[1]}";
- } else {
- $callable = null;
- }
- }
- $compiler->tag_nocache = !$tag_info[ 1 ] | $compiler->tag_nocache;
- $_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);
- $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- return array($callback, $_paramsArray, $callable);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
deleted file mode 100644
index 2591107d2..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Registered Function
- * Compiles code for the execution of a registered function
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Registered Function Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the execution of a registered 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
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- unset($_attr[ 'nocache' ]);
- if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) {
- $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ];
- $is_registered = true;
- } else {
- $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ];
- $is_registered = false;
- }
- // not cacheable?
- $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);
- $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- // compile code
- if ($is_registered) {
- $output =
- "call_user_func_array( \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0], array( {$_params},\$_smarty_tpl ) )";
- } else {
- $function = $tag_info[ 0 ];
- if (!is_array($function)) {
- $output = "{$function}({$_params},\$_smarty_tpl)";
- } else {
- $output = "{$function[0]}::{$function[1]}({$_params},\$_smarty_tpl)";
- }
- }
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifierlist' ],
- 'value' => $output
- )
- );
- }
- $output = "<?php echo {$output};?>\n";
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
deleted file mode 100644
index 590cba5af..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Special Smarty Variable
- * Compiles the special $smarty variables
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile special Smarty Variable Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the special $smarty variables
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param $parameter
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
- $variable = smarty_strtolower_ascii($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(Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ])) {
- $class = 'Smarty_Internal_Compile_' . smarty_ucfirst_ascii($variable);
- Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ] = new $class;
- }
- return Smarty_Internal_TemplateCompilerBase::$_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;
- 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 = '$_' . smarty_strtoupper_ascii($variable);
- break;
- case 'template':
- return 'basename($_smarty_tpl->source->filepath)';
- case 'template_object':
- if (isset($compiler->smarty->security_policy)) {
- $compiler->trigger_template_error("(secure mode) template_object not permitted");
- break;
- }
- return '$_smarty_tpl';
- case 'current_dir':
- return 'dirname($_smarty_tpl->source->filepath)';
- 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;
- }
- if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) {
- return "(defined('{$_index[1]}') ? constant('{$_index[1]}') : null)";
- } else {
- return "(defined({$_index[1]}) ? constant({$_index[1]}) : null)";
- }
- // no break
- 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])";
- }
- // no break
- 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]";
- }
- }
- return $compiled_ref;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
deleted file mode 100644
index 1cc340c18..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Rdelim
- * Compiles the {rdelim} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Rdelim Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_Compile_Ldelim
-{
- /**
- * Compiles code for the {rdelim} tag
- * This tag does output the right delimiter.
- *
- * @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, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- parent::compile($args, $compiler);
- return $compiler->smarty->right_delimiter;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php
deleted file mode 100644
index 0dee20820..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php
+++ /dev/null
@@ -1,462 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Section
- * Compiles the {section} {sectionelse} {/section} tags
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Section Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_ForeachSection
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('name', 'loop');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('name', 'loop');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('start', 'step', 'max', 'show', 'properties');
-
- /**
- * 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', 'loop'
- );
-
- /**
- * {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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $compiler->loopNesting++;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $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;
- $initLocal = array();
- $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' ];
- }
- if (isset($_attr[ 'properties' ]) && preg_match_all("/['](.*?)[']/", $_attr[ 'properties' ], $match)) {
- foreach ($match[ 1 ] as $prop) {
- if (in_array($prop, $this->nameProperties)) {
- $namedAttr[ $prop ] = true;
- } else {
- $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
- }
- }
- }
- $namedAttr[ 'index' ] = true;
- $output = "<?php\n";
- foreach ($_attr as $attr_name => $attr_value) {
- switch ($attr_name) {
- case 'loop':
- 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 ($t === 1) {
- $initLocal[ 'loop' ] = $v;
- $v = "{$local}loop";
- }
- break;
- case 'show':
- if (is_bool($attr_value)) {
- $v = $attr_value ? 'true' : 'false';
- $t = 0;
- } else {
- $v = "(bool) $attr_value";
- $t = 3;
- }
- break;
- 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':
- 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($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($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($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";
- }
- $initFor[ 'index' ] = "{$sectionVar}->value['index'] = {$propValue['start']}";
- if (!isset($_attr[ 'start' ]) && !isset($_attr[ 'step' ]) && !isset($_attr[ 'max' ])) {
- $propValue[ 'total' ] = $propValue[ 'loop' ];
- $propType[ 'total' ] = $propType[ 'loop' ];
- } else {
- $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[ 'loop' ])) {
- $initNamedProperty[ 'loop' ] = "'loop' => {$propValue['loop']}";
- }
- 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";
- }
- $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
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {sectionelse} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- list($openTag, $nocache, $local, $sectionVar) = $this->closeTag($compiler, array('section'));
- $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache, $local, $sectionVar));
- return "<?php }} else {\n ?>";
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Sectionclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/section} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $compiler->loopNesting--;
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($openTag, $compiler->nocache, $local, $sectionVar) =
- $this->closeTag($compiler, array('section', 'sectionelse'));
- $output = "<?php\n";
- if ($openTag === 'sectionelse') {
- $output .= "}\n";
- } else {
- $output .= "}\n}\n";
- }
- $output .= '?>';
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
deleted file mode 100644
index 70e2e2f9f..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile Setfilter
- * Compiles code for setfilter tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Setfilter Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for setfilter 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)
- {
- $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
- * @subpackage Compiler
- */
-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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- 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->variable_filters = array_pop($compiler->variable_filter_stack);
- } else {
- $compiler->variable_filters = array();
- }
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php
deleted file mode 100644
index 5aa3a7330..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Compile While
- * Compiles the {while} tag
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile While Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {while} 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)
- {
- $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', null, true);
- }
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- if (is_array($parameter[ 'if condition' ])) {
- if ($compiler->nocache) {
- // create nocache var to make it know for further compiling
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- } else {
- $var = $parameter[ 'if condition' ][ 'var' ];
- }
- $compiler->setNocacheInVariable($var);
- }
- $prefixVar = $compiler->getNewPrefixVariable();
- $assignCompiler = new Smarty_Internal_Compile_Assign();
- $assignAttr = array();
- $assignAttr[][ 'value' ] = $prefixVar;
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
- $_output .= $assignCompiler->compile(
- $assignAttr,
- $compiler,
- array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
- );
- } else {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
- $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
- $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
- }
- return $_output;
- } else {
- return "<?php\n while ({$parameter['if condition']}) {?>";
- }
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Whileclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/while} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- 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 }?>\n";
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php
deleted file mode 100644
index 2a32e4373..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin CompileBase
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * This class does extend all internal compile plugins
- *
- * @package Smarty
- * @subpackage Compiler
- */
-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
- *
- * @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
- *
- * @var array
- */
- public $option_flags = array('nocache');
-
- /**
- * Mapping array for boolean option value
- *
- * @var array
- */
- public $optionMap = array(1 => true, 0 => false, 'true' => true, 'false' => false);
-
- /**
- * Mapping array with attributes as key
- *
- * @var array
- */
- public $mapCache = array();
-
- /**
- * 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
- */
- public function getAttributes($compiler, $attributes)
- {
- $_indexed_attr = array();
- if (!isset($this->mapCache[ 'option' ])) {
- $this->mapCache[ 'option' ] = array_fill_keys($this->option_flags, true);
- }
- foreach ($attributes as $key => $mixed) {
- // shorthand ?
- if (!is_array($mixed)) {
- // option flag ?
- if (isset($this->mapCache[ 'option' ][ trim($mixed, '\'"') ])) {
- $_indexed_attr[ trim($mixed, '\'"') ] = true;
- // shorthand attribute ?
- } 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', null, true);
- }
- // named attribute
- } else {
- foreach ($mixed as $k => $v) {
- // option flag?
- if (isset($this->mapCache[ 'option' ][ $k ])) {
- if (is_bool($v)) {
- $_indexed_attr[ $k ] = $v;
- } else {
- if (is_string($v)) {
- $v = trim($v, '\'" ');
- }
- if (isset($this->optionMap[ $v ])) {
- $_indexed_attr[ $k ] = $this->optionMap[ $v ];
- } else {
- $compiler->trigger_template_error(
- "illegal value '" . var_export($v, true) .
- "' for option flag '{$k}'",
- null,
- true
- );
- }
- }
- // must be named attribute
- } else {
- $_indexed_attr[ $k ] = $v;
- }
- }
- }
- }
- // check if all required attributes present
- foreach ($this->required_attributes as $attr) {
- if (!isset($_indexed_attr[ $attr ])) {
- $compiler->trigger_template_error("missing '{$attr}' attribute", null, true);
- }
- }
- // check for not allowed attributes
- if ($this->optional_attributes !== array('_any')) {
- if (!isset($this->mapCache[ 'all' ])) {
- $this->mapCache[ 'all' ] =
- array_fill_keys(
- array_merge(
- $this->required_attributes,
- $this->optional_attributes,
- $this->option_flags
- ),
- true
- );
- }
- foreach ($_indexed_attr as $key => $dummy) {
- if (!isset($this->mapCache[ 'all' ][ $key ]) && $key !== 0) {
- $compiler->trigger_template_error("unexpected '{$key}' attribute", null, true);
- }
- }
- }
- // default 'false' for all option flags not set
- foreach ($this->option_flags as $flag) {
- if (!isset($_indexed_attr[ $flag ])) {
- $_indexed_attr[ $flag ] = false;
- }
- }
- if (isset($_indexed_attr[ 'nocache' ]) && $_indexed_attr[ 'nocache' ]) {
- $compiler->tag_nocache = true;
- }
- return $_indexed_attr;
- }
-
- /**
- * 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
- */
- public function openTag($compiler, $openTag, $data = null)
- {
- array_push($compiler->_tag_stack, array($openTag, $data));
- }
-
- /**
- * 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
- */
- public function closeTag($compiler, $expectedTag)
- {
- if (count($compiler->_tag_stack) > 0) {
- // get stacked info
- list($_openTag, $_data) = array_pop($compiler->_tag_stack);
- // open tag must match with the expected ones
- if (in_array($_openTag, (array)$expectedTag)) {
- if (is_null($_data)) {
- // return opening tag
- return $_openTag;
- } else {
- // return restored data
- return $_data;
- }
- }
- // wrong nesting of tags
- $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', null, true);
- return;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
deleted file mode 100644
index 469b9667a..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
+++ /dev/null
@@ -1,211 +0,0 @@
-<?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
- * @subpackage Config
- * @author Uwe Tews
- */
-
-/**
- * Main config file compiler class
- *
- * @package Smarty
- * @subpackage Config
- */
-class Smarty_Internal_Config_File_Compiler
-{
- /**
- * Lexer class name
- *
- * @var string
- */
- public $lexer_class;
-
- /**
- * Parser class name
- *
- * @var string
- */
- public $parser_class;
-
- /**
- * Lexer object
- *
- * @var object
- */
- public $lex;
-
- /**
- * Parser object
- *
- * @var object
- */
- public $parser;
-
- /**
- * Smarty object
- *
- * @var Smarty object
- */
- public $smarty;
-
- /**
- * Smarty object
- *
- * @var Smarty_Internal_Template object
- */
- public $template;
-
- /**
- * Compiled config data sections and variables
- *
- * @var array
- */
- public $config_data = array();
-
- /**
- * compiled config data must always be written
- *
- * @var bool
- */
- public $write_compiled_code = true;
-
- /**
- * Initialize compiler
- *
- * @param string $lexer_class class name
- * @param string $parser_class class name
- * @param Smarty $smarty global instance
- */
- 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 Smarty config source.
- *
- * @param Smarty_Internal_Template $template
- *
- * @return bool true if compiling succeeded, false if it failed
- * @throws \SmartyException
- */
- public function compileTemplate(Smarty_Internal_Template $template)
- {
- $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) {
- if (!isset($this->smarty->_debug)) {
- $this->smarty->_debug = new Smarty_Internal_Debug();
- }
- $this->smarty->_debug->start_compile($this->template);
- }
- // init the lexer/parser to compile the config file
- /* @var Smarty_Internal_ConfigFileLexer $this->lex */
- $this->lex = new $this->lexer_class(
- str_replace(
- array(
- "\r\n",
- "\r"
- ),
- "\n",
- $template->source->getContent()
- ) . "\n",
- $this
- );
- /* @var Smarty_Internal_ConfigFileParser $this->parser */
- $this->parser = new $this->parser_class($this->lex, $this);
- if (function_exists('mb_internal_encoding')
- && function_exists('ini_get')
- && ((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();
- }
- // get tokens from lexer and parse them
- while ($this->lex->yylex()) {
- if ($this->smarty->_parserdebug) {
- echo "<br>Parsing {$this->parser->yyTokenName[$this->lex->token]} Token {$this->lex->value} Line {$this->lex->line} \n";
- }
- $this->parser->doParse($this->lex->token, $this->lex->value);
- }
- // finish parsing process
- $this->parser->doParse(0, 0);
- if ($mbEncoding) {
- mb_internal_encoding($mbEncoding);
- }
- if ($this->smarty->debugging) {
- $this->smarty->_debug->end_compile($this->template);
- }
- // template header code
- $template_header = sprintf(
- "<?php /* Smarty version %s, created on %s\n compiled from '%s' */ ?>\n",
- Smarty::SMARTY_VERSION,
- date("Y-m-d H:i:s"),
- str_replace('*/', '* /' , $this->template->source->filepath)
- );
- $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 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)
- {
- // 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->template->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
- if (isset($args)) {
- // individual error message
- $error_text .= $args;
- } else {
- // 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 ])) {
- // token type from lexer
- $expect[] = '"' . $this->lex->smarty_token_names[ $exp_token ] . '"';
- } else {
- // otherwise internal token name
- $expect[] = $this->parser->yyTokenName[ $token ];
- }
- }
- // output parser error message
- $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);
- }
- throw new SmartyCompilerException($error_text);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php
deleted file mode 100644
index 36fdb76ee..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php
+++ /dev/null
@@ -1,1046 +0,0 @@
-<?php
-
-class TPC_yyStackEntry
-{
- public $stateno; /* The state-number */
- public $major; /* The major token value. This is the code
- ** 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"
-
-/**
- * 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 25 "../smarty/lexer/smarty_internal_configfileparser.y"
- 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;
- const YY_SHIFT_USE_DFLT = -8;
- const YY_SHIFT_MAX = 19;
- const YY_REDUCE_USE_DFLT = -17;
- const YY_REDUCE_MAX = 10;
- const YYNOCODE = 29;
- const YYSTACKDEPTH = 100;
- const YYNSTATE = 36;
- const YYNRULE = 22;
- const YYERRORSYMBOL = 19;
- const YYERRSYMDT = 'yy0';
- const YYFALLBACK = 0;
-
- public static $yy_action = array(
- 32, 31, 30, 29, 35, 13, 19, 3, 24, 26,
- 59, 9, 14, 1, 16, 25, 11, 28, 25, 11,
- 17, 27, 34, 20, 18, 15, 23, 5, 6, 22,
- 10, 8, 4, 12, 2, 33, 7, 21,
- );
-
- public static $yy_lookahead = array(
- 7, 8, 9, 10, 11, 12, 5, 23, 15, 16,
- 20, 21, 2, 23, 4, 17, 18, 14, 17, 18,
- 13, 14, 25, 26, 15, 2, 17, 3, 3, 17,
- 25, 25, 6, 1, 23, 27, 22, 24,
- );
-
- public static $yy_shift_ofst = array(
- -8, 1, 1, 1, -7, -2, -2, 32, -8, -8,
- -8, 9, 10, 7, 25, 24, 23, 3, 12, 26,
- );
-
- public static $yy_reduce_ofst = array(
- -10, -3, -3, -3, 8, 6, 5, 13, 11, 14,
- -16,
- );
-
- public static $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(15, 17,),
- array(2, 4,),
- array(13, 14,),
- array(3,),
- array(3,),
- array(2,),
- array(14,),
- array(17,),
- array(6,),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- );
-
- public static $yy_default = array(
- 44, 37, 41, 40, 58, 58, 58, 36, 44, 39,
- 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 43, 38, 57, 56, 53, 55, 54, 52, 51, 49,
- 48, 47, 46, 45, 42, 50,
- );
-
- public static $yyFallback = array();
-
- 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 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,
- );
-
- /**
- * helper map
- *
- * @var array
- */
- private static $escapes_single = array(
- '\\' => '\\',
- '\'' => '\''
- );
-
- /**
- * result status
- *
- * @var bool
- */
- public $successful = true;
-
- /**
- * return value
- *
- * @var mixed
- */
- public $retvalue = 0;
-
- /**
- * @var
- */
- public $yymajor;
-
- /**
- * compiler object
- *
- * @var Smarty_Internal_Config_File_Compiler
- */
- public $compiler = null;
-
- /**
- * smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
-
- public $yyTraceFILE;
-
- public $yyTracePrompt;
-
- public $yyidx;
-
- public $yyerrcnt;
-
- public $yystack = array();
-
- 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',
- );
-
- /**
- * lexer object
- *
- * @var Smarty_Internal_Configfilelexer
- */
- private $lex;
-
- /**
- * internal error flag
- *
- * @var bool
- */
- private $internalError = false;
-
- /**
- * copy of config_overwrite property
- *
- * @var bool
- */
- private $configOverwrite = false;
-
- /**
- * copy of config_read_hidden property
- *
- * @var bool
- */
- private $configReadHidden = false;
-
- private $_retvalue;
-
- /**
- * constructor
- *
- * @param Smarty_Internal_Configfilelexer $lex
- * @param Smarty_Internal_Config_File_Compiler $compiler
- */
- public function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
- {
- $this->lex = $lex;
- $this->smarty = $compiler->smarty;
- $this->compiler = $compiler;
- $this->configOverwrite = $this->smarty->config_overwrite;
- $this->configReadHidden = $this->smarty->config_read_hidden;
- }
-
- public static function yy_destructor($yymajor, $yypminor)
- {
- switch ($yymajor) {
- default:
- break; /* If no destructor action specified: do nothing */
- }
- }
-
- /**
- * 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;
- } /* Index of top element in stack */
- /**
- * 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);
- } /* Shifts left before out of the error */
- /**
- * parse triple quoted string
- *
- * @param string $qstr
- *
- * @return string
- */
- private static function parse_tripple_double_quoted_string($qstr)
- {
- return stripcslashes($qstr);
- } /* The parser's stack */
- public function Trace($TraceFILE, $zTracePrompt)
- {
- if (!$TraceFILE) {
- $zTracePrompt = 0;
- } elseif (!$zTracePrompt) {
- $TraceFILE = 0;
- }
- $this->yyTraceFILE = $TraceFILE;
- $this->yyTracePrompt = $zTracePrompt;
- }
-
- public function PrintTrace()
- {
- $this->yyTraceFILE = fopen('php://output', 'w');
- $this->yyTracePrompt = '<br>';
- }
-
- public function tokenName($tokenType)
- {
- if ($tokenType === 0) {
- return 'End of Input';
- }
- if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
- return $this->yyTokenName[ $tokenType ];
- } else {
- return 'Unknown';
- }
- }
-
- public function yy_pop_parser_stack()
- {
- if (empty($this->yystack)) {
- return;
- }
- $yytos = array_pop($this->yystack);
- 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--;
- return $yymajor;
- }
-
- public function __destruct()
- {
- while ($this->yystack !== array()) {
- $this->yy_pop_parser_stack();
- }
- if (is_resource($this->yyTraceFILE)) {
- fclose($this->yyTraceFILE);
- }
- }
-
- public function yy_get_expected_tokens($token)
- {
- 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;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return array_unique($expected);
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $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++;
- $x = new TPC_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
- $this->yystack[ $this->yyidx ] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return array_unique($expected);
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return $expected;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
- }
-
- 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 (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;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return true;
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $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++;
- $x = new TPC_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
- $this->yystack[ $this->yyidx ] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- if (!$token) {
- // end of input: this is valid
- return true;
- }
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return false;
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return true;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
- }
-
- public function yy_find_shift_action($iLookAhead)
- {
- $stateno = $this->yystack[ $this->yyidx ]->stateno;
- /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
- if (!isset(self::$yy_shift_ofst[ $stateno ])) {
- // no shift actions
- return self::$yy_default[ $stateno ];
- }
- $i = self::$yy_shift_ofst[ $stateno ];
- if ($i === self::YY_SHIFT_USE_DFLT) {
- 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 ($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 ];
- }
- }
-
- 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 ];
- }
- $i = self::$yy_reduce_ofst[ $stateno ];
- if ($i === self::YY_REDUCE_USE_DFLT) {
- 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 ];
- } else {
- return self::$yy_action[ $i ];
- }
- }
-
- public function yy_shift($yyNewState, $yyMajor, $yypMinor)
- {
- $this->yyidx++;
- if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- // line 239 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->internalError = true;
- $this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
- return;
- }
- $yytos = new TPC_yyStackEntry;
- $yytos->stateno = $yyNewState;
- $yytos->major = $yyMajor;
- $yytos->minor = $yypMinor;
- $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($this->yyTraceFILE, "\n");
- }
- }
-
- public function yy_r0()
- {
- $this->_retvalue = null;
- }
-
- public function yy_r1()
- {
- $this->add_global_vars($this->yystack[ $this->yyidx + 0 ]->minor);
- $this->_retvalue = null;
- }
-
- public function yy_r4()
- {
- $this->add_section_vars($this->yystack[ $this->yyidx + -3 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
- $this->_retvalue = null;
- }
-
- // line 245 "../smarty/lexer/smarty_internal_configfileparser.y"
- public 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 250 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r6()
- {
- $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
- }
-
- // line 264 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r7()
- {
- $this->_retvalue =
- array_merge($this->yystack[ $this->yyidx + -1 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor));
- }
-
- // line 269 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r8()
- {
- $this->_retvalue = array();
- }
-
- // line 277 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r9()
- {
- $this->_retvalue =
- array(
- 'key' => $this->yystack[ $this->yyidx + -2 ]->minor,
- 'value' => $this->yystack[ $this->yyidx + 0 ]->minor
- );
- }
-
- // line 281 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r10()
- {
- $this->_retvalue = (float)$this->yystack[ $this->yyidx + 0 ]->minor;
- }
-
- // line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r11()
- {
- $this->_retvalue = (int)$this->yystack[ $this->yyidx + 0 ]->minor;
- }
-
- // line 291 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r12()
- {
- $this->_retvalue = $this->parse_bool($this->yystack[ $this->yyidx + 0 ]->minor);
- }
-
- // line 296 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r13()
- {
- $this->_retvalue = self::parse_single_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
- }
-
- // line 300 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r14()
- {
- $this->_retvalue = self::parse_double_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
- }
-
- // line 304 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r15()
- {
- $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[ $this->yyidx + -1 ]->minor);
- }
-
- // line 308 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r16()
- {
- $this->_retvalue = '';
- }
-
- // line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r17()
- {
- $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
- }
-
- // line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_reduce($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 (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 ][ 0 ];
- $yysize = self::$yyRuleInfo[ $yyruleno ][ 1 ];
- $this->yyidx -= $yysize;
- 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 (!$this->yyTraceFILE && $yysize) {
- $this->yyidx++;
- $x = new TPC_yyStackEntry;
- $x->stateno = $yyact;
- $x->major = $yygoto;
- $x->minor = $yy_lefthand_side;
- $this->yystack[ $this->yyidx ] = $x;
- } else {
- $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
- }
- } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yy_accept();
- }
- }
-
- // line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_parse_failed()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- }
-
- // line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_syntax_error($yymajor, $TOKEN)
- {
- // line 232 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_config_file_error();
- }
-
- public function yy_accept()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- // line 225 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- }
-
- 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;
- $x = new TPC_yyStackEntry;
- $x->stateno = 0;
- $x->major = 0;
- $this->yystack = array();
- $this->yystack[] = $x;
- }
- $yyendofinput = ($yymajor == 0);
- 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)) {
- // force a syntax error
- $yyact = self::YY_ERROR_ACTION;
- }
- if ($yyact < self::YYNSTATE) {
- $this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
- if ($yyendofinput && $this->yyidx >= 0) {
- $yymajor = 0;
- } else {
- $yymajor = self::YYNOCODE;
- }
- } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
- $this->yy_reduce($yyact - self::YYNSTATE);
- } elseif ($yyact === self::YY_ERROR_ACTION) {
- 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 ($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
- ) {
- $this->yy_pop_parser_stack();
- }
- if ($this->yyidx < 0 || $yymajor == 0) {
- $this->yy_destructor($yymajor, $yytokenvalue);
- $this->yy_parse_failed();
- $yymajor = self::YYNOCODE;
- } elseif ($yymx !== self::YYERRORSYMBOL) {
- $u2 = 0;
- $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
- }
- }
- $this->yyerrcnt = 3;
- $yyerrorhit = 1;
- } else {
- if ($this->yyerrcnt <= 0) {
- $this->yy_syntax_error($yymajor, $yytokenvalue);
- }
- $this->yyerrcnt = 3;
- $this->yy_destructor($yymajor, $yytokenvalue);
- if ($yyendofinput) {
- $this->yy_parse_failed();
- }
- $yymajor = self::YYNOCODE;
- }
- } else {
- $this->yy_accept();
- $yymajor = self::YYNOCODE;
- }
- } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
- }
-
- /**
- * 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;
- }
-
- /**
- * 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 ]);
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php
deleted file mode 100644
index 1b64185b8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_data.php
+++ /dev/null
@@ -1,272 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Data
- * This file contains the basic classes and methods for template and variable creation
- *
- * @package Smarty
- * @subpackage Template
- * @author Uwe Tews
- */
-
-/**
- * Base class with template and variable methods
- *
- * @package Smarty
- * @subpackage Template
- *
- * @property int $scope
- * @property Smarty $smarty
- * The following methods will be dynamically loaded by the extension handler when they are called.
- * They are located in a corresponding Smarty_Internal_Method_xxxx class
- *
- * @method mixed _getConfigVariable(string $varName, bool $errorEnable = true)
- * @method mixed getConfigVariable(string $varName, bool $errorEnable = true)
- * @method mixed getConfigVars(string $varName = null, bool $searchParents = true)
- * @method mixed getGlobal(string $varName = null)
- * @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')
- */
-abstract class Smarty_Internal_Data
-{
- /**
- * This object type (Smarty = 1, template = 2, data = 4)
- *
- * @var int
- */
- public $_objType = 4;
-
- /**
- * name of class used for templates
- *
- * @var string
- */
- public $template_class = 'Smarty_Internal_Template';
-
- /**
- * template variables
- *
- * @var Smarty_Variable[]
- */
- public $tpl_vars = array();
-
- /**
- * parent template (if any)
- *
- * @var Smarty|Smarty_Internal_Template|Smarty_Data
- */
- public $parent = null;
-
- /**
- * configuration settings
- *
- * @var string[]
- */
- public $config_vars = array();
-
- /**
- * extension handler
- *
- * @var Smarty_Internal_Extension_Handler
- */
- public $ext = null;
-
- /**
- * Smarty_Internal_Data constructor.
- *
- * Install extension handler
- */
- public function __construct()
- {
- $this->ext = new Smarty_Internal_Extension_Handler();
- $this->ext->objType = $this->_objType;
- }
-
- /**
- * 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
- *
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for
- * chaining
- */
- public function assign($tpl_var, $value = null, $nocache = false)
- {
- if (is_array($tpl_var)) {
- foreach ($tpl_var as $_key => $_val) {
- $this->assign($_key, $_val, $nocache);
- }
- } else {
- if ($tpl_var !== '') {
- if ($this->_objType === 2) {
- /**
- *
- *
- * @var Smarty_Internal_Template $this
- */
- $this->_assignInScope($tpl_var, $value, $nocache);
- } else {
- $this->tpl_vars[ $tpl_var ] = new Smarty_Variable($value, $nocache);
- }
- }
- }
- return $this;
- }
-
- /**
- * appends values to template variables
- *
- * @api Smarty::append()
- * @link https://www.smarty.net/docs/en/api.append.tpl
- *
- * @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($tpl_var, $value = null, $merge = false, $nocache = false)
- {
- return $this->ext->append->append($this, $tpl_var, $value, $merge, $nocache);
- }
-
- /**
- * assigns a global Smarty 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
- *
- * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
- */
- public function assignGlobal($varName, $value = null, $nocache = false)
- {
- return $this->ext->assignGlobal->assignGlobal($this, $varName, $value, $nocache);
- }
-
- /**
- * 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|\Smarty_Internal_Template|\Smarty
- */
- public function appendByRef($tpl_var, &$value, $merge = false)
- {
- return $this->ext->appendByRef->appendByRef($this, $tpl_var, $value, $merge);
- }
-
- /**
- * assigns values to template variables by reference
- *
- * @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($tpl_var, &$value, $nocache = false)
- {
- return $this->ext->assignByRef->assignByRef($this, $tpl_var, $value, $nocache);
- }
-
- /**
- * Returns a single or all template variables
- *
- * @api Smarty::getTemplateVars()
- * @link https://www.smarty.net/docs/en/api.get.template.vars.tpl
- *
- * @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($varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true)
- {
- return $this->ext->getTemplateVars->getTemplateVars($this, $varName, $_ptr, $searchParents);
- }
-
- /**
- * Follow the parent chain an merge template and config variables
- *
- * @param \Smarty_Internal_Data|null $data
- */
- public function _mergeVars(Smarty_Internal_Data $data = null)
- {
- 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 {
- $data = $this;
- }
- if (isset($this->parent)) {
- $this->parent->_mergeVars($data);
- }
- }
-
- /**
- * Return true if this instance is a Data obj
- *
- * @return bool
- */
- public function _isDataObj()
- {
- return $this->_objType === 4;
- }
-
- /**
- * Return true if this instance is a template obj
- *
- * @return bool
- */
- public function _isTplObj()
- {
- return $this->_objType === 2;
- }
-
- /**
- * Return true if this instance is a Smarty obj
- *
- * @return bool
- */
- public function _isSmartyObj()
- {
- return $this->_objType === 1;
- }
-
- /**
- * Get Smarty object
- *
- * @return Smarty
- */
- public function _getSmartyObj()
- {
- return $this->smarty;
- }
-
- /**
- * Handle unknown class methods
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- */
- public function __call($name, $args)
- {
- return $this->ext->_callExternalMethod($this, $name, $args);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php
deleted file mode 100644
index 3ef040ab1..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-
-/**
- * Smarty Extension handler
- *
- * Load extensions dynamically
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- *
- * Runtime extensions
- * @property Smarty_Internal_Runtime_CacheModify $_cacheModify
- * @property Smarty_Internal_Runtime_CacheResourceFile $_cacheResourceFile
- * @property Smarty_Internal_Runtime_Capture $_capture
- * @property Smarty_Internal_Runtime_CodeFrame $_codeFrame
- * @property Smarty_Internal_Runtime_FilterHandler $_filterHandler
- * @property Smarty_Internal_Runtime_Foreach $_foreach
- * @property Smarty_Internal_Runtime_GetIncludePath $_getIncludePath
- * @property Smarty_Internal_Runtime_Make_Nocache $_make_nocache
- * @property Smarty_Internal_Runtime_UpdateCache $_updateCache
- * @property Smarty_Internal_Runtime_UpdateScope $_updateScope
- * @property Smarty_Internal_Runtime_TplFunction $_tplFunction
- * @property Smarty_Internal_Runtime_WriteFile $_writeFile
- *
- * Method extensions
- * @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
- * @property mixed|\Smarty_Template_Cached configLoad
- */
-#[\AllowDynamicProperties]
-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, 'Literals' => 'Literals',
- );//
-
- private $resolvedProperties = array();
-
- /**
- * Call external Method
- *
- * @param \Smarty_Internal_Data $data
- * @param string $name external method names
- * @param array $args argument array
- *
- * @return mixed
- */
- 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)) {
- if (preg_match('/^((set|get)|(.*?))([A-Z].*)$/', $name, $match)) {
- $basename = $this->upperCase($match[ 4 ]);
- if (!isset($smarty->ext->$basename) && isset($this->_property_info[ $basename ])
- && is_string($this->_property_info[ $basename ])
- ) {
- $class = 'Smarty_Internal_Method_' . $this->_property_info[ $basename ];
- if (class_exists($class)) {
- $classObj = new $class();
- $methodes = get_class_methods($classObj);
- foreach ($methodes as $method) {
- $smarty->ext->$method = $classObj;
- }
- }
- }
- if (!empty($match[ 2 ]) && !isset($smarty->ext->$name)) {
- $class = 'Smarty_Internal_Method_' . $this->upperCase($name);
- if (!class_exists($class)) {
- $objType = $data->_objType;
- $propertyType = false;
- if (!isset($this->resolvedProperties[ $match[ 0 ] ][ $objType ])) {
- $property = $this->resolvedProperties['property'][$basename] ??
- $this->resolvedProperties['property'][$basename] = smarty_strtolower_ascii(
- join(
- '_',
- preg_split(
- '/([A-Z][^A-Z]*)/',
- $basename,
- -1,
- PREG_SPLIT_NO_EMPTY |
- PREG_SPLIT_DELIM_CAPTURE
- )
- )
- );
- if ($property !== false) {
- if (property_exists($data, $property)) {
- $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ] = 1;
- } elseif (property_exists($smarty, $property)) {
- $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ] = 2;
- } else {
- $this->resolvedProperties[ 'property' ][ $basename ] = $property = false;
- }
- }
- } else {
- $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ];
- $property = $this->resolvedProperties[ 'property' ][ $basename ];
- }
- if ($propertyType) {
- $obj = $propertyType === 1 ? $data : $smarty;
- if ($match[ 2 ] === 'get') {
- return $obj->$property;
- } elseif ($match[ 2 ] === 'set') {
- return $obj->$property = $args[ 0 ];
- }
- }
- }
- }
- }
- }
- $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);
- }
-
- /**
- * Make first character of name parts upper case
- *
- * @param string $name
- *
- * @return string
- */
- public function upperCase($name)
- {
- $_name = explode('_', $name);
- $_name = array_map('smarty_ucfirst_ascii', $_name);
- return implode('_', $_name);
- }
-
- /**
- * get extension object
- *
- * @param string $property_name property name
- *
- * @return mixed|Smarty_Template_Cached
- */
- public function __get($property_name)
- {
- // object properties of runtime template extensions will start with '_'
- if ($property_name[ 0 ] === '_') {
- $class = 'Smarty_Internal_Runtime' . $this->upperCase($property_name);
- } else {
- $class = 'Smarty_Internal_Method_' . $this->upperCase($property_name);
- }
- if (!class_exists($class)) {
- return $this->$property_name = new Smarty_Internal_Undefined($class);
- }
- return $this->$property_name = new $class();
- }
-
- /**
- * set extension property
- *
- * @param string $property_name property name
- * @param mixed $value value
- *
- */
- public function __set($property_name, $value)
- {
- $this->$property_name = $value;
- }
-
- /**
- * Call error handler for undefined method
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- */
- public function __call($name, $args)
- {
- return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), array($this));
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
deleted file mode 100644
index a05f55a82..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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
- * @throws \SmartyException
- */
- public function addAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null)
- {
- $smarty = $obj->_getSmartyObj();
- 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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
deleted file mode 100644
index c3feb3d8b..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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 = $obj->_getSmartyObj();
- if (is_array($modifiers)) {
- $smarty->default_modifiers = array_merge($smarty->default_modifiers, $modifiers);
- } else {
- $smarty->default_modifiers[] = $modifiers;
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php
deleted file mode 100644
index e207734e8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?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 https://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->_isTplObj() && $data->scope) {
- $data->ext->_updateScope->_updateScope($data, $tpl_var);
- }
- }
- return $data;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php
deleted file mode 100644
index b5be69b54..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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 https://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->_isTplObj() && $data->scope) {
- $data->ext->_updateScope->_updateScope($data, $tpl_var);
- }
- }
- return $data;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php
deleted file mode 100644
index fa705bb80..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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->_isTplObj() && $data->scope) {
- $data->ext->_updateScope->_updateScope($data, $tpl_var);
- }
- }
- return $data;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php
deleted file mode 100644
index 08cfa4693..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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->_isTplObj()) {
- $ptr->tpl_vars[ $varName ] = clone Smarty::$global_tpl_vars[ $varName ];
- $ptr = $ptr->parent;
- }
- }
- return $data;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php
deleted file mode 100644
index 6fb0c8f3d..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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 https://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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php
deleted file mode 100644
index b74d30580..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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 https://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 int number of cache files deleted
- * @throws \SmartyException
- */
- public function clearAllCache(Smarty $smarty, $exp_time = null, $type = null)
- {
- $smarty->_clearTemplateCache();
- // load cache resource and call clearAll
- $_cache_resource = Smarty_CacheResource::load($smarty, $type);
- return $_cache_resource->clearAll($smarty, $exp_time);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php
deleted file mode 100644
index 12b755c06..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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 https://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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php
deleted file mode 100644
index df766eee8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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 https://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 int number of cache files deleted
- * @throws \SmartyException
- */
- public function clearCache(
- Smarty $smarty,
- $template_name,
- $cache_id = null,
- $compile_id = null,
- $exp_time = null,
- $type = null
- ) {
- $smarty->_clearTemplateCache();
- // load cache resource and call clear
- $_cache_resource = Smarty_CacheResource::load($smarty, $type);
- return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
deleted file mode 100644
index db0a49b00..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?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 https://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 int number of template files deleted
- * @throws \SmartyException
- */
- public function clearCompiledTemplate(Smarty $smarty, $resource_name = null, $compile_id = null, $exp_time = null)
- {
- // clear template objects cache
- $smarty->_clearTemplateCache();
- $_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 ? DIRECTORY_SEPARATOR : '^';
- if (isset($resource_name)) {
- $_save_stat = $smarty->caching;
- $smarty->caching = Smarty::CACHING_OFF;
- /* @var Smarty_Internal_Template $tpl */
- $tpl = $smarty->createTemplate($resource_name);
- $smarty->caching = $_save_stat;
- if (!$tpl->source->handler->uncompiled && !$tpl->source->handler->recompiled && $tpl->source->exists) {
- $_resource_part_1 = basename(str_replace('^', DIRECTORY_SEPARATOR, $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) === '.') {
- continue;
- }
- $_filepath = (string)$_file;
- if ($_file->isDir()) {
- if (!$_compile->isDot()) {
- // delete folder if empty
- @rmdir($_file->getPathname());
- }
- } else {
- // delete only php files
- if (substr($_filepath, -4) !== '.php') {
- continue;
- }
- $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 (is_file($_filepath) && time() - filemtime($_filepath) >= $exp_time) {
- $unlink = true;
- }
- } else {
- $unlink = true;
- }
- }
- if ($unlink && is_file($_filepath) && @unlink($_filepath)) {
- $_count++;
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api')) < 1)
- ) {
- opcache_invalidate($_filepath, true);
- } elseif (function_exists('apc_delete_file')) {
- apc_delete_file($_filepath);
- }
- }
- }
- }
- return $_count;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php
deleted file mode 100644
index d1b730322..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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 https://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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php
deleted file mode 100644
index 3934ca042..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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 passed smarty object
- * @param string $extension file extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit
- * @param int $max_errors
- *
- * @return int 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);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php
deleted file mode 100644
index 5c046da40..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?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 passed smarty object
- * @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,
- defined('FilesystemIterator::FOLLOW_SYMLINKS') ?
- FilesystemIterator::FOLLOW_SYMLINKS : 0
- );
- $_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)) . DIRECTORY_SEPARATOR . $_file;
- }
- echo "\n<br>", $_dir, '---', $_file;
- flush();
- $_start_time = microtime(true);
- $_smarty = clone $smarty;
- //
- $_smarty->_cache = array();
- $_smarty->ext = new Smarty_Internal_Extension_Handler();
- $_smarty->ext->objType = $_smarty->_objType;
- $_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->_clearTemplateCache();
- if ($max_errors !== null && $_error_count === $max_errors) {
- echo "\n<br><br>too many errors\n";
- exit(1);
- }
- }
- }
- echo "\n<br>";
- return $_count;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php
deleted file mode 100644
index c3174d2d0..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php
+++ /dev/null
@@ -1,182 +0,0 @@
-<?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 https://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 \Exception
- */
- public function configLoad(Smarty_Internal_Data $data, $config_file, $sections = null)
- {
- $this->_loadConfigFile($data, $config_file, $sections, null);
- return $data;
- }
-
- /**
- * load a config file, optionally load just selected sections
- *
- * @api Smarty::configLoad()
- * @link https://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
- *
- * @throws \Exception
- */
- public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0)
- {
- /* @var \Smarty $smarty */
- $smarty = $data->_getSmartyObj();
- /* @var \Smarty_Internal_Template $confObj */
- $confObj = new Smarty_Internal_Template($config_file, $smarty, $data, null, null, null, null, true);
- $confObj->caching = Smarty::CACHING_OFF;
- $confObj->source->config_sections = $sections;
- $confObj->source->scope = $scope;
- $confObj->compiled = Smarty_Template_Compiled::load($confObj);
- $confObj->compiled->render($confObj);
- if ($data->_isTplObj()) {
- $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 $new_config_vars
- */
- public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_config_vars)
- {
- $this->_assignConfigVars($tpl->parent->config_vars, $tpl, $new_config_vars);
- $tagScope = $tpl->source->scope;
- if ($tagScope >= 0) {
- if ($tagScope === Smarty::SCOPE_LOCAL) {
- $this->_updateVarStack($tpl, $new_config_vars);
- $tagScope = 0;
- if (!$tpl->scope) {
- return;
- }
- }
- if ($tpl->parent->_isTplObj() && ($tagScope || $tpl->parent->scope)) {
- $mergedScope = $tagScope | $tpl->scope;
- if ($mergedScope) {
- // update scopes
- /* @var \Smarty_Internal_Template|\Smarty|\Smarty_Internal_Data $ptr */
- foreach ($tpl->smarty->ext->_updateScope->_getAffectedScopes($tpl->parent, $mergedScope) as $ptr) {
- $this->_assignConfigVars($ptr->config_vars, $tpl, $new_config_vars);
- if ($tagScope && $ptr->_isTplObj() && isset($tpl->_cache[ 'varStack' ])) {
- $this->_updateVarStack($tpl, $new_config_vars);
- }
- }
- }
- }
- }
- }
-
- /**
- * Assign all config variables in given scope
- *
- * @param array $config_vars config variables in scope
- * @param \Smarty_Internal_Template $tpl
- * @param array $new_config_vars loaded config variables
- */
- public function _assignConfigVars(&$config_vars, Smarty_Internal_Template $tpl, $new_config_vars)
- {
- // copy global config vars
- foreach ($new_config_vars[ 'vars' ] as $variable => $value) {
- if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
- $config_vars[ $variable ] = $value;
- } else {
- $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
- }
- }
- // scan sections
- $sections = $tpl->source->config_sections;
- if (!empty($sections)) {
- foreach ((array)$sections as $tpl_section) {
- if (isset($new_config_vars[ 'sections' ][ $tpl_section ])) {
- foreach ($new_config_vars[ 'sections' ][ $tpl_section ][ 'vars' ] as $variable => $value) {
- if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
- $config_vars[ $variable ] = $value;
- } else {
- $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
- }
- }
- }
- }
- }
- }
-
- /**
- * Update config variables in template local variable stack
- *
- * @param \Smarty_Internal_Template $tpl
- * @param array $config_vars
- */
- public function _updateVarStack(Smarty_Internal_Template $tpl, $config_vars)
- {
- $i = 0;
- while (isset($tpl->_cache[ 'varStack' ][ $i ])) {
- $this->_assignConfigVars($tpl->_cache[ 'varStack' ][ $i ][ 'config' ], $tpl, $config_vars);
- $i++;
- }
- }
-
- /**
- * gets a config variable value
- *
- * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
- * @param string $varName the name of the config variable
- * @param bool $errorEnable
- *
- * @return null|string the value of the config variable
- */
- public function _getConfigVariable(Smarty_Internal_Data $data, $varName, $errorEnable = true)
- {
- $_ptr = $data;
- 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 ($data->smarty->error_unassigned && $errorEnable) {
- // force a notice
- $x = $$varName;
- }
- return null;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php
deleted file mode 100644
index c684c0870..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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 https://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
- *
- * @return \Smarty_Data data object
- */
- public function createData(Smarty_Internal_TemplateBase $obj, Smarty_Internal_Data $parent = null, $name = null)
- {
- /* @var Smarty $smarty */
- $smarty = $obj->_getSmartyObj();
- $dataObj = new Smarty_Data($parent, $smarty, $name);
- if ($smarty->debugging) {
- Smarty_Internal_Debug::register_data($dataObj);
- }
- return $dataObj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
deleted file mode 100644
index 4145db10b..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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
- * @throws \SmartyException
- */
- public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null)
- {
- $smarty = $obj->_getSmartyObj();
- if ($type !== null) {
- $this->_checkFilterType($type);
- return isset($smarty->autoload_filters[ $type ]) ? $smarty->autoload_filters[ $type ] : array();
- }
- return $smarty->autoload_filters;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php
deleted file mode 100644
index b54815123..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/**
- * Smarty Method GetConfigVariable
- *
- * Smarty::getConfigVariable() method
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Method_GetConfigVariable
-{
- /**
- * Valid for all objects
- *
- * @var int
- */
- public $objMap = 7;
-
- /**
- * gets a config variable value
- *
- * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
- * @param string $varName the name of the config variable
- * @param bool $errorEnable
- *
- * @return null|string the value of the config variable
- */
- public function getConfigVariable(Smarty_Internal_Data $data, $varName = null, $errorEnable = true)
- {
- return $data->ext->configLoad->_getConfigVariable($data, $varName, $errorEnable);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php
deleted file mode 100644
index 763bdf989..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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 https://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;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
deleted file mode 100644
index 77d908c15..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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 = $obj->_getSmartyObj();
- return $smarty->debug_tpl;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
deleted file mode 100644
index 57da85c49..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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 = $obj->_getSmartyObj();
- return $smarty->default_modifiers;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php
deleted file mode 100644
index 2be11d7e8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/**
- * Smarty Method GetGlobal
- *
- * Smarty::getGlobal() method
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Method_GetGlobal
-{
- /**
- * Valid for all objects
- *
- * @var int
- */
- public $objMap = 7;
-
- /**
- * Returns a single or all global variables
- *
- * @api Smarty::getGlobal()
- *
- * @param \Smarty_Internal_Data $data
- * @param string $varName variable name or null
- *
- * @return string|array variable value or or array of variables
- */
- public function getGlobal(Smarty_Internal_Data $data, $varName = null)
- {
- if (isset($varName)) {
- if (isset(Smarty::$global_tpl_vars[ $varName ])) {
- return Smarty::$global_tpl_vars[ $varName ]->value;
- } else {
- return '';
- }
- } else {
- $_result = array();
- foreach (Smarty::$global_tpl_vars as $key => $var) {
- $_result[ $key ] = $var->value;
- }
- return $_result;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php
deleted file mode 100644
index 0b3a071d3..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- 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 ];
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php
deleted file mode 100644
index 8db39c525..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php
deleted file mode 100644
index 0d1335a8d..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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 https://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 \Exception
- * @throws \SmartyException
- */
- public function getTags(Smarty_Internal_TemplateBase $obj, $template = null)
- {
- /* @var Smarty $smarty */
- $smarty = $obj->_getSmartyObj();
- if ($obj->_isTplObj() && !isset($template)) {
- $tpl = clone $obj;
- } elseif (isset($template) && $template->_isTplObj()) {
- $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 = Smarty::CACHING_OFF;
- $tpl->loadCompiler();
- $tpl->compiler->compileTemplate($tpl);
- return $tpl->_cache[ 'used_tags' ];
- }
- throw new SmartyException('Missing template specification');
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php
deleted file mode 100644
index 0470785b1..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?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 https://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 && isset($_ptr->parent)) {
- $_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 && isset($_ptr->parent)) {
- $_ptr = $_ptr->parent;
- } else {
- $_ptr = null;
- }
- }
- if (isset(Smarty::$global_tpl_vars[ $varName ])) {
- // found it, return it
- return Smarty::$global_tpl_vars[ $varName ];
- }
- if ($errorEnable && $data->_getSmartyObj()->error_unassigned) {
- // force a notice
- $x = $$varName;
- }
- return new Smarty_Undefined_Variable;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php
deleted file mode 100644
index bfa3f58ec..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-/**
- * Smarty Method GetLiterals
- *
- * Smarty::getLiterals() method
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Method_Literals
-{
- /**
- * Valid for Smarty and template object
- *
- * @var int
- */
- public $objMap = 3;
-
- /**
- * Get literals
- *
- * @api Smarty::getLiterals()
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- *
- * @return array list of literals
- */
- public function getLiterals(Smarty_Internal_TemplateBase $obj)
- {
- $smarty = $obj->_getSmartyObj();
- return (array)$smarty->literals;
- }
-
- /**
- * Add literals
- *
- * @api Smarty::addLiterals()
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param array|string $literals literal or list of literals
- * to addto add
- *
- * @return \Smarty|\Smarty_Internal_Template
- * @throws \SmartyException
- */
- public function addLiterals(Smarty_Internal_TemplateBase $obj, $literals = null)
- {
- if (isset($literals)) {
- $this->set($obj->_getSmartyObj(), (array)$literals);
- }
- return $obj;
- }
-
- /**
- * Set literals
- *
- * @api Smarty::setLiterals()
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param array|string $literals literal or list of literals
- * to setto set
- *
- * @return \Smarty|\Smarty_Internal_Template
- * @throws \SmartyException
- */
- public function setLiterals(Smarty_Internal_TemplateBase $obj, $literals = null)
- {
- $smarty = $obj->_getSmartyObj();
- $smarty->literals = array();
- if (!empty($literals)) {
- $this->set($smarty, (array)$literals);
- }
- return $obj;
- }
-
- /**
- * common setter for literals for easier handling of duplicates the
- * Smarty::$literals array gets filled with identical key values
- *
- * @param \Smarty $smarty
- * @param array $literals
- *
- * @throws \SmartyException
- */
- private function set(Smarty $smarty, $literals)
- {
- $literals = array_combine($literals, $literals);
- $error = isset($literals[ $smarty->left_delimiter ]) ? array($smarty->left_delimiter) : array();
- $error = isset($literals[ $smarty->right_delimiter ]) ? $error[] = $smarty->right_delimiter : $error;
- if (!empty($error)) {
- throw new SmartyException(
- 'User defined literal(s) "' . $error .
- '" may not be identical with left or right delimiter'
- );
- }
- $smarty->literals = array_merge((array)$smarty->literals, (array)$literals);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php
deleted file mode 100644
index af788a24e..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- $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}'");
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
deleted file mode 100644
index 6ddcaec94..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?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 . smarty_strtolower_ascii($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;
- include_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 = smarty_strtolower_ascii($_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;
- include_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) {
- include_once $file;
- return $file;
- }
- }
- }
- // no plugin loaded
- return false;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
deleted file mode 100644
index 381346c8f..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/**
- * Smarty Method MustCompile
- *
- * 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 ($_template->_isSubTpl()) {
- $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->compile_check &&
- $_template->compiled->getTimeStamp() <
- $_template->source->getTimeStamp())));
- }
- return $_template->mustCompile;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php
deleted file mode 100644
index 5608b3fd0..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- $smarty->registered_cache_resources[ $name ] = $resource_handler;
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php
deleted file mode 100644
index 76a69c6e5..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- // 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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
deleted file mode 100644
index b340f178d..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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 = $obj->_getSmartyObj();
- if (is_callable($callback)) {
- $smarty->default_config_handler_func = $callback;
- } else {
- throw new SmartyException('Default config handler not callable');
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
deleted file mode 100644
index 4cda5b056..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- if (is_callable($callback)) {
- $smarty->default_plugin_handler_func = $callback;
- } else {
- throw new SmartyException("Default plugin handler '$callback' not callable");
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
deleted file mode 100644
index cbc133ccd..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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 = $obj->_getSmartyObj();
- 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
- *
- * @throws \SmartyException
- */
- 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);
- } else {
- throw new SmartyException(
- 'Default handler: Unable to load ' .
- ($source->isConfig ? 'config' : 'template') .
- " default file '{$_return}' for '{$source->type}:{$source->name}'"
- );
- }
- $source->name = $source->filepath = $_return;
- $source->uid = sha1($source->filepath);
- } elseif ($_return === true) {
- $source->content = $_content;
- $source->exists = true;
- $source->uid = $source->name = sha1($_content);
- $source->handler = Smarty_Resource::load($source->smarty, 'eval');
- } else {
- $source->exists = false;
- throw new SmartyException(
- 'Default handler: No ' . ($source->isConfig ? 'config' : 'template') .
- " default content for '{$source->type}:{$source->name}'"
- );
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php
deleted file mode 100644
index 9719eb2b6..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- $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}'");
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php
deleted file mode 100644
index 8e6fe0521..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- // 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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php
deleted file mode 100644
index 74c0ae908..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- 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");
- } elseif ($cacheable && $cache_attr) {
- throw new SmartyException("Cannot set caching attributes for plugin '{$name}' when it is cacheable.");
- } else {
- $smarty->registered_plugins[ $type ][ $name ] = array($callback, (bool)$cacheable, (array)$cache_attr);
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php
deleted file mode 100644
index 302657ae0..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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 https://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 $resource_handler instance of Smarty_Resource
- *
- * @return \Smarty|\Smarty_Internal_Template
- */
- public function registerResource(Smarty_Internal_TemplateBase $obj, $name, Smarty_Resource $resource_handler)
- {
- $smarty = $obj->_getSmartyObj();
- $smarty->registered_resources[ $name ] = $resource_handler;
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
deleted file mode 100644
index 2972f3ce1..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?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
- * @throws \SmartyException
- */
- public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null)
- {
- $smarty = $obj->_getSmartyObj();
- 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}'");
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
deleted file mode 100644
index cc9d23e2a..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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 = $obj->_getSmartyObj();
- if (!is_readable($tpl_name)) {
- throw new SmartyException("Unknown file '{$tpl_name}'");
- }
- $smarty->debug_tpl = $tpl_name;
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
deleted file mode 100644
index eadc2de1b..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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 = $obj->_getSmartyObj();
- $smarty->default_modifiers = (array)$modifiers;
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php
deleted file mode 100644
index e41e8dffc..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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 https://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 Smarty_Internal_TemplateBase
- * @throws \SmartyException
- */
- public function unloadFilter(Smarty_Internal_TemplateBase $obj, $type, $name)
- {
- $smarty = $obj->_getSmartyObj();
- $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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
deleted file mode 100644
index 377397e97..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?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 https://www.smarty.net/docs/en/api.unregister.cacheresource.tpl
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param $name
- *
- * @return \Smarty|\Smarty_Internal_Template
- */
- public function unregisterCacheResource(Smarty_Internal_TemplateBase $obj, $name)
- {
- $smarty = $obj->_getSmartyObj();
- if (isset($smarty->registered_cache_resources[ $name ])) {
- unset($smarty->registered_cache_resources[ $name ]);
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php
deleted file mode 100644
index ebc9337d0..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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 https://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
- * @throws \SmartyException
- */
- public function unregisterFilter(Smarty_Internal_TemplateBase $obj, $type, $callback)
- {
- $smarty = $obj->_getSmartyObj();
- $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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php
deleted file mode 100644
index 77d619637..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- if (isset($smarty->registered_objects[ $object_name ])) {
- unset($smarty->registered_objects[ $object_name ]);
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php
deleted file mode 100644
index 2431d5c23..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- if (isset($smarty->registered_plugins[ $type ][ $name ])) {
- unset($smarty->registered_plugins[ $type ][ $name ]);
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php
deleted file mode 100644
index bbb6a861d..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?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 https://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 = $obj->_getSmartyObj();
- if (isset($smarty->registered_resources[ $type ])) {
- unset($smarty->registered_resources[ $type ]);
- }
- return $obj;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php
deleted file mode 100644
index 88694dcfd..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Nocache Insert
- * Compiles the {insert} tag into the cache file
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Compile Insert Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-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
- */
- public static function compile($_function, $_attr, $_template, $_script, $_assign = null)
- {
- $_output = '<?php ';
- if ($_script !== 'null') {
- // script which must be included
- // code for script file loading
- $_output .= "require_once '{$_script}';";
- }
- // call insert
- if (isset($_assign)) {
- $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) .
- ',\$_smarty_tpl), true);?>';
- } else {
- $_output .= "echo {$_function}(" . var_export($_attr, true) . ',$_smarty_tpl);?>';
- }
- $_tpl = $_template;
- while ($_tpl->_isSubTpl()) {
- $_tpl = $_tpl->parent;
- }
- return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/{$_output}/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/";
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php
deleted file mode 100644
index 9f7678526..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Templateparser Parsetree
- * These are classes to build parsetree in the template parser
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Thue Kristensen
- * @author Uwe Tews
- */
-
-/**
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-abstract class Smarty_Internal_ParseTree
-{
- /**
- * Buffer content
- *
- * @var mixed
- */
- public $data;
-
- /**
- * Subtree array
- *
- * @var array
- */
- public $subtrees = array();
-
- /**
- * Return buffer
- *
- * @param \Smarty_Internal_Templateparser $parser
- *
- * @return string buffer content
- */
- abstract public function to_smarty_php(Smarty_Internal_Templateparser $parser);
-
- /**
- * Template data object destructor
- */
- public function __destruct()
- {
- $this->data = null;
- $this->subtrees = null;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php
deleted file mode 100644
index ae2060673..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Resource File
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
- */
-
-/**
- * Smarty Internal Plugin Resource File
- * Implements the file system as resource for Smarty templates
- *
- * @package Smarty
- * @subpackage TemplateResources
- */
-class Smarty_Internal_Resource_File 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
- *
- * @throws \SmartyException
- */
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
- {
- $source->filepath = $this->buildFilepath($source, $_template);
- if ($source->filepath !== false) {
- 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 . ($source->isConfig ? $source->smarty->_joined_config_dir :
- $source->smarty->_joined_template_dir)
- );
- $source->timestamp = filemtime($source->filepath);
- } else {
- $source->timestamp = $source->exists = false;
- }
- }
-
- /**
- * populate Source Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Source $source source object
- */
- public function populateTimestamp(Smarty_Template_Source $source)
- {
- 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
- */
- public function getContent(Smarty_Template_Source $source)
- {
- if ($source->exists) {
- return file_get_contents($source->filepath);
- }
- 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
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return basename($source->filepath);
- }
-
- /**
- * 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 && $_template->_isSubTpl()
- && 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}'");
- }
- // normalize path
- $path =
- $source->smarty->_realpath(dirname($_template->parent->source->filepath) . DIRECTORY_SEPARATOR . $file);
- // files relative to a template only get one shot
- return is_file($path) ? $path : false;
- }
- // normalize DIRECTORY_SEPARATOR
- if (strpos($file, DIRECTORY_SEPARATOR === '/' ? '\\' : '/') !== false) {
- $file = str_replace(DIRECTORY_SEPARATOR === '/' ? '\\' : '/', DIRECTORY_SEPARATOR, $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, '.' . DIRECTORY_SEPARATOR) !== 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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php
deleted file mode 100644
index 9d98ae181..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/**
- * Smarty Internal Plugin Resource PHP
- * Implements the file system as resource for PHP templates
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
- */
-class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File
-{
- /**
- * Flag that it's an uncompiled resource
- *
- * @var bool
- */
- public $uncompiled = true;
-
- /**
- * Resource does implement populateCompiledFilepath() method
- *
- * @var bool
- */
- public $hasCompiledHandler = true;
-
- /**
- * container for short_open_tag directive's value before executing PHP templates
- *
- * @var string
- */
- protected $short_open_tag;
-
- /**
- * Create a new PHP Resource
- */
- public function __construct()
- {
- $this->short_open_tag = function_exists('ini_get') ? ini_get('short_open_tag') : 1;
- }
-
- /**
- * 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
- */
- public function getContent(Smarty_Template_Source $source)
- {
- if ($source->exists) {
- return '';
- }
- throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
- }
-
- /**
- * 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 = $_template->source->filepath;
- $compiled->timestamp = $_template->source->timestamp;
- $compiled->exists = $_template->source->exists;
- $compiled->file_dependency[ $_template->source->uid ] =
- array(
- $compiled->filepath,
- $compiled->timestamp,
- $_template->source->type,
- );
- }
-
- /**
- * Render and output the template (without using the compiler)
- *
- * @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
- */
- public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
- {
- if (!$source->smarty->allow_php_templates) {
- throw new SmartyException('PHP templates are disabled');
- }
- if (!$source->exists) {
- throw new SmartyException(
- "Unable to load template '{$source->type}:{$source->name}'" .
- ($_template->_isSubTpl() ? " in '{$_template->parent->template_resource}'" : '')
- );
- }
- // prepare variables
- extract($_template->getTemplateVars());
- // include PHP template with short open tags enabled
- if (function_exists('ini_set')) {
- ini_set('short_open_tag', '1');
- }
- /**
- *
- *
- * @var Smarty_Internal_Template $_smarty_template
- * used in included file
- */
- $_smarty_template = $_template;
- include $source->filepath;
- if (function_exists('ini_set')) {
- ini_set('short_open_tag', $this->short_open_tag);
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php
deleted file mode 100644
index 5f0203498..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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
- *
- * @link https://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)
- {
- if (strpos($source->resource, '://') !== false) {
- $source->filepath = $source->resource;
- } else {
- $source->filepath = str_replace(':', '://', $source->resource);
- }
- $source->uid = false;
- $source->content = $this->getContent($source);
- $source->timestamp = $source->exists = !!$source->content;
- }
-
- /**
- * Load template's source from stream into current template object
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- */
- public function getContent(Smarty_Template_Source $source)
- {
- $t = '';
- // the availability of the stream has already been checked in Smarty_Resource::fetch()
- $fp = fopen($source->filepath, 'r+');
- if ($fp) {
- while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
- $t .= $current_line;
- }
- fclose($fp);
- return $t;
- } else {
- return false;
- }
- }
-
- /**
- * 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/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php
deleted file mode 100644
index 3fecbb7ef..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Resource String
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @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
- * @subpackage TemplateResources
- */
-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
- *
- * @return void
- */
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
- {
- $source->uid = $source->filepath = sha1($source->name . $source->smarty->_joined_template_dir);
- $source->timestamp = $source->exists = true;
- }
-
- /**
- * 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
- */
- public function getContent(Smarty_Template_Source $source)
- {
- return $this->decode($source->name);
- }
-
- /**
- * decode base64 and urlencode
- *
- * @param string $string template_resource to decode
- *
- * @return string decoded template_resource
- */
- protected function decode($string)
- {
- // decode if specified
- if (($pos = strpos($string, ':')) !== false) {
- if (!strncmp($string, 'base64', 6)) {
- return base64_decode(substr($string, 7));
- } elseif (!strncmp($string, 'urlencode', 9)) {
- 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 boolean $isConfig flag for config resource
- *
- * @return string unique resource name
- */
- public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
- {
- 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
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return '';
- }
-
- /*
- * Disable timestamp checks for string resource.
- *
- * @return bool
- */
- /**
- * @return bool
- */
- public function checkTimestamps()
- {
- return false;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php
deleted file mode 100644
index 6e12d2ae1..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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_Template_Cached $cached
- * @param \Smarty_Internal_Template $_template
- * @param string $content
- *
- * @throws \Exception
- * @throws \SmartyException
- */
- 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/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php
deleted file mode 100644
index 287096438..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-/**
- * Smarty cache resource file clear method
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Runtime Cache Resource File Class
- *
- * @package Smarty
- * @subpackage PluginsInternal
- */
-class Smarty_Internal_Runtime_CacheResourceFile
-{
- /**
- * 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 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 . '/';
- }
- }
- }
- if (isset($resource_name)) {
- $_save_stat = $smarty->caching;
- $smarty->caching = Smarty::CACHING_LIFETIME_CURRENT;
- $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) === '.') {
- continue;
- }
- $_filepath = (string)$_file;
- // directory ?
- if ($_file->isDir()) {
- if (!$_cache->isDot()) {
- // delete folder if empty
- @rmdir($_file->getPathname());
- }
- } else {
- // delete only php files
- if (substr($_filepath, -4) !== '.php') {
- continue;
- }
- $_parts = explode($_dir_sep, str_replace('\\', '/', substr($_filepath, $_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;
- }
- }
- }
- if (is_file($_filepath)) {
- // expired ?
- if (isset($exp_time)) {
- if ($exp_time < 0) {
- preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_filepath), $match);
- if ($_time < (filemtime($_filepath) + $match[ 1 ])) {
- continue;
- }
- } else {
- if ($_time - filemtime($_filepath) < $exp_time) {
- continue;
- }
- }
- }
- $_count += @unlink($_filepath) ? 1 : 0;
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
- ) {
- opcache_invalidate($_filepath, true);
- } elseif (function_exists('apc_delete_file')) {
- apc_delete_file($_filepath);
- }
- }
- }
- }
- }
- return $_count;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php
deleted file mode 100644
index c9dca83d9..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-
-/**
- * Runtime Extension Capture
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Runtime_Capture
-{
- /**
- * Flag that this instance will not be cached
- *
- * @var bool
- */
- public $isPrivateExtension = true;
-
- /**
- * Stack of capture parameter
- *
- * @var array
- */
- private $captureStack = array();
-
- /**
- * Current open capture sections
- *
- * @var int
- */
- private $captureCount = 0;
-
- /**
- * Count stack
- *
- * @var int[]
- */
- private $countStack = array();
-
- /**
- * Named buffer
- *
- * @var string[]
- */
- private $namedBuffer = array();
-
- /**
- * Flag if callbacks are registered
- *
- * @var bool
- */
- private $isRegistered = false;
-
- /**
- * Open capture section
- *
- * @param \Smarty_Internal_Template $_template
- * @param string $buffer capture name
- * @param string $assign variable name
- * @param string $append variable name
- */
- public function open(Smarty_Internal_Template $_template, $buffer, $assign, $append)
- {
- if (!$this->isRegistered) {
- $this->register($_template);
- }
- $this->captureStack[] = array(
- $buffer,
- $assign,
- $append
- );
- $this->captureCount++;
- ob_start();
- }
-
- /**
- * Register callbacks in template class
- *
- * @param \Smarty_Internal_Template $_template
- */
- private function register(Smarty_Internal_Template $_template)
- {
- $_template->startRenderCallbacks[] = array(
- $this,
- 'startRender'
- );
- $_template->endRenderCallbacks[] = array(
- $this,
- 'endRender'
- );
- $this->startRender($_template);
- $this->isRegistered = true;
- }
-
- /**
- * Start render callback
- *
- * @param \Smarty_Internal_Template $_template
- */
- public function startRender(Smarty_Internal_Template $_template)
- {
- $this->countStack[] = $this->captureCount;
- $this->captureCount = 0;
- }
-
- /**
- * Close capture section
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @throws \SmartyException
- */
- public function close(Smarty_Internal_Template $_template)
- {
- if ($this->captureCount) {
- list($buffer, $assign, $append) = array_pop($this->captureStack);
- $this->captureCount--;
- if (isset($assign)) {
- $_template->assign($assign, ob_get_contents());
- }
- if (isset($append)) {
- $_template->append($append, ob_get_contents());
- }
- $this->namedBuffer[ $buffer ] = ob_get_clean();
- } else {
- $this->error($_template);
- }
- }
-
- /**
- * Error exception on not matching {capture}{/capture}
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @throws \SmartyException
- */
- public function error(Smarty_Internal_Template $_template)
- {
- throw new SmartyException("Not matching {capture}{/capture} in '{$_template->template_resource}'");
- }
-
- /**
- * Return content of named capture buffer by key or as array
- *
- * @param \Smarty_Internal_Template $_template
- * @param string|null $name
- *
- * @return string|string[]|null
- */
- public function getBuffer(Smarty_Internal_Template $_template, $name = null)
- {
- if (isset($name)) {
- return isset($this->namedBuffer[ $name ]) ? $this->namedBuffer[ $name ] : null;
- } else {
- return $this->namedBuffer;
- }
- }
-
- /**
- * End render callback
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @throws \SmartyException
- */
- public function endRender(Smarty_Internal_Template $_template)
- {
- if ($this->captureCount) {
- $this->error($_template);
- } else {
- $this->captureCount = array_pop($this->countStack);
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php
deleted file mode 100644
index d0ca751e2..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?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[ 'version' ] = Smarty::SMARTY_VERSION;
- $properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
- if (!$cache) {
- $properties[ 'has_nocache_code' ] = $_template->compiled->has_nocache_code;
- $properties[ 'file_dependency' ] = $_template->compiled->file_dependency;
- $properties[ 'includes' ] = $_template->compiled->includes;
- } else {
- $properties[ 'has_nocache_code' ] = $_template->cached->has_nocache_code;
- $properties[ 'file_dependency' ] = $_template->cached->file_dependency;
- $properties[ 'cache_lifetime' ] = $_template->cache_lifetime;
- }
- $output = sprintf(
- "<?php\n/* Smarty version %s, created on %s\n from '%s' */\n\n",
- $properties[ 'version' ],
- date("Y-m-d H:i:s"),
- str_replace('*/', '* /', $_template->source->filepath)
- );
- $output .= "/* @var Smarty_Internal_Template \$_smarty_tpl */\n";
- $dec = "\$_smarty_tpl->_decodeProperties(\$_smarty_tpl, " . var_export($properties, true) . ',' .
- ($cache ? 'true' : 'false') . ')';
- $output .= "if ({$dec}) {\n";
- $output .= "function {$properties['unifunc']} (Smarty_Internal_Template \$_smarty_tpl) {\n";
- if (!$cache && !empty($compiler->tpl_function)) {
- $output .= '$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions($_smarty_tpl, ';
- $output .= var_export($compiler->tpl_function, true);
- $output .= ");\n";
- }
- if ($cache && isset($_template->smarty->ext->_tplFunction)) {
- $output .= "\$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions(\$_smarty_tpl, " .
- var_export($_template->smarty->ext->_tplFunction->getTplFunction($_template), true) . ");\n";
- }
- $output .= "?>";
- $output .= $content;
- $output .= "<?php }\n?>";
- $output .= $functions;
- $output .= "<?php }\n";
- // remove unneeded PHP tags
- if (preg_match('/\s*\?>[\n]?<\?php\s*/', $output)) {
- $curr_split = preg_split(
- '/\s*\?>[\n]?<\?php\s*/',
- $output
- );
- preg_match_all(
- '/\s*\?>[\n]?<\?php\s*/',
- $output,
- $curr_parts
- );
- $output = '';
- foreach ($curr_split as $idx => $curr_output) {
- $output .= $curr_output;
- if (isset($curr_parts[ 0 ][ $idx ])) {
- $output .= "\n";
- }
- }
- }
- if (preg_match('/\?>\s*$/', $output)) {
- $curr_split = preg_split(
- '/\?>\s*$/',
- $output
- );
- $output = '';
- foreach ($curr_split as $idx => $curr_output) {
- $output .= $curr_output;
- }
- }
- return $output;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
deleted file mode 100644
index 9f868e1a4..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
+++ /dev/null
@@ -1,69 +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_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) {
- $content = call_user_func($template->smarty->registered_filters[ $type ][ $key ], $content, $template);
- }
- }
- // return filtered output
- return $content;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php
deleted file mode 100644
index badead165..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-
-/**
- * Foreach Runtime Methods count(), init(), restore()
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Runtime_Foreach
-{
- /**
- * Stack of saved variables
- *
- * @var array
- */
- private $stack = array();
-
- /**
- * Init foreach loop
- * - save item and key variables, named foreach property data if defined
- * - init item and key variables, named foreach property data if required
- * - count total if required
- *
- * @param \Smarty_Internal_Template $tpl
- * @param mixed $from values to loop over
- * @param string $item variable name
- * @param bool $needTotal flag if we need to count values
- * @param null|string $key variable name
- * @param null|string $name of named foreach
- * @param array $properties of named foreach
- *
- * @return mixed $from
- */
- public function init(
- Smarty_Internal_Template $tpl,
- $from,
- $item,
- $needTotal = false,
- $key = null,
- $name = null,
- $properties = array()
- ) {
- $needTotal = $needTotal || isset($properties[ 'total' ]);
- $saveVars = array();
- $total = null;
- if (!is_array($from)) {
- if (is_object($from)) {
- if ($needTotal) {
- $total = $this->count($from);
- }
- } else {
- settype($from, 'array');
- }
- }
- if (!isset($total)) {
- $total = empty($from) ? 0 : ($needTotal ? count($from) : 1);
- }
- if (isset($tpl->tpl_vars[ $item ])) {
- $saveVars[ 'item' ] = array(
- $item,
- $tpl->tpl_vars[ $item ]
- );
- }
- $tpl->tpl_vars[ $item ] = new Smarty_Variable(null, $tpl->isRenderingCache);
- if ($total === 0) {
- $from = null;
- } else {
- if ($key) {
- if (isset($tpl->tpl_vars[ $key ])) {
- $saveVars[ 'key' ] = array(
- $key,
- $tpl->tpl_vars[ $key ]
- );
- }
- $tpl->tpl_vars[ $key ] = new Smarty_Variable(null, $tpl->isRenderingCache);
- }
- }
- if ($needTotal) {
- $tpl->tpl_vars[ $item ]->total = $total;
- }
- if ($name) {
- $namedVar = "__smarty_foreach_{$name}";
- if (isset($tpl->tpl_vars[ $namedVar ])) {
- $saveVars[ 'named' ] = array(
- $namedVar,
- $tpl->tpl_vars[ $namedVar ]
- );
- }
- $namedProp = array();
- if (isset($properties[ 'total' ])) {
- $namedProp[ 'total' ] = $total;
- }
- if (isset($properties[ 'iteration' ])) {
- $namedProp[ 'iteration' ] = 0;
- }
- if (isset($properties[ 'index' ])) {
- $namedProp[ 'index' ] = -1;
- }
- if (isset($properties[ 'show' ])) {
- $namedProp[ 'show' ] = ($total > 0);
- }
- $tpl->tpl_vars[ $namedVar ] = new Smarty_Variable($namedProp);
- }
- $this->stack[] = $saveVars;
- return $from;
- }
-
- /**
- * [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 ($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 $value instanceof Generator ? 1 : iterator_count($value);
- } elseif ($value instanceof Countable) {
- return count($value);
- } elseif ($value instanceof PDOStatement) {
- return $value->rowCount();
- } elseif ($value instanceof Traversable) {
- return iterator_count($value);
- }
- return count((array)$value);
- }
-
- /**
- * Restore saved variables
- *
- * will be called by {break n} or {continue n} for the required number of levels
- *
- * @param \Smarty_Internal_Template $tpl
- * @param int $levels number of levels
- */
- public function restore(Smarty_Internal_Template $tpl, $levels = 1)
- {
- while ($levels) {
- $saveVars = array_pop($this->stack);
- if (!empty($saveVars)) {
- if (isset($saveVars[ 'item' ])) {
- $item = &$saveVars[ 'item' ];
- $tpl->tpl_vars[ $item[ 0 ] ]->value = $item[ 1 ]->value;
- }
- if (isset($saveVars[ 'key' ])) {
- $tpl->tpl_vars[ $saveVars[ 'key' ][ 0 ] ] = $saveVars[ 'key' ][ 1 ];
- }
- if (isset($saveVars[ 'named' ])) {
- $tpl->tpl_vars[ $saveVars[ 'named' ][ 0 ] ] = $saveVars[ 'named' ][ 1 ];
- }
- }
- $levels--;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php
deleted file mode 100644
index 5ae98304e..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php
+++ /dev/null
@@ -1,181 +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_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 . DIRECTORY_SEPARATOR, 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/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php
deleted file mode 100644
index 8f7f02d59..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php
+++ /dev/null
@@ -1,251 +0,0 @@
-<?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 root child {block} objects
- *
- * @var Smarty_Internal_Block[]
- */
- public $childRoot = array();
-
- /**
- * inheritance template nesting level
- *
- * @var int
- */
- public $inheritanceLevel = 0;
-
- /**
- * inheritance template index
- *
- * @var int
- */
- public $tplIndex = -1;
-
- /**
- * Array of template source objects
- *
- * @var Smarty_Template_Source[]
- */
- public $sources = array();
-
- /**
- * Stack of source objects while executing block code
- *
- * @var Smarty_Template_Source[]
- */
- public $sourceStack = array();
-
- /**
- * 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 called while executing parent template it must be a sub-template with new inheritance root
- if ($initChild && $this->state === 3 && (strpos($tpl->template_resource, 'extendsall') === false)) {
- $tpl->inheritance = new Smarty_Internal_Runtime_Inheritance();
- $tpl->inheritance->init($tpl, $initChild, $blockNames);
- return;
- }
- ++$this->tplIndex;
- $this->sources[ $this->tplIndex ] = $tpl->source;
- // start of child sub template(s)
- if ($initChild) {
- $this->state = 1;
- if (!$this->inheritanceLevel) {
- //grab any output of child templates
- ob_start();
- }
- ++$this->inheritanceLevel;
- // $tpl->startRenderCallbacks[ 'inheritance' ] = array($this, 'subTemplateStart');
- // $tpl->endRenderCallbacks[ 'inheritance' ] = array($this, 'subTemplateEnd');
- }
- // 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
- * @param null|string $template optional name of inheritance parent template
- * @param null|string $uid uid of inline template
- * @param null|string $func function call name of inline template
- *
- * @throws \Exception
- * @throws \SmartyException
- */
- public function endChild(Smarty_Internal_Template $tpl, $template = null, $uid = null, $func = null)
- {
- --$this->inheritanceLevel;
- if (!$this->inheritanceLevel) {
- ob_end_clean();
- $this->state = 2;
- }
- if (isset($template) && (($tpl->parent->_isTplObj() && $tpl->parent->source->type !== 'extends')
- || $tpl->smarty->extends_recursion)
- ) {
- $tpl->_subTemplateRender(
- $template,
- $tpl->cache_id,
- $tpl->compile_id,
- $tpl->caching ? 9999 : 0,
- $tpl->cache_lifetime,
- array(),
- 2,
- false,
- $uid,
- $func
- );
- }
- }
-
- /**
- * Smarty_Internal_Block constructor.
- * - if outer level {block} of child template ($state === 1) save it as child root block
- * - otherwise process inheritance and render
- *
- * @param \Smarty_Internal_Template $tpl
- * @param $className
- * @param string $name
- * @param int|null $tplIndex index of outer level {block} if nested
- *
- * @throws \SmartyException
- */
- public function instanceBlock(Smarty_Internal_Template $tpl, $className, $name, $tplIndex = null)
- {
- $block = new $className($name, isset($tplIndex) ? $tplIndex : $this->tplIndex);
- if (isset($this->childRoot[ $name ])) {
- $block->child = $this->childRoot[ $name ];
- }
- if ($this->state === 1) {
- $this->childRoot[ $name ] = $block;
- return;
- }
- // make sure we got child block of child template of current block
- while ($block->child && $block->child->child && $block->tplIndex <= $block->child->tplIndex) {
- $block->child = $block->child->child;
- }
- $this->process($tpl, $block);
- }
-
- /**
- * Goto child block or render this
- *
- * @param \Smarty_Internal_Template $tpl
- * @param \Smarty_Internal_Block $block
- * @param \Smarty_Internal_Block|null $parent
- *
- * @throws \SmartyException
- */
- public function process(
- Smarty_Internal_Template $tpl,
- Smarty_Internal_Block $block,
- Smarty_Internal_Block $parent = null
- ) {
- if ($block->hide && !isset($block->child)) {
- return;
- }
- if (isset($block->child) && $block->child->hide && !isset($block->child->child)) {
- $block->child = null;
- }
- $block->parent = $parent;
- if ($block->append && !$block->prepend && isset($parent)) {
- $this->callParent($tpl, $block, '\'{block append}\'');
- }
- if ($block->callsChild || !isset($block->child) || ($block->child->hide && !isset($block->child->child))) {
- $this->callBlock($block, $tpl);
- } else {
- $this->process($tpl, $block->child, $block);
- }
- if ($block->prepend && isset($parent)) {
- $this->callParent($tpl, $block, '{block prepend}');
- if ($block->append) {
- if ($block->callsChild || !isset($block->child)
- || ($block->child->hide && !isset($block->child->child))
- ) {
- $this->callBlock($block, $tpl);
- } else {
- $this->process($tpl, $block->child, $block);
- }
- }
- }
- $block->parent = null;
- }
-
- /**
- * Render child on \$smarty.block.child
- *
- * @param \Smarty_Internal_Template $tpl
- * @param \Smarty_Internal_Block $block
- *
- * @return null|string block content
- * @throws \SmartyException
- */
- public function callChild(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block)
- {
- if (isset($block->child)) {
- $this->process($tpl, $block->child, $block);
- }
- }
-
- /**
- * Render parent block on \$smarty.block.parent or {block append/prepend}
- *
- * @param \Smarty_Internal_Template $tpl
- * @param \Smarty_Internal_Block $block
- * @param string $tag
- *
- * @return null|string block content
- * @throws \SmartyException
- */
- public function callParent(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block, $tag)
- {
- if (isset($block->parent)) {
- $this->callBlock($block->parent, $tpl);
- } else {
- throw new SmartyException("inheritance: illegal '{$tag}' used in child template '{$tpl->inheritance->sources[$block->tplIndex]->filepath}' block '{$block->name}'");
- }
- }
-
- /**
- * render block
- *
- * @param \Smarty_Internal_Block $block
- * @param \Smarty_Internal_Template $tpl
- */
- public function callBlock(Smarty_Internal_Block $block, Smarty_Internal_Template $tpl)
- {
- $this->sourceStack[] = $tpl->source;
- $tpl->source = $this->sources[ $block->tplIndex ];
- $block->callBlock($tpl);
- $tpl->source = array_pop($this->sourceStack);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php
deleted file mode 100644
index 7994aa048..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * {make_nocache} Runtime Methods save(), store()
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Runtime_Make_Nocache
-{
- /**
- * Save current variable value while rendering compiled template and inject nocache code to
- * assign variable value in cahed template
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string $var variable name
- *
- * @throws \SmartyException
- */
- public function save(Smarty_Internal_Template $tpl, $var)
- {
- if (isset($tpl->tpl_vars[ $var ])) {
- $export =
- preg_replace('/^\\\\?Smarty_Variable::__set_state[(]|[)]$/', '', var_export($tpl->tpl_vars[ $var ], true));
- if (preg_match('/(\w+)::__set_state/', $export, $match)) {
- throw new SmartyException("{make_nocache \${$var}} in template '{$tpl->source->name}': variable does contain object '{$match[1]}' not implementing method '__set_state'");
- }
- echo "/*%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/<?php " .
- addcslashes("\$_smarty_tpl->smarty->ext->_make_nocache->store(\$_smarty_tpl, '{$var}', ", '\\') .
- $export . ");?>\n/*/%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/";
- }
- }
-
- /**
- * Store variable value saved while rendering compiled template in cached template context
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string $var variable name
- * @param array $properties
- */
- public function store(Smarty_Internal_Template $tpl, $var, $properties)
- {
- // do not overwrite existing nocache variables
- if (!isset($tpl->tpl_vars[ $var ]) || !$tpl->tpl_vars[ $var ]->nocache) {
- $newVar = new Smarty_Variable();
- unset($properties[ 'nocache' ]);
- foreach ($properties as $k => $v) {
- $newVar->$k = $v;
- }
- $tpl->tpl_vars[ $var ] = $newVar;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php
deleted file mode 100644
index e5f8e48f7..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-
-/**
- * TplFunction 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)
- {
- $funcParam = isset($tpl->tplFunctions[ $name ]) ? $tpl->tplFunctions[ $name ] :
- (isset($tpl->smarty->tplFunctions[ $name ]) ? $tpl->smarty->tplFunctions[ $name ] : null);
- if (isset($funcParam)) {
- if (!$tpl->caching || ($tpl->caching && $nocache)) {
- $function = $funcParam[ 'call_name' ];
- } else {
- if (isset($funcParam[ 'call_name_caching' ])) {
- $function = $funcParam[ 'call_name_caching' ];
- } else {
- $function = $funcParam[ 'call_name' ];
- }
- }
- if (function_exists($function)) {
- $this->saveTemplateVariables($tpl, $name);
- $function($tpl, $params);
- $this->restoreTemplateVariables($tpl, $name);
- return;
- }
- // try to load template function dynamically
- if ($this->addTplFuncToCache($tpl, $name, $function)) {
- $this->saveTemplateVariables($tpl, $name);
- $function($tpl, $params);
- $this->restoreTemplateVariables($tpl, $name);
- return;
- }
- }
- throw new SmartyException("Unable to find template function '{$name}'");
- }
-
- /**
- * Register template functions defined by template
- *
- * @param \Smarty|\Smarty_Internal_Template|\Smarty_Internal_TemplateBase $obj
- * @param array $tplFunctions source information array of
- * template functions defined
- * in template
- * @param bool $override if true replace existing
- * functions with same name
- */
- public function registerTplFunctions(Smarty_Internal_TemplateBase $obj, $tplFunctions, $override = true)
- {
- $obj->tplFunctions =
- $override ? array_merge($obj->tplFunctions, $tplFunctions) : array_merge($tplFunctions, $obj->tplFunctions);
- // make sure that the template functions are known in parent templates
- if ($obj->_isSubTpl()) {
- $obj->smarty->ext->_tplFunction->registerTplFunctions($obj->parent, $tplFunctions, false);
- } else {
- $obj->smarty->tplFunctions = $override ? array_merge($obj->smarty->tplFunctions, $tplFunctions) :
- array_merge($tplFunctions, $obj->smarty->tplFunctions);
- }
- }
-
- /**
- * Return source parameter array for single or all template functions
- *
- * @param \Smarty_Internal_Template $tpl template object
- * @param null|string $name template function name
- *
- * @return array|bool|mixed
- */
- public function getTplFunction(Smarty_Internal_Template $tpl, $name = null)
- {
- if (isset($name)) {
- return isset($tpl->tplFunctions[ $name ]) ? $tpl->tplFunctions[ $name ] :
- (isset($tpl->smarty->tplFunctions[ $name ]) ? $tpl->smarty->tplFunctions[ $name ] : false);
- } else {
- return empty($tpl->tplFunctions) ? $tpl->smarty->tplFunctions : $tpl->tplFunctions;
- }
- }
-
- /**
- * 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->tplFunctions[ $_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)) {
- $content = $tplPtr->cached->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(
- $tplPtr,
- preg_replace('/\s*\?>\s*$/', "\n", $content) .
- "\n" . preg_replace(
- array(
- '/^\s*<\?php\s+/',
- '/\s*\?>\s*$/',
- ),
- "\n",
- $match[ 0 ]
- )
- );
- }
- }
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Save current template variables on stack
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string $name stack name
- */
- public function saveTemplateVariables(Smarty_Internal_Template $tpl, $name)
- {
- $tpl->_cache[ 'varStack' ][] =
- array('tpl' => $tpl->tpl_vars, 'config' => $tpl->config_vars, 'name' => "_tplFunction_{$name}");
- }
-
- /**
- * Restore saved variables into template objects
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string $name stack name
- */
- public function restoreTemplateVariables(Smarty_Internal_Template $tpl, $name)
- {
- if (isset($tpl->_cache[ 'varStack' ])) {
- $vars = array_pop($tpl->_cache[ 'varStack' ]);
- $tpl->tpl_vars = $vars[ 'tpl' ];
- $tpl->config_vars = $vars[ 'config' ];
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php
deleted file mode 100644
index c1abbb321..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?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)
- {
- }
-
- /**
- * 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)
- {
- 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 = (int)$_template->compile_check;
- $_template->compile_check = Smarty::COMPILECHECK_OFF;
- if ($_template->_isSubTpl()) {
- $_template->compiled->unifunc = $_template->parent->compiled->unifunc;
- }
- if (!$_template->cached->processed) {
- $_template->cached->process($_template, true);
- }
- $_template->compile_check = $compile_check;
- $cached->getRenderedTemplateCode($_template);
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_cache($_template);
- }
- }
-
- /**
- * 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
- ) {
- $php_pattern = '/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/';
- $content = ob_get_clean();
- $hash_array = $cached->hashes;
- $hash_array[ $_template->compiled->nocache_hash ] = true;
- $hash_array = array_keys($hash_array);
- $nocache_hash = '(' . implode('|', $hash_array) . ')';
- $_template->cached->has_nocache_code = false;
- // get text between non-cached items
- $cache_split =
- preg_split(
- "!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
- $content
- );
- // get non-cached items
- preg_match_all(
- "!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
- $content,
- $cache_parts
- );
- $content = '';
- // loop over items, stitch back together
- foreach ($cache_split as $curr_idx => $curr_split) {
- if (preg_match($php_pattern, $curr_split)) {
- // escape PHP tags in template content
- $php_split = preg_split(
- $php_pattern,
- $curr_split
- );
- preg_match_all(
- $php_pattern,
- $curr_split,
- $php_parts
- );
- foreach ($php_split as $idx_php => $curr_php) {
- $content .= $curr_php;
- if (isset($php_parts[ 0 ][ $idx_php ])) {
- $content .= "<?php echo '{$php_parts[ 1 ][ $idx_php ]}'; ?>\n";
- }
- }
- } else {
- $content .= $curr_split;
- }
- if (isset($cache_parts[ 0 ][ $curr_idx ])) {
- $_template->cached->has_nocache_code = true;
- $content .= $cache_parts[ 2 ][ $curr_idx ];
- }
- }
- if (!$no_output_filter && !$_template->cached->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($_template, $content);
- }
-
- /**
- * Writes the content to cache resource
- *
- * @param Smarty_Internal_Template $_template
- * @param string $content
- *
- * @return bool
- */
- public function writeCachedContent(Smarty_Internal_Template $_template, $content)
- {
- if ($_template->source->handler->recompiled || !$_template->caching
- ) {
- // don't write cache file
- return false;
- }
- if (!isset($_template->cached)) {
- $_template->loadCached();
- }
- $content = $_template->smarty->ext->_codeFrame->create($_template, $content, '', true);
- return $this->write($_template, $content);
- }
-
- /**
- * Write this cache object to handler
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- *
- * @return bool success
- */
- public function write(Smarty_Internal_Template $_template, $content)
- {
- if (!$_template->source->handler->recompiled) {
- $cached = $_template->cached;
- 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;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
deleted file mode 100644
index 2240f97ca..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * Runtime Extension updateScope
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- **/
-class Smarty_Internal_Runtime_UpdateScope
-{
- /**
- * Update new assigned template or config variable in other effected scopes
- *
- * @param Smarty_Internal_Template $tpl data object
- * @param string|null $varName variable name
- * @param int $tagScope tag scope to which bubble up variable value
- */
- public function _updateScope(Smarty_Internal_Template $tpl, $varName, $tagScope = 0)
- {
- if ($tagScope) {
- $this->_updateVarStack($tpl, $varName);
- $tagScope = $tagScope & ~Smarty::SCOPE_LOCAL;
- if (!$tpl->scope && !$tagScope) {
- return;
- }
- }
- $mergedScope = $tagScope | $tpl->scope;
- if ($mergedScope) {
- if ($mergedScope & Smarty::SCOPE_GLOBAL && $varName) {
- Smarty::$global_tpl_vars[ $varName ] = $tpl->tpl_vars[ $varName ];
- }
- // update scopes
- foreach ($this->_getAffectedScopes($tpl, $mergedScope) as $ptr) {
- $this->_updateVariableInOtherScope($ptr->tpl_vars, $tpl, $varName);
- if ($tagScope && $ptr->_isTplObj() && isset($tpl->_cache[ 'varStack' ])) {
- $this->_updateVarStack($ptr, $varName);
- }
- }
- }
- }
-
- /**
- * Get array of objects which needs to be updated by given scope value
- *
- * @param Smarty_Internal_Template $tpl
- * @param int $mergedScope merged tag and template scope to which bubble up variable value
- *
- * @return array
- */
- public function _getAffectedScopes(Smarty_Internal_Template $tpl, $mergedScope)
- {
- $_stack = array();
- $ptr = $tpl->parent;
- if ($mergedScope && isset($ptr) && $ptr->_isTplObj()) {
- $_stack[] = $ptr;
- $mergedScope = $mergedScope & ~Smarty::SCOPE_PARENT;
- if (!$mergedScope) {
- // only parent was set, we are done
- return $_stack;
- }
- $ptr = $ptr->parent;
- }
- while (isset($ptr) && $ptr->_isTplObj()) {
- $_stack[] = $ptr;
- $ptr = $ptr->parent;
- }
- if ($mergedScope & Smarty::SCOPE_SMARTY) {
- if (isset($tpl->smarty)) {
- $_stack[] = $tpl->smarty;
- }
- } elseif ($mergedScope & Smarty::SCOPE_ROOT) {
- while (isset($ptr)) {
- if (!$ptr->_isTplObj()) {
- $_stack[] = $ptr;
- break;
- }
- $ptr = $ptr->parent;
- }
- }
- return $_stack;
- }
-
- /**
- * Update variable in other scope
- *
- * @param array $tpl_vars template variable array
- * @param \Smarty_Internal_Template $from
- * @param string $varName variable name
- */
- public function _updateVariableInOtherScope(&$tpl_vars, Smarty_Internal_Template $from, $varName)
- {
- if (!isset($tpl_vars[ $varName ])) {
- $tpl_vars[ $varName ] = clone $from->tpl_vars[ $varName ];
- } else {
- $tpl_vars[ $varName ] = clone $tpl_vars[ $varName ];
- $tpl_vars[ $varName ]->value = $from->tpl_vars[ $varName ]->value;
- }
- }
-
- /**
- * Update variable in template local variable stack
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string|null $varName variable name or null for config variables
- */
- public function _updateVarStack(Smarty_Internal_Template $tpl, $varName)
- {
- $i = 0;
- while (isset($tpl->_cache[ 'varStack' ][ $i ])) {
- $this->_updateVariableInOtherScope($tpl->_cache[ 'varStack' ][ $i ][ 'tpl' ], $tpl, $varName);
- $i++;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php
deleted file mode 100644
index 492d5eb25..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * Smarty write file plugin
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Monte Ohrt
- */
-
-/**
- * Smarty Internal Write File Class
- *
- * @package Smarty
- * @subpackage PluginsInternal
- */
-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
- *
- * @throws SmartyException
- * @return boolean true
- */
- public function writeFile($_filepath, $_contents, Smarty $smarty)
- {
- $_error_reporting = error_reporting();
- error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
- $_dirpath = dirname($_filepath);
- // if subdirs, create dir structure
- if ($_dirpath !== '.') {
- $i = 0;
- // loop if concurrency problem occurs
- // see https://bugs.php.net/bug.php?id=35326
- while (!is_dir($_dirpath)) {
- if (@mkdir($_dirpath, 0777, true)) {
- break;
- }
- clearstatcache();
- if (++$i === 3) {
- error_reporting($_error_reporting);
- throw new SmartyException("unable to create directory {$_dirpath}");
- }
- sleep(1);
- }
- }
- // write to tmp file, then move to overt file lock race condition
- $_tmp_file = $_dirpath . DIRECTORY_SEPARATOR . 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}");
- }
- /*
- * Windows' rename() fails if the destination exists,
- * Linux' rename() properly handles the overwrite.
- * 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
- if (is_file($_filepath)) {
- @unlink($_filepath);
- }
- // rename tmp file
- $success = @rename($_tmp_file, $_filepath);
- } else {
- // rename tmp file
- $success = @rename($_tmp_file, $_filepath);
- if (!$success) {
- // remove original file
- 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}");
- }
- // set file permissions
- @chmod($_filepath, 0666 & ~umask());
- error_reporting($_error_reporting);
- return true;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
deleted file mode 100644
index 21f4e3fdd..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Smarty Template Compiler Base
- * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Class SmartyTemplateCompiler
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase
-{
- /**
- * Lexer class name
- *
- * @var string
- */
- public $lexer_class;
-
- /**
- * Parser class name
- *
- * @var string
- */
- public $parser_class;
-
- /**
- * array of vars which can be compiled in local scope
- *
- * @var array
- */
- public $local_var = array();
-
- /**
- * array of callbacks called when the normal compile process of template is finished
- *
- * @var array
- */
- public $postCompileCallbacks = array();
-
- /**
- * prefix code
- *
- * @var string
- */
- public $prefixCompiledCode = '';
-
- /**
- * postfix code
- *
- * @var string
- */
- public $postfixCompiledCode = '';
-
- /**
- * Initialize compiler
- *
- * @param string $lexer_class class name
- * @param string $parser_class class name
- * @param Smarty $smarty global instance
- */
- public function __construct($lexer_class, $parser_class, Smarty $smarty)
- {
- parent::__construct($smarty);
- // get required plugins
- $this->lexer_class = $lexer_class;
- $this->parser_class = $parser_class;
- }
-
- /**
- * 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, $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->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')
- && function_exists('ini_get')
- && ((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->parser->lex->yylex()) {
- if ($this->smarty->_parserdebug) {
- 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->parser->lex->token, $this->parser->lex->value);
- }
- // 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 {$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 $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;
- }
- }
-
- /**
- * Remove a post compile callback
- *
- * @param string $key callback key
- */
- public function unregisterPostCompileCallback($key)
- {
- unset($this->postCompileCallbacks[ $key ]);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php
deleted file mode 100644
index 72d1d52e0..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php
+++ /dev/null
@@ -1,741 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Template
- * This file contains the Smarty template engine
- *
- * @package Smarty
- * @subpackage Template
- * @author Uwe Tews
- */
-
-/**
- * Main class with template data structures and methods
- *
- * @package Smarty
- * @subpackage Template
- *
- * @property Smarty_Template_Compiled $compiled
- * @property Smarty_Template_Cached $cached
- * @property Smarty_Internal_TemplateCompilerBase $compiler
- * @property mixed|\Smarty_Template_Cached registered_plugins
- *
- * The following methods will be dynamically loaded by the extension handler when they are called.
- * They are located in a corresponding Smarty_Internal_Method_xxxx class
- *
- * @method bool mustCompile()
- */
-#[\AllowDynamicProperties]
-class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
-{
- /**
- * Template object cache
- *
- * @var Smarty_Internal_Template[]
- */
- public static $tplObjCache = array();
-
- /**
- * Template object cache for Smarty::isCached() === true
- *
- * @var Smarty_Internal_Template[]
- */
- public static $isCacheTplObj = array();
-
- /**
- * Sub template Info Cache
- * - index name
- * - value use count
- *
- * @var int[]
- */
- public static $subTplInfo = array();
-
- /**
- * This object type (Smarty = 1, template = 2, data = 4)
- *
- * @var int
- */
- public $_objType = 2;
-
- /**
- * Global smarty instance
- *
- * @var Smarty
- */
- public $smarty = null;
-
- /**
- * Source instance
- *
- * @var Smarty_Template_Source|Smarty_Template_Config
- */
- public $source = null;
-
- /**
- * Inheritance runtime extension
- *
- * @var Smarty_Internal_Runtime_Inheritance
- */
- public $inheritance = 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;
-
- /**
- * Template Id
- *
- * @var null|string
- */
- public $templateId = null;
-
- /**
- * Scope in which variables shall be assigned
- *
- * @var int
- */
- public $scope = 0;
-
- /**
- * Flag which is set while rending a cache file
- *
- * @var bool
- */
- public $isRenderingCache = false;
-
- /**
- * Callbacks called before rendering template
- *
- * @var callback[]
- */
- public $startRenderCallbacks = array();
-
- /**
- * Callbacks called after rendering template
- *
- * @var callback[]
- */
- public $endRenderCallbacks = array();
-
- /**
- * Create template data object
- * Some of the global Smarty settings copied to template scope
- * It load the required template resources and caching plugins
- *
- * @param string $template_resource template resource string
- * @param Smarty $smarty Smarty instance
- * @param null|\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|int|null $_caching use caching?
- * @param int|null $_cache_lifetime cache life-time in
- * seconds
- * @param bool $_isConfig
- *
- * @throws \SmartyException
- */
- public function __construct(
- $template_resource,
- Smarty $smarty,
- Smarty_Internal_Data $_parent = null,
- $_cache_id = null,
- $_compile_id = null,
- $_caching = null,
- $_cache_lifetime = null,
- $_isConfig = false
- ) {
- $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 = (int)($_caching === null ? $this->smarty->caching : $_caching);
- $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime;
- $this->compile_check = (int)$smarty->compile_check;
- $this->parent = $_parent;
- // Template resource
- $this->template_resource = $template_resource;
- $this->source = $_isConfig ? Smarty_Template_Config::load($this) : Smarty_Template_Source::load($this);
- parent::__construct();
- if ($smarty->security_policy && method_exists($smarty->security_policy, 'registerCallBacks')) {
- $smarty->security_policy->registerCallBacks($this);
- }
- }
-
- /**
- * render template
- *
- * @param bool $no_output_filter if true do not run output filter
- * @param null|bool $display true: display, false: fetch null: sub-template
- *
- * @return string
- * @throws \Exception
- * @throws \SmartyException
- */
- public function render($no_output_filter = true, $display = null)
- {
- if ($this->smarty->debugging) {
- if (!isset($this->smarty->_debug)) {
- $this->smarty->_debug = new Smarty_Internal_Debug();
- }
- $this->smarty->_debug->start_template($this, $display);
- }
- // checks if template exists
- if (!$this->source->exists) {
- throw new SmartyException(
- "Unable to load template '{$this->source->type}:{$this->source->name}'" .
- ($this->_isSubTpl() ? " in '{$this->parent->template_resource}'" : '')
- );
- }
- // disable caching for evaluated code
- if ($this->source->handler->recompiled) {
- $this->caching = Smarty::CACHING_OFF;
- }
- // read from cache or render
- if ($this->caching === Smarty::CACHING_LIFETIME_CURRENT || $this->caching === Smarty::CACHING_LIFETIME_SAVED) {
- if (!isset($this->cached) || $this->cached->cache_id !== $this->cache_id
- || $this->cached->compile_id !== $this->compile_id
- ) {
- $this->loadCached(true);
- }
- $this->cached->render($this, $no_output_filter);
- } else {
- if (!isset($this->compiled) || $this->compiled->compile_id !== $this->compile_id) {
- $this->loadCompiled(true);
- }
- $this->compiled->render($this);
- }
- // 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 {
- 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 {
- echo ob_get_clean();
- }
- }
- if ($this->smarty->debugging) {
- $this->smarty->_debug->end_template($this);
- // debug output
- $this->smarty->_debug->display_debug($this, true);
- }
- 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);
- }
- }
- 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;
- }
- }
-
- /**
- * Runtime function to render sub-template
- *
- * @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
- *
- * @throws \Exception
- * @throws \SmartyException
- */
- public function _subTemplateRender(
- $template,
- $cache_id,
- $compile_id,
- $caching,
- $cache_lifetime,
- $data,
- $scope,
- $forceTplCache,
- $uid = null,
- $content_func = null
- ) {
- $tpl = clone $this;
- $tpl->parent = $this;
- $smarty = &$this->smarty;
- $_templateId = $smarty->_getTemplateId($template, $cache_id, $compile_id, $caching, $tpl);
- // recursive call ?
- if ((isset($tpl->templateId) ? $tpl->templateId : $tpl->_getTemplateId()) !== $_templateId) {
- // already in template cache?
- if (isset(self::$tplObjCache[ $_templateId ])) {
- // copy data from cached object
- $cachedTpl = &self::$tplObjCache[ $_templateId ];
- $tpl->templateId = $cachedTpl->templateId;
- $tpl->template_resource = $cachedTpl->template_resource;
- $tpl->cache_id = $cachedTpl->cache_id;
- $tpl->compile_id = $cachedTpl->compile_id;
- $tpl->source = $cachedTpl->source;
- if (isset($cachedTpl->compiled)) {
- $tpl->compiled = $cachedTpl->compiled;
- } else {
- unset($tpl->compiled);
- }
- if ($caching !== 9999 && isset($cachedTpl->cached)) {
- $tpl->cached = $cachedTpl->cached;
- } else {
- unset($tpl->cached);
- }
- } else {
- $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
- list($filepath, $timestamp, $type) = $tpl->compiled->file_dependency[ $uid ];
- $tpl->source = new Smarty_Template_Source($smarty, $filepath, $type, $filepath);
- $tpl->source->filepath = $filepath;
- $tpl->source->timestamp = $timestamp;
- $tpl->source->exists = true;
- $tpl->source->uid = $uid;
- } else {
- $tpl->source = Smarty_Template_Source::load($tpl);
- unset($tpl->compiled);
- }
- if ($caching !== 9999) {
- unset($tpl->cached);
- }
- }
- } else {
- // on recursive calls force caching
- $forceTplCache = true;
- }
- $tpl->caching = $caching;
- $tpl->cache_lifetime = $cache_lifetime;
- // set template scope
- $tpl->scope = $scope;
- if (!isset(self::$tplObjCache[ $tpl->templateId ]) && !$tpl->source->handler->recompiled) {
- // check if template object should be cached
- if ($forceTplCache || (isset(self::$subTplInfo[ $tpl->template_resource ])
- && self::$subTplInfo[ $tpl->template_resource ] > 1)
- || ($tpl->_isSubTpl() && isset(self::$tplObjCache[ $tpl->parent->templateId ]))
- ) {
- self::$tplObjCache[ $tpl->templateId ] = $tpl;
- }
- }
- if (!empty($data)) {
- // set up variable values
- foreach ($data as $_key => $_val) {
- $tpl->tpl_vars[ $_key ] = new Smarty_Variable($_val, $this->isRenderingCache);
- }
- }
- if ($tpl->caching === 9999) {
- if (!isset($tpl->compiled)) {
- $tpl->loadCompiled(true);
- }
- if ($tpl->compiled->has_nocache_code) {
- $this->cached->hashes[ $tpl->compiled->nocache_hash ] = true;
- }
- }
- $tpl->_cache = array();
- if (isset($uid)) {
- if ($smarty->debugging) {
- if (!isset($smarty->_debug)) {
- $smarty->_debug = new Smarty_Internal_Debug();
- }
- $smarty->_debug->start_template($tpl);
- $smarty->_debug->start_render($tpl);
- }
- $tpl->compiled->getRenderedTemplateCode($tpl, $content_func);
- if ($smarty->debugging) {
- $smarty->_debug->end_template($tpl);
- $smarty->_debug->end_render($tpl);
- }
- } else {
- if (isset($tpl->compiled)) {
- $tpl->compiled->render($tpl);
- } else {
- $tpl->render();
- }
- }
- }
-
- /**
- * Get called sub-templates and save call count
- */
- public function _subTemplateRegister()
- {
- foreach ($this->compiled->includes as $name => $count) {
- if (isset(self::$subTplInfo[ $name ])) {
- self::$subTplInfo[ $name ] += $count;
- } else {
- self::$subTplInfo[ $name ] = $count;
- }
- }
- }
-
- /**
- * Check if this is a sub template
- *
- * @return bool true is sub template
- */
- public function _isSubTpl()
- {
- return isset($this->parent) && $this->parent->_isTplObj();
- }
-
- /**
- * Assign variable in scope
- *
- * @param string $varName variable name
- * @param mixed $value value
- * @param bool $nocache nocache flag
- * @param int $scope scope into which variable shall be assigned
- */
- public function _assignInScope($varName, $value, $nocache = false, $scope = 0)
- {
- if (isset($this->tpl_vars[ $varName ])) {
- $this->tpl_vars[ $varName ] = clone $this->tpl_vars[ $varName ];
- $this->tpl_vars[ $varName ]->value = $value;
- if ($nocache || $this->isRenderingCache) {
- $this->tpl_vars[ $varName ]->nocache = true;
- }
- } else {
- $this->tpl_vars[ $varName ] = new Smarty_Variable($value, $nocache || $this->isRenderingCache);
- }
- if ($scope >= 0) {
- if ($scope > 0 || $this->scope > 0) {
- $this->smarty->ext->_updateScope->_updateScope($this, $varName, $scope);
- }
- }
- }
-
- /**
- * Check if plugins are callable require file otherwise
- *
- * @param array $plugins required plugins
- *
- * @throws \SmartyException
- */
- public function _checkPlugins($plugins)
- {
- static $checked = array();
- foreach ($plugins as $plugin) {
- $name = join('::', (array)$plugin[ 'function' ]);
- if (!isset($checked[ $name ])) {
- if (!is_callable($plugin[ 'function' ])) {
- if (is_file($plugin[ 'file' ])) {
- include_once $plugin[ 'file' ];
- if (is_callable($plugin[ 'function' ])) {
- $checked[ $name ] = true;
- }
- }
- } else {
- $checked[ $name ] = true;
- }
- }
- if (!isset($checked[ $name ])) {
- if (false !== $this->smarty->loadPlugin($name)) {
- $checked[ $name ] = true;
- } else {
- throw new SmartyException("Plugin '{$name}' not callable");
- }
- }
- }
- }
-
- /**
- * 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 \Smarty_Internal_Template $tpl
- * @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
- * @throws \SmartyException
- */
- public function _decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false)
- {
- // on cache resources other than file check version stored in cache code
- if (!isset($properties[ 'version' ]) || Smarty::SMARTY_VERSION !== $properties[ 'version' ]) {
- if ($cache) {
- $tpl->smarty->clearAllCache();
- } else {
- $tpl->smarty->clearCompiledTemplate();
- }
- return false;
- }
- $is_valid = true;
- if (!empty($properties[ 'file_dependency' ])
- && ((!$cache && $tpl->compile_check) || $tpl->compile_check === Smarty::COMPILECHECK_ON)
- ) {
- // check file dependencies at compiled code
- foreach ($properties[ 'file_dependency' ] as $_file_to_check) {
- if ($_file_to_check[ 2 ] === 'file' || $_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;
- }
- } 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 === false || $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' ];
- }
- return $is_valid && !function_exists($properties[ 'unifunc' ]);
- }
-
- /**
- * Compiles the template
- * If the template is not evaluated the compiled template is saved on disk
- *
- * @throws \Exception
- */
- public function compileTemplateSource()
- {
- return $this->compiled->compileTemplateSource($this);
- }
-
- /**
- * Writes the content to cache resource
- *
- * @param string $content
- *
- * @return bool
- */
- public function writeCachedContent($content)
- {
- return $this->smarty->ext->_updateCache->writeCachedContent($this, $content);
- }
-
- /**
- * Get unique template id
- *
- * @return string
- * @throws \SmartyException
- */
- public function _getTemplateId()
- {
- return isset($this->templateId) ? $this->templateId : $this->templateId =
- $this->smarty->_getTemplateId($this->template_resource, $this->cache_id, $this->compile_id);
- }
-
- /**
- * runtime error not matching capture tags
- *
- * @throws \SmartyException
- */
- public function capture_error()
- {
- throw new SmartyException("Not matching {capture} open/close in '{$this->template_resource}'");
- }
-
- /**
- * Load compiled object
- *
- * @param bool $force force new compiled object
- */
- public function loadCompiled($force = false)
- {
- if ($force || !isset($this->compiled)) {
- $this->compiled = Smarty_Template_Compiled::load($this);
- }
- }
-
- /**
- * Load cached object
- *
- * @param bool $force force new cached object
- */
- public function loadCached($force = false)
- {
- if ($force || !isset($this->cached)) {
- $this->cached = Smarty_Template_Cached::load($this);
- }
- }
-
- /**
- * Load inheritance object
- */
- public function _loadInheritance()
- {
- if (!isset($this->inheritance)) {
- $this->inheritance = new Smarty_Internal_Runtime_Inheritance();
- }
- }
-
- /**
- * Unload inheritance object
- */
- public function _cleanUp()
- {
- $this->startRenderCallbacks = array();
- $this->endRenderCallbacks = array();
- $this->inheritance = null;
- }
-
- /**
- * Load compiler object
- *
- * @throws \SmartyException
- */
- public function loadCompiler()
- {
- if (!class_exists($this->source->compiler_class)) {
- $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
- );
- }
-
- /**
- * Handle unknown class methods
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- */
- public function __call($name, $args)
- {
- // 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);
- }
-
- /**
- * 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 'compiled':
- $this->loadCompiled();
- return $this->compiled;
- case 'cached':
- $this->loadCached();
- return $this->cached;
- case 'compiler':
- $this->loadCompiler();
- return $this->compiler;
- 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.");
- }
-
- /**
- * 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 'compiled':
- case 'cached':
- case 'compiler':
- $this->$property_name = $value;
- return;
- default:
- // Smarty property ?
- if (property_exists($this->smarty, $property_name)) {
- $this->smarty->$property_name = $value;
- return;
- }
- }
- throw new SmartyException("invalid template property '$property_name'.");
- }
-
- /**
- * Template data object destructor
- */
- public function __destruct()
- {
- if ($this->smarty->cache_locking && isset($this->cached) && $this->cached->is_locked) {
- $this->cached->handler->releaseLock($this->smarty, $this->cached);
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php
deleted file mode 100644
index 918362e91..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php
+++ /dev/null
@@ -1,401 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Smarty Template Base
- * This file contains the basic shared methods for template handling
- *
- * @package Smarty
- * @subpackage Template
- * @author Uwe Tews
- */
-
-/**
- * Class with shared smarty/template methods
- *
- * @package Smarty
- * @subpackage Template
- *
- * @property int $_objType
- *
- * The following methods will be dynamically loaded by the extension handler when they are called.
- * They are located in a corresponding Smarty_Internal_Method_xxxx class
- *
- * @method Smarty_Internal_TemplateBase addAutoloadFilters(mixed $filters, string $type = null)
- * @method Smarty_Internal_TemplateBase addDefaultModifiers(mixed $modifiers)
- * @method Smarty_Internal_TemplateBase addLiterals(mixed $literals)
- * @method Smarty_Internal_TemplateBase createData(Smarty_Internal_Data $parent = null, string $name = null)
- * @method array getAutoloadFilters(string $type = null)
- * @method string getDebugTemplate()
- * @method array getDefaultModifier()
- * @method array getLiterals()
- * @method array getTags(mixed $template = null)
- * @method object getRegisteredObject(string $object_name)
- * @method Smarty_Internal_TemplateBase registerCacheResource(string $name, Smarty_CacheResource $resource_handler)
- * @method Smarty_Internal_TemplateBase registerClass(string $class_name, string $class_impl)
- * @method Smarty_Internal_TemplateBase registerDefaultConfigHandler(callback $callback)
- * @method Smarty_Internal_TemplateBase registerDefaultPluginHandler(callback $callback)
- * @method Smarty_Internal_TemplateBase registerDefaultTemplateHandler(callback $callback)
- * @method Smarty_Internal_TemplateBase registerResource(string $name, mixed $resource_handler)
- * @method Smarty_Internal_TemplateBase setAutoloadFilters(mixed $filters, string $type = null)
- * @method Smarty_Internal_TemplateBase setDebugTemplate(string $tpl_name)
- * @method Smarty_Internal_TemplateBase setDefaultModifiers(mixed $modifiers)
- * @method Smarty_Internal_TemplateBase setLiterals(mixed $literals)
- * @method Smarty_Internal_TemplateBase unloadFilter(string $type, string $name)
- * @method Smarty_Internal_TemplateBase unregisterCacheResource(string $name)
- * @method Smarty_Internal_TemplateBase unregisterObject(string $object_name)
- * @method Smarty_Internal_TemplateBase unregisterPlugin(string $type, string $name)
- * @method Smarty_Internal_TemplateBase unregisterFilter(string $type, mixed $callback)
- * @method Smarty_Internal_TemplateBase unregisterResource(string $name)
- */
-abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
-{
- /**
- * 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;
-
- /**
- * caching enabled
- *
- * @var int
- */
- public $caching = Smarty::CACHING_OFF;
-
- /**
- * check template for modifications?
- *
- * @var int
- */
- public $compile_check = Smarty::COMPILECHECK_ON;
-
- /**
- * cache lifetime in seconds
- *
- * @var integer
- */
- public $cache_lifetime = 3600;
-
- /**
- * Array of source information for known template functions
- *
- * @var array
- */
- public $tplFunctions = array();
-
- /**
- * universal cache
- *
- * @var array()
- */
- public $_cache = array();
-
- /**
- * fetches a rendered Smarty 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
- *
- * @throws Exception
- * @throws SmartyException
- * @return string rendered template output
- */
- public function fetch($template = null, $cache_id = null, $compile_id = null, $parent = null)
- {
- $result = $this->_execute($template, $cache_id, $compile_id, $parent, 0);
- return $result === null ? ob_get_clean() : $result;
- }
-
- /**
- * displays a Smarty 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
- *
- * @throws \Exception
- * @throws \SmartyException
- */
- public function display($template = null, $cache_id = null, $compile_id = null, $parent = null)
- {
- // display template
- $this->_execute($template, $cache_id, $compile_id, $parent, 1);
- }
-
- /**
- * test if cache is valid
- *
- * @api Smarty::isCached()
- * @link https://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
- *
- * @return bool cache status
- * @throws \Exception
- * @throws \SmartyException
- */
- public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null)
- {
- return $this->_execute($template, $cache_id, $compile_id, $parent, 2);
- }
-
- /**
- * fetches a rendered Smarty 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 $function function type 0 = fetch, 1 = display, 2 = isCache
- *
- * @return mixed
- * @throws \Exception
- * @throws \SmartyException
- */
- private function _execute($template, $cache_id, $compile_id, $parent, $function)
- {
- $smarty = $this->_getSmartyObj();
- $saveVars = true;
- if ($template === null) {
- if (!$this->_isTplObj()) {
- throw new SmartyException($function . '():Missing \'$template\' parameter');
- } else {
- $template = $this;
- }
- } elseif (is_object($template)) {
- /* @var Smarty_Internal_Template $template */
- if (!isset($template->_objType) || !$template->_isTplObj()) {
- throw new SmartyException($function . '():Template object expected');
- }
- } else {
- // get template object
- $saveVars = false;
- $template = $smarty->createTemplate($template, $cache_id, $compile_id, $parent ? $parent : $this, false);
- if ($this->_objType === 1) {
- // set caching in template object
- $template->caching = $this->caching;
- }
- }
- // make sure we have integer values
- $template->caching = (int)$template->caching;
- // fetch template content
- $level = ob_get_level();
- try {
- $_smarty_old_error_level =
- isset($smarty->error_reporting) ? error_reporting($smarty->error_reporting) : null;
-
- if ($smarty->isMutingUndefinedOrNullWarnings()) {
- $errorHandler = new Smarty_Internal_ErrorHandler();
- $errorHandler->activate();
- }
-
- if ($this->_objType === 2) {
- /* @var Smarty_Internal_Template $this */
- $template->tplFunctions = $this->tplFunctions;
- $template->inheritance = $this->inheritance;
- }
- /* @var Smarty_Internal_Template $parent */
- if (isset($parent->_objType) && ($parent->_objType === 2) && !empty($parent->tplFunctions)) {
- $template->tplFunctions = array_merge($parent->tplFunctions, $template->tplFunctions);
- }
- if ($function === 2) {
- if ($template->caching) {
- // return cache status of template
- if (!isset($template->cached)) {
- $template->loadCached();
- }
- $result = $template->cached->isCached($template);
- Smarty_Internal_Template::$isCacheTplObj[ $template->_getTemplateId() ] = $template;
- } else {
- return false;
- }
- } else {
- if ($saveVars) {
- $savedTplVars = $template->tpl_vars;
- $savedConfigVars = $template->config_vars;
- }
- 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);
- $template->_cleanUp();
- if ($saveVars) {
- $template->tpl_vars = $savedTplVars;
- $template->config_vars = $savedConfigVars;
- } else {
- if (!$function && !isset(Smarty_Internal_Template::$tplObjCache[ $template->templateId ])) {
- $template->parent = null;
- $template->tpl_vars = $template->config_vars = array();
- Smarty_Internal_Template::$tplObjCache[ $template->templateId ] = $template;
- }
- }
- }
-
- if (isset($errorHandler)) {
- $errorHandler->deactivate();
- }
-
- if (isset($_smarty_old_error_level)) {
- error_reporting($_smarty_old_error_level);
- }
- return $result;
- } catch (Throwable $e) {
- while (ob_get_level() > $level) {
- ob_end_clean();
- }
- if (isset($errorHandler)) {
- $errorHandler->deactivate();
- }
-
- if (isset($_smarty_old_error_level)) {
- error_reporting($_smarty_old_error_level);
- }
- throw $e;
- }
- }
-
- /**
- * Registers plugin to be used in templates
- *
- * @api Smarty::registerPlugin()
- * @link https://www.smarty.net/docs/en/api.register.plugin.tpl
- *
- * @param string $type plugin type
- * @param string $name name of template tag
- * @param callable $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
- */
- public function registerPlugin($type, $name, $callback, $cacheable = true, $cache_attr = null)
- {
- return $this->ext->registerPlugin->registerPlugin($this, $type, $name, $callback, $cacheable, $cache_attr);
- }
-
- /**
- * load a filter of specified type and name
- *
- * @api Smarty::loadFilter()
- * @link https://www.smarty.net/docs/en/api.load.filter.tpl
- *
- * @param string $type filter type
- * @param string $name filter name
- *
- * @return bool
- * @throws \SmartyException
- */
- public function loadFilter($type, $name)
- {
- return $this->ext->loadFilter->loadFilter($this, $type, $name);
- }
-
- /**
- * Registers a filter function
- *
- * @api Smarty::registerFilter()
- * @link https://www.smarty.net/docs/en/api.register.filter.tpl
- *
- * @param string $type filter type
- * @param callable $callback
- * @param string|null $name optional filter name
- *
- * @return \Smarty|\Smarty_Internal_Template
- * @throws \SmartyException
- */
- public function registerFilter($type, $callback, $name = null)
- {
- return $this->ext->registerFilter->registerFilter($this, $type, $callback, $name);
- }
-
- /**
- * Registers object to be used in templates
- *
- * @api Smarty::registerObject()
- * @link https://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 registerObject(
- $object_name,
- $object,
- $allowed_methods_properties = array(),
- $format = true,
- $block_methods = array()
- ) {
- return $this->ext->registerObject->registerObject(
- $this,
- $object_name,
- $object,
- $allowed_methods_properties,
- $format,
- $block_methods
- );
- }
-
- /**
- * @param int $compile_check
- */
- public function setCompileCheck($compile_check)
- {
- $this->compile_check = (int)$compile_check;
- }
-
- /**
- * @param int $caching
- */
- public function setCaching($caching)
- {
- $this->caching = (int)$caching;
- }
-
- /**
- * @param int $cache_lifetime
- */
- public function setCacheLifetime($cache_lifetime)
- {
- $this->cache_lifetime = $cache_lifetime;
- }
-
- /**
- * @param string $compile_id
- */
- public function setCompileId($compile_id)
- {
- $this->compile_id = $compile_id;
- }
-
- /**
- * @param string $cache_id
- */
- public function setCacheId($cache_id)
- {
- $this->cache_id = $cache_id;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
deleted file mode 100644
index 03797f7f8..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
+++ /dev/null
@@ -1,1774 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Smarty Template Compiler Base
- * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Main abstract compiler class
- *
- * @package Smarty
- * @subpackage Compiler
- *
- * @property Smarty_Internal_SmartyTemplateCompiler $prefixCompiledCode = ''
- * @property Smarty_Internal_SmartyTemplateCompiler $postfixCompiledCode = ''
- * @method registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false)
- * @method unregisterPostCompileCallback($key)
- */
-abstract class Smarty_Internal_TemplateCompilerBase
-{
- /**
- * compile tag objects cache
- *
- * @var array
- */
- public static $_tag_objects = array();
-
- /**
- * counter for prefix variable number
- *
- * @var int
- */
- public static $prefixVariableNumber = 0;
-
- /**
- * Smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
-
- /**
- * Parser object
- *
- * @var Smarty_Internal_Templateparser
- */
- public $parser = null;
-
- /**
- * hash for nocache sections
- *
- * @var mixed
- */
- public $nocache_hash = null;
-
- /**
- * suppress generation of nocache code
- *
- * @var bool
- */
- public $suppressNocacheProcessing = false;
-
- /**
- * caching enabled (copied from template object)
- *
- * @var int
- */
- public $caching = 0;
-
- /**
- * tag stack
- *
- * @var array
- */
- public $_tag_stack = array();
-
- /**
- * tag stack count
- *
- * @var array
- */
- public $_tag_stack_count = array();
-
- /**
- * Plugins used by template
- *
- * @var array
- */
- public $required_plugins = array('compiled' => array(), 'nocache' => array());
-
- /**
- * Required plugins stack
- *
- * @var array
- */
- public $required_plugins_stack = array();
-
- /**
- * current template
- *
- * @var Smarty_Internal_Template
- */
- public $template = null;
-
- /**
- * merged included sub template data
- *
- * @var array
- */
- public $mergedSubTemplatesData = array();
-
- /**
- * merged sub template code
- *
- * @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 $trace_filepath = '';
-
- /**
- * stack for tracing file and line of nested {block} tags
- *
- * @var array
- */
- public $trace_stack = array();
-
- /**
- * plugins loaded by default plugin handler
- *
- * @var array
- */
- public $default_handler_plugins = array();
-
- /**
- * saved preprocessed modifier list
- *
- * @var mixed
- */
- public $default_modifier_list = null;
-
- /**
- * force compilation of complete template as nocache
- *
- * @var boolean
- */
- public $forceNocache = false;
-
- /**
- * flag if compiled template file shall we written
- *
- * @var bool
- */
- public $write_compiled_code = true;
-
- /**
- * Template functions
- *
- * @var array
- */
- public $tpl_function = array();
-
- /**
- * called sub functions from template function
- *
- * @var array
- */
- public $called_functions = array();
-
- /**
- * compiled template or block function code
- *
- * @var string
- */
- public $blockOrFunctionCode = '';
-
- /**
- * flags for used modifier plugins
- *
- * @var array
- */
- public $modifier_plugins = array();
-
- /**
- * type of already compiled modifier
- *
- * @var array
- */
- public $known_modifier_type = array();
-
- /**
- * 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();
-
- /**
- * used prefix variables by current compiled tag
- *
- * @var array
- */
- public $usedPrefixVariables = 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;
-
- /**
- * 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();
-
- /**
- * Lexer preg pattern for left delimiter
- *
- * @var string
- */
- private $ldelPreg = '[{]';
-
- /**
- * Lexer preg pattern for right delimiter
- *
- * @var string
- */
- private $rdelPreg = '[}]';
-
- /**
- * Length of right delimiter
- *
- * @var int
- */
- private $rdelLength = 0;
-
- /**
- * Length of left delimiter
- *
- * @var int
- */
- private $ldelLength = 0;
-
- /**
- * Lexer preg pattern for user literals
- *
- * @var string
- */
- private $literalPreg = '';
-
- /**
- * Initialize compiler
- *
- * @param Smarty $smarty global instance
- */
- public function __construct(Smarty $smarty)
- {
- $this->smarty = $smarty;
- $this->nocache_hash = str_replace(
- array(
- '.',
- ','
- ),
- '_',
- uniqid(mt_rand(), true)
- );
- }
-
- /**
- * Method to compile a Smarty template
- *
- * @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,
- $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;
- }
-
- /**
- * 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 ($this->smarty->debugging) {
- if (!isset($this->smarty->_debug)) {
- $this->smarty->_debug = new Smarty_Internal_Debug();
- }
- $this->smarty->_debug->start_compile($this->template);
- }
- $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;
- }
- $this->caching = $template->caching;
- // 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
- if ($this->smarty->merge_compiled_includes || $this->template->source->handler->checkTimestamps()) {
- $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)) {
- $_compiled_code = '<?php $_smarty_tpl->_loadInheritance(); $_smarty_tpl->inheritance->init($_smarty_tpl, true); ?>';
-
- $i = 0;
- $reversed_components = array_reverse($this->template->getSource()->components);
- foreach ($reversed_components as $source) {
- $i++;
- if ($i === count($reversed_components)) {
- $_compiled_code .= '<?php $_smarty_tpl->inheritance->endChild($_smarty_tpl); ?>';
- }
- $_compiled_code .= $this->compileTag(
- 'include',
- [
- var_export($source->resource, true),
- ['scope' => 'parent'],
- ]
- );
- }
- $_compiled_code = $this->postFilter($_compiled_code, $this->template);
- } else {
- // get template source
- $_content = $this->template->source->getContent();
- $_compiled_code = $this->postFilter($this->doCompile($this->preFilter($_content), true));
- }
- if (!empty($this->required_plugins[ 'compiled' ]) || !empty($this->required_plugins[ 'nocache' ])) {
- $_compiled_code = '<?php ' . $this->compileRequiredPlugins() . "?>\n" . $_compiled_code;
- }
- } catch (Exception $e) {
- if ($this->smarty->debugging) {
- $this->smarty->_debug->end_compile($this->template);
- }
- $this->_tag_stack = array();
- // free memory
- $this->parent_compiler = null;
- $this->template = null;
- $this->parser = null;
- throw $e;
- }
- if ($this->smarty->debugging) {
- $this->smarty->_debug->end_compile($this->template);
- }
- $this->parent_compiler = 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 {
- return $code;
- }
- }
-
- /**
- * 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
- *
- * 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 variable
- *
- * @param string $variable
- *
- * @return string
- */
- public function compileVariable($variable)
- {
- if (!strpos($variable, '(')) {
- // 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 . ')';
- }
-
- /**
- * compile PHP function call
- *
- * @param string $name
- * @param array $parameter
- *
- * @return string
- * @throws \SmartyCompilerException
- */
- public function compilePHPFunctionCall($name, $parameter)
- {
- if (!$this->smarty->security_policy || $this->smarty->security_policy->isTrustedPhpFunction($name, $this)) {
- if (strcasecmp($name, 'isset') === 0 || strcasecmp($name, 'empty') === 0
- || strcasecmp($name, 'array') === 0 || is_callable($name)
- ) {
- $func_name = smarty_strtolower_ascii($name);
-
- if ($func_name === 'isset') {
- if (count($parameter) === 0) {
- $this->trigger_template_error('Illegal number of parameter in "isset()"');
- }
-
- $pa = array();
- foreach ($parameter as $p) {
- $pa[] = $this->syntaxMatchesVariable($p) ? 'isset(' . $p . ')' : '(' . $p . ' !== null )';
- }
- return '(' . implode(' && ', $pa) . ')';
-
- } elseif (in_array(
- $func_name,
- array(
- 'empty',
- 'reset',
- 'current',
- 'end',
- 'prev',
- 'next'
- )
- )
- ) {
- if (count($parameter) !== 1) {
- $this->trigger_template_error("Illegal number of parameter in '{$func_name()}'");
- }
- if ($func_name === 'empty') {
- return $func_name . '(' .
- str_replace("')->value", "',null,true,false)->value", $parameter[ 0 ]) . ')';
- } else {
- return $func_name . '(' . $parameter[ 0 ] . ')';
- }
- } else {
-
- if (
- !$this->smarty->loadPlugin('smarty_modifiercompiler_' . $name)
- && !isset($this->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$name])
- && !in_array($name, ['time', 'join', 'is_array', 'in_array', 'count'])
- ) {
- trigger_error('Using unregistered function "' . $name . '" in a template is deprecated and will be ' .
- 'removed in a future release. Use Smarty::registerPlugin to explicitly register ' .
- 'a custom modifier.', E_USER_DEPRECATED);
- }
-
- return $name . '(' . implode(',', $parameter) . ')';
- }
- } else {
- $this->trigger_template_error("unknown function '{$name}'");
- }
- }
- }
-
- /**
- * Determines whether the passed string represents a valid (PHP) variable.
- * This is important, because `isset()` only works on variables and `empty()` can only be passed
- * a variable prior to php5.5
- * @param $string
- * @return bool
- */
- private function syntaxMatchesVariable($string) {
- static $regex_pattern = '/^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*((->)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*|\[.*]*\])*$/';
- return 1 === preg_match($regex_pattern, trim($string));
- }
-
- /**
- * This method is called from parser to process a text content section if strip is enabled
- * - remove text from inheritance child templates as they may generate output
- *
- * @param string $text
- *
- * @return string
- */
- public function processText($text)
- {
-
- if (strpos($text, '<') === false) {
- return preg_replace($this->stripRegEx, '', $text);
- }
-
- $store = array();
- $_store = 0;
-
- // 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
- '#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
- // remove newline between tags
- '#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
- // remove multiple spaces between attributes (but not in attribute values!)
- '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
- '#>[\040\011]+$#Ss' => '> ',
- '#>[\040\011]*[\n]\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++;
- }
- }
- return $text;
- }
-
- /**
- * 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
- *
- * @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 bool|string compiled code or false
- * @throws \SmartyCompilerException
- */
- public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)
- {
- /* @var Smarty_Internal_CompileBase $tagCompiler */
- $tagCompiler = $this->getTagCompiler($tag);
- // compile this tag
- return $tagCompiler === false ? false : $tagCompiler->compile($args, $this, $param1, $param2, $param3);
- }
-
- /**
- * lazy loads internal compile plugin for tag compile objects cached for reuse.
- *
- * class name format: Smarty_Internal_Compile_TagName
- * plugin filename format: Smarty_Internal_TagName.php
- *
- * @param string $tag tag name
- *
- * @return bool|\Smarty_Internal_CompileBase tag compiler object or false if not found
- */
- public function getTagCompiler($tag)
- {
- // re-use object if already exists
- if (!isset(self::$_tag_objects[ $tag ])) {
- // lazy load internal compiler plugin
- $_tag = explode('_', $tag);
- $_tag = array_map('smarty_ucfirst_ascii', $_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))
- ) {
- self::$_tag_objects[ $tag ] = new $class_name;
- } else {
- self::$_tag_objects[ $tag ] = false;
- }
- }
- return self::$_tag_objects[ $tag ];
- }
-
- /**
- * Check for plugins and return function name
- *
- * @param $plugin_name
- * @param string $plugin_type type of plugin
- *
- * @return string call name of function
- * @throws \SmartyException
- */
- public function getPlugin($plugin_name, $plugin_type)
- {
- $function = null;
- if ($this->caching && ($this->nocache || $this->tag_nocache)) {
- if (isset($this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
- $function =
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- } elseif (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ] =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ];
- $function =
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- }
- } else {
- if (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
- $function =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- } elseif (isset($this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ] =
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ];
- $function =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- }
- }
- if (isset($function)) {
- if ($plugin_type === 'modifier') {
- $this->modifier_plugins[ $plugin_name ] = true;
- }
- return $function;
- }
- // loop through plugin dirs and find the plugin
- $function = 'smarty_' . $plugin_type . '_' . $plugin_name;
- $file = $this->smarty->loadPlugin($function, false);
- if (is_string($file)) {
- if ($this->caching && ($this->nocache || $this->tag_nocache)) {
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
- $file;
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ] =
- $function;
- } else {
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
- $file;
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ] =
- $function;
- }
- if ($plugin_type === 'modifier') {
- $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
- *
- * @return bool true if found
- * @throws \SmartyCompilerException
- */
- 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,
- )
- );
- if ($result) {
- $this->tag_nocache = $this->tag_nocache || !$cacheable;
- if ($script !== null) {
- if (is_file($script)) {
- if ($this->caching && ($this->nocache || $this->tag_nocache)) {
- $this->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'file' ] =
- $script;
- $this->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'function' ] =
- $callback;
- } else {
- $this->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'file' ] =
- $script;
- $this->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'function' ] =
- $callback;
- }
- include_once $script;
- } else {
- $this->trigger_template_error("Default plugin handler: Returned script file '{$script}' for '{$tag}' not found");
- }
- }
- if (is_callable($callback)) {
- $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;
- }
-
- /**
- * 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?$/D', $left) && preg_match('/^<\?php\s+/', $right)) {
- $left = preg_replace('/\s*\?>\s?$/D', "\n", $left);
- $left .= preg_replace('/^<\?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
- */
- 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->handler->recompiled) || $this->forceNocache) && $this->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 modifier plugins for nocache code
- foreach ($this->modifier_plugins as $plugin_name => $dummy) {
- if (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) {
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ 'modifier' ] =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ];
- }
- }
- } else {
- $_output = $content;
- }
- } else {
- $_output = $content;
- }
- $this->modifier_plugins = array();
- $this->suppressNocacheProcessing = false;
- $this->tag_nocache = false;
- return $_output;
- }
-
- /**
- * Get Id
- *
- * @param string $input
- *
- * @return bool|string
- */
- public function getId($input)
- {
- if (preg_match('~^([\'"]*)([0-9]*[a-zA-Z_]\w*)\1$~', $input, $match)) {
- return $match[ 2 ];
- }
- 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;
- }
-
- /**
- * Set nocache flag in variable or create new variable
- *
- * @param string $varName
- */
- public function setNocacheInVariable($varName)
- {
- // create nocache var to make it know for further compiling
- if ($_var = $this->getId($varName)) {
- if (isset($this->template->tpl_vars[ $_var ])) {
- $this->template->tpl_vars[ $_var ] = clone $this->template->tpl_vars[ $_var ];
- $this->template->tpl_vars[ $_var ]->nocache = true;
- } else {
- $this->template->tpl_vars[ $_var ] = new Smarty_Variable(null, true);
- }
- }
- }
-
- /**
- * @param array $_attr tag attributes
- * @param array $validScopes
- *
- * @return int|string
- * @throws \SmartyCompilerException
- */
- public function convertScope($_attr, $validScopes)
- {
- $_scope = 0;
- if (isset($_attr[ 'scope' ])) {
- $_scopeName = trim($_attr[ 'scope' ], '\'"');
- if (is_numeric($_scopeName) && in_array($_scopeName, $validScopes)) {
- $_scope = $_scopeName;
- } elseif (is_string($_scopeName)) {
- $_scopeName = trim($_scopeName, '\'"');
- $_scope = isset($validScopes[ $_scopeName ]) ? $validScopes[ $_scopeName ] : false;
- } else {
- $_scope = false;
- }
- if ($_scope === false) {
- $err = var_export($_scopeName, true);
- $this->trigger_template_error("illegal value '{$err}' for \"scope\" attribute", null, true);
- }
- }
- return $_scope;
- }
-
- /**
- * 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
- * @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, $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;
- }
- // $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 "' . $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($lex->smarty_token_names[ $exp_token ])) {
- // token type from lexer
- $expect[] = '"' . $lex->smarty_token_names[ $exp_token ] . '"';
- } else {
- // otherwise internal token name
- $expect[] = $this->parser->yyTokenName[ $token ];
- }
- }
- $error_text .= ', expected one of: ' . implode(' , ', $expect);
- }
- }
- if ($this->smarty->_parserdebug) {
- $this->parser->errorRunDown();
- echo ob_get_clean();
- flush();
- }
- $e = new SmartyCompilerException(
- $error_text,
- 0,
- $this->template->source->filepath,
- $line
- );
- $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ]));
- $e->desc = $args;
- $e->template = $this->template->source->filepath;
- throw $e;
- }
-
- /**
- * Return var_export() value with all white spaces removed
- *
- * @param mixed $value
- *
- * @return string
- */
- public function getVarExport($value)
- {
- return preg_replace('/\s/', '', var_export($value, true));
- }
-
- /**
- * enter double quoted string
- * - save tag stack count
- */
- public function enterDoubleQuote()
- {
- array_push($this->_tag_stack_count, $this->getTagStackCount());
- }
-
- /**
- * Return tag stack count
- *
- * @return int
- */
- public function getTagStackCount()
- {
- return count($this->_tag_stack);
- }
-
- /**
- * @param $lexerPreg
- *
- * @return mixed
- */
- public function replaceDelimiter($lexerPreg)
- {
- return str_replace(
- array('SMARTYldel', 'SMARTYliteral', 'SMARTYrdel', 'SMARTYautoliteral', 'SMARTYal'),
- array(
- $this->ldelPreg, $this->literalPreg, $this->rdelPreg,
- $this->smarty->getAutoLiteral() ? '{1,}' : '{9}',
- $this->smarty->getAutoLiteral() ? '' : '\\s*'
- ),
- $lexerPreg
- );
- }
-
- /**
- * Build lexer regular expressions for left and right delimiter and user defined literals
- */
- public function initDelimiterPreg()
- {
- $ldel = $this->smarty->getLeftDelimiter();
- $this->ldelLength = strlen($ldel);
- $this->ldelPreg = '';
- foreach (str_split($ldel, 1) as $chr) {
- $this->ldelPreg .= '[' . preg_quote($chr,'/') . ']';
- }
- $rdel = $this->smarty->getRightDelimiter();
- $this->rdelLength = strlen($rdel);
- $this->rdelPreg = '';
- foreach (str_split($rdel, 1) as $chr) {
- $this->rdelPreg .= '[' . preg_quote($chr,'/') . ']';
- }
- $literals = $this->smarty->getLiterals();
- if (!empty($literals)) {
- foreach ($literals as $key => $literal) {
- $literalPreg = '';
- foreach (str_split($literal, 1) as $chr) {
- $literalPreg .= '[' . preg_quote($chr,'/') . ']';
- }
- $literals[ $key ] = $literalPreg;
- }
- $this->literalPreg = '|' . implode('|', $literals);
- } else {
- $this->literalPreg = '';
- }
- }
-
- /**
- * leave double quoted string
- * - throw exception if block in string was not closed
- *
- * @throws \SmartyCompilerException
- */
- public function leaveDoubleQuote()
- {
- if (array_pop($this->_tag_stack_count) !== $this->getTagStackCount()) {
- $tag = $this->getOpenBlockTag();
- $this->trigger_template_error(
- "unclosed '{{$tag}}' in doubled quoted string",
- null,
- true
- );
- }
- }
-
- /**
- * Get left delimiter preg
- *
- * @return string
- */
- public function getLdelPreg()
- {
- return $this->ldelPreg;
- }
-
- /**
- * Get right delimiter preg
- *
- * @return string
- */
- public function getRdelPreg()
- {
- return $this->rdelPreg;
- }
-
- /**
- * Get length of left delimiter
- *
- * @return int
- */
- public function getLdelLength()
- {
- return $this->ldelLength;
- }
-
- /**
- * Get length of right delimiter
- *
- * @return int
- */
- public function getRdelLength()
- {
- return $this->rdelLength;
- }
-
- /**
- * Get name of current open block tag
- *
- * @return string|boolean
- */
- public function getOpenBlockTag()
- {
- $tagCount = $this->getTagStackCount();
- if ($tagCount) {
- return $this->_tag_stack[ $tagCount - 1 ][ 0 ];
- } else {
- return false;
- }
- }
-
- /**
- * Check if $value contains variable elements
- *
- * @param mixed $value
- *
- * @return bool|int
- */
- public function isVariable($value)
- {
- if (is_string($value)) {
- return preg_match('/[$(]/', $value);
- }
- if (is_bool($value) || is_numeric($value)) {
- return false;
- }
- if (is_array($value)) {
- foreach ($value as $k => $v) {
- if ($this->isVariable($k) || $this->isVariable($v)) {
- return true;
- }
- }
- return false;
- }
- return false;
- }
-
- /**
- * Get new prefix variable name
- *
- * @return string
- */
- public function getNewPrefixVariable()
- {
- ++self::$prefixVariableNumber;
- return $this->getPrefixVariable();
- }
-
- /**
- * Get current prefix variable name
- *
- * @return string
- */
- public function getPrefixVariable()
- {
- return '$_prefixVariable' . self::$prefixVariableNumber;
- }
-
- /**
- * append code to prefix buffer
- *
- * @param string $code
- */
- public function appendPrefixCode($code)
- {
- $this->prefix_code[] = $code;
- }
-
- /**
- * get prefix code string
- *
- * @return string
- */
- public function getPrefixCode()
- {
- $code = '';
- $prefixArray = array_merge($this->prefix_code, array_pop($this->prefixCodeStack));
- $this->prefixCodeStack[] = array();
- foreach ($prefixArray as $c) {
- $code = $this->appendCode($code, $c);
- }
- $this->prefix_code = array();
- return $code;
- }
-
- /**
- * Save current required plugins
- *
- * @param bool $init if true init required plugins
- */
- public function saveRequiredPlugins($init = false)
- {
- $this->required_plugins_stack[] = $this->required_plugins;
- if ($init) {
- $this->required_plugins = array('compiled' => array(), 'nocache' => array());
- }
- }
-
- /**
- * Restore required plugins
- */
- public function restoreRequiredPlugins()
- {
- $this->required_plugins = array_pop($this->required_plugins_stack);
- }
-
- /**
- * Compile code to call Smarty_Internal_Template::_checkPlugins()
- * for required plugins
- *
- * @return string
- */
- public function compileRequiredPlugins()
- {
- $code = $this->compileCheckPlugins($this->required_plugins[ 'compiled' ]);
- if ($this->caching && !empty($this->required_plugins[ 'nocache' ])) {
- $code .= $this->makeNocacheCode($this->compileCheckPlugins($this->required_plugins[ 'nocache' ]));
- }
- return $code;
- }
-
- /**
- * Compile code to call Smarty_Internal_Template::_checkPlugins
- * - checks if plugin is callable require otherwise
- *
- * @param $requiredPlugins
- *
- * @return string
- */
- public function compileCheckPlugins($requiredPlugins)
- {
- if (!empty($requiredPlugins)) {
- $plugins = array();
- foreach ($requiredPlugins as $plugin) {
- foreach ($plugin as $data) {
- $plugins[] = $data;
- }
- }
- return '$_smarty_tpl->_checkPlugins(' . $this->getVarExport($plugins) . ');' . "\n";
- } else {
- return '';
- }
- }
-
- /**
- * method to compile a Smarty template
- *
- * @param mixed $_content template source
- * @param bool $isTemplateSource
- *
- * @return bool true if compiling succeeded, false if it failed
- */
- abstract protected function doCompile($_content, $isTemplateSource = false);
-
- public function cStyleComment($string) {
- return '/*' . str_replace('*/', '* /' , $string) . '*/';
- }
-
- /**
- * 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
- */
- 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;
- // log tag/attributes
- if (isset($this->smarty->_cache[ 'get_used_tags' ])) {
- $this->template->_cache[ 'used_tags' ][] = array(
- $tag,
- $args
- );
- }
- // check nocache option flag
- foreach ($args as $arg) {
- if (!is_array($arg)) {
- if ($arg === "'nocache'" || $arg === 'nocache') {
- $this->tag_nocache = true;
- }
- } else {
- foreach ($arg as $k => $v) {
- if (($k === "'nocache'" || $k === 'nocache') && (trim($v, "'\" ") === 'true')) {
- $this->tag_nocache = true;
- }
- }
- }
- }
- // 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->parent_compiler->tpl_function[ $tag ])
- || (isset($this->template->smarty->ext->_tplFunction)
- && $this->template->smarty->ext->_tplFunction->getTplFunction($this->template, $tag) !== false)
- ) {
- // template defined by {template} tag
- $args[ '_attr' ][ 'name' ] = "'{$tag}'";
- $_output = $this->callTagCompiler('call', $args, $parameter);
- }
- }
- if ($_output !== false) {
- if ($_output !== true) {
- // did we get compiled code
- if ($this->has_code) {
- // return compiled code
- return $_output;
- }
- }
- // tag did not produce compiled code
- return null;
- } else {
- // map_named attributes
- 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') {
- // check if tag is a registered object
- 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 {
- // 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 ])) {
- // if compiler function plugin call it now
- if ($plugin_type === Smarty::PLUGIN_COMPILER) {
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[ $key ] = $mixed;
- }
- }
- if (!$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 1 ]) {
- $this->tag_nocache = true;
- }
- return call_user_func_array(
- $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ],
- 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
- );
- }
- }
- }
- // check plugins from plugins folder
- 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
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[ $key ] = $mixed;
- }
- }
- return $plugin($new_args, $this->smarty);
- }
- if (class_exists($plugin, false)) {
- $plugin_object = new $plugin;
- if (method_exists($plugin_object, 'compile')) {
- return $plugin_object->compile($args, $this);
- }
- }
- 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 (is_callable($this->smarty->default_plugin_handler_func)) {
- $found = false;
- // look for already resolved tags
- 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->plugin_search_order as $plugin_type) {
- if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) {
- $found = true;
- break;
- }
- }
- }
- if ($found) {
- // if compiler function plugin call it now
- if ($plugin_type === Smarty::PLUGIN_COMPILER) {
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[ $key ] = $mixed;
- }
- }
- return call_user_func_array(
- $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ],
- array(
- $new_args,
- $this
- )
- );
- } else {
- return $this->callTagCompiler(
- 'private_registered_' . $plugin_type,
- $args,
- $parameter,
- $tag
- );
- }
- }
- }
- } else {
- // compile closing tag of block function
- $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_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 {
- // 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 ])
- ) {
- 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 compiler function plugin call it now
- $args = array();
- if (!$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 1 ]) {
- $this->tag_nocache = true;
- }
- return call_user_func_array(
- $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ],
- array(
- $args,
- $this
- )
- );
- }
- if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {
- $plugin = 'smarty_compiler_' . $tag;
- if (is_callable($plugin)) {
- return $plugin($args, $this->smarty);
- }
- if (class_exists($plugin, false)) {
- $plugin_object = new $plugin;
- if (method_exists($plugin_object, 'compile')) {
- return $plugin_object->compile($args, $this);
- }
- }
- throw new SmartyException("Plugin '{$tag}' not callable");
- }
- }
- $this->trigger_template_error("unknown tag '{$tag}'", null, true);
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php
deleted file mode 100644
index c37d3c187..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php
+++ /dev/null
@@ -1,2929 +0,0 @@
-<?php
-
-class TP_yyStackEntry
-{
- public $stateno; /* The state-number */
- public $major; /* The major token value. This is the code
- ** 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"
-
-/**
-* 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 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';
-
- /**
- * result status
- *
- * @var bool
- */
- public $successful = true;
-
- /**
- * return value
- *
- * @var mixed
- */
- public $retvalue = 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_Template
- */
- 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();
-
- /**
- * template prefix array
- *
- * @var \Smarty_Internal_ParseTree[]
- */
- public $template_postfix = array();
-
- /**
- * constructor
- *
- * @param Smarty_Internal_Templatelexer $lex
- * @param Smarty_Internal_TemplateCompilerBase $compiler
- */
- public 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));
- }
-
- /**
- * error rundown
- *
- */
- public function errorRunDown()
- {
- while ($this->yystack !== array()) {
- $this->yy_pop_parser_stack();
- }
- if (is_resource($this->yyTraceFILE)) {
- fclose($this->yyTraceFILE);
- }
- }
-
- /**
- * 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));
- }
-
-
- const TP_VERT = 1;
- const TP_COLON = 2;
- const TP_TEXT = 3;
- const TP_STRIPON = 4;
- const TP_STRIPOFF = 5;
- const TP_LITERALSTART = 6;
- const TP_LITERALEND = 7;
- const TP_LITERAL = 8;
- const TP_SIMPELOUTPUT = 9;
- const TP_SIMPLETAG = 10;
- const TP_SMARTYBLOCKCHILDPARENT = 11;
- const TP_LDEL = 12;
- const TP_RDEL = 13;
- const TP_DOLLARID = 14;
- const TP_EQUAL = 15;
- const TP_ID = 16;
- const TP_PTR = 17;
- const TP_LDELMAKENOCACHE = 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_CLOSETAG = 30;
- const TP_LDELSLASH = 31;
- const TP_ATTR = 32;
- const TP_INTEGER = 33;
- const TP_COMMA = 34;
- const TP_OPENP = 35;
- const TP_CLOSEP = 36;
- const TP_MATH = 37;
- const TP_UNIMATH = 38;
- const TP_ISIN = 39;
- const TP_QMARK = 40;
- const TP_NOT = 41;
- const TP_TYPECAST = 42;
- const TP_HEX = 43;
- const TP_DOT = 44;
- const TP_INSTANCEOF = 45;
- const TP_SINGLEQUOTESTRING = 46;
- const TP_DOUBLECOLON = 47;
- const TP_NAMESPACE = 48;
- const TP_AT = 49;
- const TP_HATCH = 50;
- const TP_OPENB = 51;
- const TP_CLOSEB = 52;
- const TP_DOLLAR = 53;
- const TP_LOGOP = 54;
- const TP_SLOGOP = 55;
- const TP_TLOGOP = 56;
- const TP_SINGLECOND = 57;
- const TP_ARRAYOPEN = 58;
- const TP_QUOTE = 59;
- const TP_BACKTICK = 60;
- const YY_NO_ACTION = 514;
- const YY_ACCEPT_ACTION = 513;
- const YY_ERROR_ACTION = 512;
-
- const YY_SZ_ACTTAB = 1997;
-public static $yy_action = array(
- 249, 250, 239, 1, 27, 127, 220, 184, 160, 213,
- 11, 54, 278, 10, 173, 34, 108, 387, 282, 279,
- 223, 321, 221, 8, 194, 387, 18, 387, 85, 41,
- 387, 285, 42, 44, 264, 222, 387, 209, 387, 198,
- 387, 52, 5, 307, 288, 288, 164, 283, 224, 4,
- 50, 249, 250, 239, 1, 232, 131, 381, 189, 205,
- 213, 11, 54, 39, 35, 243, 31, 108, 94, 17,
- 381, 223, 321, 221, 439, 226, 381, 33, 49, 426,
- 41, 439, 89, 42, 44, 264, 222, 9, 235, 163,
- 198, 426, 52, 5, 131, 288, 212, 284, 102, 106,
- 4, 50, 249, 250, 239, 1, 232, 129, 426, 189,
- 347, 213, 11, 54, 175, 324, 347, 208, 108, 22,
- 426, 301, 223, 321, 221, 302, 226, 135, 18, 49,
- 52, 41, 26, 288, 42, 44, 264, 222, 16, 235,
- 294, 198, 204, 52, 5, 170, 288, 32, 90, 267,
- 268, 4, 50, 249, 250, 239, 1, 20, 129, 185,
- 179, 255, 213, 11, 54, 455, 288, 192, 455, 108,
- 175, 167, 455, 223, 321, 221, 439, 226, 256, 18,
- 55, 292, 41, 439, 132, 42, 44, 264, 222, 427,
- 235, 12, 198, 165, 52, 5, 232, 288, 288, 347,
- 153, 427, 4, 50, 249, 250, 239, 1, 232, 129,
- 286, 181, 347, 213, 11, 54, 24, 13, 347, 49,
- 108, 232, 320, 426, 223, 321, 221, 195, 201, 173,
- 18, 49, 139, 41, 296, 426, 42, 44, 264, 222,
- 7, 235, 286, 198, 49, 52, 5, 147, 288, 117,
- 150, 317, 263, 4, 50, 249, 250, 239, 1, 95,
- 130, 173, 189, 155, 213, 11, 54, 22, 244, 271,
- 192, 108, 323, 286, 101, 223, 321, 221, 294, 226,
- 204, 18, 348, 257, 41, 166, 283, 42, 44, 264,
- 222, 28, 235, 300, 198, 348, 52, 5, 247, 288,
- 117, 348, 94, 206, 4, 50, 249, 250, 239, 1,
- 95, 129, 22, 189, 277, 213, 11, 54, 91, 274,
- 224, 426, 108, 323, 216, 156, 223, 321, 221, 132,
- 180, 262, 18, 426, 100, 41, 12, 288, 42, 44,
- 264, 222, 15, 235, 216, 198, 254, 52, 5, 233,
- 288, 210, 190, 192, 100, 4, 50, 249, 250, 239,
- 1, 3, 131, 94, 189, 192, 213, 11, 54, 269,
- 10, 204, 290, 108, 325, 216, 224, 223, 321, 221,
- 23, 226, 211, 33, 315, 100, 45, 513, 92, 42,
- 44, 264, 222, 102, 235, 178, 198, 268, 52, 5,
- 275, 288, 161, 192, 37, 25, 4, 50, 249, 250,
- 239, 1, 286, 129, 172, 187, 305, 213, 11, 54,
- 164, 283, 310, 141, 108, 281, 281, 236, 223, 321,
- 221, 169, 226, 230, 18, 122, 171, 41, 225, 175,
- 42, 44, 264, 222, 144, 235, 303, 198, 134, 52,
- 5, 265, 288, 151, 286, 192, 175, 4, 50, 249,
- 250, 239, 1, 286, 128, 94, 189, 143, 213, 11,
- 54, 219, 152, 207, 193, 108, 149, 281, 31, 223,
- 321, 221, 100, 226, 21, 6, 286, 288, 41, 158,
- 16, 42, 44, 264, 222, 102, 235, 238, 198, 286,
- 52, 5, 157, 288, 281, 122, 168, 283, 4, 50,
- 249, 250, 239, 1, 30, 93, 308, 51, 215, 213,
- 11, 54, 53, 251, 140, 248, 108, 245, 304, 116,
- 223, 321, 221, 111, 226, 176, 18, 270, 266, 41,
- 224, 322, 42, 44, 264, 222, 7, 235, 259, 198,
- 147, 52, 5, 257, 288, 43, 40, 38, 83, 4,
- 50, 241, 214, 204, 319, 280, 88, 107, 138, 182,
- 97, 64, 311, 312, 313, 316, 95, 281, 298, 258,
- 142, 234, 94, 105, 272, 197, 231, 482, 237, 323,
- 37, 133, 324, 241, 214, 204, 319, 314, 88, 107,
- 296, 183, 97, 82, 84, 43, 40, 38, 95, 296,
- 296, 258, 296, 296, 296, 159, 272, 197, 231, 296,
- 237, 323, 311, 312, 313, 316, 241, 296, 204, 296,
- 296, 103, 296, 296, 199, 104, 77, 296, 296, 110,
- 296, 95, 296, 296, 258, 278, 296, 296, 34, 272,
- 197, 231, 279, 237, 323, 43, 40, 38, 296, 296,
- 296, 241, 26, 204, 196, 276, 103, 296, 16, 199,
- 104, 77, 311, 312, 313, 316, 95, 192, 296, 258,
- 146, 296, 296, 296, 272, 197, 231, 296, 237, 323,
- 286, 393, 39, 35, 243, 296, 296, 296, 296, 191,
- 276, 296, 26, 318, 252, 253, 126, 296, 16, 249,
- 250, 239, 1, 296, 296, 131, 296, 261, 213, 11,
- 54, 296, 296, 296, 426, 108, 393, 393, 393, 223,
- 321, 221, 241, 296, 204, 299, 426, 103, 107, 296,
- 183, 97, 82, 393, 393, 393, 393, 95, 296, 260,
- 258, 52, 296, 296, 288, 272, 197, 231, 296, 237,
- 323, 293, 296, 296, 296, 296, 296, 249, 250, 239,
- 2, 296, 295, 296, 296, 296, 213, 11, 54, 296,
- 296, 177, 296, 108, 136, 296, 296, 223, 321, 221,
- 296, 296, 296, 293, 43, 40, 38, 296, 296, 249,
- 250, 239, 2, 296, 295, 43, 40, 38, 213, 11,
- 54, 311, 312, 313, 316, 108, 296, 291, 14, 223,
- 321, 221, 311, 312, 313, 316, 296, 296, 241, 296,
- 204, 296, 192, 103, 296, 296, 199, 104, 77, 296,
- 296, 296, 296, 95, 383, 296, 258, 296, 296, 297,
- 14, 272, 197, 231, 296, 237, 323, 383, 296, 296,
- 241, 296, 204, 383, 296, 99, 296, 287, 199, 120,
- 48, 241, 112, 204, 296, 95, 103, 296, 258, 199,
- 120, 74, 296, 272, 197, 231, 95, 237, 323, 258,
- 455, 296, 296, 455, 272, 197, 231, 455, 237, 323,
- 241, 296, 204, 296, 296, 103, 200, 296, 199, 120,
- 74, 296, 296, 296, 296, 95, 296, 296, 258, 278,
- 296, 296, 34, 272, 197, 231, 279, 237, 323, 241,
- 455, 204, 296, 296, 99, 202, 296, 199, 120, 56,
- 241, 211, 204, 296, 95, 103, 296, 258, 199, 120,
- 74, 296, 272, 197, 231, 95, 237, 323, 258, 227,
- 296, 296, 296, 272, 197, 231, 296, 237, 323, 241,
- 296, 204, 148, 296, 103, 203, 86, 199, 120, 73,
- 296, 296, 286, 296, 95, 296, 296, 258, 278, 296,
- 296, 34, 272, 197, 231, 279, 237, 323, 241, 296,
- 204, 175, 296, 103, 296, 296, 199, 120, 75, 241,
- 296, 204, 296, 95, 103, 296, 258, 199, 120, 63,
- 296, 272, 197, 231, 95, 237, 323, 258, 229, 192,
- 296, 296, 272, 197, 231, 296, 237, 323, 241, 296,
- 204, 380, 296, 103, 296, 296, 199, 120, 58, 296,
- 296, 296, 296, 95, 380, 296, 258, 296, 296, 296,
- 380, 272, 197, 231, 296, 237, 323, 241, 296, 204,
- 296, 296, 103, 296, 296, 199, 120, 71, 241, 296,
- 204, 296, 95, 103, 296, 258, 199, 120, 79, 296,
- 272, 197, 231, 95, 237, 323, 258, 296, 296, 296,
- 154, 272, 197, 231, 87, 237, 323, 241, 296, 204,
- 286, 296, 103, 296, 296, 199, 120, 70, 296, 296,
- 296, 296, 95, 296, 296, 258, 296, 296, 296, 175,
- 272, 197, 231, 296, 237, 323, 241, 296, 204, 296,
- 296, 103, 296, 296, 199, 120, 56, 241, 296, 204,
- 296, 95, 103, 296, 258, 199, 120, 46, 296, 272,
- 197, 231, 95, 237, 323, 258, 296, 296, 296, 296,
- 272, 197, 231, 296, 237, 323, 241, 296, 204, 296,
- 296, 103, 296, 296, 199, 120, 78, 296, 296, 296,
- 296, 95, 296, 296, 258, 296, 296, 296, 296, 272,
- 197, 231, 296, 237, 323, 241, 296, 204, 296, 296,
- 103, 296, 296, 199, 120, 66, 241, 296, 204, 296,
- 95, 103, 296, 258, 199, 120, 59, 296, 272, 197,
- 231, 95, 237, 323, 258, 296, 296, 296, 296, 272,
- 197, 231, 296, 237, 323, 241, 296, 204, 296, 296,
- 103, 296, 296, 186, 109, 57, 296, 296, 296, 296,
- 95, 296, 296, 258, 296, 296, 296, 296, 272, 197,
- 231, 296, 237, 323, 241, 296, 204, 296, 296, 103,
- 296, 296, 188, 120, 67, 241, 296, 204, 296, 95,
- 103, 296, 258, 199, 96, 62, 296, 272, 197, 231,
- 95, 237, 323, 258, 296, 296, 296, 296, 272, 197,
- 231, 296, 237, 323, 241, 296, 204, 296, 296, 103,
- 296, 296, 199, 120, 80, 296, 296, 296, 296, 95,
- 296, 296, 258, 296, 296, 296, 296, 272, 197, 231,
- 296, 237, 323, 241, 296, 204, 296, 296, 103, 296,
- 296, 199, 120, 76, 241, 296, 204, 296, 95, 103,
- 296, 258, 199, 120, 81, 296, 272, 197, 231, 95,
- 237, 323, 258, 296, 296, 296, 296, 272, 197, 231,
- 296, 237, 323, 241, 296, 204, 296, 296, 103, 296,
- 296, 199, 120, 65, 296, 296, 296, 296, 95, 296,
- 296, 258, 296, 296, 296, 296, 272, 197, 231, 296,
- 237, 323, 241, 296, 204, 296, 296, 103, 296, 296,
- 199, 96, 68, 241, 296, 204, 296, 95, 103, 296,
- 258, 199, 120, 61, 296, 272, 197, 231, 95, 237,
- 323, 258, 296, 296, 296, 296, 272, 197, 231, 296,
- 237, 323, 241, 296, 204, 296, 296, 103, 296, 296,
- 199, 98, 69, 296, 296, 296, 296, 95, 296, 296,
- 258, 296, 296, 296, 296, 272, 197, 231, 296, 237,
- 323, 241, 296, 204, 296, 296, 103, 296, 296, 199,
- 120, 72, 241, 296, 204, 296, 95, 103, 296, 258,
- 199, 120, 47, 296, 272, 197, 231, 95, 237, 323,
- 258, 296, 296, 296, 296, 272, 197, 231, 296, 237,
- 323, 241, 192, 204, 296, 296, 103, 296, 296, 199,
- 120, 60, 296, 296, 351, 296, 95, 296, 217, 258,
- 296, 296, 296, 296, 272, 197, 231, 26, 237, 323,
- 241, 296, 204, 16, 296, 103, 426, 296, 199, 125,
- 296, 241, 296, 204, 296, 95, 103, 296, 426, 199,
- 118, 296, 242, 272, 197, 231, 95, 237, 323, 296,
- 296, 296, 296, 246, 272, 197, 231, 296, 237, 323,
- 241, 296, 204, 278, 296, 103, 34, 296, 199, 121,
- 279, 296, 296, 296, 296, 95, 296, 296, 296, 296,
- 26, 296, 162, 272, 197, 231, 16, 237, 323, 241,
- 296, 204, 296, 296, 103, 296, 296, 199, 123, 296,
- 241, 296, 204, 296, 95, 103, 296, 296, 199, 114,
- 296, 296, 272, 197, 231, 95, 237, 323, 296, 296,
- 296, 296, 296, 272, 197, 231, 296, 237, 323, 241,
- 296, 204, 296, 145, 103, 296, 296, 199, 124, 296,
- 296, 296, 296, 286, 95, 39, 35, 243, 296, 296,
- 296, 296, 272, 197, 231, 296, 237, 323, 241, 296,
- 204, 296, 296, 103, 296, 296, 199, 115, 296, 241,
- 296, 204, 296, 95, 103, 296, 296, 199, 113, 296,
- 296, 272, 197, 231, 95, 237, 323, 296, 296, 296,
- 296, 296, 272, 197, 231, 228, 237, 323, 241, 296,
- 204, 296, 455, 103, 296, 455, 199, 119, 3, 455,
- 439, 296, 296, 95, 296, 296, 296, 296, 296, 296,
- 296, 272, 197, 231, 228, 237, 323, 296, 296, 296,
- 296, 455, 296, 296, 455, 296, 296, 439, 455, 439,
- 439, 228, 455, 296, 439, 296, 296, 137, 455, 296,
- 296, 455, 296, 296, 32, 455, 439, 286, 296, 39,
- 35, 243, 29, 296, 26, 296, 439, 296, 296, 439,
- 16, 455, 296, 439, 306, 43, 40, 38, 296, 296,
- 296, 296, 296, 439, 296, 296, 439, 296, 455, 296,
- 439, 26, 311, 312, 313, 316, 296, 16, 228, 296,
- 296, 296, 43, 40, 38, 455, 296, 296, 455, 296,
- 296, 296, 455, 439, 296, 296, 19, 296, 296, 311,
- 312, 313, 316, 455, 296, 296, 455, 296, 296, 296,
- 455, 439, 296, 296, 296, 43, 40, 38, 296, 296,
- 439, 296, 296, 439, 174, 455, 296, 439, 296, 240,
- 309, 296, 311, 312, 313, 316, 296, 289, 439, 296,
- 36, 439, 296, 455, 296, 439, 296, 296, 43, 40,
- 38, 296, 296, 43, 40, 38, 296, 296, 296, 296,
- 296, 43, 40, 38, 296, 311, 312, 313, 316, 296,
- 311, 312, 313, 316, 296, 43, 40, 38, 311, 312,
- 313, 316, 273, 43, 40, 38, 296, 296, 296, 296,
- 296, 296, 311, 312, 313, 316, 296, 296, 296, 296,
- 311, 312, 313, 316, 455, 296, 296, 455, 43, 40,
- 38, 455, 439, 218, 43, 40, 38, 296, 296, 296,
- 296, 296, 296, 296, 296, 311, 312, 313, 316, 296,
- 296, 311, 312, 313, 316, 296, 296, 296, 296, 439,
- 296, 296, 439, 296, 455, 296, 439,
- );
- public static $yy_lookahead = array(
- 9, 10, 11, 12, 12, 14, 14, 16, 16, 18,
- 19, 20, 9, 34, 102, 12, 25, 13, 70, 16,
- 29, 30, 31, 35, 33, 21, 35, 23, 95, 38,
- 26, 52, 41, 42, 43, 44, 32, 46, 34, 48,
- 36, 50, 51, 52, 53, 53, 98, 99, 44, 58,
- 59, 9, 10, 11, 12, 22, 14, 13, 16, 15,
- 18, 19, 20, 85, 86, 87, 15, 25, 17, 21,
- 26, 29, 30, 31, 44, 33, 32, 35, 45, 35,
- 38, 51, 34, 41, 42, 43, 44, 35, 46, 77,
- 48, 47, 50, 51, 14, 53, 16, 13, 47, 47,
- 58, 59, 9, 10, 11, 12, 22, 14, 35, 16,
- 26, 18, 19, 20, 102, 103, 32, 44, 25, 34,
- 47, 36, 29, 30, 31, 52, 33, 14, 35, 45,
- 50, 38, 26, 53, 41, 42, 43, 44, 32, 46,
- 66, 48, 68, 50, 51, 77, 53, 15, 35, 7,
- 8, 58, 59, 9, 10, 11, 12, 12, 14, 14,
- 16, 16, 18, 19, 20, 9, 53, 1, 12, 25,
- 102, 82, 16, 29, 30, 31, 44, 33, 33, 35,
- 106, 107, 38, 51, 44, 41, 42, 43, 44, 35,
- 46, 51, 48, 82, 50, 51, 22, 53, 53, 13,
- 73, 47, 58, 59, 9, 10, 11, 12, 22, 14,
- 83, 16, 26, 18, 19, 20, 28, 12, 32, 45,
- 25, 22, 70, 35, 29, 30, 31, 65, 33, 102,
- 35, 45, 73, 38, 60, 47, 41, 42, 43, 44,
- 35, 46, 83, 48, 45, 50, 51, 95, 53, 71,
- 95, 52, 74, 58, 59, 9, 10, 11, 12, 81,
- 14, 102, 16, 73, 18, 19, 20, 34, 90, 36,
- 1, 25, 94, 83, 81, 29, 30, 31, 66, 33,
- 68, 35, 13, 96, 38, 98, 99, 41, 42, 43,
- 44, 15, 46, 100, 48, 26, 50, 51, 14, 53,
- 71, 32, 17, 74, 58, 59, 9, 10, 11, 12,
- 81, 14, 34, 16, 36, 18, 19, 20, 82, 107,
- 44, 35, 25, 94, 71, 95, 29, 30, 31, 44,
- 33, 78, 35, 47, 81, 38, 51, 53, 41, 42,
- 43, 44, 15, 46, 71, 48, 16, 50, 51, 22,
- 53, 78, 79, 1, 81, 58, 59, 9, 10, 11,
- 12, 15, 14, 17, 16, 1, 18, 19, 20, 66,
- 34, 68, 36, 25, 16, 71, 44, 29, 30, 31,
- 28, 33, 78, 35, 52, 81, 38, 62, 63, 41,
- 42, 43, 44, 47, 46, 6, 48, 8, 50, 51,
- 16, 53, 73, 1, 2, 40, 58, 59, 9, 10,
- 11, 12, 83, 14, 77, 16, 52, 18, 19, 20,
- 98, 99, 52, 95, 25, 97, 97, 92, 29, 30,
- 31, 77, 33, 49, 35, 100, 14, 38, 16, 102,
- 41, 42, 43, 44, 73, 46, 14, 48, 14, 50,
- 51, 36, 53, 73, 83, 1, 102, 58, 59, 9,
- 10, 11, 12, 83, 14, 17, 16, 50, 18, 19,
- 20, 17, 71, 64, 65, 25, 73, 97, 15, 29,
- 30, 31, 81, 33, 26, 35, 83, 53, 38, 73,
- 32, 41, 42, 43, 44, 47, 46, 92, 48, 83,
- 50, 51, 95, 53, 97, 100, 98, 99, 58, 59,
- 9, 10, 11, 12, 23, 14, 52, 16, 16, 18,
- 19, 20, 16, 7, 50, 16, 25, 13, 13, 16,
- 29, 30, 31, 16, 33, 16, 35, 33, 33, 38,
- 44, 16, 41, 42, 43, 44, 35, 46, 16, 48,
- 95, 50, 51, 96, 53, 37, 38, 39, 81, 58,
- 59, 66, 67, 68, 69, 83, 71, 72, 95, 74,
- 75, 76, 54, 55, 56, 57, 81, 97, 60, 84,
- 95, 13, 17, 80, 89, 90, 91, 1, 93, 94,
- 2, 81, 103, 66, 67, 68, 69, 99, 71, 72,
- 108, 74, 75, 76, 81, 37, 38, 39, 81, 108,
- 108, 84, 108, 108, 108, 95, 89, 90, 91, 108,
- 93, 94, 54, 55, 56, 57, 66, 108, 68, 108,
- 108, 71, 108, 108, 74, 75, 76, 108, 108, 21,
- 108, 81, 108, 108, 84, 9, 108, 108, 12, 89,
- 90, 91, 16, 93, 94, 37, 38, 39, 108, 108,
- 108, 66, 26, 68, 104, 105, 71, 108, 32, 74,
- 75, 76, 54, 55, 56, 57, 81, 1, 108, 84,
- 73, 108, 108, 108, 89, 90, 91, 108, 93, 94,
- 83, 2, 85, 86, 87, 108, 108, 108, 108, 104,
- 105, 108, 26, 3, 4, 5, 6, 108, 32, 9,
- 10, 11, 12, 108, 108, 14, 108, 16, 18, 19,
- 20, 108, 108, 108, 35, 25, 37, 38, 39, 29,
- 30, 31, 66, 108, 68, 69, 47, 71, 72, 108,
- 74, 75, 76, 54, 55, 56, 57, 81, 108, 48,
- 84, 50, 108, 108, 53, 89, 90, 91, 108, 93,
- 94, 3, 108, 108, 108, 108, 108, 9, 10, 11,
- 12, 108, 14, 108, 108, 108, 18, 19, 20, 108,
- 108, 13, 108, 25, 27, 108, 108, 29, 30, 31,
- 108, 108, 108, 3, 37, 38, 39, 108, 108, 9,
- 10, 11, 12, 108, 14, 37, 38, 39, 18, 19,
- 20, 54, 55, 56, 57, 25, 108, 59, 60, 29,
- 30, 31, 54, 55, 56, 57, 108, 108, 66, 108,
- 68, 108, 1, 71, 108, 108, 74, 75, 76, 108,
- 108, 108, 108, 81, 13, 108, 84, 108, 108, 59,
- 60, 89, 90, 91, 108, 93, 94, 26, 108, 108,
- 66, 108, 68, 32, 108, 71, 108, 105, 74, 75,
- 76, 66, 78, 68, 108, 81, 71, 108, 84, 74,
- 75, 76, 108, 89, 90, 91, 81, 93, 94, 84,
- 9, 108, 108, 12, 89, 90, 91, 16, 93, 94,
- 66, 108, 68, 108, 108, 71, 101, 108, 74, 75,
- 76, 108, 108, 108, 108, 81, 108, 108, 84, 9,
- 108, 108, 12, 89, 90, 91, 16, 93, 94, 66,
- 49, 68, 108, 108, 71, 101, 108, 74, 75, 76,
- 66, 78, 68, 108, 81, 71, 108, 84, 74, 75,
- 76, 108, 89, 90, 91, 81, 93, 94, 84, 49,
- 108, 108, 108, 89, 90, 91, 108, 93, 94, 66,
- 108, 68, 73, 108, 71, 101, 77, 74, 75, 76,
- 108, 108, 83, 108, 81, 108, 108, 84, 9, 108,
- 108, 12, 89, 90, 91, 16, 93, 94, 66, 108,
- 68, 102, 108, 71, 108, 108, 74, 75, 76, 66,
- 108, 68, 108, 81, 71, 108, 84, 74, 75, 76,
- 108, 89, 90, 91, 81, 93, 94, 84, 49, 1,
- 108, 108, 89, 90, 91, 108, 93, 94, 66, 108,
- 68, 13, 108, 71, 108, 108, 74, 75, 76, 108,
- 108, 108, 108, 81, 26, 108, 84, 108, 108, 108,
- 32, 89, 90, 91, 108, 93, 94, 66, 108, 68,
- 108, 108, 71, 108, 108, 74, 75, 76, 66, 108,
- 68, 108, 81, 71, 108, 84, 74, 75, 76, 108,
- 89, 90, 91, 81, 93, 94, 84, 108, 108, 108,
- 73, 89, 90, 91, 77, 93, 94, 66, 108, 68,
- 83, 108, 71, 108, 108, 74, 75, 76, 108, 108,
- 108, 108, 81, 108, 108, 84, 108, 108, 108, 102,
- 89, 90, 91, 108, 93, 94, 66, 108, 68, 108,
- 108, 71, 108, 108, 74, 75, 76, 66, 108, 68,
- 108, 81, 71, 108, 84, 74, 75, 76, 108, 89,
- 90, 91, 81, 93, 94, 84, 108, 108, 108, 108,
- 89, 90, 91, 108, 93, 94, 66, 108, 68, 108,
- 108, 71, 108, 108, 74, 75, 76, 108, 108, 108,
- 108, 81, 108, 108, 84, 108, 108, 108, 108, 89,
- 90, 91, 108, 93, 94, 66, 108, 68, 108, 108,
- 71, 108, 108, 74, 75, 76, 66, 108, 68, 108,
- 81, 71, 108, 84, 74, 75, 76, 108, 89, 90,
- 91, 81, 93, 94, 84, 108, 108, 108, 108, 89,
- 90, 91, 108, 93, 94, 66, 108, 68, 108, 108,
- 71, 108, 108, 74, 75, 76, 108, 108, 108, 108,
- 81, 108, 108, 84, 108, 108, 108, 108, 89, 90,
- 91, 108, 93, 94, 66, 108, 68, 108, 108, 71,
- 108, 108, 74, 75, 76, 66, 108, 68, 108, 81,
- 71, 108, 84, 74, 75, 76, 108, 89, 90, 91,
- 81, 93, 94, 84, 108, 108, 108, 108, 89, 90,
- 91, 108, 93, 94, 66, 108, 68, 108, 108, 71,
- 108, 108, 74, 75, 76, 108, 108, 108, 108, 81,
- 108, 108, 84, 108, 108, 108, 108, 89, 90, 91,
- 108, 93, 94, 66, 108, 68, 108, 108, 71, 108,
- 108, 74, 75, 76, 66, 108, 68, 108, 81, 71,
- 108, 84, 74, 75, 76, 108, 89, 90, 91, 81,
- 93, 94, 84, 108, 108, 108, 108, 89, 90, 91,
- 108, 93, 94, 66, 108, 68, 108, 108, 71, 108,
- 108, 74, 75, 76, 108, 108, 108, 108, 81, 108,
- 108, 84, 108, 108, 108, 108, 89, 90, 91, 108,
- 93, 94, 66, 108, 68, 108, 108, 71, 108, 108,
- 74, 75, 76, 66, 108, 68, 108, 81, 71, 108,
- 84, 74, 75, 76, 108, 89, 90, 91, 81, 93,
- 94, 84, 108, 108, 108, 108, 89, 90, 91, 108,
- 93, 94, 66, 108, 68, 108, 108, 71, 108, 108,
- 74, 75, 76, 108, 108, 108, 108, 81, 108, 108,
- 84, 108, 108, 108, 108, 89, 90, 91, 108, 93,
- 94, 66, 108, 68, 108, 108, 71, 108, 108, 74,
- 75, 76, 66, 108, 68, 108, 81, 71, 108, 84,
- 74, 75, 76, 108, 89, 90, 91, 81, 93, 94,
- 84, 108, 108, 108, 108, 89, 90, 91, 108, 93,
- 94, 66, 1, 68, 108, 108, 71, 108, 108, 74,
- 75, 76, 108, 108, 13, 108, 81, 108, 17, 84,
- 108, 108, 108, 108, 89, 90, 91, 26, 93, 94,
- 66, 108, 68, 32, 108, 71, 35, 108, 74, 75,
- 108, 66, 108, 68, 108, 81, 71, 108, 47, 74,
- 75, 108, 88, 89, 90, 91, 81, 93, 94, 108,
- 108, 108, 108, 88, 89, 90, 91, 108, 93, 94,
- 66, 108, 68, 9, 108, 71, 12, 108, 74, 75,
- 16, 108, 108, 108, 108, 81, 108, 108, 108, 108,
- 26, 108, 28, 89, 90, 91, 32, 93, 94, 66,
- 108, 68, 108, 108, 71, 108, 108, 74, 75, 108,
- 66, 108, 68, 108, 81, 71, 108, 108, 74, 75,
- 108, 108, 89, 90, 91, 81, 93, 94, 108, 108,
- 108, 108, 108, 89, 90, 91, 108, 93, 94, 66,
- 108, 68, 108, 73, 71, 108, 108, 74, 75, 108,
- 108, 108, 108, 83, 81, 85, 86, 87, 108, 108,
- 108, 108, 89, 90, 91, 108, 93, 94, 66, 108,
- 68, 108, 108, 71, 108, 108, 74, 75, 108, 66,
- 108, 68, 108, 81, 71, 108, 108, 74, 75, 108,
- 108, 89, 90, 91, 81, 93, 94, 108, 108, 108,
- 108, 108, 89, 90, 91, 2, 93, 94, 66, 108,
- 68, 108, 9, 71, 108, 12, 74, 75, 15, 16,
- 17, 108, 108, 81, 108, 108, 108, 108, 108, 108,
- 108, 89, 90, 91, 2, 93, 94, 108, 108, 108,
- 108, 9, 108, 108, 12, 108, 108, 44, 16, 17,
- 47, 2, 49, 108, 51, 108, 108, 73, 9, 108,
- 108, 12, 108, 108, 15, 16, 17, 83, 108, 85,
- 86, 87, 24, 108, 26, 108, 44, 108, 108, 47,
- 32, 49, 108, 51, 52, 37, 38, 39, 108, 108,
- 108, 108, 108, 44, 108, 108, 47, 108, 49, 108,
- 51, 26, 54, 55, 56, 57, 108, 32, 2, 108,
- 108, 108, 37, 38, 39, 9, 108, 108, 12, 108,
- 108, 108, 16, 17, 108, 108, 2, 108, 108, 54,
- 55, 56, 57, 9, 108, 108, 12, 108, 108, 108,
- 16, 17, 108, 108, 108, 37, 38, 39, 108, 108,
- 44, 108, 108, 47, 13, 49, 108, 51, 108, 13,
- 52, 108, 54, 55, 56, 57, 108, 13, 44, 108,
- 2, 47, 108, 49, 108, 51, 108, 108, 37, 38,
- 39, 108, 108, 37, 38, 39, 108, 108, 108, 108,
- 108, 37, 38, 39, 108, 54, 55, 56, 57, 108,
- 54, 55, 56, 57, 108, 37, 38, 39, 54, 55,
- 56, 57, 36, 37, 38, 39, 108, 108, 108, 108,
- 108, 108, 54, 55, 56, 57, 108, 108, 108, 108,
- 54, 55, 56, 57, 9, 108, 108, 12, 37, 38,
- 39, 16, 17, 36, 37, 38, 39, 108, 108, 108,
- 108, 108, 108, 108, 108, 54, 55, 56, 57, 108,
- 108, 54, 55, 56, 57, 108, 108, 108, 108, 44,
- 108, 108, 47, 108, 49, 108, 51,
-);
- const YY_SHIFT_USE_DFLT = -22;
- const YY_SHIFT_MAX = 230;
- public static $yy_shift_ofst = array(
- -22, 501, 501, 93, 399, 399, 450, 93, 93, 93,
- 399, 450, -9, 93, 93, 93, 93, 93, 93, 144,
- 93, 195, 93, 93, 93, 246, 195, 93, 93, 93,
- 93, 93, 297, 93, 93, 93, 93, 348, 42, 42,
- 42, 42, 42, 42, 42, 42, 1768, 1795, 1795, 701,
- 758, 1521, 80, 676, 113, 790, 1927, 1828, 1896, 568,
- 768, 1861, 757, 1866, 1874, 1888, 618, 518, 1921, 1921,
- 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
- 1921, 1921, 1921, 1584, 636, 285, 676, 676, 346, 113,
- 113, 402, 700, 1723, -8, 910, 831, 269, 1028, 51,
- 3, 3, 422, 448, 352, 106, 422, 106, 458, 364,
- 434, 454, 106, 166, 166, 166, 166, 565, 166, 166,
- 166, 586, 565, 166, 166, -22, -22, 1752, 1769, 1826,
- 1844, 1945, 145, 979, 156, 132, 284, 106, 140, 106,
- 30, 140, 140, 30, 106, 106, 106, 140, 106, 106,
- 140, 106, 327, 106, 106, 106, 140, 140, 106, 140,
- 205, 106, 284, 166, 565, 588, 565, 588, 565, 166,
- 166, -12, 166, -22, -22, -22, -22, -22, -22, 689,
- 4, 44, 84, 186, 73, 881, 199, 188, 174, 286,
- 48, 336, 384, 389, 332, 142, -21, 52, 154, 33,
- 85, 276, 278, 233, 515, 509, 474, 516, 502, 464,
- 491, 415, 417, 432, 514, 370, 463, 506, 365, 513,
- -12, 517, 504, 519, 505, 511, 496, 525, 532, 330,
- 358,
-);
- const YY_REDUCE_USE_DFLT = -89;
- const YY_REDUCE_MAX = 178;
- public static $yy_reduce_ofst = array(
- 325, 527, 495, 666, 595, 560, 863, 874, 834, 805,
- 762, 794, 1179, 1455, 1208, 1012, 1386, 1139, 1070, 1110,
- 1150, 1219, 1248, 1277, 1288, 1317, 1346, 1357, 1415, 1426,
- 1081, 1041, 1001, 972, 943, 932, 903, 1484, 1495, 1622,
- 1633, 1662, 1593, 1564, 1553, 1524, 1704, 607, 1590, 178,
- 74, 1027, 229, 899, 273, 212, -22, -22, -22, -22,
- -22, -22, -22, -22, -22, -22, -22, -22, -22, -22,
- -22, -22, -22, -22, -22, -22, -22, -22, -22, -22,
- -22, -22, -22, 380, 329, 187, 159, 127, -52, 253,
- 304, 12, 303, 152, 193, 328, 68, 68, 68, 322,
- 328, 407, 405, 322, 68, 190, 335, 416, 403, 68,
- 401, 354, 371, 68, 68, 68, 337, 322, 68, 68,
- 68, 68, 408, 68, 68, 68, 409, 455, 455, 455,
- 455, 455, 510, 480, 455, 455, 477, 482, 457, 482,
- 473, 457, 457, 485, 482, 482, 482, 457, 482, 482,
- 457, 482, 503, 482, 482, 482, 457, 457, 482, 457,
- 520, 482, 523, -88, 498, 489, 498, 489, 498, -88,
- -88, -67, -88, 111, 155, 89, 236, 230, 162,
-);
- public static $yyExpectedTokens = array(
- array(),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(24, 26, 32, 37, 38, 39, 54, 55, 56, 57, ),
- array(26, 32, 37, 38, 39, 54, 55, 56, 57, ),
- array(26, 32, 37, 38, 39, 54, 55, 56, 57, ),
- array(14, 16, 48, 50, 53, ),
- array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ),
- array(1, 13, 17, 26, 32, 35, 47, ),
- array(14, 16, 50, 53, ),
- array(1, 26, 32, ),
- array(14, 35, 53, ),
- array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ),
- array(36, 37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 52, 54, 55, 56, 57, ),
- array(36, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(27, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(2, 37, 38, 39, 54, 55, 56, 57, ),
- array(21, 37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, 60, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(9, 12, 16, 26, 28, 32, ),
- array(9, 12, 16, 26, 32, ),
- array(17, 44, 51, ),
- array(1, 26, 32, ),
- array(1, 26, 32, ),
- array(15, 17, 47, ),
- array(14, 35, 53, ),
- array(14, 35, 53, ),
- array(1, 2, ),
- array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 20, 25, 29, 30, 31, ),
- array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ),
- array(12, 14, 16, 53, ),
- array(9, 12, 16, 49, ),
- array(1, 13, 26, 32, ),
- array(1, 13, 26, 32, ),
- array(1, 13, 26, 32, ),
- array(15, 17, 47, ),
- array(9, 12, 16, ),
- array(9, 12, 16, ),
- array(14, 16, ),
- array(17, 47, ),
- array(1, 28, ),
- array(26, 32, ),
- array(14, 16, ),
- array(26, 32, ),
- array(26, 32, ),
- array(1, 52, ),
- array(14, 53, ),
- array(1, 17, ),
- array(26, 32, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(17, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(17, ),
- array(1, ),
- array(1, ),
- array(),
- array(),
- array(2, 9, 12, 16, 17, 44, 47, 49, 51, 52, ),
- array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ),
- array(2, 9, 12, 16, 17, 44, 47, 49, 51, ),
- array(2, 9, 12, 16, 17, 44, 47, 49, 51, ),
- array(9, 12, 16, 17, 44, 47, 49, 51, ),
- array(12, 14, 16, 33, 53, ),
- array(9, 12, 16, 49, ),
- array(9, 12, 16, ),
- array(15, 44, 51, ),
- array(14, 53, ),
- array(26, 32, ),
- array(44, 51, ),
- array(26, 32, ),
- array(44, 51, ),
- array(44, 51, ),
- array(44, 51, ),
- array(44, 51, ),
- array(26, 32, ),
- array(26, 32, ),
- array(26, 32, ),
- array(44, 51, ),
- array(26, 32, ),
- array(26, 32, ),
- array(44, 51, ),
- array(26, 32, ),
- array(15, 22, ),
- array(26, 32, ),
- array(26, 32, ),
- array(26, 32, ),
- array(44, 51, ),
- array(44, 51, ),
- array(26, 32, ),
- array(44, 51, ),
- array(12, 35, ),
- array(26, 32, ),
- array(14, 53, ),
- array(1, ),
- array(17, ),
- array(2, ),
- array(17, ),
- array(2, ),
- array(17, ),
- array(1, ),
- array(1, ),
- array(35, ),
- array(1, ),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(2, 35, 37, 38, 39, 47, 54, 55, 56, 57, ),
- array(13, 21, 23, 26, 32, 34, 36, 44, ),
- array(13, 15, 26, 32, 35, 47, ),
- array(13, 22, 26, 32, 45, ),
- array(13, 22, 26, 32, 45, ),
- array(35, 44, 47, 52, ),
- array(9, 12, 16, 49, ),
- array(22, 45, 52, ),
- array(28, 35, 47, ),
- array(22, 45, 60, ),
- array(35, 47, ),
- array(21, 34, ),
- array(34, 36, ),
- array(16, 49, ),
- array(6, 8, ),
- array(44, 52, ),
- array(7, 8, ),
- array(34, 52, ),
- array(35, 47, ),
- array(35, 47, ),
- array(22, 45, ),
- array(34, 36, ),
- array(15, 44, ),
- array(34, 36, ),
- array(34, 36, ),
- array(13, ),
- array(16, ),
- array(50, ),
- array(7, ),
- array(16, ),
- array(52, ),
- array(23, ),
- array(36, ),
- array(50, ),
- array(14, ),
- array(13, ),
- array(52, ),
- array(15, ),
- array(16, ),
- array(40, ),
- array(16, ),
- array(35, ),
- array(16, ),
- array(33, ),
- array(16, ),
- array(33, ),
- array(35, ),
- array(44, ),
- array(16, ),
- array(16, ),
- array(16, ),
- array(16, ),
- 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(),
-);
- public static $yy_default = array(
- 336, 512, 512, 512, 497, 497, 512, 474, 474, 474,
- 512, 512, 512, 512, 512, 512, 512, 512, 512, 512,
- 512, 512, 512, 512, 512, 512, 512, 512, 512, 512,
- 512, 512, 512, 512, 512, 512, 512, 512, 512, 512,
- 512, 512, 512, 512, 512, 512, 377, 377, 356, 512,
- 512, 413, 512, 377, 512, 512, 512, 512, 512, 512,
- 512, 512, 382, 512, 349, 512, 512, 512, 382, 379,
- 389, 388, 384, 402, 473, 397, 498, 500, 401, 361,
- 472, 499, 349, 377, 377, 487, 377, 377, 429, 512,
- 512, 368, 326, 428, 512, 439, 391, 391, 391, 429,
- 439, 439, 512, 429, 391, 377, 512, 377, 377, 391,
- 512, 371, 358, 395, 394, 396, 373, 429, 400, 404,
- 391, 404, 484, 406, 405, 481, 334, 428, 428, 428,
- 428, 428, 512, 441, 439, 455, 512, 363, 435, 354,
- 434, 437, 433, 432, 359, 357, 364, 436, 353, 367,
- 466, 365, 512, 352, 350, 360, 467, 465, 346, 464,
- 439, 366, 512, 369, 461, 475, 488, 476, 485, 372,
- 422, 439, 374, 480, 439, 480, 480, 439, 334, 413,
- 409, 413, 403, 403, 413, 440, 403, 413, 403, 413,
- 512, 512, 512, 332, 409, 512, 512, 512, 423, 403,
- 512, 409, 512, 512, 512, 512, 512, 512, 512, 418,
- 385, 512, 512, 512, 512, 512, 512, 512, 415, 512,
- 455, 512, 512, 512, 411, 486, 409, 512, 512, 512,
- 512, 419, 407, 362, 445, 418, 425, 424, 420, 339,
- 460, 421, 483, 398, 416, 340, 399, 455, 378, 337,
- 338, 330, 328, 329, 442, 443, 444, 438, 392, 393,
- 427, 426, 386, 417, 408, 390, 410, 331, 333, 335,
- 412, 470, 414, 415, 503, 478, 495, 471, 459, 458,
- 375, 457, 344, 462, 508, 493, 376, 496, 456, 509,
- 494, 501, 504, 511, 510, 507, 505, 502, 506, 345,
- 468, 469, 446, 355, 341, 452, 450, 454, 448, 453,
- 447, 489, 490, 491, 463, 449, 492, 451, 327, 342,
- 343, 370, 430, 431, 479, 477,
-);
- const YYNOCODE = 109;
- const YYSTACKDEPTH = 500;
- const YYNSTATE = 326;
- const YYNRULE = 186;
- const YYERRORSYMBOL = 61;
- const YYERRSYMDT = 'yy0';
- const YYFALLBACK = 0;
- public static $yyFallback = array(
- );
- public function Trace($TraceFILE, $zTracePrompt)
- {
- if (!$TraceFILE) {
- $zTracePrompt = 0;
- } elseif (!$zTracePrompt) {
- $TraceFILE = 0;
- }
- $this->yyTraceFILE = $TraceFILE;
- $this->yyTracePrompt = $zTracePrompt;
- }
-
- public function PrintTrace()
- {
- $this->yyTraceFILE = fopen('php://output', 'w');
- $this->yyTracePrompt = '<br>';
- }
-
- 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', 'TEXT',
- 'STRIPON', 'STRIPOFF', 'LITERALSTART', 'LITERALEND',
- 'LITERAL', 'SIMPELOUTPUT', 'SIMPLETAG', 'SMARTYBLOCKCHILDPARENT',
- 'LDEL', 'RDEL', 'DOLLARID', 'EQUAL',
- 'ID', 'PTR', 'LDELMAKENOCACHE', 'LDELIF',
- 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO',
- 'STEP', 'LDELFOREACH', 'SPACE', 'AS',
- 'APTR', 'LDELSETFILTER', 'CLOSETAG', 'LDELSLASH',
- 'ATTR', 'INTEGER', 'COMMA', 'OPENP',
- 'CLOSEP', 'MATH', 'UNIMATH', 'ISIN',
- 'QMARK', 'NOT', 'TYPECAST', 'HEX',
- 'DOT', 'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON',
- 'NAMESPACE', 'AT', 'HATCH', 'OPENB',
- 'CLOSEB', 'DOLLAR', 'LOGOP', 'SLOGOP',
- 'TLOGOP', 'SINGLECOND', 'ARRAYOPEN', 'QUOTE',
- 'BACKTICK', 'error', 'start', 'template',
- 'literal_e2', 'literal_e1', 'smartytag', 'tagbody',
- 'tag', 'outattr', 'eqoutattr', 'varindexed',
- 'output', 'attributes', 'variable', 'value',
- 'expr', 'modifierlist', 'statement', 'statements',
- 'foraction', 'varvar', 'modparameters', 'attribute',
- 'ternary', 'tlop', 'lop', 'scond',
- 'array', 'function', 'ns1', 'doublequoted_with_quotes',
- 'static_class_access', 'arraydef', 'object', 'arrayindex',
- 'indexdef', 'varvarele', 'objectchain', 'objectelement',
- 'method', 'params', 'modifier', 'modparameter',
- 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',
- );
-
- public static $yyRuleName = array(
- 'start ::= template',
- 'template ::= template TEXT',
- 'template ::= template STRIPON',
- 'template ::= template STRIPOFF',
- 'template ::= template LITERALSTART literal_e2 LITERALEND',
- 'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND',
- 'literal_e2 ::= literal_e1',
- 'literal_e1 ::= literal_e1 LITERAL',
- 'literal_e1 ::=',
- 'template ::= template smartytag',
- 'template ::=',
- 'smartytag ::= SIMPELOUTPUT',
- 'smartytag ::= SIMPLETAG',
- 'smartytag ::= SMARTYBLOCKCHILDPARENT',
- 'smartytag ::= LDEL tagbody RDEL',
- 'smartytag ::= tag RDEL',
- 'tagbody ::= outattr',
- 'tagbody ::= DOLLARID eqoutattr',
- 'tagbody ::= varindexed eqoutattr',
- 'eqoutattr ::= EQUAL outattr',
- 'outattr ::= output attributes',
- 'output ::= variable',
- 'output ::= value',
- 'output ::= expr',
- '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 ::= LDELMAKENOCACHE DOLLARID',
- '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 SPACE expr AS varvar attributes',
- 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
- 'tag ::= LDELFOREACH attributes',
- 'tag ::= LDELSETFILTER ID modparameters',
- 'tag ::= LDELSETFILTER ID modparameters modifierlist',
- '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 ::= expr tlop value',
- 'expr ::= expr lop expr',
- 'expr ::= expr scond',
- 'expr ::= expr ISIN array',
- 'expr ::= expr ISIN value',
- '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 ::= variable INSTANCEOF ns1',
- 'value ::= variable INSTANCEOF variable',
- 'value ::= SINGLEQUOTESTRING',
- 'value ::= doublequoted_with_quotes',
- 'value ::= varindexed DOUBLECOLON static_class_access',
- 'value ::= smartytag',
- 'value ::= value modifierlist',
- 'value ::= NAMESPACE',
- 'value ::= arraydef',
- '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 UNIMATH 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 ::= SLOGOP',
- 'tlop ::= TLOGOP',
- 'scond ::= SINGLECOND',
- 'arraydef ::= OPENB arrayelements CLOSEB',
- 'arraydef ::= ARRAYOPEN arrayelements CLOSEP',
- '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];
- } else {
- return 'Unknown';
- }
- }
-
- public static function yy_destructor($yymajor, $yypminor)
- {
- switch ($yymajor) {
- default: break; /* If no destructor action specified: do nothing */
- }
- }
-
- public function yy_pop_parser_stack()
- {
- if (empty($this->yystack)) {
- return;
- }
- $yytos = array_pop($this->yystack);
- 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--;
-
- return $yymajor;
- }
-
- public function __destruct()
- {
- while ($this->yystack !== Array()) {
- $this->yy_pop_parser_stack();
- }
- if (is_resource($this->yyTraceFILE)) {
- fclose($this->yyTraceFILE);
- }
- }
-
- public function yy_get_expected_tokens($token)
- {
- 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;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return array_unique($expected);
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $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++;
- $x = new TP_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno][0];
- $this->yystack[$this->yyidx] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return array_unique($expected);
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return $expected;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
-
- return array_unique($expected);
- }
-
- 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 (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;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return true;
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $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++;
- $x = new TP_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno][0];
- $this->yystack[$this->yyidx] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- if (!$token) {
- // end of input: this is valid
- return true;
- }
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return false;
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return true;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
-
- return true;
- }
-
- public function yy_find_shift_action($iLookAhead)
- {
- $stateno = $this->yystack[$this->yyidx]->stateno;
-
- /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
- if (!isset(self::$yy_shift_ofst[$stateno])) {
- // no shift actions
- return self::$yy_default[$stateno];
- }
- $i = self::$yy_shift_ofst[$stateno];
- if ($i === self::YY_SHIFT_USE_DFLT) {
- 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 ($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];
- }
- }
-
- 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];
- }
- $i = self::$yy_reduce_ofst[$stateno];
- if ($i === self::YY_REDUCE_USE_DFLT) {
- 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];
- } else {
- return self::$yy_action[$i];
- }
- }
-
- public function yy_shift($yyNewState, $yyMajor, $yypMinor)
- {
- $this->yyidx++;
- if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
-// line 220 "../smarty/lexer/smarty_internal_templateparser.y"
-
- $this->internalError = true;
- $this->compiler->trigger_template_error('Stack overflow in template parser');
-
- return;
- }
- $yytos = new TP_yyStackEntry;
- $yytos->stateno = $yyNewState;
- $yytos->major = $yyMajor;
- $yytos->minor = $yypMinor;
- $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($this->yyTraceFILE,"\n");
- }
- }
-
- public static $yyRuleInfo = array(
- array( 0 => 62, 1 => 1 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 4 ),
- array( 0 => 64, 1 => 4 ),
- array( 0 => 64, 1 => 1 ),
- array( 0 => 65, 1 => 2 ),
- array( 0 => 65, 1 => 0 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 0 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 66, 1 => 3 ),
- array( 0 => 66, 1 => 2 ),
- array( 0 => 67, 1 => 1 ),
- array( 0 => 67, 1 => 2 ),
- array( 0 => 67, 1 => 2 ),
- array( 0 => 70, 1 => 2 ),
- array( 0 => 69, 1 => 2 ),
- array( 0 => 72, 1 => 1 ),
- array( 0 => 72, 1 => 1 ),
- array( 0 => 72, 1 => 1 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 4 ),
- array( 0 => 68, 1 => 5 ),
- array( 0 => 68, 1 => 6 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 8 ),
- array( 0 => 80, 1 => 2 ),
- array( 0 => 80, 1 => 1 ),
- array( 0 => 68, 1 => 5 ),
- array( 0 => 68, 1 => 7 ),
- array( 0 => 68, 1 => 6 ),
- array( 0 => 68, 1 => 8 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 4 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 4 ),
- array( 0 => 68, 1 => 5 ),
- array( 0 => 73, 1 => 2 ),
- array( 0 => 73, 1 => 1 ),
- array( 0 => 73, 1 => 0 ),
- array( 0 => 83, 1 => 4 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 4 ),
- array( 0 => 79, 1 => 1 ),
- array( 0 => 79, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 76, 1 => 1 ),
- array( 0 => 76, 1 => 1 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 2 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 84, 1 => 7 ),
- array( 0 => 84, 1 => 7 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 90, 1 => 1 ),
- array( 0 => 90, 1 => 1 ),
- array( 0 => 74, 1 => 1 ),
- array( 0 => 74, 1 => 1 ),
- array( 0 => 74, 1 => 3 ),
- array( 0 => 74, 1 => 1 ),
- array( 0 => 74, 1 => 3 ),
- array( 0 => 74, 1 => 4 ),
- array( 0 => 74, 1 => 3 ),
- array( 0 => 74, 1 => 4 ),
- array( 0 => 71, 1 => 2 ),
- array( 0 => 71, 1 => 2 ),
- array( 0 => 95, 1 => 2 ),
- array( 0 => 95, 1 => 0 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 4 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 4 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 5 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 81, 1 => 1 ),
- array( 0 => 81, 1 => 1 ),
- array( 0 => 81, 1 => 2 ),
- array( 0 => 97, 1 => 1 ),
- array( 0 => 97, 1 => 1 ),
- array( 0 => 97, 1 => 3 ),
- array( 0 => 94, 1 => 2 ),
- array( 0 => 98, 1 => 1 ),
- array( 0 => 98, 1 => 2 ),
- array( 0 => 99, 1 => 3 ),
- array( 0 => 99, 1 => 3 ),
- array( 0 => 99, 1 => 5 ),
- array( 0 => 99, 1 => 6 ),
- array( 0 => 99, 1 => 2 ),
- array( 0 => 89, 1 => 4 ),
- array( 0 => 100, 1 => 4 ),
- array( 0 => 100, 1 => 4 ),
- array( 0 => 101, 1 => 3 ),
- array( 0 => 101, 1 => 1 ),
- array( 0 => 101, 1 => 0 ),
- array( 0 => 77, 1 => 3 ),
- array( 0 => 77, 1 => 2 ),
- array( 0 => 102, 1 => 3 ),
- array( 0 => 102, 1 => 2 ),
- array( 0 => 82, 1 => 2 ),
- array( 0 => 82, 1 => 0 ),
- array( 0 => 103, 1 => 2 ),
- array( 0 => 103, 1 => 3 ),
- array( 0 => 103, 1 => 2 ),
- array( 0 => 92, 1 => 1 ),
- array( 0 => 92, 1 => 2 ),
- array( 0 => 92, 1 => 1 ),
- array( 0 => 92, 1 => 2 ),
- array( 0 => 92, 1 => 3 ),
- array( 0 => 86, 1 => 1 ),
- array( 0 => 86, 1 => 1 ),
- array( 0 => 85, 1 => 1 ),
- array( 0 => 87, 1 => 1 ),
- array( 0 => 93, 1 => 3 ),
- array( 0 => 93, 1 => 3 ),
- array( 0 => 104, 1 => 1 ),
- array( 0 => 104, 1 => 3 ),
- array( 0 => 104, 1 => 0 ),
- array( 0 => 105, 1 => 3 ),
- array( 0 => 105, 1 => 3 ),
- array( 0 => 105, 1 => 1 ),
- array( 0 => 91, 1 => 2 ),
- array( 0 => 91, 1 => 3 ),
- array( 0 => 106, 1 => 2 ),
- array( 0 => 106, 1 => 1 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 1 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 1 ),
- array( 0 => 107, 1 => 1 ),
- );
-
- public static $yyReduceMap = array(
- 0 => 0,
- 1 => 1,
- 2 => 2,
- 3 => 3,
- 4 => 4,
- 5 => 5,
- 6 => 6,
- 21 => 6,
- 22 => 6,
- 23 => 6,
- 36 => 6,
- 56 => 6,
- 57 => 6,
- 65 => 6,
- 66 => 6,
- 77 => 6,
- 82 => 6,
- 83 => 6,
- 88 => 6,
- 92 => 6,
- 93 => 6,
- 97 => 6,
- 98 => 6,
- 100 => 6,
- 105 => 6,
- 169 => 6,
- 174 => 6,
- 7 => 7,
- 8 => 8,
- 9 => 9,
- 11 => 11,
- 12 => 12,
- 13 => 13,
- 14 => 14,
- 15 => 15,
- 16 => 16,
- 17 => 17,
- 18 => 18,
- 19 => 19,
- 20 => 20,
- 24 => 24,
- 25 => 25,
- 26 => 26,
- 27 => 27,
- 28 => 28,
- 29 => 29,
- 30 => 30,
- 31 => 31,
- 33 => 31,
- 32 => 32,
- 34 => 34,
- 35 => 35,
- 37 => 37,
- 38 => 38,
- 39 => 39,
- 40 => 40,
- 41 => 41,
- 42 => 42,
- 43 => 43,
- 44 => 44,
- 45 => 45,
- 46 => 46,
- 47 => 47,
- 48 => 48,
- 49 => 49,
- 50 => 50,
- 59 => 50,
- 147 => 50,
- 151 => 50,
- 155 => 50,
- 157 => 50,
- 51 => 51,
- 148 => 51,
- 154 => 51,
- 52 => 52,
- 53 => 53,
- 54 => 53,
- 55 => 55,
- 132 => 55,
- 58 => 58,
- 60 => 60,
- 61 => 61,
- 62 => 61,
- 63 => 63,
- 64 => 64,
- 67 => 67,
- 68 => 68,
- 69 => 68,
- 70 => 70,
- 71 => 71,
- 72 => 72,
- 73 => 73,
- 74 => 74,
- 75 => 75,
- 76 => 76,
- 78 => 78,
- 80 => 78,
- 81 => 78,
- 112 => 78,
- 79 => 79,
- 84 => 84,
- 85 => 85,
- 86 => 86,
- 87 => 87,
- 89 => 89,
- 90 => 90,
- 91 => 90,
- 94 => 94,
- 95 => 95,
- 96 => 96,
- 99 => 99,
- 101 => 101,
- 102 => 102,
- 103 => 103,
- 104 => 104,
- 106 => 106,
- 107 => 107,
- 108 => 108,
- 109 => 109,
- 110 => 110,
- 111 => 111,
- 113 => 113,
- 171 => 113,
- 114 => 114,
- 115 => 115,
- 116 => 116,
- 117 => 117,
- 118 => 118,
- 119 => 119,
- 127 => 119,
- 120 => 120,
- 121 => 121,
- 122 => 122,
- 123 => 122,
- 125 => 122,
- 126 => 122,
- 124 => 124,
- 128 => 128,
- 129 => 129,
- 130 => 130,
- 175 => 130,
- 131 => 131,
- 133 => 133,
- 134 => 134,
- 135 => 135,
- 136 => 136,
- 137 => 137,
- 138 => 138,
- 139 => 139,
- 140 => 140,
- 141 => 141,
- 142 => 142,
- 143 => 143,
- 144 => 144,
- 145 => 145,
- 146 => 146,
- 149 => 149,
- 150 => 150,
- 152 => 152,
- 153 => 153,
- 156 => 156,
- 158 => 158,
- 159 => 159,
- 160 => 160,
- 161 => 161,
- 162 => 162,
- 163 => 163,
- 164 => 164,
- 165 => 165,
- 166 => 166,
- 167 => 167,
- 168 => 167,
- 170 => 170,
- 172 => 172,
- 173 => 173,
- 176 => 176,
- 177 => 177,
- 178 => 178,
- 179 => 179,
- 182 => 179,
- 180 => 180,
- 183 => 180,
- 181 => 181,
- 184 => 184,
- 185 => 185,
- );
-// line 233 "../smarty/lexer/smarty_internal_templateparser.y"
- public 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 240 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r1(){
- $text = $this->yystack[ $this->yyidx + 0 ]->minor;
-
- if ((string)$text == '') {
- $this->current_buffer->append_subtree($this, null);
- }
-
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip));
- }
-// line 250 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r2(){
- $this->strip = true;
- }
-// line 254 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r3(){
- $this->strip = false;
- }
-// line 259 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r4(){
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($this->yystack[$this->yyidx + -1]->minor));
- }
-// line 264 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r5(){
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.$this->yystack[$this->yyidx + -1]->minor;
- }
-// line 267 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r6(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 271 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r7(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-
- }
-// line 276 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r8(){
- $this->_retvalue = '';
- }
-// line 280 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r9(){
- if ($this->compiler->has_code) {
- $this->current_buffer->append_subtree($this, $this->mergePrefixCode($this->yystack[$this->yyidx + 0]->minor));
- }
- $this->compiler->has_variable_string = false;
- $this->block_nesting_level = count($this->compiler->_tag_stack);
- }
-// line 292 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r11(){
- $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
- 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 302 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r12(){
- $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()));
- 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 323 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r13(){
- $j = strrpos($this->yystack[$this->yyidx + 0]->minor,'.');
- if ($this->yystack[$this->yyidx + 0]->minor[$j+1] == 'c') {
- // {$smarty.block.child}
- $this->_retvalue = $this->compiler->compileTag('child',array(),array($this->yystack[$this->yyidx + 0]->minor));
- } else {
- // {$smarty.block.parent}
- $this->_retvalue = $this->compiler->compileTag('parent',array(),array($this->yystack[$this->yyidx + 0]->minor));
- }
- }
-// line 334 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r14(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 338 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r15(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 342 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r16(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor[1],array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]));
- }
-// line 351 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r17(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'')),$this->yystack[$this->yyidx + 0]->minor[1]));
- }
-// line 355 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r18(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>$this->yystack[$this->yyidx + -1]->minor['var'])),$this->yystack[$this->yyidx + 0]->minor[1]),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']));
- }
-// line 359 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r19(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 363 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r20(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 378 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r24(){
- 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 388 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r25(){
- 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->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + 0]->minor));
- } else {
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor,array());
- }
- }
-// line 401 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r26(){
- 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 = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + 0]->minor, array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor));
- }
- }
-// line 413 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r27(){
- $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 418 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r28(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + 0]->minor,array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor, 'object_method'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-// line 423 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r29(){
- $this->_retvalue = $this->compiler->compileTag('make_nocache',array(array('var'=>'\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'')));
- }
-// line 428 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r30(){
- $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
- $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 433 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r31(){
- $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->compiler->getLdelLength()));
- $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 438 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r32(){
- $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
- $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 449 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r34(){
- $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 453 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r35(){
- $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 461 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r37(){
- $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 465 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r38(){
- $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 470 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r39(){
- $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 474 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r40(){
- $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 477 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r41(){
- $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 482 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r42(){
- $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 486 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r43(){
- $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 492 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r44(){
- $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' /');
- if ($tag === 'strip') {
- $this->strip = false;
- $this->_retvalue = null;
- } else {
- $this->_retvalue = $this->compiler->compileTag($tag.'close',array());
- }
- }
-// line 501 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r45(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor.'close',array());
- }
-// line 505 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r46(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 510 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r47(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 514 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r48(){
- $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 522 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r49(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 528 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r50(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-// line 533 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r51(){
- $this->_retvalue = array();
- }
-// line 538 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r52(){
- 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 = array($this->yystack[$this->yyidx + -2]->minor=>'\''.$this->yystack[$this->yyidx + 0]->minor.'\'');
- }
- }
-// line 549 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r53(){
- $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 557 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r55(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
- }
-// line 569 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r58(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 582 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r60(){
- $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
- }
-// line 587 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r61(){
- $this->_retvalue = array('var' => '\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'', 'value'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 594 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r63(){
- $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 598 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r64(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 618 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r67(){
- $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'://' . $this->yystack[$this->yyidx + 0]->minor . '\')';
- }
-// line 623 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r68(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 633 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r70(){
- $this->_retvalue = $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 .')';
- }
-// line 637 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r71(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 641 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r72(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor . $this->yystack[$this->yyidx + -1]->minor . ')';
- }
-// line 645 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r73(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-// line 649 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r74(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-// line 657 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r75(){
- $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 661 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r76(){
- $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 671 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r78(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 676 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r79(){
- $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 697 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r84(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 701 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r85(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
- }
-// line 705 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r86(){
- $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 710 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r87(){
- 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 727 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r89(){
- $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')';
- }
-// line 731 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r90(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 749 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r94(){
- if ($this->security && $this->security->static_classes !== array()) {
- $this->compiler->trigger_template_error('dynamic static class not allowed by security setting');
- }
- $prefixVar = $this->compiler->getNewPrefixVariable();
- if ($this->yystack[$this->yyidx + -2]->minor['var'] === '\'smarty\'') {
- $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).';?>');
- } else {
- $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].';?>');
- }
- $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
- }
-// line 760 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r95(){
- $prefixVar = $this->compiler->getNewPrefixVariable();
- $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[$this->yyidx + 0]->minor);
- $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "<?php {$prefixVar} = ob_get_clean();?>"));
- $this->_retvalue = $prefixVar;
- }
-// line 767 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r96(){
- $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 780 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r99(){
- 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 {
- trigger_error('Using unregistered static method "' . $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor[0] . '" in a template is deprecated and will be ' .
- 'removed in a future release. Use Smarty::registerClass to explicitly register ' .
- 'a class for access.', E_USER_DEPRECATED);
- $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 799 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r101(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 810 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r102(){
- $this->_retvalue = $this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'');
- }
-// line 813 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r103(){
- 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 826 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r104(){
- $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 836 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r106(){
- $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\'');
- }
-// line 840 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r107(){
- $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)';
- }
-// line 844 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r108(){
- $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor);
- }
-// line 848 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r109(){
- $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)';
- }
-// line 852 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r110(){
- $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 855 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r111(){
- $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 868 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r113(){
- return;
- }
-// line 874 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r114(){
- $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'').']';
- }
-// line 877 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r115(){
- $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor).']';
- }
-// line 881 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r116(){
- $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']';
- }
-// line 885 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r117(){
- $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']';
- }
-// line 889 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r118(){
- $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']';
- }
-// line 894 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r119(){
- $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']';
- }
-// line 899 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r120(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
- }
-// line 903 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r121(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
- }
-// line 906 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r122(){
- $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']';
- }
-// line 912 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r124(){
- $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'').']';
- }
-// line 928 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r128(){
- $this->_retvalue = '[]';
- }
-// line 938 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r129(){
- $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'';
- }
-// line 942 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r130(){
- $this->_retvalue = '\'\'';
- }
-// line 947 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r131(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 955 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r133(){
- $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
- $this->_retvalue = $this->compiler->compileVariable('\''.$var.'\'');
- }
-// line 961 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r134(){
- $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-// line 968 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r135(){
- 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 977 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r136(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 982 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r137(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 987 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r138(){
- 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 994 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r139(){
- 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 1001 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r140(){
- 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 1008 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r141(){
- 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 1016 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r142(){
- $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1024 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r143(){
- $this->_retvalue = $this->compiler->compilePHPFunctionCall($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor);
- }
-// line 1032 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r144(){
- 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 1039 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r145(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::ERR2);
- }
- $prefixVar = $this->compiler->getNewPrefixVariable();
- $this->compiler->appendPrefixCode("<?php {$prefixVar} = ".$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -3]->minor,1).'\'').';?>');
- $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
- }
-// line 1050 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r146(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
- }
-// line 1067 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r149(){
- $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 1071 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r150(){
- $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 1079 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r152(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1087 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r153(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1100 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r156(){
- $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1109 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r158(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method');
- }
-// line 1114 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r159(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method');
- }
-// line 1119 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r160(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '');
- }
-// line 1124 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r161(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property');
- }
-// line 1129 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r162(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property');
- }
-// line 1135 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r163(){
- $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' ';
- }
-// line 1139 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r164(){
- static $lops = array(
- 'eq' => ' == ',
- 'ne' => ' != ',
- 'neq' => ' != ',
- 'gt' => ' > ',
- 'ge' => ' >= ',
- 'gte' => ' >= ',
- 'lt' => ' < ',
- 'le' => ' <= ',
- 'lte' => ' <= ',
- 'mod' => ' % ',
- 'and' => ' && ',
- 'or' => ' || ',
- 'xor' => ' xor ',
- );
- $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
- $this->_retvalue = $lops[$op];
- }
-// line 1158 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r165(){
- static $tlops = array(
- '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 = $tlops[$op];
- }
-// line 1171 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r166(){
- 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 1185 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r167(){
- $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-// line 1196 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r170(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1204 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r172(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1208 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r173(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1224 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r176(){
- $this->compiler->leaveDoubleQuote();
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this);
- }
-// line 1230 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r177(){
- $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor);
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 1235 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r178(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1239 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r179(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)'.$this->yystack[$this->yyidx + -1]->minor);
- }
-// line 1243 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r180(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
- }
-// line 1247 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r181(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');
- }
-// line 1259 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r184(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1263 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r185(){
- $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[$this->yyidx + 0]->minor);
- }
-
- private $_retvalue;
-
- public function yy_reduce($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 (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][0];
- $yysize = self::$yyRuleInfo[$yyruleno][1];
- $this->yyidx -= $yysize;
- 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 (!$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;
- } else {
- $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
- }
- } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yy_accept();
- }
- }
-
- public function yy_parse_failed()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
- } while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- }
-
- public function yy_syntax_error($yymajor, $TOKEN)
- {
-// line 213 "../smarty/lexer/smarty_internal_templateparser.y"
-
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_template_error();
- }
-
- public function yy_accept()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
- } while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
-// line 206 "../smarty/lexer/smarty_internal_templateparser.y"
-
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- }
-
- 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;
- $x = new TP_yyStackEntry;
- $x->stateno = 0;
- $x->major = 0;
- $this->yystack = array();
- $this->yystack[] = $x;
- }
- $yyendofinput = ($yymajor==0);
-
- 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)) {
- // force a syntax error
- $yyact = self::YY_ERROR_ACTION;
- }
- if ($yyact < self::YYNSTATE) {
- $this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
- if ($yyendofinput && $this->yyidx >= 0) {
- $yymajor = 0;
- } else {
- $yymajor = self::YYNOCODE;
- }
- } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
- $this->yy_reduce($yyact - self::YYNSTATE);
- } elseif ($yyact === self::YY_ERROR_ACTION) {
- 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 ($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
- ){
- $this->yy_pop_parser_stack();
- }
- if ($this->yyidx < 0 || $yymajor==0) {
- $this->yy_destructor($yymajor, $yytokenvalue);
- $this->yy_parse_failed();
- $yymajor = self::YYNOCODE;
- } elseif ($yymx !== self::YYERRORSYMBOL) {
- $u2 = 0;
- $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
- }
- }
- $this->yyerrcnt = 3;
- $yyerrorhit = 1;
- } else {
- if ($this->yyerrcnt <= 0) {
- $this->yy_syntax_error($yymajor, $yytokenvalue);
- }
- $this->yyerrcnt = 3;
- $this->yy_destructor($yymajor, $yytokenvalue);
- if ($yyendofinput) {
- $this->yy_parse_failed();
- }
- $yymajor = self::YYNOCODE;
- }
- } else {
- $this->yy_accept();
- $yymajor = self::YYNOCODE;
- }
- } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
- }
-}
-
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php
deleted file mode 100644
index c8ffd4cc6..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php
+++ /dev/null
@@ -1,605 +0,0 @@
-<?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 \Smarty $smarty
- * @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(__DIR__ . '/../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_block.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_block_child.php' => true,
- 'smarty_internal_compile_block_parent.php' => true,
- 'smarty_internal_compile_child.php' => true,
- 'smarty_internal_compile_parent.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_insert.php' => true,
- 'smarty_internal_compile_ldelim.php' => true,
- 'smarty_internal_compile_make_nocache.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_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_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_getconfigvariable.php' => true,
- 'smarty_internal_method_getconfigvars.php' => true,
- 'smarty_internal_method_getdebugtemplate.php' => true,
- 'smarty_internal_method_getdefaultmodifiers.php' => true,
- 'smarty_internal_method_getglobal.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_literals.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_stream.php' => true,
- 'smarty_internal_resource_string.php' => true,
- 'smarty_internal_runtime_cachemodify.php' => true,
- 'smarty_internal_runtime_cacheresourcefile.php' => true,
- 'smarty_internal_runtime_capture.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_inheritance.php' => true,
- 'smarty_internal_runtime_make_nocache.php' => true,
- 'smarty_internal_runtime_tplfunction.php' => true,
- 'smarty_internal_runtime_updatecache.php' => true,
- 'smarty_internal_runtime_updatescope.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.mb_wordwrap.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,
- '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/vendor/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php
deleted file mode 100644
index 7df0acc2d..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/**
- * Smarty Internal Undefined
- *
- * Class to handle undefined method calls or calls to obsolete runtime extensions
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Undefined
-{
- /**
- * Name of undefined extension class
- *
- * @var string|null
- */
- public $class = null;
-
- /**
- * Smarty_Internal_Undefined constructor.
- *
- * @param null|string $class name of undefined extension class
- */
- public function __construct($class = null)
- {
- $this->class = $class;
- }
-
- /**
- * Wrapper for obsolete class Smarty_Internal_Runtime_ValidateCompiled
- *
- * @param \Smarty_Internal_Template $tpl
- * @param array $properties special template properties
- * @param bool $cache flag if called from cache file
- *
- * @return bool false
- */
- public function decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false)
- {
- if ($cache) {
- $tpl->cached->valid = false;
- } else {
- $tpl->mustCompile = true;
- }
- return false;
- }
-
- /**
- * Call error handler for undefined method
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- * @throws SmartyException
- */
- public function __call($name, $args)
- {
- if (isset($this->class)) {
- throw new SmartyException("undefined extension class '{$this->class}'");
- } else {
- throw new SmartyException(get_class($args[ 0 ]) . "->{$name}() undefined method");
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php
deleted file mode 100644
index 3c43a9f46..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php
+++ /dev/null
@@ -1,260 +0,0 @@
-<?php
-/**
- * Smarty Resource Plugin
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Rodney Rehm
- */
-
-/**
- * Smarty Resource Plugin
- * Base implementation for resource plugins
- *
- * @package Smarty
- * @subpackage TemplateResources
- *
- * @method renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
- * @method populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
- * @method process(Smarty_Internal_Template $_smarty_tpl)
- */
-abstract class Smarty_Resource
-{
- /**
- * resource types provided by the core
- *
- * @var 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'
- );
-
- /**
- * Source is bypassing compiler
- *
- * @var boolean
- */
- public $uncompiled = false;
-
- /**
- * Source must be recompiled on every occasion
- *
- * @var boolean
- */
- public $recompiled = false;
-
- /**
- * Flag if resource does implement populateCompiledFilepath() method
- *
- * @var bool
- */
- public $hasCompiledHandler = false;
-
- /**
- * Load Resource Handler
- *
- * @param Smarty $smarty smarty object
- * @param string $type name of the resource
- *
- * @throws SmartyException
- * @return Smarty_Resource Resource Handler
- */
- public static function load(Smarty $smarty, $type)
- {
- // try smarty's cache
- if (isset($smarty->_cache[ 'resource_handlers' ][ $type ])) {
- return $smarty->_cache[ 'resource_handlers' ][ $type ];
- }
- // try registered resource
- if (isset($smarty->registered_resources[ $type ])) {
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = $smarty->registered_resources[ $type ];
- }
- // try sysplugins dir
- if (isset(self::$sysplugins[ $type ])) {
- $_resource_class = 'Smarty_Internal_Resource_' . smarty_ucfirst_ascii($type);
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
- }
- // try plugins dir
- $_resource_class = 'Smarty_Resource_' . smarty_ucfirst_ascii($type);
- if ($smarty->loadPlugin($_resource_class)) {
- if (class_exists($_resource_class, false)) {
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
- } else {
- $smarty->registerResource(
- $type,
- array(
- "smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp",
- "smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted"
- )
- );
- // give it another try, now that the resource is registered properly
- return self::load($smarty, $type);
- }
- }
- // try streams
- $_known_stream = stream_get_wrappers();
- if (in_array($type, $_known_stream)) {
- // is known stream
- if (is_object($smarty->security_policy)) {
- $smarty->security_policy->isTrustedStream($type);
- }
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = new Smarty_Internal_Resource_Stream();
- }
- // TODO: try default_(template|config)_handler
- // give up
- throw new SmartyException("Unknown resource type '{$type}'");
- }
-
- /**
- * extract resource_type and resource_name from template_resource and config_resource
- *
- * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including).
- *
- * @param string $resource_name template_resource or config_resource to parse
- * @param string $default_resource the default resource_type defined in $smarty
- *
- * @return array with parsed resource name and type
- */
- public static function parseResourceName($resource_name, $default_resource)
- {
- if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) {
- $type = $match[ 1 ];
- $name = substr($resource_name, strlen($match[ 0 ]));
- } else {
- // no resource given, use default
- // or single character before the colon is not a resource type, but part of the filepath
- $type = $default_resource;
- $name = $resource_name;
- }
- return array($name, $type);
- }
-
- /**
- * modify template_resource according to resource handlers specifications
- *
- * @param \Smarty_Internal_Template|\Smarty $obj Smarty instance
- * @param string $template_resource template_resource to extract resource handler and
- * name of
- *
- * @return string unique resource name
- * @throws \SmartyException
- */
- public static function getUniqueTemplateName($obj, $template_resource)
- {
- $smarty = $obj->_getSmartyObj();
- list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type);
- // TODO: optimize for Smarty's internal resource types
- $resource = Smarty_Resource::load($smarty, $type);
- // go relative to a given template?
- $_file_is_dotted = $name[ 0 ] === '.' && ($name[ 1 ] === '.' || $name[ 1 ] === '/');
- if ($obj->_isTplObj() && $_file_is_dotted
- && ($obj->source->type === 'file' || $obj->parent->source->type === 'extends')
- ) {
- $name = $smarty->_realpath(dirname($obj->parent->source->filepath) . DIRECTORY_SEPARATOR . $name);
- }
- return $resource->buildUniqueResourceName($smarty, $name);
- }
-
- /**
- * initialize Source Object for given resource
- * wrapper for backward compatibility to versions < 3.1.22
- * Either [$_template] or [$smarty, $template_resource] must be specified
- *
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty $smarty smarty object
- * @param string $template_resource resource identifier
- *
- * @return \Smarty_Template_Source Source Object
- * @throws \SmartyException
- */
- public static function source(
- Smarty_Internal_Template $_template = null,
- Smarty $smarty = null,
- $template_resource = null
- ) {
- return Smarty_Template_Source::load($_template, $smarty, $template_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
- */
- abstract public function getContent(Smarty_Template_Source $source);
-
- /**
- * populate Source Object with meta data from Resource
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- */
- abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null);
-
- /**
- * populate Source Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Source $source source object
- */
- public function populateTimestamp(Smarty_Template_Source $source)
- {
- // intentionally left blank
- }
-
- /**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @param boolean $isConfig flag for config resource
- *
- * @return string unique resource name
- */
- public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
- {
- if ($isConfig) {
- if (!isset($smarty->_joined_config_dir)) {
- $smarty->getTemplateDir(null, true);
- }
- return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name;
- } else {
- if (!isset($smarty->_joined_template_dir)) {
- $smarty->getTemplateDir();
- }
- return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name;
- }
- }
-
- /*
- * Check if resource must check time stamps when when loading complied or cached templates.
- * Resources like 'extends' which use source components my disable timestamp checks on own resource.
- *
- * @return bool
- */
- /**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string resource's basename
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return basename(preg_replace('![^\w]+!', '_', $source->name));
- }
-
- /**
- * @return bool
- */
- public function checkTimestamps()
- {
- return true;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php
deleted file mode 100644
index 191fa7c90..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-/**
- * Smarty Resource Plugin
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Rodney Rehm
- */
-
-/**
- * Smarty Resource Plugin
- * Wrapper Implementation for custom resource plugins
- *
- * @package Smarty
- * @subpackage TemplateResources
- */
-abstract class Smarty_Resource_Custom extends Smarty_Resource
-{
- /**
- * fetch template and its modification time from data source
- *
- * @param string $name template name
- * @param string &$source template source
- * @param integer &$mtime template modification timestamp (epoch)
- */
- 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
- *
- * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
- */
- protected function fetchTimestamp($name)
- {
- return null;
- }
-
- /**
- * 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)
- {
- $source->filepath = $source->type . ':' . $this->generateSafeName($source->name);
- $source->uid = sha1($source->type . ':' . $source->name);
- $mtime = $this->fetchTimestamp($source->name);
- if ($mtime !== null) {
- $source->timestamp = $mtime;
- } else {
- $this->fetch($source->name, $content, $timestamp);
- $source->timestamp = isset($timestamp) ? $timestamp : false;
- if (isset($content)) {
- $source->content = $content;
- }
- }
- $source->exists = !!$source->timestamp;
- }
-
- /**
- * Load template's source into current template object
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
- public function getContent(Smarty_Template_Source $source)
- {
- $this->fetch($source->name, $content, $timestamp);
- if (isset($content)) {
- return $content;
- }
- throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
- }
-
- /**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string resource's basename
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return basename($this->generateSafeName($source->name));
- }
-
- /**
- * Removes special characters from $name and limits its length to 127 characters.
- *
- * @param $name
- *
- * @return string
- */
- private function generateSafeName($name): string {
- return substr(preg_replace('/[^A-Za-z0-9._]/', '', (string) $name), 0, 127);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php
deleted file mode 100644
index 760c4dd33..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * Smarty Resource Plugin
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Rodney Rehm
- */
-
-/**
- * Smarty Resource Plugin
- * Base implementation for resource plugins that don't compile cache
- *
- * @package Smarty
- * @subpackage TemplateResources
- */
-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;
-
- /**
- * compile template from source
- *
- * @param Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- *
- * @throws Exception
- */
- public function process(Smarty_Internal_Template $_smarty_tpl)
- {
- $compiled = &$_smarty_tpl->compiled;
- $compiled->file_dependency = array();
- $compiled->includes = array();
- $compiled->nocache_hash = null;
- $compiled->unifunc = null;
- $level = ob_get_level();
- ob_start();
- $_smarty_tpl->loadCompiler();
- // call compiler
- try {
- eval('?>' . $_smarty_tpl->compiler->compileTemplate($_smarty_tpl));
- } catch (Exception $e) {
- unset($_smarty_tpl->compiler);
- while (ob_get_level() > $level) {
- ob_end_clean();
- }
- throw $e;
- }
- // release compiler object to free memory
- unset($_smarty_tpl->compiler);
- ob_get_clean();
- $compiled->timestamp = time();
- $compiled->exists = true;
- }
-
- /**
- * populate Compiled Object with compiled filepath
- *
- * @param Smarty_Template_Compiled $compiled compiled object
- * @param Smarty_Internal_Template $_template template object
- *
- * @return void
- */
- public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
- {
- $compiled->filepath = false;
- $compiled->timestamp = false;
- $compiled->exists = false;
- }
-
- /*
- * Disable timestamp checks for recompiled resource.
- *
- * @return bool
- */
- /**
- * @return bool
- */
- public function checkTimestamps()
- {
- return false;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php
deleted file mode 100644
index a11e2c14c..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Smarty Resource Plugin
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Rodney Rehm
- */
-
-/**
- * Smarty Resource Plugin
- * Base implementation for resource plugins that don't use the compiler
- *
- * @package Smarty
- * @subpackage TemplateResources
- */
-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;
-
- /**
- * populate compiled object with compiled filepath
- *
- * @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)
- {
- $compiled->filepath = $_template->source->filepath;
- $compiled->timestamp = $_template->source->timestamp;
- $compiled->exists = $_template->source->exists;
- if ($_template->smarty->merge_compiled_includes || $_template->source->handler->checkTimestamps()) {
- $compiled->file_dependency[ $_template->source->uid ] =
- array($compiled->filepath, $compiled->timestamp, $_template->source->type,);
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_security.php b/vendor/smarty/smarty/libs/sysplugins/smarty_security.php
deleted file mode 100644
index 49ae2a386..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_security.php
+++ /dev/null
@@ -1,680 +0,0 @@
-<?php
-/**
- * Smarty plugin
- *
- * @package Smarty
- * @subpackage Security
- * @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?
- */
-
-/**
- * This class does contain the security settings
- */
-#[\AllowDynamicProperties]
-class Smarty_Security
-{
-
- /**
- * This is the list of template directories that are considered secure.
- * $template_dir is in this list implicitly.
- *
- * @var array
- */
- public $secure_dir = array();
-
- /**
- * This is an array of directories where trusted php scripts reside.
- * {@link $security} is disabled during their inclusion/execution.
- *
- * @var array
- */
- public $trusted_dir = array();
-
- /**
- * List of regular expressions (PCRE) that include trusted URIs
- *
- * @var array
- */
- public $trusted_uri = array();
-
- /**
- * List of trusted constants names
- *
- * @var array
- */
- public $trusted_constants = array();
-
- /**
- * This is an array of trusted static classes.
- * If empty access to all static classes is allowed.
- * If set to 'none' none is allowed.
- *
- * @var array
- */
- public $static_classes = array();
-
- /**
- * This is an nested array of trusted classes and static methods.
- * If empty access to all static classes and methods is allowed.
- * Format:
- * array (
- * 'class_1' => array('method_1', 'method_2'), // allowed methods listed
- * 'class_2' => array(), // all methods of class allowed
- * )
- * If set to null none is allowed.
- *
- * @var array
- */
- public $trusted_static_methods = array();
-
- /**
- * This is an array of trusted static properties.
- * If empty access to all static classes and properties is allowed.
- * Format:
- * array (
- * 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed
- * 'class_2' => array(), // all properties of class allowed
- * )
- * If set to null none is allowed.
- *
- * @var array
- */
- public $trusted_static_properties = array();
-
- /**
- * This is an array of trusted PHP functions.
- * If empty all functions are allowed.
- * To disable all PHP functions set $php_functions = null.
- *
- * @var array
- */
- public $php_functions = array('isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array', 'time',);
-
- /**
- * This is an array of trusted PHP modifiers.
- * If empty all modifiers are allowed.
- * To disable all modifier set $php_modifiers = null.
- *
- * @var array
- */
- public $php_modifiers = array('escape', 'count', 'sizeof', 'nl2br',);
-
- /**
- * This is an array of allowed tags.
- * If empty no restriction by allowed_tags.
- *
- * @var array
- */
- public $allowed_tags = array();
-
- /**
- * This is an array of disabled tags.
- * If empty no restriction by disabled_tags.
- *
- * @var array
- */
- public $disabled_tags = array();
-
- /**
- * This is an array of allowed modifier plugins.
- * If empty no restriction by allowed_modifiers.
- *
- * @var array
- */
- public $allowed_modifiers = array();
-
- /**
- * This is an array of disabled modifier plugins.
- * If empty no restriction by disabled_modifiers.
- *
- * @var array
- */
- public $disabled_modifiers = array();
-
- /**
- * This is an array of disabled special $smarty variables.
- *
- * @var array
- */
- public $disabled_special_smarty_vars = array();
-
- /**
- * This is an array of trusted streams.
- * If empty all streams are allowed.
- * To disable all streams set $streams = null.
- *
- * @var array
- */
- public $streams = array('file');
-
- /**
- * + flag if constants can be accessed from template
- *
- * @var boolean
- */
- public $allow_constants = true;
-
- /**
- * + flag if super globals can be accessed from template
- *
- * @var boolean
- */
- public $allow_super_globals = true;
-
- /**
- * max template nesting level
- *
- * @var int
- */
- public $max_template_nesting = 0;
-
- /**
- * current template nesting level
- *
- * @var int
- */
- private $_current_template_nesting = 0;
-
- /**
- * Cache for $resource_dir lookup
- *
- * @var array
- */
- protected $_resource_dir = array();
-
- /**
- * Cache for $template_dir lookup
- *
- * @var array
- */
- protected $_template_dir = array();
-
- /**
- * Cache for $config_dir lookup
- *
- * @var array
- */
- protected $_config_dir = array();
-
- /**
- * Cache for $secure_dir lookup
- *
- * @var array
- */
- protected $_secure_dir = array();
-
- /**
- * Cache for $php_resource_dir lookup
- *
- * @var array
- */
- protected $_php_resource_dir = null;
-
- /**
- * Cache for $trusted_dir lookup
- *
- * @var array
- */
- protected $_trusted_dir = null;
-
- /**
- * Cache for include path status
- *
- * @var bool
- */
- protected $_include_path_status = false;
-
- /**
- * Cache for $_include_array lookup
- *
- * @var array
- */
- protected $_include_dir = array();
-
- /**
- * @param Smarty $smarty
- */
- public function __construct($smarty)
- {
- $this->smarty = $smarty;
- }
-
- /**
- * Check if PHP function is trusted.
- *
- * @param string $function_name
- * @param object $compiler compiler object
- * @deprecated
- * @return boolean true if function is trusted
- */
- public function isTrustedPhpFunction($function_name, $compiler)
- {
- if (isset($this->php_functions)
- && (empty($this->php_functions) || in_array($function_name, $this->php_functions))
- ) {
- return true;
- }
- $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting");
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if static class is trusted.
- *
- * @param string $class_name
- * @param object $compiler compiler object
- *
- * @return boolean true if class is trusted
- */
- public function isTrustedStaticClass($class_name, $compiler)
- {
- if (isset($this->static_classes)
- && (empty($this->static_classes) || in_array($class_name, $this->static_classes))
- ) {
- return true;
- }
- $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting");
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if static class method/property is trusted.
- *
- * @param string $class_name
- * @param string $params
- * @param object $compiler compiler object
- *
- * @return boolean true if class method is trusted
- */
- 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
- * @deprecated
- * @return boolean true if modifier is trusted
- */
- public function isTrustedPhpModifier($modifier_name, $compiler)
- {
- if (isset($this->php_modifiers)
- && (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers))
- ) {
- return true;
- }
- $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting");
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if tag is trusted.
- *
- * @param string $tag_name
- * @param object $compiler compiler object
- *
- * @return boolean true if tag is trusted
- */
- public function isTrustedTag($tag_name, $compiler)
- {
- // check for internal always required tags
- if (in_array(
- $tag_name,
- array(
- 'assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin',
- 'private_object_block_function', 'private_object_function', 'private_registered_function',
- 'private_registered_block', 'private_special_variable', 'private_print_expression',
- 'private_modifier'
- )
- )
- ) {
- return true;
- }
- // check security settings
- if (empty($this->allowed_tags)) {
- if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) {
- return true;
- } else {
- $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", null, true);
- }
- } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
- return true;
- } else {
- $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", null, true);
- }
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if special $smarty variable is trusted.
- *
- * @param string $var_name
- * @param object $compiler compiler object
- *
- * @return boolean true if tag is trusted
- */
- public function isTrustedSpecialSmartyVar($var_name, $compiler)
- {
- if (!in_array($var_name, $this->disabled_special_smarty_vars)) {
- return true;
- } else {
- $compiler->trigger_template_error(
- "special variable '\$smarty.{$var_name}' not allowed by security setting",
- null,
- true
- );
- }
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if modifier plugin is trusted.
- *
- * @param string $modifier_name
- * @param object $compiler compiler object
- *
- * @return boolean true if tag is trusted
- */
- public function isTrustedModifier($modifier_name, $compiler)
- {
- // check for internal always allowed modifier
- if (in_array($modifier_name, array('default'))) {
- return true;
- }
- // check security settings
- if (empty($this->allowed_modifiers)) {
- if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) {
- return true;
- } else {
- $compiler->trigger_template_error(
- "modifier '{$modifier_name}' disabled by security setting",
- null,
- true
- );
- }
- } elseif (in_array($modifier_name, $this->allowed_modifiers)
- && !in_array($modifier_name, $this->disabled_modifiers)
- ) {
- return true;
- } else {
- $compiler->trigger_template_error(
- "modifier '{$modifier_name}' not allowed by security setting",
- null,
- true
- );
- }
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if constants are enabled or trusted
- *
- * @param string $const constant name
- * @param object $compiler compiler object
- *
- * @return bool
- */
- public function isTrustedConstant($const, $compiler)
- {
- if (in_array($const, array('true', 'false', 'null'))) {
- return true;
- }
- if (!empty($this->trusted_constants)) {
- if (!in_array(strtolower($const), $this->trusted_constants)) {
- $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted");
- return false;
- }
- return true;
- }
- if ($this->allow_constants) {
- return true;
- }
- $compiler->trigger_template_error("Security: access to constants not permitted");
- return false;
- }
-
- /**
- * Check if stream is trusted.
- *
- * @param string $stream_name
- *
- * @return boolean true if stream is trusted
- * @throws SmartyException if stream is not trusted
- */
- public function isTrustedStream($stream_name)
- {
- if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) {
- return true;
- }
- throw new SmartyException("stream '{$stream_name}' not allowed by security setting");
- }
-
- /**
- * Check if directory of file resource is trusted.
- *
- * @param string $filepath
- * @param null|bool $isConfig
- *
- * @return bool true if directory is trusted
- * @throws \SmartyException if directory is not trusted
- */
- public function isTrustedResourceDir($filepath, $isConfig = null)
- {
- if ($this->_include_path_status !== $this->smarty->use_include_path) {
- $_dir =
- $this->smarty->use_include_path ? $this->smarty->ext->_getIncludePath->getIncludePathDirs($this->smarty) : array();
- if ($this->_include_dir !== $_dir) {
- $this->_updateResourceDir($this->_include_dir, $_dir);
- $this->_include_dir = $_dir;
- }
- $this->_include_path_status = $this->smarty->use_include_path;
- }
- $_dir = $this->smarty->getTemplateDir();
- if ($this->_template_dir !== $_dir) {
- $this->_updateResourceDir($this->_template_dir, $_dir);
- $this->_template_dir = $_dir;
- }
- $_dir = $this->smarty->getConfigDir();
- if ($this->_config_dir !== $_dir) {
- $this->_updateResourceDir($this->_config_dir, $_dir);
- $this->_config_dir = $_dir;
- }
- if ($this->_secure_dir !== $this->secure_dir) {
- $this->secure_dir = (array)$this->secure_dir;
- foreach ($this->secure_dir as $k => $d) {
- $this->secure_dir[ $k ] = $this->smarty->_realpath($d . DIRECTORY_SEPARATOR, true);
- }
- $this->_updateResourceDir($this->_secure_dir, $this->secure_dir);
- $this->_secure_dir = $this->secure_dir;
- }
- $addPath = $this->_checkDir($filepath, $this->_resource_dir);
- if ($addPath !== false) {
- $this->_resource_dir = array_merge($this->_resource_dir, $addPath);
- }
- return true;
- }
-
- /**
- * Check if URI (e.g. {fetch} or {html_image}) is trusted
- * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}".
- * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string"
- * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}.
- *
- * @param string $uri
- *
- * @return boolean true if URI is trusted
- * @throws SmartyException if URI is not trusted
- * @uses $trusted_uri for list of patterns to match against $uri
- */
- public function isTrustedUri($uri)
- {
- $_uri = parse_url($uri);
- if (!empty($_uri[ 'scheme' ]) && !empty($_uri[ 'host' ])) {
- $_uri = $_uri[ 'scheme' ] . '://' . $_uri[ 'host' ];
- foreach ($this->trusted_uri as $pattern) {
- if (preg_match($pattern, $_uri)) {
- return true;
- }
- }
- }
- throw new SmartyException("URI '{$uri}' not allowed by security setting");
- }
-
- /**
- * Remove old directories and its sub folders, add new directories
- *
- * @param array $oldDir
- * @param array $newDir
- */
- private function _updateResourceDir($oldDir, $newDir)
- {
- foreach ($oldDir as $directory) {
- // $directory = $this->smarty->_realpath($directory, true);
- $length = strlen($directory);
- foreach ($this->_resource_dir as $dir) {
- if (substr($dir, 0, $length) === $directory) {
- unset($this->_resource_dir[ $dir ]);
- }
- }
- }
- foreach ($newDir as $directory) {
- // $directory = $this->smarty->_realpath($directory, true);
- $this->_resource_dir[ $directory ] = true;
- }
- }
-
- /**
- * Check if file is inside a valid directory
- *
- * @param string $filepath
- * @param array $dirs valid directories
- *
- * @return array|bool
- * @throws \SmartyException
- */
- private function _checkDir($filepath, $dirs)
- {
- $directory = dirname($this->smarty->_realpath($filepath, true)) . DIRECTORY_SEPARATOR;
- $_directory = array();
- if (!preg_match('#[\\\\/][.][.][\\\\/]#', $directory)) {
- while (true) {
- // test if the directory is trusted
- if (isset($dirs[ $directory ])) {
- return $_directory;
- }
- // abort if we've reached root
- if (!preg_match('#[\\\\/][^\\\\/]+[\\\\/]$#', $directory)) {
- // give up
- break;
- }
- // remember the directory to add it to _resource_dir in case we're successful
- $_directory[ $directory ] = true;
- // bubble up one level
- $directory = preg_replace('#[\\\\/][^\\\\/]+[\\\\/]$#', DIRECTORY_SEPARATOR, $directory);
- }
- }
- // give up
- throw new SmartyException(sprintf('Smarty Security: not trusted file path \'%s\' ', $filepath));
- }
-
- /**
- * 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 $smarty;
- } 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 $smarty;
- }
-
- /**
- * Start template processing
- *
- * @param $template
- *
- * @throws SmartyException
- */
- public function startTemplate($template)
- {
- if ($this->max_template_nesting > 0 && $this->_current_template_nesting++ >= $this->max_template_nesting) {
- throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'");
- }
- }
-
- /**
- * Exit template processing
- */
- public function endTemplate()
- {
- if ($this->max_template_nesting > 0) {
- $this->_current_template_nesting--;
- }
- }
-
- /**
- * Register callback functions call at start/end of template rendering
- *
- * @param \Smarty_Internal_Template $template
- */
- public function registerCallBacks(Smarty_Internal_Template $template)
- {
- $template->startRenderCallbacks[] = array($this, 'startTemplate');
- $template->endRenderCallbacks[] = array($this, 'endTemplate');
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_template_cached.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_cached.php
deleted file mode 100644
index 508d27f36..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_template_cached.php
+++ /dev/null
@@ -1,257 +0,0 @@
-<?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();
-
- /**
- * Flag if this is a cache resource
- *
- * @var bool
- */
- public $isCache = true;
-
- /**
- * create Cached Object container
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @throws \SmartyException
- */
- 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)) {
- include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
- }
- $this->handler = Smarty_CacheResource::load($_template->smarty);
- }
-
- /**
- * @param Smarty_Internal_Template $_template
- *
- * @return Smarty_Template_Cached
- */
- public 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 || $_template->source->handler->recompiled
- ) {
- $_template->cached->valid = false;
- }
- return $_template->cached;
- }
-
- /**
- * Render cache template
- *
- * @param \Smarty_Internal_Template $_template
- * @param bool $no_output_filter
- *
- * @throws \Exception
- */
- public function render(Smarty_Internal_Template $_template, $no_output_filter = true)
- {
- if ($this->isCached($_template)) {
- if ($_template->smarty->debugging) {
- if (!isset($_template->smarty->_debug)) {
- $_template->smarty->_debug = new Smarty_Internal_Debug();
- }
- $_template->smarty->_debug->start_cache($_template);
- }
- if (!$this->processed) {
- $this->process($_template);
- }
- $this->getRenderedTemplateCode($_template);
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_cache($_template);
- }
- return;
- } else {
- $_template->smarty->ext->_updateCache->updateCache($this, $_template, $no_output_filter);
- }
- }
-
- /**
- * Check if cache is valid, lock cache if required
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @return bool flag true if cache is valid
- */
- public function isCached(Smarty_Internal_Template $_template)
- {
- if ($this->valid !== null) {
- return $this->valid;
- }
- while (true) {
- while (true) {
- if ($this->exists === false || $_template->smarty->force_compile || $_template->smarty->force_cache) {
- $this->valid = false;
- } else {
- $this->valid = true;
- }
- if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_CURRENT
- && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)
- ) {
- // lifetime expired
- $this->valid = false;
- }
- if ($this->valid && $_template->compile_check === Smarty::COMPILECHECK_ON
- && $_template->source->getTimeStamp() > $this->timestamp
- ) {
- $this->valid = false;
- }
- if ($this->valid || !$_template->smarty->cache_locking) {
- break;
- }
- if (!$this->handler->locked($_template->smarty, $this)) {
- $this->handler->acquireLock($_template->smarty, $this);
- break 2;
- }
- $this->handler->populate($this, $_template);
- }
- if ($this->valid) {
- if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) {
- // load cache file for the following checks
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->start_cache($_template);
- }
- if ($this->handler->process($_template, $this) === false) {
- $this->valid = false;
- } else {
- $this->processed = true;
- }
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_cache($_template);
- }
- } else {
- $this->is_locked = true;
- continue;
- }
- } else {
- return $this->valid;
- }
- if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED
- && $_template->cached->cache_lifetime >= 0
- && (time() > ($_template->cached->timestamp + $_template->cached->cache_lifetime))
- ) {
- $this->valid = false;
- }
- if ($_template->smarty->cache_locking) {
- if (!$this->valid) {
- $this->handler->acquireLock($_template->smarty, $this);
- } elseif ($this->is_locked) {
- $this->handler->releaseLock($_template->smarty, $this);
- }
- }
- return $this->valid;
- }
- return $this->valid;
- }
-
- /**
- * Process cached template
- *
- * @param Smarty_Internal_Template $_template template object
- * @param bool $update flag if called because cache update
- */
- public function process(Smarty_Internal_Template $_template, $update = false)
- {
- if ($this->handler->process($_template, $this, $update) === false) {
- $this->valid = false;
- }
- if ($this->valid) {
- $this->processed = true;
- } else {
- $this->processed = false;
- }
- }
-
- /**
- * Read cache content from handler
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @return string|false content
- */
- public function read(Smarty_Internal_Template $_template)
- {
- if (!$_template->source->handler->recompiled) {
- return $this->handler->readCachedContent($_template);
- }
- return false;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php
deleted file mode 100644
index b78a3b600..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php
+++ /dev/null
@@ -1,257 +0,0 @@
-<?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
- */
- public static function load($_template)
- {
- $compiled = new Smarty_Template_Compiled();
- if ($_template->source->handler->hasCompiledHandler) {
- $_template->source->handler->populateCompiledFilepath($compiled, $_template);
- } else {
- $compiled->populateCompiledFilepath($_template);
- }
- return $compiled;
- }
-
- /**
- * populate Compiled Object with compiled filepath
- *
- * @param Smarty_Internal_Template $_template template object
- **/
- public function populateCompiledFilepath(Smarty_Internal_Template $_template)
- {
- $source = &$_template->source;
- $smarty = &$_template->smarty;
- $this->filepath = $smarty->getCompileDir();
- if (isset($_template->compile_id)) {
- $this->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) .
- ($smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^');
- }
- // if use_sub_dirs, break file into directories
- if ($smarty->use_sub_dirs) {
- $this->filepath .= $source->uid[ 0 ] . $source->uid[ 1 ] . DIRECTORY_SEPARATOR . $source->uid[ 2 ] .
- $source->uid[ 3 ] . DIRECTORY_SEPARATOR . $source->uid[ 4 ] . $source->uid[ 5 ] .
- DIRECTORY_SEPARATOR;
- }
- $this->filepath .= $source->uid . '_';
- if ($source->isConfig) {
- $this->filepath .= (int)$smarty->config_read_hidden + (int)$smarty->config_booleanize * 2 +
- (int)$smarty->config_overwrite * 4;
- } else {
- $this->filepath .= (int)$smarty->merge_compiled_includes + (int)$smarty->escape_html * 2 +
- (($smarty->merge_compiled_includes && $source->type === 'extends') ?
- (int)$smarty->extends_recursion * 4 : 0);
- }
- $this->filepath .= '.' . $source->type;
- $basename = $source->handler->getBasename($source);
- if (!empty($basename)) {
- $this->filepath .= '.' . $basename;
- }
- if ($_template->caching) {
- $this->filepath .= '.cache';
- }
- $this->filepath .= '.php';
- $this->timestamp = $this->exists = is_file($this->filepath);
- if ($this->exists) {
- $this->timestamp = filemtime($this->filepath);
- }
- }
-
- /**
- * render compiled template code
- *
- * @param Smarty_Internal_Template $_template
- *
- * @return void
- * @throws Exception
- */
- public function render(Smarty_Internal_Template $_template)
- {
- // checks if template exists
- if (!$_template->source->exists) {
- $type = $_template->source->isConfig ? 'config' : 'template';
- throw new SmartyException("Unable to load {$type} '{$_template->source->type}:{$_template->source->name}'");
- }
- if ($_template->smarty->debugging) {
- if (!isset($_template->smarty->_debug)) {
- $_template->smarty->_debug = new Smarty_Internal_Debug();
- }
- $_template->smarty->_debug->start_render($_template);
- }
- if (!$this->processed) {
- $this->process($_template);
- }
- if (isset($_template->cached)) {
- $_template->cached->file_dependency =
- array_merge($_template->cached->file_dependency, $this->file_dependency);
- }
- if ($_template->source->handler->uncompiled) {
- $_template->source->handler->renderUncompiled($_template->source, $_template);
- } else {
- $this->getRenderedTemplateCode($_template);
- }
- if ($_template->caching && $this->has_nocache_code) {
- $_template->cached->hashes[ $this->nocache_hash ] = true;
- }
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_render($_template);
- }
- }
-
- /**
- * load compiled template or compile from source
- *
- * @param Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- *
- * @throws Exception
- */
- public function process(Smarty_Internal_Template $_smarty_tpl)
- {
- $source = &$_smarty_tpl->source;
- $smarty = &$_smarty_tpl->smarty;
- if ($source->handler->recompiled) {
- $source->handler->process($_smarty_tpl);
- } elseif (!$source->handler->uncompiled) {
- if (!$this->exists || $smarty->force_compile
- || ($_smarty_tpl->compile_check && $source->getTimeStamp() > $this->getTimeStamp())
- ) {
- $this->compileTemplateSource($_smarty_tpl);
- $compileCheck = $_smarty_tpl->compile_check;
- $_smarty_tpl->compile_check = Smarty::COMPILECHECK_OFF;
- $this->loadCompiledTemplate($_smarty_tpl);
- $_smarty_tpl->compile_check = $compileCheck;
- } else {
- $_smarty_tpl->mustCompile = true;
- @include $this->filepath;
- if ($_smarty_tpl->mustCompile) {
- $this->compileTemplateSource($_smarty_tpl);
- $compileCheck = $_smarty_tpl->compile_check;
- $_smarty_tpl->compile_check = Smarty::COMPILECHECK_OFF;
- $this->loadCompiledTemplate($_smarty_tpl);
- $_smarty_tpl->compile_check = $compileCheck;
- }
- }
- $_smarty_tpl->_subTemplateRegister();
- $this->processed = true;
- }
- }
-
- /**
- * compile template from source
- *
- * @param Smarty_Internal_Template $_template
- *
- * @throws Exception
- */
- public function compileTemplateSource(Smarty_Internal_Template $_template)
- {
- $this->file_dependency = array();
- $this->includes = array();
- $this->nocache_hash = null;
- $this->unifunc = null;
- // compile locking
- if ($saved_timestamp = (!$_template->source->handler->recompiled && is_file($this->filepath))) {
- $saved_timestamp = $this->getTimeStamp();
- touch($this->filepath);
- }
- // compile locking
- try {
- // call compiler
- $_template->loadCompiler();
- $this->write($_template, $_template->compiler->compileTemplate($_template));
- } catch (Exception $e) {
- // restore old timestamp in case of error
- if ($saved_timestamp && is_file($this->filepath)) {
- touch($this->filepath, $saved_timestamp);
- }
- unset($_template->compiler);
- throw $e;
- }
- // release compiler object to free memory
- unset($_template->compiler);
- }
-
- /**
- * Write compiled code by handler
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $code compiled code
- *
- * @return bool success
- * @throws \SmartyException
- */
- public function write(Smarty_Internal_Template $_template, $code)
- {
- if (!$_template->source->handler->recompiled) {
- if ($_template->smarty->ext->_writeFile->writeFile($this->filepath, $code, $_template->smarty) === true) {
- $this->timestamp = $this->exists = is_file($this->filepath);
- if ($this->exists) {
- $this->timestamp = filemtime($this->filepath);
- return true;
- }
- }
- return false;
- }
- return true;
- }
-
- /**
- * 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;
- }
-
- /**
- * Load fresh compiled template by including the PHP file
- * HHVM requires a work around because of a PHP incompatibility
- *
- * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- */
- private function loadCompiledTemplate(Smarty_Internal_Template $_smarty_tpl)
- {
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
- ) {
- opcache_invalidate($this->filepath, true);
- } elseif (function_exists('apc_compile_file')) {
- apc_compile_file($this->filepath);
- }
- if (defined('HHVM_VERSION')) {
- eval('?>' . file_get_contents($this->filepath));
- } else {
- include $this->filepath;
- }
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_template_config.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_config.php
deleted file mode 100644
index 850ae32e7..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_template_config.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/**
- * Smarty Config Source Plugin
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Uwe Tews
- */
-
-/**
- * Smarty Config 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 int
- */
- public $scope = 0;
-
- /**
- * Flag that source is a config file
- *
- * @var bool
- */
- public $isConfig = true;
-
- /**
- * Name of the Class to compile this resource's contents with
- *
- * @var string
- */
- public $compiler_class = 'Smarty_Internal_Config_File_Compiler';
-
- /**
- * Name of the Class to tokenize this resource's contents with
- *
- * @var string
- */
- public $template_lexer_class = 'Smarty_Internal_Configfilelexer';
-
- /**
- * Name of the Class to parse this resource's contents with
- *
- * @var string
- */
- public $template_parser_class = 'Smarty_Internal_Configfileparser';
-
- /**
- * 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);
- if ($_template) {
- $smarty = $_template->smarty;
- $template_resource = $_template->template_resource;
- }
- if (empty($template_resource)) {
- throw new SmartyException('Source: Missing name');
- }
- // parse resource_name, load resource handler
- list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $smarty->default_config_type);
- // make sure configs are not loaded via anything smarty can't handle
- if (isset($_incompatible_resources[ $type ])) {
- throw new SmartyException("Unable to use resource '{$type}' for config");
- }
- $source = new Smarty_Template_Config($smarty, $template_resource, $type, $name);
- $source->handler->populate($source, $_template);
- if (!$source->exists && isset($smarty->default_config_handler_func)) {
- Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
- $source->handler->populate($source, $_template);
- }
- return $source;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php
deleted file mode 100644
index 52bfba252..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?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|bool
- */
- public $timestamp = false;
-
- /**
- * 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;
-
- /**
- * Included sub templates
- * - index name
- * - value use count
- *
- * @var int[]
- */
- public $includes = array();
-
- /**
- * Flag if this is a cache resource
- *
- * @var bool
- */
- public $isCache = false;
-
- /**
- * 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 \Smarty_Internal_Template $_template
- * @param string $unifunc function with template code
- *
- * @throws \Exception
- */
- public function getRenderedTemplateCode(Smarty_Internal_Template $_template, $unifunc = null)
- {
- $smarty = &$_template->smarty;
- $_template->isRenderingCache = $this->isCache;
- $level = ob_get_level();
- try {
- if (!isset($unifunc)) {
- $unifunc = $this->unifunc;
- }
- if (empty($unifunc) || !function_exists($unifunc)) {
- throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
- }
- if ($_template->startRenderCallbacks) {
- foreach ($_template->startRenderCallbacks as $callback) {
- call_user_func($callback, $_template);
- }
- }
- $unifunc($_template);
- foreach ($_template->endRenderCallbacks as $callback) {
- call_user_func($callback, $_template);
- }
- $_template->isRenderingCache = false;
- } catch (Exception $e) {
- $_template->isRenderingCache = false;
- while (ob_get_level() > $level) {
- ob_end_clean();
- }
- if (isset($smarty->security_policy)) {
- $smarty->security_policy->endTemplate();
- }
- throw $e;
- }
- }
-
- /**
- * Get compiled time stamp
- *
- * @return int
- */
- public function getTimeStamp()
- {
- if ($this->exists && !$this->timestamp) {
- $this->timestamp = filemtime($this->filepath);
- }
- return $this->timestamp;
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_template_source.php b/vendor/smarty/smarty/libs/sysplugins/smarty_template_source.php
deleted file mode 100644
index 16b47f23c..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_template_source.php
+++ /dev/null
@@ -1,213 +0,0 @@
-<?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;
-
- /**
- * 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;
-
- /**
- * Template source content eventually set by default handler
- *
- * @var string
- */
- public $content = null;
-
- /**
- * 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';
-
- /**
- * create Source Object container
- *
- * @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
- *
- * @throws \SmartyException
- * @internal param \Smarty_Resource $handler Resource Handler this source object communicates with
- */
- public function __construct(Smarty $smarty, $resource, $type, $name)
- {
- $this->handler =
- isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] :
- Smarty_Resource::load($smarty, $type);
- $this->smarty = $smarty;
- $this->resource = $resource;
- $this->type = $type;
- $this->name = $name;
- }
-
- /**
- * initialize Source Object for given resource
- * Either [$_template] or [$smarty, $template_resource] must be specified
- *
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty $smarty smarty object
- * @param string $template_resource resource identifier
- *
- * @return Smarty_Template_Source Source Object
- * @throws SmartyException
- */
- public static function load(
- Smarty_Internal_Template $_template = null,
- Smarty $smarty = null,
- $template_resource = null
- ) {
- if ($_template) {
- $smarty = $_template->smarty;
- $template_resource = $_template->template_resource;
- }
- if (empty($template_resource)) {
- throw new SmartyException('Source: Missing name');
- }
- // parse resource_name, load resource handler, identify unique resource name
- if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) {
- $type = $match[ 1 ];
- $name = $match[ 2 ];
- } else {
- // no resource given, use default
- // or single character before the colon is not a resource type, but part of the filepath
- $type = $smarty->default_resource_type;
- $name = $template_resource;
- }
- // create new source object
- $source = new Smarty_Template_Source($smarty, $template_resource, $type, $name);
- $source->handler->populate($source, $_template);
- if (!$source->exists && isset($_template->smarty->default_template_handler_func)) {
- Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
- $source->handler->populate($source, $_template);
- }
- return $source;
- }
-
- /**
- * Get source time stamp
- *
- * @return int
- */
- public function getTimeStamp()
- {
- if (!isset($this->timestamp)) {
- $this->handler->populateTimestamp($this);
- }
- return $this->timestamp;
- }
-
- /**
- * Get source content
- *
- * @return string
- * @throws \SmartyException
- */
- public function getContent()
- {
- return isset($this->content) ? $this->content : $this->handler->getContent($this);
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php
deleted file mode 100644
index 6d31a8a05..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/**
- * class for undefined variable object
- * This class defines an object for undefined variable handling
- *
- * @package Smarty
- * @subpackage Template
- */
-class Smarty_Undefined_Variable extends Smarty_Variable
-{
- /**
- * Returns null for not existing properties
- *
- * @param string $name
- *
- * @return null
- */
- public function __get($name)
- {
- return null;
- }
-
- /**
- * Always returns an empty string.
- *
- * @return string
- */
- public function __toString()
- {
- return '';
- }
-}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php
deleted file mode 100644
index 6a534228b..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * class for the Smarty variable object
- * This class defines the Smarty variable object
- *
- * @package Smarty
- * @subpackage Template
- */
-#[\AllowDynamicProperties]
-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/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php b/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php
deleted file mode 100644
index 0a0a32351..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/**
- * Smarty compiler exception class
- *
- * @package Smarty
- */
-class SmartyCompilerException extends SmartyException
-{
- /**
- * The constructor of the exception
- *
- * @param string $message The Exception message to throw.
- * @param int $code The Exception code.
- * @param string|null $filename The filename where the exception is thrown.
- * @param int|null $line The line number where the exception is thrown.
- * @param Throwable|null $previous The previous exception used for the exception chaining.
- */
- public function __construct(
- string $message = "",
- int $code = 0,
- ?string $filename = null,
- ?int $line = null,
- Throwable $previous = null
- ) {
- parent::__construct($message, $code, $previous);
-
- // These are optional parameters, should be be overridden only when present!
- if ($filename) {
- $this->file = $filename;
- }
- if ($line) {
- $this->line = $line;
- }
- }
-
- /**
- * @return string
- */
- public function __toString()
- {
- return ' --> Smarty Compiler: ' . $this->message . ' <-- ';
- }
-
- /**
- * @param int $line
- */
- public function setLine($line)
- {
- $this->line = $line;
- }
-
- /**
- * 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/vendor/smarty/smarty/libs/sysplugins/smartyexception.php b/vendor/smarty/smarty/libs/sysplugins/smartyexception.php
deleted file mode 100644
index 7f7b9aa43..000000000
--- a/vendor/smarty/smarty/libs/sysplugins/smartyexception.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * Smarty exception class
- *
- * @package Smarty
- */
-class SmartyException extends Exception
-{
- public static $escape = false;
-
- /**
- * @return string
- */
- public function __toString()
- {
- return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- ';
- }
-}
diff --git a/vendor/smarty/smarty/mkdocs.yml b/vendor/smarty/smarty/mkdocs.yml
index 66949b809..4fffe7d96 100644
--- a/vendor/smarty/smarty/mkdocs.yml
+++ b/vendor/smarty/smarty/mkdocs.yml
@@ -11,7 +11,7 @@ theme:
- navigation.tracking
icon:
logo: material/lightbulb-on
- favicon: images/favicon.ico
+ favicon: img/favicon.ico
extra:
version:
@@ -29,15 +29,15 @@ nav:
- 'Getting started':
- Introduction: 'getting-started.md'
- 'Upgrading from an older version': 'upgrading.md'
- - 'Designers':
+ - 'Language reference':
- 'Basic Syntax':
- Introduction: 'designers/language-basic-syntax/index.md'
- Comments: 'designers/language-basic-syntax/language-syntax-comments.md'
- Variables: 'designers/language-basic-syntax/language-syntax-variables.md'
- - Functions: 'designers/language-basic-syntax/language-syntax-functions.md'
+ - Operators: 'designers/language-basic-syntax/language-syntax-operators.md'
+ - Tags: 'designers/language-basic-syntax/language-syntax-tags.md'
- Attributes: 'designers/language-basic-syntax/language-syntax-attributes.md'
- Quotes: 'designers/language-basic-syntax/language-syntax-quotes.md'
- - Math: 'designers/language-basic-syntax/language-math.md'
- 'Escaping Smarty parsing': 'designers/language-basic-syntax/language-escaping.md'
- 'Variables':
- 'Introduction': 'designers/language-variables/index.md'
@@ -49,30 +49,43 @@ nav:
- 'Introduction': 'designers/language-modifiers/index.md'
- 'capitalize': 'designers/language-modifiers/language-modifier-capitalize.md'
- 'cat': 'designers/language-modifiers/language-modifier-cat.md'
+ - 'count': 'designers/language-modifiers/language-modifier-count.md'
- 'count_characters': 'designers/language-modifiers/language-modifier-count-characters.md'
- 'count_paragraphs': 'designers/language-modifiers/language-modifier-count-paragraphs.md'
- 'count_sentences': 'designers/language-modifiers/language-modifier-count-sentences.md'
- 'count_words': 'designers/language-modifiers/language-modifier-count-words.md'
- 'date_format': 'designers/language-modifiers/language-modifier-date-format.md'
+ - 'debug_print_var': 'designers/language-modifiers/language-modifier-debug-print-var.md'
- 'default': 'designers/language-modifiers/language-modifier-default.md'
- 'escape': 'designers/language-modifiers/language-modifier-escape.md'
- 'from_charset': 'designers/language-modifiers/language-modifier-from-charset.md'
- 'indent': 'designers/language-modifiers/language-modifier-indent.md'
+ - 'is_array': 'designers/language-modifiers/language-modifier-is_array.md'
+ - 'isset': 'designers/language-modifiers/language-modifier-isset.md'
+ - 'join': 'designers/language-modifiers/language-modifier-join.md'
+ - 'json_encode': 'designers/language-modifiers/language-modifier-json-encode.md'
- 'lower': 'designers/language-modifiers/language-modifier-lower.md'
+ - 'noprint': 'designers/language-modifiers/language-modifier-noprint.md'
+ - 'number_format': 'designers/language-modifiers/language-modifier-number-format.md'
- 'nl2br': 'designers/language-modifiers/language-modifier-nl2br.md'
+ - 'raw': 'designers/language-modifiers/language-modifier-raw.md'
- 'regex_replace': 'designers/language-modifiers/language-modifier-regex-replace.md'
- 'replace': 'designers/language-modifiers/language-modifier-replace.md'
+ - 'round': 'designers/language-modifiers/language-modifier-round.md'
- 'spacify': 'designers/language-modifiers/language-modifier-spacify.md'
+ - 'split': 'designers/language-modifiers/language-modifier-split.md'
+ - 'str_repeat': 'designers/language-modifiers/language-modifier-str-repeat.md'
- 'string_format': 'designers/language-modifiers/language-modifier-string-format.md'
- 'strip': 'designers/language-modifiers/language-modifier-strip.md'
- 'strip_tags': 'designers/language-modifiers/language-modifier-strip-tags.md'
+ - 'strlen': 'designers/language-modifiers/language-modifier-strlen.md'
+ - 'substr': 'designers/language-modifiers/language-modifier-substr.md'
- 'to_charset': 'designers/language-modifiers/language-modifier-to-charset.md'
- 'truncate': 'designers/language-modifiers/language-modifier-truncate.md'
- 'unescape': 'designers/language-modifiers/language-modifier-unescape.md'
- 'upper': 'designers/language-modifiers/language-modifier-upper.md'
- 'wordwrap': 'designers/language-modifiers/language-modifier-wordwrap.md'
- - 'designers/language-combining-modifiers.md'
- - 'Builtin Functions':
+ - 'Builtin Tags':
- 'Introduction': 'designers/language-builtin-functions/index.md'
- '{append}': 'designers/language-builtin-functions/language-function-append.md'
- '{assign}': 'designers/language-builtin-functions/language-function-assign.md'
@@ -95,7 +108,7 @@ nav:
- '{setfilter}': 'designers/language-builtin-functions/language-function-setfilter.md'
- '{strip}': 'designers/language-builtin-functions/language-function-strip.md'
- '{while}': 'designers/language-builtin-functions/language-function-while.md'
- - 'Custom Functions':
+ - 'Custom Tags':
- 'Introduction': 'designers/language-custom-functions/index.md'
- '{counter}': 'designers/language-custom-functions/language-function-counter.md'
- '{cycle}': 'designers/language-custom-functions/language-function-cycle.md'
@@ -114,12 +127,31 @@ nav:
- '{textformat}': 'designers/language-custom-functions/language-function-textformat.md'
- 'designers/config-files.md'
- 'designers/chapter-debugging-console.md'
- - 'Programmers':
- - 'programmers/charset.md'
- - 'programmers/smarty-constants.md'
- - 'programmers/api-variables.md'
- - 'programmers/api-functions.md'
- - 'programmers/caching.md'
- - 'programmers/resources.md'
- - 'programmers/advanced-features.md'
- - 'programmers/plugins.md' \ No newline at end of file
+ - 'API':
+ - 'Basics': 'api/basics.md'
+ - 'Configuring Smarty': 'api/configuring.md'
+ - 'Rendering a template': 'api/rendering.md'
+ - 'Using data in templates':
+ - 'Assigning variables': 'api/variables/assigning.md'
+ - 'Config files': 'api/variables/config-files.md'
+ - 'Using streams': 'api/variables/streams.md'
+ - 'Objects': 'api/variables/objects.md'
+ - 'Static class methods': 'api/variables/static-class-methods.md'
+ - 'Template inheritance': 'api/inheritance.md'
+ - 'Filters':
+ - 'Output filters': 'api/filters/output-filters.md'
+ - 'Prefilters': 'api/filters/prefilters.md'
+ - 'Postfilters': 'api/filters/postfilters.md'
+ - 'Template resources': 'api/resources.md'
+ - 'Caching':
+ - 'Basics': 'api/caching/basics.md'
+ - 'Multiple caches per template': 'api/caching/multiple-caches-per-template.md'
+ - 'Custom cache storage layers': 'api/caching/custom-storage-layers.md'
+ - 'Extending Smarty':
+ - 'Introduction': 'api/extending/introduction.md'
+ - 'Custom tags': 'api/extending/tags.md'
+ - 'Custom block tags': 'api/extending/block-tags.md'
+ - 'Custom modifiers': 'api/extending/modifiers.md'
+ - 'Creating an extension': 'api/extending/extensions.md'
+ - 'Security': 'api/security.md'
+
diff --git a/vendor/smarty/smarty/run-tests-for-all-php-versions.sh b/vendor/smarty/smarty/run-tests-for-all-php-versions.sh
index 23541b519..efff5713d 100755
--- a/vendor/smarty/smarty/run-tests-for-all-php-versions.sh
+++ b/vendor/smarty/smarty/run-tests-for-all-php-versions.sh
@@ -7,11 +7,11 @@
COMPOSE_CMD="mutagen-compose"
-$COMPOSE_CMD run --rm php71 ./run-tests.sh $@ && \
$COMPOSE_CMD run --rm php72 ./run-tests.sh $@ && \
$COMPOSE_CMD run --rm php73 ./run-tests.sh $@ && \
$COMPOSE_CMD run --rm php74 ./run-tests.sh $@ && \
$COMPOSE_CMD run --rm php80 ./run-tests.sh $@ && \
$COMPOSE_CMD run --rm php81 ./run-tests.sh $@ && \
-$COMPOSE_CMD run --rm php82 ./run-tests.sh $@ && \
+$COMPOSE_CMD run --rm php82 ./run-tests.sh $@
$COMPOSE_CMD run --rm php83 ./run-tests.sh $@
+$COMPOSE_CMD run --rm php84 ./run-tests.sh $@
diff --git a/vendor/smarty/smarty/src/BlockHandler/Base.php b/vendor/smarty/smarty/src/BlockHandler/Base.php
new file mode 100644
index 000000000..e194f67b6
--- /dev/null
+++ b/vendor/smarty/smarty/src/BlockHandler/Base.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Smarty\BlockHandler;
+
+use Smarty\Template;
+
+abstract class Base implements BlockHandlerInterface {
+
+ /**
+ * @var bool
+ */
+ protected $cacheable = true;
+
+ abstract public function handle($params, $content, Template $template, &$repeat);
+
+ public function isCacheable(): bool {
+ return $this->cacheable;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php b/vendor/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php
new file mode 100644
index 000000000..9aa744ec7
--- /dev/null
+++ b/vendor/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Smarty\BlockHandler;
+
+use Smarty\Template;
+
+interface BlockHandlerInterface {
+ public function handle($params, $content, Template $template, &$repeat);
+ public function isCacheable(): bool;
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php b/vendor/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php
new file mode 100644
index 000000000..b6236a67e
--- /dev/null
+++ b/vendor/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Smarty\BlockHandler;
+
+use Smarty\Template;
+
+class BlockPluginWrapper extends Base {
+
+ private $callback;
+
+ public function __construct($callback, bool $cacheable = true) {
+ $this->callback = $callback;
+ $this->cacheable = $cacheable;
+ }
+
+ public function handle($params, $content, Template $template, &$repeat) {
+ return \call_user_func_array($this->callback, [$params, $content, &$template, &$repeat]);
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/BlockHandler/TextFormat.php b/vendor/smarty/smarty/src/BlockHandler/TextFormat.php
new file mode 100644
index 000000000..b4fa5acd4
--- /dev/null
+++ b/vendor/smarty/smarty/src/BlockHandler/TextFormat.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace Smarty\BlockHandler;
+
+use Smarty\Smarty;
+use Smarty\Template;
+
+/**
+ * Smarty {textformat}{/textformat} block plugin
+ * Type: block function
+ * Name: textformat
+ * Purpose: format text a certain way with preset styles
+ * or custom wrap/indent settings
+ * Params:
+ *
+ * - style - string (email)
+ * - indent - integer (0)
+ * - wrap - integer (80)
+ * - wrap_char - string ("\n")
+ * - indent_char - string (" ")
+ * - wrap_boundary - boolean (true)
+ *
+ * @param array $params parameters
+ * @param string $content contents of the block
+ * @param Template $template template object
+ * @param boolean &$repeat repeat flag
+ *
+ * @return string content re-formatted
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @throws \Smarty\Exception
+ */
+class TextFormat implements BlockHandlerInterface {
+
+ public function handle($params, $content, Template $template, &$repeat) {
+ if (is_null($content)) {
+ return;
+ }
+ $style = null;
+ $indent = 0;
+ $indent_first = 0;
+ $indent_char = ' ';
+ $wrap = 80;
+ $wrap_char = "\n";
+ $wrap_cut = false;
+ $assign = null;
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'style':
+ case 'indent_char':
+ case 'wrap_char':
+ case 'assign':
+ $$_key = (string)$_val;
+ break;
+ case 'indent':
+ case 'indent_first':
+ case 'wrap':
+ $$_key = (int)$_val;
+ break;
+ case 'wrap_cut':
+ $$_key = (bool)$_val;
+ break;
+ default:
+ trigger_error("textformat: unknown attribute '{$_key}'");
+ }
+ }
+ if ($style === 'email') {
+ $wrap = 72;
+ }
+ // split into paragraphs
+ $_paragraphs = preg_split('![\r\n]{2}!', $content);
+ foreach ($_paragraphs as &$_paragraph) {
+ if (!$_paragraph) {
+ continue;
+ }
+ // convert mult. spaces & special chars to single space
+ $_paragraph =
+ preg_replace(
+ array(
+ '!\s+!' . Smarty::$_UTF8_MODIFIER,
+ '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER
+ ),
+ array(
+ ' ',
+ ''
+ ),
+ $_paragraph
+ );
+ // indent first line
+ if ($indent_first > 0) {
+ $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph;
+ }
+ // wordwrap sentences
+ $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
+ // indent lines
+ if ($indent > 0) {
+ $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph);
+ }
+ }
+ $_output = implode($wrap_char . $wrap_char, $_paragraphs);
+ if ($assign) {
+ $template->assign($assign, $_output);
+ } else {
+ return $_output;
+ }
+ }
+
+ public function isCacheable(): bool {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Cacheresource/Base.php b/vendor/smarty/smarty/src/Cacheresource/Base.php
new file mode 100644
index 000000000..41c4f6bc6
--- /dev/null
+++ b/vendor/smarty/smarty/src/Cacheresource/Base.php
@@ -0,0 +1,156 @@
+<?php
+
+namespace Smarty\Cacheresource;
+
+use Smarty\Exception;
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Cached;
+
+/**
+ * Cache Handler API
+ * @author Rodney Rehm
+ */
+abstract class Base
+{
+
+ /**
+ * populate Cached Object with metadata from Resource
+ *
+ * @param Cached $cached cached object
+ * @param Template $_template template object
+ *
+ * @return void
+ */
+ abstract public function populate(Cached $cached, Template $_template);
+
+ /**
+ * populate Cached Object with timestamp and exists from Resource
+ *
+ * @param Cached $cached
+ *
+ * @return void
+ */
+ abstract public function populateTimestamp(Cached $cached);
+
+ /**
+ * Read the cached template and process header
+ *
+ * @param Template $_template template object
+ * @param Cached|null $cached cached object
+ * @param boolean $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
+ */
+ abstract public function process(
+ Template $_template,
+ ?Cached $cached = null,
+ $update = false
+ );
+
+ /**
+ * Write the rendered template output to cache
+ *
+ * @param Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
+ */
+ abstract public function storeCachedContent(Template $_template, $content);
+
+ /**
+ * Read cached template from cache
+ *
+ * @param Template $_template template object
+ *
+ * @return string content
+ */
+ abstract public function retrieveCachedContent(Template $_template);
+
+ /**
+ * 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 Cached $cached
+ *
+ * @return bool|null
+ */
+ public function locked(Smarty $smarty, Cached $cached)
+ {
+ // theoretically locking_timeout should be checked against time_limit (max_execution_time)
+ $start = microtime(true);
+ $hadLock = null;
+ while ($this->hasLock($smarty, $cached)) {
+ $hadLock = true;
+ if (microtime(true) - $start > $smarty->locking_timeout) {
+ // abort waiting for lock release
+ return false;
+ }
+ sleep(1);
+ }
+ return $hadLock;
+ }
+
+ /**
+ * Check is cache is locked for this template
+ *
+ * @param Smarty $smarty
+ * @param Cached $cached
+ *
+ * @return bool
+ */
+ public function hasLock(Smarty $smarty, Cached $cached)
+ {
+ // check if lock exists
+ return false;
+ }
+
+ /**
+ * Lock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Cached $cached
+ *
+ * @return bool
+ */
+ public function acquireLock(Smarty $smarty, Cached $cached)
+ {
+ // create lock
+ return true;
+ }
+
+ /**
+ * Unlock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Cached $cached
+ *
+ * @return bool
+ */
+ public function releaseLock(Smarty $smarty, Cached $cached)
+ {
+ // release lock
+ return true;
+ }
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php b/vendor/smarty/smarty/src/Cacheresource/Custom.php
index 68ad11289..f9eb858e4 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php
+++ b/vendor/smarty/smarty/src/Cacheresource/Custom.php
@@ -1,19 +1,26 @@
<?php
+
+namespace Smarty\Cacheresource;
+
/**
* Smarty Internal Plugin
*
- * @package Smarty
- * @subpackage Cacher
+
+
*/
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Cached;
+
/**
* Cache Handler API
*
- * @package Smarty
- * @subpackage Cacher
+
+
* @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
+abstract class Custom extends Base
{
/**
* fetch cached content and its modification time from data source
@@ -73,20 +80,20 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
abstract protected function delete($name, $cache_id, $compile_id, $exp_time);
/**
- * populate Cached Object with meta data from Resource
+ * populate Cached Object with metadata from Resource
*
- * @param Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
+ * @param \Smarty\Template\Cached $cached cached object
+ * @param Template $_template template object
*
* @return void
*/
- public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
+ public function populate(\Smarty\Template\Cached $cached, 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;
- $path = $cached->source->uid . $_cache_id . $_compile_id;
+ $path = $cached->getSource()->uid . $_cache_id . $_compile_id;
$cached->filepath = sha1($path);
- if ($_template->smarty->cache_locking) {
+ if ($_template->getSmarty()->cache_locking) {
$cached->lock_id = sha1('lock.' . $path);
}
$this->populateTimestamp($cached);
@@ -95,14 +102,14 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $cached
+ * @param \Smarty\Template\Cached $cached
*
* @return void
*/
- public function populateTimestamp(Smarty_Template_Cached $cached)
+ public function populateTimestamp(\Smarty\Template\Cached $cached)
{
$mtime =
- $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id);
+ $this->fetchTimestamp($cached->filepath, $cached->getSource()->name, $cached->cache_id, $cached->compile_id);
if ($mtime !== null) {
$cached->timestamp = $mtime;
$cached->exists = !!$cached->timestamp;
@@ -111,7 +118,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
$timestamp = null;
$this->fetch(
$cached->filepath,
- $cached->source->name,
+ $cached->getSource()->name,
$cached->cache_id,
$cached->compile_id,
$cached->content,
@@ -121,29 +128,29 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
$cached->exists = !!$cached->timestamp;
}
- /**
- * Read the cached template and process the header
- *
- * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- * @param Smarty_Template_Cached $cached cached object
- * @param boolean $update flag if called because cache update
- *
- * @return boolean true or false if the cached content does not exist
- */
+ /**
+ * Read the cached template and process the header
+ *
+ * @param Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Cached|null $cached cached object
+ * @param boolean $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 $_smarty_tpl,
- Smarty_Template_Cached $cached = null,
- $update = false
+ Template $_smarty_tpl,
+ ?\Smarty\Template\Cached $cached = null,
+ $update = false
) {
if (!$cached) {
- $cached = $_smarty_tpl->cached;
+ $cached = $_smarty_tpl->getCached();
}
$content = $cached->content ? $cached->content : null;
$timestamp = $cached->timestamp ? $cached->timestamp : null;
if ($content === null || !$timestamp) {
$this->fetch(
- $_smarty_tpl->cached->filepath,
- $_smarty_tpl->source->name,
+ $_smarty_tpl->getCached()->filepath,
+ $_smarty_tpl->getSource()->name,
$_smarty_tpl->cache_id,
$_smarty_tpl->compile_id,
$content,
@@ -161,16 +168,16 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
* @param string $content content to cache
*
* @return boolean success
*/
- public function writeCachedContent(Smarty_Internal_Template $_template, $content)
+ public function storeCachedContent(Template $_template, $content)
{
return $this->save(
- $_template->cached->filepath,
- $_template->source->name,
+ $_template->getCached()->filepath,
+ $_template->getSource()->name,
$_template->cache_id,
$_template->compile_id,
$_template->cache_lifetime,
@@ -181,19 +188,18 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
/**
* Read cached template from cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
*
* @return string|boolean content
*/
- public function readCachedContent(Smarty_Internal_Template $_template)
+ public function retrieveCachedContent(Template $_template)
{
- $content = $_template->cached->content ? $_template->cached->content : null;
- $timestamp = null;
- if ($content === null) {
+ $content = $_template->getCached()->content ?: null;
+ if ($content === null) {
$timestamp = null;
$this->fetch(
- $_template->cached->filepath,
- $_template->source->name,
+ $_template->getCached()->filepath,
+ $_template->getSource()->name,
$_template->cache_id,
$_template->compile_id,
$content,
@@ -206,15 +212,15 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
return false;
}
- /**
- * 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 function clearAll(Smarty $smarty, $exp_time = null)
+ /**
+ * Empty cache
+ *
+ * @param \Smarty\Smarty $smarty Smarty object
+ * @param null $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ public function clearAll(\Smarty\Smarty $smarty, $exp_time = null)
{
return $this->delete(null, null, null, $exp_time);
}
@@ -222,20 +228,20 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
/**
* Empty cache for a specific template
*
- * @param Smarty $smarty Smarty object
+ * @param \Smarty\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 int number of cache files deleted
- * @throws \SmartyException
+ * @throws \Smarty\Exception
*/
- public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
+ public function clear(\Smarty\Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
$cache_name = null;
if (isset($resource_name)) {
- $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ $source = \Smarty\Template\Source::load(null, $smarty, $resource_name);
if ($source->exists) {
$cache_name = $source->name;
} else {
@@ -245,18 +251,18 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
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 boolean true or false if cache is locked
- */
- public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ /**
+ * Check is cache is locked for this template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
+ */
+ public function hasLock(\Smarty\Smarty $smarty, \Smarty\Template\Cached $cached)
{
$id = $cached->lock_id;
- $name = $cached->source->name . '.lock';
+ $name = $cached->getSource()->name . '.lock';
$mtime = $this->fetchTimestamp($id, $name, $cached->cache_id, $cached->compile_id);
if ($mtime === null) {
$this->fetch($id, $name, $cached->cache_id, $cached->compile_id, $content, $mtime);
@@ -267,31 +273,31 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param \Smarty\Smarty $smarty Smarty object
+ * @param \Smarty\Template\Cached $cached cached object
*
* @return bool|void
*/
- public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function acquireLock(\Smarty\Smarty $smarty, \Smarty\Template\Cached $cached)
{
$cached->is_locked = true;
$id = $cached->lock_id;
- $name = $cached->source->name . '.lock';
+ $name = $cached->getSource()->name . '.lock';
$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_Template_Cached $cached cached object
+ * @param \Smarty\Smarty $smarty Smarty object
+ * @param \Smarty\Template\Cached $cached cached object
*
* @return bool|void
*/
- public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function releaseLock(\Smarty\Smarty $smarty, \Smarty\Template\Cached $cached)
{
$cached->is_locked = false;
- $name = $cached->source->name . '.lock';
+ $name = $cached->getSource()->name . '.lock';
$this->delete($name, $cached->cache_id, $cached->compile_id, null);
}
}
diff --git a/vendor/smarty/smarty/src/Cacheresource/File.php b/vendor/smarty/smarty/src/Cacheresource/File.php
new file mode 100644
index 000000000..4b4198ec2
--- /dev/null
+++ b/vendor/smarty/smarty/src/Cacheresource/File.php
@@ -0,0 +1,338 @@
+<?php
+
+namespace Smarty\Cacheresource;
+
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Cached;
+
+/**
+ * Smarty Internal Plugin CacheResource File
+ *
+
+
+ * @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 using nocache inserts.
+ */
+class File extends Base
+{
+ /**
+ * populate Cached Object with metadata from Resource
+ *
+ * @param Cached $cached cached object
+ * @param Template $_template template object
+ *
+ * @return void
+ */
+ public function populate(Cached $cached, Template $_template)
+ {
+ $source = $_template->getSource();
+ $smarty = $_template->getSmarty();
+ $_compile_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
+ $_filepath = $source->uid;
+ $cached->filepath = $smarty->getCacheDir();
+ if (isset($_template->cache_id)) {
+ $cached->filepath .= preg_replace(
+ array(
+ '![^\w|]+!',
+ '![|]+!'
+ ),
+ array(
+ '_',
+ $_compile_dir_sep
+ ),
+ $_template->cache_id
+ ) . $_compile_dir_sep;
+ }
+ if (isset($_template->compile_id)) {
+ $cached->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . $_compile_dir_sep;
+ }
+ // if use_sub_dirs, break file into directories
+ if ($smarty->use_sub_dirs) {
+ $cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . DIRECTORY_SEPARATOR . $_filepath[ 2 ] .
+ $_filepath[ 3 ] .
+ DIRECTORY_SEPARATOR .
+ $_filepath[ 4 ] . $_filepath[ 5 ] . DIRECTORY_SEPARATOR;
+ }
+ $cached->filepath .= $_filepath . '_' . $source->getBasename();
+
+ if ($smarty->cache_locking) {
+ $cached->lock_id = $cached->filepath . '.lock';
+ }
+ $cached->filepath .= '.php';
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ }
+ }
+
+ /**
+ * populate Cached Object with timestamp and exists from Resource
+ *
+ * @param Cached $cached cached object
+ *
+ * @return void
+ */
+ public function populateTimestamp(Cached $cached)
+ {
+ $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 Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Cached|null $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(
+ Template $_smarty_tpl,
+ ?Cached $cached = null,
+ $update = false
+ ) {
+ $_smarty_tpl->getCached()->setValid(false);
+ if ($update && defined('HHVM_VERSION')) {
+ eval('?>' . file_get_contents($_smarty_tpl->getCached()->filepath));
+ return true;
+ } else {
+ return @include $_smarty_tpl->getCached()->filepath;
+ }
+ }
+
+ /**
+ * Write the rendered template output to cache
+ *
+ * @param Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return bool success
+ * @throws \Smarty\Exception
+ */
+ public function storeCachedContent(Template $_template, $content)
+ {
+ if ($_template->getSmarty()->writeFile($_template->getCached()->filepath, $content) === true) {
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
+ ) {
+ opcache_invalidate($_template->getCached()->filepath, true);
+ } elseif (function_exists('apc_compile_file')) {
+ apc_compile_file($_template->getCached()->filepath);
+ }
+ $cached = $_template->getCached();
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Read cached template from cache
+ *
+ * @param Template $_template template object
+ *
+ * @return string content
+ */
+ public function retrieveCachedContent(Template $_template)
+ {
+ if (is_file($_template->getCached()->filepath)) {
+ return file_get_contents($_template->getCached()->filepath);
+ }
+ return false;
+ }
+
+ /**
+ * Empty cache
+ *
+ * @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);
+ }
+
+ /**
+ * 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 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 . '/';
+ }
+ }
+ }
+ if (isset($resource_name)) {
+ $_save_stat = $smarty->caching;
+ $smarty->caching = \Smarty\Smarty::CACHING_LIFETIME_CURRENT;
+ $tpl = $smarty->doCreateTemplate($resource_name);
+ $smarty->caching = $_save_stat;
+ // remove from template cache
+ if ($tpl->getSource()->exists) {
+ $_resourcename_parts = basename(str_replace('^', '/', $tpl->getCached()->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) === '.') {
+ continue;
+ }
+ $_filepath = (string)$_file;
+ // directory ?
+ if ($_file->isDir()) {
+ if (!$_cache->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ // delete only php files
+ if (substr($_filepath, -4) !== '.php') {
+ continue;
+ }
+ $_parts = explode($_dir_sep, str_replace('\\', '/', substr($_filepath, $_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;
+ }
+ }
+ }
+ if (is_file($_filepath)) {
+ // expired ?
+ if (isset($exp_time)) {
+ if ($exp_time < 0) {
+ preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_filepath), $match);
+ if ($_time < (filemtime($_filepath) + $match[ 1 ])) {
+ continue;
+ }
+ } else {
+ if ($_time - filemtime($_filepath) < $exp_time) {
+ continue;
+ }
+ }
+ }
+ $_count += @unlink($_filepath) ? 1 : 0;
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
+ ) {
+ opcache_invalidate($_filepath, true);
+ } elseif (function_exists('apc_delete_file')) {
+ apc_delete_file($_filepath);
+ }
+ }
+ }
+ }
+ }
+ return $_count;
+ }
+
+ /**
+ * Check is cache is locked for this template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
+ */
+ public function hasLock(Smarty $smarty, Cached $cached)
+ {
+ clearstatcache(true, $cached->lock_id ?? '');
+ if (null !== $cached->lock_id && 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 Cached $cached cached object
+ *
+ * @return void
+ */
+ public function acquireLock(Smarty $smarty, Cached $cached)
+ {
+ $cached->is_locked = true;
+ touch($cached->lock_id);
+ }
+
+ /**
+ * Unlock cache for this template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param Cached $cached cached object
+ *
+ * @return void
+ */
+ public function releaseLock(Smarty $smarty, Cached $cached)
+ {
+ $cached->is_locked = false;
+ @unlink($cached->lock_id);
+ }
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/vendor/smarty/smarty/src/Cacheresource/KeyValueStore.php
index 4b1c0f6d8..1953bb20f 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
+++ b/vendor/smarty/smarty/src/Cacheresource/KeyValueStore.php
@@ -1,9 +1,16 @@
<?php
+
+namespace Smarty\Cacheresource;
+
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Cached;
+
/**
* Smarty Internal Plugin
*
- * @package Smarty
- * @subpackage Cacher
+
+
*/
/**
@@ -24,11 +31,11 @@
* 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
- * @subpackage Cacher
+
+
* @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
+abstract class KeyValueStore extends Base
{
/**
* cache for contents
@@ -47,14 +54,14 @@ 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 Cached $cached cached object
+ * @param Template $_template template object
*
* @return void
*/
- public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
+ public function populate(Cached $cached, Template $_template)
{
- $cached->filepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' .
+ $cached->filepath = $_template->getSource()->uid . '#' . $this->sanitize($cached->getSource()->resource) . '#' .
$this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id);
$this->populateTimestamp($cached);
}
@@ -62,20 +69,20 @@ 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 Cached $cached cached object
*
* @return void
*/
- public function populateTimestamp(Smarty_Template_Cached $cached)
+ public function populateTimestamp(Cached $cached)
{
if (!$this->fetch(
$cached->filepath,
- $cached->source->name,
+ $cached->getSource()->name,
$cached->cache_id,
$cached->compile_id,
$content,
$timestamp,
- $cached->source->uid
+ $cached->getSource()->uid
)
) {
return;
@@ -85,34 +92,34 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
$cached->exists = !!$cached->timestamp;
}
- /**
- * Read the cached template and process the header
- *
- * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- * @param Smarty_Template_Cached $cached cached object
- * @param boolean $update flag if called because cache update
- *
- * @return boolean true or false if the cached content does not exist
- */
+ /**
+ * Read the cached template and process the header
+ *
+ * @param Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Cached|null $cached cached object
+ * @param boolean $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 $_smarty_tpl,
- Smarty_Template_Cached $cached = null,
- $update = false
+ Template $_smarty_tpl,
+ ?Cached $cached = null,
+ $update = false
) {
if (!$cached) {
- $cached = $_smarty_tpl->cached;
+ $cached = $_smarty_tpl->getCached();
}
- $content = $cached->content ? $cached->content : null;
- $timestamp = $cached->timestamp ? $cached->timestamp : null;
+ $content = $cached->content ?: null;
+ $timestamp = $cached->timestamp ?: null;
if ($content === null || !$timestamp) {
if (!$this->fetch(
- $_smarty_tpl->cached->filepath,
- $_smarty_tpl->source->name,
+ $_smarty_tpl->getCached()->filepath,
+ $_smarty_tpl->getSource()->name,
$_smarty_tpl->cache_id,
$_smarty_tpl->compile_id,
$content,
$timestamp,
- $_smarty_tpl->source->uid
+ $_smarty_tpl->getSource()->uid
)
) {
return false;
@@ -128,37 +135,37 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
* @param string $content content to cache
*
* @return boolean success
*/
- public function writeCachedContent(Smarty_Internal_Template $_template, $content)
+ public function storeCachedContent(Template $_template, $content)
{
$this->addMetaTimestamp($content);
- return $this->write(array($_template->cached->filepath => $content), $_template->cache_lifetime);
+ return $this->write(array($_template->getCached()->filepath => $content), $_template->cache_lifetime);
}
/**
* Read cached template from cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
*
* @return string|false content
*/
- public function readCachedContent(Smarty_Internal_Template $_template)
+ public function retrieveCachedContent(Template $_template)
{
- $content = $_template->cached->content ? $_template->cached->content : null;
+ $content = $_template->getCached()->content ?: null;
$timestamp = null;
if ($content === null) {
if (!$this->fetch(
- $_template->cached->filepath,
- $_template->source->name,
+ $_template->getCached()->filepath,
+ $_template->getSource()->name,
$_template->cache_id,
$_template->compile_id,
$content,
$timestamp,
- $_template->source->uid
+ $_template->getSource()->uid
)
) {
return false;
@@ -200,7 +207,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param integer $exp_time expiration time [being ignored]
*
* @return int number of cache files deleted [always -1]
- * @throws \SmartyException
+ * @throws \Smarty\Exception
* @uses buildCachedFilepath() to generate the CacheID
* @uses invalidate() to mark CacheIDs parent chain as outdated
* @uses delete() to remove CacheID from cache
@@ -222,12 +229,12 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $resource_name template name
*
* @return string filepath of cache file
- * @throws \SmartyException
+ * @throws \Smarty\Exception
*/
protected function getTemplateUid(Smarty $smarty, $resource_name)
{
if (isset($resource_name)) {
- $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ $source = \Smarty\Template\Source::load(null, $smarty, $resource_name);
if ($source->exists) {
return $source->uid;
}
@@ -380,11 +387,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
$compile_id = null,
$resource_uid = null
) {
- // abort if there is no CacheID
- if (false && !$cid) {
- return 0;
- }
- // abort if there are no InvalidationKeys to check
+ // abort if there are no InvalidationKeys to check
if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) {
return 0;
}
@@ -457,11 +460,11 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Check is cache is locked for this template
*
* @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param Cached $cached cached object
*
* @return boolean true or false if cache is locked
*/
- public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function hasLock(Smarty $smarty, Cached $cached)
{
$key = 'LOCK#' . $cached->filepath;
$data = $this->read(array($key));
@@ -472,11 +475,11 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Lock cache for this template
*
* @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param Cached $cached cached object
*
* @return bool|void
*/
- public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function acquireLock(Smarty $smarty, Cached $cached)
{
$cached->is_locked = true;
$key = 'LOCK#' . $cached->filepath;
@@ -487,11 +490,11 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Unlock cache for this template
*
* @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param Cached $cached cached object
*
- * @return bool|void
+ * @return void
*/
- public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function releaseLock(Smarty $smarty, Cached $cached)
{
$cached->is_locked = false;
$key = 'LOCK#' . $cached->filepath;
diff --git a/vendor/smarty/smarty/src/Compile/Base.php b/vendor/smarty/smarty/src/Compile/Base.php
new file mode 100644
index 000000000..2d5c0c0ef
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Base.php
@@ -0,0 +1,233 @@
+<?php
+/**
+ * Smarty Internal Compile Plugin Base
+ * @author Uwe Tews
+ */
+namespace Smarty\Compile;
+
+use Smarty\Compiler\Template;
+use Smarty\Data;
+use Smarty\Exception;
+
+/**
+ * This class does extend all internal compile plugins
+ *
+
+
+ */
+abstract class Base implements CompilerInterface {
+
+ /**
+ * Array of names of required attribute required by tag
+ *
+ * @var array
+ */
+ protected $required_attributes = [];
+
+ /**
+ * Array of names of optional attribute required by tag
+ * use array('_any') if there is no restriction of attributes names
+ *
+ * @var array
+ */
+ protected $optional_attributes = [];
+
+ /**
+ * Shorttag attribute order defined by its names
+ *
+ * @var array
+ */
+ protected $shorttag_order = [];
+
+ /**
+ * Array of names of valid option flags
+ *
+ * @var array
+ */
+ protected $option_flags = ['nocache'];
+ /**
+ * @var bool
+ */
+ protected $cacheable = true;
+
+ public function isCacheable(): bool {
+ return $this->cacheable;
+ }
+
+ /**
+ * Converts attributes into parameter array strings
+ *
+ * @param array $_attr
+ *
+ * @return array
+ */
+ protected function formatParamsArray(array $_attr): array {
+ $_paramsArray = [];
+ foreach ($_attr as $_key => $_value) {
+ $_paramsArray[] = var_export($_key, true) . "=>" . $_value;
+ }
+ return $_paramsArray;
+ }
+
+ /**
+ * 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
+ */
+ protected function getAttributes($compiler, $attributes) {
+ $_indexed_attr = [];
+ $options = array_fill_keys($this->option_flags, true);
+ foreach ($attributes as $key => $mixed) {
+ // shorthand ?
+ if (!is_array($mixed)) {
+ // options flag ?
+ if (isset($options[trim($mixed, '\'"')])) {
+ $_indexed_attr[trim($mixed, '\'"')] = true;
+ // shorthand attribute ?
+ } 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', null, true);
+ }
+ // named attribute
+ } else {
+ foreach ($mixed as $k => $v) {
+ // options flag?
+ if (isset($options[$k])) {
+ if (is_bool($v)) {
+ $_indexed_attr[$k] = $v;
+ } else {
+ if (is_string($v)) {
+ $v = trim($v, '\'" ');
+ }
+
+ // Mapping array for boolean option value
+ static $optionMap = [1 => true, 0 => false, 'true' => true, 'false' => false];
+
+ if (isset($optionMap[$v])) {
+ $_indexed_attr[$k] = $optionMap[$v];
+ } else {
+ $compiler->trigger_template_error(
+ "illegal value '" . var_export($v, true) .
+ "' for options flag '{$k}'",
+ null,
+ true
+ );
+ }
+ }
+ // must be named attribute
+ } else {
+ $_indexed_attr[$k] = $v;
+ }
+ }
+ }
+ }
+ // check if all required attributes present
+ foreach ($this->required_attributes as $attr) {
+ if (!isset($_indexed_attr[$attr])) {
+ $compiler->trigger_template_error("missing '{$attr}' attribute", null, true);
+ }
+ }
+ // check for not allowed attributes
+ if ($this->optional_attributes !== ['_any']) {
+ $allowedAttributes = array_fill_keys(
+ array_merge(
+ $this->required_attributes,
+ $this->optional_attributes,
+ $this->option_flags
+ ),
+ true
+ );
+ foreach ($_indexed_attr as $key => $dummy) {
+ if (!isset($allowedAttributes[$key]) && $key !== 0) {
+ $compiler->trigger_template_error("unexpected '{$key}' attribute", null, true);
+ }
+ }
+ }
+ // default 'false' for all options flags not set
+ foreach ($this->option_flags as $flag) {
+ if (!isset($_indexed_attr[$flag])) {
+ $_indexed_attr[$flag] = false;
+ }
+ }
+
+ return $_indexed_attr;
+ }
+
+ /**
+ * Push opening tag name on stack
+ * Optionally additional data can be saved on stack
+ *
+ * @param Template $compiler compiler object
+ * @param string $openTag the opening tag's name
+ * @param mixed $data optional data saved
+ */
+ protected function openTag(Template $compiler, $openTag, $data = null) {
+ $compiler->openTag($openTag, $data);
+ }
+
+ /**
+ * Pop closing tag
+ * Raise an error if this stack-top doesn't match with expected opening tags
+ *
+ * @param Template $compiler compiler object
+ * @param array|string $expectedTag the expected opening tag names
+ *
+ * @return mixed any type the opening tag's name or saved data
+ */
+ protected function closeTag(Template $compiler, $expectedTag) {
+ return $compiler->closeTag($expectedTag);
+ }
+
+ /**
+ * @param mixed $scope
+ * @param array $invalidScopes
+ *
+ * @return int
+ * @throws Exception
+ */
+ protected function convertScope($scope): int {
+
+ static $scopes = [
+ 'local' => Data::SCOPE_LOCAL, // current scope
+ 'parent' => Data::SCOPE_PARENT, // parent scope (definition unclear)
+ 'tpl_root' => Data::SCOPE_TPL_ROOT, // highest template (keep going up until parent is not a template)
+ 'root' => Data::SCOPE_ROOT, // highest scope (definition unclear)
+ 'global' => Data::SCOPE_GLOBAL, // smarty object
+
+ 'smarty' => Data::SCOPE_SMARTY, // @deprecated alias of 'global'
+ ];
+
+ $_scopeName = trim($scope, '\'"');
+ if (is_numeric($_scopeName) && in_array($_scopeName, $scopes)) {
+ return (int) $_scopeName;
+ }
+
+ if (isset($scopes[$_scopeName])) {
+ return $scopes[$_scopeName];
+ }
+
+ $err = var_export($_scopeName, true);
+ throw new Exception("illegal value '{$err}' for \"scope\" attribute");
+ }
+
+ /**
+ * Compiles code for the tag
+ *
+ * @param array $args array with attributes from parser
+ * @param Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code as a string
+ * @throws \Smarty\CompilerException
+ */
+ abstract public function compile($args, Template $compiler, $parameter = array(), $tag = null, $function = null): string;
+}
diff --git a/vendor/smarty/smarty/src/Compile/BlockCompiler.php b/vendor/smarty/smarty/src/Compile/BlockCompiler.php
new file mode 100644
index 000000000..e7a8f310e
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/BlockCompiler.php
@@ -0,0 +1,228 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Block Plugin
+ * Compiles code for the execution of block plugin
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile;
+
+use Smarty\Compiler\Template;
+use Smarty\CompilerException;
+use Smarty\Exception;
+use Smarty\Smarty;
+
+/**
+ * Smarty Internal Plugin Compile Block Plugin Class
+ *
+ */
+class BlockCompiler extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $optional_attributes = ['_any'];
+
+ /**
+ * nesting level
+ *
+ * @var int
+ */
+ private $nesting = 0;
+
+
+ /**
+ * Compiles code for the execution of block plugin
+ *
+ * @param array $args array with attributes from parser
+ * @param Template $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
+ * @throws CompilerException
+ * @throws Exception
+ */
+ public function compile($args, Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ if (!isset($tag[5]) || substr($tag, -5) !== 'close') {
+ $output = $this->compileOpeningTag($compiler, $args, $tag, $function);
+ } else {
+ $output = $this->compileClosingTag($compiler, $tag, $parameter, $function);
+ }
+ return $output;
+ }
+
+ /**
+ * Compiles code for the {$smarty.block.child} property
+ *
+ * @param Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws CompilerException
+ */
+ public function compileChild(\Smarty\Compiler\Template $compiler) {
+
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->trigger_template_error(
+ "'{\$smarty.block.child}' used outside {block} tags ",
+ $compiler->getParser()->lex->taglineno
+ );
+ }
+ $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']]['callsChild'] = true;
+ $compiler->suppressNocacheProcessing = true;
+
+ $output = "<?php \n";
+ $output .= '$_smarty_tpl->getInheritance()->callChild($_smarty_tpl, $this' . ");\n";
+ $output .= "?>\n";
+ return $output;
+ }
+
+ /**
+ * Compiles code for the {$smarty.block.parent} property
+ *
+ * @param Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws CompilerException
+ */
+ public function compileParent(\Smarty\Compiler\Template $compiler) {
+
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->trigger_template_error(
+ "'{\$smarty.block.parent}' used outside {block} tags ",
+ $compiler->getParser()->lex->taglineno
+ );
+ }
+ $compiler->suppressNocacheProcessing = true;
+
+ $output = "<?php \n";
+ $output .= '$_smarty_tpl->getInheritance()->callParent($_smarty_tpl, $this' . ");\n";
+ $output .= "?>\n";
+ return $output;
+ }
+
+ /**
+ * Returns true if this block is cacheable.
+ *
+ * @param Smarty $smarty
+ * @param $function
+ *
+ * @return bool
+ */
+ protected function blockIsCacheable(\Smarty\Smarty $smarty, $function): bool {
+ return $smarty->getBlockHandler($function)->isCacheable();
+ }
+
+ /**
+ * Returns the code used for the isset check
+ *
+ * @param string $tag tag name
+ * @param string $function base tag or method name
+ *
+ * @return string
+ */
+ protected function getIsCallableCode($tag, $function): string {
+ return "\$_smarty_tpl->getSmarty()->getBlockHandler(" . var_export($function, true) . ")";
+ }
+
+ /**
+ * Returns the full code used to call the callback
+ *
+ * @param string $tag tag name
+ * @param string $function base tag or method name
+ *
+ * @return string
+ */
+ protected function getFullCallbackCode($tag, $function): string {
+ return "\$_smarty_tpl->getSmarty()->getBlockHandler(" . var_export($function, true) . ")->handle";
+ }
+
+ /**
+ * @param Template $compiler
+ * @param array $args
+ * @param string|null $tag
+ * @param string|null $function
+ *
+ * @return string
+ */
+ private function compileOpeningTag(Template $compiler, array $args, ?string $tag, ?string $function): string {
+
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $this->nesting++;
+ unset($_attr['nocache']);
+ $_params = 'array(' . implode(',', $this->formatParamsArray($_attr)) . ')';
+
+ if (!$this->blockIsCacheable($compiler->getSmarty(), $function)) {
+ $compiler->tag_nocache = true;
+ }
+
+ if ($compiler->tag_nocache) {
+ // push a {nocache} tag onto the stack to prevent caching of this block
+ $this->openTag($compiler, 'nocache');
+ }
+
+ $this->openTag($compiler, $tag, [$_params, $compiler->tag_nocache]);
+
+ // compile code
+ $output = "<?php \$_block_repeat=true;
+if (!" . $this->getIsCallableCode($tag, $function) .") {\nthrow new \\Smarty\\Exception('block tag \'{$tag}\' not callable or registered');\n}\n
+echo " . $this->getFullCallbackCode($tag, $function) . "({$_params}, null, \$_smarty_tpl, \$_block_repeat);
+while (\$_block_repeat) {
+ ob_start();
+?>";
+
+ return $output;
+ }
+
+ /**
+ * @param Template $compiler
+ * @param string $tag
+ * @param array $parameter
+ * @param string|null $function
+ *
+ * @return string
+ * @throws CompilerException
+ * @throws Exception
+ */
+ private function compileClosingTag(Template $compiler, string $tag, array $parameter, ?string $function): string {
+
+ // closing tag of block plugin, restore nocache
+ $base_tag = substr($tag, 0, -5);
+ [$_params, $nocache_pushed] = $this->closeTag($compiler, $base_tag);
+
+ // compile code
+ if (!isset($parameter['modifier_list'])) {
+ $mod_pre = $mod_post = $mod_content = '';
+ $mod_content2 = 'ob_get_clean()';
+ } else {
+ $mod_content2 = "\$_block_content{$this->nesting}";
+ $mod_content = "\$_block_content{$this->nesting} = ob_get_clean();\n";
+ $mod_pre = "ob_start();\n";
+ $mod_post = 'echo ' . $compiler->compileModifier($parameter['modifier_list'], 'ob_get_clean()')
+ . ";\n";
+ }
+ $output = "<?php {$mod_content}\$_block_repeat=false;\n{$mod_pre}";
+ $callback = $this->getFullCallbackCode($base_tag, $function);
+ $output .= "echo {$callback}({$_params}, {$mod_content2}, \$_smarty_tpl, \$_block_repeat);\n";
+ $output .= "{$mod_post}}\n?>";
+
+ if ($nocache_pushed) {
+ // pop the pushed virtual nocache tag
+ $this->closeTag($compiler, 'nocache');
+ $compiler->tag_nocache = true;
+ }
+
+ return $output;
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Compile/CompilerInterface.php b/vendor/smarty/smarty/src/Compile/CompilerInterface.php
new file mode 100644
index 000000000..5f2cc7ccc
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/CompilerInterface.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Smarty\Compile;
+
+/**
+ * This class does extend all internal compile plugins
+ *
+
+
+ */
+interface CompilerInterface {
+
+ /**
+ * Compiles code for the tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code as a string
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string;
+
+ public function isCacheable(): bool;
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php b/vendor/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php
new file mode 100644
index 000000000..394a6e76d
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Smarty\Compile;
+
+class DefaultHandlerBlockCompiler extends BlockCompiler {
+ /**
+ * @inheritDoc
+ */
+ protected function getIsCallableCode($tag, $function): string {
+ return "\$_smarty_tpl->getSmarty()->getRuntime('DefaultPluginHandler')->hasPlugin(" .
+ var_export($function, true) . ", 'block')";
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function getFullCallbackCode($tag, $function): string {
+ return "\$_smarty_tpl->getSmarty()->getRuntime('DefaultPluginHandler')->getCallback(" .
+ var_export($function, true) . ", 'block')";
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function blockIsCacheable(\Smarty\Smarty $smarty, $function): bool {
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php b/vendor/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php
new file mode 100644
index 000000000..e6d11384e
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Smarty\Compile;
+
+use Smarty\Compiler\Template;
+
+class DefaultHandlerFunctionCallCompiler extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ public $optional_attributes = ['_any'];
+
+ /**
+ * Compiles code for the execution of a registered function
+ *
+ * @param array $args array with attributes from parser
+ * @param Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of tag
+ * @param string $function name of function
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ unset($_attr['nocache']);
+
+ $_paramsArray = $this->formatParamsArray($_attr);
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+
+ $output = "\$_smarty_tpl->getSmarty()->getRuntime('DefaultPluginHandler')->getCallback(" . var_export($function, true) .
+ ",'function')($_params, \$_smarty_tpl)";
+
+ if (!empty($parameter['modifierlist'])) {
+ $output = $compiler->compileModifier($parameter['modifierlist'], $output);
+ }
+ return "<?php echo {$output};?>\n";
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/FunctionCallCompiler.php b/vendor/smarty/smarty/src/Compile/FunctionCallCompiler.php
new file mode 100644
index 000000000..107dd98bb
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/FunctionCallCompiler.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Registered Function
+ * Compiles code for the execution of a registered function
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile;
+
+use Smarty\Compiler\Template;
+use Smarty\CompilerException;
+
+/**
+ * Smarty Internal Plugin Compile Registered Function Class
+ *
+
+
+ */
+class FunctionCallCompiler extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ public $optional_attributes = ['_any'];
+
+ /**
+ * Shorttag attribute order defined by its names
+ *
+ * @var array
+ */
+ protected $shorttag_order = [];
+
+ /**
+ * Compiles code for the execution of a registered function
+ *
+ * @param array $args array with attributes from parser
+ * @param Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of tag
+ * @param string $function name of function
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ unset($_attr['nocache']);
+
+ $_paramsArray = $this->formatParamsArray($_attr);
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+
+
+ if ($functionHandler = $compiler->getSmarty()->getFunctionHandler($function)) {
+
+ // not cacheable?
+ $compiler->tag_nocache = $compiler->tag_nocache || !$functionHandler->isCacheable();
+ $output = "\$_smarty_tpl->getSmarty()->getFunctionHandler(" . var_export($function, true) . ")";
+ $output .= "->handle($_params, \$_smarty_tpl)";
+ } else {
+ $compiler->trigger_template_error("unknown function '{$function}'", null, true);
+ }
+
+ if (!empty($parameter['modifierlist'])) {
+ $output = $compiler->compileModifier($parameter['modifierlist'], $output);
+ }
+
+ return $output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php b/vendor/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php
new file mode 100644
index 000000000..0147651fd
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+
+class BCPluginWrapper extends Base {
+
+ private $callback;
+
+ public function __construct($callback) {
+ $this->callback = $callback;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return call_user_func($this->callback, $params, $compiler);
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/Base.php b/vendor/smarty/smarty/src/Compile/Modifier/Base.php
new file mode 100644
index 000000000..2ae572287
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/Base.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+
+use Smarty\Exception;
+
+abstract class Base implements ModifierCompilerInterface {
+
+ /**
+ * Compiles code for the modifier
+ *
+ * @param array $params array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ abstract public function compile($params, \Smarty\Compiler\Template $compiler);
+
+ /**
+ * evaluate compiler parameter
+ *
+ * @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 Exception if parameter is not a literal (but an expression, variable, …)
+ * @author Rodney Rehm
+ */
+ protected function 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 ])) {
+ throw new Exception(
+ '$param[' . $index .
+ '] is not a literal and is thus not evaluatable at compile time'
+ );
+ }
+ $t = null;
+ eval("\$t = " . $params[ $index ] . ";");
+ return $t;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php
new file mode 100644
index 000000000..21005d5be
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+
+/**
+ * Smarty cat modifier plugin
+ * Type: modifier
+ * Name: cat
+ * Date: Feb 24, 2003
+ * Purpose: catenate a value to a variable
+ * Input: string to catenate
+ * Example: {$var|cat:"foo"}
+ *
+ * @author Uwe Tews
+ */
+
+class CatModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return '(' . implode(').(', $params) . ')';
+ }
+
+}
+
+
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php
new file mode 100644
index 000000000..fb5f5ca33
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php
@@ -0,0 +1,21 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty count_characters modifier plugin
+ * Type: modifier
+ * Name: count_characters
+ * Purpose: count the number of characters in a text
+ *
+ * @author Uwe Tews
+ */
+
+class CountCharactersModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ if (!isset($params[ 1 ]) || $params[ 1 ] !== 'true') {
+ return 'preg_match_all(\'/[^\s]/' . \Smarty\Smarty::$_UTF8_MODIFIER . '\',' . $params[ 0 ] . ', $tmp)';
+ }
+ return 'mb_strlen((string) ' . $params[ 0 ] . ', \'' . addslashes(\Smarty\Smarty::$_CHARSET) . '\')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php
new file mode 100644
index 000000000..76552e073
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php
@@ -0,0 +1,19 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty count_paragraphs modifier plugin
+ * Type: modifier
+ * Name: count_paragraphs
+ * Purpose: count the number of paragraphs in a text
+ *
+ * @author Uwe Tews
+ */
+
+class CountParagraphsModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ // count \r or \n characters
+ return '(preg_match_all(\'#[\r\n]+#\', ' . $params[ 0 ] . ', $tmp)+1)';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php
new file mode 100644
index 000000000..bc7c43e1c
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php
@@ -0,0 +1,19 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty count_sentences modifier plugin
+ * Type: modifier
+ * Name: count_sentences
+ * Purpose: count the number of sentences in a text
+ *
+ * @author Uwe Tews
+ */
+
+class CountSentencesModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ // find periods, question marks, exclamation marks with a word before but not after.
+ return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . \Smarty\Smarty::$_UTF8_MODIFIER . '", ' . $params[ 0 ] . ', $tmp)';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php
new file mode 100644
index 000000000..c11d546d4
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php
@@ -0,0 +1,20 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty count_words modifier plugin
+ * Type: modifier
+ * Name: count_words
+ * Purpose: count the number of words in a text
+ *
+ * @author Uwe Tews
+ */
+
+class CountWordsModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592
+ return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . \Smarty\Smarty::$_UTF8_MODIFIER . '\', ' .
+ $params[ 0 ] . ', $tmp)';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php
new file mode 100644
index 000000000..3d82aa70c
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php
@@ -0,0 +1,26 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty default modifier plugin
+ * Type: modifier
+ * Name: default
+ * Purpose: designate default value for empty variables
+ *
+ * @author Uwe Tews
+ */
+
+class DefaultModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ $output = $params[ 0 ];
+ if (!isset($params[ 1 ])) {
+ $params[ 1 ] = "''";
+ }
+ array_shift($params);
+ foreach ($params as $param) {
+ $output = '(($tmp = ' . $output . ' ?? null)===null||$tmp===\'\' ? ' . $param . ' ?? null : $tmp)';
+ }
+ return $output;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php
new file mode 100644
index 000000000..6bb6c11c4
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php
@@ -0,0 +1,19 @@
+<?php
+namespace Smarty\Compile\Modifier;
+use Smarty\CompilerException;
+
+/**
+ * Smarty empty modifier plugin
+ */
+class EmptyModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+
+ if (count($params) !== 1) {
+ throw new CompilerException("Invalid number of arguments for empty. empty expects exactly 1 parameter.");
+ }
+
+ return 'empty(' . $params[0] . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php
new file mode 100644
index 000000000..4352359f0
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php
@@ -0,0 +1,66 @@
+<?php
+namespace Smarty\Compile\Modifier;
+
+use Smarty\Exception;
+
+/**
+ * Smarty escape modifier plugin
+ * Type: modifier
+ * Name: escape
+ * Purpose: escape string for output
+ *
+ * @author Rodney Rehm
+ */
+
+class EscapeModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ try {
+ $esc_type = $this->literal_compiler_param($params, 1, 'html');
+ $char_set = $this->literal_compiler_param($params, 2, \Smarty\Smarty::$_CHARSET);
+ $double_encode = $this->literal_compiler_param($params, 3, true);
+ if (!$char_set) {
+ $char_set = \Smarty\Smarty::$_CHARSET;
+ }
+ switch ($esc_type) {
+ case 'html':
+ case 'force':
+ // in case of auto-escaping, and without the 'force' option, no double-escaping
+ if ($compiler->getSmarty()->escape_html && $esc_type != 'force')
+ return $params[0];
+ // otherwise, escape the variable
+ return 'htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
+ var_export($double_encode, true) . ')';
+ // no break
+ case 'htmlall':
+ $compiler->setRawOutput(true);
+ return 'htmlentities(mb_convert_encoding((string)' . $params[ 0 ] . ', \'UTF-8\', ' .
+ var_export($char_set, true) . '), ENT_QUOTES, \'UTF-8\', ' .
+ var_export($double_encode, true) . ')';
+ // no break
+ case 'url':
+ $compiler->setRawOutput(true);
+ return 'rawurlencode((string)' . $params[ 0 ] . ')';
+ case 'urlpathinfo':
+ $compiler->setRawOutput(true);
+ return 'str_replace("%2F", "/", rawurlencode((string)' . $params[ 0 ] . '))';
+ case 'quotes':
+ $compiler->setRawOutput(true);
+ // escape unescaped single quotes
+ return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'", (string)' . $params[ 0 ] . ')';
+ case 'javascript':
+ $compiler->setRawOutput(true);
+ // escape quotes and backslashes, newlines, etc.
+ // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
+ return 'strtr((string)' .
+ $params[ 0 ] .
+ ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r",
+ "\\n" => "\\\n", "</" => "<\/", "<!--" => "<\!--", "<s" => "<\s", "<S" => "<\S",
+ "`" => "\\\\`", "\${" => "\\\\\\$\\{"))';
+ }
+ } catch (Exception $e) {
+ // pass through to regular plugin fallback
+ }
+ return '$_smarty_tpl->getSmarty()->getModifierCallback(\'escape\')(' . join(', ', $params) . ')';
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php
new file mode 100644
index 000000000..606fedf94
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php
@@ -0,0 +1,21 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty from_charset modifier plugin
+ * Type: modifier
+ * Name: from_charset
+ * Purpose: convert character encoding from $charset to internal encoding
+ *
+ * @author Rodney Rehm
+ */
+
+class FromCharsetModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ if (!isset($params[ 1 ])) {
+ $params[ 1 ] = '"ISO-8859-1"';
+ }
+ return 'mb_convert_encoding(' . $params[ 0 ] . ', "' . addslashes(\Smarty\Smarty::$_CHARSET) . '", ' . $params[ 1 ] . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php
new file mode 100644
index 000000000..353e757f0
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php
@@ -0,0 +1,24 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty indent modifier plugin
+ * Type: modifier
+ * Name: indent
+ * Purpose: indent lines of text
+ *
+ * @author Uwe Tews
+ */
+
+class IndentModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ if (!isset($params[ 1 ])) {
+ $params[ 1 ] = 4;
+ }
+ 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/vendor/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php
new file mode 100644
index 000000000..0e66bb521
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php
@@ -0,0 +1,19 @@
+<?php
+namespace Smarty\Compile\Modifier;
+use Smarty\CompilerException;
+
+/**
+ * Smarty is_array modifier plugin
+ */
+class IsArrayModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+
+ if (count($params) !== 1) {
+ throw new CompilerException("Invalid number of arguments for is_array. is_array expects exactly 1 parameter.");
+ }
+
+ return 'is_array(' . $params[0] . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php
new file mode 100644
index 000000000..0962fbfa3
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php
@@ -0,0 +1,25 @@
+<?php
+namespace Smarty\Compile\Modifier;
+use Smarty\CompilerException;
+
+/**
+ * Smarty isset modifier plugin
+ */
+class IssetModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+
+ $params = array_filter($params, function($v) { return !empty($v); });
+
+ if (count($params) < 1) {
+ throw new CompilerException("Invalid number of arguments for isset. isset expects at least one parameter.");
+ }
+
+ $tests = [];
+ foreach ($params as $param) {
+ $tests[] = 'null !== (' . $param . ' ?? null)';
+ }
+ return '(' . implode(' && ', $tests) . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php
new file mode 100644
index 000000000..4f191a31f
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+
+/**
+ * Smarty json_encode modifier plugin
+ */
+class JsonEncodeModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'json_encode(' . $params[0] . (isset($params[1]) ? ', (int) ' . $params[1] : '') . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php
new file mode 100644
index 000000000..62fc87e90
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php
@@ -0,0 +1,19 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty lower modifier plugin
+ * Type: modifier
+ * Name: lower
+ * Purpose: convert string to lowercase
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ */
+
+class LowerModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'mb_strtolower((string) ' . $params[ 0 ] . ', \'' . addslashes(\Smarty\Smarty::$_CHARSET) . '\')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php b/vendor/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php
new file mode 100644
index 000000000..0a39b819a
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+
+interface ModifierCompilerInterface {
+
+ /**
+ * Compiles code for the modifier
+ *
+ * @param array $params array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($params, \Smarty\Compiler\Template $compiler);
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php
new file mode 100644
index 000000000..c3b1aa533
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty nl2br modifier plugin
+ * Type: modifier
+ * Name: nl2br
+ * Purpose: insert HTML line breaks before all newlines in a string
+ *
+ */
+
+class Nl2brModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'nl2br((string) ' . $params[0] . ', (bool) ' . ($params[1] ?? true) . ')';
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php
new file mode 100644
index 000000000..c9401cfe0
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php
@@ -0,0 +1,18 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty noprint modifier plugin
+ * Type: modifier
+ * Name: noprint
+ * Purpose: return an empty string
+ *
+ * @author Uwe Tews
+ */
+
+class NoPrintModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return "''";
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php
new file mode 100644
index 000000000..c001bb1d4
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php
@@ -0,0 +1,21 @@
+<?php
+namespace Smarty\Compile\Modifier;
+
+use Smarty\Exception;
+
+/**
+ * Smarty raw modifier plugin
+ * Type: modifier
+ * Name: raw
+ * Purpose: when escaping is enabled by default, generates a raw output of a variable
+ *
+ * @author Amaury Bouchard
+ */
+
+class RawModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ $compiler->setRawOutput(true);
+ return ($params[0]);
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php
new file mode 100644
index 000000000..82476833e
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty round modifier plugin
+ * Type: modifier
+ * Name: round
+ * Purpose: Returns the rounded value of num to specified precision (number of digits after the decimal point)
+ *
+ */
+
+class RoundModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'round((float) ' . $params[0] . ', (int) ' . ($params[1] ?? 0) . ', (int) ' . ($params[2] ?? PHP_ROUND_HALF_UP) . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php
new file mode 100644
index 000000000..c33af3299
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php
@@ -0,0 +1,17 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty str_repeat modifier plugin
+ * Type: modifier
+ * Name: str_repeat
+ * Purpose: returns string repeated times times
+ *
+ */
+
+class StrRepeatModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'str_repeat((string) ' . $params[0] . ', (int) ' . $params[1] . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php
new file mode 100644
index 000000000..e662f0164
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php
@@ -0,0 +1,18 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty string_format modifier plugin
+ * Type: modifier
+ * Name: string_format
+ * Purpose: format strings via sprintf
+ *
+ * @author Uwe Tews
+ */
+
+class StringFormatModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'sprintf(' . $params[ 1 ] . ',' . $params[ 0 ] . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php
new file mode 100644
index 000000000..d85f83df3
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php
@@ -0,0 +1,24 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty strip modifier plugin
+ * Type: modifier
+ * Name: strip
+ * Purpose: Replace all repeated spaces, newlines, tabs
+ * with a single space or supplied replacement string.
+ * Example: {$var|strip} {$var|strip:"&nbsp;"}
+ * Date: September 25th, 2002
+ *
+ * @author Uwe Tews
+ */
+
+class StripModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ if (!isset($params[ 1 ])) {
+ $params[ 1 ] = "' '";
+ }
+ return "preg_replace('!\s+!" . \Smarty\Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})";
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php
new file mode 100644
index 000000000..dfd09437a
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php
@@ -0,0 +1,22 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty strip_tags modifier plugin
+ * Type: modifier
+ * Name: strip_tags
+ * Purpose: strip html tags from text
+ *
+ * @author Uwe Tews
+ */
+
+class StripTagsModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ if (!isset($params[ 1 ]) || $params[ 1 ] === true || trim($params[ 1 ], '"') === 'true') {
+ return "preg_replace('!<[^>]*?>!', ' ', (string) {$params[0]})";
+ } else {
+ return 'strip_tags((string) ' . $params[ 0 ] . ')';
+ }
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php
new file mode 100644
index 000000000..5cc666fd5
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty strlen modifier plugin
+ * Type: modifier
+ * Name: strlen
+ * Purpose: return the length of the given string
+ *
+ */
+
+class StrlenModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'strlen((string) ' . $params[0] . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php
new file mode 100644
index 000000000..8fb33ed77
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace Smarty\Compile\Modifier;
+
+/**
+ * Smarty substr modifier plugin
+ */
+class SubstrModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'substr((string) ' . $params[0] . ', (int) ' . $params[1] .
+ (isset($params[2]) ? ', (int) ' . $params[2] : '') . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php
new file mode 100644
index 000000000..67a5709d9
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php
@@ -0,0 +1,21 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty to_charset modifier plugin
+ * Type: modifier
+ * Name: to_charset
+ * Purpose: convert character encoding from internal encoding to $charset
+ *
+ * @author Rodney Rehm
+ */
+
+class ToCharsetModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ if (!isset($params[ 1 ])) {
+ $params[ 1 ] = '"ISO-8859-1"';
+ }
+ return 'mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 1 ] . ', "' . addslashes(\Smarty\Smarty::$_CHARSET) . '")';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php
new file mode 100644
index 000000000..1844ceb95
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php
@@ -0,0 +1,34 @@
+<?php
+namespace Smarty\Compile\Modifier;
+
+/**
+ * Smarty unescape modifier plugin
+ * Type: modifier
+ * Name: unescape
+ * Purpose: unescape html entities
+ *
+ * @author Rodney Rehm
+ */
+
+class UnescapeModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ $esc_type = $this->literal_compiler_param($params, 1, 'html');
+
+ if (!isset($params[ 2 ])) {
+ $params[ 2 ] = '\'' . addslashes(\Smarty\Smarty::$_CHARSET) . '\'';
+ }
+
+ switch ($esc_type) {
+ case 'entity':
+ case 'htmlall':
+ return 'html_entity_decode(mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 2 ] . ', \'UTF-8\'), ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ' . $params[ 2 ] . ')';
+ case 'html':
+ return 'htmlspecialchars_decode(' . $params[ 0 ] . ', ENT_QUOTES)';
+ case 'url':
+ return 'rawurldecode(' . $params[ 0 ] . ')';
+ default:
+ return $params[ 0 ];
+ }
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php
new file mode 100644
index 000000000..74e9a7024
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php
@@ -0,0 +1,18 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty upper modifier plugin
+ * Type: modifier
+ * Name: lower
+ * Purpose: convert string to uppercase
+ *
+ * @author Uwe Tews
+ */
+
+class UpperModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return 'mb_strtoupper((string) ' . $params[ 0 ] . ' ?? \'\', \'' . addslashes(\Smarty\Smarty::$_CHARSET) . '\')';
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php b/vendor/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php
new file mode 100644
index 000000000..092b95a80
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php
@@ -0,0 +1,27 @@
+<?php
+namespace Smarty\Compile\Modifier;
+/**
+ * Smarty wordwrap modifier plugin
+ * Type: modifier
+ * Name: wordwrap
+ * Purpose: wrap a string of text at a given length
+ *
+ * @author Uwe Tews
+ */
+
+class WordWrapModifierCompiler extends Base {
+
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ if (!isset($params[ 1 ])) {
+ $params[ 1 ] = 80;
+ }
+ if (!isset($params[ 2 ])) {
+ $params[ 2 ] = '"\n"';
+ }
+ if (!isset($params[ 3 ])) {
+ $params[ 3 ] = 'false';
+ }
+ return 'smarty_mb_wordwrap(' . $params[ 0 ] . ',' . $params[ 1 ] . ',' . $params[ 2 ] . ',' . $params[ 3 ] . ')';
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/ModifierCompiler.php b/vendor/smarty/smarty/src/Compile/ModifierCompiler.php
new file mode 100644
index 000000000..dfec3d777
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/ModifierCompiler.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Modifier
+ * Compiles code for modifier execution
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile;
+
+use Smarty\Compile\Base;
+use Smarty\Compiler\Template;
+use Smarty\CompilerException;
+
+/**
+ * Smarty Internal Plugin Compile Modifier Class
+ *
+
+
+ */
+class ModifierCompiler extends Base {
+
+ /**
+ * Compiles code for modifier execution
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ $output = $parameter['value'];
+
+ // loop over list of modifiers
+ foreach ($parameter['modifierlist'] as $single_modifier) {
+ /* @var string $modifier */
+ $modifier = $single_modifier[0];
+
+
+ $modifier_params = array_values($single_modifier);
+
+ $modifier_params[0] = $output;
+ $params = implode(',', $modifier_params);
+
+ if (!is_object($compiler->getSmarty()->security_policy)
+ || $compiler->getSmarty()->security_policy->isTrustedModifier($modifier, $compiler)
+ ) {
+
+ if ($handler = $compiler->getModifierCompiler($modifier)) {
+ $output = $handler->compile($modifier_params, $compiler);
+ } elseif ($compiler->getSmarty()->getModifierCallback($modifier)) {
+ $output = sprintf(
+ '$_smarty_tpl->getSmarty()->getModifierCallback(%s)(%s)',
+ var_export($modifier, true),
+ $params
+ );
+ } elseif ($callback = $compiler->getPluginFromDefaultHandler($modifier, \Smarty\Smarty::PLUGIN_MODIFIERCOMPILER)) {
+ $output = (new \Smarty\Compile\Modifier\BCPluginWrapper($callback))->compile($modifier_params, $compiler);
+ } elseif ($function = $compiler->getPluginFromDefaultHandler($modifier, \Smarty\Smarty::PLUGIN_MODIFIER)) {
+ if (!is_array($function)) {
+ $output = "{$function}({$params})";
+ } else {
+ $operator = is_object($function[0]) ? '->' : '::';
+ $output = $function[0] . $operator . $function[1] . '(' . $params . ')';
+ }
+ } else {
+ $compiler->trigger_template_error("unknown modifier '{$modifier}'", null, true);
+ }
+ }
+ }
+ return (string)$output;
+ }
+
+ /**
+ * Wether this class will be able to compile the given modifier.
+ * @param string $modifier
+ * @param Template $compiler
+ *
+ * @return bool
+ * @throws CompilerException
+ */
+ public function canCompileForModifier(string $modifier, \Smarty\Compiler\Template $compiler): bool {
+ return $compiler->getModifierCompiler($modifier)
+ || $compiler->getSmarty()->getModifierCallback($modifier)
+ || $compiler->getPluginFromDefaultHandler($modifier, \Smarty\Smarty::PLUGIN_MODIFIERCOMPILER)
+ || $compiler->getPluginFromDefaultHandler($modifier, \Smarty\Smarty::PLUGIN_MODIFIER);
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php b/vendor/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php
new file mode 100644
index 000000000..6c05c4220
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Object Block Function
+ * Compiles code for registered objects as block function
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile;
+
+/**
+ * Smarty Internal Plugin Compile Object Block Function Class
+ *
+
+
+ */
+class ObjectMethodBlockCompiler extends BlockCompiler {
+
+ /**
+ * @inheritDoc
+ */
+ protected function getIsCallableCode($tag, $function): string {
+ $callbackObject = "\$_smarty_tpl->getSmarty()->registered_objects['{$tag}'][0]";
+ return "(isset({$callbackObject}) && is_callable(array({$callbackObject}, '{$function}')))";
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function getFullCallbackCode($tag, $function): string {
+ $callbackObject = "\$_smarty_tpl->getSmarty()->registered_objects['{$tag}'][0]";
+ return "{$callbackObject}->{$function}";
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function blockIsCacheable(\Smarty\Smarty $smarty, $function): bool {
+ return true;
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php b/vendor/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php
new file mode 100644
index 000000000..70855cfc8
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Object Function
+ * Compiles code for registered objects as function
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile;
+
+/**
+ * Smarty Internal Plugin Compile Object Function Class
+ *
+
+
+ */
+class ObjectMethodCallCompiler extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $optional_attributes = ['_any'];
+
+ /**
+ * Compiles code for the execution of function plugin
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of function
+ * @param string $function name of method to call
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ unset($_attr['nocache']);
+ $_assign = null;
+ if (isset($_attr['assign'])) {
+ $_assign = $_attr['assign'];
+ unset($_attr['assign']);
+ }
+ // method or property ?
+ if (is_callable([$compiler->getSmarty()->registered_objects[$tag][0], $function])) {
+ // convert attributes into parameter array string
+ if ($compiler->getSmarty()->registered_objects[$tag][2]) {
+ $_paramsArray = $this->formatParamsArray($_attr);
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+ $output = "\$_smarty_tpl->getSmarty()->registered_objects['{$tag}'][0]->{$function}({$_params},\$_smarty_tpl)";
+ } else {
+ $_params = implode(',', $_attr);
+ $output = "\$_smarty_tpl->getSmarty()->registered_objects['{$tag}'][0]->{$function}({$_params})";
+ }
+ } else {
+ // object property
+ $output = "\$_smarty_tpl->getSmarty()->registered_objects['{$tag}'][0]->{$function}";
+ }
+ if (!empty($parameter['modifierlist'])) {
+ $output = $compiler->compileModifier($parameter['modifierlist'], $output);
+ }
+ if (empty($_assign)) {
+ return "<?php echo {$output};?>\n";
+ } else {
+ return "<?php \$_smarty_tpl->assign({$_assign},{$output});?>\n";
+ }
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/PrintExpressionCompiler.php b/vendor/smarty/smarty/src/Compile/PrintExpressionCompiler.php
new file mode 100644
index 000000000..3642551ee
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/PrintExpressionCompiler.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Print Expression
+ * Compiles any tag which will output an expression or variable
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile;
+
+use Smarty\Compile\Base;
+use Smarty\Compiler\BaseCompiler;
+
+/**
+ * Smarty Internal Plugin Compile Print Expression Class
+ *
+
+
+ */
+class PrintExpressionCompiler extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ public $optional_attributes = ['assign'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ protected $option_flags = ['nocache', 'nofilter'];
+
+ /**
+ * Compiles code for generating output from any expression
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $output = $parameter['value'];
+ // tag modifier
+ if (!empty($parameter['modifierlist'])) {
+ $output = $compiler->compileModifier($parameter['modifierlist'], $output);
+ }
+ if (isset($_attr['assign'])) {
+ // assign output to variable
+ return "<?php \$_smarty_tpl->assign({$_attr['assign']},{$output});?>";
+ } else {
+ // display value
+ if (!$_attr['nofilter']) {
+ // default modifier
+ if ($compiler->getSmarty()->getDefaultModifiers()) {
+ $modifierlist = [];
+ foreach ($compiler->getSmarty()->getDefaultModifiers() as $key => $single_default_modifier) {
+ preg_match_all(
+ '/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/',
+ $single_default_modifier,
+ $mod_array
+ );
+ for ($i = 0, $count = count($mod_array[0]); $i < $count; $i++) {
+ if ($mod_array[0][$i] !== ':') {
+ $modifierlist[$key][] = $mod_array[0][$i];
+ }
+ }
+ }
+
+ $output = $compiler->compileModifier($modifierlist, $output);
+ }
+
+ if ($compiler->getTemplate()->getSmarty()->escape_html && !$compiler->isRawOutput()) {
+ $output = "htmlspecialchars((string) ({$output}), ENT_QUOTES, '" . addslashes(\Smarty\Smarty::$_CHARSET) . "')";
+ }
+
+ }
+ $output = "<?php echo {$output};?>\n";
+ $compiler->setRawOutput(false);
+ }
+ return $output;
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Compile/SpecialVariableCompiler.php b/vendor/smarty/smarty/src/Compile/SpecialVariableCompiler.php
new file mode 100644
index 000000000..2b6cf4330
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/SpecialVariableCompiler.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Special Smarty Variable
+ * Compiles the special $smarty variables
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile;
+
+use Smarty\Compile\Base;
+use Smarty\Compile\Tag\Capture;
+use Smarty\Compile\Tag\ForeachTag;
+use Smarty\Compile\Tag\Section;
+use Smarty\Compiler\Template;
+use Smarty\CompilerException;
+
+/**
+ * Smarty Internal Plugin Compile special Smarty Variable Class
+ *
+
+
+ */
+class SpecialVariableCompiler extends Base {
+
+ /**
+ * Compiles code for the special $smarty variables
+ *
+ * @param array $args array with attributes from parser
+ * @param Template $compiler compiler object
+ * @param array $parameter
+ * @param null $tag
+ * @param null $function
+ *
+ * @return string compiled code
+ * @throws CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
+ $variable = smarty_strtolower_ascii($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->getSmarty()->security_policy)
+ || $compiler->getSmarty()->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)
+ ) {
+ switch ($variable) {
+ case 'foreach':
+ return (new ForeachTag())->compileSpecialVariable($compiler, $_index);
+ case 'section':
+ return (new Section())->compileSpecialVariable($compiler, $_index);
+ case 'capture':
+ return (new Capture())->compileSpecialVariable($compiler, $_index);
+ case 'now':
+ return 'time()';
+ case 'cookies':
+ if (isset($compiler->getSmarty()->security_policy)
+ && !$compiler->getSmarty()->security_policy->allow_super_globals
+ ) {
+ $compiler->trigger_template_error("(secure mode) super globals not permitted");
+ break;
+ }
+ $compiled_ref = '$_COOKIE';
+ break;
+ case 'get':
+ case 'post':
+ case 'env':
+ case 'server':
+ case 'session':
+ case 'request':
+ if (isset($compiler->getSmarty()->security_policy)
+ && !$compiler->getSmarty()->security_policy->allow_super_globals
+ ) {
+ $compiler->trigger_template_error("(secure mode) super globals not permitted");
+ break;
+ }
+ $compiled_ref = '$_' . smarty_strtoupper_ascii($variable);
+ break;
+ case 'template':
+ return '$_smarty_tpl->template_resource';
+ case 'template_object':
+ if (isset($compiler->getSmarty()->security_policy)) {
+ $compiler->trigger_template_error("(secure mode) template_object not permitted");
+ break;
+ }
+ return '$_smarty_tpl';
+ case 'current_dir':
+ return '$_smarty_current_dir';
+ case 'version':
+ return "\\Smarty\\Smarty::SMARTY_VERSION";
+ case 'const':
+ if (isset($compiler->getSmarty()->security_policy)
+ && !$compiler->getSmarty()->security_policy->allow_constants
+ ) {
+ $compiler->trigger_template_error("(secure mode) constants not permitted");
+ break;
+ }
+ if (strpos($_index[1], '$') === false && strpos($_index[1], '\'') === false) {
+ return "(defined('{$_index[1]}') ? constant('{$_index[1]}') : null)";
+ } else {
+ return "(defined({$_index[1]}) ? constant({$_index[1]}) : null)";
+ }
+ // no break
+ 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])";
+ }
+ // no break
+ case 'ldelim':
+ return "\$_smarty_tpl->getLeftDelimiter()";
+ case 'rdelim':
+ return "\$_smarty_tpl->getRightDelimiter()";
+ 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]";
+ }
+ }
+ return $compiled_ref;
+ }
+
+ return '';
+ }
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php b/vendor/smarty/smarty/src/Compile/Tag/Append.php
index 1a9befbf6..171f69600 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php
+++ b/vendor/smarty/smarty/src/Compile/Tag/Append.php
@@ -1,40 +1,46 @@
<?php
+
+namespace Smarty\Compile\Tag;
+
/**
* Smarty Internal Plugin Compile Append
* Compiles the {append} tag
*
- * @package Smarty
- * @subpackage Compiler
+
+
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Append Class
*
- * @package Smarty
- * @subpackage Compiler
+
+
*/
-class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
+class Append extends Assign
{
+
+ /**
+ * @inheritdoc
+ */
+ protected $optional_attributes = ['scope', 'index'];
+
/**
* Compiles code for the {append} tag
*
* @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param \Smarty\Compiler\Template $compiler compiler object
* @param array $parameter array with compilation parameter
*
* @return string compiled code
- * @throws \SmartyCompilerException
+ * @throws \Smarty\CompilerException
*/
- 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');
- $this->shorttag_order = array('var', 'value');
- $this->optional_attributes = array('scope', 'index');
- $this->mapCache = array();
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = array(), $tag = null, $function = null): string
+ {
+
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
+
// map to compile assign attributes
if (isset($_attr[ 'index' ])) {
$_params[ 'smarty_internal_index' ] = '[' . $_attr[ 'index' ] . ']';
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Assign.php b/vendor/smarty/smarty/src/Compile/Tag/Assign.php
new file mode 100644
index 000000000..8433a97e1
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Assign.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+use Smarty\Smarty;
+
+/**
+ * Smarty Internal Plugin Compile Assign
+ * Compiles the {assign} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Assign Class
+ *
+
+
+ */
+class Assign extends Base
+{
+ /**
+ * @inheritdoc
+ */
+ protected $required_attributes = ['var', 'value'];
+
+ /**
+ * @inheritdoc
+ */
+ protected $optional_attributes = ['scope'];
+
+ /**
+ * @inheritdoc
+ */
+ protected $shorttag_order = ['var', 'value'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $option_flags = array('nocache', 'noscope');
+
+ /**
+ * Compiles code for the {assign} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = array(), $tag = null, $function = null): string
+ {
+
+ $_nocache = false;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+
+ if ($_var = $compiler->getId($_attr[ 'var' ])) {
+ $_var = "'{$_var}'";
+ } else {
+ $_var = $_attr[ 'var' ];
+ }
+ if ($compiler->tag_nocache || $compiler->isNocacheActive()) {
+ $_nocache = true;
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($_attr[ 'var' ]);
+ }
+ // scope setup
+ if ($_attr[ 'noscope' ]) {
+ $_scope = -1;
+ } else {
+ $_scope = isset($_attr['scope']) ? $this->convertScope($_attr['scope']) : null;
+ }
+
+ if (isset($parameter[ 'smarty_internal_index' ])) {
+ $output =
+ "<?php \$_tmp_array = \$_smarty_tpl->getValue({$_var}) ?? [];\n";
+ $output .= "if (!(is_array(\$_tmp_array) || \$_tmp_array instanceof ArrayAccess)) {\n";
+ $output .= "settype(\$_tmp_array, 'array');\n";
+ $output .= "}\n";
+ $output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n";
+ $output .= "\$_smarty_tpl->assign({$_var}, \$_tmp_array, " . var_export($_nocache, true) . ", " . var_export($_scope, true) . ");?>";
+ } else {
+ $output = "<?php \$_smarty_tpl->assign({$_var}, {$_attr['value']}, " . var_export($_nocache, true) . ", " . var_export($_scope, true) . ");?>";
+ }
+ return $output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php b/vendor/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php
new file mode 100644
index 000000000..abd89f78f
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+class BCPluginWrapper extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $optional_attributes = array('_any');
+
+ private $callback;
+
+ public function __construct($callback, bool $cacheable = true) {
+ $this->callback = $callback;
+ $this->cacheable = $cacheable;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ return call_user_func($this->callback, $this->getAttributes($compiler, $args), $compiler->getSmarty());
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Block.php b/vendor/smarty/smarty/src/Compile/Tag/Block.php
new file mode 100644
index 000000000..d8b301006
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Block.php
@@ -0,0 +1,92 @@
+<?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.
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\ParseTree\Template;
+
+/**
+ * Smarty Internal Plugin Compile Block Class
+ *
+ * @author Uwe Tews <uwe.tews@googlemail.com>
+ */
+class Block extends Inheritance {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ public $required_attributes = ['name'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ public $shorttag_order = ['name'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $option_flags = ['hide', 'nocache'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ public $optional_attributes = ['assign'];
+
+ /**
+ * Compiles code for the {block} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = array(), $tag = null, $function = null): string
+ {
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->_cache['blockNesting'] = 0;
+ }
+ if ($compiler->_cache['blockNesting'] === 0) {
+ // make sure that inheritance gets initialized in template code
+ $this->registerInit($compiler);
+ $this->option_flags = ['hide', 'nocache', 'append', 'prepend'];
+ } else {
+ $this->option_flags = ['hide', 'nocache'];
+ }
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ ++$compiler->_cache['blockNesting'];
+ $_className = 'Block_' . preg_replace('![^\w]+!', '_', uniqid(mt_rand(), true));
+
+ $this->openTag(
+ $compiler,
+ 'block',
+ [
+ $_attr, $compiler->tag_nocache, $compiler->getParser()->current_buffer,
+ $compiler->getTemplate()->getCompiled()->getNocacheCode(), $_className
+ ]
+ );
+
+ $compiler->getParser()->current_buffer = new Template();
+ $compiler->getTemplate()->getCompiled()->setNocacheCode(false);
+ $compiler->suppressNocacheProcessing = true;
+ return '';
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/BlockClose.php b/vendor/smarty/smarty/src/Compile/Tag/BlockClose.php
new file mode 100644
index 000000000..586c7c050
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/BlockClose.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\ParseTree\Template;
+
+/**
+ * Smarty Internal Plugin Compile BlockClose Class
+ */
+class BlockClose extends Inheritance {
+
+ /**
+ * Compiles code for the {/block} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return bool true
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = array(), $tag = null, $function = null): string
+ {
+ [$_attr, $_nocache, $_buffer, $_has_nocache_code, $_className] = $this->closeTag($compiler, ['block']);
+
+ $_block = [];
+ if (isset($compiler->_cache['blockParams'])) {
+ $_block = $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']] ?? [];
+ unset($compiler->_cache['blockParams'][$compiler->_cache['blockNesting']]);
+ }
+
+ $_name = $_attr['name'];
+ $_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 ] = 'true';
+ }
+ }
+
+ // get compiled block code
+ $_functionCode = $compiler->getParser()->current_buffer;
+ // setup buffer for template function code
+ $compiler->getParser()->current_buffer = new Template();
+ $output = "<?php\n";
+ $output .= $compiler->cStyleComment(" {block {$_name}} ") . "\n";
+ $output .= "class {$_className} extends \\Smarty\\Runtime\\Block\n";
+ $output .= "{\n";
+ foreach ($_block as $property => $value) {
+ $output .= "public \${$property} = " . var_export($value, true) . ";\n";
+ }
+ $output .= "public function callBlock(\\Smarty\\Template \$_smarty_tpl) {\n";
+
+ $output .= (new \Smarty\Compiler\CodeFrame($compiler->getTemplate()))->insertLocalVariables();
+
+ if ($compiler->getTemplate()->getCompiled()->getNocacheCode()) {
+ $output .= "\$_smarty_tpl->getCached()->hashes['{$compiler->getTemplate()->getCompiled()->nocache_hash}'] = true;\n";
+ }
+ if (isset($_assign)) {
+ $output .= "ob_start();\n";
+ }
+ $output .= "?>\n";
+ $compiler->getParser()->current_buffer->append_subtree(
+ $compiler->getParser(),
+ new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ $output
+ )
+ );
+ $compiler->getParser()->current_buffer->append_subtree($compiler->getParser(), $_functionCode);
+ $output = "<?php\n";
+ if (isset($_assign)) {
+ $output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
+ }
+ $output .= "}\n";
+ $output .= "}\n";
+ $output .= $compiler->cStyleComment(" {/block {$_name}} ") . "\n\n";
+ $output .= "?>\n";
+ $compiler->getParser()->current_buffer->append_subtree(
+ $compiler->getParser(),
+ new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ $output
+ )
+ );
+ $compiler->blockOrFunctionCode .= $compiler->getParser()->current_buffer->to_smarty_php($compiler->getParser());
+
+ $compiler->getParser()->current_buffer = new Template();
+
+ // restore old status
+ $compiler->getTemplate()->getCompiled()->setNocacheCode($_has_nocache_code);
+ $compiler->tag_nocache = $_nocache;
+
+ $compiler->getParser()->current_buffer = $_buffer;
+ $output = "<?php \n";
+ if ($compiler->_cache['blockNesting'] === 1) {
+ $output .= "\$_smarty_tpl->getInheritance()->instanceBlock(\$_smarty_tpl, '$_className', $_name);\n";
+ } else {
+ $output .= "\$_smarty_tpl->getInheritance()->instanceBlock(\$_smarty_tpl, '$_className', $_name, \$this->tplIndex);\n";
+ }
+ $output .= "?>\n";
+ --$compiler->_cache['blockNesting'];
+ if ($compiler->_cache['blockNesting'] === 0) {
+ unset($compiler->_cache['blockNesting']);
+ }
+ $compiler->suppressNocacheProcessing = true;
+ return $output;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/BreakTag.php b/vendor/smarty/smarty/src/Compile/Tag/BreakTag.php
new file mode 100644
index 000000000..b8b554f3b
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/BreakTag.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Break
+ * Compiles the {break} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Break Class
+ *
+
+
+ */
+class BreakTag extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $optional_attributes = ['levels'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $shorttag_order = ['levels'];
+
+ /**
+ * Tag name may be overloaded by ContinueTag
+ *
+ * @var string
+ */
+ protected $tag = 'break';
+
+ /**
+ * Compiles code for the {break} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = array(), $tag = null, $function = null): string
+ {
+ [$levels, $foreachLevels] = $this->checkLevels($args, $compiler);
+ $output = "<?php ";
+ if ($foreachLevels > 0 && $this->tag === 'continue') {
+ $foreachLevels--;
+ }
+ if ($foreachLevels > 0) {
+ /* @var ForeachTag $foreachCompiler */
+ $foreachCompiler = $compiler->getTagCompiler('foreach');
+ $output .= $foreachCompiler->compileRestore($foreachLevels);
+ }
+ $output .= "{$this->tag} {$levels};?>";
+ return $output;
+ }
+
+ /**
+ * check attributes and return array of break and foreach levels
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return array
+ * @throws \Smarty\CompilerException
+ */
+ public function checkLevels($args, \Smarty\Compiler\Template $compiler) {
+ static $_is_loopy = ['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', null, true);
+ }
+ if (isset($_attr['levels'])) {
+ if (!is_numeric($_attr['levels'])) {
+ $compiler->trigger_template_error('level attribute must be a numeric constant', null, true);
+ }
+ $levels = $_attr['levels'];
+ } else {
+ $levels = 1;
+ }
+ $level_count = $levels;
+
+ $tagStack = $compiler->getTagStack();
+ $stack_count = count($tagStack) - 1;
+
+ $foreachLevels = 0;
+ $lastTag = '';
+ while ($level_count > 0 && $stack_count >= 0) {
+ if (isset($_is_loopy[$tagStack[$stack_count][0]])) {
+ $lastTag = $tagStack[$stack_count][0];
+ if ($level_count === 0) {
+ break;
+ }
+ $level_count--;
+ if ($tagStack[$stack_count][0] === 'foreach') {
+ $foreachLevels++;
+ }
+ }
+ $stack_count--;
+ }
+ if ($level_count !== 0) {
+ $compiler->trigger_template_error("cannot {$this->tag} {$levels} level(s)", null, true);
+ }
+ if ($lastTag === 'foreach' && $this->tag === 'break' && $foreachLevels > 0) {
+ $foreachLevels--;
+ }
+ return [$levels, $foreachLevels];
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Call.php b/vendor/smarty/smarty/src/Compile/Tag/Call.php
new file mode 100644
index 000000000..04f07a14a
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Call.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Function_Call
+ * Compiles the calls of user defined tags defined by {function}
+ *
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Function_Call Class
+ */
+class Call extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ public $required_attributes = ['name'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ public $shorttag_order = ['name'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ public $optional_attributes = ['_any'];
+
+ /**
+ * Compiles the calls of user defined tags defined by {function}
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ // save possible attributes
+ if (isset($_attr['assign'])) {
+ // output will be stored in a smarty variable instead of being displayed
+ $_assign = $_attr['assign'];
+ }
+ //$_name = trim($_attr['name'], "''");
+ $_name = $_attr['name'];
+ unset($_attr['name'], $_attr['assign'], $_attr['nocache']);
+ // set flag (compiled code of {function} must be included in cache file
+ if (!$compiler->getTemplate()->caching || $compiler->isNocacheActive() || $compiler->tag_nocache) {
+ $_nocache = 'true';
+ } else {
+ $_nocache = 'false';
+ }
+ $_paramsArray = $this->formatParamsArray($_attr);
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+ //$compiler->suppressNocacheProcessing = true;
+ // was there an assign attribute
+ if (isset($_assign)) {
+ $_output =
+ "<?php ob_start();\n\$_smarty_tpl->getSmarty()->getRuntime('TplFunction')->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});\n\$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
+ } else {
+ $_output =
+ "<?php \$_smarty_tpl->getSmarty()->getRuntime('TplFunction')->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});?>\n";
+ }
+ return $_output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Capture.php b/vendor/smarty/smarty/src/Compile/Tag/Capture.php
new file mode 100644
index 000000000..7b7362f9e
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Capture.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Capture Class
+ *
+
+
+ */
+class Capture extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ public $shorttag_order = ['name'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ public $optional_attributes = ['name', 'assign', 'append'];
+
+ /**
+ * Compiles code for the {$smarty.capture.xxx}
+ *
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public static function compileSpecialVariable(
+ \Smarty\Compiler\Template $compiler,
+ $parameter = null
+ ) {
+ return '$_smarty_tpl->getSmarty()->getRuntime(\'Capture\')->getBuffer($_smarty_tpl' .
+ (isset($parameter[1]) ? ", {$parameter[ 1 ]})" : ')');
+ }
+
+ /**
+ * Compiles code for the {capture} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param null $parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $buffer = $_attr['name'] ?? "'default'";
+ $assign = $_attr['assign'] ?? 'null';
+ $append = $_attr['append'] ?? 'null';
+
+ $compiler->_cache['capture_stack'][] = $compiler->tag_nocache;
+ if ($compiler->tag_nocache) {
+ // push a virtual {nocache} tag onto the stack.
+ $compiler->openTag('nocache');
+ }
+
+ return "<?php \$_smarty_tpl->getSmarty()->getRuntime('Capture')->open(\$_smarty_tpl, $buffer, $assign, $append);?>";
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/CaptureClose.php b/vendor/smarty/smarty/src/Compile/Tag/CaptureClose.php
new file mode 100644
index 000000000..c0d779692
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/CaptureClose.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Capture
+ * Compiles the {capture} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Captureclose Class
+ *
+
+
+ */
+class CaptureClose extends Base {
+
+ /**
+ * Compiles code for the {/capture} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param null $parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ if (array_pop($compiler->_cache['capture_stack'])) {
+ // pop the virtual {nocache} tag from the stack.
+ $compiler->closeTag('nocache');
+ $compiler->tag_nocache = true;
+ }
+
+ return "<?php \$_smarty_tpl->getSmarty()->getRuntime('Capture')->close(\$_smarty_tpl);?>";
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ConfigLoad.php b/vendor/smarty/smarty/src/Compile/Tag/ConfigLoad.php
new file mode 100644
index 000000000..8b4cf46d2
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ConfigLoad.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Config Load
+ * Compiles the {config load} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+use Smarty\Smarty;
+
+/**
+ * Smarty Internal Plugin Compile Config Load Class
+ *
+
+
+ */
+class ConfigLoad extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $required_attributes = ['file'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $shorttag_order = ['file', 'section'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $optional_attributes = ['section'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $option_flags = [];
+
+ /**
+ * Compiles code for the {config_load} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+
+ // save possible attributes
+ $conf_file = $_attr['file'];
+ $section = $_attr['section'] ?? 'null';
+
+ // create config object
+ return "<?php\n\$_smarty_tpl->configLoad({$conf_file}, {$section});\n?>\n";
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ContinueTag.php b/vendor/smarty/smarty/src/Compile/Tag/ContinueTag.php
new file mode 100644
index 000000000..82abe6cea
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ContinueTag.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Continue
+ * Compiles the {continue} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+/**
+ * Smarty Internal Plugin Compile Continue Class
+ *
+
+
+ */
+class ContinueTag extends BreakTag {
+
+ /**
+ * Tag name
+ *
+ * @var string
+ */
+ protected $tag = 'continue';
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Debug.php b/vendor/smarty/smarty/src/Compile/Tag/Debug.php
new file mode 100644
index 000000000..4542bd3cd
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Debug.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Debug
+ * Compiles the {debug} tag.
+ * It opens a window the the Smarty Debugging Console.
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Debug Class
+ *
+
+
+ */
+class Debug extends Base {
+
+ /**
+ * Compiles code for the {debug} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes, may trigger errors
+ $this->getAttributes($compiler, $args);
+
+ // compile always as nocache
+ $compiler->tag_nocache = true;
+ // display debug template
+ $_output =
+ "<?php \$_smarty_debug = new \\Smarty\\Debug;\n \$_smarty_debug->display_debug(\$_smarty_tpl);\n";
+ $_output .= "unset(\$_smarty_debug);\n?>";
+ return $_output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ElseIfTag.php b/vendor/smarty/smarty/src/Compile/Tag/ElseIfTag.php
new file mode 100644
index 000000000..8e59c3413
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ElseIfTag.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile ElseIf Class
+ *
+
+
+ */
+class ElseIfTag extends Base {
+
+ /**
+ * Compiles code for the {elseif} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ [$nesting, $nocache_pushed] = $this->closeTag($compiler, ['if', 'elseif']);
+
+ if (!isset($parameter['if condition'])) {
+ $compiler->trigger_template_error('missing elseif condition', null, true);
+ }
+ $assignCode = '';
+ $var = '';
+ if (is_array($parameter['if condition'])) {
+ $condition_by_assign = true;
+ if (is_array($parameter['if condition']['var'])) {
+ $var = $parameter['if condition']['var']['var'];
+ } else {
+ $var = $parameter['if condition']['var'];
+ }
+ if ($compiler->isNocacheActive()) {
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($var);
+ }
+ $prefixVar = $compiler->getNewPrefixVariable();
+ $assignCode = "<?php {$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]};?>\n";
+ $assignCompiler = new Assign();
+ $assignAttr = [];
+ $assignAttr[]['value'] = $prefixVar;
+ if (is_array($parameter['if condition']['var'])) {
+ $assignAttr[]['var'] = $parameter['if condition']['var']['var'];
+ $assignCode .= $assignCompiler->compile(
+ $assignAttr,
+ $compiler,
+ ['smarty_internal_index' => $parameter['if condition']['var']['smarty_internal_index']]
+ );
+ } else {
+ $assignAttr[]['var'] = $parameter['if condition']['var'];
+ $assignCode .= $assignCompiler->compile($assignAttr, $compiler, []);
+ }
+ } else {
+ $condition_by_assign = false;
+ }
+ $prefixCode = $compiler->getPrefixCode();
+ if (empty($prefixCode)) {
+ if ($condition_by_assign) {
+ $this->openTag($compiler, 'elseif', [$nesting + 1, $compiler->tag_nocache]);
+ $_output = $compiler->appendCode("<?php } else {\n?>", $assignCode);
+ return $compiler->appendCode($_output, "<?php if ({$prefixVar}) {?>");
+ } else {
+ $this->openTag($compiler, 'elseif', [$nesting, $nocache_pushed]);
+ return "<?php } elseif ({$parameter['if condition']}) {?>";
+ }
+ } else {
+ $_output = $compiler->appendCode("<?php } else {\n?>", $prefixCode);
+ $this->openTag($compiler, 'elseif', [$nesting + 1, $nocache_pushed]);
+ if ($condition_by_assign) {
+ $_output = $compiler->appendCode($_output, $assignCode);
+ return $compiler->appendCode($_output, "<?php if ({$prefixVar}) {?>");
+ } else {
+ return $compiler->appendCode($_output, "<?php if ({$parameter['if condition']}) {?>");
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ElseTag.php b/vendor/smarty/smarty/src/Compile/Tag/ElseTag.php
new file mode 100644
index 000000000..a7025da72
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ElseTag.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Else Class
+ *
+
+
+ */
+class ElseTag extends Base {
+
+ /**
+ * Compiles code for the {else} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ [$nesting, $compiler->tag_nocache] = $this->closeTag($compiler, ['if', 'elseif']);
+ $this->openTag($compiler, 'else', [$nesting, $compiler->tag_nocache]);
+ return '<?php } else { ?>';
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/EvalTag.php b/vendor/smarty/smarty/src/Compile/Tag/EvalTag.php
new file mode 100644
index 000000000..8396fd097
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/EvalTag.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Eval
+ * Compiles the {eval} tag.
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Eval Class
+ *
+
+
+ */
+class EvalTag extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ public $required_attributes = ['var'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ public $optional_attributes = ['assign'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ public $shorttag_order = ['var', 'assign'];
+
+ /**
+ * Compiles code for the {eval} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ if (isset($_attr['assign'])) {
+ // output will be stored in a smarty variable instead of being displayed
+ $_assign = $_attr['assign'];
+ }
+ // create template object
+ $_output =
+ "\$_template = new \\Smarty\\Template('eval:'.{$_attr[ 'var' ]}, \$_smarty_tpl->getSmarty(), \$_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 ?>";
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ExtendsTag.php b/vendor/smarty/smarty/src/Compile/Tag/ExtendsTag.php
new file mode 100644
index 000000000..0ec2cf2ba
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ExtendsTag.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile extend
+ * Compiles the {extends} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+/**
+ * Smarty Internal Plugin Compile extend Class
+ *
+
+
+ */
+class ExtendsTag extends Inheritance {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $required_attributes = ['file'];
+
+ /**
+ * Array of names of optional attribute required by tag
+ * use array('_any') if there is no restriction of attributes names
+ *
+ * @var array
+ */
+ protected $optional_attributes = [];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $shorttag_order = ['file'];
+
+ /**
+ * Compiles code for the {extends} tag extends: resource
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ if ($_attr['nocache'] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', $compiler->getParser()->lex->line - 1);
+ }
+ if (strpos($_attr['file'], '$_tmp') !== false) {
+ $compiler->trigger_template_error('illegal value for file attribute', $compiler->getParser()->lex->line - 1);
+ }
+ // add code to initialize inheritance
+ $this->registerInit($compiler, true);
+ $this->compileEndChild($compiler, $_attr['file']);
+ return '';
+ }
+
+ /**
+ * Add code for inheritance endChild() method to end of template
+ *
+ * @param \Smarty\Compiler\Template $compiler
+ * @param null|string $template optional inheritance parent template
+ *
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ private function compileEndChild(\Smarty\Compiler\Template $compiler, $template = null) {
+ $compiler->getParser()->template_postfix[] = new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ '<?php $_smarty_tpl->getInheritance()->endChild($_smarty_tpl' .
+ (isset($template) ? ", {$template}, \$_smarty_current_dir" : '') . ");\n?>"
+ );
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ForClose.php b/vendor/smarty/smarty/src/Compile/Tag/ForClose.php
new file mode 100644
index 000000000..189bcfd93
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ForClose.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile For
+ * Compiles the {for} {forelse} {/for} tags
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Forclose Class
+ *
+
+
+ */
+class ForClose extends Base {
+
+ /**
+ * 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
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting--;
+
+ [$openTag, $nocache_pushed] = $this->closeTag($compiler, ['for', 'forelse']);
+ $output = "<?php }\n";
+ if ($openTag !== 'forelse') {
+ $output .= "}\n";
+ }
+ $output .= "?>";
+
+ if ($nocache_pushed) {
+ // pop the pushed virtual nocache tag
+ $this->closeTag($compiler, 'nocache');
+ $compiler->tag_nocache = true;
+ }
+
+ return $output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ForElse.php b/vendor/smarty/smarty/src/Compile/Tag/ForElse.php
new file mode 100644
index 000000000..d939a72ab
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ForElse.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Forelse Class
+ *
+
+
+ */
+class ForElse extends Base {
+
+ /**
+ * 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
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ [$tagName, $nocache_pushed] = $this->closeTag($compiler, ['for']);
+ $this->openTag($compiler, 'forelse', ['forelse', $nocache_pushed]);
+ return "<?php }} else { ?>";
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ForTag.php b/vendor/smarty/smarty/src/Compile/Tag/ForTag.php
new file mode 100644
index 000000000..fdf71b681
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ForTag.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile For Class
+ *
+
+
+ */
+class ForTag extends Base {
+
+ /**
+ * Compiles code for the {for} tag
+ * Smarty supports 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.
+ *
+ * @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, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting++;
+ if ($parameter === 0) {
+ $this->required_attributes = ['start', 'to'];
+ $this->optional_attributes = ['max', 'step'];
+ } else {
+ $this->required_attributes = ['start', 'ifexp', 'var', 'step'];
+ $this->optional_attributes = [];
+ }
+
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $output = "<?php\n";
+ if ($parameter === 1) {
+ foreach ($_attr['start'] as $_statement) {
+ if (is_array($_statement['var'])) {
+ $var = $_statement['var']['var'];
+ $index = $_statement['var']['smarty_internal_index'];
+ } else {
+ $var = $_statement['var'];
+ $index = '';
+ }
+ $output .= "\$_smarty_tpl->assign($var, null);\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->value{$index} = {$_statement['value']};\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'];
+ if (is_array($_statement['var'])) {
+ $var = $_statement['var']['var'];
+ $index = $_statement['var']['smarty_internal_index'];
+ } else {
+ $var = $_statement['var'];
+ $index = '';
+ }
+ $output .= "\$_smarty_tpl->assign($var, null);";
+ if (isset($_attr['step'])) {
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];";
+ } else {
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;";
+ }
+ if (isset($_attr['max'])) {
+ $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[$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[$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 .= '?>';
+
+ if ($compiler->tag_nocache) {
+ // push a {nocache} tag onto the stack to prevent caching of this for loop
+ $this->openTag($compiler, 'nocache');
+ }
+
+ $this->openTag($compiler, 'for', ['for', $compiler->tag_nocache]);
+
+ return $output;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ForeachClose.php b/vendor/smarty/smarty/src/Compile/Tag/ForeachClose.php
new file mode 100644
index 000000000..e657c1d84
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ForeachClose.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Foreach
+ * Compiles the {foreach} {foreachelse} {/foreach} tags
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Foreachclose Class
+ *
+
+
+ */
+class ForeachClose extends Base {
+
+ /**
+ * Compiles code for the {/foreach} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting--;
+
+ [$openTag, $nocache_pushed, $localVariablePrefix, $item, $restore] = $this->closeTag($compiler, ['foreach', 'foreachelse']);
+
+ if ($nocache_pushed) {
+ // pop the pushed virtual nocache tag
+ $this->closeTag($compiler, 'nocache');
+ $compiler->tag_nocache = true;
+ }
+
+ $output = "<?php\n";
+ if ($restore) {
+ $output .= "\$_smarty_tpl->setVariable('{$item}', {$localVariablePrefix}Backup);\n";
+ }
+ $output .= "}\n";
+ /* @var \Smarty\Compile\Tag\ForeachTag $foreachCompiler */
+ $foreachCompiler = $compiler->getTagCompiler('foreach');
+ $output .= $foreachCompiler->compileRestore(1);
+ $output .= "?>";
+ return $output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ForeachElse.php b/vendor/smarty/smarty/src/Compile/Tag/ForeachElse.php
new file mode 100644
index 000000000..d48898473
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ForeachElse.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Foreachelse Class
+ *
+
+
+ */
+class ForeachElse extends Base {
+
+ /**
+ * Compiles code for the {foreachelse} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ [$openTag, $nocache_pushed, $localVariablePrefix, $item, $restore] = $this->closeTag($compiler, ['foreach']);
+ $this->openTag($compiler, 'foreachelse', ['foreachelse', $nocache_pushed, $localVariablePrefix, $item, false]);
+ $output = "<?php\n";
+ if ($restore) {
+ $output .= "\$_smarty_tpl->setVariable('{$item}', {$localVariablePrefix}Backup);\n";
+ }
+ $output .= "}\nif ({$localVariablePrefix}DoElse) {\n?>";
+ return $output;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ForeachSection.php b/vendor/smarty/smarty/src/Compile/Tag/ForeachSection.php
new file mode 100644
index 000000000..dd2574011
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ForeachSection.php
@@ -0,0 +1,206 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile ForeachSection
+ * Shared methods for {foreach} {section} tags
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile ForeachSection Class
+ *
+
+
+ */
+abstract class ForeachSection extends Base {
+
+ /**
+ * Name of this tag
+ *
+ * @var string
+ */
+ protected $tagName = '';
+
+ /**
+ * Valid properties of $smarty.xxx variable
+ *
+ * @var array
+ */
+ protected $nameProperties = [];
+
+ /**
+ * {section} tag has no item properties
+ *
+ * @var array
+ */
+ protected $itemProperties = null;
+
+ /**
+ * {section} tag has always name attribute
+ *
+ * @var bool
+ */
+ protected $isNamed = true;
+
+ /**
+ * @var array
+ */
+ protected $matchResults = [];
+
+ /**
+ * Preg search pattern
+ *
+ * @var string
+ */
+ private $propertyPreg = '';
+
+ /**
+ * Offsets in preg match result
+ *
+ * @var array
+ */
+ private $resultOffsets = [];
+
+ /**
+ * Start offset
+ *
+ * @var int
+ */
+ private $startOffset = 0;
+
+ /**
+ * Scan sources for used tag attributes
+ *
+ * @param array $attributes
+ * @param \Smarty\Compiler\Template $compiler
+ *
+ * @throws \Smarty\Exception
+ */
+ protected function scanForProperties($attributes, \Smarty\Compiler\Template $compiler) {
+ $this->propertyPreg = '~(';
+ $this->startOffset = 1;
+ $this->resultOffsets = [];
+ $this->matchResults = ['named' => [], 'item' => []];
+ if (isset($attributes['name'])) {
+ $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);
+ }
+
+ /**
+ * Build property preg string
+ *
+ * @param bool $named
+ * @param array $attributes
+ */
+ private function buildPropertyPreg($named, $attributes) {
+ if ($named) {
+ $this->resultOffsets['named'] = $this->startOffset = $this->startOffset + 3;
+ $this->propertyPreg .= "(([\$]smarty[.]{$this->tagName}[.]" .
+ ($this->tagName === 'section' ? "|[\[]\s*" : '') .
+ "){$attributes['name']}[.](";
+ $properties = $this->nameProperties;
+ } else {
+ $this->resultOffsets['item'] = $this->startOffset = $this->startOffset + 2;
+ $this->propertyPreg .= "([\$]{$attributes['item']}[@](";
+ $properties = $this->itemProperties;
+ }
+ $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
+ */
+ private function matchProperty($source) {
+ preg_match_all($this->propertyPreg, $source, $match);
+ foreach ($this->resultOffsets as $key => $offset) {
+ foreach ($match[$offset] as $m) {
+ if (!empty($m)) {
+ $this->matchResults[$key][smarty_strtolower_ascii($m)] = true;
+ }
+ }
+ }
+ }
+
+ /**
+ * Find matches in template source
+ *
+ * @param \Smarty\Compiler\Template $compiler
+ */
+ private function matchTemplateSource(\Smarty\Compiler\Template $compiler) {
+ $this->matchProperty($compiler->getParser()->lex->data);
+ }
+
+ /**
+ * Find matches in all parent template source
+ *
+ * @param \Smarty\Compiler\Template $compiler
+ *
+ * @throws \Smarty\Exception
+ */
+ private function matchParentTemplateSource(\Smarty\Compiler\Template $compiler) {
+ // search parent compiler template source
+ $nextCompiler = $compiler;
+ while ($nextCompiler !== $nextCompiler->getParentCompiler()) {
+ $nextCompiler = $nextCompiler->getParentCompiler();
+ if ($compiler !== $nextCompiler) {
+ // get template source
+ $_content = $nextCompiler->getTemplate()->getSource()->getContent();
+ if ($_content !== '') {
+ // run pre filter if required
+ $_content = $nextCompiler->getSmarty()->runPreFilters($_content, $nextCompiler->getTemplate());
+ $this->matchProperty($_content);
+ }
+ }
+ }
+ }
+
+ /**
+ * Compiles code for the {$smarty.foreach.xxx} or {$smarty.section.xxx}tag
+ *
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compileSpecialVariable(\Smarty\Compiler\Template $compiler, $parameter) {
+ $tag = smarty_strtolower_ascii(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]) ? smarty_strtolower_ascii($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 "(\$_smarty_tpl->getValue({$tagVar})['{$property}'] ?? null)";
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/ForeachTag.php b/vendor/smarty/smarty/src/Compile/Tag/ForeachTag.php
new file mode 100644
index 000000000..9f765af58
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/ForeachTag.php
@@ -0,0 +1,286 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+/**
+ * Smarty Internal Plugin Compile Foreach Class
+ *
+
+
+ */
+class ForeachTag extends ForeachSection {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $required_attributes = ['from', 'item'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $optional_attributes = ['name', 'key', 'properties'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $shorttag_order = ['from', 'item', 'key', 'name'];
+
+ /**
+ * counter
+ *
+ * @var int
+ */
+ private static $counter = 0;
+
+ /**
+ * Name of this tag
+ *
+ * @var string
+ */
+ protected $tagName = 'foreach';
+
+ /**
+ * Valid properties of $smarty.foreach.name.xxx variable
+ *
+ * @var array
+ */
+ protected $nameProperties = ['first', 'last', 'index', 'iteration', 'show', 'total'];
+
+ /**
+ * Valid properties of $item@xxx variable
+ *
+ * @var array
+ */
+ protected $itemProperties = ['first', 'last', 'index', 'iteration', 'show', 'total', 'key'];
+
+ /**
+ * Flag if tag had name attribute
+ *
+ * @var bool
+ */
+ protected $isNamed = false;
+
+ /**
+ * Compiles code for the {foreach} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting++;
+ // init
+ $this->isNamed = false;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $from = $_attr['from'];
+ $item = $compiler->getId($_attr['item']);
+ if ($item === false) {
+ $item = $this->getVariableName($_attr['item']);
+ }
+ $key = $name = null;
+ $attributes = ['item' => $item];
+ if (isset($_attr['key'])) {
+ $key = $compiler->getId($_attr['key']);
+ if ($key === false) {
+ $key = $this->getVariableName($_attr['key']);
+ }
+ $attributes['key'] = $key;
+ }
+ if (isset($_attr['name'])) {
+ $this->isNamed = true;
+ $name = $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 = $this->getVariableName($_attr['from']);
+ if ($fromName) {
+ foreach (['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->getVariable('{$item}')";
+ $localVariablePrefix = '$foreach' . self::$counter++;
+
+ // search for used tag attributes
+ $itemAttr = [];
+ $namedAttr = [];
+ $this->scanForProperties($attributes, $compiler);
+ if (!empty($this->matchResults['item'])) {
+ $itemAttr = $this->matchResults['item'];
+ }
+ if (!empty($this->matchResults['named'])) {
+ $namedAttr = $this->matchResults['named'];
+ }
+ if (isset($_attr['properties']) && preg_match_all('/[\'](.*?)[\']/', $_attr['properties'], $match)) {
+ foreach ($match[1] as $prop) {
+ if (in_array($prop, $this->itemProperties)) {
+ $itemAttr[$prop] = true;
+ } else {
+ $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
+ }
+ }
+ if ($this->isNamed) {
+ foreach ($match[1] as $prop) {
+ if (in_array($prop, $this->nameProperties)) {
+ $nameAttr[$prop] = true;
+ } else {
+ $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
+ }
+ }
+ }
+ }
+ if (isset($itemAttr['first'])) {
+ $itemAttr['index'] = true;
+ }
+ if (isset($namedAttr['first'])) {
+ $namedAttr['index'] = true;
+ }
+ if (isset($namedAttr['last'])) {
+ $namedAttr['iteration'] = true;
+ $namedAttr['total'] = true;
+ }
+ if (isset($itemAttr['last'])) {
+ $itemAttr['iteration'] = true;
+ $itemAttr['total'] = true;
+ }
+ if (isset($namedAttr['show'])) {
+ $namedAttr['total'] = true;
+ }
+ if (isset($itemAttr['show'])) {
+ $itemAttr['total'] = true;
+ }
+ $keyTerm = '';
+ if (isset($attributes['key'])) {
+ $keyTerm = "\$_smarty_tpl->getVariable('{$key}')->value => ";
+ }
+ if (isset($itemAttr['key'])) {
+ $keyTerm = "{$itemVar}->key => ";
+ }
+ if ($this->isNamed) {
+ $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']";
+ }
+ $needTotal = isset($itemAttr['total']);
+
+ if ($compiler->tag_nocache) {
+ // push a {nocache} tag onto the stack to prevent caching of this block
+ $this->openTag($compiler, 'nocache');
+ }
+
+ // Register tag
+ $this->openTag(
+ $compiler,
+ 'foreach',
+ ['foreach', $compiler->tag_nocache, $localVariablePrefix, $item, !empty($itemAttr)]
+ );
+
+ // generate output code
+ $output = "<?php\n";
+ $output .= "\$_from = \$_smarty_tpl->getSmarty()->getRuntime('Foreach')->init(\$_smarty_tpl, $from, " .
+ var_export($item, true);
+ if ($name || $needTotal || $key) {
+ $output .= ', ' . var_export($needTotal, true);
+ }
+ if ($name || $key) {
+ $output .= ', ' . var_export($key, true);
+ }
+ if ($name) {
+ $output .= ', ' . var_export($name, true) . ', ' . var_export($namedAttr, true);
+ }
+ $output .= ");\n";
+ if (isset($itemAttr['show'])) {
+ $output .= "{$itemVar}->show = ({$itemVar}->total > 0);\n";
+ }
+ if (isset($itemAttr['iteration'])) {
+ $output .= "{$itemVar}->iteration = 0;\n";
+ }
+ if (isset($itemAttr['index'])) {
+ $output .= "{$itemVar}->index = -1;\n";
+ }
+ $output .= "{$localVariablePrefix}DoElse = true;\n";
+ $output .= "foreach (\$_from ?? [] as {$keyTerm}{$itemVar}->value) {\n";
+ $output .= "{$localVariablePrefix}DoElse = false;\n";
+ if (isset($attributes['key']) && isset($itemAttr['key'])) {
+ $output .= "\$_smarty_tpl->assign('{$key}', {$itemVar}->key);\n";
+ }
+ if (isset($itemAttr['iteration'])) {
+ $output .= "{$itemVar}->iteration++;\n";
+ }
+ if (isset($itemAttr['index'])) {
+ $output .= "{$itemVar}->index++;\n";
+ }
+ if (isset($itemAttr['first'])) {
+ $output .= "{$itemVar}->first = !{$itemVar}->index;\n";
+ }
+ if (isset($itemAttr['last'])) {
+ $output .= "{$itemVar}->last = {$itemVar}->iteration === {$itemVar}->total;\n";
+ }
+ if (isset($foreachVar)) {
+ if (isset($namedAttr['iteration'])) {
+ $output .= "{$foreachVar}->value['iteration']++;\n";
+ }
+ if (isset($namedAttr['index'])) {
+ $output .= "{$foreachVar}->value['index']++;\n";
+ }
+ if (isset($namedAttr['first'])) {
+ $output .= "{$foreachVar}->value['first'] = !{$foreachVar}->value['index'];\n";
+ }
+ if (isset($namedAttr['last'])) {
+ $output .= "{$foreachVar}->value['last'] = {$foreachVar}->value['iteration'] === {$foreachVar}->value['total'];\n";
+ }
+ }
+ if (!empty($itemAttr)) {
+ $output .= "{$localVariablePrefix}Backup = clone \$_smarty_tpl->getVariable('{$item}');\n";
+ }
+ $output .= '?>';
+ return $output;
+ }
+
+ /**
+ * Get variable name from string
+ *
+ * @param string $input
+ *
+ * @return bool|string
+ */
+ private function getVariableName($input) {
+ if (preg_match('~^[$]_smarty_tpl->getValue\([\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*\]\)$~', $input, $match)) {
+ return $match[1];
+ }
+ return false;
+ }
+
+ /**
+ * Compiles code for to restore saved template variables
+ *
+ * @param int $levels number of levels to restore
+ *
+ * @return string compiled code
+ */
+ public function compileRestore($levels) {
+ return "\$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore(\$_smarty_tpl, {$levels});";
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/FunctionClose.php b/vendor/smarty/smarty/src/Compile/Tag/FunctionClose.php
new file mode 100644
index 000000000..aff6dc658
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/FunctionClose.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Function
+ * Compiles the {function} {/function} tags
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Functionclose Class
+ *
+
+
+ */
+class FunctionClose extends Base {
+
+ /**
+ * Compiler object
+ *
+ * @var object
+ */
+ private $compiler = null;
+
+ /**
+ * Compiles code for the {/function} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object|\Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $this->compiler = $compiler;
+ $saved_data = $this->closeTag($compiler, ['function']);
+ $_attr = $saved_data[0];
+ $_name = trim($_attr['name'], '\'"');
+ $parentCompiler = $compiler->getParentCompiler();
+ $parentCompiler->tpl_function[$_name]['compiled_filepath'] =
+ $parentCompiler->getTemplate()->getCompiled()->filepath;
+ $parentCompiler->tpl_function[$_name]['uid'] = $compiler->getTemplate()->getSource()->uid;
+ $_parameter = $_attr;
+ unset($_parameter['name']);
+ // default parameter
+ $_paramsArray = $this->formatParamsArray($_attr);
+
+ $_paramsCode = (new \Smarty\Compiler\CodeFrame($compiler->getTemplate()))->insertLocalVariables();
+
+ if (!empty($_paramsArray)) {
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+ $_paramsCode .= "\$params = array_merge($_params, \$params);\n";
+ }
+ $_functionCode = $compiler->getParser()->current_buffer;
+ // setup buffer for template function code
+ $compiler->getParser()->current_buffer = new \Smarty\ParseTree\Template();
+
+ $_funcName = "smarty_template_function_{$_name}_{$compiler->getTemplate()->getCompiled()->nocache_hash}";
+ $_funcNameCaching = $_funcName . '_nocache';
+
+ if ($compiler->getTemplate()->getCompiled()->getNocacheCode()) {
+ $parentCompiler->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching;
+ $output = "<?php\n";
+ $output .= $compiler->cStyleComment(" {$_funcNameCaching} ") . "\n";
+ $output .= "if (!function_exists('{$_funcNameCaching}')) {\n";
+ $output .= "function {$_funcNameCaching} (\\Smarty\\Template \$_smarty_tpl,\$params) {\n";
+
+ $output .= "ob_start();\n";
+ $output .= "\$_smarty_tpl->getCompiled()->setNocacheCode(true);\n";
+ $output .= $_paramsCode;
+ $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->assign(\$key, \$value);\n}\n";
+ $output .= "\$params = var_export(\$params, true);\n";
+ $output .= "echo \"/*%%SmartyNocache:{$compiler->getTemplate()->getCompiled()->nocache_hash}%%*/<?php ";
+ $output .= "\\\$_smarty_tpl->pushStack();\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->assign(\\\$key, \\\$value);\n}\n?>";
+ $output .= "/*/%%SmartyNocache:{$compiler->getTemplate()->getCompiled()->nocache_hash}%%*/\";?>";
+ $compiler->getParser()->current_buffer->append_subtree(
+ $compiler->getParser(),
+ new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ $output
+ )
+ );
+ $compiler->getParser()->current_buffer->append_subtree($compiler->getParser(), $_functionCode);
+ $output = "<?php echo \"/*%%SmartyNocache:{$compiler->getTemplate()->getCompiled()->nocache_hash}%%*/<?php ";
+ $output .= "\\\$_smarty_tpl->popStack();?>\n";
+ $output .= "/*/%%SmartyNocache:{$compiler->getTemplate()->getCompiled()->nocache_hash}%%*/\";\n?>";
+ $output .= "<?php echo str_replace('{$compiler->getTemplate()->getCompiled()->nocache_hash}', \$_smarty_tpl->getCompiled()->nocache_hash ?? '', ob_get_clean());\n";
+ $output .= "}\n}\n";
+ $output .= $compiler->cStyleComment("/ {$_funcName}_nocache ") . "\n\n";
+ $output .= "?>\n";
+ $compiler->getParser()->current_buffer->append_subtree(
+ $compiler->getParser(),
+ new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ $output
+ )
+ );
+ $_functionCode = new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ preg_replace_callback(
+ "/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->getTemplate()->getCompiled()->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->getTemplate()->getCompiled()->nocache_hash}%%\*\/';(\?>\n)?)/",
+ [$this, 'removeNocache'],
+ $_functionCode->to_smarty_php($compiler->getParser())
+ )
+ );
+ }
+ $parentCompiler->tpl_function[$_name]['call_name'] = $_funcName;
+ $output = "<?php\n";
+ $output .= $compiler->cStyleComment(" {$_funcName} ") . "\n";
+ $output .= "if (!function_exists('{$_funcName}')) {\n";
+ $output .= "function {$_funcName}(\\Smarty\\Template \$_smarty_tpl,\$params) {\n";
+ $output .= $_paramsCode;
+ $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->assign(\$key, \$value);\n}\n";
+ $output .= "?>\n";
+ $compiler->getParser()->current_buffer->append_subtree(
+ $compiler->getParser(),
+ new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ $output
+ )
+ );
+ $compiler->getParser()->current_buffer->append_subtree($compiler->getParser(), $_functionCode);
+ $output = "<?php\n}}\n";
+ $output .= $compiler->cStyleComment("/ {$_funcName} ") . "\n\n";
+ $output .= "?>\n";
+ $compiler->getParser()->current_buffer->append_subtree(
+ $compiler->getParser(),
+ new \Smarty\ParseTree\Tag(
+ $compiler->getParser(),
+ $output
+ )
+ );
+ $parentCompiler->blockOrFunctionCode .= $compiler->getParser()->current_buffer->to_smarty_php($compiler->getParser());
+ // restore old buffer
+ $compiler->getParser()->current_buffer = $saved_data[1];
+ // restore old status
+ $compiler->getTemplate()->getCompiled()->setNocacheCode($saved_data[2]);
+ $compiler->getTemplate()->caching = $saved_data[3];
+ return '';
+ }
+
+ /**
+ * Remove nocache code
+ *
+ * @param $match
+ *
+ * @return string
+ */
+ public function removeNocache($match) {
+ $hash = $this->compiler->getTemplate()->getCompiled()->nocache_hash;
+ $code =
+ preg_replace(
+ "/((<\?php )?echo '\/\*%%SmartyNocache:{$hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$hash}%%\*\/';(\?>\n)?)/",
+ '',
+ $match[0]
+ );
+ return str_replace(['\\\'', '\\\\\''], ['\'', '\\\''], $code);
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/FunctionTag.php b/vendor/smarty/smarty/src/Compile/Tag/FunctionTag.php
new file mode 100644
index 000000000..c291c3dee
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/FunctionTag.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Function Class
+ *
+
+
+ */
+class FunctionTag extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $required_attributes = ['name'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $shorttag_order = ['name'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $optional_attributes = ['_any'];
+
+ /**
+ * Compiles code for the {function} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ if ($_attr['nocache'] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
+ }
+ unset($_attr['nocache']);
+ $_name = trim($_attr['name'], '\'"');
+
+ if (!preg_match('/^[a-zA-Z0-9_\x80-\xff]+$/', $_name)) {
+ $compiler->trigger_template_error("Function name contains invalid characters: {$_name}", null, true);
+ }
+
+ $compiler->getParentCompiler()->tpl_function[$_name] = [];
+ $save = [
+ $_attr, $compiler->getParser()->current_buffer, $compiler->getTemplate()->getCompiled()->getNocacheCode(),
+ $compiler->getTemplate()->caching,
+ ];
+ $this->openTag($compiler, 'function', $save);
+ // Init temporary context
+ $compiler->getParser()->current_buffer = new \Smarty\ParseTree\Template();
+ $compiler->getTemplate()->getCompiled()->setNocacheCode(false);
+ return '';
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/IfClose.php b/vendor/smarty/smarty/src/Compile/Tag/IfClose.php
new file mode 100644
index 000000000..df15094f1
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/IfClose.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile If
+ * Compiles the {if} {else} {elseif} {/if} tags
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Ifclose Class
+ *
+
+
+ */
+class IfClose extends Base {
+
+ /**
+ * Compiles code for the {/if} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ [$nesting, $nocache_pushed] = $this->closeTag($compiler, ['if', 'else', 'elseif']);
+
+ if ($nocache_pushed) {
+ // pop the pushed virtual nocache tag
+ $this->closeTag($compiler, 'nocache');
+ $compiler->tag_nocache = true;
+ }
+
+ $tmp = '';
+ for ($i = 0; $i < $nesting; $i++) {
+ $tmp .= '}';
+ }
+ return "<?php {$tmp}?>";
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/IfTag.php b/vendor/smarty/smarty/src/Compile/Tag/IfTag.php
new file mode 100644
index 000000000..7790859b1
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/IfTag.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile If Class
+ *
+
+
+ */
+class IfTag extends Base {
+
+ /**
+ * Compiles code for the {if} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+
+ if ($compiler->tag_nocache) {
+ // push a {nocache} tag onto the stack to prevent caching of this block
+ $this->openTag($compiler, 'nocache');
+ }
+
+ $this->openTag($compiler, 'if', [1, $compiler->tag_nocache]);
+
+ if (!isset($parameter['if condition'])) {
+ $compiler->trigger_template_error('missing if condition', null, true);
+ }
+ if (is_array($parameter['if condition'])) {
+ if (is_array($parameter['if condition']['var'])) {
+ $var = $parameter['if condition']['var']['var'];
+ } else {
+ $var = $parameter['if condition']['var'];
+ }
+ if ($compiler->isNocacheActive()) {
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($var);
+ }
+ $prefixVar = $compiler->getNewPrefixVariable();
+ $_output = "<?php {$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]};?>\n";
+ $assignAttr = [];
+ $assignAttr[]['value'] = $prefixVar;
+ $assignCompiler = new Assign();
+ if (is_array($parameter['if condition']['var'])) {
+ $assignAttr[]['var'] = $parameter['if condition']['var']['var'];
+ $_output .= $assignCompiler->compile(
+ $assignAttr,
+ $compiler,
+ ['smarty_internal_index' => $parameter['if condition']['var']['smarty_internal_index']]
+ );
+ } else {
+ $assignAttr[]['var'] = $parameter['if condition']['var'];
+ $_output .= $assignCompiler->compile($assignAttr, $compiler, []);
+ }
+ $_output .= "<?php if ({$prefixVar}) {?>";
+ return $_output;
+ } else {
+ return "<?php if ({$parameter['if condition']}) {?>";
+ }
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/IncludeTag.php b/vendor/smarty/smarty/src/Compile/Tag/IncludeTag.php
new file mode 100644
index 000000000..8e775811e
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/IncludeTag.php
@@ -0,0 +1,189 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Include
+ * Compiles the {include} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+use Smarty\Compiler\Template;
+use Smarty\Data;
+use Smarty\Smarty;
+use Smarty\Template\Compiled;
+
+/**
+ * Smarty Internal Plugin Compile Include Class
+ *
+
+
+ */
+class IncludeTag extends Base {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ protected $required_attributes = ['file'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ protected $shorttag_order = ['file'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ protected $option_flags = ['nocache', 'inline', 'caching'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BaseCompiler
+ */
+ protected $optional_attributes = ['_any'];
+
+ /**
+ * Compiles code for the {include} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param Template $compiler compiler object
+ *
+ * @return string
+ * @throws \Exception
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $uid = $t_hash = null;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $fullResourceName = $source_resource = $_attr['file'];
+ $variable_template = false;
+ // parse resource_name
+ if (preg_match('/^([\'"])(([A-Za-z0-9_\-]{2,})[:])?(([^$()]+)|(.+))\1$/', $source_resource, $match)) {
+ $type = !empty($match[3]) ? $match[3] : $compiler->getTemplate()->getSmarty()->default_resource_type;
+ $name = !empty($match[5]) ? $match[5] : $match[6];
+ $handler = \Smarty\Resource\BasePlugin::load($compiler->getSmarty(), $type);
+ if ($handler->recompiled) {
+ $variable_template = true;
+ }
+ if (!$variable_template) {
+ if ($type !== 'string') {
+ $fullResourceName = "{$type}:{$name}";
+ $compiled = $compiler->getParentCompiler()->getTemplate()->getCompiled();
+ if (isset($compiled->includes[$fullResourceName])) {
+ $compiled->includes[$fullResourceName]++;
+ } else {
+ if ("{$compiler->getTemplate()->getSource()->type}:{$compiler->getTemplate()->getSource()->name}" ==
+ $fullResourceName
+ ) {
+ // recursive call of current template
+ $compiled->includes[$fullResourceName] = 2;
+ } else {
+ $compiled->includes[$fullResourceName] = 1;
+ }
+ }
+ $fullResourceName = $match[1] . $fullResourceName . $match[1];
+ }
+ }
+ }
+ // scope setup
+ $_scope = isset($_attr['scope']) ? $this->convertScope($_attr['scope']) : 0;
+
+ // assume caching is off
+ $_caching = Smarty::CACHING_OFF;
+
+ // caching was on and {include} is not in nocache mode
+ if ($compiler->getTemplate()->caching && !$compiler->isNocacheActive()) {
+ $_caching = \Smarty\Template::CACHING_NOCACHE_CODE;
+ }
+
+ /*
+ * 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.
+ *
+ */
+
+ $call_nocache = $compiler->isNocacheActive();
+ 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'];
+ $call_nocache = true;
+ $_caching = $_new_caching;
+ } else {
+ $_cache_lifetime = '$_smarty_tpl->cache_lifetime';
+ }
+ if (isset($_attr['cache_id'])) {
+ $_cache_id = $_attr['cache_id'];
+ $call_nocache = true;
+ $_caching = $_new_caching;
+ } else {
+ $_cache_id = '$_smarty_tpl->cache_id';
+ }
+
+ // assign attribute
+ if (isset($_attr['assign'])) {
+ // output will be stored in a smarty variable instead of being displayed
+ if ($_assign = $compiler->getId($_attr['assign'])) {
+ $_assign = "'{$_assign}'";
+ if ($call_nocache) {
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($_attr['assign']);
+ }
+ } else {
+ $_assign = $_attr['assign'];
+ }
+ }
+ $has_compiled_template = false;
+
+ // delete {include} standard attributes
+ unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']);
+ // remaining attributes must be assigned as smarty variable
+ $_vars = 'array()';
+ if (!empty($_attr)) {
+ $_pairs = [];
+ // create variables
+ foreach ($_attr as $key => $value) {
+ $_pairs[] = "'$key'=>$value";
+ }
+ $_vars = 'array(' . join(',', $_pairs) . ')';
+ }
+ if ($call_nocache) {
+ $compiler->tag_nocache = true;
+ }
+ $_output = "<?php ";
+ // was there an assign attribute
+ if (isset($_assign)) {
+ $_output .= "ob_start();\n";
+ }
+ $_output .= "\$_smarty_tpl->renderSubTemplate({$fullResourceName}, $_cache_id, \$_smarty_tpl->compile_id, " .
+ "$_caching, $_cache_lifetime, $_vars, (int) {$_scope}, \$_smarty_current_dir);\n";
+ if (isset($_assign)) {
+ $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean(), false, {$_scope});\n";
+ }
+ $_output .= "?>";
+ return $_output;
+ }
+
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php b/vendor/smarty/smarty/src/Compile/Tag/Inheritance.php
index d90262e60..6764651a1 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php
+++ b/vendor/smarty/smarty/src/Compile/Tag/Inheritance.php
@@ -1,44 +1,49 @@
<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
/**
* 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
+abstract class Inheritance extends Base
{
/**
* Compile inheritance initialization code as prefix
*
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param \Smarty\Compiler\Template $compiler
* @param bool|false $initChildSequence if true force child template
*/
- public static function postCompile(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false)
+ public static function postCompile(\Smarty\Compiler\Template $compiler, $initChildSequence = false)
{
- $compiler->prefixCompiledCode .= "<?php \$_smarty_tpl->_loadInheritance();\n\$_smarty_tpl->inheritance->init(\$_smarty_tpl, " .
+ $compiler->prefixCompiledCode .= "<?php \$_smarty_tpl->getInheritance()->init(\$_smarty_tpl, " .
var_export($initChildSequence, true) . ");\n?>\n";
}
/**
* Register post compile callback to compile inheritance initialization code
*
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param \Smarty\Compiler\Template $compiler
* @param bool|false $initChildSequence if true force child template
*/
- public function registerInit(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false)
+ public function registerInit(\Smarty\Compiler\Template $compiler, $initChildSequence = false)
{
if ($initChildSequence || !isset($compiler->_cache[ 'inheritanceInit' ])) {
$compiler->registerPostCompileCallback(
- array('Smarty_Internal_Compile_Shared_Inheritance', 'postCompile'),
+ array(self::class, 'postCompile'),
array($initChildSequence),
'inheritanceInit',
$initChildSequence
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Ldelim.php b/vendor/smarty/smarty/src/Compile/Tag/Ldelim.php
new file mode 100644
index 000000000..a265fa70c
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Ldelim.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Ldelim
+ * Compiles the {ldelim} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Ldelim Class
+ *
+
+
+ */
+class Ldelim extends Base {
+
+ /**
+ * Compiles code for the {ldelim} tag
+ * This tag does output the left delimiter
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $_attr = $this->getAttributes($compiler, $args);
+ if ($_attr['nocache'] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
+ }
+ return $compiler->getTemplate()->getLeftDelimiter();
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Nocache.php b/vendor/smarty/smarty/src/Compile/Tag/Nocache.php
new file mode 100644
index 000000000..dd30f8937
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Nocache.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Nocache Class
+ *
+
+
+ */
+class Nocache extends Base {
+
+ /**
+ * Array of names of valid option flags
+ *
+ * @var array
+ */
+ protected $option_flags = [];
+
+ /**
+ * 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 \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $this->openTag($compiler, 'nocache');
+ return '';
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/NocacheClose.php b/vendor/smarty/smarty/src/Compile/Tag/NocacheClose.php
new file mode 100644
index 000000000..75edd9982
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/NocacheClose.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Nocache
+ * Compiles the {nocache} {/nocache} tags.
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Nocacheclose Class
+ *
+
+
+ */
+class NocacheClose extends Base {
+
+ /**
+ * 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 \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $this->closeTag($compiler, ['nocache']);
+ return '';
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Rdelim.php b/vendor/smarty/smarty/src/Compile/Tag/Rdelim.php
new file mode 100644
index 000000000..60e7a23d1
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Rdelim.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Rdelim
+ * Compiles the {rdelim} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+/**
+ * Smarty Internal Plugin Compile Rdelim Class
+ *
+
+
+ */
+class Rdelim extends Ldelim {
+
+ /**
+ * Compiles code for the {rdelim} tag
+ * This tag does output the right delimiter.
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ parent::compile($args, $compiler);
+ return $compiler->getTemplate()->getRightDelimiter();
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Section.php b/vendor/smarty/smarty/src/Compile/Tag/Section.php
new file mode 100644
index 000000000..136591174
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Section.php
@@ -0,0 +1,399 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+/**
+ * Smarty Internal Plugin Compile Section Class
+ *
+
+
+ */
+class Section extends ForeachSection {
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $required_attributes = ['name', 'loop'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $shorttag_order = ['name', 'loop'];
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see BasePlugin
+ */
+ protected $optional_attributes = ['start', 'step', 'max', 'show', 'properties'];
+
+ /**
+ * counter
+ *
+ * @var int
+ */
+ protected $counter = 0;
+
+ /**
+ * Name of this tag
+ *
+ * @var string
+ */
+ protected $tagName = 'section';
+
+ /**
+ * Valid properties of $smarty.section.name.xxx variable
+ *
+ * @var array
+ */
+ protected $nameProperties = [
+ 'first', 'last', 'index', 'iteration', 'show', 'total', 'rownum', 'index_prev',
+ 'index_next', 'loop',
+ ];
+
+ /**
+ * {section} tag has no item properties
+ *
+ * @var array
+ */
+ protected $itemProperties = null;
+
+ /**
+ * {section} tag has always name attribute
+ *
+ * @var bool
+ */
+ protected $isNamed = true;
+
+ /**
+ * Compiles code for the {section} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ * @throws \Smarty\Exception
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting++;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $attributes = ['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']}']";
+
+ if ($compiler->tag_nocache) {
+ // push a {nocache} tag onto the stack to prevent caching of this block
+ $this->openTag($compiler, 'nocache');
+ }
+
+ $this->openTag($compiler, 'section', ['section', $compiler->tag_nocache]);
+
+ $initLocal = [];
+ $initNamedProperty = [];
+ $initFor = [];
+ $incFor = [];
+ $cmpFor = [];
+ $propValue = [
+ 'index' => "{$sectionVar}->value['index']", 'show' => 'true', 'step' => 1,
+ 'iteration' => "{$local}iteration",
+ ];
+ $propType = ['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'];
+ }
+ if (isset($_attr['properties']) && preg_match_all("/['](.*?)[']/", $_attr['properties'], $match)) {
+ foreach ($match[1] as $prop) {
+ if (in_array($prop, $this->nameProperties)) {
+ $namedAttr[$prop] = true;
+ } else {
+ $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
+ }
+ }
+ }
+ $namedAttr['index'] = true;
+ $output = "<?php\n";
+ foreach ($_attr as $attr_name => $attr_value) {
+ switch ($attr_name) {
+ case 'loop':
+ 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 ($t === 1) {
+ $initLocal['loop'] = $v;
+ $v = "{$local}loop";
+ }
+ break;
+ case 'show':
+ if (is_bool($attr_value)) {
+ $v = $attr_value ? 'true' : 'false';
+ $t = 0;
+ } else {
+ $v = "(bool) $attr_value";
+ $t = 3;
+ }
+ break;
+ 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':
+ 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($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($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($propValue['start'])) {
+ $start_code =
+ [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 = [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 =
+ [
+ 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 = [
+ 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 =
+ [
+ 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";
+ }
+ $initFor['index'] = "{$sectionVar}->value['index'] = {$propValue['start']}";
+ if (!isset($_attr['start']) && !isset($_attr['step']) && !isset($_attr['max'])) {
+ $propValue['total'] = $propValue['loop'];
+ $propType['total'] = $propType['loop'];
+ } else {
+ $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 = [
+ 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['loop'])) {
+ $initNamedProperty['loop'] = "'loop' => {$propValue['loop']}";
+ }
+ 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";
+ }
+ $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;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/SectionClose.php b/vendor/smarty/smarty/src/Compile/Tag/SectionClose.php
new file mode 100644
index 000000000..24c79c32a
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/SectionClose.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Section
+ * Compiles the {section} {sectionelse} {/section} tags
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Sectionclose Class
+ */
+class SectionClose extends Base {
+
+ /**
+ * Compiles code for the {/section} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting--;
+
+ [$openTag, $nocache_pushed] = $this->closeTag($compiler, ['section', 'sectionelse']);
+
+ if ($nocache_pushed) {
+ // pop the pushed virtual nocache tag
+ $this->closeTag($compiler, 'nocache');
+ }
+
+ $output = "<?php\n";
+ if ($openTag === 'sectionelse') {
+ $output .= "}\n";
+ } else {
+ $output .= "}\n}\n";
+ }
+ $output .= '?>';
+ return $output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/SectionElse.php b/vendor/smarty/smarty/src/Compile/Tag/SectionElse.php
new file mode 100644
index 000000000..b9ea56366
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/SectionElse.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Sectionelse Class
+ *
+
+
+ */
+class SectionElse extends Base {
+
+ /**
+ * Compiles code for the {sectionelse} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ [$openTag, $nocache_pushed] = $this->closeTag($compiler, ['section']);
+ $this->openTag($compiler, 'sectionelse', ['sectionelse', $nocache_pushed]);
+ return "<?php }} else {\n ?>";
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/Setfilter.php b/vendor/smarty/smarty/src/Compile/Tag/Setfilter.php
new file mode 100644
index 000000000..9da2f969c
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/Setfilter.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Setfilter Class
+ *
+
+
+ */
+class Setfilter extends Base {
+
+ /**
+ * Compiles code for setfilter tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->variable_filter_stack[] = $compiler->getSmarty()->getDefaultModifiers();
+
+ // The modifier_list is passed as an array of array's. The inner arrays have the modifier at index 0,
+ // and, possibly, parameters at subsequent indexes, e.g. [ ['escape','"mail"'] ]
+ // We will collapse them so the syntax is OK for ::setDefaultModifiers() as follows: [ 'escape:"mail"' ]
+ $newList = [];
+ foreach($parameter['modifier_list'] as $modifier) {
+ $newList[] = implode(':', $modifier);
+ }
+
+ $compiler->getSmarty()->setDefaultModifiers($newList);
+
+ return '';
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compile/Tag/SetfilterClose.php b/vendor/smarty/smarty/src/Compile/Tag/SetfilterClose.php
new file mode 100644
index 000000000..2814f641d
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/SetfilterClose.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Setfilter
+ * Compiles code for setfilter tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Setfilterclose Class
+ *
+
+
+ */
+class SetfilterClose extends Base {
+
+ /**
+ * 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 \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $this->getAttributes($compiler, $args);
+
+ // reset variable filter to previous state
+ $compiler->getSmarty()->setDefaultModifiers(
+ count($compiler->variable_filter_stack) ? array_pop($compiler->variable_filter_stack) : []
+ );
+
+ return '';
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/WhileClose.php b/vendor/smarty/smarty/src/Compile/Tag/WhileClose.php
new file mode 100644
index 000000000..5adb3a49b
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/WhileClose.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile While
+ * Compiles the {while} tag
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile Whileclose Class
+ *
+
+
+ */
+class WhileClose extends Base {
+
+ /**
+ * Compiles code for the {/while} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting--;
+
+ $nocache_pushed = $this->closeTag($compiler, ['while']);
+
+ if ($nocache_pushed) {
+ // pop the pushed virtual nocache tag
+ $this->closeTag($compiler, 'nocache');
+ $compiler->tag_nocache = true;
+ }
+
+ return "<?php }?>\n";
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compile/Tag/WhileTag.php b/vendor/smarty/smarty/src/Compile/Tag/WhileTag.php
new file mode 100644
index 000000000..3300b5075
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compile/Tag/WhileTag.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Smarty\Compile\Tag;
+
+use Smarty\Compile\Base;
+
+/**
+ * Smarty Internal Plugin Compile While Class
+ *
+
+
+ */
+class WhileTag extends Base {
+
+ /**
+ * Compiles code for the {while} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty\Compiler\Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \Smarty\CompilerException
+ */
+ public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = [], $tag = null, $function = null): string
+ {
+ $compiler->loopNesting++;
+
+ if ($compiler->tag_nocache) {
+ // push a {nocache} tag onto the stack to prevent caching of this block
+ $this->openTag($compiler, 'nocache');
+ }
+
+ $this->openTag($compiler, 'while', $compiler->tag_nocache);
+
+ if (!array_key_exists('if condition', $parameter)) {
+ $compiler->trigger_template_error('missing while condition', null, true);
+ }
+
+ if (is_array($parameter['if condition'])) {
+ if ($compiler->isNocacheActive()) {
+ // create nocache var to make it know for further compiling
+ if (is_array($parameter['if condition']['var'])) {
+ $var = $parameter['if condition']['var']['var'];
+ } else {
+ $var = $parameter['if condition']['var'];
+ }
+ $compiler->setNocacheInVariable($var);
+ }
+ $prefixVar = $compiler->getNewPrefixVariable();
+ $assignCompiler = new Assign();
+ $assignAttr = [];
+ $assignAttr[]['value'] = $prefixVar;
+ if (is_array($parameter['if condition']['var'])) {
+ $assignAttr[]['var'] = $parameter['if condition']['var']['var'];
+ $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
+ $_output .= $assignCompiler->compile(
+ $assignAttr,
+ $compiler,
+ ['smarty_internal_index' => $parameter['if condition']['var']['smarty_internal_index']]
+ );
+ } else {
+ $assignAttr[]['var'] = $parameter['if condition']['var'];
+ $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
+ $_output .= $assignCompiler->compile($assignAttr, $compiler, []);
+ }
+ return $_output;
+ } else {
+ return "<?php\n while ({$parameter['if condition']}) {?>";
+ }
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compiler/BaseCompiler.php b/vendor/smarty/smarty/src/Compiler/BaseCompiler.php
new file mode 100644
index 000000000..78c35a697
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compiler/BaseCompiler.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Smarty\Compiler;
+
+use Smarty\Smarty;
+
+abstract class BaseCompiler {
+
+ /**
+ * Smarty object
+ *
+ * @var Smarty
+ */
+ protected $smarty = null;
+
+ /**
+ * @return Smarty|null
+ */
+ public function getSmarty(): Smarty {
+ return $this->smarty;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Compiler/CodeFrame.php b/vendor/smarty/smarty/src/Compiler/CodeFrame.php
new file mode 100644
index 000000000..d0e1cc120
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compiler/CodeFrame.php
@@ -0,0 +1,126 @@
+<?php
+
+namespace Smarty\Compiler;
+
+use Smarty\Exception;
+
+/**
+ * Smarty Internal Extension
+ * This file contains the Smarty template extension to create a code frame
+ *
+ * @author Uwe Tews
+ */
+
+/**
+ * Create code frame for compiled and cached templates
+ */
+class CodeFrame
+{
+
+ /**
+ * @var \Smarty\Template
+ */
+ private $_template;
+
+ public function __construct(\Smarty\Template $_template) {
+ $this->_template = $_template;
+ }
+
+ /**
+ * Create code frame for compiled and cached templates
+ *
+ * @param string $content optional template content
+ * @param string $functions compiled template function and block code
+ * @param bool $cache flag for cache file
+ * @param Template|null $compiler
+ *
+ * @return string
+ * @throws Exception
+*/
+ public function create(
+ $content = '',
+ $functions = '',
+ $cache = false,
+ ?\Smarty\Compiler\Template $compiler = null
+ ) {
+ // build property code
+ $properties[ 'version' ] = \Smarty\Smarty::SMARTY_VERSION;
+ $properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
+ if (!$cache) {
+ $properties[ 'has_nocache_code' ] = $this->_template->getCompiled()->getNocacheCode();
+ $properties[ 'file_dependency' ] = $this->_template->getCompiled()->file_dependency;
+ $properties[ 'includes' ] = $this->_template->getCompiled()->includes;
+ } else {
+ $properties[ 'has_nocache_code' ] = $this->_template->getCached()->getNocacheCode();
+ $properties[ 'file_dependency' ] = $this->_template->getCached()->file_dependency;
+ $properties[ 'cache_lifetime' ] = $this->_template->cache_lifetime;
+ }
+ $output = sprintf(
+ "<?php\n/* Smarty version %s, created on %s\n from '%s' */\n\n",
+ $properties[ 'version' ],
+ date("Y-m-d H:i:s"),
+ str_replace('*/', '* /', $this->_template->getSource()->getFullResourceName())
+ );
+ $output .= "/* @var \\Smarty\\Template \$_smarty_tpl */\n";
+ $dec = "\$_smarty_tpl->" . ($cache ? "getCached()" : "getCompiled()");
+ $dec .= "->isFresh(\$_smarty_tpl, " . var_export($properties, true) . ')';
+ $output .= "if ({$dec}) {\n";
+ $output .= "function {$properties['unifunc']} (\\Smarty\\Template \$_smarty_tpl) {\n";
+
+ $output .= $this->insertLocalVariables();
+
+ if (!$cache && !empty($compiler->tpl_function)) {
+ $output .= '$_smarty_tpl->getSmarty()->getRuntime(\'TplFunction\')->registerTplFunctions($_smarty_tpl, ';
+ $output .= var_export($compiler->tpl_function, true);
+ $output .= ");\n";
+ }
+ if ($cache && $this->_template->getSmarty()->hasRuntime('TplFunction')) {
+ if ($tplfunctions = $this->_template->getSmarty()->getRuntime('TplFunction')->getTplFunction($this->_template)) {
+ $output .= "\$_smarty_tpl->getSmarty()->getRuntime('TplFunction')->registerTplFunctions(\$_smarty_tpl, " .
+ var_export($tplfunctions, true) . ");\n";
+ }
+ }
+ $output .= "?>";
+ $output .= $content;
+ $output .= "<?php }\n?>";
+ $output .= $functions;
+ $output .= "<?php }\n";
+ // remove unneeded PHP tags
+ if (preg_match('/\s*\?>[\n]?<\?php\s*/', $output)) {
+ $curr_split = preg_split(
+ '/\s*\?>[\n]?<\?php\s*/',
+ $output
+ );
+ preg_match_all(
+ '/\s*\?>[\n]?<\?php\s*/',
+ $output,
+ $curr_parts
+ );
+ $output = '';
+ foreach ($curr_split as $idx => $curr_output) {
+ $output .= $curr_output;
+ if (isset($curr_parts[ 0 ][ $idx ])) {
+ $output .= "\n";
+ }
+ }
+ }
+ if (preg_match('/\?>\s*$/', $output)) {
+ $curr_split = preg_split(
+ '/\?>\s*$/',
+ $output
+ );
+ $output = '';
+ foreach ($curr_split as $idx => $curr_output) {
+ $output .= $curr_output;
+ }
+ }
+ return $output;
+ }
+
+ /**
+ * @return string
+ */
+ public function insertLocalVariables(): string {
+ return '$_smarty_current_dir = ' . var_export(dirname($this->_template->getSource()->getFilepath() ?? '.'), true) . ";\n";
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compiler/Configfile.php b/vendor/smarty/smarty/src/Compiler/Configfile.php
new file mode 100644
index 000000000..84c14f9e7
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compiler/Configfile.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * Smarty Internal Plugin Config File Compiler
+ * This is the config file compiler class. It calls the lexer and parser to
+ * perform the compiling.
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compiler;
+use Smarty\Lexer\ConfigfileLexer;
+use Smarty\Parser\ConfigfileParser;
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\CompilerException;
+
+/**
+ * Main config file compiler class
+ *
+
+
+ */
+class Configfile extends BaseCompiler {
+
+ /**
+ * Lexer object
+ *
+ * @var ConfigfileLexer
+ */
+ public $lex;
+
+ /**
+ * Parser object
+ *
+ * @var ConfigfileParser
+ */
+ public $parser;
+
+ /**
+ * Smarty object
+ *
+ * @var Smarty object
+ */
+ public $smarty;
+
+ /**
+ * Smarty object
+ *
+ * @var Template object
+ */
+ public $template;
+
+ /**
+ * Compiled config data sections and variables
+ *
+ * @var array
+ */
+ public $config_data = [];
+
+ /**
+ * Initialize compiler
+ *
+ * @param Smarty $smarty global instance
+ */
+ public function __construct(Smarty $smarty) {
+ $this->smarty = $smarty;
+ $this->config_data['sections'] = [];
+ $this->config_data['vars'] = [];
+ }
+
+ /**
+ * Method to compile Smarty config source.
+ *
+ * @param Template $template
+ *
+ * @return bool true if compiling succeeded, false if it failed
+ * @throws \Smarty\Exception
+ */
+ public function compileTemplate(Template $template) {
+ $this->template = $template;
+ $this->template->getCompiled()->file_dependency[$this->template->getSource()->uid] =
+ [
+ $this->template->getSource()->getResourceName(),
+ $this->template->getSource()->getTimeStamp(),
+ $this->template->getSource()->type,
+ ];
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->start_compile($this->template);
+ }
+ // init the lexer/parser to compile the config file
+ /* @var ConfigfileLexer $this->lex */
+ $this->lex = new ConfigfileLexer(
+ str_replace(
+ [
+ "\r\n",
+ "\r",
+ ],
+ "\n",
+ $template->getSource()->getContent()
+ ) . "\n",
+ $this
+ );
+
+ $this->parser = new ConfigfileParser($this->lex, $this);
+ if ($this->smarty->_parserdebug) {
+ $this->parser->PrintTrace();
+ }
+ // get tokens from lexer and parse them
+ while ($this->lex->yylex()) {
+ if ($this->smarty->_parserdebug) {
+ echo "Parsing {$this->parser->yyTokenName[$this->lex->token]} Token {$this->lex->value} Line {$this->lex->line} \n";
+ }
+ $this->parser->doParse($this->lex->token, $this->lex->value);
+ }
+ // finish parsing process
+ $this->parser->doParse(0, 0);
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->end_compile($this->template);
+ }
+ // template header code
+ $template_header = sprintf(
+ "<?php /* Smarty version %s, created on %s\n compiled from '%s' */ ?>\n",
+ \Smarty\Smarty::SMARTY_VERSION,
+ date("Y-m-d H:i:s"),
+ str_replace('*/', '* /', $this->template->getSource()->getFullResourceName())
+ );
+ $code = '<?php $_smarty_tpl->parent->assignConfigVars(' .
+ var_export($this->config_data, true) . ', $_smarty_tpl->getValue("sections")); ?>';
+ return $template_header . $this->template->createCodeFrame($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 expected tokens.
+ * If parameter $args contains a string this is used as error message
+ *
+ * @param string $args individual error message or null
+ *
+ * @throws CompilerException
+ */
+ public function trigger_config_file_error($args = null) {
+ // 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->template->getSource()->getFullResourceName()}' on line {$line} '{$match[$line - 1]}' ";
+ if (isset($args)) {
+ // individual error message
+ $error_text .= $args;
+ } else {
+ // 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])) {
+ // token type from lexer
+ $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"';
+ } else {
+ // otherwise internal token name
+ $expect[] = $this->parser->yyTokenName[$token];
+ }
+ }
+ // output parser error message
+ $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);
+ }
+ throw new CompilerException($error_text);
+ }
+}
diff --git a/vendor/smarty/smarty/src/Compiler/Template.php b/vendor/smarty/smarty/src/Compiler/Template.php
new file mode 100644
index 000000000..237407c63
--- /dev/null
+++ b/vendor/smarty/smarty/src/Compiler/Template.php
@@ -0,0 +1,1512 @@
+<?php
+/**
+ * Smarty Internal Plugin Smarty Template Compiler Base
+ * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty\Compiler;
+
+use Smarty\Compile\BlockCompiler;
+use Smarty\Compile\DefaultHandlerBlockCompiler;
+use Smarty\Compile\DefaultHandlerFunctionCallCompiler;
+use Smarty\Compile\ModifierCompiler;
+use Smarty\Compile\ObjectMethodBlockCompiler;
+use Smarty\Compile\ObjectMethodCallCompiler;
+use Smarty\Compile\FunctionCallCompiler;
+use Smarty\Compile\PrintExpressionCompiler;
+use Smarty\Lexer\TemplateLexer;
+use Smarty\Parser\TemplateParser;
+use Smarty\Smarty;
+use Smarty\Compile\Tag\ExtendsTag;
+use Smarty\CompilerException;
+use Smarty\Exception;
+use function array_merge;
+use function is_array;
+use function strlen;
+use function substr;
+
+/**
+ * Class SmartyTemplateCompiler
+ *
+
+
+ */
+class Template extends BaseCompiler {
+
+ /**
+ * counter for prefix variable number
+ *
+ * @var int
+ */
+ public static $prefixVariableNumber = 0;
+
+ /**
+ * Parser object
+ *
+ * @var \Smarty\Parser\TemplateParser
+ */
+ private $parser = null;
+
+ /**
+ * hash for nocache sections
+ *
+ * @var mixed
+ */
+ public $nocache_hash = null;
+
+ /**
+ * suppress generation of nocache code
+ *
+ * @var bool
+ */
+ public $suppressNocacheProcessing = false;
+
+ /**
+ * caching enabled (copied from template object)
+ *
+ * @var int
+ */
+ public $caching = 0;
+
+ /**
+ * tag stack
+ *
+ * @var array
+ */
+ private $_tag_stack = [];
+
+ /**
+ * tag stack count
+ *
+ * @var array
+ */
+ private $_tag_stack_count = [];
+
+ /**
+ * current template
+ *
+ * @var \Smarty\Template
+ */
+ private $template = null;
+
+ /**
+ * merged included sub template data
+ *
+ * @var array
+ */
+ public $mergedSubTemplatesData = [];
+
+ /**
+ * merged sub template code
+ *
+ * @var array
+ */
+ public $mergedSubTemplatesCode = [];
+
+ /**
+ * 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 $trace_filepath = '';
+
+ /**
+ * Template functions
+ *
+ * @var array
+ */
+ public $tpl_function = [];
+
+ /**
+ * compiled template or block function code
+ *
+ * @var string
+ */
+ public $blockOrFunctionCode = '';
+
+ /**
+ * flags for used modifier plugins
+ *
+ * @var array
+ */
+ public $modifier_plugins = [];
+
+ /**
+ * parent compiler object for merged subtemplates and template functions
+ *
+ * @var \Smarty\Compiler\Template
+ */
+ private $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 = [];
+
+ /**
+ * Prefix code stack
+ *
+ * @var array
+ */
+ public $prefixCodeStack = [];
+
+ /**
+ * A variable string was compiled
+ *
+ * @var bool
+ */
+ public $has_variable_string = false;
+
+ /**
+ * Stack for {setfilter} {/setfilter}
+ *
+ * @var array
+ */
+ public $variable_filter_stack = [];
+
+ /**
+ * 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 ]*!';
+
+ /**
+ * General storage area for tag compiler plugins
+ *
+ * @var array
+ */
+ public $_cache = array();
+
+ /**
+ * Lexer preg pattern for left delimiter
+ *
+ * @var string
+ */
+ private $ldelPreg = '[{]';
+
+ /**
+ * Lexer preg pattern for right delimiter
+ *
+ * @var string
+ */
+ private $rdelPreg = '[}]';
+
+ /**
+ * Length of right delimiter
+ *
+ * @var int
+ */
+ private $rdelLength = 0;
+
+ /**
+ * Length of left delimiter
+ *
+ * @var int
+ */
+ private $ldelLength = 0;
+
+ /**
+ * Lexer preg pattern for user literals
+ *
+ * @var string
+ */
+ private $literalPreg = '';
+
+ /**
+ * array of callbacks called when the normal compile process of template is finished
+ *
+ * @var array
+ */
+ public $postCompileCallbacks = [];
+
+ /**
+ * prefix code
+ *
+ * @var string
+ */
+ public $prefixCompiledCode = '';
+
+ /**
+ * postfix code
+ *
+ * @var string
+ */
+ public $postfixCompiledCode = '';
+ /**
+ * @var ObjectMethodBlockCompiler
+ */
+ private $objectMethodBlockCompiler;
+ /**
+ * @var DefaultHandlerBlockCompiler
+ */
+ private $defaultHandlerBlockCompiler;
+ /**
+ * @var BlockCompiler
+ */
+ private $blockCompiler;
+ /**
+ * @var DefaultHandlerFunctionCallCompiler
+ */
+ private $defaultHandlerFunctionCallCompiler;
+ /**
+ * @var FunctionCallCompiler
+ */
+ private $functionCallCompiler;
+ /**
+ * @var ObjectMethodCallCompiler
+ */
+ private $objectMethodCallCompiler;
+ /**
+ * @var ModifierCompiler
+ */
+ private $modifierCompiler;
+ /**
+ * @var PrintExpressionCompiler
+ */
+ private $printExpressionCompiler;
+
+ /**
+ * Depth of nested {nocache}{/nocache} blocks. If outside, this is 0. If inside, this is 1 or higher (if nested).
+ * @var int
+ */
+ private $noCacheStackDepth = 0;
+
+ /**
+ * disabled auto-escape (when set to true, the next variable output is not auto-escaped)
+ *
+ * @var boolean
+ */
+ private $raw_output = false;
+
+ /**
+ * Initialize compiler
+ *
+ * @param Smarty $smarty global instance
+ */
+ public function __construct(Smarty $smarty) {
+ $this->smarty = $smarty;
+ $this->nocache_hash = str_replace(
+ [
+ '.',
+ ',',
+ ],
+ '_',
+ uniqid(mt_rand(), true)
+ );
+
+ $this->modifierCompiler = new ModifierCompiler();
+ $this->functionCallCompiler = new FunctionCallCompiler();
+ $this->defaultHandlerFunctionCallCompiler = new DefaultHandlerFunctionCallCompiler();
+ $this->blockCompiler = new BlockCompiler();
+ $this->defaultHandlerBlockCompiler = new DefaultHandlerBlockCompiler();
+ $this->objectMethodBlockCompiler = new ObjectMethodBlockCompiler();
+ $this->objectMethodCallCompiler = new ObjectMethodCallCompiler();
+ $this->printExpressionCompiler = new PrintExpressionCompiler();
+ }
+
+ /**
+ * Method to compile a Smarty template
+ *
+ * @param \Smarty\Template $template template object to compile
+ *
+ * @return string code
+ * @throws Exception
+ */
+ public function compileTemplate(\Smarty\Template $template) {
+ return $template->createCodeFrame(
+ $this->compileTemplateSource($template),
+ $this->smarty->runPostFilters($this->blockOrFunctionCode, $this->template) .
+ join('', $this->mergedSubTemplatesCode),
+ false,
+ $this
+ );
+ }
+
+ /**
+ * Compile template source and run optional post filter
+ *
+ * @param \Smarty\Template $template
+ * @param Template|null $parent_compiler
+ *
+ * @return string
+ * @throws CompilerException
+ * @throws Exception
+ */
+ public function compileTemplateSource(\Smarty\Template $template, ?\Smarty\Compiler\Template $parent_compiler = null) {
+ try {
+ // save template object in compiler class
+ $this->template = $template;
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->start_compile($this->template);
+ }
+ $this->parent_compiler = $parent_compiler ? $parent_compiler : $this;
+
+ if (empty($template->getCompiled()->nocache_hash)) {
+ $template->getCompiled()->nocache_hash = $this->nocache_hash;
+ } else {
+ $this->nocache_hash = $template->getCompiled()->nocache_hash;
+ }
+ $this->caching = $template->caching;
+
+ // flag for nocache sections
+ $this->nocache = false;
+ $this->tag_nocache = false;
+ // reset has nocache code flag
+ $this->template->getCompiled()->setNocacheCode(false);
+
+ $this->has_variable_string = false;
+ $this->prefix_code = [];
+ // add file dependency
+ if ($this->template->getSource()->handler->checkTimestamps()) {
+ $this->parent_compiler->getTemplate()->getCompiled()->file_dependency[$this->template->getSource()->uid] =
+ [
+ $this->template->getSource()->getResourceName(),
+ $this->template->getSource()->getTimeStamp(),
+ $this->template->getSource()->type,
+ ];
+ }
+ // get template source
+ if (!empty($this->template->getSource()->components)) {
+
+ $_compiled_code = '<?php $_smarty_tpl->getInheritance()->init($_smarty_tpl, true); ?>';
+
+ $i = 0;
+ $reversed_components = array_reverse($this->template->getSource()->components);
+ foreach ($reversed_components as $source) {
+ $i++;
+ if ($i === count($reversed_components)) {
+ $_compiled_code .= '<?php $_smarty_tpl->getInheritance()->endChild($_smarty_tpl); ?>';
+ }
+ $_compiled_code .= $this->compileTag(
+ 'include',
+ [
+ var_export($source->resource, true),
+ ['scope' => 'parent'],
+ ]
+ );
+ }
+ $_compiled_code = $this->smarty->runPostFilters($_compiled_code, $this->template);
+ } else {
+ // get template source
+ $_content = $this->template->getSource()->getContent();
+ $_compiled_code = $this->smarty->runPostFilters(
+ $this->doCompile(
+ $this->smarty->runPreFilters($_content, $this->template),
+ true
+ ),
+ $this->template
+ );
+ }
+
+ } catch (\Exception $e) {
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->end_compile($this->template);
+ }
+ $this->_tag_stack = [];
+ // free memory
+ $this->parent_compiler = null;
+ $this->template = null;
+ $this->parser = null;
+ throw $e;
+ }
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->end_compile($this->template);
+ }
+ $this->parent_compiler = null;
+ $this->parser = null;
+ return $_compiled_code;
+ }
+
+ /**
+ * Compile Tag
+ * This is a call back from the lexer/parser
+ *
+ * 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
+ *
+ * @return string compiled code
+ * @throws Exception
+ * @throws CompilerException
+ */
+ public function compileTag($tag, $args, $parameter = []) {
+ $this->prefixCodeStack[] = $this->prefix_code;
+ $this->prefix_code = [];
+ $result = $this->compileTag2($tag, $args, $parameter);
+ $this->prefix_code = array_merge($this->prefix_code, array_pop($this->prefixCodeStack));
+ return $result;
+ }
+
+ /**
+ * Compiles code for modifier execution
+ *
+ * @param $modifierlist
+ * @param $value
+ *
+ * @return string compiled code
+ * @throws CompilerException
+ * @throws Exception
+ */
+ public function compileModifier($modifierlist, $value) {
+ return $this->modifierCompiler->compile([], $this, ['modifierlist' => $modifierlist, 'value' => $value]);
+ }
+
+ /**
+ * compile variable
+ *
+ * @param string $variable
+ *
+ * @return string
+ */
+ public function triggerTagNoCache($variable): void {
+ if (!strpos($variable, '(')) {
+ // not a variable variable
+ $var = trim($variable, '\'');
+ $this->tag_nocache = $this->tag_nocache |
+ $this->template->getVariable(
+ $var,
+ true,
+ false
+ )->isNocache();
+ }
+ }
+
+ /**
+ * compile config variable
+ *
+ * @param string $variable
+ *
+ * @return string
+ */
+ public function compileConfigVariable($variable) {
+ // return '$_smarty_tpl->config_vars[' . $variable . ']';
+ return '$_smarty_tpl->getConfigVariable(' . $variable . ')';
+ }
+
+ /**
+ * This method is called from parser to process a text content section if strip is enabled
+ * - remove text from inheritance child templates as they may generate output
+ *
+ * @param string $text
+ *
+ * @return string
+ */
+ public function processText($text) {
+
+ if (strpos($text, '<') === false) {
+ return preg_replace($this->stripRegEx, '', $text);
+ }
+
+ $store = [];
+ $_store = 0;
+
+ // 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 = [// replace multiple spaces between tags by a single space
+ '#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
+ // remove newline between tags
+ '#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
+ // remove multiple spaces between attributes (but not in attribute values!)
+ '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
+ '#>[\040\011]+$#Ss' => '> ',
+ '#>[\040\011]*[\n]\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++;
+ }
+ }
+ return $text;
+ }
+
+ /**
+ * lazy loads internal compile plugin for tag compile objects cached for reuse.
+ *
+ * class name format: \Smarty\Compile\TagName
+ *
+ * @param string $tag tag name
+ *
+ * @return ?\Smarty\Compile\CompilerInterface tag compiler object or null if not found or untrusted by security policy
+ */
+ public function getTagCompiler($tag): ?\Smarty\Compile\CompilerInterface {
+ $tag = strtolower($tag);
+
+ if (isset($this->smarty->security_policy) && !$this->smarty->security_policy->isTrustedTag($tag, $this)) {
+ return null;
+ }
+
+ foreach ($this->smarty->getExtensions() as $extension) {
+ if ($compiler = $extension->getTagCompiler($tag)) {
+ return $compiler;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * lazy loads internal compile plugin for modifier compile objects cached for reuse.
+ *
+ * @param string $modifier tag name
+ *
+ * @return bool|\Smarty\Compile\Modifier\ModifierCompilerInterface tag compiler object or false if not found or untrusted by security policy
+ */
+ public function getModifierCompiler($modifier) {
+
+ if (isset($this->smarty->security_policy) && !$this->smarty->security_policy->isTrustedModifier($modifier, $this)) {
+ return false;
+ }
+
+ foreach ($this->smarty->getExtensions() as $extension) {
+ if ($modifierCompiler = $extension->getModifierCompiler($modifier)) {
+ return $modifierCompiler;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check for plugins by default plugin handler
+ *
+ * @param string $tag name of tag
+ * @param string $plugin_type type of plugin
+ *
+ * @return callback|null
+ * @throws \Smarty\CompilerException
+ */
+ public function getPluginFromDefaultHandler($tag, $plugin_type) {
+
+ $defaultPluginHandlerFunc = $this->smarty->getDefaultPluginHandlerFunc();
+
+ if (!is_callable($defaultPluginHandlerFunc)) {
+ return null;
+ }
+
+
+ $callback = null;
+ $script = null;
+ $cacheable = true;
+
+ $result = \call_user_func_array(
+ $defaultPluginHandlerFunc,
+ [
+ $tag,
+ $plugin_type,
+ null, // This used to pass $this->template, but this parameter has been removed in 5.0
+ &$callback,
+ &$script,
+ &$cacheable,
+ ]
+ );
+ if ($result) {
+ $this->tag_nocache = $this->tag_nocache || !$cacheable;
+ if ($script !== null) {
+ if (is_file($script)) {
+ include_once $script;
+ } else {
+ $this->trigger_template_error("Default plugin handler: Returned script file '{$script}' for '{$tag}' not found");
+ }
+ }
+ if (is_callable($callback)) {
+ return $callback;
+ } else {
+ $this->trigger_template_error("Default plugin handler: Returned callback for '{$tag}' not callable");
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Append code segments and remove unneeded ?> <?php transitions
+ *
+ * @param string $left
+ * @param string $right
+ *
+ * @return string
+ */
+ public function appendCode(string $left, string $right): string
+ {
+ if (preg_match('/\s*\?>\s?$/D', $left) && preg_match('/^<\?php\s+/', $right)) {
+ $left = preg_replace('/\s*\?>\s?$/D', "\n", $left);
+ $left .= preg_replace('/^<\?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 be cached the code is injected
+ * into the rendered output.
+ *
+ * @param string $content content of template element
+ *
+ * @return string content
+ */
+ public function processNocacheCode($content) {
+
+ // If the template is not evaluated, and we have a nocache section and/or a nocache tag
+ // generate replacement code
+ if (!empty($content)
+ && !($this->template->getSource()->handler->recompiled)
+ && $this->caching
+ && $this->isNocacheActive()
+ ) {
+ $this->template->getCompiled()->setNocacheCode(true);
+ $_output = addcslashes($content, '\'\\');
+ $_output =
+ "<?php echo '" . $this->getNocacheBlockStartMarker() . $_output . $this->getNocacheBlockEndMarker() . "';?>\n";
+ } else {
+ $_output = $content;
+ }
+
+ $this->modifier_plugins = [];
+ $this->suppressNocacheProcessing = false;
+ $this->tag_nocache = false;
+ return $_output;
+ }
+
+
+ private function getNocacheBlockStartMarker(): string {
+ return "/*%%SmartyNocache:{$this->nocache_hash}%%*/";
+ }
+
+ private function getNocacheBlockEndMarker(): string {
+ return "/*/%%SmartyNocache:{$this->nocache_hash}%%*/";
+ }
+
+
+ /**
+ * Get Id
+ *
+ * @param string $input
+ *
+ * @return bool|string
+ */
+ public function getId($input) {
+ if (preg_match('~^([\'"]*)([0-9]*[a-zA-Z_]\w*)\1$~', $input, $match)) {
+ return $match[2];
+ }
+ return false;
+ }
+
+ /**
+ * Set nocache flag in variable or create new variable
+ *
+ * @param string $varName
+ */
+ public function setNocacheInVariable($varName) {
+ // create nocache var to make it know for further compiling
+ if ($_var = $this->getId($varName)) {
+ if ($this->template->hasVariable($_var)) {
+ $this->template->getVariable($_var)->setNocache(true);
+ } else {
+ $this->template->assign($_var, null, true);
+ }
+ }
+ }
+
+ /**
+ * 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
+ * @param null|bool $tagline if true the line number of last tag
+ *
+ * @throws \Smarty\CompilerException when an unexpected token is found
+ */
+ 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->getSource()->type,
+ [
+ 'eval',
+ 'string',
+ ]
+ )
+ ) {
+ $templateName = $this->template->getSource()->type . ':' . trim(
+ preg_replace(
+ '![\t\r\n]+!',
+ ' ',
+ strlen($lex->data) > 40 ?
+ substr($lex->data, 0, 40) .
+ '...' : $lex->data
+ )
+ );
+ } else {
+ $templateName = $this->template->getSource()->getFullResourceName();
+ }
+ // $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 = [];
+ // expected token from parser
+ $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($lex->smarty_token_names[$exp_token])) {
+ // token type from lexer
+ $expect[] = '"' . $lex->smarty_token_names[$exp_token] . '"';
+ } else {
+ // otherwise internal token name
+ $expect[] = $this->parser->yyTokenName[$token];
+ }
+ }
+ $error_text .= ', expected one of: ' . implode(' , ', $expect);
+ }
+ }
+ if ($this->smarty->_parserdebug) {
+ $this->parser->errorRunDown();
+ echo ob_get_clean();
+ flush();
+ }
+ $e = new CompilerException(
+ $error_text,
+ 0,
+ $this->template->getSource()->getFilepath() ?? $this->template->getSource()->getFullResourceName(),
+ $line
+ );
+ $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1]));
+ $e->desc = $args;
+ $e->template = $this->template->getSource()->getFullResourceName();
+ throw $e;
+ }
+
+ /**
+ * Return var_export() value with all white spaces removed
+ *
+ * @param mixed $value
+ *
+ * @return string
+ */
+ public function getVarExport($value) {
+ return preg_replace('/\s/', '', var_export($value, true));
+ }
+
+ /**
+ * enter double quoted string
+ * - save tag stack count
+ */
+ public function enterDoubleQuote() {
+ array_push($this->_tag_stack_count, $this->getTagStackCount());
+ }
+
+ /**
+ * Return tag stack count
+ *
+ * @return int
+ */
+ public function getTagStackCount() {
+ return count($this->_tag_stack);
+ }
+
+ /**
+ * @param $lexerPreg
+ *
+ * @return mixed
+ */
+ public function replaceDelimiter($lexerPreg) {
+ return str_replace(
+ ['SMARTYldel', 'SMARTYliteral', 'SMARTYrdel', 'SMARTYautoliteral', 'SMARTYal'],
+ [
+ $this->ldelPreg, $this->literalPreg, $this->rdelPreg,
+ $this->smarty->getAutoLiteral() ? '{1,}' : '{9}',
+ $this->smarty->getAutoLiteral() ? '' : '\\s*',
+ ],
+ $lexerPreg
+ );
+ }
+
+ /**
+ * Build lexer regular expressions for left and right delimiter and user defined literals
+ */
+ public function initDelimiterPreg() {
+ $ldel = $this->smarty->getLeftDelimiter();
+ $this->ldelLength = strlen($ldel);
+ $this->ldelPreg = '';
+ foreach (str_split($ldel, 1) as $chr) {
+ $this->ldelPreg .= '[' . preg_quote($chr, '/') . ']';
+ }
+ $rdel = $this->smarty->getRightDelimiter();
+ $this->rdelLength = strlen($rdel);
+ $this->rdelPreg = '';
+ foreach (str_split($rdel, 1) as $chr) {
+ $this->rdelPreg .= '[' . preg_quote($chr, '/') . ']';
+ }
+ $literals = $this->smarty->getLiterals();
+ if (!empty($literals)) {
+ foreach ($literals as $key => $literal) {
+ $literalPreg = '';
+ foreach (str_split($literal, 1) as $chr) {
+ $literalPreg .= '[' . preg_quote($chr, '/') . ']';
+ }
+ $literals[$key] = $literalPreg;
+ }
+ $this->literalPreg = '|' . implode('|', $literals);
+ } else {
+ $this->literalPreg = '';
+ }
+ }
+
+ /**
+ * leave double quoted string
+ * - throw exception if block in string was not closed
+ *
+ * @throws \Smarty\CompilerException
+ */
+ public function leaveDoubleQuote() {
+ if (array_pop($this->_tag_stack_count) !== $this->getTagStackCount()) {
+ $tag = $this->getOpenBlockTag();
+ $this->trigger_template_error(
+ "unclosed '{{$tag}}' in doubled quoted string",
+ null,
+ true
+ );
+ }
+ }
+
+ /**
+ * Get left delimiter preg
+ *
+ * @return string
+ */
+ public function getLdelPreg() {
+ return $this->ldelPreg;
+ }
+
+ /**
+ * Get right delimiter preg
+ *
+ * @return string
+ */
+ public function getRdelPreg() {
+ return $this->rdelPreg;
+ }
+
+ /**
+ * Get length of left delimiter
+ *
+ * @return int
+ */
+ public function getLdelLength() {
+ return $this->ldelLength;
+ }
+
+ /**
+ * Get length of right delimiter
+ *
+ * @return int
+ */
+ public function getRdelLength() {
+ return $this->rdelLength;
+ }
+
+ /**
+ * Get name of current open block tag
+ *
+ * @return string|boolean
+ */
+ public function getOpenBlockTag() {
+ $tagCount = $this->getTagStackCount();
+ if ($tagCount) {
+ return $this->_tag_stack[$tagCount - 1][0];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Check if $value contains variable elements
+ *
+ * @param mixed $value
+ *
+ * @return bool|int
+ */
+ public function isVariable($value) {
+ if (is_string($value)) {
+ return preg_match('/[$(]/', $value);
+ }
+ if (is_bool($value) || is_numeric($value)) {
+ return false;
+ }
+ if (is_array($value)) {
+ foreach ($value as $k => $v) {
+ if ($this->isVariable($k) || $this->isVariable($v)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return false;
+ }
+
+ /**
+ * Get new prefix variable name
+ *
+ * @return string
+ */
+ public function getNewPrefixVariable() {
+ ++self::$prefixVariableNumber;
+ return $this->getPrefixVariable();
+ }
+
+ /**
+ * Get current prefix variable name
+ *
+ * @return string
+ */
+ public function getPrefixVariable() {
+ return '$_prefixVariable' . self::$prefixVariableNumber;
+ }
+
+ /**
+ * append code to prefix buffer
+ *
+ * @param string $code
+ */
+ public function appendPrefixCode($code) {
+ $this->prefix_code[] = $code;
+ }
+
+ /**
+ * get prefix code string
+ *
+ * @return string
+ */
+ public function getPrefixCode() {
+ $code = '';
+ $prefixArray = array_merge($this->prefix_code, array_pop($this->prefixCodeStack));
+ $this->prefixCodeStack[] = [];
+ foreach ($prefixArray as $c) {
+ $code = $this->appendCode($code, (string) $c);
+ }
+ $this->prefix_code = [];
+ return $code;
+ }
+
+ public function cStyleComment($string) {
+ return '/*' . str_replace('*/', '* /', $string) . '*/';
+ }
+
+ public function compileChildBlock() {
+ return $this->blockCompiler->compileChild($this);
+ }
+
+ public function compileParentBlock() {
+ return $this->blockCompiler->compileParent($this);
+ }
+
+ /**
+ * Compile Tag
+ *
+ * @param string $tag tag name
+ * @param array $args array with tag attributes
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws Exception
+ * @throws CompilerException
+ */
+ private function compileTag2($tag, $args, $parameter) {
+ // $args contains the attributes parsed and compiled by the lexer/parser
+
+ $this->handleNocacheFlag($args);
+
+ // compile built-in tags
+ if ($tagCompiler = $this->getTagCompiler($tag)) {
+ if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
+ $this->tag_nocache = $this->tag_nocache | !$tagCompiler->isCacheable();
+ $_output = $tagCompiler->compile($args, $this, $parameter);
+ if (!empty($parameter['modifierlist'])) {
+ throw new CompilerException('No modifiers allowed on ' . $tag);
+ }
+ return $_output;
+ }
+ }
+
+ // call to function previously defined by {function} tag
+ if ($this->canCompileTemplateFunctionCall($tag)) {
+
+ if (!empty($parameter['modifierlist'])) {
+ throw new CompilerException('No modifiers allowed on ' . $tag);
+ }
+
+ $args['_attr']['name'] = "'{$tag}'";
+ $tagCompiler = $this->getTagCompiler('call');
+ return $tagCompiler === null ? false : $tagCompiler->compile($args, $this, $parameter);
+ }
+
+ // remaining tastes: (object-)function, (object-function-)block, custom-compiler
+ // opening and closing tags for these are handled with the same handler
+ $base_tag = $this->getBaseTag($tag);
+
+ // check if tag is a registered object
+ if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_method'])) {
+ return $this->compileRegisteredObjectMethodCall($base_tag, $args, $parameter, $tag);
+ }
+
+ // check if tag is a function
+ if ($this->smarty->getFunctionHandler($base_tag)) {
+ if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($base_tag, $this)) {
+ return (new \Smarty\Compile\PrintExpressionCompiler())->compile(
+ ['nofilter'], // functions are never auto-escaped
+ $this,
+ ['value' => $this->compileFunctionCall($base_tag, $args, $parameter)]
+ );
+ }
+ }
+
+ // check if tag is a block
+ if ($this->smarty->getBlockHandler($base_tag)) {
+ if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($base_tag, $this)) {
+ return $this->blockCompiler->compile($args, $this, $parameter, $tag, $base_tag);
+ }
+ }
+
+ // the default plugin handler is a handler of last resort, it may also handle not specifically registered tags.
+ if ($callback = $this->getPluginFromDefaultHandler($base_tag, Smarty::PLUGIN_COMPILER)) {
+ if (!empty($parameter['modifierlist'])) {
+ throw new CompilerException('No modifiers allowed on ' . $base_tag);
+ }
+ $tagCompiler = new \Smarty\Compile\Tag\BCPluginWrapper($callback);
+ return $tagCompiler->compile($args, $this, $parameter);
+ }
+
+ if ($this->getPluginFromDefaultHandler($base_tag, Smarty::PLUGIN_FUNCTION)) {
+ return $this->defaultHandlerFunctionCallCompiler->compile($args, $this, $parameter, $tag, $base_tag);
+ }
+
+ if ($this->getPluginFromDefaultHandler($base_tag, Smarty::PLUGIN_BLOCK)) {
+ return $this->defaultHandlerBlockCompiler->compile($args, $this, $parameter, $tag, $base_tag);
+ }
+
+ $this->trigger_template_error("unknown tag '{$tag}'", null, true);
+ }
+
+ /**
+ * Sets $this->tag_nocache if attributes contain the 'nocache' flag.
+ *
+ * @param array $attributes
+ *
+ * @return void
+ */
+ private function handleNocacheFlag(array $attributes) {
+ foreach ($attributes as $value) {
+ if (is_string($value) && trim($value, '\'" ') == 'nocache') {
+ $this->tag_nocache = true;
+ }
+ }
+ }
+
+ private function getBaseTag($tag) {
+ if (strlen($tag) < 6 || substr($tag, -5) !== 'close') {
+ return $tag;
+ } else {
+ return substr($tag, 0, -5);
+ }
+ }
+
+ /**
+ * Compiles the output of a variable or expression.
+ *
+ * @param $value
+ * @param $attributes
+ * @param $modifiers
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function compilePrintExpression($value, $attributes = [], $modifiers = null) {
+ $this->handleNocacheFlag($attributes);
+ return $this->printExpressionCompiler->compile($attributes, $this, [
+ 'value'=> $value,
+ 'modifierlist' => $modifiers,
+ ]);
+ }
+
+ /**
+ * 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 \Smarty\CompilerException
+ */
+ 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->parser = new TemplateParser(
+ new TemplateLexer(
+ str_replace(
+ [
+ "\r\n",
+ "\r",
+ ],
+ "\n",
+ $_content
+ ),
+ $this
+ ),
+ $this
+ );
+ if ($isTemplateSource && $this->template->caching) {
+ $this->parser->insertPhpCode("<?php\n\$_smarty_tpl->getCompiled()->nocache_hash = '{$this->nocache_hash}';\n?>\n");
+ }
+ if ($this->smarty->_parserdebug) {
+ $this->parser->PrintTrace();
+ $this->parser->lex->PrintTrace();
+ }
+ // get tokens from lexer and parse them
+ while ($this->parser->lex->yylex()) {
+ if ($this->smarty->_parserdebug) {
+ echo "Line {$this->parser->lex->line} Parsing {$this->parser->yyTokenName[$this->parser->lex->token]} Token " .
+ $this->parser->lex->value;
+ }
+ $this->parser->doParse($this->parser->lex->token, $this->parser->lex->value);
+ }
+ // finish parsing process
+ $this->parser->doParse(0, 0);
+ // check for unclosed tags
+ if ($this->getTagStackCount() > 0) {
+ // get stacked info
+ [$openTag, $_data] = array_pop($this->_tag_stack);
+ $this->trigger_template_error(
+ "unclosed " . $this->smarty->getLeftDelimiter() . $openTag .
+ $this->smarty->getRightDelimiter() . " tag"
+ );
+ }
+ // call post compile callbacks
+ foreach ($this->postCompileCallbacks as $cb) {
+ $callbackFunction = $cb[0];
+ $parameters = $cb;
+ $parameters[0] = $this;
+ $callbackFunction(...$parameters);
+ }
+ // return compiled code
+ 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 = [], $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;
+ }
+ }
+
+ /**
+ * Remove a post compile callback
+ *
+ * @param string $key callback key
+ */
+ public function unregisterPostCompileCallback($key) {
+ unset($this->postCompileCallbacks[$key]);
+ }
+
+ /**
+ * @param string $tag
+ *
+ * @return bool
+ * @throws Exception
+ */
+ private function canCompileTemplateFunctionCall(string $tag): bool {
+ return
+ isset($this->parent_compiler->tpl_function[$tag])
+ || (
+ $this->template->getSmarty()->hasRuntime('TplFunction')
+ && ($this->template->getSmarty()->getRuntime('TplFunction')->getTplFunction($this->template, $tag) !== false)
+ );
+ }
+
+ /**
+ * @throws CompilerException
+ */
+ private function compileRegisteredObjectMethodCall(string $base_tag, array $args, array $parameter, string $tag) {
+
+ $method = $parameter['object_method'];
+ $allowedAsBlockFunction = in_array($method, $this->smarty->registered_objects[$base_tag][3]);
+
+ if ($base_tag === $tag) {
+ // opening tag
+
+ $allowedAsNormalFunction = empty($this->smarty->registered_objects[$base_tag][1])
+ || in_array($method, $this->smarty->registered_objects[$base_tag][1]);
+
+ if ($allowedAsBlockFunction) {
+ return $this->objectMethodBlockCompiler->compile($args, $this, $parameter, $tag, $method);
+ } elseif ($allowedAsNormalFunction) {
+ return $this->objectMethodCallCompiler->compile($args, $this, $parameter, $tag, $method);
+ }
+
+ $this->trigger_template_error(
+ 'not allowed method "' . $method . '" in registered object "' .
+ $tag . '"',
+ null,
+ true
+ );
+ }
+
+ // closing tag
+ if ($allowedAsBlockFunction) {
+ return $this->objectMethodBlockCompiler->compile($args, $this, $parameter, $tag, $method);
+ }
+
+ $this->trigger_template_error(
+ 'not allowed closing tag method "' . $method .
+ '" in registered object "' . $base_tag . '"',
+ null,
+ true
+ );
+ }
+
+ public function compileFunctionCall(string $base_tag, array $args, array $parameter = []) {
+ return $this->functionCallCompiler->compile($args, $this, $parameter, $base_tag, $base_tag);
+ }
+
+ public function compileModifierInExpression(string $function, array $_attr) {
+ $value = array_shift($_attr);
+ return $this->compileModifier([array_merge([$function], $_attr)], $value);
+ }
+
+ /**
+ * @return TemplateParser|null
+ */
+ public function getParser(): ?TemplateParser {
+ return $this->parser;
+ }
+
+ /**
+ * @param TemplateParser|null $parser
+ */
+ public function setParser(?TemplateParser $parser): void {
+ $this->parser = $parser;
+ }
+
+ /**
+ * @return \Smarty\Template|null
+ */
+ public function getTemplate(): ?\Smarty\Template {
+ return $this->template;
+ }
+
+ /**
+ * @param \Smarty\Template|null $template
+ */
+ public function setTemplate(?\Smarty\Template $template): void {
+ $this->template = $template;
+ }
+
+ /**
+ * @return Template|null
+ */
+ public function getParentCompiler(): ?Template {
+ return $this->parent_compiler;
+ }
+
+ /**
+ * @param Template|null $parent_compiler
+ */
+ public function setParentCompiler(?Template $parent_compiler): void {
+ $this->parent_compiler = $parent_compiler;
+ }
+
+
+ /**
+ * Push opening tag name on stack
+ * Optionally additional data can be saved on stack
+ *
+ * @param string $openTag the opening tag's name
+ * @param mixed $data optional data saved
+ */
+ public function openTag($openTag, $data = null) {
+ $this->_tag_stack[] = [$openTag, $data];
+ if ($openTag == 'nocache') {
+ $this->noCacheStackDepth++;
+ }
+ }
+
+ /**
+ * Pop closing tag
+ * Raise an error if this stack-top doesn't match with expected opening tags
+ *
+ * @param array|string $expectedTag the expected opening tag names
+ *
+ * @return mixed any type the opening tag's name or saved data
+ * @throws CompilerException
+ */
+ public function closeTag($expectedTag) {
+ if ($this->getTagStackCount() > 0) {
+ // get stacked info
+ [$_openTag, $_data] = array_pop($this->_tag_stack);
+ // open tag must match with the expected ones
+ if (in_array($_openTag, (array)$expectedTag)) {
+
+ if ($_openTag == 'nocache') {
+ $this->noCacheStackDepth--;
+ }
+
+ if (is_null($_data)) {
+ // return opening tag
+ return $_openTag;
+ } else {
+ // return restored data
+ return $_data;
+ }
+ }
+ // wrong nesting of tags
+ $this->trigger_template_error("unclosed '" . $this->getTemplate()->getLeftDelimiter() . "{$_openTag}" .
+ $this->getTemplate()->getRightDelimiter() . "' tag");
+ return;
+ }
+ // wrong nesting of tags
+ $this->trigger_template_error('unexpected closing tag', null, true);
+ }
+
+ /**
+ * Returns true if we are in a {nocache}...{/nocache} block, but false if inside {block} tag inside a {nocache} block...
+ * @return bool
+ */
+ public function isNocacheActive(): bool {
+ return !$this->suppressNocacheProcessing && ($this->noCacheStackDepth > 0 || $this->tag_nocache);
+ }
+
+ /**
+ * Returns the full tag stack, used in the compiler for {break}
+ * @return array
+ */
+ public function getTagStack(): array {
+ return $this->_tag_stack;
+ }
+
+ /**
+ * Should the next variable output be raw (true) or auto-escaped (false)
+ * @return bool
+ */
+ public function isRawOutput(): bool {
+ return $this->raw_output;
+ }
+
+ /**
+ * Should the next variable output be raw (true) or auto-escaped (false)
+ * @param bool $raw_output
+ * @return void
+ */
+ public function setRawOutput(bool $raw_output): void {
+ $this->raw_output = $raw_output;
+ }
+}
diff --git a/vendor/smarty/smarty/src/CompilerException.php b/vendor/smarty/smarty/src/CompilerException.php
new file mode 100644
index 000000000..60af9db7c
--- /dev/null
+++ b/vendor/smarty/smarty/src/CompilerException.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Smarty;
+
+/**
+ * Smarty compiler exception class
+ *
+
+ */
+class CompilerException extends Exception {
+
+ /**
+ * The constructor of the exception
+ *
+ * @param string $message The Exception message to throw.
+ * @param int $code The Exception code.
+ * @param string|null $filename The filename where the exception is thrown.
+ * @param int|null $line The line number where the exception is thrown.
+ * @param \Throwable|null $previous The previous exception used for the exception chaining.
+ */
+ public function __construct(
+ string $message = "",
+ int $code = 0,
+ ?string $filename = null,
+ ?int $line = null,
+ ?\Throwable $previous = null
+ ) {
+ parent::__construct($message, $code, $previous);
+
+ // These are optional parameters, should be be overridden only when present!
+ if ($filename) {
+ $this->file = $filename;
+ }
+ if ($line) {
+ $this->line = $line;
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString() {
+ return ' --> Smarty Compiler: ' . $this->message . ' <-- ';
+ }
+
+ /**
+ * @param int $line
+ */
+ public function setLine($line) {
+ $this->line = $line;
+ }
+
+ /**
+ * 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/vendor/smarty/smarty/src/Data.php b/vendor/smarty/smarty/src/Data.php
new file mode 100644
index 000000000..6ae823d8c
--- /dev/null
+++ b/vendor/smarty/smarty/src/Data.php
@@ -0,0 +1,521 @@
+<?php
+
+namespace Smarty;
+
+/**
+ * Smarty Internal Plugin Data
+ * This file contains the basic properties and methods for holding config and template variables
+ */
+class Data
+{
+
+ /**
+ * define variable scopes
+ */
+ const SCOPE_LOCAL = 1;
+ const SCOPE_PARENT = 2;
+ const SCOPE_TPL_ROOT = 4;
+ const SCOPE_ROOT = 8;
+ const SCOPE_SMARTY = 16;
+ const SCOPE_GLOBAL = 32;
+
+ /**
+ * Global smarty instance
+ *
+ * @var Smarty
+ */
+ protected $smarty = null;
+
+ /**
+ * template variables
+ *
+ * @var Variable[]
+ */
+ public $tpl_vars = array();
+
+ /**
+ * parent data container (if any)
+ *
+ * @var Data
+ */
+ public $parent = null;
+
+ /**
+ * configuration settings
+ *
+ * @var string[]
+ */
+ public $config_vars = array();
+
+ /**
+ * This variable will hold a stack of template variables.
+ *
+ * @var null|array
+ */
+ private $_var_stack = [];
+
+ /**
+ * This variable will hold a stack of config variables.
+ *
+ * @var null|array
+ */
+ private $_config_stack = [];
+
+ /**
+ * Default scope for new variables
+ * @var int
+ */
+ protected $defaultScope = self::SCOPE_LOCAL;
+
+ /**
+ * create Smarty data object
+ *
+ * @param Smarty|array $_parent parent template
+ * @param Smarty|Template $smarty global smarty instance
+ * @param string $name optional data block name
+ *
+ * @throws Exception
+ */
+ public function __construct($_parent = null, $smarty = null, $name = null) {
+
+ $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->assign($_key, $_val);
+ }
+ } elseif ($_parent !== null) {
+ throw new Exception('Wrong type for 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 int $scope one of self::SCOPE_* constants
+ *
+ * @return Data current Data (or Smarty or \Smarty\Template) instance for
+ * chaining
+ */
+ public function assign($tpl_var, $value = null, $nocache = false, $scope = null)
+ {
+ if (is_array($tpl_var)) {
+ foreach ($tpl_var as $_key => $_val) {
+ $this->assign($_key, $_val, $nocache, $scope);
+ }
+ return $this;
+ }
+ switch ($scope ?? $this->getDefaultScope()) {
+ case self::SCOPE_GLOBAL:
+ case self::SCOPE_SMARTY:
+ $this->getSmarty()->assign($tpl_var, $value);
+ break;
+ case self::SCOPE_TPL_ROOT:
+ $ptr = $this;
+ while (isset($ptr->parent) && ($ptr->parent instanceof Template)) {
+ $ptr = $ptr->parent;
+ }
+ $ptr->assign($tpl_var, $value);
+ break;
+ case self::SCOPE_ROOT:
+ $ptr = $this;
+ while (isset($ptr->parent) && !($ptr->parent instanceof Smarty)) {
+ $ptr = $ptr->parent;
+ }
+ $ptr->assign($tpl_var, $value);
+ break;
+ case self::SCOPE_PARENT:
+ if ($this->parent) {
+ $this->parent->assign($tpl_var, $value);
+ } else {
+ // assign local as fallback
+ $this->assign($tpl_var, $value);
+ }
+ break;
+ case self::SCOPE_LOCAL:
+ default:
+ if (isset($this->tpl_vars[$tpl_var])) {
+ $this->tpl_vars[$tpl_var]->setValue($value);
+ if ($nocache) {
+ $this->tpl_vars[$tpl_var]->setNocache(true);
+ }
+ } else {
+ $this->tpl_vars[$tpl_var] = new Variable($value, $nocache);
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * appends values to template variables
+ *
+ * @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 Data
+ * @api Smarty::append()
+ */
+ public function append($tpl_var, $value = null, $merge = false, $nocache = false)
+ {
+ if (is_array($tpl_var)) {
+ foreach ($tpl_var as $_key => $_val) {
+ $this->append($_key, $_val, $merge, $nocache);
+ }
+ } else {
+
+ $newValue = $this->getValue($tpl_var) ?? [];
+ if (!is_array($newValue)) {
+ $newValue = (array) $newValue;
+ }
+
+ if ($merge && is_array($value)) {
+ foreach ($value as $_mkey => $_mval) {
+ $newValue[$_mkey] = $_mval;
+ }
+ } else {
+ $newValue[] = $value;
+ }
+
+ $this->assign($tpl_var, $newValue, $nocache);
+ }
+ return $this;
+ }
+
+ /**
+ * assigns a global Smarty 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
+ *
+ * @return Data
+ * @deprecated since 5.0
+ */
+ public function assignGlobal($varName, $value = null, $nocache = false)
+ {
+ trigger_error(__METHOD__ . " is deprecated. Use \\Smarty\\Smarty::assign() to assign a variable " .
+ " at the Smarty level.", E_USER_DEPRECATED);
+ return $this->getSmarty()->assign($varName, $value, $nocache);
+ }
+
+ /**
+ * Returns a single or all template variables
+ *
+ * @param string $varName variable name or null
+ * @param bool $searchParents include parent templates?
+ *
+ * @return mixed variable value or or array of variables
+ * @api Smarty::getTemplateVars()
+ *
+ */
+ public function getTemplateVars($varName = null, $searchParents = true)
+ {
+ if (isset($varName)) {
+ return $this->getValue($varName, $searchParents);
+ }
+
+ return array_merge(
+ $this->parent && $searchParents ? $this->parent->getTemplateVars() : [],
+ array_map(function(Variable $var) { return $var->getValue(); }, $this->tpl_vars)
+ );
+ }
+
+ /**
+ * Wrapper for ::getVariable()
+ *
+ * @deprecated since 5.0
+ *
+ * @param $varName
+ * @param $searchParents
+ * @param $errorEnable
+ *
+ * @return void
+ */
+ public function _getVariable($varName, $searchParents = true, $errorEnable = true) {
+ trigger_error('Using ::_getVariable() to is deprecated and will be ' .
+ 'removed in a future release. Use getVariable() instead.', E_USER_DEPRECATED);
+ return $this->getVariable($varName, $searchParents, $errorEnable);
+ }
+
+ /**
+ * Gets the object of a Smarty variable
+ *
+ * @param string $varName the name of the Smarty variable
+ * @param bool $searchParents search also in parent data
+ * @param bool $errorEnable
+ *
+ * @return Variable
+ */
+ public function getVariable($varName, $searchParents = true, $errorEnable = true) {
+ if (isset($this->tpl_vars[$varName])) {
+ return $this->tpl_vars[$varName];
+ }
+
+ if ($searchParents && $this->parent) {
+ return $this->parent->getVariable($varName, $searchParents, $errorEnable);
+ }
+
+ if ($errorEnable && $this->getSmarty()->error_unassigned) {
+ // force a notice
+ $x = $$varName;
+ }
+ return new UndefinedVariable();
+ }
+
+ /**
+ * Directly sets a complete Variable object in the variable with the given name.
+ * @param $varName
+ * @param Variable $variableObject
+ *
+ * @return void
+ */
+ public function setVariable($varName, Variable $variableObject) {
+ $this->tpl_vars[$varName] = $variableObject;
+ }
+
+ /**
+ * Indicates if given variable has been set.
+ * @param $varName
+ *
+ * @return bool
+ */
+ public function hasVariable($varName): bool {
+ return !($this->getVariable($varName, true, false) instanceof UndefinedVariable);
+ }
+
+ /**
+ * Returns the value of the Smarty\Variable given by $varName, or null if the variable does not exist.
+ *
+ * @param $varName
+ * @param bool $searchParents
+ *
+ * @return mixed|null
+ */
+ public function getValue($varName, $searchParents = true) {
+ $variable = $this->getVariable($varName, $searchParents);
+ return isset($variable) ? $variable->getValue() : null;
+ }
+
+ /**
+ * load config variables into template object
+ *
+ * @param array $new_config_vars
+ */
+ public function assignConfigVars($new_config_vars, array $sections = []) {
+
+ // copy global config vars
+ foreach ($new_config_vars['vars'] as $variable => $value) {
+ if ($this->getSmarty()->config_overwrite || !isset($this->config_vars[$variable])) {
+ $this->config_vars[$variable] = $value;
+ } else {
+ $this->config_vars[$variable] = array_merge((array)$this->config_vars[$variable], (array)$value);
+ }
+ }
+
+ foreach ($sections as $tpl_section) {
+ if (isset($new_config_vars['sections'][$tpl_section])) {
+ foreach ($new_config_vars['sections'][$tpl_section]['vars'] as $variable => $value) {
+ if ($this->getSmarty()->config_overwrite || !isset($this->config_vars[$variable])) {
+ $this->config_vars[$variable] = $value;
+ } else {
+ $this->config_vars[$variable] = array_merge((array)$this->config_vars[$variable], (array)$value);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Get Smarty object
+ *
+ * @return Smarty
+ */
+ public function getSmarty()
+ {
+ return $this->smarty;
+ }
+
+ /**
+ * clear the given assigned template variable(s).
+ *
+ * @param string|array $tpl_var the template variable(s) to clear
+ *
+ * @return Data
+ *
+ * @api Smarty::clearAssign()
+ */
+ 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 Data
+ *
+ * @api Smarty::clearAllAssign()
+ */
+ public function clearAllAssign()
+ {
+ $this->tpl_vars = array();
+ return $this;
+ }
+
+ /**
+ * clear a single or all config variables
+ *
+ * @param string|null $name variable name or null
+ *
+ * @return Data
+ *
+ * @api Smarty::clearConfig()
+ */
+ public function clearConfig($name = null)
+ {
+ if (isset($name)) {
+ unset($this->config_vars[ $name ]);
+ } else {
+ $this->config_vars = array();
+ }
+ return $this;
+ }
+
+ /**
+ * Gets a config variable value
+ *
+ * @param string $varName the name of the config variable
+ *
+ * @return mixed the value of the config variable
+ * @throws Exception
+ */
+ public function getConfigVariable($varName)
+ {
+
+ if (isset($this->config_vars[$varName])) {
+ return $this->config_vars[$varName];
+ }
+
+ $returnValue = $this->parent ? $this->parent->getConfigVariable($varName) : null;
+
+ if ($returnValue === null && $this->getSmarty()->error_unassigned) {
+ throw new Exception("Undefined variable $varName");
+ }
+
+ return $returnValue;
+ }
+
+ public function hasConfigVariable($varName): bool {
+ try {
+ return $this->getConfigVariable($varName) !== null;
+ } catch (Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Returns a single or all config variables
+ *
+ * @param string $varname variable name or null
+ *
+ * @return mixed variable value or or array of variables
+ * @throws Exception
+ *
+ * @api Smarty::getConfigVars()
+ */
+ public function getConfigVars($varname = null)
+ {
+ if (isset($varname)) {
+ return $this->getConfigVariable($varname);
+ }
+
+ return array_merge($this->parent ? $this->parent->getConfigVars() : [], $this->config_vars);
+ }
+
+ /**
+ * load a config file, optionally load just selected sections
+ *
+ * @param string $config_file filename
+ * @param mixed $sections array of section names, single
+ * section or null
+
+ * @returns $this
+ * @throws \Exception
+ *
+ * @api Smarty::configLoad()
+ */
+ public function configLoad($config_file, $sections = null)
+ {
+ $template = $this->getSmarty()->doCreateTemplate($config_file, null, null, $this, null, null, true);
+ $template->caching = Smarty::CACHING_OFF;
+ $template->assign('sections', (array) $sections ?? []);
+ // trigger a call to $this->assignConfigVars
+ $template->fetch();
+ return $this;
+ }
+
+ /**
+ * Sets the default scope for new variables assigned in this template.
+ * @param int $scope
+ *
+ * @return void
+ */
+ protected function setDefaultScope(int $scope) {
+ $this->defaultScope = $scope;
+ }
+
+ /**
+ * Returns the default scope for new variables assigned in this template.
+ * @return int
+ */
+ public function getDefaultScope(): int {
+ return $this->defaultScope;
+ }
+
+ /**
+ * @return Data|Smarty|null
+ */
+ public function getParent() {
+ return $this->parent;
+ }
+
+ /**
+ * @param Data|Smarty|null $parent
+ */
+ public function setParent($parent): void {
+ $this->parent = $parent;
+ }
+
+ public function pushStack(): void {
+ $stackList = [];
+ foreach ($this->tpl_vars as $name => $variable) {
+ $stackList[$name] = clone $variable; // variables are stored in Variable objects
+ }
+ $this->_var_stack[] = $this->tpl_vars;
+ $this->tpl_vars = $stackList;
+
+ $this->_config_stack[] = $this->config_vars;
+ }
+
+ public function popStack(): void {
+ $this->tpl_vars = array_pop($this->_var_stack);
+ $this->config_vars = array_pop($this->_config_stack);
+ }
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php b/vendor/smarty/smarty/src/Debug.php
index da67904c5..ab1a88779 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php
+++ b/vendor/smarty/smarty/src/Debug.php
@@ -1,34 +1,28 @@
<?php
+
+namespace Smarty;
+
/**
* Smarty Internal Plugin Debug
* Class to collect data for the Smarty Debugging Console
*
- * @package Smarty
- * @subpackage Debug
* @author Uwe Tews
*/
-
-/**
- * Smarty Internal Plugin Debug Class
- *
- * @package Smarty
- * @subpackage Debug
- */
-class Smarty_Internal_Debug extends Smarty_Internal_Data
+class Debug extends Data
{
/**
* template data
*
* @var array
*/
- public $template_data = array();
+ public $template_data = [];
/**
* List of uid's which shall be ignored
*
* @var array
*/
- public $ignore_uid = array();
+ public $ignore_uid = [];
/**
* Index of display() and fetch() calls
@@ -47,10 +41,10 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* Start logging template
*
- * @param \Smarty_Internal_Template $template template
+ * @param Template $template template
* @param null $mode true: display false: fetch null: subtemplate
*/
- public function start_template(Smarty_Internal_Template $template, $mode = null)
+ public function start_template(Template $template, $mode = null)
{
if (isset($mode) && !$template->_isSubTpl()) {
$this->index++;
@@ -64,39 +58,30 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* End logging of cache time
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function end_template(Smarty_Internal_Template $template)
+ public function end_template(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 \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function start_compile(Smarty_Internal_Template $template)
+ public function start_compile(Template $template)
{
static $_is_stringy = array('string' => true, 'eval' => true);
- if (!empty($template->compiler->trace_uid)) {
- $key = $template->compiler->trace_uid;
+ if (!empty($template->getCompiler()->trace_uid)) {
+ $key = $template->getCompiler()->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;
+ $this->saveTemplateData($_is_stringy, $template, $key);
}
} else {
- if (isset($this->ignore_uid[ $template->source->uid ])) {
+ if (isset($this->ignore_uid[ $template->getSource()->uid ])) {
return;
}
$key = $this->get_key($template);
@@ -107,14 +92,14 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* End logging of compile time
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function end_compile(Smarty_Internal_Template $template)
+ public function end_compile(Template $template)
{
- if (!empty($template->compiler->trace_uid)) {
- $key = $template->compiler->trace_uid;
+ if (!empty($template->getCompiler()->trace_uid)) {
+ $key = $template->getCompiler()->trace_uid;
} else {
- if (isset($this->ignore_uid[ $template->source->uid ])) {
+ if (isset($this->ignore_uid[ $template->getSource()->uid ])) {
return;
}
$key = $this->get_key($template);
@@ -126,9 +111,9 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* Start logging of render time
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function start_render(Smarty_Internal_Template $template)
+ public function start_render(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true);
@@ -137,9 +122,9 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* End logging of compile time
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function end_render(Smarty_Internal_Template $template)
+ public function end_render(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'render_time' ] +=
@@ -149,9 +134,9 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* Start logging of cache time
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function start_cache(Smarty_Internal_Template $template)
+ public function start_cache(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true);
@@ -160,9 +145,9 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* End logging of cache time
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function end_cache(Smarty_Internal_Template $template)
+ public function end_cache(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'cache_time' ] +=
@@ -172,65 +157,52 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* Register template object
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function register_template(Smarty_Internal_Template $template)
+ public function register_template(Template $template)
{
}
/**
* Register data object
*
- * @param \Smarty_Data $data data object
+ * @param Data $data data object
*/
- public static function register_data(Smarty_Data $data)
+ public static function register_data(Data $data)
{
}
/**
* Opens a window for the Smarty Debugging Console and display the data
*
- * @param Smarty_Internal_Template|Smarty $obj object to debug
+ * @param Template|Smarty $obj object to debug
* @param bool $full
*
* @throws \Exception
- * @throws \SmartyException
+ * @throws Exception
*/
- public function display_debug($obj, $full = false)
+ public function display_debug($obj, bool $full = false)
{
if (!$full) {
$this->offset++;
$savedIndex = $this->index;
$this->index = 9999;
}
- $smarty = $obj->_getSmartyObj();
+ $smarty = $obj->getSmarty();
// 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 = Smarty::COMPILECHECK_ON;
- $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->debug_tpl = $smarty->debug_tpl ?? 'file:' . __DIR__ . '/debug.tpl';
$debObj->registered_resources = array();
- $debObj->registered_filters = array();
- $debObj->autoload_filters = array();
- $debObj->default_modifiers = array();
$debObj->escape_html = true;
$debObj->caching = Smarty::CACHING_OFF;
- $debObj->compile_id = null;
- $debObj->cache_id = null;
// prepare information of assigned variables
$ptr = $this->get_debug_vars($obj);
$_assigned_vars = $ptr->tpl_vars;
@@ -238,15 +210,14 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
$_config_vars = $ptr->config_vars;
ksort($_config_vars);
$debugging = $smarty->debugging;
- $templateName = $obj->source->type . ':' . $obj->source->name;
+ $templateName = $obj->getSource()->type . ':' . $obj->getSource()->name;
$displayMode = $debugging === 2 || !$full;
$offset = $this->offset * 50;
- $_template = new Smarty_Internal_Template($debObj->debug_tpl, $debObj);
- if ($obj->_isTplObj()) {
+ $_template = $debObj->doCreateTemplate($debObj->debug_tpl);
+ if ($obj instanceof Template) {
$_template->assign('template_name', $templateName);
- }
- if ($obj->_objType === 1 || $full) {
- $_template->assign('template_data', $this->template_data[ $this->index ]);
+ } elseif ($obj instanceof Smarty || $full) {
+ $_template->assign('template_data', $this->template_data[$this->index]);
} else {
$_template->assign('template_data', null);
}
@@ -267,22 +238,16 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* Recursively gets variables from all template/data scopes
*
- * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+ * @param \Smarty\Data $obj object to debug
*
- * @return StdClass
+ * @return \StdClass
*/
- public function get_debug_vars($obj)
+ private function get_debug_vars($obj)
{
$config_vars = array();
foreach ($obj->config_vars as $key => $var) {
- $config_vars[ $key ][ 'value' ] = $var;
- if ($obj->_isTplObj()) {
- $config_vars[ $key ][ 'scope' ] = $obj->source->type . ':' . $obj->source->name;
- } elseif ($obj->_isDataObj()) {
- $tpl_vars[ $key ][ 'scope' ] = $obj->dataObjectName;
- } else {
- $config_vars[ $key ][ 'scope' ] = 'Smarty object';
- }
+ $config_vars[$key]['value'] = $var;
+ $config_vars[$key]['scope'] = get_class($obj) . ':' . spl_object_id($obj);
}
$tpl_vars = array();
foreach ($obj->tpl_vars as $key => $var) {
@@ -301,13 +266,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
}
}
}
- if ($obj->_isTplObj()) {
- $tpl_vars[ $key ][ 'scope' ] = $obj->source->type . ':' . $obj->source->name;
- } elseif ($obj->_isDataObj()) {
- $tpl_vars[ $key ][ 'scope' ] = $obj->dataObjectName;
- } else {
- $tpl_vars[ $key ][ 'scope' ] = 'Smarty object';
- }
+ $tpl_vars[$key]['scope'] = get_class($obj) . ':' . spl_object_id($obj);
}
if (isset($obj->parent)) {
$parent = $this->get_debug_vars($obj->parent);
@@ -323,27 +282,6 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
}
}
$config_vars = array_merge($parent->config_vars, $config_vars);
- } else {
- 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);
}
@@ -351,31 +289,20 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* Return key into $template_data for template
*
- * @param \Smarty_Internal_Template $template template object
+ * @param Template $template template object
*
* @return string key into $template_data
*/
- private function get_key(Smarty_Internal_Template $template)
+ private function get_key(Template $template)
{
static $_is_stringy = array('string' => true, 'eval' => true);
- // calculate Uid if not already done
- if ($template->source->uid === '') {
- $template->source->filepath;
- }
- $key = $template->source->uid;
+
+ $key = $template->getSource()->uid;
if (isset($this->template_data[ $this->index ][ $key ])) {
return $key;
} else {
- 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;
- $this->template_data[ $this->index ][ $key ][ 'total_time' ] = 0;
+ $this->saveTemplateData($_is_stringy, $template, $key);
+ $this->template_data[ $this->index ][ $key ][ 'total_time' ] = 0;
return $key;
}
}
@@ -383,15 +310,11 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
/**
* Ignore template
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function ignore(Smarty_Internal_Template $template)
+ public function ignore(Template $template)
{
- // calculate Uid if not already done
- if ($template->source->uid === '') {
- $template->source->filepath;
- }
- $this->ignore_uid[ $template->source->uid ] = true;
+ $this->ignore_uid[$template->getSource()->uid] = true;
}
/**
@@ -425,4 +348,23 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
}
}
}
+
+ /**
+ * @param array $_is_stringy
+ * @param Template $template
+ * @param string $key
+ *
+ * @return void
+ */
+ private function saveTemplateData(array $_is_stringy, Template $template, string $key): void {
+ if (isset($_is_stringy[$template->getSource()->type])) {
+ $this->template_data[$this->index][$key]['name'] =
+ '\'' . substr($template->getSource()->name, 0, 25) . '...\'';
+ } else {
+ $this->template_data[$this->index][$key]['name'] = $template->getSource()->getResourceName();
+ }
+ $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;
+ }
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php b/vendor/smarty/smarty/src/ErrorHandler.php
index 4ddcfcd11..05b1cb3e6 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php
+++ b/vendor/smarty/smarty/src/ErrorHandler.php
@@ -1,22 +1,13 @@
<?php
+namespace Smarty;
+
/**
* Smarty error handler to fix new error levels in PHP8 for backwards compatibility
- *
- * @package Smarty
- * @subpackage PluginsInternal
* @author Simon Wisselink
- *
*/
-class Smarty_Internal_ErrorHandler
+class ErrorHandler
{
-
- /**
- * Allows {$foo} where foo is unset.
- * @var bool
- */
- public $allowUndefinedVars = true;
-
/**
* Allows {$foo->propName} where propName is undefined.
* @var bool
@@ -78,14 +69,6 @@ class Smarty_Internal_ErrorHandler
*/
public function handleError($errno, $errstr, $errfile, $errline, $errcontext = [])
{
-
- if ($this->allowUndefinedVars && preg_match(
- '/^(Attempt to read property "value" on null|Trying to get property (\'value\' )?of non-object)/',
- $errstr
- )) {
- return; // suppresses this error
- }
-
if ($this->allowUndefinedProperties && preg_match(
'/^(Undefined property)/',
$errstr
diff --git a/vendor/smarty/smarty/src/Exception.php b/vendor/smarty/smarty/src/Exception.php
new file mode 100644
index 000000000..0f75f5685
--- /dev/null
+++ b/vendor/smarty/smarty/src/Exception.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Smarty;
+
+/**
+ * Smarty exception class
+ */
+class Exception extends \Exception {
+
+ /**
+ * @return string
+ */
+ public function __toString() {
+ return ' --> Smarty: ' . $this->message . ' <-- ';
+ }
+}
diff --git a/vendor/smarty/smarty/src/Extension/BCPluginsAdapter.php b/vendor/smarty/smarty/src/Extension/BCPluginsAdapter.php
new file mode 100644
index 000000000..aa0eefe20
--- /dev/null
+++ b/vendor/smarty/smarty/src/Extension/BCPluginsAdapter.php
@@ -0,0 +1,229 @@
+<?php
+
+namespace Smarty\Extension;
+
+use Smarty\BlockHandler\BlockPluginWrapper;
+use Smarty\Compile\CompilerInterface;
+use Smarty\Compile\Modifier\BCPluginWrapper as ModifierCompilerPluginWrapper;
+use Smarty\Compile\Tag\BCPluginWrapper as TagPluginWrapper;
+use Smarty\Filter\FilterPluginWrapper;
+use Smarty\FunctionHandler\BCPluginWrapper as FunctionPluginWrapper;
+
+class BCPluginsAdapter extends Base {
+
+ /**
+ * @var \Smarty\Smarty
+ */
+ private $smarty;
+
+ public function __construct(\Smarty\Smarty $smarty) {
+ $this->smarty = $smarty;
+ }
+
+ private function findPlugin($type, $name): ?array {
+ if (null !== $plugin = $this->smarty->getRegisteredPlugin($type, $name)) {
+ return $plugin;
+ }
+
+ return null;
+ }
+
+ public function getTagCompiler(string $tag): ?\Smarty\Compile\CompilerInterface {
+
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_COMPILER, $tag);
+ if ($plugin === null) {
+ return null;
+ }
+
+ if (is_callable($plugin[0])) {
+ $callback = $plugin[0];
+ $cacheable = (bool) $plugin[1] ?? true;
+ return new TagPluginWrapper($callback, $cacheable);
+ } elseif (class_exists($plugin[0])) {
+ $compiler = new $plugin[0];
+ if ($compiler instanceof CompilerInterface) {
+ return $compiler;
+ }
+ }
+
+ return null;
+ }
+
+ public function getFunctionHandler(string $functionName): ?\Smarty\FunctionHandler\FunctionHandlerInterface {
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_FUNCTION, $functionName);
+ if ($plugin === null) {
+ return null;
+ }
+ $callback = $plugin[0];
+ $cacheable = (bool) $plugin[1] ?? true;
+
+ return new FunctionPluginWrapper($callback, $cacheable);
+
+ }
+
+ public function getBlockHandler(string $blockTagName): ?\Smarty\BlockHandler\BlockHandlerInterface {
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_BLOCK, $blockTagName);
+ if ($plugin === null) {
+ return null;
+ }
+ $callback = $plugin[0];
+ $cacheable = (bool) $plugin[1] ?? true;
+
+ return new BlockPluginWrapper($callback, $cacheable);
+ }
+
+ public function getModifierCallback(string $modifierName) {
+
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, $modifierName);
+ if ($plugin === null) {
+ return null;
+ }
+ return $plugin[0];
+ }
+
+ public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_MODIFIERCOMPILER, $modifier);
+ if ($plugin === null) {
+ return null;
+ }
+ $callback = $plugin[0];
+
+ return new ModifierCompilerPluginWrapper($callback);
+ }
+
+ /**
+ * @var array
+ */
+ private $preFilters = [];
+
+ public function getPreFilters(): array {
+ return $this->preFilters;
+ }
+
+ public function addPreFilter(\Smarty\Filter\FilterInterface $filter) {
+ $this->preFilters[] = $filter;
+ }
+
+ public function addCallableAsPreFilter(callable $callable, ?string $name = null) {
+ if ($name === null) {
+ $this->preFilters[] = new FilterPluginWrapper($callable);
+ } else {
+ $this->preFilters[$name] = new FilterPluginWrapper($callable);
+ }
+ }
+
+ public function removePrefilter(string $name) {
+ unset($this->preFilters[$name]);
+ }
+
+ /**
+ * @var array
+ */
+ private $postFilters = [];
+
+ public function getPostFilters(): array {
+ return $this->postFilters;
+ }
+
+ public function addPostFilter(\Smarty\Filter\FilterInterface $filter) {
+ $this->postFilters[] = $filter;
+ }
+
+ public function addCallableAsPostFilter(callable $callable, ?string $name = null) {
+ if ($name === null) {
+ $this->postFilters[] = new FilterPluginWrapper($callable);
+ } else {
+ $this->postFilters[$name] = new FilterPluginWrapper($callable);
+ }
+ }
+
+ public function removePostFilter(string $name) {
+ unset($this->postFilters[$name]);
+ }
+
+
+ /**
+ * @var array
+ */
+ private $outputFilters = [];
+
+ public function getOutputFilters(): array {
+ return $this->outputFilters;
+ }
+
+ public function addOutputFilter(\Smarty\Filter\FilterInterface $filter) {
+ $this->outputFilters[] = $filter;
+ }
+
+ public function addCallableAsOutputFilter(callable $callable, ?string $name = null) {
+ if ($name === null) {
+ $this->outputFilters[] = new FilterPluginWrapper($callable);
+ } else {
+ $this->outputFilters[$name] = new FilterPluginWrapper($callable);
+ }
+ }
+
+ public function removeOutputFilter(string $name) {
+ unset($this->outputFilters[$name]);
+ }
+
+ public function loadPluginsFromDir(string $path) {
+
+ foreach([
+ 'function',
+ 'modifier',
+ 'block',
+ 'compiler',
+ 'prefilter',
+ 'postfilter',
+ 'outputfilter',
+ ] as $type) {
+ foreach (glob($path . $type . '.?*.php') as $filename) {
+ $pluginName = $this->getPluginNameFromFilename($filename);
+ if ($pluginName !== null) {
+ require_once $filename;
+ $functionOrClassName = 'smarty_' . $type . '_' . $pluginName;
+ if (function_exists($functionOrClassName) || class_exists($functionOrClassName)) {
+ $this->smarty->registerPlugin($type, $pluginName, $functionOrClassName, true, []);
+ }
+ }
+ }
+ }
+
+ $type = 'resource';
+ foreach (glob($path . $type . '.?*.php') as $filename) {
+ $pluginName = $this->getPluginNameFromFilename($filename);
+ if ($pluginName !== null) {
+ require_once $filename;
+ if (class_exists($className = 'smarty_' . $type . '_' . $pluginName)) {
+ $this->smarty->registerResource($pluginName, new $className());
+ }
+ }
+ }
+
+ $type = 'cacheresource';
+ foreach (glob($path . $type . '.?*.php') as $filename) {
+ $pluginName = $this->getPluginNameFromFilename($filename);
+ if ($pluginName !== null) {
+ require_once $filename;
+ if (class_exists($className = 'smarty_' . $type . '_' . $pluginName)) {
+ $this->smarty->registerCacheResource($pluginName, new $className());
+ }
+ }
+ }
+
+ }
+
+ /**
+ * @param $filename
+ *
+ * @return string|null
+ */
+ private function getPluginNameFromFilename($filename) {
+ if (!preg_match('/.*\.([a-z_A-Z0-9]+)\.php$/',$filename,$matches)) {
+ return null;
+ }
+ return $matches[1];
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Extension/Base.php b/vendor/smarty/smarty/src/Extension/Base.php
new file mode 100644
index 000000000..b37b6acd0
--- /dev/null
+++ b/vendor/smarty/smarty/src/Extension/Base.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Smarty\Extension;
+
+use Smarty\FunctionHandler\FunctionHandlerInterface;
+
+class Base implements ExtensionInterface {
+
+ public function getTagCompiler(string $tag): ?\Smarty\Compile\CompilerInterface {
+ return null;
+ }
+
+ public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+ return null;
+ }
+
+ public function getFunctionHandler(string $functionName): ?\Smarty\FunctionHandler\FunctionHandlerInterface {
+ return null;
+ }
+
+ public function getBlockHandler(string $blockTagName): ?\Smarty\BlockHandler\BlockHandlerInterface {
+ return null;
+ }
+
+ public function getModifierCallback(string $modifierName) {
+ return null;
+ }
+
+ public function getPreFilters(): array {
+ return [];
+ }
+
+ public function getPostFilters(): array {
+ return [];
+ }
+
+ public function getOutputFilters(): array {
+ return [];
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Extension/CallbackWrapper.php b/vendor/smarty/smarty/src/Extension/CallbackWrapper.php
new file mode 100644
index 000000000..193fc1363
--- /dev/null
+++ b/vendor/smarty/smarty/src/Extension/CallbackWrapper.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Smarty\Extension;
+
+use Smarty\Exception;
+
+class CallbackWrapper {
+
+ /**
+ * @var callback
+ */
+ private $callback;
+ /**
+ * @var string
+ */
+ private $modifierName;
+
+ /**
+ * @param string $modifierName
+ * @param callback $callback
+ */
+ public function __construct(string $modifierName, $callback) {
+ $this->callback = $callback;
+ $this->modifierName = $modifierName;
+ }
+
+ public function handle(...$params) {
+ try {
+ return ($this->callback)(...$params);
+ } catch (\ArgumentCountError $e) {
+ throw new Exception("Invalid number of arguments to modifier " . $this->modifierName);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Extension/CoreExtension.php b/vendor/smarty/smarty/src/Extension/CoreExtension.php
new file mode 100644
index 000000000..a7c658d34
--- /dev/null
+++ b/vendor/smarty/smarty/src/Extension/CoreExtension.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Smarty\Extension;
+
+class CoreExtension extends Base {
+ public function getTagCompiler(string $tag): ?\Smarty\Compile\CompilerInterface {
+ switch ($tag) {
+ case 'append': return new \Smarty\Compile\Tag\Append();
+ case 'assign': return new \Smarty\Compile\Tag\Assign();
+ case 'block': return new \Smarty\Compile\Tag\Block();
+ case 'blockclose': return new \Smarty\Compile\Tag\BlockClose();
+ case 'break': return new \Smarty\Compile\Tag\BreakTag();
+ case 'call': return new \Smarty\Compile\Tag\Call();
+ case 'capture': return new \Smarty\Compile\Tag\Capture();
+ case 'captureclose': return new \Smarty\Compile\Tag\CaptureClose();
+ case 'config_load': return new \Smarty\Compile\Tag\ConfigLoad();
+ case 'continue': return new \Smarty\Compile\Tag\ContinueTag();
+ case 'debug': return new \Smarty\Compile\Tag\Debug();
+ case 'eval': return new \Smarty\Compile\Tag\EvalTag();
+ case 'extends': return new \Smarty\Compile\Tag\ExtendsTag();
+ case 'for': return new \Smarty\Compile\Tag\ForTag();
+ case 'foreach': return new \Smarty\Compile\Tag\ForeachTag();
+ case 'foreachelse': return new \Smarty\Compile\Tag\ForeachElse();
+ case 'foreachclose': return new \Smarty\Compile\Tag\ForeachClose();
+ case 'forelse': return new \Smarty\Compile\Tag\ForElse();
+ case 'forclose': return new \Smarty\Compile\Tag\ForClose();
+ case 'function': return new \Smarty\Compile\Tag\FunctionTag();
+ case 'functionclose': return new \Smarty\Compile\Tag\FunctionClose();
+ case 'if': return new \Smarty\Compile\Tag\IfTag();
+ case 'else': return new \Smarty\Compile\Tag\ElseTag();
+ case 'elseif': return new \Smarty\Compile\Tag\ElseIfTag();
+ case 'ifclose': return new \Smarty\Compile\Tag\IfClose();
+ case 'include': return new \Smarty\Compile\Tag\IncludeTag();
+ case 'ldelim': return new \Smarty\Compile\Tag\Ldelim();
+ case 'rdelim': return new \Smarty\Compile\Tag\Rdelim();
+ case 'nocache': return new \Smarty\Compile\Tag\Nocache();
+ case 'nocacheclose': return new \Smarty\Compile\Tag\NocacheClose();
+ case 'section': return new \Smarty\Compile\Tag\Section();
+ case 'sectionelse': return new \Smarty\Compile\Tag\SectionElse();
+ case 'sectionclose': return new \Smarty\Compile\Tag\SectionClose();
+ case 'setfilter': return new \Smarty\Compile\Tag\Setfilter();
+ case 'setfilterclose': return new \Smarty\Compile\Tag\SetfilterClose();
+ case 'while': return new \Smarty\Compile\Tag\WhileTag();
+ case 'whileclose': return new \Smarty\Compile\Tag\WhileClose();
+ }
+ return null;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Extension/DefaultExtension.php b/vendor/smarty/smarty/src/Extension/DefaultExtension.php
new file mode 100644
index 000000000..88390b941
--- /dev/null
+++ b/vendor/smarty/smarty/src/Extension/DefaultExtension.php
@@ -0,0 +1,757 @@
+<?php
+
+namespace Smarty\Extension;
+
+use Smarty\Exception;
+
+class DefaultExtension extends Base {
+
+ private $modifiers = [];
+
+ private $functionHandlers = [];
+
+ private $blockHandlers = [];
+
+ public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+
+ if (isset($this->modifiers[$modifier])) {
+ return $this->modifiers[$modifier];
+ }
+
+ switch ($modifier) {
+ case 'cat': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CatModifierCompiler(); break;
+ case 'count_characters': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountCharactersModifierCompiler(); break;
+ case 'count_paragraphs': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountParagraphsModifierCompiler(); break;
+ case 'count_sentences': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountSentencesModifierCompiler(); break;
+ case 'count_words': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountWordsModifierCompiler(); break;
+ case 'default': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\DefaultModifierCompiler(); break;
+ case 'empty': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\EmptyModifierCompiler(); break;
+ case 'escape': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\EscapeModifierCompiler(); break;
+ case 'from_charset': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\FromCharsetModifierCompiler(); break;
+ case 'indent': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\IndentModifierCompiler(); break;
+ case 'is_array': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\IsArrayModifierCompiler(); break;
+ case 'isset': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\IssetModifierCompiler(); break;
+ case 'json_encode': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\JsonEncodeModifierCompiler(); break;
+ case 'lower': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\LowerModifierCompiler(); break;
+ case 'nl2br': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\Nl2brModifierCompiler(); break;
+ case 'noprint': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\NoPrintModifierCompiler(); break;
+ case 'raw': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\RawModifierCompiler(); break;
+ case 'round': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\RoundModifierCompiler(); break;
+ case 'str_repeat': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StrRepeatModifierCompiler(); break;
+ case 'string_format': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StringFormatModifierCompiler(); break;
+ case 'strip': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StripModifierCompiler(); break;
+ case 'strip_tags': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StripTagsModifierCompiler(); break;
+ case 'strlen': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StrlenModifierCompiler(); break;
+ case 'substr': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\SubstrModifierCompiler(); break;
+ case 'to_charset': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\ToCharsetModifierCompiler(); break;
+ case 'unescape': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\UnescapeModifierCompiler(); break;
+ case 'upper': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\UpperModifierCompiler(); break;
+ case 'wordwrap': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\WordWrapModifierCompiler(); break;
+ }
+
+ return $this->modifiers[$modifier] ?? null;
+ }
+
+ public function getModifierCallback(string $modifierName) {
+ switch ($modifierName) {
+ case 'capitalize': return [$this, 'smarty_modifier_capitalize'];
+ case 'count': return [$this, 'smarty_modifier_count'];
+ case 'date_format': return [$this, 'smarty_modifier_date_format'];
+ case 'debug_print_var': return [$this, 'smarty_modifier_debug_print_var'];
+ case 'escape': return [$this, 'smarty_modifier_escape'];
+ case 'explode': return [$this, 'smarty_modifier_explode'];
+ case 'implode': return [$this, 'smarty_modifier_implode'];
+ case 'in_array': return [$this, 'smarty_modifier_in_array'];
+ case 'join': return [$this, 'smarty_modifier_join'];
+ case 'mb_wordwrap': return [$this, 'smarty_modifier_mb_wordwrap'];
+ case 'number_format': return [$this, 'smarty_modifier_number_format'];
+ case 'regex_replace': return [$this, 'smarty_modifier_regex_replace'];
+ case 'replace': return [$this, 'smarty_modifier_replace'];
+ case 'spacify': return [$this, 'smarty_modifier_spacify'];
+ case 'split': return [$this, 'smarty_modifier_split'];
+ case 'truncate': return [$this, 'smarty_modifier_truncate'];
+ }
+ return null;
+ }
+
+ public function getFunctionHandler(string $functionName): ?\Smarty\FunctionHandler\FunctionHandlerInterface {
+
+ if (isset($this->functionHandlers[$functionName])) {
+ return $this->functionHandlers[$functionName];
+ }
+
+ switch ($functionName) {
+ case 'count': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Count(); break;
+ case 'counter': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Counter(); break;
+ case 'cycle': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Cycle(); break;
+ case 'fetch': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Fetch(); break;
+ case 'html_checkboxes': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlCheckboxes(); break;
+ case 'html_image': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlImage(); break;
+ case 'html_options': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlOptions(); break;
+ case 'html_radios': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlRadios(); break;
+ case 'html_select_date': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlSelectDate(); break;
+ case 'html_select_time': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlSelectTime(); break;
+ case 'html_table': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlTable(); break;
+ case 'mailto': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Mailto(); break;
+ case 'math': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Math(); break;
+ }
+
+ return $this->functionHandlers[$functionName] ?? null;
+ }
+
+ public function getBlockHandler(string $blockTagName): ?\Smarty\BlockHandler\BlockHandlerInterface {
+
+ switch ($blockTagName) {
+ case 'textformat': $this->blockHandlers[$blockTagName] = new \Smarty\BlockHandler\TextFormat(); break;
+ }
+
+ return $this->blockHandlers[$blockTagName] ?? null;
+ }
+
+ /**
+ * Smarty spacify modifier plugin
+ * Type: modifier
+ * Name: spacify
+ * Purpose: add spaces between characters in a string
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param string $string input string
+ * @param string $spacify_char string to insert between characters.
+ *
+ * @return string
+ */
+ public function smarty_modifier_spacify($string, $spacify_char = ' ')
+ {
+ // well… what about charsets besides latin and UTF-8?
+ return implode($spacify_char, preg_split('//' . \Smarty\Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY));
+ }
+
+ /**
+ * Smarty capitalize modifier plugin
+ * Type: modifier
+ * Name: capitalize
+ * 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 Rodney Rehm
+ */
+ public function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
+ {
+ $string = (string) $string;
+
+ if ($lc_rest) {
+ // uppercase (including hyphenated words)
+ $upper_string = mb_convert_case($string, MB_CASE_TITLE, \Smarty\Smarty::$_CHARSET);
+ } else {
+ // uppercase word breaks
+ $upper_string = preg_replace_callback(
+ "!(^|[^\p{L}'])([\p{Ll}])!S" . \Smarty\Smarty::$_UTF8_MODIFIER,
+ function ($matches) {
+ return stripslashes($matches[1]) .
+ mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, \Smarty\Smarty::$_CHARSET);
+ },
+ $string
+ );
+ }
+ // check uc_digits case
+ if (!$uc_digits) {
+ if (preg_match_all(
+ "!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . \Smarty\Smarty::$_UTF8_MODIFIER,
+ $string,
+ $matches,
+ PREG_OFFSET_CAPTURE
+ )
+ ) {
+ foreach ($matches[ 1 ] as $match) {
+ $upper_string =
+ substr_replace(
+ $upper_string,
+ mb_strtolower($match[ 0 ], \Smarty\Smarty::$_CHARSET),
+ $match[ 1 ],
+ strlen($match[ 0 ])
+ );
+ }
+ }
+ }
+ $upper_string =
+ preg_replace_callback(
+ "!((^|\s)['\"])(\w)!" . \Smarty\Smarty::$_UTF8_MODIFIER,
+ function ($matches) {
+ return stripslashes(
+ $matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]),
+ MB_CASE_UPPER,
+ \Smarty\Smarty::$_CHARSET
+ );
+ },
+ $upper_string
+ );
+ return $upper_string;
+ }
+
+ /**
+ * Smarty count modifier plugin
+ * Type: modifier
+ * Name: count
+ * Purpose: counts all elements in an array or in a Countable object
+ * Input:
+ * - Countable|array: array or object to count
+ * - mode: int defaults to 0 for normal count mode, if set to 1 counts recursive
+ *
+ * @param mixed $arrayOrObject input array/object
+ * @param int $mode count mode
+ *
+ * @return int
+ */
+ public function smarty_modifier_count($arrayOrObject, $mode = 0) {
+ /*
+ * @see https://www.php.net/count
+ * > Prior to PHP 8.0.0, if the parameter was neither an array nor an object that implements the Countable interface,
+ * > 1 would be returned, unless value was null, in which case 0 would be returned.
+ */
+
+ if ($arrayOrObject instanceof \Countable || is_array($arrayOrObject)) {
+ return count($arrayOrObject, (int) $mode);
+ } elseif ($arrayOrObject === null) {
+ return 0;
+ }
+ return 1;
+ }
+
+ /**
+ * Smarty date_format modifier plugin
+ * Type: modifier
+ * Name: date_format
+ * Purpose: format datestamps via strftime
+ * Input:
+ * - string: input date string
+ * - format: strftime format for output
+ * - default_date: default date if $string is empty
+ *
+ * @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()
+ */
+ public function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
+ {
+ if ($format === null) {
+ $format = \Smarty\Smarty::$_DATE_FORMAT;
+ }
+
+ if (!empty($string) && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
+ $timestamp = smarty_make_timestamp($string);
+ } elseif (!empty($default_date)) {
+ $timestamp = smarty_make_timestamp($default_date);
+ } else {
+ return;
+ }
+ if ($formatter === 'strftime' || ($formatter === 'auto' && strpos($format, '%') !== false)) {
+ if (\Smarty\Smarty::$_IS_WINDOWS) {
+ $_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);
+ }
+ // @ to suppress deprecation errors when running in PHP8.1 or higher.
+ return @strftime($format, $timestamp);
+ } else {
+ return date($format, $timestamp);
+ }
+ }
+
+ /**
+ * Smarty debug_print_var modifier plugin
+ * Type: modifier
+ * Name: debug_print_var
+ * Purpose: formats variable contents for display in the console
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param array|object $var variable to be formatted
+ * @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
+ */
+ public function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array())
+ {
+ $_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; ' .
+ $this->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> = ' . $this->smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects);
+ $depth--;
+ }
+ break;
+ case 'boolean':
+ case 'NULL':
+ case 'resource':
+ if (true === $var) {
+ $results = 'true';
+ } elseif (false === $var) {
+ $results = 'false';
+ } elseif (null === $var) {
+ $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 (mb_strlen($var, \Smarty\Smarty::$_CHARSET) > $length) {
+ $results = mb_substr($var, 0, $length - 3, \Smarty\Smarty::$_CHARSET) . '...';
+ }
+ $results = htmlspecialchars('"' . $results . '"', ENT_QUOTES, \Smarty\Smarty::$_CHARSET);
+ break;
+ case 'unknown type':
+ default:
+ $results = strtr((string)$var, $_replace);
+ if (mb_strlen($results, \Smarty\Smarty::$_CHARSET) > $length) {
+ $results = mb_substr($results, 0, $length - 3, \Smarty\Smarty::$_CHARSET) . '...';
+ }
+ $results = htmlspecialchars($results, ENT_QUOTES, \Smarty\Smarty::$_CHARSET);
+ }
+ return $results;
+ }
+
+ /**
+ * Smarty escape modifier plugin
+ * Type: modifier
+ * Name: escape
+ * Purpose: escape string for output
+ *
+ * @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
+ */
+ public function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
+ {
+ if (!$char_set) {
+ $char_set = \Smarty\Smarty::$_CHARSET;
+ }
+
+ $string = (string)$string;
+
+ switch ($esc_type) {
+ case 'html':
+ return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
+ // no break
+ case 'htmlall':
+ $string = mb_convert_encoding($string, 'UTF-8', $char_set);
+ return htmlentities($string, ENT_QUOTES, 'UTF-8', $double_encode);
+ // no break
+ case 'url':
+ return rawurlencode($string);
+ case 'urlpathinfo':
+ return str_replace('%2F', '/', rawurlencode($string));
+ case 'quotes':
+ // escape unescaped single quotes
+ return preg_replace("%(?<!\\\\)'%", "\\'", $string);
+ case 'hex':
+ // escape every byte into hex
+ // Note that the UTF-8 encoded character ä will be represented as %c3%a4
+ $return = '';
+ $_length = strlen($string);
+ for ($x = 0; $x < $_length; $x++) {
+ $return .= '%' . bin2hex($string[ $x ]);
+ }
+ return $return;
+ case 'hexentity':
+ $return = '';
+ foreach ($this->mb_to_unicode($string, \Smarty\Smarty::$_CHARSET) as $unicode) {
+ $return .= '&#x' . strtoupper(dechex($unicode)) . ';';
+ }
+ return $return;
+ case 'decentity':
+ $return = '';
+ foreach ($this->mb_to_unicode($string, \Smarty\Smarty::$_CHARSET) as $unicode) {
+ $return .= '&#' . $unicode . ';';
+ }
+ return $return;
+ case 'javascript':
+ // escape quotes and backslashes, newlines, etc.
+ return strtr(
+ $string,
+ array(
+ '\\' => '\\\\',
+ "'" => "\\'",
+ '"' => '\\"',
+ "\r" => '\\r',
+ "\n" => '\\n',
+ '</' => '<\/',
+ // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
+ '<!--' => '<\!--',
+ '<s' => '<\s',
+ '<S' => '<\S',
+ "`" => "\\\\`",
+ "\${" => "\\\\\\$\\{"
+ )
+ );
+ case 'mail':
+ return smarty_mb_str_replace(
+ array(
+ '@',
+ '.'
+ ),
+ array(
+ ' [AT] ',
+ ' [DOT] '
+ ),
+ $string
+ );
+ case 'nonstd':
+ // escape non-standard chars, such as ms document quotes
+ $return = '';
+ foreach ($this->mb_to_unicode($string, \Smarty\Smarty::$_CHARSET) as $unicode) {
+ if ($unicode >= 126) {
+ $return .= '&#' . $unicode . ';';
+ } else {
+ $return .= chr($unicode);
+ }
+ }
+ return $return;
+ default:
+ trigger_error("escape: unsupported type: $esc_type - returning unmodified string", E_USER_NOTICE);
+ return $string;
+ }
+ }
+
+
+ /**
+ * convert characters to their decimal unicode equivalents
+ *
+ * @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
+ *
+ * @return array sequence of unicodes
+ * @author Rodney Rehm
+ */
+ private function 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);
+ }
+
+ /**
+ * Smarty explode modifier plugin
+ * Type: modifier
+ * Name: explode
+ * Purpose: split a string by a string
+ *
+ * @param string $separator
+ * @param string $string
+ * @param int|null $limit
+ *
+ * @return array
+ */
+ public function smarty_modifier_explode($separator, $string, ?int $limit = null)
+ {
+ trigger_error("Using explode is deprecated. " .
+ "Use split, using the array first, separator second.", E_USER_DEPRECATED);
+ // provide $string default to prevent deprecation errors in PHP >=8.1
+ return explode($separator, $string ?? '', $limit ?? PHP_INT_MAX);
+ }
+
+ /**
+ * Smarty split modifier plugin
+ * Type: modifier
+ * Name: split
+ * Purpose: split a string by a string
+ *
+ * @param string $string
+ * @param string $separator
+ * @param int|null $limit
+ *
+ * @return array
+ */
+ public function smarty_modifier_split($string, $separator, ?int $limit = null)
+ {
+ // provide $string default to prevent deprecation errors in PHP >=8.1
+ return explode($separator, $string ?? '', $limit ?? PHP_INT_MAX);
+ }
+
+ /**
+ * Smarty implode modifier plugin
+ * Type: modifier
+ * Name: implode
+ * Purpose: join an array of values into a single string
+ *
+ * @param array $values
+ * @param string $separator
+ *
+ * @return string
+ */
+ public function smarty_modifier_implode($values, $separator = '')
+ {
+
+ trigger_error("Using implode is deprecated. " .
+ "Use join using the array first, separator second.", E_USER_DEPRECATED);
+
+ if (is_array($separator)) {
+ return implode((string) ($values ?? ''), (array) $separator);
+ }
+ return implode((string) ($separator ?? ''), (array) $values);
+ }
+
+ /**
+ * Smarty in_array modifier plugin
+ * Type: modifier
+ * Name: in_array
+ * Purpose: test if value is contained in an array
+ *
+ * @param mixed $needle
+ * @param array $array
+ * @param bool $strict
+ *
+ * @return bool
+ */
+ public function smarty_modifier_in_array($needle, $array, $strict = false)
+ {
+ return in_array($needle, (array) $array, (bool) $strict);
+ }
+
+ /**
+ * Smarty join modifier plugin
+ * Type: modifier
+ * Name: join
+ * Purpose: join an array of values into a single string
+ *
+ * @param array $values
+ * @param string $separator
+ *
+ * @return string
+ */
+ public function smarty_modifier_join($values, $separator = '')
+ {
+ if (is_array($separator)) {
+ trigger_error("Using join with the separator first is deprecated. " .
+ "Call join using the array first, separator second.", E_USER_DEPRECATED);
+ return implode((string) ($values ?? ''), (array) $separator);
+ }
+ return implode((string) ($separator ?? ''), (array) $values);
+ }
+
+ /**
+ * Smarty wordwrap modifier plugin
+ * Type: modifier
+ * Name: mb_wordwrap
+ * Purpose: Wrap a string to a given number of characters
+ *
+ * @link https://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
+ */
+ public function smarty_modifier_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
+ {
+ return smarty_mb_wordwrap($str, $width, $break, $cut);
+ }
+
+ /**
+ * Smarty number_format modifier plugin
+ * Type: modifier
+ * Name: number_format
+ * Purpose: Format a number with grouped thousands
+ *
+ * @param float|null $num
+ * @param int $decimals
+ * @param string|null $decimal_separator
+ * @param string|null $thousands_separator
+ *
+ * @return string
+ */
+ public function smarty_modifier_number_format(?float $num, int $decimals = 0, ?string $decimal_separator = ".", ?string $thousands_separator = ",")
+ {
+ // provide $num default to prevent deprecation errors in PHP >=8.1
+ return number_format($num ?? 0.0, $decimals, $decimal_separator, $thousands_separator);
+ }
+
+ /**
+ * Smarty regex_replace modifier plugin
+ * Type: modifier
+ * Name: regex_replace
+ * Purpose: regular expression search/replace
+ *
+ * @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
+ */
+ public function smarty_modifier_regex_replace($string, $search, $replace, $limit = -1)
+ {
+ if (is_array($search)) {
+ foreach ($search as $idx => $s) {
+ $search[ $idx ] = $this->regex_replace_check($s);
+ }
+ } else {
+ $search = $this->regex_replace_check($search);
+ }
+ return preg_replace($search, $replace, $string, $limit);
+ }
+
+ /**
+ * @param string $search string(s) that should be replaced
+ *
+ * @return string
+ * @ignore
+ */
+ private function 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);
+ }
+ // 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 ]);
+ }
+ return $search;
+ }
+
+ /**
+ * Smarty replace modifier plugin
+ * Type: modifier
+ * Name: replace
+ * Purpose: simple search/replace
+ *
+ * @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
+ */
+ public function smarty_modifier_replace($string, $search, $replace)
+ {
+ return smarty_mb_str_replace($search, $replace, $string);
+ }
+
+ /**
+ * Smarty truncate modifier plugin
+ * Type: modifier
+ * Name: truncate
+ * 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.
+ *
+ * @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
+ */
+ public function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
+ {
+ if ($length === 0 || $string === null) {
+ return '';
+ }
+ if (mb_strlen($string, \Smarty\Smarty::$_CHARSET) > $length) {
+ $length -= min($length, mb_strlen($etc, \Smarty\Smarty::$_CHARSET));
+ if (!$break_words && !$middle) {
+ $string = preg_replace(
+ '/\s+?(\S+)?$/' . \Smarty\Smarty::$_UTF8_MODIFIER,
+ '',
+ mb_substr($string, 0, $length + 1, \Smarty\Smarty::$_CHARSET)
+ );
+ }
+ if (!$middle) {
+ return mb_substr($string, 0, $length, \Smarty\Smarty::$_CHARSET) . $etc;
+ }
+ return mb_substr($string, 0, intval($length / 2), \Smarty\Smarty::$_CHARSET) . $etc .
+ mb_substr($string, -intval($length / 2), $length, \Smarty\Smarty::$_CHARSET);
+ }
+ return $string;
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Extension/ExtensionInterface.php b/vendor/smarty/smarty/src/Extension/ExtensionInterface.php
new file mode 100644
index 000000000..72e358ee5
--- /dev/null
+++ b/vendor/smarty/smarty/src/Extension/ExtensionInterface.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Smarty\Extension;
+
+use Smarty\BlockHandler\BlockHandlerInterface;
+use Smarty\Compile\CompilerInterface;
+use Smarty\Compile\Modifier\ModifierCompilerInterface;
+use Smarty\FunctionHandler\FunctionHandlerInterface;
+
+interface ExtensionInterface {
+
+ /**
+ * Either return \Smarty\Compile\CompilerInterface that will compile the given $tag or
+ * return null to indicate that you do not know how to handle this $tag. (Another Extension might.)
+ *
+ * @param string $tag
+ * @return CompilerInterface|null
+ */
+ public function getTagCompiler(string $tag): ?CompilerInterface;
+
+ /**
+ * Either return \Smarty\Compile\Modifier\ModifierCompilerInterface that will compile the given $modifier or
+ * return null to indicate that you do not know how to handle this $modifier. (Another Extension might.)
+ *
+ * @param string $modifier
+ * @return ModifierCompilerInterface|null
+ */
+ public function getModifierCompiler(string $modifier): ?ModifierCompilerInterface;
+
+ /**
+ * Either return \Smarty\FunctionHandler\FunctionHandlerInterface that will handle the given $functionName or
+ * return null to indicate that you do not know how to handle this $functionName. (Another Extension might.)
+ *
+ * @param string $functionName
+ * @return FunctionHandlerInterface|null
+ */
+ public function getFunctionHandler(string $functionName): ?FunctionHandlerInterface;
+
+ /**
+ * Either return \Smarty\BlockHandler\BlockHandlerInterface that will handle the given $blockTagName or return null
+ * to indicate that you do not know how to handle this $blockTagName. (Another Extension might.)
+ *
+ * @param string $blockTagName
+ * @return BlockHandlerInterface|null
+ */
+ public function getBlockHandler(string $blockTagName): ?BlockHandlerInterface;
+
+ /**
+ * Either return a callable that takes at least 1 parameter (a string) and returns a modified string or return null
+ * to indicate that you do not know how to handle this $modifierName. (Another Extension might.)
+ *
+ * The callable can accept additional optional parameters.
+ *
+ * @param string $modifierName
+ * @return callable|null
+ */
+ public function getModifierCallback(string $modifierName);
+
+ /**
+ * Return a list of prefilters that will all be applied, in sequence.
+ * Template prefilters can be used to preprocess templates before they are compiled.
+ *
+ * @return \Smarty\Filter\FilterInterface[]
+ */
+ public function getPreFilters(): array;
+
+ /**
+ * Return a list of postfilters that will all be applied, in sequence.
+ * Template postfilters can be used to process compiled template code (so, after the compilation).
+ *
+ * @return \Smarty\Filter\FilterInterface[]
+ */
+ public function getPostFilters(): array;
+
+ /**
+ * Return a list of outputfilters that will all be applied, in sequence.
+ * Template outputfilters can be used to change template output just before it is rendered.
+ *
+ * @return \Smarty\Filter\FilterInterface[]
+ */
+ public function getOutputFilters(): array;
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Filter/FilterInterface.php b/vendor/smarty/smarty/src/Filter/FilterInterface.php
new file mode 100644
index 000000000..42280e25b
--- /dev/null
+++ b/vendor/smarty/smarty/src/Filter/FilterInterface.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace Smarty\Filter;
+
+interface FilterInterface {
+
+ public function filter($code, \Smarty\Template $template);
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Filter/FilterPluginWrapper.php b/vendor/smarty/smarty/src/Filter/FilterPluginWrapper.php
new file mode 100644
index 000000000..665ee385c
--- /dev/null
+++ b/vendor/smarty/smarty/src/Filter/FilterPluginWrapper.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace Smarty\Filter;
+
+class FilterPluginWrapper implements FilterInterface {
+
+ private $callback;
+
+ public function __construct($callback) {
+ $this->callback = $callback;
+ }
+ public function filter($code, \Smarty\Template $template) {
+ return call_user_func($this->callback, $code, $template);
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Filter/Output/TrimWhitespace.php b/vendor/smarty/smarty/src/Filter/Output/TrimWhitespace.php
new file mode 100644
index 000000000..5803725ee
--- /dev/null
+++ b/vendor/smarty/smarty/src/Filter/Output/TrimWhitespace.php
@@ -0,0 +1,91 @@
+<?php
+
+namespace Smarty\Filter\Output;
+
+/**
+ * Smarty trimwhitespace outputfilter plugin
+ * Trim unnecessary whitespace from HTML markup.
+ *
+ * @author Rodney Rehm
+ *
+ * @param string $source input string
+ *
+ * @return string filtered output
+ */
+class TrimWhitespace implements \Smarty\Filter\FilterInterface {
+
+ public function filter($code, \Smarty\Template $template) {
+
+ $source = $code;
+
+ $store = array();
+ $_store = 0;
+ $_offset = 0;
+ // Unify Line-Breaks to \n
+ $source = preg_replace('/\015\012|\015|\012/', "\n", $source);
+ // capture Internet Explorer and KnockoutJS Conditional Comments
+ if (preg_match_all(
+ '#<!--((\[[^\]]+\]>.*?<!\[[^\]]+\])|(\s*/?ko\s+.+))-->#is',
+ $source,
+ $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER
+ )
+ ) {
+ foreach ($matches as $match) {
+ $store[] = $match[ 0 ][ 0 ];
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
+ $_offset += $_length - strlen($replace);
+ $_store++;
+ }
+ }
+ // Strip all HTML-Comments
+ // yes, even the ones in <script> - see https://stackoverflow.com/a/808850/515124
+ $source = preg_replace('#<!--.*?-->#ms', '', $source);
+ // capture html elements not to be messed with
+ $_offset = 0;
+ 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 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $source = substr_replace($source, $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, because 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',
+ // 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' => '>',
+ );
+ $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 );
+ $_offset = 0;
+ if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+ foreach ($matches as $match) {
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = $store[ $match[ 1 ][ 0 ] ];
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
+ $_offset += strlen($replace) - $_length;
+ $_store++;
+ }
+ }
+ return $source;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php b/vendor/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php
new file mode 100644
index 000000000..04af07ed8
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+class BCPluginWrapper extends Base {
+
+ private $callback;
+
+ public function __construct($callback, bool $cacheable = true) {
+ $this->callback = $callback;
+ $this->cacheable = $cacheable;
+ }
+
+ public function handle($params, Template $template) {
+ $func = $this->callback;
+ return $func($params, $template);
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/Base.php b/vendor/smarty/smarty/src/FunctionHandler/Base.php
new file mode 100644
index 000000000..7cf196372
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/Base.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+class Base implements FunctionHandlerInterface {
+
+ /**
+ * @var bool
+ */
+ protected $cacheable = true;
+
+ public function isCacheable(): bool {
+ return $this->cacheable;
+ }
+
+ public function handle($params, Template $template) {
+ // TODO: Implement handle() method.
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/Count.php b/vendor/smarty/smarty/src/FunctionHandler/Count.php
new file mode 100644
index 000000000..768d809b5
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/Count.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Smarty\FunctionHandler;
+
+use Smarty\Exception;
+use Smarty\Template;
+
+/**
+ * count(Countable|array $value, int $mode = COUNT_NORMAL): int
+ * If the optional mode parameter is set to COUNT_RECURSIVE (or 1), count() will recursively count the array.
+ * This is particularly useful for counting all the elements of a multidimensional array.
+ *
+ * Returns the number of elements in value. Prior to PHP 8.0.0, if the parameter was neither an array nor an object that
+ * implements the Countable interface, 1 would be returned, unless value was null, in which case 0 would be returned.
+ */
+class Count extends Base {
+
+ public function handle($params, Template $template) {
+
+ $params = array_values($params ?? []);
+
+ if (count($params) < 1 || count($params) > 2) {
+ throw new Exception("Invalid number of arguments for count. count expects 1 or 2 parameters.");
+ }
+
+ $value = $params[0];
+
+ if ($value instanceof \Countable) {
+ return $value->count();
+ }
+
+ $mode = count($params) == 2 ? (int) $params[1] : COUNT_NORMAL;
+ return count((array) $value, $mode);
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/Counter.php b/vendor/smarty/smarty/src/FunctionHandler/Counter.php
new file mode 100644
index 000000000..b447caf1f
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/Counter.php
@@ -0,0 +1,61 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {counter} function plugin
+ * Type: function
+ * Name: counter
+ * Purpose: print out a counter value
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @return string|null
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ */
+class Counter extends Base {
+
+ private $counters = [];
+
+ public function handle($params, Template $template) {
+ $name = (isset($params['name'])) ? $params['name'] : 'default';
+ if (!isset($this->counters[$name])) {
+ $this->counters[$name] = ['start' => 1, 'skip' => 1, 'direction' => 'up', 'count' => 1];
+ }
+ $counter =& $this->counters[$name];
+ if (isset($params['start'])) {
+ $counter['start'] = $counter['count'] = (int)$params['start'];
+ }
+ if (!empty($params['assign'])) {
+ $counter['assign'] = $params['assign'];
+ }
+ if (isset($counter['assign'])) {
+ $template->assign($counter['assign'], $counter['count']);
+ }
+ if (isset($params['print'])) {
+ $print = (bool)$params['print'];
+ } else {
+ $print = empty($counter['assign']);
+ }
+ if ($print) {
+ $retval = $counter['count'];
+ } else {
+ $retval = null;
+ }
+ if (isset($params['skip'])) {
+ $counter['skip'] = $params['skip'];
+ }
+ if (isset($params['direction'])) {
+ $counter['direction'] = $params['direction'];
+ }
+ if ($counter['direction'] === 'down') {
+ $counter['count'] -= $counter['skip'];
+ } else {
+ $counter['count'] += $counter['skip'];
+ }
+ return $retval;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/Cycle.php b/vendor/smarty/smarty/src/FunctionHandler/Cycle.php
new file mode 100644
index 000000000..909a688b6
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/Cycle.php
@@ -0,0 +1,90 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {cycle} function plugin
+ * Type: function
+ * Name: cycle
+ * Date: May 3, 2002
+ * Purpose: cycle through given values
+ * Params:
+ *
+ * - name - name of cycle (optional)
+ * - values - comma separated list of values to cycle, or an array of values to cycle
+ * (this can be left out for subsequent calls)
+ * - reset - boolean - resets given var to true
+ * - print - boolean - print var or not. default is true
+ * - advance - boolean - whether to advance the cycle
+ * - delimiter - the value delimiter, default is ","
+ * - assign - boolean, assigns to template var instead of printed.
+ *
+ * Examples:
+ *
+ * {cycle values="#eeeeee,#d0d0d0d"}
+ * {cycle name=row values="one,two,three" reset=true}
+ * {cycle name=row}
+ *
+ * @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 Template $template template object
+ *
+ * @return string|null
+ */
+class Cycle extends Base {
+
+ public function handle($params, Template $template) {
+ static $cycle_vars;
+ $name = (empty($params['name'])) ? 'default' : $params['name'];
+ $print = !(isset($params['print'])) || (bool)$params['print'];
+ $advance = !(isset($params['advance'])) || (bool)$params['advance'];
+ $reset = isset($params['reset']) && (bool)$params['reset'];
+ if (!isset($params['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']) {
+ $cycle_vars[$name]['index'] = 0;
+ }
+ $cycle_vars[$name]['values'] = $params['values'];
+ }
+ if (isset($params['delimiter'])) {
+ $cycle_vars[$name]['delimiter'] = $params['delimiter'];
+ } elseif (!isset($cycle_vars[$name]['delimiter'])) {
+ $cycle_vars[$name]['delimiter'] = ',';
+ }
+ 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']);
+ }
+ if (!isset($cycle_vars[$name]['index']) || $reset) {
+ $cycle_vars[$name]['index'] = 0;
+ }
+ if (isset($params['assign'])) {
+ $print = false;
+ $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
+ }
+ if ($print) {
+ $retval = $cycle_array[$cycle_vars[$name]['index']];
+ } else {
+ $retval = null;
+ }
+ if ($advance) {
+ if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
+ $cycle_vars[$name]['index'] = 0;
+ } else {
+ $cycle_vars[$name]['index']++;
+ }
+ }
+ return $retval;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/Fetch.php b/vendor/smarty/smarty/src/FunctionHandler/Fetch.php
new file mode 100644
index 000000000..d10ef668f
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/Fetch.php
@@ -0,0 +1,203 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Exception;
+use Smarty\Template;
+
+/**
+ * Smarty {fetch} plugin
+ * Type: function
+ * Name: fetch
+ * Purpose: fetch file, web or ftp data and display results
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @throws Exception
+ * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
+ */
+class Fetch extends Base {
+
+ public function handle($params, Template $template) {
+ if (empty($params['file'])) {
+ 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->getSmarty()->security_policy)) {
+ if ($protocol) {
+ // remote resource (or php stream, …)
+ if (!$template->getSmarty()->security_policy->isTrustedUri($params['file'])) {
+ return;
+ }
+ } else {
+ // local file
+ if (!$template->getSmarty()->security_policy->isTrustedResourceDir($params['file'])) {
+ return;
+ }
+ }
+ }
+ $content = '';
+ if ($protocol === 'http') {
+ // http fetch
+ 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::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'])) {
+ $port = 80;
+ } else {
+ $port = $uri_parts['port'];
+ }
+ if (!empty($uri_parts['user'])) {
+ $user = $uri_parts['user'];
+ }
+ if (!empty($uri_parts['pass'])) {
+ $pass = $uri_parts['pass'];
+ }
+ // loop through parameters, setup headers
+ foreach ($params as $param_key => $param_value) {
+ switch ($param_key) {
+ case 'file':
+ case 'assign':
+ case 'assign_headers':
+ break;
+ case 'user':
+ if (!empty($param_value)) {
+ $user = $param_value;
+ }
+ break;
+ case 'pass':
+ if (!empty($param_value)) {
+ $pass = $param_value;
+ }
+ break;
+ case 'accept':
+ 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);
+ return;
+ } else {
+ $extra_headers[] = $param_value;
+ }
+ }
+ break;
+ case 'proxy_host':
+ if (!empty($param_value)) {
+ $proxy_host = $param_value;
+ }
+ break;
+ case 'proxy_port':
+ if (!preg_match('!\D!', $param_value)) {
+ $proxy_port = (int)$param_value;
+ } else {
+ trigger_error("[plugin] invalid value for attribute '{$param_key }'", E_USER_NOTICE);
+ return;
+ }
+ break;
+ case 'agent':
+ if (!empty($param_value)) {
+ $agent = $param_value;
+ }
+ break;
+ case 'referer':
+ if (!empty($param_value)) {
+ $referer = $param_value;
+ }
+ break;
+ case 'timeout':
+ if (!preg_match('!\D!', $param_value)) {
+ $timeout = (int)$param_value;
+ } else {
+ 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);
+ return;
+ }
+ }
+ if (!empty($proxy_host) && !empty($proxy_port)) {
+ $_is_proxy = true;
+ $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
+ } else {
+ $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
+ }
+ if (!$fp) {
+ trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
+ return;
+ } else {
+ 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)) {
+ fputs($fp, "Host: $host\r\n");
+ }
+ if (!empty($accept)) {
+ fputs($fp, "Accept: $accept\r\n");
+ }
+ if (!empty($agent)) {
+ fputs($fp, "User-Agent: $agent\r\n");
+ }
+ 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 (!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);
+ }
+ fclose($fp);
+ $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]));
+ }
+ }
+ } else {
+ 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 Exception("{fetch} cannot read resource '" . $params['file'] . "'");
+ }
+ }
+ if (!empty($params['assign'])) {
+ $template->assign($params['assign'], $content);
+ } else {
+ return $content;
+ }
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php b/vendor/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php
new file mode 100644
index 000000000..ce77e13d2
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+interface FunctionHandlerInterface {
+ public function handle($params, Template $template);
+ public function isCacheable(): bool;
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/HtmlBase.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlBase.php
new file mode 100644
index 000000000..99f8e6c77
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlBase.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace Smarty\FunctionHandler;
+
+class HtmlBase extends Base {
+
+ /**
+ * @param $inputType
+ * @param $name
+ * @param $value
+ * @param $output
+ * @param $ismultiselect
+ * @param $selected
+ * @param $extra
+ * @param $separator
+ * @param $labels
+ * @param $label_ids
+ * @param bool $escape
+ *
+ * @return string
+ */
+ protected function getHtmlForInput(
+ $inputType,
+ $name,
+ $value,
+ $output,
+ $ismultiselect,
+ $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(
+ '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(
+ '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\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="' . $inputType . '" name="' . $name;
+ if ($ismultiselect) {
+ $_output .= '[]';
+ }
+ $_output .= '" value="' . $value . '"';
+ if ($labels && $label_ids) {
+ $_output .= ' id="' . $_id . '"';
+ }
+ if ($ismultiselect && is_array($selected)) {
+ if (isset($selected[ $value ])) {
+ $_output .= ' checked="checked"';
+ }
+ } elseif ($value === $selected) {
+ $_output .= ' checked="checked"';
+ }
+ $_output .= $extra . ' />' . $output;
+ if ($labels) {
+ $_output .= '</label>';
+ }
+ $_output .= $separator;
+ return $_output;
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php
new file mode 100644
index 000000000..45ecc40a1
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php
@@ -0,0 +1,189 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {html_checkboxes} function plugin
+ * File: HtmlCheckboxes.php
+ * Type: function
+ * Name: html_checkboxes
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of checkbox input types
+ * Examples:
+ *
+ * {html_checkboxes values=$ids output=$names}
+ * {html_checkboxes values=$ids name='box' separator='<br>' output=$names}
+ * {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names}
+ *
+ * Params:
+ *
+ * - name (optional) - string default "checkbox"
+ * - values (required) - array
+ * - options (optional) - associative array
+ * - checked (optional) - array default not set
+ * - separator (optional) - ie <br> or &nbsp;
+ * - output (optional) - the output next to each checkbox
+ * - assign (optional) - assign the output as an array to this variable
+ * - escape (optional) - escape the content (not value), defaults to true
+ *
+ * @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 Template $template template object
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \Smarty\Exception
+ */
+class HtmlCheckboxes extends HtmlBase {
+
+ public function handle($params, Template $template) {
+ $name = 'checkbox';
+ $values = null;
+ $options = null;
+ $selected = [];
+ $separator = '';
+ $escape = true;
+ $labels = true;
+ $label_ids = false;
+ $output = null;
+ $extra = '';
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'name':
+ case 'separator':
+ $$_key = (string)$_val;
+ break;
+ case 'escape':
+ case 'labels':
+ case 'label_ids':
+ $$_key = (bool)$_val;
+ break;
+ case 'options':
+ $$_key = (array)$_val;
+ break;
+ case 'values':
+ case 'output':
+ $$_key = array_values((array)$_val);
+ break;
+ case 'checked':
+ case 'selected':
+ if (is_array($_val)) {
+ $selected = [];
+ foreach ($_val as $_sel) {
+ if (is_object($_sel)) {
+ 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
+ );
+ continue;
+ }
+ } else {
+ $_sel = smarty_function_escape_special_chars((string)$_sel);
+ }
+ $selected[$_sel] = true;
+ }
+ } elseif (is_object($_val)) {
+ 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
+ );
+ }
+ } else {
+ $selected = smarty_function_escape_special_chars((string)$_val);
+ }
+ break;
+ case 'checkboxes':
+ trigger_error(
+ 'html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead',
+ E_USER_WARNING
+ );
+ $options = (array)$_val;
+ break;
+ case 'strict':
+ case 'assign':
+ 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!
+ // no break
+ default:
+ 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);
+ }
+ break;
+ }
+ }
+ if (!isset($options) && !isset($values)) {
+ return '';
+ } /* raise error here? */
+ $_html_result = [];
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'checkbox',
+ $name,
+ $_key,
+ $_val,
+ true,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ } else {
+ foreach ($values as $_i => $_key) {
+ $_val = isset($output[$_i]) ? $output[$_i] : '';
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'checkbox',
+ $name,
+ $_key,
+ $_val,
+ true,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ }
+ if (!empty($params['assign'])) {
+ $template->assign($params['assign'], $_html_result);
+ } else {
+ return implode("\n", $_html_result);
+ }
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/FunctionHandler/HtmlImage.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlImage.php
new file mode 100644
index 000000000..9cb087456
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlImage.php
@@ -0,0 +1,149 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Exception;
+use Smarty\Template;
+
+/**
+ * Smarty {html_image} function plugin
+ * Type: function
+ * Name: html_image
+ * Date: Feb 24, 2003
+ * Purpose: format HTML tags for the image
+ * Examples: {html_image file="/images/masthead.gif"}
+ * Output: <img src="/images/masthead.gif" width=400 height=23>
+ * Params:
+ *
+ * - file - (required) - file (and path) of image
+ * - height - (optional) - image height (default actual height)
+ * - width - (optional) - image width (default actual width)
+ * - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
+ * - path_prefix - prefix for path output (optional, default empty)
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credits to Duda <duda@big.hu>
+ * @version 1.0
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @throws Exception
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ */
+class HtmlImage extends Base {
+
+ public function handle($params, Template $template) {
+ $alt = '';
+ $file = '';
+ $height = '';
+ $width = '';
+ $extra = '';
+ $prefix = '';
+ $suffix = '';
+ $path_prefix = '';
+ $basedir = $_SERVER['DOCUMENT_ROOT'] ?? '';
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'file':
+ case 'height':
+ case 'width':
+ case 'dpi':
+ case 'path_prefix':
+ case 'basedir':
+ $$_key = $_val;
+ break;
+ case 'alt':
+ if (!is_array($_val)) {
+ $$_key = smarty_function_escape_special_chars($_val);
+ } else {
+ throw new Exception(
+ "html_image: extra attribute '{$_key}' cannot be an array",
+ E_USER_NOTICE
+ );
+ }
+ break;
+ case 'link':
+ case 'href':
+ $prefix = '<a href="' . $_val . '">';
+ $suffix = '</a>';
+ break;
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ throw new Exception(
+ "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->getSmarty()->security_policy)) {
+ if ($protocol) {
+ // remote resource (or php stream, …)
+ if (!$template->getSmarty()->security_policy->isTrustedUri($params['file'])) {
+ return;
+ }
+ } else {
+ // local file
+ if (!$template->getSmarty()->security_policy->isTrustedResourceDir($_image_path)) {
+ return;
+ }
+ }
+ }
+ if (!isset($params['width']) || !isset($params['height'])) {
+ // FIXME: (rodneyrehm) getimagesize() loads the complete file off a remote resource, use custom [jpg,png,gif]header reader!
+ if (!$_image_data = @getimagesize($_image_path)) {
+ if (!file_exists($_image_path)) {
+ trigger_error("html_image: unable to find '{$_image_path}'", E_USER_NOTICE);
+ return;
+ } 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')) {
+ // FIXME: (rodneyrehm) wrong dpi assumption
+ // don't know who thought this up… even if it was true in 1998, it's definitely wrong in 2011.
+ $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/vendor/smarty/smarty/src/FunctionHandler/HtmlOptions.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlOptions.php
new file mode 100644
index 000000000..5346738b6
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlOptions.php
@@ -0,0 +1,223 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {html_options} function plugin
+ * Type: function
+ * Name: html_options
+ * Purpose: Prints the list of <option> tags generated from
+ * the passed parameters
+ * Params:
+ *
+ * - name (optional) - string default "select"
+ * - values (required) - if no options supplied) - array
+ * - options (required) - if no values supplied) - associative array
+ * - selected (optional) - string default not set
+ * - output (required) - if not options supplied) - array
+ * - id (optional) - string default not set
+ * - class (optional) - string default not set
+ *
+ * @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\Template $template
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \Smarty\Exception
+ */
+class HtmlOptions extends Base {
+
+ public function handle($params, Template $template) {
+ $name = null;
+ $values = null;
+ $options = null;
+ $selected = null;
+ $output = null;
+ $id = null;
+ $class = null;
+ $extra = '';
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'name':
+ case 'class':
+ case 'id':
+ $$_key = (string)$_val;
+ break;
+ case 'options':
+ $options = (array)$_val;
+ break;
+ case 'values':
+ case 'output':
+ $$_key = array_values((array)$_val);
+ break;
+ case 'selected':
+ if (is_array($_val)) {
+ $selected = [];
+ foreach ($_val as $_sel) {
+ if (is_object($_sel)) {
+ 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
+ );
+ continue;
+ }
+ } else {
+ $_sel = smarty_function_escape_special_chars((string)$_sel);
+ }
+ $selected[$_sel] = true;
+ }
+ } elseif (is_object($_val)) {
+ 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
+ );
+ }
+ } else {
+ $selected = smarty_function_escape_special_chars((string)$_val);
+ }
+ 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!
+ // no break
+ 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 '';
+ }
+ $_html_result = '';
+ $_idx = 0;
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result .= $this->output($_key, $_val, $selected, $id, $class, $_idx);
+ }
+ } else {
+ foreach ($values as $_i => $_key) {
+ $_val = $output[$_i] ?? '';
+ $_html_result .= $this->output($_key, $_val, $selected, $id, $class, $_idx);
+ }
+ }
+ if (!empty($name)) {
+ $_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;
+ }
+
+
+ /**
+ * @param $key
+ * @param $value
+ * @param $selected
+ * @param $id
+ * @param $class
+ * @param $idx
+ *
+ * @return string
+ */
+ private function output($key, $value, $selected, $id, $class, &$idx)
+ {
+ if (!is_array($value)) {
+ $_key = smarty_function_escape_special_chars($key);
+ $_html_result = '<option value="' . $_key . '"';
+ if (is_array($selected)) {
+ if (isset($selected[ $_key ])) {
+ $_html_result .= ' selected="selected"';
+ }
+ } elseif ($_key === $selected) {
+ $_html_result .= ' selected="selected"';
+ }
+ $_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
+ );
+ return '';
+ }
+ } else {
+ $value = smarty_function_escape_special_chars((string)$value);
+ }
+ $_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n";
+ $idx++;
+ } else {
+ $_idx = 0;
+ $_html_result =
+ $this->getHtmlForOptGroup(
+ $key,
+ $value,
+ $selected,
+ !empty($id) ? ($id . '-' . $idx) : null,
+ $class,
+ $_idx
+ );
+ $idx++;
+ }
+ return $_html_result;
+ }
+
+ /**
+ * @param $key
+ * @param $values
+ * @param $selected
+ * @param $id
+ * @param $class
+ * @param $idx
+ *
+ * @return string
+ */
+ private function getHtmlForOptGroup($key, $values, $selected, $id, $class, &$idx)
+ {
+ $optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";
+ foreach ($values as $key => $value) {
+ $optgroup_html .= $this->output($key, $value, $selected, $id, $class, $idx);
+ }
+ $optgroup_html .= "</optgroup>\n";
+ return $optgroup_html;
+ }
+
+}
+
diff --git a/vendor/smarty/smarty/src/FunctionHandler/HtmlRadios.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlRadios.php
new file mode 100644
index 000000000..544c5c7d4
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlRadios.php
@@ -0,0 +1,174 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {html_radios} function plugin
+ * File: HtmlRadios.php
+ * Type: function
+ * Name: html_radios
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of radio input types
+ * Params:
+ *
+ * - name (optional) - string default "radio"
+ * - values (required) - array
+ * - options (required) - associative array
+ * - checked (optional) - array default not set
+ * - separator (optional) - ie <br> or &nbsp;
+ * - output (optional) - the output next to each radio button
+ * - assign (optional) - assign the output as an array to this variable
+ * - escape (optional) - escape the content (not value), defaults to true
+ *
+ * Examples:
+ *
+ * {html_radios values=$ids output=$names}
+ * {html_radios values=$ids name='box' separator='<br>' output=$names}
+ * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
+ *
+ * @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 Template $template template object
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \Smarty\Exception
+ */
+class HtmlRadios extends HtmlBase {
+
+ public function handle($params, Template $template) {
+ $name = 'radio';
+ $values = null;
+ $options = null;
+ $selected = null;
+ $separator = '';
+ $escape = true;
+ $labels = true;
+ $label_ids = false;
+ $output = null;
+ $extra = '';
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'name':
+ case 'separator':
+ $$_key = (string)$_val;
+ break;
+ case 'checked':
+ case 'selected':
+ if (is_array($_val)) {
+ trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
+ } elseif (is_object($_val)) {
+ 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
+ );
+ }
+ } else {
+ $selected = (string)$_val;
+ }
+ break;
+ case 'escape':
+ case 'labels':
+ case 'label_ids':
+ $$_key = (bool)$_val;
+ break;
+ case 'options':
+ $$_key = (array)$_val;
+ break;
+ case 'values':
+ case 'output':
+ $$_key = array_values((array)$_val);
+ break;
+ case 'radios':
+ trigger_error(
+ 'html_radios: the use of the "radios" attribute is deprecated, use "options" instead',
+ E_USER_WARNING
+ );
+ $options = (array)$_val;
+ break;
+ case 'strict':
+ case 'assign':
+ 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!
+ // no break
+ 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 '';
+ }
+ $_html_result = [];
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'radio',
+ $name,
+ $_key,
+ $_val,
+ false,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ } else {
+ foreach ($values as $_i => $_key) {
+ $_val = $output[$_i] ?? '';
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'radio',
+ $name,
+ $_key,
+ $_val,
+ false,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ }
+ if (!empty($params['assign'])) {
+ $template->assign($params['assign'], $_html_result);
+ } else {
+ return implode("\n", $_html_result);
+ }
+ }
+
+
+}
diff --git a/vendor/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php
new file mode 100644
index 000000000..a6acfb7bd
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php
@@ -0,0 +1,381 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {html_select_date} plugin
+ * Type: function
+ * Name: html_select_date
+ * Purpose: Prints the dropdowns for date selection.
+ * ChangeLog:
+ *
+ * - 1.0 initial release
+ * - 1.1 added support for +/- N syntax for begin
+ * and end year values. (Monte)
+ * - 1.2 added support for yyyy-mm-dd syntax for
+ * time value. (Jan Rosier)
+ * - 1.3 added support for choosing format for
+ * month values (Gary Loescher)
+ * - 1.3.1 added support for choosing format for
+ * day values (Marcus Bointon)
+ * - 1.3.2 support negative timestamps, force year
+ * 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,
+ * added attributes month_names, *_id
+ *
+ * @version 2.0
+ * @author Andrei Zmievski
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty\Template $template
+ *
+ * @return string
+ * @throws \Smarty\Exception
+ */
+class HtmlSelectDate extends Base {
+
+ public function handle($params, Template $template) {
+ // generate timestamps used for month names only
+ static $_month_timestamps = null;
+ static $_current_year = null;
+ if ($_month_timestamps === null) {
+ $_current_year = date('Y');
+ $_month_timestamps = [];
+ for ($i = 1; $i <= 12; $i++) {
+ $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000);
+ }
+ }
+ /* Default values. */
+ $prefix = 'Date_';
+ $start_year = null;
+ $end_year = null;
+ $display_days = true;
+ $display_months = true;
+ $display_years = true;
+ $month_format = '%B';
+ /* Write months as numbers by default GL */
+ $month_value_format = '%m';
+ $day_format = '%02d';
+ /* Write day values using this format MB */
+ $day_value_format = '%d';
+ $year_as_text = false;
+ /* Display years in reverse order? Ie. 2000,1999,.... */
+ $reverse_years = false;
+ /* Should the select boxes be part of an array when returned from PHP?
+ e.g. setting it to "birthday", would create "birthday[Day]",
+ "birthday[Month]" & "birthday[Year]". Can be combined with prefix */
+ $field_array = null;
+ /* <select size>'s of the different <select> tags.
+ If not set, uses default dropdown. */
+ $day_size = null;
+ $month_size = null;
+ $year_size = null;
+ /* Unparsed attributes common to *ALL* the <select>/<input> tags.
+ An example might be in the template: all_extra ='class ="foo"'. */
+ $all_extra = null;
+ /* Separate attributes for the tags. */
+ $day_extra = null;
+ $month_extra = null;
+ $year_extra = null;
+ /* Order in which to display the fields.
+ "D" -> day, "M" -> month, "Y" -> year. */
+ $field_order = 'MDY';
+ /* String printed between the different fields. */
+ $field_separator = "\n";
+ $option_separator = "\n";
+ $time = null;
+
+ // $all_empty = null;
+ // $day_empty = null;
+ // $month_empty = null;
+ // $year_empty = null;
+ $extra_attrs = '';
+ $all_id = null;
+ $day_id = null;
+ $month_id = null;
+ $year_id = null;
+ foreach ($params as $_key => $_value) {
+ switch ($_key) {
+ case 'time':
+ $$_key = $_value; // we'll handle conversion below
+ break;
+ case 'month_names':
+ if (is_array($_value) && count($_value) === 12) {
+ $$_key = $_value;
+ } else {
+ 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':
+ case 'end_year':
+ case 'day_format':
+ case 'day_value_format':
+ case 'month_format':
+ case 'month_value_format':
+ case 'day_size':
+ case 'month_size':
+ case 'year_size':
+ case 'all_extra':
+ case 'day_extra':
+ case 'month_extra':
+ case 'year_extra':
+ case 'field_order':
+ case 'field_separator':
+ case 'option_separator':
+ case 'all_empty':
+ case 'month_empty':
+ case 'day_empty':
+ case 'year_empty':
+ case 'all_id':
+ case 'month_id':
+ case 'day_id':
+ case 'year_id':
+ $$_key = (string)$_value;
+ break;
+ case 'display_days':
+ case 'display_months':
+ case 'display_years':
+ case 'year_as_text':
+ case 'reverse_years':
+ $$_key = (bool)$_value;
+ break;
+ default:
+ if (!is_array($_value)) {
+ $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($time) && is_array($time)) {
+ if (isset($time[$prefix . 'Year'])) {
+ // $_REQUEST[$field_array] given
+ foreach ([
+ 'Y' => 'Year',
+ 'm' => 'Month',
+ 'd' => 'Day'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName =
+ $time[$prefix . $_elementName] ?? date($_elementKey);
+ }
+ } elseif (isset($time[$field_array][$prefix . 'Year'])) {
+ // $_REQUEST given
+ foreach ([
+ 'Y' => 'Year',
+ 'm' => 'Month',
+ 'd' => 'Day'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName = $time[$field_array][$prefix . $_elementName] ?? date($_elementKey);
+ }
+ } else {
+ // no date found, use NOW
+ [$_year, $_month, $_day] = explode('-', date('Y-m-d'));
+ }
+ } elseif (isset($time) && preg_match("/(\d*)-(\d*)-(\d*)/", $time, $matches)) {
+ $_year = $_month = $_day = null;
+ if ($matches[1] > '') {
+ $_year = (int)$matches[1];
+ }
+ if ($matches[2] > '') {
+ $_month = (int)$matches[2];
+ }
+ if ($matches[3] > '') {
+ $_day = (int)$matches[3];
+ }
+ } elseif ($time === null) {
+ if (array_key_exists('time', $params)) {
+ $_year = $_month = $_day = null;
+ } else {
+ [$_year, $_month, $_day] = explode('-', date('Y-m-d'));
+ }
+ } else {
+ $time = smarty_make_timestamp($time);
+ [$_year, $_month, $_day] = explode('-', date('Y-m-d', $time));
+ }
+
+ // make syntax "+N" or "-N" work with $start_year and $end_year
+ // Note preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match) is slower than trim+substr
+ foreach ([
+ 'start',
+ 'end'
+ ] as $key) {
+ $key .= '_year';
+ $t = $$key;
+ if ($t === null) {
+ $$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;
+ }
+ }
+ // flip for ascending or descending
+ if (($start_year > $end_year && !$reverse_years) || ($start_year < $end_year && $reverse_years)) {
+ $t = $end_year;
+ $end_year = $start_year;
+ $start_year = $t;
+ }
+ // generate year <select> or <input>
+ if ($display_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)
+ ) . '"';
+ }
+ 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;
+ }
+ $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) {
+ $_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)
+ ) . '"';
+ }
+ 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;
+ }
+ 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]);
+ $_html_months .= '<option value="' . $_value . '"' . ($_val == $_month ? ' selected="selected"' : '') .
+ '>' . $_text . '</option>' . $option_separator;
+ }
+ $_html_months .= '</select>';
+ }
+ // generate day <select> or <input>
+ if ($display_days) {
+ $_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)
+ ) . '"';
+ }
+ 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;
+ }
+ 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);
+ $_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++) {
+ switch ($field_order[$i]) {
+ case 'Y':
+ case 'y':
+ if (isset($_html_years)) {
+ if ($_html) {
+ $_html .= $field_separator;
+ }
+ $_html .= $_html_years;
+ }
+ break;
+ case 'm':
+ case 'M':
+ if (isset($_html_months)) {
+ if ($_html) {
+ $_html .= $field_separator;
+ }
+ $_html .= $_html_months;
+ }
+ break;
+ case 'd':
+ case 'D':
+ if (isset($_html_days)) {
+ if ($_html) {
+ $_html .= $field_separator;
+ }
+ $_html .= $_html_days;
+ }
+ break;
+ }
+ }
+ return $_html;
+ }
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php
new file mode 100644
index 000000000..40679c10c
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php
@@ -0,0 +1,334 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {html_select_time} function plugin
+ * Type: function
+ * Name: html_select_time
+ * Purpose: Prints the dropdowns for time selection
+ *
+ * @author Roberto Berto <roberto@berto.net>
+ * @author Monte Ohrt <monte AT ohrt DOT com>
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty\Template $template
+ *
+ * @return string
+ * @uses smarty_make_timestamp()
+ * @throws \Smarty\Exception
+ */
+class HtmlSelectTime extends Base {
+
+ public function handle($params, Template $template) {
+ $prefix = 'Time_';
+ $field_array = null;
+ $field_separator = "\n";
+ $option_separator = "\n";
+ $time = null;
+ $display_hours = true;
+ $display_minutes = true;
+ $display_seconds = true;
+ $display_meridian = true;
+ $hour_format = '%02d';
+ $hour_value_format = '%02d';
+ $minute_format = '%02d';
+ $minute_value_format = '%02d';
+ $second_format = '%02d';
+ $second_value_format = '%02d';
+ $hour_size = null;
+ $minute_size = null;
+ $second_size = null;
+ $meridian_size = null;
+ $all_empty = null;
+ $hour_empty = null;
+ $minute_empty = null;
+ $second_empty = null;
+ $meridian_empty = null;
+ $all_id = null;
+ $hour_id = null;
+ $minute_id = null;
+ $second_id = null;
+ $meridian_id = null;
+ $use_24_hours = true;
+ $minute_interval = 1;
+ $second_interval = 1;
+ $extra_attrs = '';
+ $all_extra = null;
+ $hour_extra = null;
+ $minute_extra = null;
+ $second_extra = null;
+ $meridian_extra = null;
+ foreach ($params as $_key => $_value) {
+ switch ($_key) {
+ case 'time':
+ if (!is_array($_value) && $_value !== null) {
+ $time = smarty_make_timestamp($_value);
+ }
+ break;
+ case 'prefix':
+ case 'field_array':
+ case 'field_separator':
+ case 'option_separator':
+ case 'all_extra':
+ case 'hour_extra':
+ case 'minute_extra':
+ case 'second_extra':
+ case 'meridian_extra':
+ case 'all_empty':
+ case 'hour_empty':
+ case 'minute_empty':
+ case 'second_empty':
+ case 'meridian_empty':
+ case 'all_id':
+ case 'hour_id':
+ case 'minute_id':
+ case 'second_id':
+ case 'meridian_id':
+ case 'hour_format':
+ case 'hour_value_format':
+ case 'minute_format':
+ case 'minute_value_format':
+ case 'second_format':
+ case 'second_value_format':
+ $$_key = (string)$_value;
+ break;
+ case 'display_hours':
+ case 'display_minutes':
+ case 'display_seconds':
+ case 'display_meridian':
+ case 'use_24_hours':
+ $$_key = (bool)$_value;
+ break;
+ case 'minute_interval':
+ case 'second_interval':
+ case 'hour_size':
+ case 'minute_size':
+ case 'second_size':
+ case 'meridian_size':
+ $$_key = (int)$_value;
+ break;
+ default:
+ if (!is_array($_value)) {
+ $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;
+ }
+ }
+ if (isset($params['time']) && is_array($params['time'])) {
+ if (isset($params['time'][$prefix . 'Hour'])) {
+ // $_REQUEST[$field_array] given
+ foreach ([
+ 'H' => 'Hour',
+ 'i' => 'Minute',
+ 's' => 'Second'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName =
+ $params['time'][$prefix . $_elementName] ?? date($_elementKey);
+ }
+ $_meridian =
+ isset($params['time'][$prefix . 'Meridian']) ? (' ' . $params['time'][$prefix . 'Meridian']) :
+ '';
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s', $time));
+ } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
+ // $_REQUEST given
+ foreach ([
+ 'H' => 'Hour',
+ 'i' => 'Minute',
+ 's' => 'Second'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName = $params['time'][$field_array][$prefix . $_elementName] ?? date($_elementKey);
+ }
+ $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian']) ?
+ (' ' . $params['time'][$field_array][$prefix . 'Meridian']) : '';
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s', $time));
+ } else {
+ // no date found, use NOW
+ [$_year, $_month, $_day] = $time = explode('-', date('Y-m-d'));
+ }
+ } elseif ($time === null) {
+ if (array_key_exists('time', $params)) {
+ $_hour = $_minute = $_second = $time = null;
+ } else {
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s'));
+ }
+ } else {
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s', $time));
+ }
+ // generate hour <select>
+ if ($display_hours) {
+ $_html_hours = '';
+ $_extra = '';
+ $_name = $field_array ? ($field_array . '[' . $prefix . 'Hour]') : ($prefix . 'Hour');
+ if ($all_extra) {
+ $_extra .= ' ' . $all_extra;
+ }
+ if ($hour_extra) {
+ $_extra .= ' ' . $hour_extra;
+ }
+ $_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)
+ ) . '"';
+ }
+ if ($hour_size) {
+ $_html_hours .= ' size="' . $hour_size . '"';
+ }
+ $_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;
+ }
+ $start = $use_24_hours ? 0 : 1;
+ $end = $use_24_hours ? 23 : 12;
+ 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);
+ if (!$use_24_hours) {
+ $_hour12 = $_hour == 0 ? 12 : ($_hour <= 12 ? $_hour : $_hour - 12);
+ }
+ $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
+ $_html_hours .= '<option value="' . $_value . '"' . ($selected ? ' selected="selected"' : '') . '>' .
+ $_text . '</option>' . $option_separator;
+ }
+ $_html_hours .= '</select>';
+ }
+ // generate minute <select>
+ if ($display_minutes) {
+ $_html_minutes = '';
+ $_extra = '';
+ $_name = $field_array ? ($field_array . '[' . $prefix . 'Minute]') : ($prefix . 'Minute');
+ if ($all_extra) {
+ $_extra .= ' ' . $all_extra;
+ }
+ if ($minute_extra) {
+ $_extra .= ' ' . $minute_extra;
+ }
+ $_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)
+ ) . '"';
+ }
+ if ($minute_size) {
+ $_html_minutes .= ' size="' . $minute_size . '"';
+ }
+ $_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;
+ }
+ $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
+ 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);
+ $_html_minutes .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') .
+ '>' . $_text . '</option>' . $option_separator;
+ }
+ $_html_minutes .= '</select>';
+ }
+ // generate second <select>
+ if ($display_seconds) {
+ $_html_seconds = '';
+ $_extra = '';
+ $_name = $field_array ? ($field_array . '[' . $prefix . 'Second]') : ($prefix . 'Second');
+ if ($all_extra) {
+ $_extra .= ' ' . $all_extra;
+ }
+ if ($second_extra) {
+ $_extra .= ' ' . $second_extra;
+ }
+ $_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)
+ ) . '"';
+ }
+ if ($second_size) {
+ $_html_seconds .= ' size="' . $second_size . '"';
+ }
+ $_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;
+ }
+ $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
+ 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);
+ $_html_seconds .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') .
+ '>' . $_text . '</option>' . $option_separator;
+ }
+ $_html_seconds .= '</select>';
+ }
+ // generate meridian <select>
+ if ($display_meridian && !$use_24_hours) {
+ $_html_meridian = '';
+ $_extra = '';
+ $_name = $field_array ? ($field_array . '[' . $prefix . 'Meridian]') : ($prefix . 'Meridian');
+ if ($all_extra) {
+ $_extra .= ' ' . $all_extra;
+ }
+ if ($meridian_extra) {
+ $_extra .= ' ' . $meridian_extra;
+ }
+ $_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)
+ ) . '"';
+ }
+ if ($meridian_size) {
+ $_html_meridian .= ' size="' . $meridian_size . '"';
+ }
+ $_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="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') .
+ '>AM</option>' . $option_separator . '<option value="pm"' .
+ ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator .
+ '</select>';
+ }
+ $_html = '';
+ foreach ([
+ '_html_hours',
+ '_html_minutes',
+ '_html_seconds',
+ '_html_meridian'
+ ] as $k) {
+ if (isset($$k)) {
+ if ($_html) {
+ $_html .= $field_separator;
+ }
+ $_html .= $$k;
+ }
+ }
+ return $_html;
+ }
+}
diff --git a/vendor/smarty/smarty/src/FunctionHandler/HtmlTable.php b/vendor/smarty/smarty/src/FunctionHandler/HtmlTable.php
new file mode 100644
index 000000000..d5d147053
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/HtmlTable.php
@@ -0,0 +1,161 @@
+<?php
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {html_table} function plugin
+ * Type: function
+ * Name: html_table
+ * Date: Feb 17, 2003
+ * Purpose: make an html table from an array of data
+ * Params:
+ *
+ * - loop - array to loop through
+ * - cols - number of columns, comma separated list of column names
+ * or array of column names
+ * - rows - number of rows
+ * - table_attr - table attributes
+ * - th_attr - table heading attributes (arrays are cycled)
+ * - tr_attr - table row attributes (arrays are cycled)
+ * - td_attr - table cell attributes (arrays are cycled)
+ * - trailpad - value to pad trailing cells with
+ * - caption - text for caption element
+ * - vdir - vertical direction (default: "down", means top-to-bottom)
+ * - hdir - horizontal direction (default: "right", means left-to-right)
+ * - inner - inner loop (default "cols": print $loop line by line,
+ * $loop will be printed column by column otherwise)
+ *
+ * Examples:
+ *
+ * {table loop=$data}
+ * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
+ * {table loop=$data cols="first,second,third" tr_attr=$colors}
+ *
+ * @param array $params parameters
+ *
+ * @return string
+ *@author credit to boots <boots dot smarty at yahoo dot com>
+ * @version 1.1
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
+ */
+class HtmlTable extends Base {
+
+ public function handle($params, Template $template) {
+ $table_attr = 'border="1"';
+ $tr_attr = '';
+ $th_attr = '';
+ $td_attr = '';
+ $cols = $cols_count = 3;
+ $rows = 3;
+ $trailpad = '&nbsp;';
+ $vdir = 'down';
+ $hdir = 'right';
+ $inner = 'cols';
+ $caption = '';
+ $loop = null;
+ if (!isset($params['loop'])) {
+ trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
+ return;
+ }
+ foreach ($params as $_key => $_value) {
+ switch ($_key) {
+ case 'loop':
+ $$_key = (array)$_value;
+ break;
+ case 'cols':
+ if (is_array($_value) && !empty($_value)) {
+ $cols = $_value;
+ $cols_count = count($_value);
+ } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
+ $cols = explode(',', $_value);
+ $cols_count = count($cols);
+ } elseif (!empty($_value)) {
+ $cols_count = (int)$_value;
+ } else {
+ $cols_count = $cols;
+ }
+ break;
+ case 'rows':
+ $$_key = (int)$_value;
+ break;
+ case 'table_attr':
+ case 'trailpad':
+ case 'hdir':
+ case 'vdir':
+ case 'inner':
+ case 'caption':
+ $$_key = (string)$_value;
+ break;
+ case 'tr_attr':
+ case 'td_attr':
+ case 'th_attr':
+ $$_key = $_value;
+ break;
+ }
+ }
+ $loop_count = count($loop);
+ if (empty($params['rows'])) {
+ /* no rows specified */
+ $rows = ceil($loop_count / $cols_count);
+ } elseif (empty($params['cols'])) {
+ if (!empty($params['rows'])) {
+ /* no cols specified, but rows */
+ $cols_count = ceil($loop_count / $rows);
+ }
+ }
+ $output = "<table $table_attr>\n";
+ if (!empty($caption)) {
+ $output .= '<caption>' . $caption . "</caption>\n";
+ }
+ if (is_array($cols)) {
+ $cols = ($hdir === 'right') ? $cols : array_reverse($cols);
+ $output .= "<thead><tr>\n";
+ for ($r = 0; $r < $cols_count; $r++) {
+ $output .= '<th' . $this->cycle('th', $th_attr, $r) . '>';
+ $output .= $cols[$r];
+ $output .= "</th>\n";
+ }
+ $output .= "</tr></thead>\n";
+ }
+ $output .= "<tbody>\n";
+ for ($r = 0; $r < $rows; $r++) {
+ $output .= "<tr" . $this->cycle('tr', $tr_attr, $r) . ">\n";
+ $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;
+ if ($inner !== 'cols') {
+ /* shuffle x to loop over rows*/
+ $x = floor($x / $cols_count) + ($x % $cols_count) * $rows;
+ }
+ if ($x < $loop_count) {
+ $output .= "<td" . $this->cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n";
+ } else {
+ $output .= "<td" . $this->cycle('td', $td_attr, $c) . ">$trailpad</td>\n";
+ }
+ }
+ $output .= "</tr>\n";
+ }
+ $output .= "</tbody>\n";
+ $output .= "</table>\n";
+ return $output;
+ }
+
+ /**
+ * @param $name
+ * @param $var
+ * @param $no
+ *
+ * @return string
+ */
+ private function cycle($name, $var, $no) {
+ if (!is_array($var)) {
+ $ret = $var;
+ } else {
+ $ret = $var[$no % count($var)];
+ }
+ return ($ret) ? ' ' . $ret : '';
+ }
+}
diff --git a/vendor/smarty/smarty/src/FunctionHandler/Mailto.php b/vendor/smarty/smarty/src/FunctionHandler/Mailto.php
new file mode 100644
index 000000000..eb35c48eb
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/Mailto.php
@@ -0,0 +1,141 @@
+<?php
+
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {mailto} function plugin
+ * Type: function
+ * Name: mailto
+ * Date: May 21, 2002
+ * Purpose: automate mailto address link creation, and optionally encode them.
+ * Params:
+ *
+ * - address - (required) - e-mail address
+ * - text - (optional) - text to display, default is address
+ * - encode - (optional) - can be one of:
+ * * none : no encoding (default)
+ * * javascript : encode with javascript
+ * * javascript_charcode : encode with javascript charcode
+ * * hex : encode with hexadecimal (no javascript)
+ * - cc - (optional) - address(es) to carbon copy
+ * - bcc - (optional) - address(es) to blind carbon copy
+ * - subject - (optional) - e-mail subject
+ * - newsgroups - (optional) - newsgroup(s) to post to
+ * - followupto - (optional) - address(es) to follow up to
+ * - extra - (optional) - extra tags for the href link
+ *
+ * Examples:
+ *
+ * {mailto address="me@domain.com"}
+ * {mailto address="me@domain.com" encode="javascript"}
+ * {mailto address="me@domain.com" encode="hex"}
+ * {mailto address="me@domain.com" subject="Hello to you!"}
+ * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
+ * {mailto address="me@domain.com" extra='class="mailto"'}
+ *
+ * @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
+ */
+class Mailto extends Base {
+
+ public function handle($params, Template $template) {
+ static $_allowed_encoding = [
+ 'javascript' => true,
+ 'javascript_charcode' => true,
+ 'hex' => true,
+ 'none' => true
+ ];
+
+ $extra = '';
+ if (empty($params['address'])) {
+ trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
+ return;
+ } else {
+ $address = $params['address'];
+ }
+
+ $text = $address;
+
+ // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
+ // so, don't encode it.
+ $mail_parms = [];
+ foreach ($params as $var => $value) {
+ switch ($var) {
+ case 'cc':
+ case 'bcc':
+ case 'followupto':
+ if (!empty($value)) {
+ $mail_parms[] = $var . '=' . str_replace(['%40', '%2C'], ['@', ','], rawurlencode($value));
+ }
+ break;
+ case 'subject':
+ case 'newsgroups':
+ $mail_parms[] = $var . '=' . rawurlencode($value);
+ break;
+ case 'extra':
+ case 'text':
+ $$var = $value;
+ // no break
+ default:
+ }
+ }
+
+ 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;
+ }
+
+ $string = '<a href="mailto:' . htmlspecialchars($address, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, \Smarty\Smarty::$_CHARSET) .
+ '" ' . $extra . '>' . htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, \Smarty\Smarty::$_CHARSET) . '</a>';
+
+ if ($encode === 'javascript') {
+ $js_encode = '';
+ for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+ $js_encode .= '%' . bin2hex($string[$x]);
+ }
+ return '<script>document.write(unescape(\'' . $js_encode . '\'))</script>';
+ } elseif ($encode === 'javascript_charcode') {
+ for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+ $ord[] = ord($string[$x]);
+ }
+ return '<script>document.write(String.fromCharCode(' . implode(',', $ord) . '))</script>';
+ } 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);
+ return;
+ }
+ $address_encode = '';
+ for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
+ if (preg_match('!\w!' . \Smarty\Smarty::$_UTF8_MODIFIER, $address[$x])) {
+ $address_encode .= '%' . bin2hex($address[$x]);
+ } else {
+ $address_encode .= $address[$x];
+ }
+ }
+ $text_encode = '';
+ 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 $string;
+ }
+ }
+}
diff --git a/vendor/smarty/smarty/src/FunctionHandler/Math.php b/vendor/smarty/smarty/src/FunctionHandler/Math.php
new file mode 100644
index 000000000..23ef9253d
--- /dev/null
+++ b/vendor/smarty/smarty/src/FunctionHandler/Math.php
@@ -0,0 +1,140 @@
+<?php
+
+namespace Smarty\FunctionHandler;
+
+use Smarty\Template;
+
+/**
+ * Smarty {math} function plugin
+ * Type: function
+ * Name: math
+ * Purpose: handle math computations in template
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @return string|null
+ */
+class Math extends Base {
+
+ public function handle($params, Template $template) {
+ static $_allowed_funcs =
+ [
+ 'int' => true,
+ 'abs' => true,
+ 'ceil' => true,
+ 'acos' => true,
+ 'acosh' => true,
+ 'cos' => true,
+ 'cosh' => true,
+ 'deg2rad' => true,
+ 'rad2deg' => true,
+ 'exp' => true,
+ 'floor' => true,
+ 'log' => true,
+ 'log10' => true,
+ 'max' => true,
+ 'min' => true,
+ 'pi' => true,
+ 'pow' => true,
+ 'rand' => true,
+ 'round' => true,
+ 'asin' => true,
+ 'asinh' => true,
+ 'sin' => true,
+ 'sinh' => true,
+ 'sqrt' => true,
+ 'srand' => true,
+ 'atan' => true,
+ 'atanh' => true,
+ 'tan' => true,
+ 'tanh' => true
+ ];
+
+ // be sure equation parameter is present
+ if (empty($params['equation'])) {
+ trigger_error("math: missing equation parameter", E_USER_WARNING);
+ return;
+ }
+ $equation = $params['equation'];
+
+ // Remove whitespaces
+ $equation = preg_replace('/\s+/', '', $equation);
+
+ // Adapted from https://www.php.net/manual/en/function.eval.php#107377
+ $number = '-?(?:\d+(?:[,.]\d+)?|pi|π)'; // What is a number
+ $functionsOrVars = '((?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))';
+ $operators = '[,+\/*\^%-]'; // Allowed math operators
+ $regexp = '/^((' . $number . '|' . $functionsOrVars . '|(' . $functionsOrVars . '\s*\((?1)*\)|\((?1)*\)))(?:' . $operators . '(?1))?)+$/';
+
+ if (!preg_match($regexp, $equation)) {
+ trigger_error("math: illegal characters", E_USER_WARNING);
+ return;
+ }
+
+ // make sure parenthesis are balanced
+ if (substr_count($equation, '(') !== substr_count($equation, ')')) {
+ trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
+ return;
+ }
+
+ // disallow backticks
+ if (strpos($equation, '`') !== false) {
+ trigger_error("math: backtick character not allowed in equation", E_USER_WARNING);
+ return;
+ }
+
+ // also disallow dollar signs
+ if (strpos($equation, '$') !== false) {
+ trigger_error("math: dollar signs not allowed in equation", E_USER_WARNING);
+ return;
+ }
+ 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);
+ return;
+ }
+ if (!is_numeric($val)) {
+ trigger_error("math: parameter '{$key}' is not numeric", 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_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)!', $equation, $match);
+ 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, or missing parameter '{$curr_var}'",
+ E_USER_WARNING
+ );
+ return;
+ }
+ }
+ foreach ($params as $key => $val) {
+ if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
+ $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
+ }
+ }
+ $smarty_math_result = null;
+ 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);
+ }
+ } else {
+ if (empty($params['assign'])) {
+ printf($params['format'], $smarty_math_result);
+ } else {
+ $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
+ }
+ }
+ }
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/vendor/smarty/smarty/src/Lexer/ConfigfileLexer.php
index afb3efcb0..d592c8238 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php
+++ b/vendor/smarty/smarty/src/Lexer/ConfigfileLexer.php
@@ -1,133 +1,105 @@
<?php
-/**
- * Smarty Internal Plugin Configfilelexer
- *
- * This is the lexer to break the config file source into tokens
- *
- * @package Smarty
- * @subpackage Config
- * @author Uwe Tews
- */
+namespace Smarty\Lexer;
+
+/**
+* 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
+* ConfigfileLexer
+*
+* This is the config file lexer.
+* It is generated from the ConfigfileLexer.plex file
+*
+* @package Smarty
+* @subpackage Compiler
+* @author Uwe Tews
+*/
+class ConfigfileLexer
{
- const START = 1;
- const VALUE = 2;
- const NAKED_STRING_VALUE = 3;
- const COMMENT = 4;
- const SECTION = 5;
- const TRIPPLE = 6;
-
/**
* Source
*
* @var string
*/
public $data;
-
- /**
- * Source length
- *
- * @var int
- */
- public $dataLength = null;
-
- /**
+ /**
+ * Source length
+ *
+ * @var int
+ */
+ public $dataLength = null;
+ /**
* 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\Compiler\Configfile
+ */
+ 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'
- );
-
- /**
- * token names
- *
- * @var array
- */
- public $smarty_token_names = array( // Text for parser error messages
- );
-
- /**
- * compiler object
- *
- * @var Smarty_Internal_Config_File_Compiler
- */
- private $compiler = null;
-
- /**
- * copy of config_booleanize
- *
- * @var bool
- */
- private $configBooleanize = false;
+ public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE');
/**
* storage for assembled token patterns
@@ -135,34 +107,33 @@ class Smarty_Internal_Configfilelexer
* @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;
- private $_yy_state = 1;
-
- private $_yy_stack = array();
+ /**
+ * 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
+ * @param \Smarty\Compiler\Configfile $compiler
*/
- public function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
+ public function __construct($data, \Smarty\Compiler\Configfile $compiler)
{
$this->data = $data . "\n"; //now all lines are \n-terminated
$this->dataLength = strlen($data);
$this->counter = 0;
if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
- $this->counter += strlen($match[ 0 ]);
+ $this->counter += strlen($match[0]);
}
$this->line = 1;
$this->compiler = $compiler;
@@ -170,10 +141,9 @@ class Smarty_Internal_Configfilelexer
$this->configBooleanize = $this->smarty->config_booleanize;
}
- public function replace($input)
- {
+ public function replace ($input) {
return $input;
- } // end function
+ }
public function PrintTrace()
{
@@ -181,6 +151,11 @@ class Smarty_Internal_Configfilelexer
$this->yyTracePrompt = '<br>';
}
+
+
+ private $_yy_state = 1;
+ private $_yy_stack = array();
+
public function yylex()
{
return $this->{'yylex' . $this->_yy_state}();
@@ -189,85 +164,61 @@ class Smarty_Internal_Configfilelexer
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
- );
+ 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
- );
+ 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);
}
}
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
- );
+ 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);
+ $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
- );
+ 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);
}
+
}
public function yybegin($state)
{
- $this->_yy_state = $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
- );
+ 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);
}
}
+
+
+
public function yylex1()
{
if (!isset($this->yy_global_pattern1)) {
- $this->yy_global_pattern1 =
- $this->replace("/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS");
+ $this->yy_global_pattern1 = $this->replace("/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern1,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
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');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state START');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -285,89 +236,91 @@ class Smarty_Internal_Configfilelexer
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const START = 1;
public function yy_r1_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
- $this->yypushstate(self::COMMENT);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_COMMENTSTART;
+ $this->yypushstate(self::COMMENT);
+ }
public function yy_r1_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
- $this->yypushstate(self::SECTION);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OPENB;
+ $this->yypushstate(self::SECTION);
+ }
public function yy_r1_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_CLOSEB;
+ }
public function yy_r1_4()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
- $this->yypushstate(self::VALUE);
- } // end function
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_EQUAL;
+ $this->yypushstate(self::VALUE);
+ }
public function yy_r1_5()
{
- return false;
- }
+ return false;
+ }
public function yy_r1_6()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
+ }
public function yy_r1_7()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_ID;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_ID;
+ }
public function yy_r1_8()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OTHER;
}
+
+
public function yylex2()
{
if (!isset($this->yy_global_pattern2)) {
- $this->yy_global_pattern2 =
- $this->replace("/\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");
+ $this->yy_global_pattern2 = $this->replace("/\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 (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern2,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
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');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state VALUE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -385,80 +338,84 @@ class Smarty_Internal_Configfilelexer
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const VALUE = 2;
public function yy_r2_1()
{
- return false;
- }
+ return false;
+ }
public function yy_r2_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
- $this->yypopstate();
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_FLOAT;
+ $this->yypopstate();
+ }
public function yy_r2_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_INT;
- $this->yypopstate();
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_INT;
+ $this->yypopstate();
+ }
public function yy_r2_4()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
- $this->yypushstate(self::TRIPPLE);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES;
+ $this->yypushstate(self::TRIPPLE);
+ }
public function yy_r2_5()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
- $this->yypopstate();
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SINGLE_QUOTED_STRING;
+ $this->yypopstate();
+ }
public function yy_r2_6()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
- $this->yypopstate();
- } // end function
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOUBLE_QUOTED_STRING;
+ $this->yypopstate();
+ }
public function yy_r2_7()
{
- 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();
- }
- }
- public function yy_r2_8()
- {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ 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\Parser\ConfigfileParser::TPC_BOOL;
$this->yypopstate();
}
+ }
+ public function yy_r2_8()
+ {
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ $this->yypopstate();
+ }
public function yy_r2_9()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->value = '';
- $this->yypopstate();
- } // end function
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ $this->value = '';
+ $this->yypopstate();
+ }
+
+
public function yylex3()
{
@@ -468,23 +425,21 @@ class Smarty_Internal_Configfilelexer
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern3,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
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');
+ ' 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
@@ -502,26 +457,31 @@ class Smarty_Internal_Configfilelexer
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const NAKED_STRING_VALUE = 3;
public function yy_r3_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ $this->yypopstate();
}
+
+
public function yylex4()
{
if (!isset($this->yy_global_pattern4)) {
@@ -530,23 +490,21 @@ class Smarty_Internal_Configfilelexer
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern4,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
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');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state COMMENT');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -564,36 +522,41 @@ class Smarty_Internal_Configfilelexer
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const COMMENT = 4;
public function yy_r4_1()
{
- return false;
- }
+ return false;
+ }
public function yy_r4_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- } // end function
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ }
public function yy_r4_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
- $this->yypopstate();
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
+ $this->yypopstate();
}
+
+
public function yylex5()
{
if (!isset($this->yy_global_pattern5)) {
@@ -602,23 +565,21 @@ class Smarty_Internal_Configfilelexer
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern5,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
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');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state SECTION');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -636,30 +597,34 @@ class Smarty_Internal_Configfilelexer
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const SECTION = 5;
public function yy_r5_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOT;
+ }
public function yy_r5_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
- $this->yypopstate();
- } // end function
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SECTION;
+ $this->yypopstate();
+ }
+
public function yylex6()
{
@@ -669,23 +634,21 @@ class Smarty_Internal_Configfilelexer
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern6,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
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');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state TRIPPLE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -703,37 +666,42 @@ class Smarty_Internal_Configfilelexer
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const TRIPPLE = 6;
public function yy_r6_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
- $this->yypopstate();
- $this->yypushstate(self::START);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES_END;
+ $this->yypopstate();
+ $this->yypushstate(self::START);
+ }
public function yy_r6_2()
{
- $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_config_file_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;
+
+ $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_config_file_error ('missing or misspelled literal closing tag');
+ }
+ $this->value = substr($this->data,$this->counter,$to-$this->counter);
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_TEXT;
}
+
+
}
diff --git a/vendor/smarty/smarty/lexer/smarty_internal_configfilelexer.plex b/vendor/smarty/smarty/src/Lexer/ConfigfileLexer.plex
index 7a86fadc4..a895050c4 100644
--- a/vendor/smarty/smarty/lexer/smarty_internal_configfilelexer.plex
+++ b/vendor/smarty/smarty/src/Lexer/ConfigfileLexer.plex
@@ -1,6 +1,9 @@
<?php
+
+namespace Smarty\Lexer;
+
/**
-* Smarty Internal Plugin Configfilelexer
+* Smarty Internal Plugin ConfigfileLexer
*
* This is the lexer to break the config file source into tokens
* @package Smarty
@@ -8,16 +11,16 @@
* @author Uwe Tews
*/
/**
-* Smarty_Internal_Configfilelexer
+* ConfigfileLexer
*
* This is the config file lexer.
-* It is generated from the smarty_internal_configfilelexer.plex file
+* It is generated from the ConfigfileLexer.plex file
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
-class Smarty_Internal_Configfilelexer
+class ConfigfileLexer
{
/**
* Source
@@ -70,7 +73,7 @@ class Smarty_Internal_Configfilelexer
/**
* compiler object
*
- * @var Smarty_Internal_Config_File_Compiler
+ * @var \Smarty\Compiler\Configfile
*/
private $compiler = null;
/**
@@ -122,9 +125,9 @@ class Smarty_Internal_Configfilelexer
* constructor
*
* @param string $data template source
- * @param Smarty_Internal_Config_File_Compiler $compiler
+ * @param \Smarty\Compiler\Configfile $compiler
*/
- public function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
+ public function __construct($data, \Smarty\Compiler\Configfile $compiler)
{
$this->data = $data . "\n"; //now all lines are \n-terminated
$this->dataLength = strlen($data);
@@ -179,31 +182,31 @@ naked_string = /[^\n]+?(?=[ \t\r]*\n)/
%statename START
commentstart {
- $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_COMMENTSTART;
$this->yypushstate(self::COMMENT);
}
openB {
- $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OPENB;
$this->yypushstate(self::SECTION);
}
closeB {
- $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_CLOSEB;
}
equal {
- $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_EQUAL;
$this->yypushstate(self::VALUE);
}
whitespace {
return false;
}
newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
}
id {
- $this->token = Smarty_Internal_Configfileparser::TPC_ID;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_ID;
}
text {
- $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OTHER;
}
*/
@@ -215,23 +218,23 @@ whitespace {
return false;
}
float {
- $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_FLOAT;
$this->yypopstate();
}
int {
- $this->token = Smarty_Internal_Configfileparser::TPC_INT;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_INT;
$this->yypopstate();
}
tripple_quotes {
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES;
$this->yypushstate(self::TRIPPLE);
}
single_quoted_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SINGLE_QUOTED_STRING;
$this->yypopstate();
}
double_quoted_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOUBLE_QUOTED_STRING;
$this->yypopstate();
}
maybe_bool {
@@ -240,16 +243,16 @@ maybe_bool {
$this->yypushstate(self::NAKED_STRING_VALUE);
return true; //reprocess in new state
} else {
- $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_BOOL;
$this->yypopstate();
}
}
naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
$this->yypopstate();
}
newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
$this->value = '';
$this->yypopstate();
}
@@ -260,7 +263,7 @@ newline {
%statename NAKED_STRING_VALUE
naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
$this->yypopstate();
}
@@ -273,10 +276,10 @@ whitespace {
return false;
}
naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
}
newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
$this->yypopstate();
}
@@ -286,10 +289,10 @@ newline {
%statename SECTION
dot {
- $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOT;
}
section {
- $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SECTION;
$this->yypopstate();
}
@@ -298,7 +301,7 @@ section {
%statename TRIPPLE
tripple_quotes_end {
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES_END;
$this->yypopstate();
$this->yypushstate(self::START);
}
@@ -311,7 +314,7 @@ text {
$this->compiler->trigger_config_file_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;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_TEXT;
}
*/
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php b/vendor/smarty/smarty/src/Lexer/TemplateLexer.php
index 5ca482058..2e7f33055 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php
+++ b/vendor/smarty/smarty/src/Lexer/TemplateLexer.php
@@ -1,4 +1,7 @@
<?php
+
+namespace Smarty\Lexer;
+
/*
* This file is part of Smarty.
*
@@ -9,14 +12,14 @@
*/
/**
- * Smarty_Internal_Templatelexer
+ * TemplateLexer
* This is the template file lexer.
- * It is generated from the smarty_internal_templatelexer.plex file
+ * It is generated from the TemplateLexer.plex file
*
*
* @author Uwe Tews <uwe.tews@googlemail.com>
*/
-class Smarty_Internal_Templatelexer
+class TemplateLexer
{
/**
* Source
@@ -67,13 +70,6 @@ class Smarty_Internal_Templatelexer
*/
public $taglineno;
- /**
- * php code type
- *
- * @var string
- */
- public $phpType = '';
-
/**
* state number
*
@@ -91,7 +87,7 @@ class Smarty_Internal_Templatelexer
/**
* compiler object
*
- * @var Smarty_Internal_TemplateCompilerBase
+ * @var \Smarty\Compiler\Template
*/
public $compiler = null;
@@ -161,7 +157,6 @@ class Smarty_Internal_Templatelexer
'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',
@@ -227,9 +222,9 @@ class Smarty_Internal_Templatelexer
* constructor
*
* @param string $source template source
- * @param Smarty_Internal_TemplateCompilerBase $compiler
+ * @param \Smarty\Compiler\Template $compiler
*/
- public function __construct($source, Smarty_Internal_TemplateCompilerBase $compiler)
+ public function __construct($source, \Smarty\Compiler\Template $compiler)
{
$this->data = $source;
$this->dataLength = strlen($this->data);
@@ -238,7 +233,7 @@ class Smarty_Internal_Templatelexer
$this->counter += strlen($match[0]);
}
$this->line = 1;
- $this->smarty = $compiler->template->smarty;
+ $this->smarty = $compiler->getTemplate()->getSmarty();
$this->compiler = $compiler;
$this->compiler->initDelimiterPreg();
$this->smarty_token_names['LDEL'] = $this->smarty->getLeftDelimiter();
@@ -380,7 +375,7 @@ class Smarty_Internal_Templatelexer
public function yy_r1_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r1_2()
{
@@ -398,18 +393,18 @@ class Smarty_Internal_Templatelexer
public function yy_r1_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r1_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALSTART;
$this->yypushstate(self::LITERAL);
}
public function yy_r1_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypushstate(self::LITERAL);
}
public function yy_r1_10()
@@ -430,14 +425,14 @@ class Smarty_Internal_Templatelexer
$to = $match[0][1];
}
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yylex2()
{
if (!isset($this->yy_global_pattern2)) {
- $this->yy_global_pattern2 = $this->replace("/\G((SMARTYldel)SMARTYal(if|elseif|else if|while)\\s+)|\G((SMARTYldel)SMARTYalfor\\s+)|\G((SMARTYldel)SMARTYalforeach(?![^\s]))|\G((SMARTYldel)SMARTYalsetfilter\\s+)|\G((SMARTYldel)SMARTYalmake_nocache\\s+)|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$]smarty\\.block\\.(child|parent)\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/][0-9]*[a-zA-Z_]\\w*\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal)/isS");
+ $this->yy_global_pattern2 = $this->replace("/\G((SMARTYldel)SMARTYal(if|elseif|else if|while)\\s+)|\G((SMARTYldel)SMARTYalfor\\s+)|\G((SMARTYldel)SMARTYalforeach(?![^\s]))|\G((SMARTYldel)SMARTYalsetfilter\\s+)|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$]smarty\\.block\\.(child|parent)\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/][0-9]*[a-zA-Z_]\\w*\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal)/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@@ -493,84 +488,77 @@ class Smarty_Internal_Templatelexer
public function yy_r2_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELIF;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELFOR;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELFOREACH;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSETFILTER;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_10()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- public function yy_r2_12()
- {
-
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SIMPLETAG;
$this->taglineno = $this->line;
}
- public function yy_r2_15()
+ public function yy_r2_13()
{
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SMARTYBLOCKCHILDPARENT;
$this->taglineno = $this->line;
}
- public function yy_r2_18()
+ public function yy_r2_16()
{
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSETAG;
$this->taglineno = $this->line;
}
- public function yy_r2_20()
+ public function yy_r2_18()
{
if ($this->_yy_stack[count($this->_yy_stack)-1] === self::TEXT) {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SIMPELOUTPUT;
$this->taglineno = $this->line;
} else {
$this->value = $this->smarty->getLeftDelimiter();
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
}
- public function yy_r2_23()
+ public function yy_r2_21()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSLASH;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
- public function yy_r2_25()
+ public function yy_r2_23()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
@@ -579,7 +567,7 @@ class Smarty_Internal_Templatelexer
public function yylex3()
{
if (!isset($this->yy_global_pattern3)) {
- $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\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)\\s+)|\G(\\s+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(array\\s*[(]\\s*)|\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");
+ $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+(not\\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)\\s+)|\G(\\s+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(array\\s*[(]\\s*)|\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 (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@@ -635,7 +623,7 @@ class Smarty_Internal_Templatelexer
public function yy_r3_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_RDEL;
$this->yypopstate();
}
public function yy_r3_2()
@@ -647,227 +635,227 @@ class Smarty_Internal_Templatelexer
public function yy_r3_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypushstate(self::DOUBLEQUOTEDSTRING);
$this->compiler->enterDoubleQuote();
}
public function yy_r3_5()
{
- $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLEQUOTESTRING;
}
public function yy_r3_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
public function yy_r3_7()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLAR;
}
public function yy_r3_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISIN;
- }
- public function yy_r3_9()
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_AS;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ISIN;
}
public function yy_r3_10()
{
- $this->token = Smarty_Internal_Templateparser::TP_TO;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AS;
}
public function yy_r3_11()
{
- $this->token = Smarty_Internal_Templateparser::TP_STEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TO;
}
public function yy_r3_12()
{
- $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_STEP;
}
public function yy_r3_13()
{
- $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF;
}
- public function yy_r3_15()
+ public function yy_r3_14()
{
- $this->token = Smarty_Internal_Templateparser::TP_SLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LOGOP;
}
- public function yy_r3_17()
+ public function yy_r3_16()
{
- $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SLOGOP;
}
- public function yy_r3_20()
+ public function yy_r3_18()
{
- $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TLOGOP;
}
- public function yy_r3_23()
+ public function yy_r3_21()
{
- $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLECOND;
}
public function yy_r3_24()
{
- $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NOT;
}
- public function yy_r3_28()
+ public function yy_r3_25()
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TYPECAST;
}
public function yy_r3_29()
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENP;
}
public function yy_r3_30()
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEP;
}
public function yy_r3_31()
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENB;
}
public function yy_r3_32()
{
- $this->token = Smarty_Internal_Templateparser::TP_PTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEB;
}
public function yy_r3_33()
{
- $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_PTR;
}
public function yy_r3_34()
{
- $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_APTR;
}
public function yy_r3_35()
{
- $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ $this->token = \Smarty\Parser\TemplateParser::TP_EQUAL;
}
- public function yy_r3_37()
+ public function yy_r3_36()
{
- $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INCDEC;
}
- public function yy_r3_39()
+ public function yy_r3_38()
{
- $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_UNIMATH;
}
- public function yy_r3_41()
+ public function yy_r3_40()
{
- $this->token = Smarty_Internal_Templateparser::TP_AT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_MATH;
}
public function yy_r3_42()
{
- $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AT;
}
public function yy_r3_43()
{
- $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ARRAYOPEN;
}
public function yy_r3_44()
{
+ $this->token = \Smarty\Parser\TemplateParser::TP_HATCH;
+ }
+ public function yy_r3_45()
+ {
+
// resolve conflicts with shorttag and right_delimiter starting with '='
if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === $this->smarty->getRightDelimiter()) {
preg_match('/\s+/',$this->value,$match);
$this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ATTR;
}
}
- public function yy_r3_45()
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
- }
- public function yy_r3_48()
+ public function yy_r3_46()
{
- $this->token = Smarty_Internal_Templateparser::TP_ID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NAMESPACE;
}
public function yy_r3_49()
{
- $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ID;
}
public function yy_r3_50()
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->yypopstate();
+ $this->token = \Smarty\Parser\TemplateParser::TP_INTEGER;
}
public function yy_r3_51()
{
- $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK;
+ $this->yypopstate();
}
public function yy_r3_52()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_VERT;
}
public function yy_r3_53()
{
- $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOT;
}
public function yy_r3_54()
{
- $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COMMA;
}
public function yy_r3_55()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SEMICOLON;
}
public function yy_r3_56()
{
- $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOUBLECOLON;
}
public function yy_r3_57()
{
- $this->token = Smarty_Internal_Templateparser::TP_QMARK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COLON;
}
public function yy_r3_58()
{
- $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QMARK;
}
public function yy_r3_59()
{
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_HEX;
}
public function yy_r3_60()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
+ }
+ public function yy_r3_61()
+ {
+
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
@@ -932,16 +920,16 @@ class Smarty_Internal_Templatelexer
{
$this->literal_cnt++;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
public function yy_r4_3()
{
if ($this->literal_cnt) {
$this->literal_cnt--;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypopstate();
}
}
@@ -959,7 +947,7 @@ class Smarty_Internal_Templatelexer
$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;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
@@ -1022,17 +1010,17 @@ class Smarty_Internal_Templatelexer
public function yy_r5_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_3()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_5()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_7()
{
@@ -1049,20 +1037,20 @@ class Smarty_Internal_Templatelexer
public function yy_r5_11()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->taglineno = $this->line;
$this->yypushstate(self::TAGBODY);
}
public function yy_r5_13()
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypopstate();
}
public function yy_r5_14()
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK;
$this->value = substr($this->value,0,-1);
$this->yypushstate(self::TAGBODY);
$this->taglineno = $this->line;
@@ -1070,24 +1058,24 @@ class Smarty_Internal_Templatelexer
public function yy_r5_15()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
public function yy_r5_16()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_17()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_22()
{
$to = $this->dataLength;
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
}
diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex b/vendor/smarty/smarty/src/Lexer/TemplateLexer.plex
index 2cd46df97..282a99cf9 100644
--- a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex
+++ b/vendor/smarty/smarty/src/Lexer/TemplateLexer.plex
@@ -1,4 +1,7 @@
<?php
+
+namespace Smarty\Lexer;
+
/*
* This file is part of Smarty.
*
@@ -9,14 +12,14 @@
*/
/**
- * Smarty_Internal_Templatelexer
+ * TemplateLexer
* This is the template file lexer.
- * It is generated from the smarty_internal_templatelexer.plex file
+ * It is generated from the TemplateLexer.plex file
*
*
* @author Uwe Tews <uwe.tews@googlemail.com>
*/
-class Smarty_Internal_Templatelexer
+class TemplateLexer
{
/**
* Source
@@ -67,13 +70,6 @@ class Smarty_Internal_Templatelexer
*/
public $taglineno;
- /**
- * php code type
- *
- * @var string
- */
- public $phpType = '';
-
/**
* state number
*
@@ -91,7 +87,7 @@ class Smarty_Internal_Templatelexer
/**
* compiler object
*
- * @var Smarty_Internal_TemplateCompilerBase
+ * @var \Smarty\Compiler\Template
*/
public $compiler = null;
@@ -226,9 +222,9 @@ class Smarty_Internal_Templatelexer
* constructor
*
* @param string $source template source
- * @param Smarty_Internal_TemplateCompilerBase $compiler
+ * @param \Smarty\Compiler\Template $compiler
*/
- public function __construct($source, Smarty_Internal_TemplateCompilerBase $compiler)
+ public function __construct($source, \Smarty\Compiler\Template $compiler)
{
$this->data = $source;
$this->dataLength = strlen($this->data);
@@ -237,7 +233,7 @@ class Smarty_Internal_Templatelexer
$this->counter += strlen($match[0]);
}
$this->line = 1;
- $this->smarty = $compiler->template->smarty;
+ $this->smarty = $compiler->getTemplate()->getSmarty();
$this->compiler = $compiler;
$this->compiler->initDelimiterPreg();
$this->smarty_token_names['LDEL'] = $this->smarty->getLeftDelimiter();
@@ -328,13 +324,12 @@ class Smarty_Internal_Templatelexer
slop = ~\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\s+~
tlop = ~\s+is\s+(not\s+)?(odd|even|div)\s+by\s+~
scond = ~\s+is\s+(not\s+)?(odd|even)~
- isin = ~\s+is\s+in\s+~
+ isin = ~\s+is\s+(not\s+)?in\s+~
as = ~\s+as\s+~
to = ~\s+to\s+~
step = ~\s+step\s+~
if = ~(if|elseif|else if|while)\s+~
for = ~for\s+~
- makenocache = ~make_nocache\s+~
array = ~array~
foreach = ~foreach(?![^\s])~
setfilter = ~setfilter\s+~
@@ -346,7 +341,7 @@ class Smarty_Internal_Templatelexer
/*!lex2php
%statename TEXT
emptyjava {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
comment {
$to = $this->dataLength;
@@ -360,14 +355,14 @@ class Smarty_Internal_Templatelexer
return false;
}
userliteral {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALSTART;
$this->yypushstate(self::LITERAL);
}
ldel slash literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypushstate(self::LITERAL);
}
ldel {
@@ -384,70 +379,65 @@ class Smarty_Internal_Templatelexer
$to = $match[0][1];
}
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
*/
/*!lex2php
%statename TAG
ldel if {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELIF;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel for {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELFOR;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel foreach {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->token = \Smarty\Parser\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 makenocache {
- $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSETFILTER;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel id nocacherdel {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SIMPLETAG;
$this->taglineno = $this->line;
}
ldel smartyblockchildparent rdel {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SMARTYBLOCKCHILDPARENT;
$this->taglineno = $this->line;
}
ldel slash id rdel {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
+ $this->token = \Smarty\Parser\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->token = \Smarty\Parser\TemplateParser::TP_SIMPELOUTPUT;
$this->taglineno = $this->line;
} else {
$this->value = $this->smarty->getLeftDelimiter();
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
}
ldel slash {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSLASH;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
@@ -455,7 +445,7 @@ class Smarty_Internal_Templatelexer
/*!lex2php
%statename TAGBODY
rdel {
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_RDEL;
$this->yypopstate();
}
ldel {
@@ -463,143 +453,143 @@ class Smarty_Internal_Templatelexer
return true;
}
double_quote {
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypushstate(self::DOUBLEQUOTEDSTRING);
$this->compiler->enterDoubleQuote();
}
singlequotestring {
- $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLEQUOTESTRING;
}
dollar id {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
dollar {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLAR;
}
isin {
- $this->token = Smarty_Internal_Templateparser::TP_ISIN;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ISIN;
}
as {
- $this->token = Smarty_Internal_Templateparser::TP_AS;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AS;
}
to {
- $this->token = Smarty_Internal_Templateparser::TP_TO;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TO;
}
step {
- $this->token = Smarty_Internal_Templateparser::TP_STEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_STEP;
}
instanceof {
- $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF;
}
lop {
- $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LOGOP;
}
slop {
- $this->token = Smarty_Internal_Templateparser::TP_SLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SLOGOP;
}
tlop {
- $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TLOGOP;
}
scond {
- $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLECOND;
}
not{
- $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NOT;
}
typecast {
- $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TYPECAST;
}
openP {
- $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENP;
}
closeP {
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEP;
}
openB {
- $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENB;
}
closeB {
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEB;
}
ptr {
- $this->token = Smarty_Internal_Templateparser::TP_PTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_PTR;
}
aptr {
- $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_APTR;
}
equal {
- $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_EQUAL;
}
incdec {
- $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INCDEC;
}
unimath {
- $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_UNIMATH;
}
math {
- $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_MATH;
}
at {
- $this->token = Smarty_Internal_Templateparser::TP_AT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AT;
}
array openP {
- $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ARRAYOPEN;
}
hatch {
- $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_HATCH;
}
attr {
// resolve conflicts with shorttag and right_delimiter starting with '='
if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === $this->smarty->getRightDelimiter()) {
preg_match('/\s+/',$this->value,$match);
$this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ATTR;
}
}
namespace {
- $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NAMESPACE;
}
id {
- $this->token = Smarty_Internal_Templateparser::TP_ID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ID;
}
integer {
- $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INTEGER;
}
backtick {
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK;
$this->yypopstate();
}
vert {
- $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_VERT;
}
dot {
- $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOT;
}
comma {
- $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COMMA;
}
semicolon {
- $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SEMICOLON;
}
doublecolon {
- $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOUBLECOLON;
}
colon {
- $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COLON;
}
qmark {
- $this->token = Smarty_Internal_Templateparser::TP_QMARK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QMARK;
}
hex {
- $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ $this->token = \Smarty\Parser\TemplateParser::TP_HEX;
}
space {
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
}
char {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
*/
@@ -607,14 +597,14 @@ class Smarty_Internal_Templatelexer
%statename LITERAL
ldel literal rdel {
$this->literal_cnt++;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
ldel slash literal rdel {
if ($this->literal_cnt) {
$this->literal_cnt--;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypopstate();
}
}
@@ -630,19 +620,19 @@ class Smarty_Internal_Templatelexer
$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;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
*/
/*!lex2php
%statename DOUBLEQUOTEDSTRING
userliteral {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel slash literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel slash {
$this->yypushstate(self::TAG);
@@ -653,33 +643,33 @@ class Smarty_Internal_Templatelexer
return true;
}
ldel {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->taglineno = $this->line;
$this->yypushstate(self::TAGBODY);
}
double_quote {
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypopstate();
}
backtick dollar {
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->token = \Smarty\Parser\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;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
dollar {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
textdoublequoted {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
char {
$to = $this->dataLength;
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
*/
}
diff --git a/vendor/smarty/smarty/src/ParseTree/Base.php b/vendor/smarty/smarty/src/ParseTree/Base.php
new file mode 100644
index 000000000..e1140c15e
--- /dev/null
+++ b/vendor/smarty/smarty/src/ParseTree/Base.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Smarty\ParseTree;
+
+/**
+ * Smarty Internal Plugin Templateparser ParseTree
+ * These are classes to build parsetree in the template parser
+ *
+
+
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ */
+
+/**
+
+
+ * @ignore
+ */
+abstract class Base
+{
+ /**
+ * Buffer content
+ *
+ * @var mixed
+ */
+ public $data;
+
+ /**
+ * Subtree array
+ *
+ * @var array
+ */
+ public $subtrees = array();
+
+ /**
+ * Return buffer
+ *
+ * @param \Smarty\Parser\TemplateParser $parser
+ *
+ * @return string buffer content
+ */
+ abstract public function to_smarty_php(\Smarty\Parser\TemplateParser $parser);
+
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php b/vendor/smarty/smarty/src/ParseTree/Code.php
index 7bd0bc45c..b39f22c8b 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php
+++ b/vendor/smarty/smarty/src/ParseTree/Code.php
@@ -1,10 +1,13 @@
<?php
+
+namespace Smarty\ParseTree;
+
/**
* 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
*/
@@ -12,11 +15,11 @@
/**
* Code fragment inside a tag .
*
- * @package Smarty
- * @subpackage Compiler
+
+
* @ignore
*/
-class Smarty_Internal_ParseTree_Code extends Smarty_Internal_ParseTree
+class Code extends Base
{
/**
* Create parse tree buffer for code fragment
@@ -31,11 +34,11 @@ class Smarty_Internal_ParseTree_Code extends Smarty_Internal_ParseTree
/**
* Return buffer content in parentheses
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string content
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
return sprintf('(%s)', $this->data);
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php b/vendor/smarty/smarty/src/ParseTree/Dq.php
index 8655f5869..b5fca3b40 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php
+++ b/vendor/smarty/smarty/src/ParseTree/Dq.php
@@ -1,92 +1,94 @@
<?php
+
+namespace Smarty\ParseTree;
/**
- * Double quoted string inside a tag.
+ * 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
+class Dq extends Base
{
/**
- * Create parse tree buffer for double quoted string subtrees
+ * Create parse tree buffer for double-quoted string subtrees
*
* @param object $parser parser object
- * @param Smarty_Internal_ParseTree $subtree parse tree buffer
+ * @param Base $subtree parse tree buffer
*/
- public function __construct($parser, Smarty_Internal_ParseTree $subtree)
+ public function __construct($parser, Base $subtree)
{
$this->subtrees[] = $subtree;
- if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
- $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ if ($subtree instanceof Tag) {
+ $parser->block_nesting_level = $parser->compiler->getTagStackCount();
}
}
/**
* Append buffer to subtree
*
- * @param \Smarty_Internal_Templateparser $parser
- * @param Smarty_Internal_ParseTree $subtree parse tree buffer
+ * @param \Smarty\Parser\TemplateParser $parser
+ * @param Base $subtree parse tree buffer
*/
- public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
+ public function append_subtree(\Smarty\Parser\TemplateParser $parser, Base $subtree)
{
$last_subtree = count($this->subtrees) - 1;
- if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Smarty_Internal_ParseTree_Tag
+ if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Tag
&& $this->subtrees[ $last_subtree ]->saved_block_nesting < $parser->block_nesting_level
) {
- if ($subtree instanceof Smarty_Internal_ParseTree_Code) {
+ if ($subtree instanceof Code) {
$this->subtrees[ $last_subtree ]->data =
$parser->compiler->appendCode(
- $this->subtrees[ $last_subtree ]->data,
+ (string) $this->subtrees[ $last_subtree ]->data,
'<?php echo ' . $subtree->data . ';?>'
);
- } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) {
+ } elseif ($subtree instanceof DqContent) {
$this->subtrees[ $last_subtree ]->data =
$parser->compiler->appendCode(
- $this->subtrees[ $last_subtree ]->data,
+ (string) $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);
+ $parser->compiler->appendCode((string) $this->subtrees[ $last_subtree ]->data, (string) $subtree->data);
}
} else {
$this->subtrees[] = $subtree;
}
- if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
- $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ if ($subtree instanceof Tag) {
+ $parser->block_nesting_level = $parser->compiler->getTagStackCount();
}
}
/**
* Merge subtree buffer content together
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string compiled template code
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
$code = '';
foreach ($this->subtrees as $subtree) {
if ($code !== '') {
$code .= '.';
}
- if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ if ($subtree instanceof 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) {
+ if (!$subtree instanceof DqContent) {
$parser->compiler->has_variable_string = true;
}
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php b/vendor/smarty/smarty/src/ParseTree/DqContent.php
index a8ca389d9..f0a4b0697 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
+++ b/vendor/smarty/smarty/src/ParseTree/DqContent.php
@@ -1,22 +1,24 @@
<?php
+
+namespace Smarty\ParseTree;
/**
* 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.
+ * Raw chars as part of a double-quoted string.
*
- * @package Smarty
- * @subpackage Compiler
+
+
* @ignore
*/
-class Smarty_Internal_ParseTree_DqContent extends Smarty_Internal_ParseTree
+class DqContent extends Base
{
/**
* Create parse tree buffer with string content
@@ -29,13 +31,13 @@ class Smarty_Internal_ParseTree_DqContent extends Smarty_Internal_ParseTree
}
/**
- * Return content as double quoted string
+ * Return content as double-quoted string
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string doubled quoted string
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
return '"' . $this->data . '"';
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php b/vendor/smarty/smarty/src/ParseTree/Tag.php
index e6c755604..05237f2de 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php
+++ b/vendor/smarty/smarty/src/ParseTree/Tag.php
@@ -1,10 +1,13 @@
<?php
+
+namespace Smarty\ParseTree;
+
/**
* 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
*/
@@ -12,11 +15,11 @@
/**
* A complete smarty tag.
*
- * @package Smarty
- * @subpackage Compiler
+
+
* @ignore
*/
-class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree
+class Tag extends Base
{
/**
* Saved block nesting level
@@ -28,10 +31,10 @@ class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree
/**
* Create parse tree buffer for Smarty tag
*
- * @param \Smarty_Internal_Templateparser $parser parser object
+ * @param \Smarty\Parser\TemplateParser $parser parser object
* @param string $data content
*/
- public function __construct(Smarty_Internal_Templateparser $parser, $data)
+ public function __construct(\Smarty\Parser\TemplateParser $parser, $data)
{
$this->data = $data;
$this->saved_block_nesting = $parser->block_nesting_level;
@@ -40,11 +43,11 @@ class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree
/**
* Return buffer content
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string content
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
return $this->data;
}
@@ -52,16 +55,16 @@ class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree
/**
* Return complied code that loads the evaluated output of buffer content into a temporary variable
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string template code
*/
- public function assign_to_var(Smarty_Internal_Templateparser $parser)
+ public function assign_to_var(\Smarty\Parser\TemplateParser $parser)
{
$var = $parser->compiler->getNewPrefixVariable();
- $tmp = $parser->compiler->appendCode('<?php ob_start();?>', $this->data);
+ $tmp = $parser->compiler->appendCode('<?php ob_start();?>', (string) $this->data);
$tmp = $parser->compiler->appendCode($tmp, "<?php {$var}=ob_get_clean();?>");
- $parser->compiler->prefix_code[] = sprintf('%s', $tmp);
+ $parser->compiler->appendPrefixCode($tmp);
return $var;
}
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/vendor/smarty/smarty/src/ParseTree/Template.php
index 829c420fe..ce802a0f4 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php
+++ b/vendor/smarty/smarty/src/ParseTree/Template.php
@@ -1,10 +1,13 @@
<?php
+
+namespace Smarty\ParseTree;
+
/**
* 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
*/
@@ -12,11 +15,11 @@
/**
* Template element
*
- * @package Smarty
- * @subpackage Compiler
+
+
* @ignore
*/
-class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
+class Template extends Base
{
/**
* Array of template elements
@@ -35,10 +38,10 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
/**
* Append buffer to subtree
*
- * @param \Smarty_Internal_Templateparser $parser
- * @param Smarty_Internal_ParseTree $subtree
+ * @param \Smarty\Parser\TemplateParser $parser
+ * @param Base $subtree
*/
- public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
+ public function append_subtree(\Smarty\Parser\TemplateParser $parser, Base $subtree)
{
if (!empty($subtree->subtrees)) {
$this->subtrees = array_merge($this->subtrees, $subtree->subtrees);
@@ -52,10 +55,10 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
/**
* Append array to subtree
*
- * @param \Smarty_Internal_Templateparser $parser
- * @param \Smarty_Internal_ParseTree[] $array
+ * @param \Smarty\Parser\TemplateParser $parser
+ * @param Base[] $array
*/
- public function append_array(Smarty_Internal_Templateparser $parser, $array = array())
+ public function append_array(\Smarty\Parser\TemplateParser $parser, $array = array())
{
if (!empty($array)) {
$this->subtrees = array_merge($this->subtrees, (array)$array);
@@ -65,10 +68,10 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
/**
* Prepend array to subtree
*
- * @param \Smarty_Internal_Templateparser $parser
- * @param \Smarty_Internal_ParseTree[] $array
+ * @param \Smarty\Parser\TemplateParser $parser
+ * @param Base[] $array
*/
- public function prepend_array(Smarty_Internal_Templateparser $parser, $array = array())
+ public function prepend_array(\Smarty\Parser\TemplateParser $parser, $array = array())
{
if (!empty($array)) {
$this->subtrees = array_merge((array)$array, $this->subtrees);
@@ -78,11 +81,11 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
/**
* Sanitize and merge subtree buffers together
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string template code content
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
$code = '';
@@ -111,7 +114,7 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
break;
case 'tag':
foreach ($chunk['subtrees'] as $subtree) {
- $text = $parser->compiler->appendCode($text, $subtree->to_smarty_php($parser));
+ $text = $parser->compiler->appendCode($text, (string) $subtree->to_smarty_php($parser));
}
$code .= $text;
break;
@@ -136,12 +139,12 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
continue;
}
- if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text
+ if ($this->subtrees[ $key ] instanceof Text
&& $this->subtrees[ $key ]->isToBeStripped()) {
$newMode = 'textstripped';
- } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) {
+ } elseif ($this->subtrees[ $key ] instanceof Text) {
$newMode = 'text';
- } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) {
+ } elseif ($this->subtrees[ $key ] instanceof Tag) {
$newMode = 'tag';
} else {
$newMode = 'other';
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php b/vendor/smarty/smarty/src/ParseTree/Text.php
index 58116c811..e6131407c 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php
+++ b/vendor/smarty/smarty/src/ParseTree/Text.php
@@ -1,20 +1,22 @@
<?php
+namespace Smarty\ParseTree;
+
/**
* 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
+class Text extends Base
{
/**
@@ -46,11 +48,11 @@ class Smarty_Internal_ParseTree_Text extends Smarty_Internal_ParseTree
/**
* Return buffer content
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string text
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
return $this->data;
}
diff --git a/vendor/smarty/smarty/src/Parser/ConfigfileParser.php b/vendor/smarty/smarty/src/Parser/ConfigfileParser.php
new file mode 100644
index 000000000..7997a0981
--- /dev/null
+++ b/vendor/smarty/smarty/src/Parser/ConfigfileParser.php
@@ -0,0 +1,972 @@
+<?php
+
+// line 12 "src/Parser/ConfigfileParser.y"
+
+
+namespace Smarty\Parser;
+
+use \Smarty\Lexer\ConfigfileLexer as Lexer;
+use \Smarty\Compiler\Configfile as Configfile;
+
+/**
+* Smarty Internal Plugin Configfileparse
+*
+* This is the config file parser.
+* It is generated from the ConfigfileParser.y file
+* @package Smarty
+* @subpackage Compiler
+* @author Uwe Tews
+*/
+class ConfigfileParser
+{
+// line 31 "src/Parser/ConfigfileParser.y"
+
+ /**
+ * result status
+ *
+ * @var bool
+ */
+ public $successful = true;
+ /**
+ * return value
+ *
+ * @var mixed
+ */
+ public $retvalue = 0;
+ /**
+ * @var
+ */
+ public $yymajor;
+ /**
+ * lexer object
+ *
+ * @var Lexer
+ */
+ private $lex;
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
+ private $internalError = false;
+ /**
+ * compiler object
+ *
+ * @var Configfile
+ */
+ 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 Lexer $lex
+ * @param Configfile $compiler
+ */
+ public function __construct(Lexer $lex, Configfile $compiler)
+ {
+ $this->lex = $lex;
+ $this->smarty = $compiler->getSmarty();
+ $this->compiler = $compiler;
+ $this->configOverwrite = $this->smarty->config_overwrite;
+ $this->configReadHidden = $this->smarty->config_read_hidden;
+ }
+
+ /**
+ * 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]);
+ }
+ }
+
+ 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 = 39;
+public static $yy_action = array(
+ 24, 25, 26, 27, 28, 12, 15, 23, 31, 32,
+ 59, 8, 9, 3, 21, 22, 33, 13, 33, 13,
+ 14, 10, 18, 16, 30, 11, 17, 20, 34, 7,
+ 5, 1, 2, 29, 4, 19, 52, 35, 6,
+ );
+ public static $yy_lookahead = array(
+ 7, 8, 9, 10, 11, 12, 5, 27, 15, 16,
+ 20, 21, 25, 23, 25, 26, 17, 18, 17, 18,
+ 2, 25, 4, 13, 14, 1, 15, 24, 17, 22,
+ 3, 23, 23, 14, 6, 2, 28, 17, 3,
+);
+ const YY_SHIFT_USE_DFLT = -8;
+ const YY_SHIFT_MAX = 19;
+ public static $yy_shift_ofst = array(
+ -8, 1, 1, 1, -7, -1, -1, 24, -8, -8,
+ -8, 18, 10, 11, 27, 28, 19, 20, 33, 35,
+);
+ const YY_REDUCE_USE_DFLT = -21;
+ const YY_REDUCE_MAX = 10;
+ public static $yy_reduce_ofst = array(
+ -10, -11, -11, -11, -20, -13, -4, 3, 7, 8,
+ 9,
+);
+ public static $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(13, 14, ),
+ array(15, 17, ),
+ array(3, ),
+ array(6, ),
+ array(14, ),
+ array(17, ),
+ array(2, ),
+ array(3, ),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+);
+ public static $yy_default = array(
+ 44, 40, 41, 37, 58, 58, 58, 36, 39, 44,
+ 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 38, 42, 43, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57,
+);
+ const YYNOCODE = 29;
+ const YYSTACKDEPTH = 100;
+ const YYNSTATE = 36;
+ const YYNRULE = 22;
+ const YYERRORSYMBOL = 19;
+ const YYERRSYMDT = 'yy0';
+ const YYFALLBACK = 0;
+ public static $yyFallback = array(
+ );
+ public function Trace($TraceFILE, $zTracePrompt)
+ {
+ if (!$TraceFILE) {
+ $zTracePrompt = 0;
+ } elseif (!$zTracePrompt) {
+ $TraceFILE = 0;
+ }
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
+ }
+
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
+
+ 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',
+ );
+
+ 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';
+ }
+ if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
+ return $this->yyTokenName[$tokenType];
+ } else {
+ return 'Unknown';
+ }
+ }
+
+ public static function yy_destructor($yymajor, $yypminor)
+ {
+ switch ($yymajor) {
+ default: break; /* If no destructor action specified: do nothing */
+ }
+ }
+
+ public function yy_pop_parser_stack()
+ {
+ if (empty($this->yystack)) {
+ return;
+ }
+ $yytos = array_pop($this->yystack);
+ 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--;
+
+ return $yymajor;
+ }
+
+ public function __destruct()
+ {
+ while ($this->yystack !== Array()) {
+ $this->yy_pop_parser_stack();
+ }
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
+ }
+ }
+
+ public function yy_get_expected_tokens($token)
+ {
+ 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;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return array_unique($expected);
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $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++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return array_unique($expected);
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return $expected;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return array_unique($expected);
+ }
+
+ 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 (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;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return true;
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $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++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ if (!$token) {
+ // end of input: this is valid
+ return true;
+ }
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return false;
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return true;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return true;
+ }
+
+ public function yy_find_shift_action($iLookAhead)
+ {
+ $stateno = $this->yystack[$this->yyidx]->stateno;
+
+ /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
+ if (!isset(self::$yy_shift_ofst[$stateno])) {
+ // no shift actions
+ return self::$yy_default[$stateno];
+ }
+ $i = self::$yy_shift_ofst[$stateno];
+ if ($i === self::YY_SHIFT_USE_DFLT) {
+ 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 ($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];
+ }
+ }
+
+ 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];
+ }
+ $i = self::$yy_reduce_ofst[$stateno];
+ if ($i === self::YY_REDUCE_USE_DFLT) {
+ 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];
+ } else {
+ return self::$yy_action[$i];
+ }
+ }
+
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ {
+ $this->yyidx++;
+ if ($this->yyidx >= self::YYSTACKDEPTH) {
+ $this->yyidx--;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
+ }
+ while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 245 "src/Parser/ConfigfileParser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
+
+ return;
+ }
+ $yytos = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $yytos->stateno = $yyNewState;
+ $yytos->major = $yyMajor;
+ $yytos->minor = $yypMinor;
+ $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($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 251 "src/Parser/ConfigfileParser.y"
+ public function yy_r0(){
+ $this->_retvalue = null;
+ }
+// line 256 "src/Parser/ConfigfileParser.y"
+ public function yy_r1(){
+ $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+// line 270 "src/Parser/ConfigfileParser.y"
+ public function yy_r4(){
+ $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+// line 275 "src/Parser/ConfigfileParser.y"
+ public 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 283 "src/Parser/ConfigfileParser.y"
+ public function yy_r6(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 287 "src/Parser/ConfigfileParser.y"
+ public function yy_r7(){
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, array($this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 291 "src/Parser/ConfigfileParser.y"
+ public function yy_r8(){
+ $this->_retvalue = array();
+ }
+// line 297 "src/Parser/ConfigfileParser.y"
+ public function yy_r9(){
+ $this->_retvalue = array('key' => $this->yystack[$this->yyidx + -2]->minor, 'value' => $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 302 "src/Parser/ConfigfileParser.y"
+ public function yy_r10(){
+ $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 306 "src/Parser/ConfigfileParser.y"
+ public function yy_r11(){
+ $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 310 "src/Parser/ConfigfileParser.y"
+ public function yy_r12(){
+ $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 314 "src/Parser/ConfigfileParser.y"
+ public function yy_r13(){
+ $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 318 "src/Parser/ConfigfileParser.y"
+ public function yy_r14(){
+ $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 322 "src/Parser/ConfigfileParser.y"
+ public function yy_r15(){
+ $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 326 "src/Parser/ConfigfileParser.y"
+ public function yy_r16(){
+ $this->_retvalue = '';
+ }
+// line 330 "src/Parser/ConfigfileParser.y"
+ public function yy_r17(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+
+ private $_retvalue;
+
+ public function yy_reduce($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 (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][0];
+ $yysize = self::$yyRuleInfo[$yyruleno][1];
+ $this->yyidx -= $yysize;
+ 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 (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $yyact;
+ $x->major = $yygoto;
+ $x->minor = $yy_lefthand_side;
+ $this->yystack[$this->yyidx] = $x;
+ } else {
+ $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
+ }
+ } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yy_accept();
+ }
+ }
+
+ public function yy_parse_failed()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+ }
+
+ public function yy_syntax_error($yymajor, $TOKEN)
+ {
+// line 238 "src/Parser/ConfigfileParser.y"
+
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_config_file_error();
+ }
+
+ public function yy_accept()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 231 "src/Parser/ConfigfileParser.y"
+
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ }
+
+ 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;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = 0;
+ $x->major = 0;
+ $this->yystack = array();
+ $this->yystack[] = $x;
+ }
+ $yyendofinput = ($yymajor==0);
+
+ 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)) {
+ // force a syntax error
+ $yyact = self::YY_ERROR_ACTION;
+ }
+ if ($yyact < self::YYNSTATE) {
+ $this->yy_shift($yyact, $yymajor, $yytokenvalue);
+ $this->yyerrcnt--;
+ if ($yyendofinput && $this->yyidx >= 0) {
+ $yymajor = 0;
+ } else {
+ $yymajor = self::YYNOCODE;
+ }
+ } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
+ $this->yy_reduce($yyact - self::YYNSTATE);
+ } elseif ($yyact === self::YY_ERROR_ACTION) {
+ 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 ($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
+ ){
+ $this->yy_pop_parser_stack();
+ }
+ if ($this->yyidx < 0 || $yymajor==0) {
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ $this->yy_parse_failed();
+ $yymajor = self::YYNOCODE;
+ } elseif ($yymx !== self::YYERRORSYMBOL) {
+ $u2 = 0;
+ $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
+ }
+ }
+ $this->yyerrcnt = 3;
+ $yyerrorhit = 1;
+ } else {
+ if ($this->yyerrcnt <= 0) {
+ $this->yy_syntax_error($yymajor, $yytokenvalue);
+ }
+ $this->yyerrcnt = 3;
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ if ($yyendofinput) {
+ $this->yy_parse_failed();
+ }
+ $yymajor = self::YYNOCODE;
+ }
+ } else {
+ $this->yy_accept();
+ $yymajor = self::YYNOCODE;
+ }
+ } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
+ }
+}
+
diff --git a/vendor/smarty/smarty/lexer/smarty_internal_configfileparser.y b/vendor/smarty/smarty/src/Parser/ConfigfileParser.y
index c981b58e9..23afc2d8f 100644
--- a/vendor/smarty/smarty/lexer/smarty_internal_configfileparser.y
+++ b/vendor/smarty/smarty/src/Parser/ConfigfileParser.y
@@ -1,5 +1,5 @@
/**
-* Smarty Internal Plugin Configfileparser
+* ConfigfileParser
*
* This is the config file parser
*
@@ -10,16 +10,22 @@
*/
%name TPC_
%declare_class {
+
+namespace Smarty\Parser;
+
+use \Smarty\Lexer\ConfigfileLexer as Lexer;
+use \Smarty\Compiler\Configfile as Configfile;
+
/**
* Smarty Internal Plugin Configfileparse
*
* This is the config file parser.
-* It is generated from the smarty_internal_configfileparser.y file
+* It is generated from the ConfigfileParser.y file
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
-class Smarty_Internal_Configfileparser
+class ConfigfileParser
}
%include_class
{
@@ -42,7 +48,7 @@ class Smarty_Internal_Configfileparser
/**
* lexer object
*
- * @var Smarty_Internal_Configfilelexer
+ * @var Lexer
*/
private $lex;
/**
@@ -54,7 +60,7 @@ class Smarty_Internal_Configfileparser
/**
* compiler object
*
- * @var Smarty_Internal_Config_File_Compiler
+ * @var Configfile
*/
public $compiler = null;
/**
@@ -86,13 +92,13 @@ class Smarty_Internal_Configfileparser
/**
* constructor
*
- * @param Smarty_Internal_Configfilelexer $lex
- * @param Smarty_Internal_Config_File_Compiler $compiler
+ * @param Lexer $lex
+ * @param Configfile $compiler
*/
- public function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
+ public function __construct(Lexer $lex, Configfile $compiler)
{
$this->lex = $lex;
- $this->smarty = $compiler->smarty;
+ $this->smarty = $compiler->getSmarty();
$this->compiler = $compiler;
$this->configOverwrite = $this->smarty->config_overwrite;
$this->configReadHidden = $this->smarty->config_read_hidden;
@@ -237,8 +243,8 @@ class Smarty_Internal_Configfileparser
%stack_overflow
{
- $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');
}
// Complete config file
diff --git a/vendor/smarty/smarty/src/Parser/TemplateParser.php b/vendor/smarty/smarty/src/Parser/TemplateParser.php
new file mode 100644
index 000000000..1a9ea97db
--- /dev/null
+++ b/vendor/smarty/smarty/src/Parser/TemplateParser.php
@@ -0,0 +1,3171 @@
+<?php
+
+// line 11 "src/Parser/TemplateParser.y"
+
+
+namespace Smarty\Parser;
+
+use \Smarty\Lexer\TemplateLexer as Lexer;
+use \Smarty\ParseTree\Template as TemplateParseTree;
+use \Smarty\Compiler\Template as TemplateCompiler;
+use \Smarty\ParseTree\Code;
+use \Smarty\ParseTree\Dq;
+use \Smarty\ParseTree\DqContent;
+use \Smarty\ParseTree\Tag;
+use \Smarty\CompilerException;
+
+/**
+* Smarty Template Parser Class
+*
+* This is the template parser.
+* It is generated from the TemplateParser.y file
+*
+* @author Uwe Tews <uwe.tews@googlemail.com>
+*/
+class TemplateParser
+{
+// line 35 "src/Parser/TemplateParser.y"
+
+ const ERR1 = 'Security error: Call to private object member not allowed';
+ const ERR2 = 'Security error: Call to dynamic object member not allowed';
+
+ /**
+ * result status
+ *
+ * @var bool
+ */
+ public $successful = true;
+
+ /**
+ * return value
+ *
+ * @var mixed
+ */
+ public $retvalue = 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 TemplateParseTree
+ */
+ public $root_buffer;
+
+ /**
+ * current parse tree object
+ *
+ * @var \Smarty\ParseTree\Base
+ */
+ public $current_buffer;
+
+ /**
+ * lexer object
+ *
+ * @var Lexer
+ */
+ public $lex;
+
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
+ private $internalError = false;
+
+ /**
+ * {strip} status
+ *
+ * @var bool
+ */
+ public $strip = false;
+ /**
+ * compiler object
+ *
+ * @var TemplateCompiler
+ */
+ public $compiler = null;
+
+ /**
+ * smarty object
+ *
+ * @var \Smarty\Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * template object
+ *
+ * @var \Smarty\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\ParseTree\Base[]
+ */
+ public $template_prefix = array();
+
+ /**
+ * template prefix array
+ *
+ * @var \Smarty\ParseTree\Base[]
+ */
+ public $template_postfix = array();
+
+ /**
+ * constructor
+ *
+ * @param Lexer $lex
+ * @param TemplateCompiler $compiler
+ */
+ public function __construct(Lexer $lex, TemplateCompiler $compiler)
+ {
+ $this->lex = $lex;
+ $this->compiler = $compiler;
+ $this->template = $this->compiler->getTemplate();
+ $this->smarty = $this->template->getSmarty();
+ $this->security = $this->smarty->security_policy ?? false;
+ $this->current_buffer = $this->root_buffer = new TemplateParseTree();
+ }
+
+ /**
+ * insert PHP code in current buffer
+ *
+ * @param string $code
+ */
+ public function insertPhpCode($code)
+ {
+ $this->current_buffer->append_subtree($this, new Tag($this, $code));
+ }
+
+ /**
+ * error rundown
+ *
+ */
+ public function errorRunDown()
+ {
+ while ($this->yystack !== array()) {
+ $this->yy_pop_parser_stack();
+ }
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
+ }
+ }
+
+ /**
+ * merge PHP code with prefix code and return parse tree tag object
+ *
+ * @param string $code
+ *
+ * @return Tag
+ */
+ private function mergePrefixCode($code)
+ {
+ $tmp = '';
+ foreach ($this->compiler->prefix_code as $preCode) {
+ $tmp .= $preCode;
+ }
+ $this->compiler->prefix_code = array();
+ $tmp .= $code;
+ return new Tag($this, $this->compiler->processNocacheCode($tmp));
+ }
+
+
+ const TP_VERT = 1;
+ const TP_COLON = 2;
+ const TP_TEXT = 3;
+ const TP_STRIPON = 4;
+ const TP_STRIPOFF = 5;
+ const TP_LITERALSTART = 6;
+ const TP_LITERALEND = 7;
+ const TP_LITERAL = 8;
+ const TP_SIMPELOUTPUT = 9;
+ const TP_SIMPLETAG = 10;
+ const TP_SMARTYBLOCKCHILDPARENT = 11;
+ const TP_LDEL = 12;
+ const TP_RDEL = 13;
+ const TP_DOLLARID = 14;
+ const TP_EQUAL = 15;
+ const TP_ID = 16;
+ const TP_PTR = 17;
+ const TP_LDELIF = 18;
+ const TP_LDELFOR = 19;
+ const TP_SEMICOLON = 20;
+ const TP_INCDEC = 21;
+ const TP_TO = 22;
+ const TP_STEP = 23;
+ const TP_LDELFOREACH = 24;
+ const TP_SPACE = 25;
+ const TP_AS = 26;
+ const TP_APTR = 27;
+ const TP_LDELSETFILTER = 28;
+ const TP_CLOSETAG = 29;
+ const TP_LDELSLASH = 30;
+ const TP_ATTR = 31;
+ const TP_INTEGER = 32;
+ const TP_COMMA = 33;
+ const TP_OPENP = 34;
+ const TP_CLOSEP = 35;
+ const TP_MATH = 36;
+ const TP_UNIMATH = 37;
+ const TP_ISIN = 38;
+ const TP_QMARK = 39;
+ const TP_NOT = 40;
+ const TP_TYPECAST = 41;
+ const TP_HEX = 42;
+ const TP_DOT = 43;
+ const TP_INSTANCEOF = 44;
+ const TP_SINGLEQUOTESTRING = 45;
+ const TP_DOUBLECOLON = 46;
+ const TP_NAMESPACE = 47;
+ const TP_AT = 48;
+ const TP_HATCH = 49;
+ const TP_OPENB = 50;
+ const TP_CLOSEB = 51;
+ const TP_DOLLAR = 52;
+ const TP_LOGOP = 53;
+ const TP_SLOGOP = 54;
+ const TP_TLOGOP = 55;
+ const TP_SINGLECOND = 56;
+ const TP_ARRAYOPEN = 57;
+ const TP_QUOTE = 58;
+ const TP_BACKTICK = 59;
+ const YY_NO_ACTION = 541;
+ const YY_ACCEPT_ACTION = 540;
+ const YY_ERROR_ACTION = 539;
+
+ const YY_SZ_ACTTAB = 2565;
+public static $yy_action = array(
+ 33, 106, 269, 306, 179, 305, 200, 247, 248, 249,
+ 1, 264, 138, 237, 202, 361, 6, 87, 284, 222,
+ 338, 361, 112, 107, 400, 321, 217, 261, 218, 130,
+ 224, 400, 21, 400, 49, 44, 400, 32, 45, 46,
+ 278, 226, 400, 282, 400, 203, 400, 53, 4, 139,
+ 302, 231, 28, 102, 225, 5, 54, 247, 248, 249,
+ 1, 20, 135, 192, 193, 271, 6, 87, 246, 222,
+ 216, 29, 112, 229, 7, 159, 217, 261, 218, 140,
+ 208, 272, 21, 509, 53, 44, 13, 302, 45, 46,
+ 278, 226, 149, 235, 153, 203, 257, 53, 4, 328,
+ 302, 302, 256, 304, 143, 5, 54, 247, 248, 249,
+ 1, 302, 100, 394, 86, 236, 6, 87, 3, 222,
+ 102, 257, 112, 144, 97, 394, 217, 261, 218, 102,
+ 224, 394, 21, 256, 446, 44, 178, 305, 45, 46,
+ 278, 226, 302, 282, 200, 203, 446, 53, 4, 115,
+ 302, 47, 22, 285, 41, 5, 54, 247, 248, 249,
+ 1, 139, 137, 267, 202, 141, 6, 87, 14, 222,
+ 540, 99, 112, 151, 15, 446, 217, 261, 218, 314,
+ 224, 216, 21, 256, 233, 44, 9, 446, 45, 46,
+ 278, 226, 325, 282, 268, 203, 53, 53, 4, 302,
+ 302, 152, 257, 361, 320, 5, 54, 247, 248, 249,
+ 1, 264, 137, 102, 194, 361, 6, 87, 37, 222,
+ 102, 361, 112, 257, 89, 316, 217, 261, 218, 314,
+ 224, 216, 21, 36, 49, 44, 200, 40, 45, 46,
+ 278, 226, 115, 282, 237, 203, 14, 53, 4, 115,
+ 302, 238, 15, 155, 107, 5, 54, 247, 248, 249,
+ 1, 466, 136, 256, 202, 200, 6, 87, 466, 222,
+ 255, 171, 112, 264, 446, 310, 217, 261, 218, 158,
+ 224, 257, 11, 142, 157, 44, 446, 183, 45, 46,
+ 278, 226, 26, 282, 256, 203, 49, 53, 4, 446,
+ 302, 184, 260, 323, 176, 5, 54, 247, 248, 249,
+ 1, 446, 137, 264, 189, 291, 6, 87, 183, 222,
+ 200, 302, 112, 253, 178, 305, 217, 261, 218, 263,
+ 213, 18, 21, 200, 184, 44, 49, 15, 45, 46,
+ 278, 226, 146, 282, 269, 203, 25, 53, 4, 220,
+ 302, 312, 107, 152, 290, 5, 54, 247, 248, 249,
+ 1, 219, 137, 147, 187, 130, 6, 87, 259, 222,
+ 16, 19, 112, 256, 167, 258, 217, 261, 218, 111,
+ 224, 173, 21, 96, 256, 44, 200, 23, 45, 46,
+ 278, 226, 177, 282, 227, 203, 335, 53, 4, 174,
+ 302, 180, 305, 170, 90, 5, 54, 247, 248, 249,
+ 1, 184, 137, 256, 202, 91, 6, 87, 482, 222,
+ 160, 482, 112, 214, 197, 482, 217, 261, 218, 184,
+ 188, 181, 21, 245, 302, 44, 164, 140, 45, 46,
+ 278, 226, 466, 282, 13, 203, 166, 53, 4, 466,
+ 302, 42, 43, 286, 12, 5, 54, 247, 248, 249,
+ 1, 264, 139, 447, 202, 40, 6, 87, 293, 294,
+ 295, 296, 112, 17, 311, 447, 217, 261, 218, 337,
+ 224, 183, 21, 260, 49, 48, 244, 245, 45, 46,
+ 278, 226, 24, 282, 303, 203, 8, 53, 4, 92,
+ 302, 42, 43, 286, 12, 5, 54, 247, 248, 249,
+ 1, 10, 139, 9, 202, 317, 6, 87, 293, 294,
+ 295, 296, 112, 116, 299, 35, 217, 261, 218, 225,
+ 224, 198, 21, 98, 34, 44, 329, 324, 45, 46,
+ 278, 226, 448, 282, 448, 203, 161, 53, 4, 172,
+ 302, 129, 175, 225, 232, 5, 54, 288, 215, 216,
+ 252, 101, 93, 109, 243, 191, 103, 85, 450, 162,
+ 450, 24, 101, 330, 182, 273, 274, 300, 298, 301,
+ 250, 251, 281, 204, 283, 113, 289, 262, 300, 298,
+ 301, 121, 288, 215, 216, 252, 270, 93, 109, 275,
+ 190, 103, 60, 277, 279, 225, 237, 101, 280, 297,
+ 273, 274, 129, 239, 199, 266, 107, 281, 204, 283,
+ 7, 289, 101, 300, 298, 301, 288, 88, 216, 254,
+ 163, 114, 109, 265, 191, 103, 85, 200, 300, 298,
+ 301, 101, 200, 259, 273, 274, 19, 165, 326, 362,
+ 258, 281, 204, 283, 396, 289, 234, 300, 298, 301,
+ 288, 362, 216, 327, 200, 114, 396, 362, 201, 119,
+ 72, 336, 396, 37, 259, 101, 393, 19, 273, 274,
+ 154, 258, 228, 339, 94, 281, 204, 283, 393, 289,
+ 256, 300, 298, 301, 393, 38, 313, 288, 313, 216,
+ 313, 313, 114, 207, 319, 201, 119, 72, 313, 313,
+ 313, 313, 101, 221, 184, 273, 274, 156, 313, 313,
+ 313, 95, 281, 204, 283, 313, 289, 256, 300, 298,
+ 301, 313, 313, 313, 288, 313, 216, 313, 313, 108,
+ 206, 319, 201, 122, 51, 313, 120, 313, 313, 101,
+ 313, 184, 273, 274, 313, 313, 313, 313, 313, 281,
+ 204, 283, 313, 289, 313, 300, 298, 301, 288, 313,
+ 216, 313, 313, 114, 313, 313, 201, 122, 67, 313,
+ 313, 313, 313, 101, 313, 313, 273, 274, 313, 313,
+ 313, 313, 313, 281, 204, 283, 313, 289, 313, 300,
+ 298, 301, 288, 313, 216, 313, 313, 114, 212, 313,
+ 201, 122, 67, 313, 313, 313, 313, 101, 313, 313,
+ 273, 274, 313, 313, 313, 313, 313, 281, 204, 283,
+ 313, 289, 313, 300, 298, 301, 288, 313, 216, 313,
+ 313, 114, 205, 313, 201, 119, 72, 313, 313, 313,
+ 313, 101, 313, 313, 273, 274, 313, 313, 313, 313,
+ 313, 281, 204, 283, 313, 289, 313, 300, 298, 301,
+ 313, 313, 313, 288, 313, 216, 313, 313, 114, 313,
+ 318, 201, 122, 78, 313, 313, 313, 313, 101, 313,
+ 482, 273, 274, 482, 313, 313, 313, 482, 281, 204,
+ 283, 313, 289, 209, 211, 298, 301, 288, 313, 216,
+ 313, 313, 108, 313, 313, 201, 122, 58, 313, 238,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 482,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 118, 64, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 196, 117, 59, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 104, 84,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 105, 83, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 55, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 66, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 104, 56, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 65,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 57, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 58, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 68, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 69, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 70,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 71, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 73, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 195,
+ 122, 61, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 62, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 63,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 74, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 75, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 76, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 77, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 79,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 210, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 80, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 81, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 82, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 50, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 52,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 168, 313, 114, 313,
+ 313, 201, 134, 313, 313, 313, 256, 313, 101, 47,
+ 22, 285, 41, 313, 313, 313, 313, 333, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 145, 313, 114, 313, 313, 201, 128, 313, 313, 313,
+ 256, 313, 101, 47, 22, 285, 41, 313, 313, 313,
+ 313, 287, 281, 204, 283, 315, 289, 313, 300, 298,
+ 301, 247, 248, 249, 2, 313, 313, 313, 313, 313,
+ 6, 87, 259, 313, 313, 19, 112, 313, 14, 258,
+ 217, 261, 218, 313, 15, 39, 313, 14, 14, 42,
+ 43, 286, 12, 15, 15, 313, 313, 313, 42, 43,
+ 286, 12, 313, 313, 313, 313, 293, 294, 295, 296,
+ 308, 27, 313, 313, 315, 293, 294, 295, 296, 313,
+ 247, 248, 249, 2, 313, 313, 313, 110, 313, 6,
+ 87, 313, 313, 313, 313, 112, 313, 313, 148, 217,
+ 261, 218, 313, 42, 43, 286, 12, 313, 42, 43,
+ 286, 12, 313, 313, 313, 313, 313, 313, 313, 313,
+ 293, 294, 295, 296, 313, 293, 294, 295, 296, 309,
+ 27, 313, 313, 240, 241, 242, 133, 223, 313, 247,
+ 248, 249, 1, 313, 482, 313, 313, 482, 6, 87,
+ 3, 482, 466, 313, 112, 313, 276, 313, 217, 261,
+ 218, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 132, 313, 313, 313, 313, 313, 101, 313, 466, 313,
+ 313, 466, 313, 482, 313, 466, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 313, 288, 313, 216, 313,
+ 200, 114, 313, 313, 201, 123, 313, 313, 313, 313,
+ 313, 101, 365, 313, 313, 313, 230, 313, 313, 313,
+ 313, 281, 204, 283, 14, 289, 313, 300, 298, 301,
+ 15, 313, 288, 446, 216, 313, 169, 114, 313, 313,
+ 201, 124, 313, 313, 313, 446, 256, 101, 313, 47,
+ 22, 285, 41, 313, 313, 313, 313, 281, 204, 283,
+ 313, 289, 313, 300, 298, 301, 313, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 125, 313, 313, 313,
+ 313, 313, 101, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 313, 313, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 126, 313, 313, 313, 313, 313, 101, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 313, 288, 313,
+ 216, 313, 313, 114, 313, 313, 201, 127, 313, 313,
+ 313, 313, 313, 101, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 281, 204, 283, 313, 289, 313, 300,
+ 298, 301, 313, 313, 288, 313, 216, 223, 313, 114,
+ 313, 313, 201, 131, 482, 313, 313, 482, 313, 101,
+ 313, 482, 466, 313, 313, 313, 276, 313, 313, 281,
+ 204, 283, 313, 289, 313, 300, 298, 301, 313, 313,
+ 409, 313, 313, 313, 313, 313, 313, 313, 466, 313,
+ 313, 466, 313, 482, 223, 466, 292, 313, 313, 313,
+ 313, 482, 313, 313, 482, 313, 313, 36, 482, 466,
+ 313, 223, 446, 276, 409, 409, 409, 409, 482, 313,
+ 313, 482, 313, 313, 446, 482, 466, 313, 313, 30,
+ 276, 409, 409, 409, 409, 466, 482, 313, 466, 482,
+ 482, 313, 466, 482, 466, 313, 313, 313, 276, 313,
+ 313, 313, 466, 313, 313, 466, 332, 482, 313, 466,
+ 313, 313, 313, 313, 313, 331, 42, 43, 286, 12,
+ 466, 313, 313, 466, 313, 482, 313, 466, 313, 42,
+ 43, 286, 12, 293, 294, 295, 296, 307, 313, 42,
+ 43, 286, 12, 185, 313, 313, 293, 294, 295, 296,
+ 186, 313, 313, 313, 322, 313, 293, 294, 295, 296,
+ 42, 43, 286, 12, 31, 313, 42, 43, 286, 12,
+ 313, 334, 313, 42, 43, 286, 12, 293, 294, 295,
+ 296, 313, 313, 293, 294, 295, 296, 313, 313, 313,
+ 293, 294, 295, 296, 42, 43, 286, 12, 42, 43,
+ 286, 12, 482, 313, 313, 482, 313, 313, 313, 482,
+ 466, 293, 294, 295, 296, 293, 294, 295, 296, 313,
+ 313, 313, 259, 313, 313, 19, 313, 313, 313, 258,
+ 313, 313, 313, 313, 313, 313, 466, 313, 14, 466,
+ 150, 482, 313, 466, 15,
+ );
+ public static $yy_lookahead = array(
+ 2, 80, 100, 13, 102, 103, 1, 9, 10, 11,
+ 12, 21, 14, 70, 16, 25, 18, 19, 93, 21,
+ 77, 31, 24, 80, 13, 104, 28, 29, 30, 104,
+ 32, 20, 34, 22, 44, 37, 25, 39, 40, 41,
+ 42, 43, 31, 45, 33, 47, 35, 49, 50, 14,
+ 52, 16, 12, 17, 43, 57, 58, 9, 10, 11,
+ 12, 12, 14, 14, 16, 16, 18, 19, 65, 21,
+ 67, 12, 24, 14, 34, 16, 28, 29, 30, 43,
+ 32, 32, 34, 1, 49, 37, 50, 52, 40, 41,
+ 42, 43, 72, 45, 99, 47, 101, 49, 50, 51,
+ 52, 52, 82, 69, 14, 57, 58, 9, 10, 11,
+ 12, 52, 14, 13, 16, 15, 18, 19, 15, 21,
+ 17, 101, 24, 72, 34, 25, 28, 29, 30, 17,
+ 32, 31, 34, 82, 34, 37, 102, 103, 40, 41,
+ 42, 43, 52, 45, 1, 47, 46, 49, 50, 46,
+ 52, 85, 86, 87, 88, 57, 58, 9, 10, 11,
+ 12, 14, 14, 16, 16, 80, 18, 19, 25, 21,
+ 61, 62, 24, 72, 31, 34, 28, 29, 30, 65,
+ 32, 67, 34, 82, 43, 37, 33, 46, 40, 41,
+ 42, 43, 51, 45, 47, 47, 49, 49, 50, 52,
+ 52, 99, 101, 13, 51, 57, 58, 9, 10, 11,
+ 12, 21, 14, 17, 16, 25, 18, 19, 15, 21,
+ 17, 31, 24, 101, 110, 111, 28, 29, 30, 65,
+ 32, 67, 34, 15, 44, 37, 1, 2, 40, 41,
+ 42, 43, 46, 45, 70, 47, 25, 49, 50, 46,
+ 52, 77, 31, 72, 80, 57, 58, 9, 10, 11,
+ 12, 43, 14, 82, 16, 1, 18, 19, 50, 21,
+ 82, 76, 24, 21, 34, 111, 28, 29, 30, 99,
+ 32, 101, 34, 14, 72, 37, 46, 106, 40, 41,
+ 42, 43, 27, 45, 82, 47, 44, 49, 50, 34,
+ 52, 106, 107, 51, 76, 57, 58, 9, 10, 11,
+ 12, 46, 14, 21, 16, 51, 18, 19, 106, 21,
+ 1, 52, 24, 69, 102, 103, 28, 29, 30, 16,
+ 32, 25, 34, 1, 106, 37, 44, 31, 40, 41,
+ 42, 43, 70, 45, 100, 47, 27, 49, 50, 17,
+ 52, 59, 80, 99, 93, 57, 58, 9, 10, 11,
+ 12, 48, 14, 72, 16, 104, 18, 19, 9, 21,
+ 20, 12, 24, 82, 72, 16, 28, 29, 30, 79,
+ 32, 76, 34, 33, 82, 37, 1, 2, 40, 41,
+ 42, 43, 14, 45, 16, 47, 14, 49, 50, 76,
+ 52, 102, 103, 72, 80, 57, 58, 9, 10, 11,
+ 12, 106, 14, 82, 16, 80, 18, 19, 9, 21,
+ 99, 12, 24, 63, 64, 16, 28, 29, 30, 106,
+ 32, 6, 34, 8, 52, 37, 99, 43, 40, 41,
+ 42, 43, 43, 45, 50, 47, 99, 49, 50, 50,
+ 52, 36, 37, 38, 39, 57, 58, 9, 10, 11,
+ 12, 21, 14, 34, 16, 2, 18, 19, 53, 54,
+ 55, 56, 24, 15, 59, 46, 28, 29, 30, 21,
+ 32, 106, 34, 107, 44, 37, 7, 8, 40, 41,
+ 42, 43, 33, 45, 35, 47, 34, 49, 50, 99,
+ 52, 36, 37, 38, 39, 57, 58, 9, 10, 11,
+ 12, 34, 14, 33, 16, 35, 18, 19, 53, 54,
+ 55, 56, 24, 46, 103, 15, 28, 29, 30, 43,
+ 32, 64, 34, 81, 33, 37, 35, 51, 40, 41,
+ 42, 43, 33, 45, 35, 47, 99, 49, 50, 81,
+ 52, 70, 81, 43, 73, 57, 58, 65, 66, 67,
+ 68, 80, 70, 71, 7, 73, 74, 75, 33, 99,
+ 35, 33, 80, 35, 16, 83, 84, 96, 97, 98,
+ 13, 13, 90, 91, 92, 16, 94, 16, 96, 97,
+ 98, 16, 65, 66, 67, 68, 16, 70, 71, 14,
+ 73, 74, 75, 16, 32, 43, 70, 80, 32, 16,
+ 83, 84, 70, 77, 78, 73, 80, 90, 91, 92,
+ 34, 94, 80, 96, 97, 98, 65, 16, 67, 68,
+ 49, 70, 71, 91, 73, 74, 75, 1, 96, 97,
+ 98, 80, 1, 9, 83, 84, 12, 49, 51, 13,
+ 16, 90, 91, 92, 13, 94, 16, 96, 97, 98,
+ 65, 25, 67, 51, 1, 70, 25, 31, 73, 74,
+ 75, 16, 31, 15, 9, 80, 13, 12, 83, 84,
+ 72, 16, 48, 35, 76, 90, 91, 92, 25, 94,
+ 82, 96, 97, 98, 31, 22, 112, 65, 112, 67,
+ 112, 112, 70, 108, 109, 73, 74, 75, 112, 112,
+ 112, 112, 80, 48, 106, 83, 84, 72, 112, 112,
+ 112, 76, 90, 91, 92, 112, 94, 82, 96, 97,
+ 98, 112, 112, 112, 65, 112, 67, 112, 112, 70,
+ 108, 109, 73, 74, 75, 112, 77, 112, 112, 80,
+ 112, 106, 83, 84, 112, 112, 112, 112, 112, 90,
+ 91, 92, 112, 94, 112, 96, 97, 98, 65, 112,
+ 67, 112, 112, 70, 112, 112, 73, 74, 75, 112,
+ 112, 112, 112, 80, 112, 112, 83, 84, 112, 112,
+ 112, 112, 112, 90, 91, 92, 112, 94, 112, 96,
+ 97, 98, 65, 112, 67, 112, 112, 70, 105, 112,
+ 73, 74, 75, 112, 112, 112, 112, 80, 112, 112,
+ 83, 84, 112, 112, 112, 112, 112, 90, 91, 92,
+ 112, 94, 112, 96, 97, 98, 65, 112, 67, 112,
+ 112, 70, 105, 112, 73, 74, 75, 112, 112, 112,
+ 112, 80, 112, 112, 83, 84, 112, 112, 112, 112,
+ 112, 90, 91, 92, 112, 94, 112, 96, 97, 98,
+ 112, 112, 112, 65, 112, 67, 112, 112, 70, 112,
+ 109, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 9, 83, 84, 12, 112, 112, 112, 16, 90, 91,
+ 92, 112, 94, 95, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 77,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 48,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 72, 112, 70, 112,
+ 112, 73, 74, 112, 112, 112, 82, 112, 80, 85,
+ 86, 87, 88, 112, 112, 112, 112, 89, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 72, 112, 70, 112, 112, 73, 74, 112, 112, 112,
+ 82, 112, 80, 85, 86, 87, 88, 112, 112, 112,
+ 112, 89, 90, 91, 92, 3, 94, 112, 96, 97,
+ 98, 9, 10, 11, 12, 112, 14, 112, 112, 112,
+ 18, 19, 9, 112, 112, 12, 24, 112, 25, 16,
+ 28, 29, 30, 112, 31, 23, 112, 25, 25, 36,
+ 37, 38, 39, 31, 31, 112, 112, 112, 36, 37,
+ 38, 39, 112, 112, 112, 112, 53, 54, 55, 56,
+ 58, 59, 112, 112, 3, 53, 54, 55, 56, 112,
+ 9, 10, 11, 12, 112, 14, 112, 20, 112, 18,
+ 19, 112, 112, 112, 112, 24, 112, 112, 26, 28,
+ 29, 30, 112, 36, 37, 38, 39, 112, 36, 37,
+ 38, 39, 112, 112, 112, 112, 112, 112, 112, 112,
+ 53, 54, 55, 56, 112, 53, 54, 55, 56, 58,
+ 59, 112, 112, 3, 4, 5, 6, 2, 112, 9,
+ 10, 11, 12, 112, 9, 112, 112, 12, 18, 19,
+ 15, 16, 17, 112, 24, 112, 21, 112, 28, 29,
+ 30, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 112, 112, 112, 112, 112, 80, 112, 43, 112,
+ 112, 46, 112, 48, 112, 50, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 112, 65, 112, 67, 112,
+ 1, 70, 112, 112, 73, 74, 112, 112, 112, 112,
+ 112, 80, 13, 112, 112, 112, 17, 112, 112, 112,
+ 112, 90, 91, 92, 25, 94, 112, 96, 97, 98,
+ 31, 112, 65, 34, 67, 112, 72, 70, 112, 112,
+ 73, 74, 112, 112, 112, 46, 82, 80, 112, 85,
+ 86, 87, 88, 112, 112, 112, 112, 90, 91, 92,
+ 112, 94, 112, 96, 97, 98, 112, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 112, 112, 112,
+ 112, 112, 80, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 112, 112, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 112, 112, 112, 112, 112, 80, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 112, 65, 112,
+ 67, 112, 112, 70, 112, 112, 73, 74, 112, 112,
+ 112, 112, 112, 80, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 90, 91, 92, 112, 94, 112, 96,
+ 97, 98, 112, 112, 65, 112, 67, 2, 112, 70,
+ 112, 112, 73, 74, 9, 112, 112, 12, 112, 80,
+ 112, 16, 17, 112, 112, 112, 21, 112, 112, 90,
+ 91, 92, 112, 94, 112, 96, 97, 98, 112, 112,
+ 2, 112, 112, 112, 112, 112, 112, 112, 43, 112,
+ 112, 46, 112, 48, 2, 50, 51, 112, 112, 112,
+ 112, 9, 112, 112, 12, 112, 112, 15, 16, 17,
+ 112, 2, 34, 21, 36, 37, 38, 39, 9, 112,
+ 112, 12, 112, 112, 46, 16, 17, 112, 112, 2,
+ 21, 53, 54, 55, 56, 43, 9, 112, 46, 12,
+ 48, 112, 50, 16, 17, 112, 112, 112, 21, 112,
+ 112, 112, 43, 112, 112, 46, 13, 48, 112, 50,
+ 112, 112, 112, 112, 112, 35, 36, 37, 38, 39,
+ 43, 112, 112, 46, 112, 48, 112, 50, 112, 36,
+ 37, 38, 39, 53, 54, 55, 56, 13, 112, 36,
+ 37, 38, 39, 13, 112, 112, 53, 54, 55, 56,
+ 13, 112, 112, 112, 51, 112, 53, 54, 55, 56,
+ 36, 37, 38, 39, 2, 112, 36, 37, 38, 39,
+ 112, 13, 112, 36, 37, 38, 39, 53, 54, 55,
+ 56, 112, 112, 53, 54, 55, 56, 112, 112, 112,
+ 53, 54, 55, 56, 36, 37, 38, 39, 36, 37,
+ 38, 39, 9, 112, 112, 12, 112, 112, 112, 16,
+ 17, 53, 54, 55, 56, 53, 54, 55, 56, 112,
+ 112, 112, 9, 112, 112, 12, 112, 112, 112, 16,
+ 112, 112, 112, 112, 112, 112, 43, 112, 25, 46,
+ 27, 48, 112, 50, 31,
+);
+ const YY_SHIFT_USE_DFLT = -11;
+ const YY_SHIFT_MAX = 239;
+ public static $yy_shift_ofst = array(
+ -11, 98, 98, 148, 198, 198, 248, 148, 148, 198,
+ 148, 248, -2, 48, 298, 148, 148, 148, 298, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 348, 148, 148, 148, 148, 148, 398, 148, 148, 148,
+ 448, 498, 498, 498, 498, 498, 498, 498, 498, 147,
+ 1962, 1953, 1953, 35, 1952, 2007, 2012, 2413, 2400, 2423,
+ 2444, 415, 2450, 2457, 2482, 2478, 465, 465, 465, 465,
+ 465, 465, 465, 465, 465, 465, 465, 465, 465, 465,
+ 465, 465, 465, 465, 465, 465, 2139, 90, 143, 2011,
+ 2533, 1963, 36, 103, 143, 143, 90, 90, 235, 2070,
+ 2075, 634, 59, 636, 641, 663, 359, 359, 203, 221,
+ 269, 221, 306, 332, 196, 378, 378, 264, 385, 319,
+ 221, 5, 5, 5, 5, 5, 5, 5, 5, 112,
+ 112, 82, 5, -11, -11, 2315, 2362, 2379, 2397, 2513,
+ 49, 665, 409, 218, 221, 221, 458, 221, 382, 221,
+ 382, 221, 394, 394, 221, 221, 221, 221, 394, 40,
+ 394, 394, 394, 399, 394, 399, 394, 221, 221, 221,
+ 221, 5, 463, 5, 5, 463, 5, 462, 112, 112,
+ 112, -11, -11, -11, -11, -11, -11, 2348, 11, 100,
+ -10, 190, 881, 141, 265, 292, 252, 425, 479, 350,
+ 313, 440, 240, 429, 477, 459, 480, 153, 486, 501,
+ 509, 535, 538, 510, 557, 567, 568, 558, 569, 571,
+ 575, 580, 585, 587, 562, 572, 576, 586, 593, 462,
+ 611, 581, 598, 640, 597, 612, 655, 658, 648, 673,
+);
+ const YY_REDUCE_USE_DFLT = -99;
+ const YY_REDUCE_MAX = 186;
+ public static $yy_reduce_ofst = array(
+ 109, 492, 527, 561, 595, 632, 669, 703, 737, 771,
+ 808, 842, 876, 910, 944, 978, 1012, 1046, 1080, 1114,
+ 1148, 1182, 1216, 1250, 1284, 1318, 1352, 1386, 1420, 1454,
+ 1488, 1522, 1556, 1590, 1624, 1658, 1692, 1726, 1760, 1794,
+ 1828, 1862, 2036, 2071, 2107, 2142, 2178, 2213, 2249, 542,
+ 1824, 1858, 2104, 481, 114, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 608, 536, 645, 164,
+ 20, 101, -98, 34, 181, 212, -57, 174, 195, 3,
+ 254, -5, -79, 228, 228, 228, 180, -5, 222, 51,
+ 272, 291, 302, 305, 222, -75, 261, 228, 228, 228,
+ 331, 323, 228, 228, 228, 228, 228, 228, 228, 222,
+ 299, 228, 228, 360, 228, 102, 102, 102, 102, 102,
+ 85, 122, 102, 102, 188, 188, 300, 188, 324, 188,
+ 335, 188, 244, 244, 188, 188, 188, 188, 244, 321,
+ 244, 244, 244, 337, 244, 347, 244, 188, 188, 188,
+ 188, 375, 376, 375, 375, 376, 375, 400, 421, 421,
+ 421, 467, 452, 468, 471, 447, 470,
+);
+ public static $yyExpectedTokens = array(
+ array(),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(2, 9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 39, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 51, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(14, 16, 47, 49, 52, ),
+ array(23, 25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(14, 16, 49, 52, ),
+ array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ),
+ array(20, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(26, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(35, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 51, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, 59, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(2, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(1, 13, 17, 25, 31, 34, 46, ),
+ array(14, 34, 52, ),
+ array(1, 25, 31, ),
+ array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ),
+ array(9, 12, 16, 25, 27, 31, ),
+ array(9, 12, 16, 25, 31, ),
+ array(17, 43, 50, ),
+ array(15, 17, 46, ),
+ array(1, 25, 31, ),
+ array(1, 25, 31, ),
+ array(14, 34, 52, ),
+ array(14, 34, 52, ),
+ array(1, 2, ),
+ array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 24, 28, 29, 30, ),
+ array(2, 9, 12, 15, 16, 17, 21, 43, 46, 48, 50, ),
+ array(9, 12, 16, 48, ),
+ array(12, 14, 16, 52, ),
+ array(1, 13, 25, 31, ),
+ array(1, 13, 25, 31, ),
+ array(1, 13, 25, 31, ),
+ array(9, 12, 16, ),
+ array(9, 12, 16, ),
+ array(15, 17, 46, ),
+ array(25, 31, ),
+ array(14, 52, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(1, 17, ),
+ array(17, 46, ),
+ array(14, 16, ),
+ array(14, 16, ),
+ array(1, 51, ),
+ array(1, 2, ),
+ array(1, 27, ),
+ array(25, 31, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(17, ),
+ array(17, ),
+ array(1, ),
+ array(1, ),
+ array(),
+ array(),
+ array(2, 9, 12, 16, 17, 21, 43, 46, 48, 50, 51, ),
+ array(2, 9, 12, 15, 16, 17, 21, 43, 46, 48, 50, ),
+ array(2, 9, 12, 16, 17, 21, 43, 46, 48, 50, ),
+ array(2, 9, 12, 16, 17, 21, 43, 46, 48, 50, ),
+ array(9, 12, 16, 17, 43, 46, 48, 50, ),
+ array(12, 14, 16, 32, 52, ),
+ array(9, 12, 16, 48, ),
+ array(9, 12, 16, ),
+ array(15, 43, 50, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(15, 21, ),
+ array(25, 31, ),
+ array(14, 52, ),
+ array(25, 31, ),
+ array(14, 52, ),
+ array(25, 31, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(43, 50, ),
+ array(12, 34, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(1, ),
+ array(2, ),
+ array(1, ),
+ array(1, ),
+ array(2, ),
+ array(1, ),
+ array(34, ),
+ array(17, ),
+ array(17, ),
+ array(17, ),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(2, 34, 36, 37, 38, 39, 46, 53, 54, 55, 56, ),
+ array(13, 20, 22, 25, 31, 33, 35, 43, ),
+ array(13, 15, 25, 31, 34, 46, ),
+ array(13, 21, 25, 31, 44, ),
+ array(13, 21, 25, 31, 44, ),
+ array(9, 12, 16, 48, ),
+ array(34, 43, 46, 51, ),
+ array(27, 34, 46, ),
+ array(21, 44, 59, ),
+ array(21, 44, 51, ),
+ array(6, 8, ),
+ array(7, 8, ),
+ array(20, 33, ),
+ array(16, 48, ),
+ array(21, 44, ),
+ array(34, 46, ),
+ array(34, 46, ),
+ array(34, 46, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(33, 51, ),
+ array(43, 51, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(15, 43, ),
+ array(7, ),
+ array(13, ),
+ array(13, ),
+ array(16, ),
+ array(16, ),
+ array(16, ),
+ array(16, ),
+ array(16, ),
+ array(14, ),
+ array(16, ),
+ array(43, ),
+ array(32, ),
+ array(32, ),
+ array(34, ),
+ array(16, ),
+ array(34, ),
+ array(16, ),
+ array(49, ),
+ array(49, ),
+ array(16, ),
+ array(51, ),
+ array(51, ),
+ array(16, ),
+ array(15, ),
+ array(35, ),
+ array(22, ),
+ 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(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+);
+ public static $yy_default = array(
+ 350, 539, 539, 539, 524, 524, 539, 501, 501, 539,
+ 452, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 390, 369, 390, 539, 539, 539, 395, 539, 539, 539,
+ 363, 539, 539, 539, 539, 539, 374, 500, 413, 420,
+ 499, 525, 527, 526, 419, 421, 418, 422, 451, 449,
+ 397, 401, 402, 392, 395, 363, 433, 539, 390, 539,
+ 390, 390, 514, 454, 390, 390, 539, 539, 381, 340,
+ 453, 466, 539, 404, 404, 404, 466, 466, 454, 390,
+ 539, 390, 390, 384, 454, 539, 539, 404, 404, 404,
+ 371, 386, 404, 411, 424, 425, 426, 412, 417, 454,
+ 511, 424, 410, 348, 508, 453, 453, 453, 453, 453,
+ 539, 468, 466, 482, 360, 370, 539, 373, 539, 378,
+ 539, 379, 463, 464, 364, 366, 367, 368, 492, 466,
+ 491, 494, 493, 457, 458, 459, 460, 380, 376, 377,
+ 372, 382, 502, 385, 387, 503, 442, 466, 488, 515,
+ 512, 348, 507, 507, 507, 466, 466, 433, 429, 433,
+ 423, 423, 467, 433, 433, 423, 423, 346, 539, 539,
+ 539, 423, 433, 443, 539, 539, 539, 539, 429, 539,
+ 461, 461, 539, 429, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 429, 431, 539, 513, 539, 482,
+ 539, 539, 539, 539, 539, 438, 539, 539, 539, 398,
+ 341, 342, 343, 344, 345, 347, 349, 351, 352, 353,
+ 354, 355, 356, 357, 359, 388, 389, 484, 485, 486,
+ 506, 383, 504, 505, 427, 436, 437, 446, 447, 465,
+ 469, 470, 471, 405, 406, 407, 408, 409, 428, 430,
+ 432, 434, 438, 439, 440, 414, 415, 416, 441, 444,
+ 445, 479, 477, 516, 517, 518, 519, 455, 456, 490,
+ 461, 462, 483, 498, 358, 489, 535, 536, 528, 529,
+ 530, 533, 532, 534, 537, 538, 531, 521, 523, 522,
+ 520, 495, 480, 478, 476, 473, 474, 475, 481, 496,
+ 497, 435, 472, 510, 487, 482, 391, 375, 399, 403,
+);
+ const YYNOCODE = 113;
+ const YYSTACKDEPTH = 500;
+ const YYNSTATE = 340;
+ const YYNRULE = 199;
+ const YYERRORSYMBOL = 60;
+ const YYERRSYMDT = 'yy0';
+ const YYFALLBACK = 0;
+ public static $yyFallback = array(
+ );
+ public function Trace($TraceFILE, $zTracePrompt)
+ {
+ if (!$TraceFILE) {
+ $zTracePrompt = 0;
+ } elseif (!$zTracePrompt) {
+ $TraceFILE = 0;
+ }
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
+ }
+
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
+
+ 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', 'TEXT',
+ 'STRIPON', 'STRIPOFF', 'LITERALSTART', 'LITERALEND',
+ 'LITERAL', 'SIMPELOUTPUT', 'SIMPLETAG', 'SMARTYBLOCKCHILDPARENT',
+ 'LDEL', 'RDEL', 'DOLLARID', 'EQUAL',
+ 'ID', 'PTR', 'LDELIF', 'LDELFOR',
+ 'SEMICOLON', 'INCDEC', 'TO', 'STEP',
+ 'LDELFOREACH', 'SPACE', 'AS', 'APTR',
+ 'LDELSETFILTER', 'CLOSETAG', 'LDELSLASH', 'ATTR',
+ 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP',
+ 'MATH', 'UNIMATH', 'ISIN', 'QMARK',
+ 'NOT', 'TYPECAST', 'HEX', 'DOT',
+ 'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE',
+ 'AT', 'HATCH', 'OPENB', 'CLOSEB',
+ 'DOLLAR', 'LOGOP', 'SLOGOP', 'TLOGOP',
+ 'SINGLECOND', 'ARRAYOPEN', 'QUOTE', 'BACKTICK',
+ 'error', 'start', 'template', 'literal_e2',
+ 'literal_e1', 'smartytag', 'tagbody', 'tag',
+ 'outattr', 'eqoutattr', 'varindexed', 'output',
+ 'attributes', 'variablevalue', 'value', 'expr',
+ 'modifierlist', 'statement', 'statements', 'foraction',
+ 'varvar', 'modparameters', 'attribute', 'nullcoalescing',
+ 'ternary', 'tlop', 'lop', 'scond',
+ 'isin', 'array', 'function', 'ns1',
+ 'doublequoted_with_quotes', 'static_class_access', 'arraydef', 'variablelist',
+ 'variable', 'object', 'configvariable', 'arrayindex',
+ 'indexdef', 'varvarele', 'objectchain', 'objectelement',
+ 'method', 'params', 'modifier', 'modparameter',
+ 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',
+ );
+
+ public static $yyRuleName = array(
+ 'start ::= template',
+ 'template ::= template TEXT',
+ 'template ::= template STRIPON',
+ 'template ::= template STRIPOFF',
+ 'template ::= template LITERALSTART literal_e2 LITERALEND',
+ 'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND',
+ 'literal_e2 ::= literal_e1',
+ 'literal_e1 ::= literal_e1 LITERAL',
+ 'literal_e1 ::=',
+ 'template ::= template smartytag',
+ 'template ::=',
+ 'smartytag ::= SIMPELOUTPUT',
+ 'smartytag ::= SIMPLETAG',
+ 'smartytag ::= SMARTYBLOCKCHILDPARENT',
+ 'smartytag ::= LDEL tagbody RDEL',
+ 'smartytag ::= tag RDEL',
+ 'tagbody ::= outattr',
+ 'tagbody ::= DOLLARID eqoutattr',
+ 'tagbody ::= varindexed eqoutattr',
+ 'eqoutattr ::= EQUAL outattr',
+ 'outattr ::= output attributes',
+ 'output ::= variablevalue',
+ 'output ::= value',
+ 'output ::= expr',
+ '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 SPACE expr AS varvar attributes',
+ 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
+ 'tag ::= LDELFOREACH attributes',
+ 'tag ::= LDELSETFILTER ID modparameters',
+ 'tag ::= LDELSETFILTER ID modparameters modifierlist',
+ '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 ::= nullcoalescing',
+ 'expr ::= ternary',
+ 'expr ::= INCDEC DOLLARID',
+ 'expr ::= DOLLARID INCDEC',
+ 'expr ::= DOLLARID COLON ID',
+ 'expr ::= expr MATH value',
+ 'expr ::= expr UNIMATH value',
+ 'expr ::= expr tlop value',
+ 'expr ::= expr lop expr',
+ 'expr ::= expr scond',
+ 'isin ::= ISIN',
+ 'expr ::= expr isin array',
+ 'expr ::= expr isin value',
+ 'nullcoalescing ::= expr QMARK QMARK expr',
+ 'ternary ::= expr QMARK DOLLARID COLON expr',
+ 'ternary ::= expr QMARK value COLON expr',
+ 'ternary ::= expr QMARK expr COLON expr',
+ 'ternary ::= expr QMARK COLON expr',
+ 'value ::= variablevalue',
+ 'value ::= UNIMATH value',
+ 'value ::= NOT value',
+ 'value ::= TYPECAST value',
+ 'value ::= variablevalue INCDEC',
+ 'value ::= HEX',
+ 'value ::= INTEGER',
+ 'value ::= INTEGER DOT INTEGER',
+ 'value ::= INTEGER DOT',
+ 'value ::= DOT INTEGER',
+ 'value ::= ID',
+ 'value ::= function',
+ 'value ::= OPENP expr CLOSEP',
+ 'value ::= variablevalue INSTANCEOF ns1',
+ 'value ::= variablevalue INSTANCEOF variablevalue',
+ 'value ::= SINGLEQUOTESTRING',
+ 'value ::= doublequoted_with_quotes',
+ 'value ::= varindexed DOUBLECOLON static_class_access',
+ 'value ::= smartytag',
+ 'value ::= value modifierlist',
+ 'value ::= NAMESPACE',
+ 'value ::= arraydef',
+ 'value ::= ns1 DOUBLECOLON static_class_access',
+ 'ns1 ::= ID',
+ 'ns1 ::= NAMESPACE',
+ 'variablelist ::= variablelist COMMA variable',
+ 'variablelist ::= variablelist COMMA expr',
+ 'variablelist ::= variable',
+ 'variablelist ::= expr',
+ 'variablelist ::=',
+ 'variable ::= DOLLARID',
+ 'variable ::= varindexed',
+ 'variable ::= varvar AT ID',
+ 'variable ::= object',
+ 'configvariable ::= HATCH ID HATCH',
+ 'configvariable ::= HATCH ID HATCH arrayindex',
+ 'configvariable ::= HATCH variablevalue HATCH',
+ 'configvariable ::= HATCH variablevalue HATCH arrayindex',
+ 'variablevalue ::= variable',
+ 'variablevalue ::= configvariable',
+ '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 variablevalue 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 variablelist 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 UNIMATH 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 ::= SLOGOP',
+ 'tlop ::= TLOGOP',
+ 'scond ::= SINGLECOND',
+ 'arraydef ::= OPENB arrayelements CLOSEB',
+ 'arraydef ::= ARRAYOPEN arrayelements CLOSEP',
+ '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 variablevalue BACKTICK',
+ 'doublequotedcontent ::= BACKTICK expr BACKTICK',
+ 'doublequotedcontent ::= DOLLARID',
+ 'doublequotedcontent ::= LDEL variablevalue 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];
+ } else {
+ return 'Unknown';
+ }
+ }
+
+ public static function yy_destructor($yymajor, $yypminor)
+ {
+ switch ($yymajor) {
+ default: break; /* If no destructor action specified: do nothing */
+ }
+ }
+
+ public function yy_pop_parser_stack()
+ {
+ if (empty($this->yystack)) {
+ return;
+ }
+ $yytos = array_pop($this->yystack);
+ 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--;
+
+ return $yymajor;
+ }
+
+ public function __destruct()
+ {
+ while ($this->yystack !== Array()) {
+ $this->yy_pop_parser_stack();
+ }
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
+ }
+ }
+
+ public function yy_get_expected_tokens($token)
+ {
+ 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;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return array_unique($expected);
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $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++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return array_unique($expected);
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return $expected;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return array_unique($expected);
+ }
+
+ 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 (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;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return true;
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $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++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ if (!$token) {
+ // end of input: this is valid
+ return true;
+ }
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return false;
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return true;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return true;
+ }
+
+ public function yy_find_shift_action($iLookAhead)
+ {
+ $stateno = $this->yystack[$this->yyidx]->stateno;
+
+ /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
+ if (!isset(self::$yy_shift_ofst[$stateno])) {
+ // no shift actions
+ return self::$yy_default[$stateno];
+ }
+ $i = self::$yy_shift_ofst[$stateno];
+ if ($i === self::YY_SHIFT_USE_DFLT) {
+ 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 ($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];
+ }
+ }
+
+ 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];
+ }
+ $i = self::$yy_reduce_ofst[$stateno];
+ if ($i === self::YY_REDUCE_USE_DFLT) {
+ 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];
+ } else {
+ return self::$yy_action[$i];
+ }
+ }
+
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ {
+ $this->yyidx++;
+ if ($this->yyidx >= self::YYSTACKDEPTH) {
+ $this->yyidx--;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
+ }
+ while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 232 "src/Parser/TemplateParser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_template_error('Stack overflow in template parser');
+
+ return;
+ }
+ $yytos = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $yytos->stateno = $yyNewState;
+ $yytos->major = $yyMajor;
+ $yytos->minor = $yypMinor;
+ $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($this->yyTraceFILE,"\n");
+ }
+ }
+
+ public static $yyRuleInfo = array(
+ array( 0 => 61, 1 => 1 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 4 ),
+ array( 0 => 63, 1 => 4 ),
+ array( 0 => 63, 1 => 1 ),
+ array( 0 => 64, 1 => 2 ),
+ array( 0 => 64, 1 => 0 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 0 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 65, 1 => 3 ),
+ array( 0 => 65, 1 => 2 ),
+ array( 0 => 66, 1 => 1 ),
+ array( 0 => 66, 1 => 2 ),
+ array( 0 => 66, 1 => 2 ),
+ array( 0 => 69, 1 => 2 ),
+ array( 0 => 68, 1 => 2 ),
+ array( 0 => 71, 1 => 1 ),
+ array( 0 => 71, 1 => 1 ),
+ array( 0 => 71, 1 => 1 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 4 ),
+ array( 0 => 67, 1 => 5 ),
+ array( 0 => 67, 1 => 6 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 8 ),
+ array( 0 => 79, 1 => 2 ),
+ array( 0 => 79, 1 => 1 ),
+ array( 0 => 67, 1 => 5 ),
+ array( 0 => 67, 1 => 7 ),
+ array( 0 => 67, 1 => 6 ),
+ array( 0 => 67, 1 => 8 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 4 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 4 ),
+ array( 0 => 67, 1 => 5 ),
+ array( 0 => 72, 1 => 2 ),
+ array( 0 => 72, 1 => 1 ),
+ array( 0 => 72, 1 => 0 ),
+ array( 0 => 82, 1 => 4 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 4 ),
+ array( 0 => 78, 1 => 1 ),
+ array( 0 => 78, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 75, 1 => 1 ),
+ array( 0 => 75, 1 => 1 ),
+ array( 0 => 75, 1 => 1 ),
+ array( 0 => 75, 1 => 2 ),
+ array( 0 => 75, 1 => 2 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 2 ),
+ array( 0 => 88, 1 => 1 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 83, 1 => 4 ),
+ array( 0 => 84, 1 => 5 ),
+ array( 0 => 84, 1 => 5 ),
+ array( 0 => 84, 1 => 5 ),
+ array( 0 => 84, 1 => 4 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 91, 1 => 1 ),
+ array( 0 => 91, 1 => 1 ),
+ array( 0 => 95, 1 => 3 ),
+ array( 0 => 95, 1 => 3 ),
+ array( 0 => 95, 1 => 1 ),
+ array( 0 => 95, 1 => 1 ),
+ array( 0 => 95, 1 => 0 ),
+ array( 0 => 96, 1 => 1 ),
+ array( 0 => 96, 1 => 1 ),
+ array( 0 => 96, 1 => 3 ),
+ array( 0 => 96, 1 => 1 ),
+ array( 0 => 98, 1 => 3 ),
+ array( 0 => 98, 1 => 4 ),
+ array( 0 => 98, 1 => 3 ),
+ array( 0 => 98, 1 => 4 ),
+ array( 0 => 73, 1 => 1 ),
+ array( 0 => 73, 1 => 1 ),
+ array( 0 => 70, 1 => 2 ),
+ array( 0 => 70, 1 => 2 ),
+ array( 0 => 99, 1 => 2 ),
+ array( 0 => 99, 1 => 0 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 4 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 4 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 5 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 80, 1 => 1 ),
+ array( 0 => 80, 1 => 1 ),
+ array( 0 => 80, 1 => 2 ),
+ array( 0 => 101, 1 => 1 ),
+ array( 0 => 101, 1 => 1 ),
+ array( 0 => 101, 1 => 3 ),
+ array( 0 => 97, 1 => 2 ),
+ array( 0 => 102, 1 => 1 ),
+ array( 0 => 102, 1 => 2 ),
+ array( 0 => 103, 1 => 3 ),
+ array( 0 => 103, 1 => 3 ),
+ array( 0 => 103, 1 => 5 ),
+ array( 0 => 103, 1 => 6 ),
+ array( 0 => 103, 1 => 2 ),
+ array( 0 => 90, 1 => 4 ),
+ array( 0 => 104, 1 => 4 ),
+ array( 0 => 104, 1 => 4 ),
+ array( 0 => 105, 1 => 3 ),
+ array( 0 => 105, 1 => 1 ),
+ array( 0 => 105, 1 => 0 ),
+ array( 0 => 76, 1 => 3 ),
+ array( 0 => 76, 1 => 2 ),
+ array( 0 => 106, 1 => 3 ),
+ array( 0 => 106, 1 => 2 ),
+ array( 0 => 81, 1 => 2 ),
+ array( 0 => 81, 1 => 0 ),
+ array( 0 => 107, 1 => 2 ),
+ array( 0 => 107, 1 => 3 ),
+ array( 0 => 107, 1 => 2 ),
+ array( 0 => 93, 1 => 1 ),
+ array( 0 => 93, 1 => 2 ),
+ array( 0 => 93, 1 => 1 ),
+ array( 0 => 93, 1 => 2 ),
+ array( 0 => 93, 1 => 3 ),
+ array( 0 => 86, 1 => 1 ),
+ array( 0 => 86, 1 => 1 ),
+ array( 0 => 85, 1 => 1 ),
+ array( 0 => 87, 1 => 1 ),
+ array( 0 => 94, 1 => 3 ),
+ array( 0 => 94, 1 => 3 ),
+ array( 0 => 108, 1 => 1 ),
+ array( 0 => 108, 1 => 3 ),
+ array( 0 => 108, 1 => 0 ),
+ array( 0 => 109, 1 => 3 ),
+ array( 0 => 109, 1 => 3 ),
+ array( 0 => 109, 1 => 1 ),
+ array( 0 => 92, 1 => 2 ),
+ array( 0 => 92, 1 => 3 ),
+ array( 0 => 110, 1 => 2 ),
+ array( 0 => 110, 1 => 1 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 1 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 1 ),
+ array( 0 => 111, 1 => 1 ),
+ );
+
+ public static $yyReduceMap = array(
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 21 => 6,
+ 22 => 6,
+ 23 => 6,
+ 35 => 6,
+ 55 => 6,
+ 56 => 6,
+ 64 => 6,
+ 65 => 6,
+ 66 => 6,
+ 83 => 6,
+ 88 => 6,
+ 89 => 6,
+ 94 => 6,
+ 98 => 6,
+ 99 => 6,
+ 103 => 6,
+ 104 => 6,
+ 106 => 6,
+ 122 => 6,
+ 182 => 6,
+ 187 => 6,
+ 7 => 7,
+ 8 => 8,
+ 9 => 9,
+ 11 => 11,
+ 12 => 12,
+ 13 => 13,
+ 14 => 14,
+ 15 => 15,
+ 16 => 16,
+ 17 => 17,
+ 18 => 18,
+ 19 => 19,
+ 20 => 20,
+ 24 => 24,
+ 25 => 25,
+ 26 => 26,
+ 27 => 27,
+ 28 => 28,
+ 29 => 29,
+ 30 => 30,
+ 32 => 30,
+ 31 => 31,
+ 33 => 33,
+ 34 => 34,
+ 36 => 36,
+ 37 => 37,
+ 38 => 38,
+ 39 => 39,
+ 40 => 40,
+ 41 => 41,
+ 42 => 42,
+ 43 => 43,
+ 44 => 44,
+ 45 => 45,
+ 46 => 46,
+ 47 => 47,
+ 48 => 48,
+ 49 => 49,
+ 58 => 49,
+ 110 => 49,
+ 111 => 49,
+ 160 => 49,
+ 164 => 49,
+ 168 => 49,
+ 170 => 49,
+ 50 => 50,
+ 112 => 50,
+ 161 => 50,
+ 167 => 50,
+ 51 => 51,
+ 52 => 52,
+ 53 => 52,
+ 54 => 54,
+ 145 => 54,
+ 57 => 57,
+ 59 => 59,
+ 60 => 60,
+ 61 => 60,
+ 62 => 62,
+ 63 => 63,
+ 67 => 67,
+ 68 => 68,
+ 69 => 69,
+ 70 => 70,
+ 71 => 70,
+ 72 => 72,
+ 73 => 73,
+ 74 => 74,
+ 75 => 75,
+ 76 => 76,
+ 77 => 77,
+ 78 => 78,
+ 79 => 79,
+ 80 => 80,
+ 81 => 80,
+ 82 => 82,
+ 84 => 84,
+ 86 => 84,
+ 87 => 84,
+ 125 => 84,
+ 85 => 85,
+ 90 => 90,
+ 91 => 91,
+ 92 => 92,
+ 93 => 93,
+ 95 => 95,
+ 96 => 96,
+ 97 => 96,
+ 100 => 100,
+ 101 => 101,
+ 102 => 102,
+ 105 => 105,
+ 107 => 107,
+ 108 => 108,
+ 109 => 108,
+ 159 => 108,
+ 113 => 113,
+ 114 => 114,
+ 115 => 115,
+ 116 => 116,
+ 117 => 117,
+ 118 => 118,
+ 119 => 119,
+ 120 => 120,
+ 121 => 121,
+ 123 => 123,
+ 124 => 124,
+ 126 => 126,
+ 184 => 126,
+ 127 => 127,
+ 128 => 128,
+ 129 => 129,
+ 130 => 130,
+ 131 => 131,
+ 132 => 132,
+ 140 => 132,
+ 133 => 133,
+ 134 => 134,
+ 135 => 135,
+ 136 => 135,
+ 138 => 135,
+ 139 => 135,
+ 137 => 137,
+ 141 => 141,
+ 142 => 142,
+ 143 => 143,
+ 188 => 143,
+ 144 => 144,
+ 146 => 146,
+ 147 => 147,
+ 148 => 148,
+ 149 => 149,
+ 150 => 150,
+ 151 => 151,
+ 152 => 152,
+ 153 => 153,
+ 154 => 154,
+ 155 => 155,
+ 156 => 156,
+ 157 => 157,
+ 158 => 158,
+ 162 => 162,
+ 163 => 163,
+ 165 => 165,
+ 166 => 166,
+ 169 => 169,
+ 171 => 171,
+ 172 => 172,
+ 173 => 173,
+ 174 => 174,
+ 175 => 175,
+ 176 => 176,
+ 177 => 177,
+ 178 => 178,
+ 179 => 179,
+ 180 => 180,
+ 181 => 180,
+ 183 => 183,
+ 185 => 185,
+ 186 => 186,
+ 189 => 189,
+ 190 => 190,
+ 191 => 191,
+ 192 => 192,
+ 195 => 192,
+ 193 => 193,
+ 196 => 193,
+ 194 => 194,
+ 197 => 197,
+ 198 => 198,
+ );
+// line 245 "src/Parser/TemplateParser.y"
+ public 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 252 "src/Parser/TemplateParser.y"
+ public function yy_r1(){
+ $text = $this->yystack[ $this->yyidx + 0 ]->minor;
+
+ if ((string)$text == '') {
+ $this->current_buffer->append_subtree($this, null);
+ }
+
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text($text, $this->strip));
+ }
+// line 262 "src/Parser/TemplateParser.y"
+ public function yy_r2(){
+ $this->strip = true;
+ }
+// line 266 "src/Parser/TemplateParser.y"
+ public function yy_r3(){
+ $this->strip = false;
+ }
+// line 271 "src/Parser/TemplateParser.y"
+ public function yy_r4(){
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text($this->yystack[$this->yyidx + -1]->minor));
+ }
+// line 276 "src/Parser/TemplateParser.y"
+ public function yy_r5(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.$this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 279 "src/Parser/TemplateParser.y"
+ public function yy_r6(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 283 "src/Parser/TemplateParser.y"
+ public function yy_r7(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+
+ }
+// line 288 "src/Parser/TemplateParser.y"
+ public function yy_r8(){
+ $this->_retvalue = '';
+ }
+// line 292 "src/Parser/TemplateParser.y"
+ public function yy_r9(){
+ $this->current_buffer->append_subtree($this, $this->mergePrefixCode($this->yystack[$this->yyidx + 0]->minor));
+ $this->compiler->has_variable_string = false;
+ $this->block_nesting_level = $this->compiler->getTagStackCount();
+ }
+// line 302 "src/Parser/TemplateParser.y"
+ public function yy_r11(){
+ $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
+ $attributes = [];
+ if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
+ $attributes[] = 'nocache';
+ $var = $match[1];
+ }
+ $this->compiler->triggerTagNoCache($var);
+ $this->_retvalue = $this->compiler->compilePrintExpression('$_smarty_tpl->getValue(\''.$var.'\')', $attributes);
+ }
+// line 314 "src/Parser/TemplateParser.y"
+ public function yy_r12(){
+ $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()));
+ 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->compilePrintExpression($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 335 "src/Parser/TemplateParser.y"
+ public function yy_r13(){
+ $j = strrpos($this->yystack[$this->yyidx + 0]->minor,'.');
+ if ($this->yystack[$this->yyidx + 0]->minor[$j+1] == 'c') {
+ // {$smarty.block.child}
+ $this->_retvalue = $this->compiler->compileChildBlock();
+ } else {
+ // {$smarty.block.parent}
+ $this->_retvalue = $this->compiler->compileParentBlock();
+ }
+ }
+// line 346 "src/Parser/TemplateParser.y"
+ public function yy_r14(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 350 "src/Parser/TemplateParser.y"
+ public function yy_r15(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 354 "src/Parser/TemplateParser.y"
+ public function yy_r16(){
+ $this->_retvalue = $this->compiler->compilePrintExpression($this->yystack[$this->yyidx + 0]->minor[0], $this->yystack[$this->yyidx + 0]->minor[1]);
+ }
+// line 363 "src/Parser/TemplateParser.y"
+ public function yy_r17(){
+ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'')),$this->yystack[$this->yyidx + 0]->minor[1]));
+ }
+// line 367 "src/Parser/TemplateParser.y"
+ public function yy_r18(){
+ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>$this->yystack[$this->yyidx + -1]->minor['var'])),$this->yystack[$this->yyidx + 0]->minor[1]),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']));
+ }
+// line 371 "src/Parser/TemplateParser.y"
+ public function yy_r19(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 375 "src/Parser/TemplateParser.y"
+ public function yy_r20(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 390 "src/Parser/TemplateParser.y"
+ public function yy_r24(){
+ 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->compilePrintExpression($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
+ }
+ }
+// line 400 "src/Parser/TemplateParser.y"
+ public function yy_r25(){
+ 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->compiler->compilePrintExpression($this->yystack[$this->yyidx + 0]->minor);
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor,array());
+ }
+ }
+// line 413 "src/Parser/TemplateParser.y"
+ public function yy_r26(){
+ 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->compilePrintExpression($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor);
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + 0]->minor, array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor));
+ }
+ }
+// line 425 "src/Parser/TemplateParser.y"
+ public function yy_r27(){
+ $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 430 "src/Parser/TemplateParser.y"
+ public function yy_r28(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + 0]->minor,array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor, 'object_method'=>$this->yystack[$this->yyidx + -2]->minor));
+ }
+// line 435 "src/Parser/TemplateParser.y"
+ public function yy_r29(){
+ $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
+ $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 440 "src/Parser/TemplateParser.y"
+ public function yy_r30(){
+ $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->compiler->getLdelLength()));
+ $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 445 "src/Parser/TemplateParser.y"
+ public function yy_r31(){
+ $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
+ $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 456 "src/Parser/TemplateParser.y"
+ public function yy_r33(){
+ $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 460 "src/Parser/TemplateParser.y"
+ public function yy_r34(){
+ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 468 "src/Parser/TemplateParser.y"
+ public function yy_r36(){
+ $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 472 "src/Parser/TemplateParser.y"
+ public function yy_r37(){
+ $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 477 "src/Parser/TemplateParser.y"
+ public function yy_r38(){
+ $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 481 "src/Parser/TemplateParser.y"
+ public function yy_r39(){
+ $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 484 "src/Parser/TemplateParser.y"
+ public function yy_r40(){
+ $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 489 "src/Parser/TemplateParser.y"
+ public function yy_r41(){
+ $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 493 "src/Parser/TemplateParser.y"
+ public function yy_r42(){
+ $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 499 "src/Parser/TemplateParser.y"
+ public function yy_r43(){
+ $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' /');
+ if ($tag === 'strip') {
+ $this->strip = false;
+ $this->_retvalue = null;
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($tag.'close',array());
+ }
+ }
+// line 508 "src/Parser/TemplateParser.y"
+ public function yy_r44(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor.'close',array());
+ }
+// line 512 "src/Parser/TemplateParser.y"
+ public function yy_r45(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 517 "src/Parser/TemplateParser.y"
+ public function yy_r46(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 521 "src/Parser/TemplateParser.y"
+ public function yy_r47(){
+ $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 529 "src/Parser/TemplateParser.y"
+ public function yy_r48(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 535 "src/Parser/TemplateParser.y"
+ public function yy_r49(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 540 "src/Parser/TemplateParser.y"
+ public function yy_r50(){
+ $this->_retvalue = array();
+ }
+// line 545 "src/Parser/TemplateParser.y"
+ public function yy_r51(){
+ 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 = array($this->yystack[$this->yyidx + -2]->minor=>'\''.$this->yystack[$this->yyidx + 0]->minor.'\'');
+ }
+ }
+// line 556 "src/Parser/TemplateParser.y"
+ public function yy_r52(){
+ $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 564 "src/Parser/TemplateParser.y"
+ public function yy_r54(){
+ $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
+ }
+// line 576 "src/Parser/TemplateParser.y"
+ public function yy_r57(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 589 "src/Parser/TemplateParser.y"
+ public function yy_r59(){
+ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
+ }
+// line 594 "src/Parser/TemplateParser.y"
+ public function yy_r60(){
+ $this->_retvalue = array('var' => '\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'', 'value'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 601 "src/Parser/TemplateParser.y"
+ public function yy_r62(){
+ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 605 "src/Parser/TemplateParser.y"
+ public function yy_r63(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 630 "src/Parser/TemplateParser.y"
+ public function yy_r67(){
+ $this->_retvalue = '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')->preIncDec(\'' . $this->yystack[$this->yyidx + -1]->minor . '\')';
+ }
+// line 635 "src/Parser/TemplateParser.y"
+ public function yy_r68(){
+ $this->_retvalue = '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + -1]->minor,1) .'\')->postIncDec(\'' . $this->yystack[$this->yyidx + 0]->minor . '\')';
+ }
+// line 640 "src/Parser/TemplateParser.y"
+ public function yy_r69(){
+ $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'://' . $this->yystack[$this->yyidx + 0]->minor . '\')';
+ }
+// line 645 "src/Parser/TemplateParser.y"
+ public function yy_r70(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 655 "src/Parser/TemplateParser.y"
+ public function yy_r72(){
+ $this->_retvalue = $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 .')';
+ }
+// line 659 "src/Parser/TemplateParser.y"
+ public function yy_r73(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 663 "src/Parser/TemplateParser.y"
+ public function yy_r74(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor . $this->yystack[$this->yyidx + -1]->minor . ')';
+ }
+// line 667 "src/Parser/TemplateParser.y"
+ public function yy_r75(){
+ static $isin = [
+ 'isin' => 'in_array(',
+ 'isnotin' => '!in_array(',
+ ];
+ $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor));
+ $this->_retvalue = $isin[$op];
+ }
+// line 676 "src/Parser/TemplateParser.y"
+ public function yy_r76(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
+ }
+// line 680 "src/Parser/TemplateParser.y"
+ public function yy_r77(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
+ }
+// line 685 "src/Parser/TemplateParser.y"
+ public function yy_r78(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?? '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 692 "src/Parser/TemplateParser.y"
+ public function yy_r79(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -2]->minor,1));
+ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? $_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\') : '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 697 "src/Parser/TemplateParser.y"
+ public function yy_r80(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 706 "src/Parser/TemplateParser.y"
+ public function yy_r82(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?: '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 716 "src/Parser/TemplateParser.y"
+ public function yy_r84(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 721 "src/Parser/TemplateParser.y"
+ public function yy_r85(){
+ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 742 "src/Parser/TemplateParser.y"
+ public function yy_r90(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 746 "src/Parser/TemplateParser.y"
+ public function yy_r91(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
+ }
+// line 750 "src/Parser/TemplateParser.y"
+ public function yy_r92(){
+ $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 755 "src/Parser/TemplateParser.y"
+ public function yy_r93(){
+ 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 772 "src/Parser/TemplateParser.y"
+ public function yy_r95(){
+ $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')';
+ }
+// line 776 "src/Parser/TemplateParser.y"
+ public function yy_r96(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 794 "src/Parser/TemplateParser.y"
+ public function yy_r100(){
+ if ($this->security && $this->security->static_classes !== array()) {
+ $this->compiler->trigger_template_error('dynamic static class not allowed by security setting');
+ }
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ if ($this->yystack[$this->yyidx + -2]->minor['var'] === '\'smarty\'') {
+ $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).';?>');
+ } else {
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -2]->minor['var']);
+ $this->compiler->appendPrefixCode("<?php {$prefixVar} = \$_smarty_tpl->getValue(" . $this->yystack[$this->yyidx + -2]->minor['var'] . ')'.$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].';?>');
+ }
+ $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
+ }
+// line 809 "src/Parser/TemplateParser.y"
+ public function yy_r101(){
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ $tmp = $this->compiler->appendCode('<?php ob_start();?>', (string) $this->yystack[$this->yyidx + 0]->minor);
+ $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "<?php {$prefixVar} = ob_get_clean();?>"));
+ $this->_retvalue = $prefixVar;
+ }
+// line 816 "src/Parser/TemplateParser.y"
+ public function yy_r102(){
+ $this->_retvalue = $this->compiler->compileModifier($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 829 "src/Parser/TemplateParser.y"
+ public function yy_r105(){
+ 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 848 "src/Parser/TemplateParser.y"
+ public function yy_r107(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 856 "src/Parser/TemplateParser.y"
+ public function yy_r108(){
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 883 "src/Parser/TemplateParser.y"
+ public function yy_r113(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1));
+ $this->_retvalue = array('$_smarty_tpl->hasVariable(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')','$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')');
+ }
+// line 887 "src/Parser/TemplateParser.y"
+ public function yy_r114(){
+ if ($this->yystack[$this->yyidx + 0]->minor['var'] === '\'smarty\'') {
+ $smarty_var = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
+ $this->_retvalue = array('true', $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->compiler->triggerTagNoCache($this->yystack[$this->yyidx + 0]->minor['var']);
+ $this->_retvalue = array('true', '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor['var'] . ')'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
+ }
+ }
+// line 901 "src/Parser/TemplateParser.y"
+ public function yy_r115(){
+ $this->_retvalue = array('true', '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 906 "src/Parser/TemplateParser.y"
+ public function yy_r116(){
+ $this->_retvalue = array('true', $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 911 "src/Parser/TemplateParser.y"
+ public function yy_r117(){
+ $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\'');
+ }
+// line 915 "src/Parser/TemplateParser.y"
+ public function yy_r118(){
+ $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)';
+ }
+// line 919 "src/Parser/TemplateParser.y"
+ public function yy_r119(){
+ $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 923 "src/Parser/TemplateParser.y"
+ public function yy_r120(){
+ $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)';
+ }
+// line 927 "src/Parser/TemplateParser.y"
+ public function yy_r121(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor[1];
+ }
+// line 935 "src/Parser/TemplateParser.y"
+ public function yy_r123(){
+ $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 938 "src/Parser/TemplateParser.y"
+ public function yy_r124(){
+ $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 951 "src/Parser/TemplateParser.y"
+ public function yy_r126(){
+ return;
+ }
+// line 957 "src/Parser/TemplateParser.y"
+ public function yy_r127(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1));
+ $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')]';
+ }
+// line 961 "src/Parser/TemplateParser.y"
+ public function yy_r128(){
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor . ')]';
+ }
+// line 966 "src/Parser/TemplateParser.y"
+ public function yy_r129(){
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -2]->minor);
+ $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -2]->minor . ')->'.$this->yystack[$this->yyidx + 0]->minor.']';
+ }
+// line 971 "src/Parser/TemplateParser.y"
+ public function yy_r130(){
+ $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']';
+ }
+// line 975 "src/Parser/TemplateParser.y"
+ public function yy_r131(){
+ $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']';
+ }
+// line 980 "src/Parser/TemplateParser.y"
+ public function yy_r132(){
+ $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']';
+ }
+// line 985 "src/Parser/TemplateParser.y"
+ public function yy_r133(){
+ $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
+ }
+// line 989 "src/Parser/TemplateParser.y"
+ public function yy_r134(){
+ $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
+ }
+// line 992 "src/Parser/TemplateParser.y"
+ public function yy_r135(){
+ $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']';
+ }
+// line 998 "src/Parser/TemplateParser.y"
+ public function yy_r137(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -1]->minor,1));
+ $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\')]';
+ }
+// line 1015 "src/Parser/TemplateParser.y"
+ public function yy_r141(){
+ $this->_retvalue = '[]';
+ }
+// line 1025 "src/Parser/TemplateParser.y"
+ public function yy_r142(){
+ $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'';
+ }
+// line 1029 "src/Parser/TemplateParser.y"
+ public function yy_r143(){
+ $this->_retvalue = '\'\'';
+ }
+// line 1034 "src/Parser/TemplateParser.y"
+ public function yy_r144(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1042 "src/Parser/TemplateParser.y"
+ public function yy_r146(){
+ $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
+ $this->compiler->triggerTagNoCache($var);
+ $this->_retvalue = '$_smarty_tpl->getValue(\''.$var.'\')';
+ }
+// line 1049 "src/Parser/TemplateParser.y"
+ public function yy_r147(){
+ $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
+ }
+// line 1056 "src/Parser/TemplateParser.y"
+ public function yy_r148(){
+ if ($this->yystack[$this->yyidx + -1]->minor['var'] === '\'smarty\'') {
+ $this->_retvalue = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;
+ } else {
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -1]->minor['var']);
+ $this->_retvalue = '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor['var'] . ')'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
+ }
+ }
+// line 1066 "src/Parser/TemplateParser.y"
+ public function yy_r149(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1071 "src/Parser/TemplateParser.y"
+ public function yy_r150(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1076 "src/Parser/TemplateParser.y"
+ public function yy_r151(){
+ 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 1083 "src/Parser/TemplateParser.y"
+ public function yy_r152(){
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::ERR2);
+ }
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -1]->minor);
+ $this->_retvalue = '->{$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor . ')'.$this->yystack[$this->yyidx + 0]->minor.'}';
+ }
+// line 1091 "src/Parser/TemplateParser.y"
+ public function yy_r153(){
+ 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 1098 "src/Parser/TemplateParser.y"
+ public function yy_r154(){
+ 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 1106 "src/Parser/TemplateParser.y"
+ public function yy_r155(){
+ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1114 "src/Parser/TemplateParser.y"
+ public function yy_r156(){
+
+ if ($this->yystack[$this->yyidx + -3]->minor == 'isset') {
+ $this->_retvalue = '(true';
+ if (count($this->yystack[$this->yyidx + -1]->minor) == 0) {
+ throw new CompilerException("Invalid number of arguments for isset. isset expects at least one parameter.");
+ }
+ foreach ($this->yystack[$this->yyidx + -1]->minor as $value) {
+ if (is_array($value)) {
+ $this->_retvalue .= ' && (' . $value[0] . ' && null !== (' . $value[1] . ' ?? null))';
+ } else {
+ $this->_retvalue .= ' && (' . $value . ' !== null)';
+ }
+ }
+ $this->_retvalue .= ')';
+ } elseif ($this->yystack[$this->yyidx + -3]->minor == 'empty') {
+ if (count($this->yystack[$this->yyidx + -1]->minor) != 1) {
+ throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter.");
+ }
+ if (is_array($this->yystack[$this->yyidx + -1]->minor[0])) {
+ $this->_retvalue .= '( !' . $this->yystack[$this->yyidx + -1]->minor[0][0] . ' || empty(' . $this->yystack[$this->yyidx + -1]->minor[0][1] . '))';
+ } else {
+ $this->_retvalue = 'false == ' . $this->yystack[$this->yyidx + -1]->minor[0];
+ }
+ } else {
+ $p = array();
+ foreach ($this->yystack[$this->yyidx + -1]->minor as $value) {
+ if (is_array($value)) {
+ $p[] = $value[1];
+ } else {
+ $p[] = $value;
+ }
+ }
+ $this->_retvalue = $this->compiler->compileModifierInExpression($this->yystack[$this->yyidx + -3]->minor, $p);
+ }
+ }
+// line 1155 "src/Parser/TemplateParser.y"
+ public function yy_r157(){
+ 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 1162 "src/Parser/TemplateParser.y"
+ public function yy_r158(){
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::ERR2);
+ }
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -3]->minor,1));
+ $this->compiler->appendPrefixCode("<?php {$prefixVar} = \$_smarty_tpl->getValue('".substr($this->yystack[$this->yyidx + -3]->minor,1).'\')'.';?>');
+ $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
+ }
+// line 1191 "src/Parser/TemplateParser.y"
+ public function yy_r162(){
+ $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 1195 "src/Parser/TemplateParser.y"
+ public function yy_r163(){
+ $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 1203 "src/Parser/TemplateParser.y"
+ public function yy_r165(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1211 "src/Parser/TemplateParser.y"
+ public function yy_r166(){
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1224 "src/Parser/TemplateParser.y"
+ public function yy_r169(){
+ $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1233 "src/Parser/TemplateParser.y"
+ public function yy_r171(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method');
+ }
+// line 1238 "src/Parser/TemplateParser.y"
+ public function yy_r172(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method');
+ }
+// line 1243 "src/Parser/TemplateParser.y"
+ public function yy_r173(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '');
+ }
+// line 1248 "src/Parser/TemplateParser.y"
+ public function yy_r174(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property');
+ }
+// line 1253 "src/Parser/TemplateParser.y"
+ public function yy_r175(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property');
+ }
+// line 1259 "src/Parser/TemplateParser.y"
+ public function yy_r176(){
+ $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' ';
+ }
+// line 1263 "src/Parser/TemplateParser.y"
+ public function yy_r177(){
+ static $lops = array(
+ 'eq' => ' == ',
+ 'ne' => ' != ',
+ 'neq' => ' != ',
+ 'gt' => ' > ',
+ 'ge' => ' >= ',
+ 'gte' => ' >= ',
+ 'lt' => ' < ',
+ 'le' => ' <= ',
+ 'lte' => ' <= ',
+ 'mod' => ' % ',
+ 'and' => ' && ',
+ 'or' => ' || ',
+ 'xor' => ' xor ',
+ );
+ $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
+ $this->_retvalue = $lops[$op];
+ }
+// line 1282 "src/Parser/TemplateParser.y"
+ public function yy_r178(){
+ static $tlops = array(
+ '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 = $tlops[$op];
+ }
+// line 1295 "src/Parser/TemplateParser.y"
+ public function yy_r179(){
+ 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 1309 "src/Parser/TemplateParser.y"
+ public function yy_r180(){
+ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
+ }
+// line 1320 "src/Parser/TemplateParser.y"
+ public function yy_r183(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1328 "src/Parser/TemplateParser.y"
+ public function yy_r185(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1332 "src/Parser/TemplateParser.y"
+ public function yy_r186(){
+ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1348 "src/Parser/TemplateParser.y"
+ public function yy_r189(){
+ $this->compiler->leaveDoubleQuote();
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this);
+ }
+// line 1354 "src/Parser/TemplateParser.y"
+ public function yy_r190(){
+ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 1359 "src/Parser/TemplateParser.y"
+ public function yy_r191(){
+ $this->_retvalue = new Dq($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1363 "src/Parser/TemplateParser.y"
+ public function yy_r192(){
+ $this->_retvalue = new Code('(string)'.$this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 1367 "src/Parser/TemplateParser.y"
+ public function yy_r193(){
+ $this->_retvalue = new Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
+ }
+// line 1371 "src/Parser/TemplateParser.y"
+ public function yy_r194(){
+ $this->_retvalue = new Code('(string)$_smarty_tpl->getValue(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')');
+ }
+// line 1383 "src/Parser/TemplateParser.y"
+ public function yy_r197(){
+ $this->_retvalue = new Tag($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1387 "src/Parser/TemplateParser.y"
+ public function yy_r198(){
+ $this->_retvalue = new DqContent($this->yystack[$this->yyidx + 0]->minor);
+ }
+
+ private $_retvalue;
+
+ public function yy_reduce($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 (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][0];
+ $yysize = self::$yyRuleInfo[$yyruleno][1];
+ $this->yyidx -= $yysize;
+ 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 (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $yyact;
+ $x->major = $yygoto;
+ $x->minor = $yy_lefthand_side;
+ $this->yystack[$this->yyidx] = $x;
+ } else {
+ $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
+ }
+ } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yy_accept();
+ }
+ }
+
+ public function yy_parse_failed()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+ }
+
+ public function yy_syntax_error($yymajor, $TOKEN)
+ {
+// line 225 "src/Parser/TemplateParser.y"
+
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_template_error();
+ }
+
+ public function yy_accept()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 218 "src/Parser/TemplateParser.y"
+
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ }
+
+ 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;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = 0;
+ $x->major = 0;
+ $this->yystack = array();
+ $this->yystack[] = $x;
+ }
+ $yyendofinput = ($yymajor==0);
+
+ 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)) {
+ // force a syntax error
+ $yyact = self::YY_ERROR_ACTION;
+ }
+ if ($yyact < self::YYNSTATE) {
+ $this->yy_shift($yyact, $yymajor, $yytokenvalue);
+ $this->yyerrcnt--;
+ if ($yyendofinput && $this->yyidx >= 0) {
+ $yymajor = 0;
+ } else {
+ $yymajor = self::YYNOCODE;
+ }
+ } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
+ $this->yy_reduce($yyact - self::YYNSTATE);
+ } elseif ($yyact === self::YY_ERROR_ACTION) {
+ 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 ($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
+ ){
+ $this->yy_pop_parser_stack();
+ }
+ if ($this->yyidx < 0 || $yymajor==0) {
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ $this->yy_parse_failed();
+ $yymajor = self::YYNOCODE;
+ } elseif ($yymx !== self::YYERRORSYMBOL) {
+ $u2 = 0;
+ $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
+ }
+ }
+ $this->yyerrcnt = 3;
+ $yyerrorhit = 1;
+ } else {
+ if ($this->yyerrcnt <= 0) {
+ $this->yy_syntax_error($yymajor, $yytokenvalue);
+ }
+ $this->yyerrcnt = 3;
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ if ($yyendofinput) {
+ $this->yy_parse_failed();
+ }
+ $yymajor = self::YYNOCODE;
+ }
+ } else {
+ $this->yy_accept();
+ $yymajor = self::YYNOCODE;
+ }
+ } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
+ }
+}
+
diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y b/vendor/smarty/smarty/src/Parser/TemplateParser.y
index ffc85bc06..58d115fe0 100644
--- a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y
+++ b/vendor/smarty/smarty/src/Parser/TemplateParser.y
@@ -9,15 +9,27 @@
%stack_size 500
%name TP_
%declare_class {
+
+namespace Smarty\Parser;
+
+use \Smarty\Lexer\TemplateLexer as Lexer;
+use \Smarty\ParseTree\Template as TemplateParseTree;
+use \Smarty\Compiler\Template as TemplateCompiler;
+use \Smarty\ParseTree\Code;
+use \Smarty\ParseTree\Dq;
+use \Smarty\ParseTree\DqContent;
+use \Smarty\ParseTree\Tag;
+use \Smarty\CompilerException;
+
/**
* Smarty Template Parser Class
*
* This is the template parser.
-* It is generated from the smarty_internal_templateparser.y file
+* It is generated from the TemplateParser.y file
*
* @author Uwe Tews <uwe.tews@googlemail.com>
*/
-class Smarty_Internal_Templateparser
+class TemplateParser
}
%include_class
{
@@ -60,21 +72,21 @@ class Smarty_Internal_Templateparser
/**
* root parse tree buffer
*
- * @var Smarty_Internal_ParseTree_Template
+ * @var TemplateParseTree
*/
public $root_buffer;
/**
* current parse tree object
*
- * @var Smarty_Internal_ParseTree
+ * @var \Smarty\ParseTree\Base
*/
public $current_buffer;
/**
* lexer object
*
- * @var Smarty_Internal_Templatelexer
+ * @var Lexer
*/
public $lex;
@@ -94,21 +106,21 @@ class Smarty_Internal_Templateparser
/**
* compiler object
*
- * @var Smarty_Internal_TemplateCompilerBase
+ * @var TemplateCompiler
*/
public $compiler = null;
/**
* smarty object
*
- * @var Smarty
+ * @var \Smarty\Smarty
*/
public $smarty = null;
/**
* template object
*
- * @var Smarty_Internal_Template
+ * @var \Smarty\Template
*/
public $template = null;
@@ -122,38 +134,38 @@ class Smarty_Internal_Templateparser
/**
* security object
*
- * @var Smarty_Security
+ * @var \Smarty\Security
*/
public $security = null;
/**
* template prefix array
*
- * @var \Smarty_Internal_ParseTree[]
+ * @var \Smarty\ParseTree\Base[]
*/
public $template_prefix = array();
/**
* template prefix array
*
- * @var \Smarty_Internal_ParseTree[]
+ * @var \Smarty\ParseTree\Base[]
*/
public $template_postfix = array();
/**
* constructor
*
- * @param Smarty_Internal_Templatelexer $lex
- * @param Smarty_Internal_TemplateCompilerBase $compiler
+ * @param Lexer $lex
+ * @param TemplateCompiler $compiler
*/
- public function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
+ public function __construct(Lexer $lex, TemplateCompiler $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();
+ $this->template = $this->compiler->getTemplate();
+ $this->smarty = $this->template->getSmarty();
+ $this->security = $this->smarty->security_policy ?? false;
+ $this->current_buffer = $this->root_buffer = new TemplateParseTree();
}
/**
@@ -163,7 +175,7 @@ class Smarty_Internal_Templateparser
*/
public function insertPhpCode($code)
{
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
+ $this->current_buffer->append_subtree($this, new Tag($this, $code));
}
/**
@@ -185,9 +197,9 @@ class Smarty_Internal_Templateparser
*
* @param string $code
*
- * @return Smarty_Internal_ParseTree_Tag
+ * @return Tag
*/
- public function mergePrefixCode($code)
+ private function mergePrefixCode($code)
{
$tmp = '';
foreach ($this->compiler->prefix_code as $preCode) {
@@ -195,7 +207,7 @@ class Smarty_Internal_Templateparser
}
$this->compiler->prefix_code = array();
$tmp .= $code;
- return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true));
+ return new Tag($this, $this->compiler->processNocacheCode($tmp));
}
}
@@ -244,7 +256,7 @@ template ::= template TEXT(B). {
$this->current_buffer->append_subtree($this, null);
}
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip));
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text($text, $this->strip));
}
// strip on
template ::= template STRIPON. {
@@ -257,7 +269,7 @@ template ::= template STRIPOFF. {
// Literal
template ::= template LITERALSTART literal_e2(B) LITERALEND. {
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text(B));
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text(B));
}
@@ -278,11 +290,9 @@ literal_e1(A) ::= . {
}
// Smarty tag
template ::= template smartytag(B). {
- if ($this->compiler->has_code) {
- $this->current_buffer->append_subtree($this, $this->mergePrefixCode(B));
- }
+ $this->current_buffer->append_subtree($this, $this->mergePrefixCode(B));
$this->compiler->has_variable_string = false;
- $this->block_nesting_level = count($this->compiler->_tag_stack);
+ $this->block_nesting_level = $this->compiler->getTagStackCount();
}
@@ -291,11 +301,13 @@ template ::= .
smartytag(A) ::= SIMPELOUTPUT(B). {
$var = trim(substr(B, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
+ $attributes = [];
if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
- A = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\'')));
- } else {
- A = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\'')));
+ $attributes[] = 'nocache';
+ $var = $match[1];
}
+ $this->compiler->triggerTagNoCache($var);
+ A = $this->compiler->compilePrintExpression('$_smarty_tpl->getValue(\''.$var.'\')', $attributes);
}
// simple tag like {name}
@@ -309,7 +321,7 @@ smartytag(A)::= SIMPLETAG(B). {
if ($this->security) {
$this->security->isTrustedConstant($tag, $this->compiler);
}
- A = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag));
+ A = $this->compiler->compilePrintExpression($tag);
} else {
if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
A = $this->compiler->compileTag($match[1],array('\'nocache\''));
@@ -324,10 +336,10 @@ smartytag(A) ::= SMARTYBLOCKCHILDPARENT(i). {
$j = strrpos(i,'.');
if (i[$j+1] == 'c') {
// {$smarty.block.child}
- A = $this->compiler->compileTag('child',array(),array(i));
+ A = $this->compiler->compileChildBlock();
} else {
// {$smarty.block.parent}
- A = $this->compiler->compileTag('parent',array(),array(i));
+ A = $this->compiler->compileParentBlock();
}
}
@@ -340,7 +352,7 @@ smartytag(A) ::= LDEL tagbody(B) RDEL. {
}
// output with optional attributes
tagbody(A) ::= outattr(B). {
- A = $this->compiler->compileTag('private_print_expression',B[1],array('value'=>B[0]));
+ A = $this->compiler->compilePrintExpression(B[0], B[1]);
}
//
@@ -364,7 +376,7 @@ outattr(A) ::= output(B) attributes(C). {
A = array(B,C);
}
-output(A) ::= variable(B). {
+output(A) ::= variablevalue(B). {
A = B;
}
output(A) ::= value(B). {
@@ -380,7 +392,7 @@ tag(res) ::= LDEL ID(i) attributes(a). {
if ($this->security) {
$this->security->isTrustedConstant(i, $this->compiler);
}
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i));
+ res = $this->compiler->compilePrintExpression(i, a);
} else {
res = $this->compiler->compileTag(i,a);
}
@@ -390,7 +402,7 @@ tag(res) ::= LDEL ID(i). {
if ($this->security) {
$this->security->isTrustedConstant(i, $this->compiler);
}
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>i));
+ res = $this->compiler->compilePrintExpression(i);
} else {
res = $this->compiler->compileTag(i,array());
}
@@ -403,7 +415,7 @@ tag(res) ::= LDEL ID(i) modifierlist(l)attributes(a). {
if ($this->security) {
$this->security->isTrustedConstant(i, $this->compiler);
}
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i, 'modifierlist'=>l));
+ res = $this->compiler->compilePrintExpression(i, a, l);
} else {
res = $this->compiler->compileTag(i,a, array('modifierlist'=>l));
}
@@ -419,11 +431,6 @@ tag(res) ::= LDEL ID(i) PTR ID(me) modifierlist(l) attributes(a). {
res = $this->compiler->compileTag(i,a,array('modifierlist'=>l, 'object_method'=>me));
}
- // nocache tag
-tag(res) ::= LDELMAKENOCACHE DOLLARID(i). {
- res = $this->compiler->compileTag('make_nocache',array(array('var'=>'\''.substr(i,1).'\'')));
-}
-
// {if}, {elseif} and {while} tag
tag(res) ::= LDELIF(i) expr(ie). {
$tag = trim(substr(i,$this->compiler->getLdelLength()));
@@ -609,11 +616,26 @@ expr(res) ::= value(v). {
res = v;
}
+ // nullcoalescing
+expr(res) ::= nullcoalescing(v). {
+ res = v;
+}
+
// ternary
expr(res) ::= ternary(v). {
res = v;
}
+ // ++$a / --$a
+expr(res) ::= INCDEC(i2) DOLLARID(i). {
+ res = '$_smarty_tpl->getVariable(\''. substr(i,1) .'\')->preIncDec(\'' . i2 . '\')';
+}
+
+ // $a++ / $a--
+expr(res) ::= DOLLARID(i) INCDEC(i2). {
+ res = '$_smarty_tpl->getVariable(\''. substr(i,1) .'\')->postIncDec(\'' . i2 . '\')';
+}
+
// resources/streams
expr(res) ::= DOLLARID(i) COLON ID(i2). {
res = '$_smarty_tpl->getStreamVariable(\''.substr(i,1).'://' . i2 . '\')';
@@ -642,28 +664,51 @@ expr(res) ::= expr(e1) scond(c). {
res = c . e1 . ')';
}
-expr(res) ::= expr(e1) ISIN array(a). {
- res = 'in_array('.e1.','.a.')';
+isin(res) ::= ISIN(o). {
+ static $isin = [
+ 'isin' => 'in_array(',
+ 'isnotin' => '!in_array(',
+ ];
+ $op = strtolower(str_replace(' ', '', o));
+ res = $isin[$op];
+}
+
+expr(res) ::= expr(e1) isin(c) array(a). {
+ res = c . e1.','.a.')';
}
-expr(res) ::= expr(e1) ISIN value(v). {
- res = 'in_array('.e1.',(array)'.v.')';
+expr(res) ::= expr(e1) isin(c) value(v). {
+ res = c . e1.',(array)'.v.')';
}
+// null coalescing
+nullcoalescing(res) ::= expr(v) QMARK QMARK expr(e2). {
+ res = v.' ?? '.e2;
+}
//
// ternary
//
-ternary(res) ::= OPENP expr(v) CLOSEP QMARK DOLLARID(e1) COLON expr(e2). {
- res = v.' ? '. $this->compiler->compileVariable('\''.substr(e1,1).'\'') . ' : '.e2;
+ternary(res) ::= expr(v) QMARK DOLLARID(e1) COLON expr(e2). {
+ $this->compiler->triggerTagNoCache(substr(e1,1));
+ res = v.' ? $_smarty_tpl->getValue(\''.substr(e1,1).'\') : '.e2;
+}
+
+ternary(res) ::= expr(v) QMARK value(e1) COLON expr(e2). {
+ res = v.' ? '.e1.' : '.e2;
}
-ternary(res) ::= OPENP expr(v) CLOSEP QMARK expr(e1) COLON expr(e2). {
+ternary(res) ::= expr(v) QMARK expr(e1) COLON expr(e2). {
res = v.' ? '.e1.' : '.e2;
}
+// shorthand ternary
+ternary(res) ::= expr(v) QMARK COLON expr(e2). {
+ res = v.' ?: '.e2;
+}
+
// value
-value(res) ::= variable(v). {
+value(res) ::= variablevalue(v). {
res = v;
}
@@ -681,7 +726,7 @@ value(res) ::= TYPECAST(t) value(v). {
res = t.v;
}
-value(res) ::= variable(v) INCDEC(o). {
+value(res) ::= variablevalue(v) INCDEC(o). {
res = v.o;
}
@@ -728,10 +773,10 @@ value(res) ::= OPENP expr(e) CLOSEP. {
res = '('. e .')';
}
-value(res) ::= variable(v1) INSTANCEOF(i) ns1(v2). {
+value(res) ::= variablevalue(v1) INSTANCEOF(i) ns1(v2). {
res = v1.i.v2;
}
-value(res) ::= variable(v1) INSTANCEOF(i) variable(v2). {
+value(res) ::= variablevalue(v1) INSTANCEOF(i) variablevalue(v2). {
res = v1.i.v2;
}
@@ -752,9 +797,10 @@ value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). {
}
$prefixVar = $this->compiler->getNewPrefixVariable();
if (vi['var'] === '\'smarty\'') {
- $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).';?>');
+ $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,vi['smarty_internal_index']).';?>');
} else {
- $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].';?>');
+ $this->compiler->triggerTagNoCache(vi['var']);
+ $this->compiler->appendPrefixCode("<?php {$prefixVar} = \$_smarty_tpl->getValue(" . vi['var'] . ')'.vi['smarty_internal_index'].';?>');
}
res = $prefixVar .'::'.r[0].r[1];
}
@@ -762,13 +808,13 @@ value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). {
// Smarty tag
value(res) ::= smartytag(st). {
$prefixVar = $this->compiler->getNewPrefixVariable();
- $tmp = $this->compiler->appendCode('<?php ob_start();?>', st);
+ $tmp = $this->compiler->appendCode('<?php ob_start();?>', (string) st);
$this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "<?php {$prefixVar} = ob_get_clean();?>"));
res = $prefixVar;
}
value(res) ::= value(v) modifierlist(l). {
- res = $this->compiler->compileTag('private_modifier',array(),array('value'=>v,'modifierlist'=>l));
+ res = $this->compiler->compileModifier(l, v);
}
// name space constant
value(res) ::= NAMESPACE(c). {
@@ -785,9 +831,6 @@ value(res) ::= ns1(c)DOUBLECOLON static_class_access(s). {
if (isset($this->smarty->registered_classes[c])) {
res = $this->smarty->registered_classes[c].'::'.s[0].s[1];
} else {
- trigger_error('Using unregistered static method "' . c.'::'.s[0] . '" in a template is deprecated and will be ' .
- 'removed in a future release. Use Smarty::registerClass to explicitly register ' .
- 'a class for access.', E_USER_DEPRECATED);
res = c.'::'.s[0].s[1];
}
} else {
@@ -807,54 +850,88 @@ ns1(res) ::= NAMESPACE(i). {
}
+// variable lists
+
+// multiple variables
+variablelist(res) ::= variablelist(l) COMMA variable(v). {
+ res = array_merge(l,array(v));
+}
+
+variablelist(res) ::= variablelist(l) COMMA expr(e). {
+ res = array_merge(l,array(e));
+}
+
+// single variable
+variablelist(res) ::= variable(v). {
+ res = array(v);
+}
+// single expression
+variablelist(res) ::= expr(e). {
+ res = array(e);
+}
+
+// no variable
+variablelist(res) ::= . {
+ res = array();
+}
//
// variables
//
// Smarty variable (optional array)
variable(res) ::= DOLLARID(i). {
- res = $this->compiler->compileVariable('\''.substr(i,1).'\'');
+ $this->compiler->triggerTagNoCache(substr(i,1));
+ res = array('$_smarty_tpl->hasVariable(\''.substr(i,1).'\')','$_smarty_tpl->getValue(\''.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;
+ $smarty_var = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,vi['smarty_internal_index']);
+ res = array('true', $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'];
+ $this->compiler->triggerTagNoCache(vi['var']);
+ res = array('true', '$_smarty_tpl->getValue(' . vi['var'] . ')'.vi['smarty_internal_index']);
}
}
// variable with property
variable(res) ::= varvar(v) AT ID(p). {
- res = '$_smarty_tpl->tpl_vars['. v .']->'.p;
+ res = array('true', '$_smarty_tpl->getVariable('. v .')->'.p);
}
// object
variable(res) ::= object(o). {
- res = o;
+ res = array('true', o);
}
// config variable
-variable(res) ::= HATCH ID(i) HATCH. {
+configvariable(res) ::= HATCH ID(i) HATCH. {
res = $this->compiler->compileConfigVariable('\'' . i . '\'');
}
-variable(res) ::= HATCH ID(i) HATCH arrayindex(a). {
+configvariable(res) ::= HATCH ID(i) HATCH arrayindex(a). {
res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . i . '\'') . ') ? $tmp'.a.' :null)';
}
-variable(res) ::= HATCH variable(v) HATCH. {
+configvariable(res) ::= HATCH variablevalue(v) HATCH. {
res = $this->compiler->compileConfigVariable(v);
}
-variable(res) ::= HATCH variable(v) HATCH arrayindex(a). {
+configvariable(res) ::= HATCH variablevalue(v) HATCH arrayindex(a). {
res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable(v) . ') ? $tmp'.a.' : null)';
}
+variablevalue(res) ::= variable(v). {
+ res = v[1];
+}
+
+variablevalue(res) ::= configvariable(v). {
+ res = v;
+}
+
varindexed(res) ::= DOLLARID(i) arrayindex(a). {
res = array('var'=>'\''.substr(i,1).'\'', 'smarty_internal_index'=>a);
}
@@ -878,14 +955,17 @@ arrayindex ::= . {
// single index definition
// Smarty2 style index
indexdef(res) ::= DOT DOLLARID(i). {
- res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';
+ $this->compiler->triggerTagNoCache(substr(i,1));
+ res = '[$_smarty_tpl->getValue(\''.substr(i,1).'\')]';
}
indexdef(res) ::= DOT varvar(v). {
- res = '['.$this->compiler->compileVariable(v).']';
+ $this->compiler->triggerTagNoCache(v);
+ res = '[$_smarty_tpl->getValue(' . v . ')]';
}
indexdef(res) ::= DOT varvar(v) AT ID(p). {
- res = '['.$this->compiler->compileVariable(v).'->'.p.']';
+ $this->compiler->triggerTagNoCache(v);
+ res = '[$_smarty_tpl->getValue(' . v . ')->'.p.']';
}
indexdef(res) ::= DOT ID(i). {
@@ -903,11 +983,11 @@ indexdef(res) ::= DOT LDEL expr(e) RDEL. {
// section tag index
indexdef(res) ::= OPENB ID(i)CLOSEB. {
- res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\'index\']').']';
+ res = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.i.'\'][\'index\']').']';
}
indexdef(res) ::= OPENB ID(i) DOT ID(i2) CLOSEB. {
- res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\''.i2.'\']').']';
+ res = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.i.'\'][\''.i2.'\']').']';
}
indexdef(res) ::= OPENB SINGLEQUOTESTRING(s) CLOSEB. {
res = '['.s.']';
@@ -916,9 +996,10 @@ indexdef(res) ::= OPENB INTEGER(n) CLOSEB. {
res = '['.n.']';
}
indexdef(res) ::= OPENB DOLLARID(i) CLOSEB. {
- res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';
+ $this->compiler->triggerTagNoCache(substr(i,1));
+ res = '[$_smarty_tpl->getValue(\''.substr(i,1).'\')]';
}
-indexdef(res) ::= OPENB variable(v) CLOSEB. {
+indexdef(res) ::= OPENB variablevalue(v) CLOSEB. {
res = '['.v.']';
}
indexdef(res) ::= OPENB value(v) CLOSEB. {
@@ -960,7 +1041,8 @@ varvarele(res) ::= ID(s). {
}
varvarele(res) ::= SIMPELOUTPUT(i). {
$var = trim(substr(i, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
- res = $this->compiler->compileVariable('\''.$var.'\'');
+ $this->compiler->triggerTagNoCache($var);
+ res = '$_smarty_tpl->getValue(\''.$var.'\')';
}
// variable sections of element
@@ -973,9 +1055,10 @@ varvarele(res) ::= LDEL expr(e) RDEL. {
//
object(res) ::= varindexed(vi) objectchain(oc). {
if (vi['var'] === '\'smarty\'') {
- res = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).oc;
+ res = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,vi['smarty_internal_index']).oc;
} else {
- res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].oc;
+ $this->compiler->triggerTagNoCache(vi['var']);
+ res = '$_smarty_tpl->getValue(' . vi['var'] . ')'.vi['smarty_internal_index'].oc;
}
}
@@ -1001,7 +1084,8 @@ objectelement(res)::= PTR varvar(v) arrayindex(a). {
if ($this->security) {
$this->compiler->trigger_template_error (self::ERR2);
}
- res = '->{'.$this->compiler->compileVariable(v).a.'}';
+ $this->compiler->triggerTagNoCache(v);
+ res = '->{$_smarty_tpl->getValue(' . v . ')'.a.'}';
}
objectelement(res)::= PTR LDEL expr(e) RDEL arrayindex(a). {
@@ -1027,8 +1111,41 @@ objectelement(res)::= PTR method(f). {
//
// function
//
-function(res) ::= ns1(f) OPENP params(p) CLOSEP. {
- res = $this->compiler->compilePHPFunctionCall(f, p);
+function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. {
+
+ if (f == 'isset') {
+ res = '(true';
+ if (count(v) == 0) {
+ throw new CompilerException("Invalid number of arguments for isset. isset expects at least one parameter.");
+ }
+ foreach (v as $value) {
+ if (is_array($value)) {
+ res .= ' && (' . $value[0] . ' && null !== (' . $value[1] . ' ?? null))';
+ } else {
+ res .= ' && (' . $value . ' !== null)';
+ }
+ }
+ res .= ')';
+ } elseif (f == 'empty') {
+ if (count(v) != 1) {
+ throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter.");
+ }
+ if (is_array(v[0])) {
+ res .= '( !' . v[0][0] . ' || empty(' . v[0][1] . '))';
+ } else {
+ res = 'false == ' . v[0];
+ }
+ } else {
+ $p = array();
+ foreach (v as $value) {
+ if (is_array($value)) {
+ $p[] = $value[1];
+ } else {
+ $p[] = $value;
+ }
+ }
+ res = $this->compiler->compileModifierInExpression(f, $p);
+ }
}
@@ -1047,7 +1164,8 @@ method(res) ::= DOLLARID(f) OPENP params(p) CLOSEP. {
$this->compiler->trigger_template_error (self::ERR2);
}
$prefixVar = $this->compiler->getNewPrefixVariable();
- $this->compiler->appendPrefixCode("<?php {$prefixVar} = ".$this->compiler->compileVariable('\''.substr(f,1).'\'').';?>');
+ $this->compiler->triggerTagNoCache(substr(f,1));
+ $this->compiler->appendPrefixCode("<?php {$prefixVar} = \$_smarty_tpl->getValue('".substr(f,1).'\')'.';?>');
res = $prefixVar .'('. implode(',',p) .')';
}
@@ -1062,7 +1180,7 @@ params(res) ::= expr(e). {
res = array(e);
}
- // kein parameter
+ // no parameter
params(res) ::= . {
res = array();
}
@@ -1239,34 +1357,34 @@ doublequoted(res) ::= doublequoted(o1) doublequotedcontent(o2). {
}
doublequoted(res) ::= doublequotedcontent(o). {
- res = new Smarty_Internal_ParseTree_Dq($this, o);
+ res = new Dq($this, o);
}
-doublequotedcontent(res) ::= BACKTICK variable(v) BACKTICK. {
- res = new Smarty_Internal_ParseTree_Code('(string)'.v);
+doublequotedcontent(res) ::= BACKTICK variablevalue(v) BACKTICK. {
+ res = new Code('(string)'.v);
}
doublequotedcontent(res) ::= BACKTICK expr(e) BACKTICK. {
- res = new Smarty_Internal_ParseTree_Code('(string)('.e.')');
+ res = new Code('(string)('.e.')');
}
doublequotedcontent(res) ::= DOLLARID(i). {
- res = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr(i,1) .'\']->value');
+ res = new Code('(string)$_smarty_tpl->getValue(\''. substr(i,1) .'\')');
}
-doublequotedcontent(res) ::= LDEL variable(v) RDEL. {
- res = new Smarty_Internal_ParseTree_Code('(string)'.v);
+doublequotedcontent(res) ::= LDEL variablevalue(v) RDEL. {
+ res = new Code('(string)'.v);
}
doublequotedcontent(res) ::= LDEL expr(e) RDEL. {
- res = new Smarty_Internal_ParseTree_Code('(string)('.e.')');
+ res = new Code('(string)('.e.')');
}
doublequotedcontent(res) ::= smartytag(st). {
- res = new Smarty_Internal_ParseTree_Tag($this, st);
+ res = new Tag($this, st);
}
doublequotedcontent(res) ::= TEXT(o). {
- res = new Smarty_Internal_ParseTree_DqContent(o);
+ res = new DqContent(o);
}
diff --git a/vendor/smarty/smarty/src/Resource/BasePlugin.php b/vendor/smarty/smarty/src/Resource/BasePlugin.php
new file mode 100644
index 000000000..6d2222237
--- /dev/null
+++ b/vendor/smarty/smarty/src/Resource/BasePlugin.php
@@ -0,0 +1,145 @@
+<?php
+
+namespace Smarty\Resource;
+
+use Smarty\Exception;
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Source;
+
+/**
+ * Smarty Resource Plugin
+ * Base implementation for resource plugins
+ * @author Rodney Rehm
+ */
+abstract class BasePlugin
+{
+ /**
+ * resource types provided by the core
+ *
+ * @var array
+ */
+ public static $sysplugins = [
+ 'file' => FilePlugin::class,
+ 'string' => StringPlugin::class,
+ 'extends' => ExtendsPlugin::class,
+ 'stream' => StreamPlugin::class,
+ 'eval' => StringEval::class,
+ ];
+
+ /**
+ * Source must be recompiled on every occasion
+ *
+ * @var boolean
+ */
+ public $recompiled = false;
+
+ /**
+ * Flag if resource does allow compilation
+ *
+ * @return bool
+ */
+ public function supportsCompiledTemplates(): bool {
+ return true;
+ }
+
+ /**
+ * Check if resource must check time stamps when loading compiled or cached templates.
+ * Resources like 'extends' which use source components my disable timestamp checks on own resource.
+ * @return bool
+ */
+ public function checkTimestamps()
+ {
+ return true;
+ }
+
+ /**
+ * Load Resource Handler
+ *
+ * @param Smarty $smarty smarty object
+ * @param string $type name of the resource
+ *
+ * @return BasePlugin Resource Handler
+ * @throws Exception
+ */
+ public static function load(Smarty $smarty, $type)
+ {
+ // try smarty's cache
+ if (isset($smarty->_resource_handlers[ $type ])) {
+ return $smarty->_resource_handlers[ $type ];
+ }
+ // try registered resource
+ if (isset($smarty->registered_resources[ $type ])) {
+ return $smarty->_resource_handlers[ $type ] = $smarty->registered_resources[ $type ];
+ }
+ // try sysplugins dir
+ if (isset(self::$sysplugins[ $type ])) {
+ $_resource_class = self::$sysplugins[ $type ];
+ return $smarty->_resource_handlers[ $type ] = new $_resource_class();
+ }
+ // try plugins dir
+ $_resource_class = 'Smarty_Resource_' . \smarty_ucfirst_ascii($type);
+ if (class_exists($_resource_class, false)) {
+ return $smarty->_resource_handlers[ $type ] = new $_resource_class();
+ }
+ // try streams
+ $_known_stream = stream_get_wrappers();
+ if (in_array($type, $_known_stream)) {
+ // is known stream
+ if (is_object($smarty->security_policy)) {
+ $smarty->security_policy->isTrustedStream($type);
+ }
+ return $smarty->_resource_handlers[ $type ] = new StreamPlugin();
+ }
+ // TODO: try default_(template|config)_handler
+ // give up
+ throw new \Smarty\Exception("Unknown resource type '{$type}'");
+ }
+
+ /**
+ * Load template's source into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @throws \Smarty\Exception if source cannot be loaded
+ */
+ abstract public function getContent(Source $source);
+
+ /**
+ * populate Source Object with metadata from Resource
+ *
+ * @param Source $source source object
+ * @param Template|null $_template template object
+ */
+ abstract public function populate(Source $source, ?\Smarty\Template $_template = null);
+
+ /**
+ * populate Source Object with timestamp and exists from Resource
+ *
+ * @param Source $source source object
+ */
+ public function populateTimestamp(Source $source)
+ {
+ // intentionally left blank
+ }
+
+ /*
+ * Check if resource must check time stamps when when loading complied or cached templates.
+ * Resources like 'extends' which use source components my disable timestamp checks on own resource.
+ *
+ * @return bool
+ */
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param \Smarty\Template\Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(\Smarty\Template\Source $source)
+ {
+ return basename(preg_replace('![^\w]+!', '_', $source->name));
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Resource/CustomPlugin.php b/vendor/smarty/smarty/src/Resource/CustomPlugin.php
new file mode 100644
index 000000000..895e97108
--- /dev/null
+++ b/vendor/smarty/smarty/src/Resource/CustomPlugin.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Smarty Resource Plugin
+ *
+
+
+ * @author Rodney Rehm
+ */
+
+namespace Smarty\Resource;
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Source;
+use Smarty\Exception;
+
+/**
+ * Smarty Resource Plugin
+ * Wrapper Implementation for custom resource plugins
+ *
+
+
+ */
+abstract class CustomPlugin extends BasePlugin {
+
+ /**
+ * fetch template and its modification time from data source
+ *
+ * @param string $name template name
+ * @param string &$source template source
+ * @param integer &$mtime template modification timestamp (epoch)
+ */
+ 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
+ *
+ * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
+ */
+ protected function fetchTimestamp($name) {
+ return null;
+ }
+
+ /**
+ * populate Source Object with metadata from Resource
+ *
+ * @param Source $source source object
+ * @param Template|null $_template template object
+ */
+ public function populate(Source $source, ?Template $_template = null) {
+ $source->uid = sha1($source->type . ':' . $source->name);
+ $mtime = $this->fetchTimestamp($source->name);
+ if ($mtime !== null) {
+ $source->timestamp = $mtime;
+ } else {
+ $this->fetch($source->name, $content, $timestamp);
+ $source->timestamp = $timestamp ?? false;
+ if (isset($content)) {
+ $source->content = $content;
+ }
+ }
+ $source->exists = !!$source->timestamp;
+ }
+
+ /**
+ * Load template's source into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @throws Exception if source cannot be loaded
+ */
+ public function getContent(Source $source) {
+ $this->fetch($source->name, $content, $timestamp);
+ if (isset($content)) {
+ return $content;
+ }
+ throw new Exception("Unable to read template {$source->type} '{$source->name}'");
+ }
+
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Source $source) {
+ return basename($this->generateSafeName($source->name));
+ }
+
+ /**
+ * Removes special characters from $name and limits its length to 127 characters.
+ *
+ * @param $name
+ *
+ * @return string
+ */
+ private function generateSafeName($name): string {
+ return substr(preg_replace('/[^A-Za-z0-9._]/', '', (string)$name), 0, 127);
+ }
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php b/vendor/smarty/smarty/src/Resource/ExtendsPlugin.php
index 80946932e..960e37971 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php
+++ b/vendor/smarty/smarty/src/Resource/ExtendsPlugin.php
@@ -1,59 +1,45 @@
<?php
-/**
- * Smarty Internal Plugin Resource Extends
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
- */
+
+namespace Smarty\Resource;
+
+use Smarty\Exception;
+use Smarty\Template;
+use Smarty\Template\Source;
/**
* 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
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
-class Smarty_Internal_Resource_Extends extends Smarty_Resource
+class ExtendsPlugin extends BasePlugin
{
- /**
- * mbstring.overload flag
- *
- * @var int
- */
- public $mbstring_overload = 0;
/**
- * populate Source Object with meta data from Resource
+ * populate Source Object with metadata from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Source $source source object
+ * @param Template|null $_template template object
*
- * @throws SmartyException
+ * @throws Exception
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
+ public function populate(Source $source, ?Template $_template = null)
{
$uid = '';
$sources = array();
$components = explode('|', $source->name);
- $smarty = &$source->smarty;
+ $smarty = $source->getSmarty();
$exists = true;
foreach ($components as $component) {
- /* @var \Smarty_Template_Source $_s */
- $_s = Smarty_Template_Source::load(null, $smarty, $component);
- if ($_s->type === 'php') {
- throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
- }
+ $_s = Source::load(null, $smarty, $component);
$sources[ $_s->uid ] = $_s;
- $uid .= $_s->filepath;
+ $uid .= $_s->uid;
if ($_template) {
$exists = $exists && $_s->exists;
}
}
$source->components = $sources;
- $source->filepath = $_s->filepath;
- $source->uid = sha1($uid . $source->smarty->_joined_template_dir);
+ $source->uid = sha1($uid . $source->getSmarty()->_joined_template_dir);
$source->exists = $exists;
if ($_template) {
$source->timestamp = $_s->timestamp;
@@ -63,12 +49,12 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource
/**
* populate Source Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Source $source source object
+ * @param Source $source source object
*/
- public function populateTimestamp(Smarty_Template_Source $source)
+ public function populateTimestamp(Source $source)
{
$source->exists = true;
- /* @var \Smarty_Template_Source $_s */
+ /* @var Source $_s */
foreach ($source->components as $_s) {
$source->exists = $source->exists && $_s->exists;
}
@@ -78,19 +64,19 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource
/**
* Load template's source from files into current template object
*
- * @param Smarty_Template_Source $source source object
+ * @param Source $source source object
*
* @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @throws \Smarty\Exception if source cannot be loaded
*/
- public function getContent(Smarty_Template_Source $source)
+ public function getContent(Source $source)
{
if (!$source->exists) {
- throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'");
+ throw new \Smarty\Exception("Unable to load '{$source->type}:{$source->name}'");
}
$_components = array_reverse($source->components);
$_content = '';
- /* @var \Smarty_Template_Source $_s */
+ /* @var Source $_s */
foreach ($_components as $_s) {
// read content
$_content .= $_s->getContent();
@@ -101,13 +87,17 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
+ * @param Source $source source object
*
* @return string resource's basename
*/
- public function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Source $source)
{
- return str_replace(':', '.', basename($source->filepath));
+ $search = array(':');
+ if (\Smarty\Smarty::$_IS_WINDOWS) {
+ $search = array(':', '|');
+ }
+ return str_replace($search, '.', basename($source->getResourceName()));
}
/*
diff --git a/vendor/smarty/smarty/src/Resource/FilePlugin.php b/vendor/smarty/smarty/src/Resource/FilePlugin.php
new file mode 100644
index 000000000..0033c8348
--- /dev/null
+++ b/vendor/smarty/smarty/src/Resource/FilePlugin.php
@@ -0,0 +1,183 @@
+<?php
+/**
+ * Smarty Internal Plugin Resource File
+ *
+
+
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ */
+
+namespace Smarty\Resource;
+
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Source;
+use Smarty\Exception;
+
+/**
+ * Smarty Internal Plugin Resource File
+ * Implements the file system as resource for Smarty templates
+ *
+
+
+ */
+class FilePlugin extends BasePlugin {
+
+ /**
+ * populate Source Object with metadata from Resource
+ *
+ * @param Source $source source object
+ * @param Template|null $_template template object
+ *
+ * @throws Exception
+ */
+ public function populate(Source $source, ?Template $_template = null) {
+
+ $source->uid = sha1(
+ $source->name . ($source->isConfig ? $source->getSmarty()->_joined_config_dir :
+ $source->getSmarty()->_joined_template_dir)
+ );
+
+ if ($path = $this->getFilePath($source->name, $source->getSmarty(), $source->isConfig)) {
+ if (isset($source->getSmarty()->security_policy) && is_object($source->getSmarty()->security_policy)) {
+ $source->getSmarty()->security_policy->isTrustedResourceDir($path, $source->isConfig);
+ }
+ $source->exists = true;
+ $source->timestamp = filemtime($path);
+ } else {
+ $source->timestamp = $source->exists = false;
+ }
+ }
+
+ /**
+ * populate Source Object with timestamp and exists from Resource
+ *
+ * @param Source $source source object
+ */
+ public function populateTimestamp(Source $source) {
+ $path = $this->getFilePath($source->name, $source->getSmarty(), $source->isConfig);
+ if (!$source->exists) {
+ $source->exists = ($path !== false && is_file($path));
+ }
+ if ($source->exists && $path !== false) {
+ $source->timestamp = filemtime($path);
+ } else {
+ $source->timestamp = 0;
+ }
+ }
+
+ /**
+ * Load template's source from file into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @throws Exception if source cannot be loaded
+ */
+ public function getContent(Source $source) {
+ if ($source->exists) {
+ return file_get_contents($this->getFilePath($source->getResourceName(), $source->getSmarty(), $source->isConfig()));
+ }
+ throw new Exception(
+ 'Unable to read ' . ($source->isConfig ? 'config' : 'template') .
+ " {$source->type} '{$source->name}'"
+ );
+ }
+
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Source $source) {
+ return basename($source->getResourceName());
+ }
+
+ /**
+ * build template filepath by traversing the template_dir array
+ *
+ * @param $file
+ * @param Smarty $smarty
+ * @param bool $isConfig
+ *
+ * @return string fully qualified filepath
+ */
+ public function getFilePath($file, \Smarty\Smarty $smarty, bool $isConfig = false) {
+ // absolute file ?
+ if ($file[0] === '/' || $file[1] === ':') {
+ $file = $smarty->_realpath($file, true);
+ return is_file($file) ? $file : false;
+ }
+
+ // normalize DIRECTORY_SEPARATOR
+ if (strpos($file, DIRECTORY_SEPARATOR === '/' ? '\\' : '/') !== false) {
+ $file = str_replace(DIRECTORY_SEPARATOR === '/' ? '\\' : '/', DIRECTORY_SEPARATOR, $file);
+ }
+ $_directories = $smarty->getTemplateDir(null, $isConfig);
+ // template_dir index?
+ if ($file[0] === '[' && preg_match('#^\[([^\]]+)\](.+)$#', $file, $fileMatch)) {
+ $file = $fileMatch[2];
+ $_indices = explode(',', $fileMatch[1]);
+ $_index_dirs = [];
+ 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, '.' . DIRECTORY_SEPARATOR) !== false) ? $smarty->_realpath($path) : $path;
+ }
+ }
+ if (!isset($_index_dirs)) {
+ // Could be relative to cwd
+ $path = $smarty->_realpath($file, true);
+ if (is_file($path)) {
+ return $path;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the timestamp of the resource indicated by $resourceName, or false if it doesn't exist.
+ *
+ * @param string $resourceName
+ * @param Smarty $smarty
+ * @param bool $isConfig
+ *
+ * @return false|int
+ */
+ public function getResourceNameTimestamp(string $resourceName, \Smarty\Smarty $smarty, bool $isConfig = false) {
+ if ($path = $this->getFilePath($resourceName, $smarty, $isConfig)) {
+ return filemtime($path);
+ }
+ return false;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Resource/RecompiledPlugin.php b/vendor/smarty/smarty/src/Resource/RecompiledPlugin.php
new file mode 100644
index 000000000..f1c64bc78
--- /dev/null
+++ b/vendor/smarty/smarty/src/Resource/RecompiledPlugin.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Smarty Resource Plugin
+ *
+
+
+ * @author Rodney Rehm
+ */
+
+namespace Smarty\Resource;
+
+use Smarty\Template;
+
+/**
+ * Smarty Resource Plugin
+ * Base implementation for resource plugins that don't compile cache
+ *
+
+
+ */
+abstract class RecompiledPlugin extends BasePlugin {
+
+ /**
+ * Flag that it's an recompiled resource
+ *
+ * @var bool
+ */
+ public $recompiled = true;
+
+ /**
+ * Flag if resource does allow compilation
+ *
+ * @return bool
+ */
+ public function supportsCompiledTemplates(): bool {
+ return false;
+ }
+
+ /*
+ * Disable timestamp checks for recompiled resource.
+ *
+ * @return bool
+ */
+ /**
+ * @return bool
+ */
+ public function checkTimestamps() {
+ return false;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Resource/StreamPlugin.php b/vendor/smarty/smarty/src/Resource/StreamPlugin.php
new file mode 100644
index 000000000..9b5b3f579
--- /dev/null
+++ b/vendor/smarty/smarty/src/Resource/StreamPlugin.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Smarty Internal Plugin Resource Stream
+ * Implements the streams as resource for Smarty template
+ *
+
+
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ */
+
+namespace Smarty\Resource;
+
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Source;
+
+/**
+ * Smarty Internal Plugin Resource Stream
+ * Implements the streams as resource for Smarty template
+ *
+ * @link https://php.net/streams
+
+
+ */
+class StreamPlugin extends RecompiledPlugin {
+
+ /**
+ * populate Source Object with meta data from Resource
+ *
+ * @param Source $source source object
+ * @param Template $_template template object
+ *
+ * @return void
+ */
+ public function populate(Source $source, ?Template $_template = null) {
+ $source->uid = false;
+ $source->content = $this->getContent($source);
+ $source->timestamp = $source->exists = !!$source->content;
+ }
+
+ /**
+ * Load template's source from stream into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ */
+ public function getContent(Source $source) {
+
+ if (strpos($source->getResourceName(), '://') !== false) {
+ $filepath = $source->getResourceName();
+ } else {
+ $filepath = str_replace(':', '://', $source->getFullResourceName());
+ }
+
+ $t = '';
+ // the availability of the stream has already been checked in Smarty\Resource\Base::fetch()
+ $fp = fopen($filepath, 'r+');
+ if ($fp) {
+ while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
+ $t .= $current_line;
+ }
+ fclose($fp);
+ return $t;
+ } else {
+ return false;
+ }
+ }
+
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php b/vendor/smarty/smarty/src/Resource/StringEval.php
index 3b552a589..5c35e7437 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php
+++ b/vendor/smarty/smarty/src/Resource/StringEval.php
@@ -1,9 +1,14 @@
<?php
+
+namespace Smarty\Resource;
+
+use Smarty\Smarty;
+
/**
* Smarty Internal Plugin Resource Eval
*
- * @package Smarty
- * @subpackage TemplateResources
+
+
* @author Uwe Tews
* @author Rodney Rehm
*/
@@ -13,35 +18,35 @@
* 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
- * @subpackage TemplateResources
+
+
*/
-class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled
+class StringEval extends RecompiledPlugin
{
/**
* 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\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\Template $_template = null)
{
- $source->uid = $source->filepath = sha1($source->name);
+ $source->uid = sha1($source->name);
$source->timestamp = $source->exists = true;
}
/**
* 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
+ * @param \Smarty\Template\Source $source source object
*
* @return string template source
+ *@uses decode() to decode base64 and urlencoded template_resources
+ *
*/
- public function getContent(Smarty_Template_Source $source)
+ public function getContent(\Smarty\Template\Source $source)
{
return $this->decode($source->name);
}
@@ -67,27 +72,13 @@ class Smarty_Internal_Resource_Eval 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
- * @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) . '#' . $this->decode($resource_name);
- }
-
- /**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
+ * @param \Smarty\Template\Source $source source object
*
* @return string resource's basename
*/
- public function getBasename(Smarty_Template_Source $source)
+ public function getBasename(\Smarty\Template\Source $source)
{
return '';
}
diff --git a/vendor/smarty/smarty/src/Resource/StringPlugin.php b/vendor/smarty/smarty/src/Resource/StringPlugin.php
new file mode 100644
index 000000000..fb3692c73
--- /dev/null
+++ b/vendor/smarty/smarty/src/Resource/StringPlugin.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Smarty Internal Plugin Resource String
+ *
+
+
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ */
+
+namespace Smarty\Resource;
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Template\Source;
+
+/**
+ * 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}}
+ *
+
+
+ */
+class StringPlugin extends BasePlugin {
+
+ /**
+ * populate Source Object with metadata from Resource
+ *
+ * @param Source $source source object
+ * @param Template $_template template object
+ *
+ * @return void
+ */
+ public function populate(Source $source, ?Template $_template = null) {
+ $source->uid = sha1($source->name);
+ $source->timestamp = $source->exists = true;
+ }
+
+ /**
+ * Load template's source from $resource_name into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @uses decode() to decode base64 and urlencoded template_resources
+ *
+ */
+ public function getContent(Source $source) {
+ return $this->decode($source->name);
+ }
+
+ /**
+ * decode base64 and urlencode
+ *
+ * @param string $string template_resource to decode
+ *
+ * @return string decoded template_resource
+ */
+ protected function decode($string) {
+ // decode if specified
+ if (($pos = strpos($string, ':')) !== false) {
+ if (!strncmp($string, 'base64', 6)) {
+ return base64_decode(substr($string, 7));
+ } elseif (!strncmp($string, 'urlencode', 9)) {
+ return urldecode(substr($string, 10));
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Determine basename for compiled filename
+ * Always returns an empty string.
+ *
+ * @param Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Source $source) {
+ return '';
+ }
+
+ /*
+ * Disable timestamp checks for string resource.
+ *
+ * @return bool
+ */
+ /**
+ * @return bool
+ */
+ public function checkTimestamps() {
+ return false;
+ }
+}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_block.php b/vendor/smarty/smarty/src/Runtime/Block.php
index 9956d642b..90eab9cbb 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_block.php
+++ b/vendor/smarty/smarty/src/Runtime/Block.php
@@ -1,13 +1,15 @@
<?php
+namespace Smarty\Runtime;
+
/**
* Smarty {block} tag class
*
- * @package Smarty
- * @subpackage PluginsInternal
+
+
* @author Uwe Tews
*/
-class Smarty_Internal_Block
+class Block
{
/**
* Block name
@@ -47,14 +49,14 @@ class Smarty_Internal_Block
/**
* Inheritance child block
*
- * @var Smarty_Internal_Block|null
+ * @var Block|null
*/
public $child = null;
/**
* Inheritance calling parent block
*
- * @var Smarty_Internal_Block|null
+ * @var Block|null
*/
public $parent = null;
@@ -66,7 +68,7 @@ class Smarty_Internal_Block
public $tplIndex = 0;
/**
- * Smarty_Internal_Block constructor.
+ * Block constructor.
* - if outer level {block} of child template ($state === 1) save it as child root block
* - otherwise process inheritance and render
*
@@ -82,9 +84,9 @@ class Smarty_Internal_Block
/**
* Compiled block code overloaded by {block} class
*
- * @param \Smarty_Internal_Template $tpl
+ * @param \Smarty\Template $tpl
*/
- public function callBlock(Smarty_Internal_Template $tpl)
+ public function callBlock(\Smarty\Template $tpl)
{
}
}
diff --git a/vendor/smarty/smarty/src/Runtime/CaptureRuntime.php b/vendor/smarty/smarty/src/Runtime/CaptureRuntime.php
new file mode 100644
index 000000000..3f37c59fc
--- /dev/null
+++ b/vendor/smarty/smarty/src/Runtime/CaptureRuntime.php
@@ -0,0 +1,163 @@
+<?php
+
+namespace Smarty\Runtime;
+use Smarty\Template;
+
+/**
+ * Runtime Extension Capture
+ *
+
+
+ * @author Uwe Tews
+ */
+class CaptureRuntime {
+
+ /**
+ * Stack of capture parameter
+ *
+ * @var array
+ */
+ private $captureStack = [];
+
+ /**
+ * Current open capture sections
+ *
+ * @var int
+ */
+ private $captureCount = 0;
+
+ /**
+ * Count stack
+ *
+ * @var int[]
+ */
+ private $countStack = [];
+
+ /**
+ * Named buffer
+ *
+ * @var string[]
+ */
+ private $namedBuffer = [];
+
+ /**
+ * Open capture section
+ *
+ * @param \Smarty\Template $_template
+ * @param string $buffer capture name
+ * @param string $assign variable name
+ * @param string $append variable name
+ */
+ public function open(Template $_template, $buffer, $assign, $append) {
+
+ $this->registerCallbacks($_template);
+
+ $this->captureStack[] = [
+ $buffer,
+ $assign,
+ $append,
+ ];
+ $this->captureCount++;
+ ob_start();
+ }
+
+ /**
+ * Register callbacks in template class
+ *
+ * @param \Smarty\Template $_template
+ */
+ private function registerCallbacks(Template $_template) {
+
+ foreach ($_template->startRenderCallbacks as $callback) {
+ if (is_array($callback) && get_class($callback[0]) == self::class) {
+ // already registered
+ return;
+ }
+ }
+
+ $_template->startRenderCallbacks[] = [
+ $this,
+ 'startRender',
+ ];
+ $_template->endRenderCallbacks[] = [
+ $this,
+ 'endRender',
+ ];
+ $this->startRender($_template);
+ }
+
+ /**
+ * Start render callback
+ *
+ * @param \Smarty\Template $_template
+ */
+ public function startRender(Template $_template) {
+ $this->countStack[] = $this->captureCount;
+ $this->captureCount = 0;
+ }
+
+ /**
+ * Close capture section
+ *
+ * @param \Smarty\Template $_template
+ *
+ * @throws \Smarty\Exception
+ */
+ public function close(Template $_template) {
+ if ($this->captureCount) {
+ [$buffer, $assign, $append] = array_pop($this->captureStack);
+ $this->captureCount--;
+ if (isset($assign)) {
+ $_template->assign($assign, ob_get_contents());
+ }
+ if (isset($append)) {
+ $_template->append($append, ob_get_contents());
+ }
+ $this->namedBuffer[$buffer] = ob_get_clean();
+ } else {
+ $this->error($_template);
+ }
+ }
+
+ /**
+ * Error exception on not matching {capture}{/capture}
+ *
+ * @param \Smarty\Template $_template
+ *
+ * @throws \Smarty\Exception
+ */
+ public function error(Template $_template) {
+ throw new \Smarty\Exception("Not matching {capture}{/capture} in '{$_template->template_resource}'");
+ }
+
+ /**
+ * Return content of named capture buffer by key or as array
+ *
+ * @param \Smarty\Template $_template
+ * @param string|null $name
+ *
+ * @return string|string[]|null
+ */
+ public function getBuffer(Template $_template, $name = null) {
+ if (isset($name)) {
+ return $this->namedBuffer[$name] ?? null;
+ } else {
+ return $this->namedBuffer;
+ }
+ }
+
+ /**
+ * End render callback
+ *
+ * @param \Smarty\Template $_template
+ *
+ * @throws \Smarty\Exception
+ */
+ public function endRender(Template $_template) {
+ if ($this->captureCount) {
+ $this->error($_template);
+ } else {
+ $this->captureCount = array_pop($this->countStack);
+ }
+ }
+}
diff --git a/vendor/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php b/vendor/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php
new file mode 100644
index 000000000..f3be85ca6
--- /dev/null
+++ b/vendor/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Smarty\Runtime;
+
+use Smarty\Exception;
+
+class DefaultPluginHandlerRuntime {
+
+ /**
+ * @var callable
+ */
+ private $defaultPluginHandler;
+
+ public function __construct(?callable $defaultPluginHandler = null) {
+ $this->defaultPluginHandler = $defaultPluginHandler;
+ }
+
+ public function hasPlugin($tag, $plugin_type): bool {
+ if ($this->defaultPluginHandler === null) {
+ return false;
+ }
+
+ $callback = null;
+
+ // these are not used here
+ $script = null;
+ $cacheable = null;
+
+ return (\call_user_func_array(
+ $this->defaultPluginHandler,
+ [
+ $tag,
+ $plugin_type,
+ null, // This used to pass $this->template, but this parameter has been removed in 5.0
+ &$callback,
+ &$script,
+ &$cacheable,
+ ]
+ ) && $callback);
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function getCallback($tag, $plugin_type) {
+
+ if ($this->defaultPluginHandler === null) {
+ return false;
+ }
+
+ $callback = null;
+
+ // these are not used here
+ $script = null;
+ $cacheable = null;
+
+ if (\call_user_func_array(
+ $this->defaultPluginHandler,
+ [
+ $tag,
+ $plugin_type,
+ null, // This used to pass $this->template, but this parameter has been removed in 5.0
+ &$callback,
+ &$script,
+ &$cacheable,
+ ]
+ ) && $callback) {
+ return $callback;
+ }
+ throw new Exception("Default plugin handler: Returned callback for '{$tag}' not callable at runtime");
+ }
+
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/src/Runtime/ForeachRuntime.php b/vendor/smarty/smarty/src/Runtime/ForeachRuntime.php
new file mode 100644
index 000000000..06da7d546
--- /dev/null
+++ b/vendor/smarty/smarty/src/Runtime/ForeachRuntime.php
@@ -0,0 +1,160 @@
+<?php
+
+namespace Smarty\Runtime;
+use Smarty\Template;
+
+/**
+ * Foreach Runtime Methods count(), init(), restore()
+ *
+
+
+ * @author Uwe Tews
+ */
+class ForeachRuntime {
+
+ /**
+ * Stack of saved variables
+ *
+ * @var array
+ */
+ private $stack = [];
+
+ /**
+ * Init foreach loop
+ * - save item and key variables, named foreach property data if defined
+ * - init item and key variables, named foreach property data if required
+ * - count total if required
+ *
+ * @param \Smarty\Template $tpl
+ * @param mixed $from values to loop over
+ * @param string $item variable name
+ * @param bool $needTotal flag if we need to count values
+ * @param null|string $key variable name
+ * @param null|string $name of named foreach
+ * @param array $properties of named foreach
+ *
+ * @return mixed $from
+ */
+ public function init(
+ Template $tpl,
+ $from,
+ $item,
+ $needTotal = false,
+ $key = null,
+ $name = null,
+ $properties = []
+ ) {
+ $needTotal = $needTotal || isset($properties['total']);
+ $saveVars = [];
+ $total = null;
+ if (!is_array($from)) {
+ if (is_object($from)) {
+ if ($needTotal) {
+ $total = $this->count($from);
+ }
+ } else {
+ settype($from, 'array');
+ }
+ }
+ if (!isset($total)) {
+ $total = empty($from) ? 0 : ($needTotal ? count($from) : 1);
+ }
+ if ($tpl->hasVariable($item)) {
+ $saveVars['item'] = [
+ $item,
+ $tpl->getVariable($item)->getValue(),
+ ];
+ }
+ $tpl->assign($item,null);
+ if ($total === 0) {
+ $from = null;
+ } else {
+ if ($key) {
+ if ($tpl->hasVariable($key)) {
+ $saveVars['key'] = [
+ $key,
+ clone $tpl->getVariable($key),
+ ];
+ }
+ $tpl->assign($key, null);
+ }
+ }
+ if ($needTotal) {
+ $tpl->getVariable($item)->total = $total;
+ }
+ if ($name) {
+ $namedVar = "__smarty_foreach_{$name}";
+ if ($tpl->hasVariable($namedVar)) {
+ $saveVars['named'] = [
+ $namedVar,
+ clone $tpl->getVariable($namedVar),
+ ];
+ }
+ $namedProp = [];
+ if (isset($properties['total'])) {
+ $namedProp['total'] = $total;
+ }
+ if (isset($properties['iteration'])) {
+ $namedProp['iteration'] = 0;
+ }
+ if (isset($properties['index'])) {
+ $namedProp['index'] = -1;
+ }
+ if (isset($properties['show'])) {
+ $namedProp['show'] = ($total > 0);
+ }
+ $tpl->assign($namedVar, $namedProp);
+ }
+ $this->stack[] = $saveVars;
+ return $from;
+ }
+
+ /**
+ * [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
+ * @throws \Exception
+ */
+ public function count($value): int
+ {
+ if ($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 $value instanceof \Generator ? 1 : iterator_count($value);
+ } elseif ($value instanceof \Countable) {
+ return count($value);
+ }
+ return count((array) $value);
+ }
+
+ /**
+ * Restore saved variables
+ *
+ * will be called by {break n} or {continue n} for the required number of levels
+ *
+ * @param \Smarty\Template $tpl
+ * @param int $levels number of levels
+ */
+ public function restore(Template $tpl, $levels = 1) {
+ while ($levels) {
+ $saveVars = array_pop($this->stack);
+ if (!empty($saveVars)) {
+ if (isset($saveVars['item'])) {
+ $tpl->getVariable($saveVars['item'][0])->setValue($saveVars['item'][1]);
+ }
+ if (isset($saveVars['key'])) {
+ $tpl->setVariable($saveVars['key'][0], $saveVars['key'][1]);
+ }
+ if (isset($saveVars['named'])) {
+ $tpl->setVariable($saveVars['named'][0], $saveVars['named'][1]);
+ }
+ }
+ $levels--;
+ }
+ }
+}
diff --git a/vendor/smarty/smarty/src/Runtime/InheritanceRuntime.php b/vendor/smarty/smarty/src/Runtime/InheritanceRuntime.php
new file mode 100644
index 000000000..74ea85440
--- /dev/null
+++ b/vendor/smarty/smarty/src/Runtime/InheritanceRuntime.php
@@ -0,0 +1,243 @@
+<?php
+
+namespace Smarty\Runtime;
+use Smarty\Template;
+use Smarty\Template\Source;
+use Smarty\Exception;
+
+/**
+ * Inheritance Runtime Methods processBlock, endChild, init
+ *
+
+
+ * @author Uwe Tews
+ **/
+class InheritanceRuntime {
+
+ /**
+ * 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
+ */
+ private $state = 0;
+
+ /**
+ * Array of root child {block} objects
+ *
+ * @var \Smarty\Runtime\Block[]
+ */
+ private $childRoot = [];
+
+ /**
+ * inheritance template nesting level
+ *
+ * @var int
+ */
+ private $inheritanceLevel = 0;
+
+ /**
+ * inheritance template index
+ *
+ * @var int
+ */
+ private $tplIndex = -1;
+
+ /**
+ * Array of template source objects
+ *
+ * @var Source[]
+ */
+ private $sources = [];
+
+ /**
+ * Stack of source objects while executing block code
+ *
+ * @var Source[]
+ */
+ private $sourceStack = [];
+
+ /**
+ * Initialize inheritance
+ *
+ * @param \Smarty\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(Template $tpl, $initChild, $blockNames = []) {
+ // if called while executing parent template it must be a sub-template with new inheritance root
+ if ($initChild && $this->state === 3 && (strpos($tpl->template_resource, 'extendsall') === false)) {
+ $tpl->setInheritance(clone $tpl->getSmarty()->getRuntime('Inheritance'));
+ $tpl->getInheritance()->init($tpl, $initChild, $blockNames);
+ return;
+ }
+ ++$this->tplIndex;
+ $this->sources[$this->tplIndex] = $tpl->getSource();
+ // start of child sub template(s)
+ if ($initChild) {
+ $this->state = 1;
+ if (!$this->inheritanceLevel) {
+ //grab any output of child templates
+ ob_start();
+ }
+ ++$this->inheritanceLevel;
+ }
+ // 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\Template $tpl
+ * @param null|string $template optional name of inheritance parent template
+ *
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ public function endChild(Template $tpl, $template = null, ?string $currentDir = null) {
+ --$this->inheritanceLevel;
+ if (!$this->inheritanceLevel) {
+ ob_end_clean();
+ $this->state = 2;
+ }
+ if (isset($template)) {
+ $tpl->renderSubTemplate(
+ $template,
+ $tpl->cache_id,
+ $tpl->compile_id,
+ $tpl->caching ? \Smarty\Template::CACHING_NOCACHE_CODE : 0,
+ $tpl->cache_lifetime,
+ [],
+ null,
+ $currentDir
+ );
+ }
+ }
+
+ /**
+ * \Smarty\Runtime\Block constructor.
+ * - if outer level {block} of child template ($state === 1) save it as child root block
+ * - otherwise process inheritance and render
+ *
+ * @param \Smarty\Template $tpl
+ * @param $className
+ * @param string $name
+ * @param int|null $tplIndex index of outer level {block} if nested
+ *
+ * @throws \Smarty\Exception
+ */
+ public function instanceBlock(Template $tpl, $className, $name, $tplIndex = null) {
+ $block = new $className($name, isset($tplIndex) ? $tplIndex : $this->tplIndex);
+ if (isset($this->childRoot[$name])) {
+ $block->child = $this->childRoot[$name];
+ }
+ if ($this->state === 1) {
+ $this->childRoot[$name] = $block;
+ return;
+ }
+ // make sure we got child block of child template of current block
+ while ($block->child && $block->child->child && $block->tplIndex <= $block->child->tplIndex) {
+ $block->child = $block->child->child;
+ }
+ $this->processBlock($tpl, $block);
+ }
+
+ /**
+ * Goto child block or render this
+ *
+ * @param Template $tpl
+ * @param \Smarty\Runtime\Block $block
+ * @param \Smarty\Runtime\Block|null $parent
+ *
+ * @throws Exception
+ */
+ private function processBlock(
+ Template $tpl,
+ \Smarty\Runtime\Block $block,
+ ?\Smarty\Runtime\Block $parent = null
+ ) {
+ if ($block->hide && !isset($block->child)) {
+ return;
+ }
+ if (isset($block->child) && $block->child->hide && !isset($block->child->child)) {
+ $block->child = null;
+ }
+ $block->parent = $parent;
+ if ($block->append && !$block->prepend && isset($parent)) {
+ $this->callParent($tpl, $block, '\'{block append}\'');
+ }
+ if ($block->callsChild || !isset($block->child) || ($block->child->hide && !isset($block->child->child))) {
+ $this->callBlock($block, $tpl);
+ } else {
+ $this->processBlock($tpl, $block->child, $block);
+ }
+ if ($block->prepend && isset($parent)) {
+ $this->callParent($tpl, $block, '{block prepend}');
+ if ($block->append) {
+ if ($block->callsChild || !isset($block->child)
+ || ($block->child->hide && !isset($block->child->child))
+ ) {
+ $this->callBlock($block, $tpl);
+ } else {
+ $this->processBlock($tpl, $block->child, $block);
+ }
+ }
+ }
+ $block->parent = null;
+ }
+
+ /**
+ * Render child on \$smarty.block.child
+ *
+ * @param Template $tpl
+ * @param \Smarty\Runtime\Block $block
+ *
+ * @return null|string block content
+ * @throws Exception
+ */
+ public function callChild(Template $tpl, \Smarty\Runtime\Block $block) {
+ if (isset($block->child)) {
+ $this->processBlock($tpl, $block->child, $block);
+ }
+ }
+
+ /**
+ * Render parent block on \$smarty.block.parent or {block append/prepend}
+ *
+ * @param Template $tpl
+ * @param \Smarty\Runtime\Block $block
+ * @param string $tag
+ *
+ * @return null|string block content
+ * @throws Exception
+ */
+ public function callParent(Template $tpl, \Smarty\Runtime\Block $block) {
+ if (isset($block->parent)) {
+ $this->callBlock($block->parent, $tpl);
+ } else {
+ throw new Exception("inheritance: illegal '{\$smarty.block.parent}' used in child template '" .
+ "{$tpl->getInheritance()->sources[$block->tplIndex]->getResourceName()}' block '{$block->name}'");
+ }
+ }
+
+ /**
+ * render block
+ *
+ * @param \Smarty\Runtime\Block $block
+ * @param Template $tpl
+ */
+ public function callBlock(\Smarty\Runtime\Block $block, Template $tpl) {
+ $this->sourceStack[] = $tpl->getSource();
+ $tpl->setSource($this->sources[$block->tplIndex]);
+ $block->callBlock($tpl);
+ $tpl->setSource(array_pop($this->sourceStack));
+ }
+}
diff --git a/vendor/smarty/smarty/src/Runtime/TplFunctionRuntime.php b/vendor/smarty/smarty/src/Runtime/TplFunctionRuntime.php
new file mode 100644
index 000000000..6c4b93d73
--- /dev/null
+++ b/vendor/smarty/smarty/src/Runtime/TplFunctionRuntime.php
@@ -0,0 +1,144 @@
+<?php
+
+namespace Smarty\Runtime;
+use Smarty\Exception;
+use Smarty\Template;
+use Smarty\TemplateBase;
+
+/**
+ * TplFunction Runtime Methods callTemplateFunction
+ *
+
+
+ * @author Uwe Tews
+ **/
+class TplFunctionRuntime {
+
+ /**
+ * Call template function
+ *
+ * @param \Smarty\Template $tpl template object
+ * @param string $name template function name
+ * @param array $params parameter array
+ * @param bool $nocache true if called nocache
+ *
+ * @throws \Smarty\Exception
+ */
+ public function callTemplateFunction(Template $tpl, $name, $params, $nocache) {
+ $funcParam = $tpl->tplFunctions[$name] ?? ($tpl->getSmarty()->tplFunctions[$name] ?? null);
+ if (!isset($funcParam)) {
+ throw new \Smarty\Exception("Unable to find template function '{$name}'");
+ }
+
+ if (!$tpl->caching || ($tpl->caching && $nocache)) {
+ $function = $funcParam['call_name'];
+ } else {
+ if (isset($funcParam['call_name_caching'])) {
+ $function = $funcParam['call_name_caching'];
+ } else {
+ $function = $funcParam['call_name'];
+ }
+ }
+ if (!function_exists($function) && !$this->addTplFuncToCache($tpl, $name, $function)) {
+ throw new \Smarty\Exception("Unable to find template function '{$name}'");
+ }
+
+ $tpl->pushStack();
+ $function($tpl, $params);
+ $tpl->popStack();
+ }
+
+ /**
+ * Register template functions defined by template
+ *
+ * @param \Smarty|\Smarty\Template|\Smarty\TemplateBase $obj
+ * @param array $tplFunctions source information array of
+ * template functions defined
+ * in template
+ * @param bool $override if true replace existing
+ * functions with same name
+ */
+ public function registerTplFunctions(TemplateBase $obj, $tplFunctions, $override = true) {
+ $obj->tplFunctions =
+ $override ? array_merge($obj->tplFunctions, $tplFunctions) : array_merge($tplFunctions, $obj->tplFunctions);
+ // make sure that the template functions are known in parent templates
+ if ($obj->_isSubTpl()) {
+ $this->registerTplFunctions($obj->parent, $tplFunctions, false);
+ } else {
+ $obj->getSmarty()->tplFunctions = $override ? array_merge($obj->getSmarty()->tplFunctions, $tplFunctions) :
+ array_merge($tplFunctions, $obj->getSmarty()->tplFunctions);
+ }
+ }
+
+ /**
+ * Return source parameter array for single or all template functions
+ *
+ * @param \Smarty\Template $tpl template object
+ * @param null|string $name template function name
+ *
+ * @return array|bool|mixed
+ */
+ public function getTplFunction(Template $tpl, $name = null) {
+ if (isset($name)) {
+ return $tpl->tplFunctions[$name] ?? ($tpl->getSmarty()->tplFunctions[$name] ?? false);
+ } else {
+ return empty($tpl->tplFunctions) ? $tpl->getSmarty()->tplFunctions : $tpl->tplFunctions;
+ }
+ }
+
+ /**
+ * Add template function to cache file for nocache calls
+ *
+ * @param Template $tpl
+ * @param string $_name template function name
+ * @param string $_function PHP function name
+ *
+ * @return bool
+ * @throws Exception
+ */
+ private function addTplFuncToCache(Template $tpl, $_name, $_function) {
+ $funcParam = $tpl->tplFunctions[$_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)) {
+
+ // Some magic code existed here, testing if the cached property had been set
+ // and then bubbling up until it found a parent template that had the cached property.
+ // This is no longer possible, so somehow this might break.
+
+ // add template function code to cache file
+ $content = $tpl->getCached()->readCache($tpl);
+ 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);
+ }
+ $tpl->getCached()->writeCache(
+ $tpl,
+ preg_replace('/\s*\?>\s*$/', "\n", $content) .
+ "\n" . preg_replace(
+ [
+ '/^\s*<\?php\s+/',
+ '/\s*\?>\s*$/',
+ ],
+ "\n",
+ $match[0]
+ )
+ );
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Security.php b/vendor/smarty/smarty/src/Security.php
new file mode 100644
index 000000000..250b3bca7
--- /dev/null
+++ b/vendor/smarty/smarty/src/Security.php
@@ -0,0 +1,560 @@
+<?php
+/**
+ * Smarty plugin
+ *
+
+
+ * @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?
+ */
+
+namespace Smarty;
+
+use Smarty\Exception;
+
+/**
+ * This class does contain the security settings
+ */
+#[\AllowDynamicProperties]
+class Security {
+
+ /**
+ * This is the list of template directories that are considered secure.
+ * $template_dir is in this list implicitly.
+ *
+ * @var array
+ */
+ public $secure_dir = [];
+
+ /**
+ * List of regular expressions (PCRE) that include trusted URIs
+ *
+ * @var array
+ */
+ public $trusted_uri = [];
+
+ /**
+ * List of trusted constants names
+ *
+ * @var array
+ */
+ public $trusted_constants = [];
+
+ /**
+ * 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 = [];
+
+ /**
+ * 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 = [];
+
+ /**
+ * 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 = [];
+
+ /**
+ * This is an array of allowed tags.
+ * If empty no restriction by allowed_tags.
+ *
+ * @var array
+ */
+ public $allowed_tags = [];
+
+ /**
+ * This is an array of disabled tags.
+ * If empty no restriction by disabled_tags.
+ *
+ * @var array
+ */
+ public $disabled_tags = [];
+
+ /**
+ * This is an array of allowed modifier plugins.
+ * If empty no restriction by allowed_modifiers.
+ *
+ * @var array
+ */
+ public $allowed_modifiers = [];
+
+ /**
+ * This is an array of disabled modifier plugins.
+ * If empty no restriction by disabled_modifiers.
+ *
+ * @var array
+ */
+ public $disabled_modifiers = [];
+
+ /**
+ * This is an array of disabled special $smarty variables.
+ *
+ * @var array
+ */
+ public $disabled_special_smarty_vars = [];
+
+ /**
+ * This is an array of trusted streams.
+ * If empty all streams are allowed.
+ * To disable all streams set $streams = null.
+ *
+ * @var array
+ */
+ public $streams = ['file'];
+
+ /**
+ * + flag if constants can be accessed from template
+ *
+ * @var boolean
+ */
+ public $allow_constants = true;
+
+ /**
+ * + flag if super globals can be accessed from template
+ *
+ * @var boolean
+ */
+ public $allow_super_globals = true;
+
+ /**
+ * max template nesting level
+ *
+ * @var int
+ */
+ public $max_template_nesting = 0;
+
+ /**
+ * current template nesting level
+ *
+ * @var int
+ */
+ private $_current_template_nesting = 0;
+
+ /**
+ * Cache for $resource_dir lookup
+ *
+ * @var array
+ */
+ protected $_resource_dir = [];
+
+ /**
+ * Cache for $template_dir lookup
+ *
+ * @var array
+ */
+ protected $_template_dir = [];
+
+ /**
+ * Cache for $config_dir lookup
+ *
+ * @var array
+ */
+ protected $_config_dir = [];
+
+ /**
+ * Cache for $secure_dir lookup
+ *
+ * @var array
+ */
+ protected $_secure_dir = [];
+
+ /**
+ * @param Smarty $smarty
+ */
+ public function __construct(Smarty $smarty) {
+ $this->smarty = $smarty;
+ }
+
+ /**
+ * Check if static class is trusted.
+ *
+ * @param string $class_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if class is trusted
+ */
+ public function isTrustedStaticClass($class_name, $compiler) {
+ if (isset($this->static_classes)
+ && (empty($this->static_classes) || in_array($class_name, $this->static_classes))
+ ) {
+ return true;
+ }
+ $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting");
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if static class method/property is trusted.
+ *
+ * @param string $class_name
+ * @param string $params
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if class method is trusted
+ */
+ 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 tag is trusted.
+ *
+ * @param string $tag_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
+ */
+ public function isTrustedTag($tag_name, $compiler) {
+ $tag_name = strtolower($tag_name);
+
+ // check for internal always required tags
+ if (in_array($tag_name, ['assign', 'call'])) {
+ return true;
+ }
+ // check security settings
+ if (empty($this->allowed_tags)) {
+ if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", null, true);
+ }
+ } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", null, true);
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if special $smarty variable is trusted.
+ *
+ * @param string $var_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
+ */
+ public function isTrustedSpecialSmartyVar($var_name, $compiler) {
+ if (!in_array($var_name, $this->disabled_special_smarty_vars)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error(
+ "special variable '\$smarty.{$var_name}' not allowed by security setting",
+ null,
+ true
+ );
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if modifier plugin is trusted.
+ *
+ * @param string $modifier_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
+ */
+ public function isTrustedModifier($modifier_name, $compiler) {
+ // check for internal always allowed modifier
+ if (in_array($modifier_name, ['default'])) {
+ return true;
+ }
+ // check security settings
+ if (empty($this->allowed_modifiers)) {
+ if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error(
+ "modifier '{$modifier_name}' disabled by security setting",
+ null,
+ true
+ );
+ }
+ } elseif (in_array($modifier_name, $this->allowed_modifiers)
+ && !in_array($modifier_name, $this->disabled_modifiers)
+ ) {
+ return true;
+ } else {
+ $compiler->trigger_template_error(
+ "modifier '{$modifier_name}' not allowed by security setting",
+ null,
+ true
+ );
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if constants are enabled or trusted
+ *
+ * @param string $const constant name
+ * @param object $compiler compiler object
+ *
+ * @return bool
+ */
+ public function isTrustedConstant($const, $compiler) {
+ if (in_array($const, ['true', 'false', 'null'])) {
+ return true;
+ }
+ if (!empty($this->trusted_constants)) {
+ if (!in_array(strtolower($const), $this->trusted_constants)) {
+ $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted");
+ return false;
+ }
+ return true;
+ }
+ if ($this->allow_constants) {
+ return true;
+ }
+ $compiler->trigger_template_error("Security: access to constants not permitted");
+ return false;
+ }
+
+ /**
+ * Check if stream is trusted.
+ *
+ * @param string $stream_name
+ *
+ * @return boolean true if stream is trusted
+ * @throws Exception if stream is not trusted
+ */
+ public function isTrustedStream($stream_name) {
+ if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) {
+ return true;
+ }
+ throw new Exception("stream '{$stream_name}' not allowed by security setting");
+ }
+
+ /**
+ * Check if directory of file resource is trusted.
+ *
+ * @param string $filepath
+ * @param null|bool $isConfig
+ *
+ * @return bool true if directory is trusted
+ * @throws \Smarty\Exception if directory is not trusted
+ */
+ public function isTrustedResourceDir($filepath, $isConfig = null) {
+ $_dir = $this->smarty->getTemplateDir();
+ if ($this->_template_dir !== $_dir) {
+ $this->_updateResourceDir($this->_template_dir, $_dir);
+ $this->_template_dir = $_dir;
+ }
+ $_dir = $this->smarty->getConfigDir();
+ if ($this->_config_dir !== $_dir) {
+ $this->_updateResourceDir($this->_config_dir, $_dir);
+ $this->_config_dir = $_dir;
+ }
+ if ($this->_secure_dir !== $this->secure_dir) {
+ $this->secure_dir = (array)$this->secure_dir;
+ foreach ($this->secure_dir as $k => $d) {
+ $this->secure_dir[$k] = $this->smarty->_realpath($d . DIRECTORY_SEPARATOR, true);
+ }
+ $this->_updateResourceDir($this->_secure_dir, $this->secure_dir);
+ $this->_secure_dir = $this->secure_dir;
+ }
+ $addPath = $this->_checkDir($filepath, $this->_resource_dir);
+ if ($addPath !== false) {
+ $this->_resource_dir = array_merge($this->_resource_dir, $addPath);
+ }
+ return true;
+ }
+
+ /**
+ * Check if URI (e.g. {fetch} or {html_image}) is trusted
+ * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}".
+ * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string"
+ * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}.
+ *
+ * @param string $uri
+ *
+ * @return boolean true if URI is trusted
+ * @throws Exception if URI is not trusted
+ * @uses $trusted_uri for list of patterns to match against $uri
+ */
+ public function isTrustedUri($uri) {
+ $_uri = parse_url($uri);
+ if (!empty($_uri['scheme']) && !empty($_uri['host'])) {
+ $_uri = $_uri['scheme'] . '://' . $_uri['host'];
+ foreach ($this->trusted_uri as $pattern) {
+ if (preg_match($pattern, $_uri)) {
+ return true;
+ }
+ }
+ }
+ throw new Exception("URI '{$uri}' not allowed by security setting");
+ }
+
+ /**
+ * Remove old directories and its sub folders, add new directories
+ *
+ * @param array $oldDir
+ * @param array $newDir
+ */
+ private function _updateResourceDir($oldDir, $newDir) {
+ foreach ($oldDir as $directory) {
+ // $directory = $this->smarty->_realpath($directory, true);
+ $length = strlen($directory);
+ foreach ($this->_resource_dir as $dir) {
+ if (substr($dir, 0, $length) === $directory) {
+ unset($this->_resource_dir[$dir]);
+ }
+ }
+ }
+ foreach ($newDir as $directory) {
+ // $directory = $this->smarty->_realpath($directory, true);
+ $this->_resource_dir[$directory] = true;
+ }
+ }
+
+ /**
+ * Check if file is inside a valid directory
+ *
+ * @param string $filepath
+ * @param array $dirs valid directories
+ *
+ * @return array|bool
+ * @throws \Smarty\Exception
+ */
+ private function _checkDir($filepath, $dirs) {
+ $directory = dirname($this->smarty->_realpath($filepath, true)) . DIRECTORY_SEPARATOR;
+ $_directory = [];
+ if (!preg_match('#[\\\\/][.][.][\\\\/]#', $directory)) {
+ while (true) {
+ // test if the directory is trusted
+ if (isset($dirs[$directory])) {
+ return $_directory;
+ }
+ // abort if we've reached root
+ if (!preg_match('#[\\\\/][^\\\\/]+[\\\\/]$#', $directory)) {
+ // give up
+ break;
+ }
+ // remember the directory to add it to _resource_dir in case we're successful
+ $_directory[$directory] = true;
+ // bubble up one level
+ $directory = preg_replace('#[\\\\/][^\\\\/]+[\\\\/]$#', DIRECTORY_SEPARATOR, $directory);
+ }
+ }
+ // give up
+ throw new Exception(sprintf('Smarty Security: not trusted file path \'%s\' ', $filepath));
+ }
+
+ /**
+ * Loads security class and enables security
+ *
+ * @param \Smarty $smarty
+ * @param string|Security $security_class if a string is used, it must be class-name
+ *
+ * @return \Smarty current Smarty instance for chaining
+ * @throws \Smarty\Exception when an invalid class name is provided
+ */
+ public static function enableSecurity(Smarty $smarty, $security_class) {
+ if ($security_class instanceof Security) {
+ $smarty->security_policy = $security_class;
+ return $smarty;
+ } elseif (is_object($security_class)) {
+ throw new Exception("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 Exception("Security class '$security_class' is not defined");
+ } elseif ($security_class !== Security::class && !is_subclass_of($security_class, Security::class)) {
+ throw new Exception("Class '$security_class' must extend " . Security::class . ".");
+ } else {
+ $smarty->security_policy = new $security_class($smarty);
+ }
+ return $smarty;
+ }
+
+ /**
+ * Start template processing
+ *
+ * @param $template
+ *
+ * @throws Exception
+ */
+ public function startTemplate($template) {
+ if ($this->max_template_nesting > 0 && $this->_current_template_nesting++ >= $this->max_template_nesting) {
+ throw new Exception("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'");
+ }
+ }
+
+ /**
+ * Exit template processing
+ */
+ public function endTemplate() {
+ if ($this->max_template_nesting > 0) {
+ $this->_current_template_nesting--;
+ }
+ }
+
+ /**
+ * Register callback functions call at start/end of template rendering
+ *
+ * @param \Smarty\Template $template
+ */
+ public function registerCallBacks(Template $template) {
+ $template->startRenderCallbacks[] = [$this, 'startTemplate'];
+ $template->endRenderCallbacks[] = [$this, 'endTemplate'];
+ }
+}
diff --git a/vendor/smarty/smarty/src/Smarty.php b/vendor/smarty/smarty/src/Smarty.php
new file mode 100644
index 000000000..15baba8f3
--- /dev/null
+++ b/vendor/smarty/smarty/src/Smarty.php
@@ -0,0 +1,2239 @@
+<?php
+
+namespace Smarty;
+
+use FilesystemIterator;
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use Smarty\Cacheresource\File;
+use Smarty\Extension\Base;
+use Smarty\Extension\BCPluginsAdapter;
+use Smarty\Extension\CallbackWrapper;
+use Smarty\Extension\CoreExtension;
+use Smarty\Extension\DefaultExtension;
+use Smarty\Extension\ExtensionInterface;
+use Smarty\Filter\Output\TrimWhitespace;
+use Smarty\Runtime\CaptureRuntime;
+use Smarty\Runtime\DefaultPluginHandlerRuntime;
+use Smarty\Runtime\ForeachRuntime;
+use Smarty\Runtime\InheritanceRuntime;
+use Smarty\Runtime\TplFunctionRuntime;
+
+
+/**
+ * Project: Smarty: the PHP compiling template engine
+ *
+ * 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 3.0 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
+ *
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews <uwe dot tews at gmail dot com>
+ * @author Rodney Rehm
+ * @author Simon Wisselink
+ */
+
+/**
+ * This is the main Smarty class
+ */
+class Smarty extends \Smarty\TemplateBase {
+
+ /**
+ * smarty version
+ */
+ const SMARTY_VERSION = '5.4.3';
+
+ /**
+ * 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;
+ /**
+ * 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';
+
+ /**
+ * The character set to adhere to (defaults to "UTF-8")
+ */
+ public static $_CHARSET = 'UTF-8';
+
+ /**
+ * The date format to be used internally
+ * (accepts date() and strftime())
+ */
+ public static $_DATE_FORMAT = '%b %e, %Y';
+
+ /**
+ * Flag denoting if PCRE should run in UTF-8 mode
+ */
+ public static $_UTF8_MODIFIER = 'u';
+
+ /**
+ * Flag denoting if operating system is windows
+ */
+ public static $_IS_WINDOWS = false;
+
+ /**
+ * auto literal on delimiters with whitespace
+ *
+ * @var boolean
+ */
+ public $auto_literal = true;
+
+ /**
+ * display error on not assigned variables
+ *
+ * @var boolean
+ */
+ public $error_unassigned = false;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_templateDirNormalized = false;
+
+ /**
+ * joined template directory string used in cache keys
+ *
+ * @var string
+ */
+ public $_joined_template_dir = null;
+
+ /**
+ * flag if config_dir is normalized
+ *
+ * @var bool
+ */
+ public $_configDirNormalized = false;
+
+ /**
+ * joined config directory string used in cache keys
+ *
+ * @var string
+ */
+ 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
+ */
+ private $default_plugin_handler_func = null;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_compileDirNormalized = false;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_cacheDirNormalized = false;
+
+ /**
+ * force template compiling?
+ *
+ * @var boolean
+ */
+ public $force_compile = false;
+
+ /**
+ * use sub dirs for compiled/cached files?
+ *
+ * @var boolean
+ */
+ public $use_sub_dirs = false;
+
+ /**
+ * merge compiled includes
+ *
+ * @var boolean
+ */
+ public $merge_compiled_includes = false;
+
+ /**
+ * force cache file creation
+ *
+ * @var boolean
+ */
+ public $force_cache = false;
+
+ /**
+ * template left-delimiter
+ *
+ * @var string
+ */
+ private $left_delimiter = "{";
+
+ /**
+ * template right-delimiter
+ *
+ * @var string
+ */
+ private $right_delimiter = "}";
+
+ /**
+ * array of strings which shall be treated as literal by compiler
+ *
+ * @var array string
+ */
+ public $literals = [];
+
+ /**
+ * class name
+ * This should be instance of \Smarty\Security.
+ *
+ * @var string
+ * @see \Smarty\Security
+ */
+ public $security_class = \Smarty\Security::class;
+
+ /**
+ * implementation of security class
+ *
+ * @var \Smarty\Security
+ */
+ public $security_policy = null;
+
+ /**
+ * debug mode
+ * Setting this to true enables the debug-console. Setting it to 2 enables individual Debug Console window by
+ * template name.
+ *
+ * @var boolean|int
+ */
+ 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 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;
+
+ /**
+ * 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;
+
+ /**
+ * locking concurrent compiles
+ *
+ * @var boolean
+ */
+ public $compile_locking = true;
+
+ /**
+ * 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;
+
+ /**
+ * resource type used if none given
+ * Must be a valid key of $registered_resources.
+ *
+ * @var string
+ */
+ public $default_resource_type = 'file';
+
+ /**
+ * cache resource
+ * Must be a subclass of \Smarty\Cacheresource\Base
+ *
+ * @var \Smarty\Cacheresource\Base
+ */
+ private $cacheResource;
+
+ /**
+ * config type
+ *
+ * @var string
+ */
+ public $default_config_type = 'file';
+
+ /**
+ * check If-Modified-Since headers
+ *
+ * @var boolean
+ */
+ public $cache_modified_check = false;
+
+ /**
+ * registered plugins
+ *
+ * @var array
+ */
+ public $registered_plugins = [];
+
+ /**
+ * registered objects
+ *
+ * @var array
+ */
+ public $registered_objects = [];
+
+ /**
+ * registered classes
+ *
+ * @var array
+ */
+ public $registered_classes = [];
+
+ /**
+ * registered resources
+ *
+ * @var array
+ */
+ public $registered_resources = [];
+
+ /**
+ * registered cache resources
+ *
+ * @var array
+ * @deprecated since 5.0
+ */
+ private $registered_cache_resources = [];
+
+ /**
+ * default modifier
+ *
+ * @var array
+ */
+ public $default_modifiers = [];
+
+ /**
+ * autoescape variable output
+ *
+ * @var boolean
+ */
+ public $escape_html = false;
+
+ /**
+ * start time for execution time calculation
+ *
+ * @var int
+ */
+ public $start_time = 0;
+
+ /**
+ * internal flag to enable parser debugging
+ *
+ * @var bool
+ */
+ public $_parserdebug = false;
+
+ /**
+ * Debug object
+ *
+ * @var \Smarty\Debug
+ */
+ public $_debug = null;
+
+ /**
+ * template directory
+ *
+ * @var array
+ */
+ protected $template_dir = ['./templates/'];
+
+ /**
+ * flags for normalized template directory entries
+ *
+ * @var array
+ */
+ protected $_processedTemplateDir = [];
+
+ /**
+ * config directory
+ *
+ * @var array
+ */
+ protected $config_dir = ['./configs/'];
+
+ /**
+ * flags for normalized template directory entries
+ *
+ * @var array
+ */
+ protected $_processedConfigDir = [];
+
+ /**
+ * compile directory
+ *
+ * @var string
+ */
+ protected $compile_dir = './templates_c/';
+
+ /**
+ * cache directory
+ *
+ * @var string
+ */
+ protected $cache_dir = './cache/';
+
+ /**
+ * PHP7 Compatibility mode
+ *
+ * @var bool
+ */
+ private $isMutingUndefinedOrNullWarnings = false;
+
+ /**
+ * Cache of loaded resource handlers.
+ *
+ * @var array
+ */
+ public $_resource_handlers = [];
+
+ /**
+ * Cache of loaded cacheresource handlers.
+ *
+ * @var array
+ */
+ public $_cacheresource_handlers = [];
+
+ /**
+ * List of extensions
+ *
+ * @var ExtensionInterface[]
+ */
+ private $extensions = [];
+ /**
+ * @var BCPluginsAdapter
+ */
+ private $BCPluginsAdapter;
+
+ /**
+ * Initialize new Smarty object
+ */
+ public function __construct() {
+
+ $this->start_time = microtime(true);
+ // Check if we're running on Windows
+ \Smarty\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\Smarty::$_CHARSET !== 'UTF-8') {
+ \Smarty\Smarty::$_UTF8_MODIFIER = '';
+ }
+
+ $this->BCPluginsAdapter = new BCPluginsAdapter($this);
+
+ $this->extensions[] = new CoreExtension();
+ $this->extensions[] = new DefaultExtension();
+ $this->extensions[] = $this->BCPluginsAdapter;
+
+ $this->cacheResource = new File();
+ }
+
+ /**
+ * Load an additional extension.
+ *
+ * @return void
+ */
+ public function addExtension(ExtensionInterface $extension) {
+ $this->extensions[] = $extension;
+ }
+
+ /**
+ * Returns all loaded extensions
+ *
+ * @return array|ExtensionInterface[]
+ */
+ public function getExtensions(): array {
+ return $this->extensions;
+ }
+
+ /**
+ * Replace the entire list extensions, allowing you to determine the exact order of the extensions.
+ *
+ * @param ExtensionInterface[] $extensions
+ *
+ * @return void
+ */
+ public function setExtensions(array $extensions): void {
+ $this->extensions = $extensions;
+ }
+
+ /**
+ * Check if a template resource exists
+ *
+ * @param string $resource_name template name
+ *
+ * @return bool status
+ * @throws \Smarty\Exception
+ */
+ public function templateExists($resource_name) {
+ // create source object
+ $source = Template\Source::load(null, $this, $resource_name);
+ return $source->exists;
+ }
+
+ /**
+ * Loads security class and enables security
+ *
+ * @param string|\Smarty\Security $security_class if a string is used, it must be class-name
+ *
+ * @return static current Smarty instance for chaining
+ * @throws \Smarty\Exception
+ */
+ public function enableSecurity($security_class = null) {
+ \Smarty\Security::enableSecurity($this, $security_class);
+ return $this;
+ }
+
+ /**
+ * Disable security
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function disableSecurity() {
+ $this->security_policy = null;
+ 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
+ * @param bool $isConfig true for config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function addTemplateDir($template_dir, $key = null, $isConfig = false) {
+ if ($isConfig) {
+ $processed = &$this->_processedConfigDir;
+ $dir = &$this->config_dir;
+ $this->_configDirNormalized = false;
+ } else {
+ $processed = &$this->_processedTemplateDir;
+ $dir = &$this->template_dir;
+ $this->_templateDirNormalized = false;
+ }
+ if (is_array($template_dir)) {
+ foreach ($template_dir as $k => $v) {
+ if (is_int($k)) {
+ // indexes are not merged but appended
+ $dir[] = $v;
+ } else {
+ // string indexes are overridden
+ $dir[$k] = $v;
+ unset($processed[$key]);
+ }
+ }
+ } else {
+ if ($key !== null) {
+ // override directory at specified index
+ $dir[$key] = $template_dir;
+ unset($processed[$key]);
+ } else {
+ // append new directory
+ $dir[] = $template_dir;
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Get template directories
+ *
+ * @param mixed $index index of directory to get, null to get all
+ * @param bool $isConfig true for config_dir
+ *
+ * @return array|string list of template directories, or directory of $index
+ */
+ public function getTemplateDir($index = null, $isConfig = false) {
+ if ($isConfig) {
+ $dir = &$this->config_dir;
+ } else {
+ $dir = &$this->template_dir;
+ }
+ if ($isConfig ? !$this->_configDirNormalized : !$this->_templateDirNormalized) {
+ $this->_normalizeTemplateConfig($isConfig);
+ }
+ if ($index !== null) {
+ return isset($dir[$index]) ? $dir[$index] : null;
+ }
+ return $dir;
+ }
+
+ /**
+ * Set template directory
+ *
+ * @param string|array $template_dir directory(s) of template sources
+ * @param bool $isConfig true for config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setTemplateDir($template_dir, $isConfig = false) {
+ if ($isConfig) {
+ $this->config_dir = [];
+ $this->_processedConfigDir = [];
+ } else {
+ $this->template_dir = [];
+ $this->_processedTemplateDir = [];
+ }
+ $this->addTemplateDir($template_dir, null, $isConfig);
+ return $this;
+ }
+
+ /**
+ * Adds a template directory before any existing directoires
+ *
+ * @param string $new_template_dir directory of template sources
+ * @param bool $is_config true for config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function prependTemplateDir($new_template_dir, $is_config = false) {
+ $current_template_dirs = $is_config ? $this->config_dir : $this->template_dir;
+ array_unshift($current_template_dirs, $new_template_dir);
+ $this->setTemplateDir($current_template_dirs, $is_config);
+ return $this;
+ }
+
+ /**
+ * Add config directory(s)
+ *
+ * @param string|array $config_dir directory(s) of config sources
+ * @param mixed $key key of the array element to assign the config dir to
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function addConfigDir($config_dir, $key = null) {
+ return $this->addTemplateDir($config_dir, $key, true);
+ }
+
+ /**
+ * Get config directory
+ *
+ * @param mixed $index index of directory to get, null to get all
+ *
+ * @return array configuration directory
+ */
+ public function getConfigDir($index = null) {
+ return $this->getTemplateDir($index, true);
+ }
+
+ /**
+ * Set config directory
+ *
+ * @param $config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setConfigDir($config_dir) {
+ return $this->setTemplateDir($config_dir, true);
+ }
+
+ /**
+ * Registers plugin to be used in templates
+ *
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ * @param callable $callback PHP callback to register
+ * @param bool $cacheable if true (default) this function is cache able
+ *
+ * @return $this
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::registerPlugin()
+ */
+ public function registerPlugin($type, $name, $callback, $cacheable = true) {
+ if (isset($this->registered_plugins[$type][$name])) {
+ throw new Exception("Plugin tag '{$name}' already registered");
+ } elseif (!is_callable($callback) && !class_exists($callback)) {
+ throw new Exception("Plugin '{$name}' not callable");
+ } else {
+ $this->registered_plugins[$type][$name] = [$callback, (bool)$cacheable];
+ }
+ return $this;
+ }
+
+ /**
+ * Returns plugin previously registered using ::registerPlugin as a numerical array as follows or null if not found:
+ * [
+ * 0 => the callback
+ * 1 => (bool) $cacheable
+ * 2 => (array) $cache_attr
+ * ]
+ *
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ *
+ * @return array|null
+ *
+ * @api Smarty::unregisterPlugin()
+ */
+ public function getRegisteredPlugin($type, $name): ?array {
+ if (isset($this->registered_plugins[$type][$name])) {
+ return $this->registered_plugins[$type][$name];
+ }
+ return null;
+ }
+
+ /**
+ * Unregisters plugin previously registered using ::registerPlugin
+ *
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ *
+ * @return $this
+ *
+ * @api Smarty::unregisterPlugin()
+ */
+ public function unregisterPlugin($type, $name) {
+ if (isset($this->registered_plugins[$type][$name])) {
+ unset($this->registered_plugins[$type][$name]);
+ }
+ return $this;
+ }
+
+ /**
+ * Adds directory of plugin files
+ *
+ * @param null|array|string $plugins_dir
+ *
+ * @return static current Smarty instance for chaining
+ * @deprecated since 5.0
+ */
+ public function addPluginsDir($plugins_dir) {
+ trigger_error('Using Smarty::addPluginsDir() to load plugins is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::addExtension() to add an extension or Smarty::registerPlugin to ' .
+ 'quickly register a plugin using a callback function.', E_USER_DEPRECATED);
+
+ foreach ((array)$plugins_dir as $v) {
+ $path = $this->_realpath(rtrim($v ?? '', '/\\') . DIRECTORY_SEPARATOR, true);
+ $this->BCPluginsAdapter->loadPluginsFromDir($path);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get plugin directories
+ *
+ * @return array list of plugin directories
+ * @deprecated since 5.0
+ */
+ public function getPluginsDir() {
+ trigger_error('Using Smarty::getPluginsDir() is deprecated and will be ' .
+ 'removed in a future release. It will always return an empty array.', E_USER_DEPRECATED);
+ return [];
+ }
+
+ /**
+ * Set plugins directory
+ *
+ * @param string|array $plugins_dir directory(s) of plugins
+ *
+ * @return static current Smarty instance for chaining
+ * @deprecated since 5.0
+ */
+ public function setPluginsDir($plugins_dir) {
+ trigger_error('Using Smarty::getPluginsDir() is deprecated and will be ' .
+ 'removed in a future release. For now, it will remove the DefaultExtension from the extensions list and ' .
+ 'proceed to call Smartyy::addPluginsDir..', E_USER_DEPRECATED);
+
+ $this->extensions = array_filter(
+ $this->extensions,
+ function ($extension) {
+ return !($extension instanceof DefaultExtension);
+ }
+ );
+
+ return $this->addPluginsDir($plugins_dir);
+ }
+
+ /**
+ * Registers a default plugin handler
+ *
+ * @param callable $callback class/method name
+ *
+ * @return $this
+ * @throws Exception if $callback is not callable
+ *
+ * @api Smarty::registerDefaultPluginHandler()
+ *
+ * @deprecated since 5.0
+ */
+ public function registerDefaultPluginHandler($callback) {
+
+ trigger_error('Using Smarty::registerDefaultPluginHandler() is deprecated and will be ' .
+ 'removed in a future release. Please rewrite your plugin handler as an extension.',
+ E_USER_DEPRECATED);
+
+ if (is_callable($callback)) {
+ $this->default_plugin_handler_func = $callback;
+ } else {
+ throw new Exception("Default plugin handler '$callback' not callable");
+ }
+ return $this;
+ }
+
+ /**
+ * Get compiled directory
+ *
+ * @return string path to compiled templates
+ */
+ public function getCompileDir() {
+ if (!$this->_compileDirNormalized) {
+ $this->_normalizeDir('compile_dir', $this->compile_dir);
+ $this->_compileDirNormalized = true;
+ }
+ return $this->compile_dir;
+ }
+
+ /**
+ *
+ * @param string $compile_dir directory to store compiled templates in
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setCompileDir($compile_dir) {
+ $this->_normalizeDir('compile_dir', $compile_dir);
+ $this->_compileDirNormalized = true;
+ return $this;
+ }
+
+ /**
+ * Get cache directory
+ *
+ * @return string path of cache directory
+ */
+ public function getCacheDir() {
+ if (!$this->_cacheDirNormalized) {
+ $this->_normalizeDir('cache_dir', $this->cache_dir);
+ $this->_cacheDirNormalized = true;
+ }
+ return $this->cache_dir;
+ }
+
+ /**
+ * Set cache directory
+ *
+ * @param string $cache_dir directory to store cached templates in
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setCacheDir($cache_dir) {
+ $this->_normalizeDir('cache_dir', $cache_dir);
+ $this->_cacheDirNormalized = true;
+ return $this;
+ }
+
+ private $templates = [];
+
+ /**
+ * Creates a template object
+ *
+ * @param string $template_name
+ * @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 null $parent next higher level of Smarty variables
+ *
+ * @return Template template object
+ * @throws Exception
+ */
+ public function createTemplate($template_name, $cache_id = null, $compile_id = null, $parent = null): Template {
+
+ $data = [];
+
+ // Shuffle params for backward compatibility: if 2nd param is an object, it's the parent
+ if (is_object($cache_id)) {
+ $parent = $cache_id;
+ $cache_id = null;
+ }
+
+ // Shuffle params for backward compatibility: if 2nd param is an array, it's data
+ if (is_array($cache_id)) {
+ $data = $cache_id;
+ $cache_id = null;
+ }
+
+ return $this->doCreateTemplate($template_name, $cache_id, $compile_id, $parent, null, null, false, $data);
+ }
+
+ /**
+ * Get unique template id
+ *
+ * @param string $resource_name
+ * @param null|mixed $cache_id
+ * @param null|mixed $compile_id
+ * @param null $caching
+ *
+ * @return string
+ */
+ private function generateUniqueTemplateId(
+ $resource_name,
+ $cache_id = null,
+ $compile_id = null,
+ $caching = null
+ ): string {
+ // defaults for optional params
+ $cache_id = $cache_id ?? $this->cache_id;
+ $compile_id = $compile_id ?? $this->compile_id;
+ $caching = (int)$caching ?? $this->caching;
+
+ // Add default resource type to resource name if it is missing
+ if (strpos($resource_name, ':') === false) {
+ $resource_name = "{$this->default_resource_type}:{$resource_name}";
+ }
+
+ $_templateId = $resource_name . '#' . $cache_id . '#' . $compile_id . '#' . $caching;
+
+ // hash very long IDs to prevent problems with filename length
+ // do not hash shorter IDs, so they remain recognizable
+ if (strlen($_templateId) > 150) {
+ $_templateId = sha1($_templateId);
+ }
+
+ return $_templateId;
+ }
+
+ /**
+ * Normalize path
+ * - remove /./ and /../
+ * - make it absolute if required
+ *
+ * @param string $path file path
+ * @param bool $realpath if true - convert to absolute
+ * false - convert to relative
+ * null - keep as it is but
+ * remove /./ /../
+ *
+ * @return string
+ */
+ public function _realpath($path, $realpath = null) {
+ $nds = ['/' => '\\', '\\' => '/'];
+ preg_match(
+ '%^(?<root>(?:[[:alpha:]]:[\\\\/]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?<path>(.*))$%u',
+ $path,
+ $parts
+ );
+ $path = $parts['path'];
+ if ($parts['root'] === '\\') {
+ $parts['root'] = substr(getcwd(), 0, 2) . $parts['root'];
+ } else {
+ if ($realpath !== null && !$parts['root']) {
+ $path = getcwd() . DIRECTORY_SEPARATOR . $path;
+ }
+ }
+ // normalize DIRECTORY_SEPARATOR
+ $path = str_replace($nds[DIRECTORY_SEPARATOR], DIRECTORY_SEPARATOR, $path);
+ $parts['root'] = str_replace($nds[DIRECTORY_SEPARATOR], DIRECTORY_SEPARATOR, $parts['root']);
+ do {
+ $path = preg_replace(
+ ['#[\\\\/]{2}#', '#[\\\\/][.][\\\\/]#', '#[\\\\/]([^\\\\/.]+)[\\\\/][.][.][\\\\/]#'],
+ DIRECTORY_SEPARATOR,
+ $path,
+ -1,
+ $count
+ );
+ } while ($count > 0);
+ return $realpath !== false ? $parts['root'] . $path : str_ireplace(getcwd(), '.', $parts['root'] . $path);
+ }
+
+ /**
+ * @param boolean $use_sub_dirs
+ */
+ public function setUseSubDirs($use_sub_dirs) {
+ $this->use_sub_dirs = $use_sub_dirs;
+ }
+
+ /**
+ * @param int $error_reporting
+ */
+ public function setErrorReporting($error_reporting) {
+ $this->error_reporting = $error_reporting;
+ }
+
+ /**
+ * @param boolean $escape_html
+ */
+ public function setEscapeHtml($escape_html) {
+ $this->escape_html = $escape_html;
+ }
+
+ /**
+ * Return auto_literal flag
+ *
+ * @return boolean
+ */
+ public function getAutoLiteral() {
+ return $this->auto_literal;
+ }
+
+ /**
+ * Set auto_literal flag
+ *
+ * @param boolean $auto_literal
+ */
+ public function setAutoLiteral($auto_literal = true) {
+ $this->auto_literal = $auto_literal;
+ }
+
+ /**
+ * @param boolean $force_compile
+ */
+ public function setForceCompile($force_compile) {
+ $this->force_compile = $force_compile;
+ }
+
+ /**
+ * @param boolean $merge_compiled_includes
+ */
+ public function setMergeCompiledIncludes($merge_compiled_includes) {
+ $this->merge_compiled_includes = $merge_compiled_includes;
+ }
+
+ /**
+ * Get left delimiter
+ *
+ * @return string
+ */
+ public function getLeftDelimiter() {
+ return $this->left_delimiter;
+ }
+
+ /**
+ * Set left delimiter
+ *
+ * @param string $left_delimiter
+ */
+ public function setLeftDelimiter($left_delimiter) {
+ $this->left_delimiter = $left_delimiter;
+ }
+
+ /**
+ * Get right delimiter
+ *
+ * @return string $right_delimiter
+ */
+ public function getRightDelimiter() {
+ return $this->right_delimiter;
+ }
+
+ /**
+ * Set right delimiter
+ *
+ * @param string
+ */
+ public function setRightDelimiter($right_delimiter) {
+ $this->right_delimiter = $right_delimiter;
+ }
+
+ /**
+ * @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;
+ }
+
+ /**
+ * Test install
+ *
+ * @param null $errors
+ */
+ public function testInstall(&$errors = null) {
+ \Smarty\TestInstall::testInstall($this, $errors);
+ }
+
+ /**
+ * Get Smarty object
+ *
+ * @return static
+ */
+ public function getSmarty() {
+ return $this;
+ }
+
+ /**
+ * Normalize and set directory string
+ *
+ * @param string $dirName cache_dir or compile_dir
+ * @param string $dir filepath of folder
+ */
+ private function _normalizeDir($dirName, $dir) {
+ $this->{$dirName} = $this->_realpath(rtrim($dir ?? '', "/\\") . DIRECTORY_SEPARATOR, true);
+ }
+
+ /**
+ * Normalize template_dir or config_dir
+ *
+ * @param bool $isConfig true for config_dir
+ */
+ private function _normalizeTemplateConfig($isConfig) {
+ if ($isConfig) {
+ $processed = &$this->_processedConfigDir;
+ $dir = &$this->config_dir;
+ } else {
+ $processed = &$this->_processedTemplateDir;
+ $dir = &$this->template_dir;
+ }
+ if (!is_array($dir)) {
+ $dir = (array)$dir;
+ }
+ foreach ($dir as $k => $v) {
+ if (!isset($processed[$k])) {
+ $dir[$k] = $this->_realpath(rtrim($v ?? '', "/\\") . DIRECTORY_SEPARATOR, true);
+ $processed[$k] = true;
+ }
+ }
+
+ if ($isConfig) {
+ $this->_configDirNormalized = true;
+ $this->_joined_config_dir = join('#', $this->config_dir);
+ } else {
+ $this->_templateDirNormalized = true;
+ $this->_joined_template_dir = join('#', $this->template_dir);
+ }
+
+ }
+
+ /**
+ * Mutes errors for "undefined index", "undefined array key" and "trying to read property of null".
+ *
+ * @void
+ */
+ public function muteUndefinedOrNullWarnings(): void {
+ $this->isMutingUndefinedOrNullWarnings = true;
+ }
+
+ /**
+ * Indicates if Smarty will mute errors for "undefined index", "undefined array key" and "trying to read property of null".
+ *
+ * @return bool
+ */
+ public function isMutingUndefinedOrNullWarnings(): bool {
+ return $this->isMutingUndefinedOrNullWarnings;
+ }
+
+ /**
+ * 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 int number of cache files deleted
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::clearCache()
+ */
+ public function clearCache(
+ $template_name,
+ $cache_id = null,
+ $compile_id = null,
+ $exp_time = null
+ ) {
+ return $this->getCacheResource()->clear($this, $template_name, $cache_id, $compile_id, $exp_time);
+ }
+
+ /**
+ * Empty cache folder
+ *
+ * @param integer $exp_time expiration time
+ * @param string $type resource type
+ *
+ * @return int number of cache files deleted
+ *
+ * @api Smarty::clearAllCache()
+ */
+ public function clearAllCache($exp_time = null) {
+ return $this->getCacheResource()->clearAll($this, $exp_time);
+ }
+
+ /**
+ * Delete compiled template file
+ *
+ * @param string $resource_name template name
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time
+ *
+ * @return int number of template files deleted
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::clearCompiledTemplate()
+ */
+ public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) {
+ $_compile_dir = $this->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 = $this->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
+ if (isset($resource_name)) {
+ $_save_stat = $this->caching;
+ $this->caching = \Smarty\Smarty::CACHING_OFF;
+ /* @var Template $tpl */
+ $tpl = $this->doCreateTemplate($resource_name);
+ $this->caching = $_save_stat;
+ if (!$tpl->getSource()->handler->recompiled && $tpl->getSource()->exists) {
+ $_resource_part_1 = basename(str_replace('^', DIRECTORY_SEPARATOR, $tpl->getCompiled()->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 ($this->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);
+ } catch (\UnexpectedValueException $e) {
+ // path not found / not a dir
+ return 0;
+ }
+ $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
+ foreach ($_compile as $_file) {
+ if (substr(basename($_file->getPathname()), 0, 1) === '.') {
+ continue;
+ }
+ $_filepath = (string)$_file;
+ if ($_file->isDir()) {
+ if (!$_compile->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ // delete only php files
+ if (substr($_filepath, -4) !== '.php') {
+ continue;
+ }
+ $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 (is_file($_filepath) && time() - filemtime($_filepath) >= $exp_time) {
+ $unlink = true;
+ }
+ } else {
+ $unlink = true;
+ }
+ }
+ if ($unlink && is_file($_filepath) && @unlink($_filepath)) {
+ $_count++;
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api')) < 1)
+ ) {
+ opcache_invalidate($_filepath, true);
+ } elseif (function_exists('apc_delete_file')) {
+ apc_delete_file($_filepath);
+ }
+ }
+ }
+ }
+ return $_count;
+ }
+
+ /**
+ * 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
+ * @api Smarty::compileAllTemplates()
+ *
+ */
+ public function compileAllTemplates(
+ $extension = '.tpl',
+ $force_compile = false,
+ $time_limit = 0,
+ $max_errors = null
+ ) {
+ return $this->compileAll($extension, $force_compile, $time_limit, $max_errors);
+ }
+
+ /**
+ * 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 int number of template files recompiled
+ * @api Smarty::compileAllConfig()
+ *
+ */
+ public function compileAllConfig(
+ $extension = '.conf',
+ $force_compile = false,
+ $time_limit = 0,
+ $max_errors = null
+ ) {
+ return $this->compileAll($extension, $force_compile, $time_limit, $max_errors, true);
+ }
+
+ /**
+ * Compile all template or config 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 bool $isConfig flag true if called for config files
+ *
+ * @return int number of template files compiled
+ */
+ protected function compileAll(
+ $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 ? $this->getConfigDir() : $this->getTemplateDir();
+ // loop over array of source directories
+ foreach ($sourceDir as $_dir) {
+ $_dir_1 = new RecursiveDirectoryIterator(
+ $_dir,
+ defined('FilesystemIterator::FOLLOW_SYMLINKS') ?
+ FilesystemIterator::FOLLOW_SYMLINKS : 0
+ );
+ $_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)) . DIRECTORY_SEPARATOR . $_file;
+ }
+ echo "\n", $_dir, '---', $_file;
+ flush();
+ $_start_time = microtime(true);
+ $_smarty = clone $this;
+ //
+ $_smarty->force_compile = $force_compile;
+ try {
+ $_tpl = $this->doCreateTemplate($_file);
+ $_tpl->caching = self::CACHING_OFF;
+ $_tpl->setSource(
+ $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 ------>Error: ", $e->getMessage(), "\n";
+ $_error_count++;
+ }
+ // free memory
+ unset($_tpl);
+ if ($max_errors !== null && $_error_count === $max_errors) {
+ echo "\ntoo many errors\n";
+ exit(1);
+ }
+ }
+ }
+ echo "\n";
+ return $_count;
+ }
+
+ /**
+ * check client side cache
+ *
+ * @param \Smarty\Template\Cached $cached
+ * @param Template $_template
+ * @param string $content
+ *
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ public function cacheModifiedCheck(Template\Cached $cached, Template $_template, $content) {
+ $_isCached = $_template->isCached() && !$_template->getCompiled()->getNocacheCode();
+ $_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;
+ }
+ }
+
+ public function getModifierCallback(string $modifierName) {
+ foreach ($this->getExtensions() as $extension) {
+ if ($callback = $extension->getModifierCallback($modifierName)) {
+ return [new CallbackWrapper($modifierName, $callback), 'handle'];
+ }
+ }
+ return null;
+ }
+
+ public function getFunctionHandler(string $functionName): ?\Smarty\FunctionHandler\FunctionHandlerInterface {
+ foreach ($this->getExtensions() as $extension) {
+ if ($handler = $extension->getFunctionHandler($functionName)) {
+ return $handler;
+ }
+ }
+ return null;
+ }
+
+ public function getBlockHandler(string $blockTagName): ?\Smarty\BlockHandler\BlockHandlerInterface {
+ foreach ($this->getExtensions() as $extension) {
+ if ($handler = $extension->getBlockHandler($blockTagName)) {
+ return $handler;
+ }
+ }
+ return null;
+ }
+
+ public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+ foreach ($this->getExtensions() as $extension) {
+ if ($handler = $extension->getModifierCompiler($modifier)) {
+ return $handler;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Run pre-filters over template source
+ *
+ * @param string $source the content which shall be processed by the filters
+ * @param Template $template template object
+ *
+ * @return string the filtered source
+ */
+ public function runPreFilters($source, Template $template) {
+
+ foreach ($this->getExtensions() as $extension) {
+ /** @var \Smarty\Filter\FilterInterface $filter */
+ foreach ($extension->getPreFilters() as $filter) {
+ $source = $filter->filter($source, $template);
+ }
+ }
+
+ // return filtered output
+ return $source;
+ }
+
+ /**
+ * Run post-filters over template's compiled code
+ *
+ * @param string $code the content which shall be processed by the filters
+ * @param Template $template template object
+ *
+ * @return string the filtered code
+ */
+ public function runPostFilters($code, Template $template) {
+
+ foreach ($this->getExtensions() as $extension) {
+ /** @var \Smarty\Filter\FilterInterface $filter */
+ foreach ($extension->getPostFilters() as $filter) {
+ $code = $filter->filter($code, $template);
+ }
+ }
+
+ // return filtered output
+ return $code;
+ }
+
+ /**
+ * Run filters over template output
+ *
+ * @param string $content the content which shall be processed by the filters
+ * @param Template $template template object
+ *
+ * @return string the filtered (modified) output
+ */
+ public function runOutputFilters($content, Template $template) {
+
+ foreach ($this->getExtensions() as $extension) {
+ /** @var \Smarty\Filter\FilterInterface $filter */
+ foreach ($extension->getOutputFilters() as $filter) {
+ $content = $filter->filter($content, $template);
+ }
+ }
+
+ // return filtered output
+ return $content;
+ }
+
+ /**
+ * Writes file in a safe way to disk
+ *
+ * @param string $_filepath complete filepath
+ * @param string $_contents file content
+ *
+ * @return boolean true
+ * @throws Exception
+ */
+ public function writeFile($_filepath, $_contents) {
+ $_error_reporting = error_reporting();
+ error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
+ $_dirpath = dirname($_filepath);
+ // if subdirs, create dir structure
+ if ($_dirpath !== '.') {
+ $i = 0;
+ // loop if concurrency problem occurs
+ // see https://bugs.php.net/bug.php?id=35326
+ while (!is_dir($_dirpath)) {
+ if (@mkdir($_dirpath, 0777, true)) {
+ break;
+ }
+ clearstatcache();
+ if (++$i === 3) {
+ error_reporting($_error_reporting);
+ throw new Exception("unable to create directory {$_dirpath}");
+ }
+ sleep(1);
+ }
+ }
+ // write to tmp file, then move to overt file lock race condition
+ $_tmp_file = $_dirpath . DIRECTORY_SEPARATOR . str_replace(['.', ','], '_', uniqid('wrt', true));
+ if (!file_put_contents($_tmp_file, $_contents)) {
+ error_reporting($_error_reporting);
+ throw new Exception("unable to write file {$_tmp_file}");
+ }
+ /*
+ * Windows' rename() fails if the destination exists,
+ * Linux' rename() properly handles the overwrite.
+ * 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\Smarty::$_IS_WINDOWS) {
+ // remove original file
+ if (is_file($_filepath)) {
+ @unlink($_filepath);
+ }
+ // rename tmp file
+ $success = @rename($_tmp_file, $_filepath);
+ } else {
+ // rename tmp file
+ $success = @rename($_tmp_file, $_filepath);
+ if (!$success) {
+ // remove original file
+ if (is_file($_filepath)) {
+ @unlink($_filepath);
+ }
+ // rename tmp file
+ $success = @rename($_tmp_file, $_filepath);
+ }
+ }
+ if (!$success) {
+ error_reporting($_error_reporting);
+ throw new Exception("unable to write file {$_filepath}");
+ }
+ // set file permissions
+ @chmod($_filepath, 0666 & ~umask());
+ error_reporting($_error_reporting);
+ return true;
+ }
+
+ private $runtimes = [];
+
+ /**
+ * Loads and returns a runtime extension or null if not found
+ *
+ * @param string $type
+ *
+ * @return object|null
+ */
+ public function getRuntime(string $type) {
+
+ if (isset($this->runtimes[$type])) {
+ return $this->runtimes[$type];
+ }
+
+ // Lazy load runtimes when/if needed
+ switch ($type) {
+ case 'Capture':
+ return $this->runtimes[$type] = new CaptureRuntime();
+ case 'Foreach':
+ return $this->runtimes[$type] = new ForeachRuntime();
+ case 'Inheritance':
+ return $this->runtimes[$type] = new InheritanceRuntime();
+ case 'TplFunction':
+ return $this->runtimes[$type] = new TplFunctionRuntime();
+ case 'DefaultPluginHandler':
+ return $this->runtimes[$type] = new DefaultPluginHandlerRuntime(
+ $this->getDefaultPluginHandlerFunc()
+ );
+ }
+
+ throw new \Smarty\Exception('Trying to load invalid runtime ' . $type);
+ }
+
+ /**
+ * Indicates if a runtime is available.
+ *
+ * @param string $type
+ *
+ * @return bool
+ */
+ public function hasRuntime(string $type): bool {
+ try {
+ $this->getRuntime($type);
+ return true;
+ } catch (\Smarty\Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * @return callable|null
+ */
+ public function getDefaultPluginHandlerFunc(): ?callable {
+ return $this->default_plugin_handler_func;
+ }
+
+ /**
+ * load a filter of specified type and name
+ *
+ * @param string $type filter type
+ * @param string $name filter name
+ *
+ * @return bool
+ * @throws \Smarty\Exception
+ * @api Smarty::loadFilter()
+ *
+ * @deprecated since 5.0
+ */
+ public function loadFilter($type, $name) {
+
+ if ($type == \Smarty\Smarty::FILTER_VARIABLE) {
+ foreach ($this->getExtensions() as $extension) {
+ if ($extension->getModifierCallback($name)) {
+
+ trigger_error('Using Smarty::loadFilter() to load variable filters is deprecated and will ' .
+ 'be removed in a future release. Use Smarty::addDefaultModifiers() to add a modifier.',
+ E_USER_DEPRECATED);
+
+ $this->addDefaultModifiers([$name]);
+ return true;
+ }
+ }
+ }
+
+ trigger_error('Using Smarty::loadFilter() to load filters is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::addExtension() to add an extension or Smarty::registerFilter to ' .
+ 'quickly register a filter using a callback function.', E_USER_DEPRECATED);
+
+ if ($type == \Smarty\Smarty::FILTER_OUTPUT && $name == 'trimwhitespace') {
+ $this->BCPluginsAdapter->addOutputFilter(new TrimWhitespace());
+ return true;
+ }
+
+ $_plugin = "smarty_{$type}filter_{$name}";
+ if (!is_callable($_plugin) && class_exists($_plugin, false)) {
+ $_plugin = [$_plugin, 'execute'];
+ }
+
+ if (is_callable($_plugin)) {
+ $this->registerFilter($type, $_plugin, $name);
+ return true;
+ }
+
+ throw new Exception("{$type}filter '{$name}' not found or callable");
+ }
+
+ /**
+ * load a filter of specified type and name
+ *
+ * @param string $type filter type
+ * @param string $name filter name
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ * @api Smarty::unloadFilter()
+ *
+ *
+ * @deprecated since 5.0
+ */
+ public function unloadFilter($type, $name) {
+ trigger_error('Using Smarty::unloadFilter() to unload filters is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::addExtension() to add an extension or Smarty::(un)registerFilter to ' .
+ 'quickly (un)register a filter using a callback function.', E_USER_DEPRECATED);
+
+ return $this->unregisterFilter($type, $name);
+ }
+
+ private $_caching_type = 'file';
+
+ /**
+ * @param $type
+ *
+ * @return void
+ * @deprecated since 5.0
+ */
+ public function setCachingType($type) {
+ trigger_error('Using Smarty::setCachingType() is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::setCacheResource() instead.', E_USER_DEPRECATED);
+ $this->_caching_type = $type;
+ $this->activateBCCacheResource();
+ }
+
+ /**
+ * @return string
+ * @deprecated since 5.0
+ */
+ public function getCachingType(): string {
+ trigger_error('Using Smarty::getCachingType() is deprecated and will be ' .
+ 'removed in a future release.', E_USER_DEPRECATED);
+ return $this->_caching_type;
+ }
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @param string $name name of resource type
+ * @param Base $resource_handler
+ *
+ * @return static
+ *
+ * @api Smarty::registerCacheResource()
+ *
+ * @deprecated since 5.0
+ */
+ public function registerCacheResource($name, \Smarty\Cacheresource\Base $resource_handler) {
+
+ trigger_error('Using Smarty::registerCacheResource() is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::setCacheResource() instead.', E_USER_DEPRECATED);
+
+ $this->registered_cache_resources[$name] = $resource_handler;
+ $this->activateBCCacheResource();
+ return $this;
+ }
+
+ /**
+ * Unregisters a resource to fetch a template
+ *
+ * @param $name
+ *
+ * @return static
+ * @api Smarty::unregisterCacheResource()
+ *
+ * @deprecated since 5.0
+ *
+ */
+ public function unregisterCacheResource($name) {
+
+ trigger_error('Using Smarty::unregisterCacheResource() is deprecated and will be ' .
+ 'removed in a future release.', E_USER_DEPRECATED);
+
+ if (isset($this->registered_cache_resources[$name])) {
+ unset($this->registered_cache_resources[$name]);
+ }
+ return $this;
+ }
+
+ private function activateBCCacheResource() {
+ if ($this->_caching_type == 'file') {
+ $this->setCacheResource(new File());
+ }
+ if (isset($this->registered_cache_resources[$this->_caching_type])) {
+ $this->setCacheResource($this->registered_cache_resources[$this->_caching_type]);
+ }
+ }
+
+ /**
+ * Registers a filter function
+ *
+ * @param string $type filter type
+ * @param callable $callback
+ * @param string|null $name optional filter name
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::registerFilter()
+ */
+ public function registerFilter($type, $callback, $name = null) {
+ $name = $name ?? $this->_getFilterName($callback);
+ if (!is_callable($callback)) {
+ throw new Exception("{$type}filter '{$name}' not callable");
+ }
+ switch ($type) {
+ case 'variable':
+ $this->registerPlugin(self::PLUGIN_MODIFIER, $name, $callback);
+ trigger_error('Using Smarty::registerFilter() to register variable filters is deprecated and ' .
+ 'will be removed in a future release. Use Smarty::addDefaultModifiers() to add a modifier.',
+ E_USER_DEPRECATED);
+
+ $this->addDefaultModifiers([$name]);
+ break;
+ case 'output':
+ $this->BCPluginsAdapter->addCallableAsOutputFilter($callback, $name);
+ break;
+ case 'pre':
+ $this->BCPluginsAdapter->addCallableAsPreFilter($callback, $name);
+ break;
+ case 'post':
+ $this->BCPluginsAdapter->addCallableAsPostFilter($callback, $name);
+ break;
+ default:
+ throw new Exception("Illegal filter type '{$type}'");
+ }
+
+ return $this;
+ }
+
+ /**
+ * Return internal filter name
+ *
+ * @param callback $callable
+ *
+ * @return string|null internal filter name or null if callable cannot be serialized
+ */
+ private function _getFilterName($callable) {
+ if (is_array($callable)) {
+ $_class_name = is_object($callable[0]) ? get_class($callable[0]) : $callable[0];
+ return $_class_name . '_' . $callable[1];
+ } elseif (is_string($callable)) {
+ return $callable;
+ }
+ return null;
+ }
+
+ /**
+ * Unregisters a filter function. Smarty cannot unregister closures/anonymous functions if
+ * no name was given in ::registerFilter.
+ *
+ * @param string $type filter type
+ * @param callback|string $name the name previously used in ::registerFilter
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ * @api Smarty::unregisterFilter()
+ *
+ *
+ */
+ public function unregisterFilter($type, $name) {
+
+ if (!is_string($name)) {
+ $name = $this->_getFilterName($name);
+ }
+
+ if ($name) {
+ switch ($type) {
+ case 'output':
+ $this->BCPluginsAdapter->removeOutputFilter($name);
+ break;
+ case 'pre':
+ $this->BCPluginsAdapter->removePreFilter($name);
+ break;
+ case 'post':
+ $this->BCPluginsAdapter->removePostFilter($name);
+ break;
+ default:
+ throw new Exception("Illegal filter type '{$type}'");
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add default modifiers
+ *
+ * @param array|string $modifiers modifier or list of modifiers
+ * to add
+ *
+ * @return static
+ * @api Smarty::addDefaultModifiers()
+ *
+ */
+ public function addDefaultModifiers($modifiers) {
+ if (is_array($modifiers)) {
+ $this->default_modifiers = array_merge($this->default_modifiers, $modifiers);
+ } else {
+ $this->default_modifiers[] = $modifiers;
+ }
+ return $this;
+ }
+
+ /**
+ * Get default modifiers
+ *
+ * @return array list of default modifiers
+ * @api Smarty::getDefaultModifiers()
+ *
+ */
+ public function getDefaultModifiers() {
+ return $this->default_modifiers;
+ }
+
+ /**
+ * Set default modifiers
+ *
+ * @param array|string $modifiers modifier or list of modifiers
+ * to set
+ *
+ * @return static
+ * @api Smarty::setDefaultModifiers()
+ *
+ */
+ public function setDefaultModifiers($modifiers) {
+ $this->default_modifiers = (array)$modifiers;
+ return $this;
+ }
+
+ /**
+ * @return Cacheresource\Base
+ */
+ public function getCacheResource(): Cacheresource\Base {
+ return $this->cacheResource;
+ }
+
+ /**
+ * @param Cacheresource\Base $cacheResource
+ */
+ public function setCacheResource(Cacheresource\Base $cacheResource): void {
+ $this->cacheResource = $cacheResource;
+ }
+
+ /**
+ * fetches a rendered Smarty 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
+ *
+ * @return string rendered template output
+ * @throws Exception
+ * @throws Exception
+ */
+ public function fetch($template = null, $cache_id = null, $compile_id = null) {
+ return $this->returnOrCreateTemplate($template, $cache_id, $compile_id)->fetch();
+ }
+
+ /**
+ * displays a Smarty 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
+ *
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ public function display($template = null, $cache_id = null, $compile_id = null) {
+ $this->returnOrCreateTemplate($template, $cache_id, $compile_id)->display();
+ }
+
+ /**
+ * @param $resource_name
+ * @param $cache_id
+ * @param $compile_id
+ * @param $parent
+ * @param $caching
+ * @param $cache_lifetime
+ * @param bool $isConfig
+ * @param array $data
+ *
+ * @return Template
+ * @throws Exception
+ */
+ public function doCreateTemplate(
+ $resource_name,
+ $cache_id = null,
+ $compile_id = null,
+ $parent = null,
+ $caching = null,
+ $cache_lifetime = null,
+ bool $isConfig = false,
+ array $data = []): Template {
+
+ if (!$this->_templateDirNormalized) {
+ $this->_normalizeTemplateConfig(false);
+ }
+
+ $_templateId = $this->generateUniqueTemplateId($resource_name, $cache_id, $compile_id, $caching);
+
+ if (!isset($this->templates[$_templateId])) {
+ $newTemplate = new Template($resource_name, $this, $parent ?: $this, $cache_id, $compile_id, $caching, $isConfig);
+ $newTemplate->templateId = $_templateId; // @TODO this could go in constructor ^?
+ $this->templates[$_templateId] = $newTemplate;
+ }
+
+ $tpl = clone $this->templates[$_templateId];
+
+ $tpl->setParent($parent ?: $this);
+
+ if ($cache_lifetime) {
+ $tpl->setCacheLifetime($cache_lifetime);
+ }
+
+ // fill data if present
+ foreach ($data as $_key => $_val) {
+ $tpl->assign($_key, $_val);
+ }
+
+ $tpl->tplFunctions = array_merge($parent->tplFunctions ?? [], $tpl->tplFunctions ?? []);
+
+ if (!$this->debugging && $this->debugging_ctrl === 'URL') {
+ $tpl->getSmarty()->getDebug()->debugUrl($tpl->getSmarty());
+ }
+ return $tpl;
+ }
+
+ /**
+ * test if cache is valid
+ *
+ * @param null|string|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
+ *
+ * @return bool cache status
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::isCached()
+ */
+ public function isCached($template = null, $cache_id = null, $compile_id = null) {
+ return $this->returnOrCreateTemplate($template, $cache_id, $compile_id)->isCached();
+ }
+
+ /**
+ * @param $template
+ * @param $cache_id
+ * @param $compile_id
+ * @param $parent
+ *
+ * @return Template
+ * @throws Exception
+ */
+ private function returnOrCreateTemplate($template, $cache_id = null, $compile_id = null) {
+ if (!($template instanceof Template)) {
+ $template = $this->createTemplate($template, $cache_id, $compile_id, $this);
+ $template->caching = $this->caching;
+ }
+ return $template;
+ }
+
+ /**
+ * Sets if Smarty should check If-Modified-Since headers to determine cache validity.
+ * @param bool $cache_modified_check
+ * @return void
+ */
+ public function setCacheModifiedCheck($cache_modified_check): void {
+ $this->cache_modified_check = (bool) $cache_modified_check;
+ }
+
+}
+
diff --git a/vendor/smarty/smarty/src/Template.php b/vendor/smarty/smarty/src/Template.php
new file mode 100644
index 000000000..242fb2388
--- /dev/null
+++ b/vendor/smarty/smarty/src/Template.php
@@ -0,0 +1,732 @@
+<?php
+/**
+ * Smarty Internal Plugin Template
+ * This file contains the Smarty template engine
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty;
+
+use Smarty\Resource\BasePlugin;
+use Smarty\Runtime\InheritanceRuntime;
+use Smarty\Template\Source;
+use Smarty\Template\Cached;
+use Smarty\Template\Compiled;
+use Smarty\Template\Config;
+
+/**
+ * Main class with template data structures and methods
+ */
+#[\AllowDynamicProperties]
+class Template extends TemplateBase {
+
+ /**
+ * caching mode to create nocache code but no cache file
+ */
+ public const CACHING_NOCACHE_CODE = 9999;
+
+ /**
+ * @var Compiled
+ */
+ private $compiled = null;
+
+ /**
+ * @var Cached
+ */
+ private $cached = null;
+
+ /**
+ * @var \Smarty\Compiler\Template
+ */
+ private $compiler = null;
+
+ /**
+ * Source instance
+ *
+ * @var Source|Config
+ */
+ private $source = null;
+
+ /**
+ * Template resource
+ *
+ * @var string
+ */
+ public $template_resource = null;
+
+ /**
+ * Template ID
+ *
+ * @var null|string
+ */
+ public $templateId = null;
+
+ /**
+ * Callbacks called before rendering template
+ *
+ * @var callback[]
+ */
+ public $startRenderCallbacks = [];
+
+ /**
+ * Callbacks called after rendering template
+ *
+ * @var callback[]
+ */
+ public $endRenderCallbacks = [];
+
+ /**
+ * Template left-delimiter. If null, defaults to $this->getSmarty()-getLeftDelimiter().
+ *
+ * @var string
+ */
+ private $left_delimiter = null;
+
+ /**
+ * Template right-delimiter. If null, defaults to $this->getSmarty()-getRightDelimiter().
+ *
+ * @var string
+ */
+ private $right_delimiter = null;
+
+ /**
+ * @var InheritanceRuntime|null
+ */
+ private $inheritance;
+
+ /**
+ * Create template data object
+ * Some of the global Smarty settings copied to template scope
+ * It load the required template resources and caching plugins
+ *
+ * @param string $template_resource template resource string
+ * @param Smarty $smarty Smarty instance
+ * @param \Smarty\Data|null $_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|int|null $_caching use caching?
+ * @param bool $_isConfig
+ *
+ * @throws \Smarty\Exception
+ */
+ public function __construct(
+ $template_resource,
+ Smarty $smarty,
+ ?\Smarty\Data $_parent = null,
+ $_cache_id = null,
+ $_compile_id = null,
+ $_caching = null,
+ $_isConfig = false
+ ) {
+ $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 = (int)($_caching === null ? $this->smarty->caching : $_caching);
+ $this->cache_lifetime = $this->smarty->cache_lifetime;
+ $this->compile_check = (int)$smarty->compile_check;
+ $this->parent = $_parent;
+ // Template resource
+ $this->template_resource = $template_resource;
+
+ $this->source = $_isConfig ? Config::load($this) : Source::load($this);
+ $this->compiled = Compiled::load($this);
+
+ if ($smarty->security_policy) {
+ $smarty->security_policy->registerCallBacks($this);
+ }
+ }
+
+ /**
+ * render template
+ *
+ * @param bool $no_output_filter if true do not run output filter
+ * @param null|bool $display true: display, false: fetch null: sub-template
+ *
+ * @return string
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ private function render($no_output_filter = true, $display = null) {
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->start_template($this, $display);
+ }
+ // checks if template exists
+ if ($this->compile_check && !$this->getSource()->exists) {
+ throw new Exception(
+ "Unable to load '{$this->getSource()->type}:{$this->getSource()->name}'" .
+ ($this->_isSubTpl() ? " in '{$this->parent->template_resource}'" : '')
+ );
+ }
+
+ // disable caching for evaluated code
+ if ($this->getSource()->handler->recompiled) {
+ $this->caching = \Smarty\Smarty::CACHING_OFF;
+ }
+
+ foreach ($this->startRenderCallbacks as $callback) {
+ call_user_func($callback, $this);
+ }
+
+ try {
+
+ // read from cache or render
+ if ($this->caching === \Smarty\Smarty::CACHING_LIFETIME_CURRENT || $this->caching === \Smarty\Smarty::CACHING_LIFETIME_SAVED) {
+ $this->getCached()->render($this, $no_output_filter);
+ } else {
+ $this->getCompiled()->render($this);
+ }
+
+ } finally {
+ foreach ($this->endRenderCallbacks as $callback) {
+ call_user_func($callback, $this);
+ }
+ }
+
+ // display or fetch
+ if ($display) {
+ if ($this->caching && $this->smarty->cache_modified_check) {
+ $this->smarty->cacheModifiedCheck(
+ $this->getCached(),
+ $this,
+ isset($content) ? $content : ob_get_clean()
+ );
+ } else {
+ if ((!$this->caching || $this->getCached()->getNocacheCode() || $this->getSource()->handler->recompiled)
+ && !$no_output_filter
+ ) {
+ echo $this->smarty->runOutputFilters(ob_get_clean(), $this);
+ } else {
+ echo ob_get_clean();
+ }
+ }
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->end_template($this);
+ // debug output
+ $this->smarty->getDebug()->display_debug($this, true);
+ }
+ return '';
+ } else {
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->end_template($this);
+ if ($this->smarty->debugging === 2 && $display === false) {
+ $this->smarty->getDebug()->display_debug($this, true);
+ }
+ }
+ if (
+ !$no_output_filter
+ && (!$this->caching || $this->getCached()->getNocacheCode() || $this->getSource()->handler->recompiled)
+ ) {
+
+ return $this->smarty->runOutputFilters(ob_get_clean(), $this);
+ }
+ // return cache content
+ return null;
+ }
+ }
+
+ /**
+ * Runtime function to render sub-template
+ *
+ * @param string $template_name template name
+ * @param mixed $cache_id cache id
+ * @param mixed $compile_id compile id
+ * @param integer $caching cache mode
+ * @param integer $cache_lifetime lifetime of cache data
+ * @param array $extra_vars passed parameter template variables
+ * @param int|null $scope
+ *
+ * @throws Exception
+ */
+ public function renderSubTemplate(
+ $template_name,
+ $cache_id,
+ $compile_id,
+ $caching,
+ $cache_lifetime,
+ array $extra_vars = [],
+ ?int $scope = null,
+ ?string $currentDir = null
+ ) {
+
+ $name = $this->parseResourceName($template_name);
+ if ($currentDir && preg_match('/^\.{1,2}\//', $name)) {
+ // relative template resource name, append it to current template name
+ $template_name = $currentDir . DIRECTORY_SEPARATOR . $name;
+ }
+
+ $tpl = $this->smarty->doCreateTemplate($template_name, $cache_id, $compile_id, $this, $caching, $cache_lifetime);
+
+ $tpl->inheritance = $this->getInheritance(); // re-use the same Inheritance object inside the inheritance tree
+
+ if ($scope) {
+ $tpl->defaultScope = $scope;
+ }
+
+ if ($caching) {
+ if ($tpl->templateId !== $this->templateId && $caching !== \Smarty\Template::CACHING_NOCACHE_CODE) {
+ $tpl->getCached(true);
+ } else {
+ // re-use the same Cache object across subtemplates to gather hashes and file dependencies.
+ $tpl->setCached($this->getCached());
+ }
+ }
+
+ foreach ($extra_vars as $_key => $_val) {
+ $tpl->assign($_key, $_val);
+ }
+ if ($tpl->caching === \Smarty\Template::CACHING_NOCACHE_CODE) {
+ if ($tpl->getCompiled()->getNocacheCode()) {
+ $this->getCached()->hashes[$tpl->getCompiled()->nocache_hash] = true;
+ }
+ }
+
+ $tpl->render();
+ }
+
+ /**
+ * Remove type indicator from resource name if present.
+ * E.g. $this->parseResourceName('file:template.tpl') returns 'template.tpl'
+ *
+ * @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
+ *
+ * @return string
+ */
+ private function parseResourceName($resource_name): string {
+ if (preg_match('/^([A-Za-z0-9_\-]{2,}):/', $resource_name, $match)) {
+ return substr($resource_name, strlen($match[0]));
+ }
+ return $resource_name;
+ }
+
+ /**
+ * Check if this is a sub template
+ *
+ * @return bool true is sub template
+ */
+ public function _isSubTpl() {
+ return isset($this->parent) && $this->parent instanceof Template;
+ }
+
+ public function assign($tpl_var, $value = null, $nocache = false, $scope = null) {
+ return parent::assign($tpl_var, $value, $nocache, $scope);
+ }
+
+ /**
+ * Compiles the template
+ * If the template is not evaluated the compiled template is saved on disk
+ *
+ * @TODO only used in compileAll and 1 unit test: can we move this and make compileAndWrite private?
+ *
+ * @throws \Exception
+ */
+ public function compileTemplateSource() {
+ return $this->getCompiled()->compileAndWrite($this);
+ }
+
+ /**
+ * Return cached content
+ *
+ * @return null|string
+ * @throws Exception
+ */
+ public function getCachedContent() {
+ return $this->getCached()->getContent($this);
+ }
+
+ /**
+ * Writes the content to cache resource
+ *
+ * @param string $content
+ *
+ * @return bool
+ *
+ * @TODO this method is only used in unit tests that (mostly) try to test CacheResources.
+ */
+ public function writeCachedContent($content) {
+ if ($this->getSource()->handler->recompiled || !$this->caching
+ ) {
+ // don't write cache file
+ return false;
+ }
+ $codeframe = $this->createCodeFrame($content, '', true);
+ return $this->getCached()->writeCache($this, $codeframe);
+ }
+
+ /**
+ * Get unique template id
+ *
+ * @return string
+ */
+ public function getTemplateId() {
+ return $this->templateId;
+ }
+
+ /**
+ * runtime error not matching capture tags
+ *
+ * @throws \Smarty\Exception
+ */
+ public function capture_error() {
+ throw new Exception("Not matching {capture} open/close in '{$this->template_resource}'");
+ }
+
+ /**
+ * Return Compiled object
+ *
+ * @param bool $forceNew force new compiled object
+ */
+ public function getCompiled($forceNew = false) {
+ if ($forceNew || !isset($this->compiled)) {
+ $this->compiled = Compiled::load($this);
+ }
+ return $this->compiled;
+ }
+
+ /**
+ * Return Cached object
+ *
+ * @param bool $forceNew force new cached object
+ *
+ * @throws Exception
+ */
+ public function getCached($forceNew = false): Cached {
+ if ($forceNew || !isset($this->cached)) {
+ $cacheResource = $this->smarty->getCacheResource();
+ $this->cached = new Cached(
+ $this->source,
+ $cacheResource,
+ $this->compile_id,
+ $this->cache_id
+ );
+ if ($this->isCachingEnabled()) {
+ $cacheResource->populate($this->cached, $this);
+ } else {
+ $this->cached->setValid(false);
+ }
+ }
+ return $this->cached;
+ }
+
+ private function isCachingEnabled(): bool {
+ return $this->caching && !$this->getSource()->handler->recompiled;
+ }
+
+ /**
+ * Helper function for InheritanceRuntime object
+ *
+ * @return InheritanceRuntime
+ * @throws Exception
+ */
+ public function getInheritance(): InheritanceRuntime {
+ if (is_null($this->inheritance)) {
+ $this->inheritance = clone $this->getSmarty()->getRuntime('Inheritance');
+ }
+ return $this->inheritance;
+ }
+
+ /**
+ * Sets a new InheritanceRuntime object.
+ *
+ * @param InheritanceRuntime $inheritanceRuntime
+ *
+ * @return void
+ */
+ public function setInheritance(InheritanceRuntime $inheritanceRuntime) {
+ $this->inheritance = $inheritanceRuntime;
+ }
+
+ /**
+ * Return Compiler object
+ */
+ public function getCompiler() {
+ if (!isset($this->compiler)) {
+ $this->compiler = $this->getSource()->createCompiler();
+ }
+ return $this->compiler;
+ }
+
+ /**
+ * Create code frame for compiled and cached templates
+ *
+ * @param string $content optional template content
+ * @param string $functions compiled template function and block code
+ * @param bool $cache flag for cache file
+ * @param Compiler\Template|null $compiler
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function createCodeFrame($content = '', $functions = '', $cache = false, ?\Smarty\Compiler\Template $compiler = null) {
+ return $this->getCodeFrameCompiler()->create($content, $functions, $cache, $compiler);
+ }
+
+ /**
+ * Template data object destructor
+ */
+ public function __destruct() {
+ if ($this->smarty->cache_locking && $this->getCached()->is_locked) {
+ $this->getCached()->handler->releaseLock($this->smarty, $this->getCached());
+ }
+ }
+
+ /**
+ * 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
+ *
+ * @return bool
+ * @throws \Smarty\Exception
+ */
+ public function mustCompile(): bool {
+ if (!$this->getSource()->exists) {
+ if ($this->_isSubTpl()) {
+ $parent_resource = " in '{$this->parent->template_resource}'";
+ } else {
+ $parent_resource = '';
+ }
+ throw new Exception("Unable to load {$this->getSource()->type} '{$this->getSource()->name}'{$parent_resource}");
+ }
+
+ // @TODO move this logic to Compiled
+ return $this->smarty->force_compile
+ || $this->getSource()->handler->recompiled
+ || !$this->getCompiled()->exists
+ || ($this->compile_check && $this->getCompiled()->getTimeStamp() < $this->getSource()->getTimeStamp());
+ }
+
+ private function getCodeFrameCompiler(): Compiler\CodeFrame {
+ return new \Smarty\Compiler\CodeFrame($this);
+ }
+
+ /**
+ * Get left delimiter
+ *
+ * @return string
+ */
+ public function getLeftDelimiter()
+ {
+ return $this->left_delimiter ?? $this->getSmarty()->getLeftDelimiter();
+ }
+
+ /**
+ * Set left delimiter
+ *
+ * @param string $left_delimiter
+ */
+ public function setLeftDelimiter($left_delimiter)
+ {
+ $this->left_delimiter = $left_delimiter;
+ }
+
+ /**
+ * Get right delimiter
+ *
+ * @return string $right_delimiter
+ */
+ public function getRightDelimiter()
+ {
+ return $this->right_delimiter ?? $this->getSmarty()->getRightDelimiter();;
+ }
+
+ /**
+ * Set right delimiter
+ *
+ * @param string
+ */
+ public function setRightDelimiter($right_delimiter)
+ {
+ $this->right_delimiter = $right_delimiter;
+ }
+
+ /**
+ * gets a stream variable
+ *
+ * @param string $variable the stream of the variable
+ *
+ * @return mixed
+ * @throws \Smarty\Exception
+ *
+ */
+ public function getStreamVariable($variable)
+ {
+
+ trigger_error("Using stream variables (\`\{\$foo:bar\}\`)is deprecated.", E_USER_DEPRECATED);
+
+ $_result = '';
+ $fp = fopen($variable, 'r+');
+ if ($fp) {
+ while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
+ $_result .= $current_line;
+ }
+ fclose($fp);
+ return $_result;
+ }
+ if ($this->getSmarty()->error_unassigned) {
+ throw new Exception('Undefined stream variable "' . $variable . '"');
+ }
+ return null;
+ }
+ /**
+ * @inheritdoc
+ */
+ public function configLoad($config_file, $sections = null)
+ {
+ $confObj = parent::configLoad($config_file, $sections);
+
+ $this->getCompiled()->file_dependency[ $confObj->getSource()->uid ] =
+ array($confObj->getSource()->getResourceName(), $confObj->getSource()->getTimeStamp(), $confObj->getSource()->type);
+
+ return $confObj;
+ }
+
+ public function fetch() {
+ $result = $this->_execute(0);
+ return $result === null ? ob_get_clean() : $result;
+ }
+
+ public function display() {
+ $this->_execute(1);
+ }
+
+ /**
+ * test if cache is valid
+ *
+ * @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 bool cache status
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::isCached()
+ */
+ public function isCached(): bool {
+ return (bool) $this->_execute(2);
+ }
+
+ /**
+ * fetches a rendered Smarty template
+ *
+ * @param string $function function type 0 = fetch, 1 = display, 2 = isCache
+ *
+ * @return mixed
+ * @throws Exception
+ * @throws \Throwable
+ */
+ private function _execute($function) {
+
+ $smarty = $this->getSmarty();
+
+ // make sure we have integer values
+ $this->caching = (int)$this->caching;
+ // fetch template content
+ $level = ob_get_level();
+ try {
+ $_smarty_old_error_level =
+ isset($smarty->error_reporting) ? error_reporting($smarty->error_reporting) : null;
+
+ if ($smarty->isMutingUndefinedOrNullWarnings()) {
+ $errorHandler = new \Smarty\ErrorHandler();
+ $errorHandler->activate();
+ }
+
+ if ($function === 2) {
+ if ($this->caching) {
+ // return cache status of template
+ $result = $this->getCached()->isCached($this);
+ } else {
+ return false;
+ }
+ } else {
+
+ // After rendering a template, the tpl/config variables are reset, so the template can be re-used.
+ $this->pushStack();
+
+ // Start output-buffering.
+ ob_start();
+
+ $result = $this->render(false, $function);
+
+ // Restore the template to its previous state
+ $this->popStack();
+ }
+
+ if (isset($errorHandler)) {
+ $errorHandler->deactivate();
+ }
+
+ if (isset($_smarty_old_error_level)) {
+ error_reporting($_smarty_old_error_level);
+ }
+ return $result;
+ } catch (\Throwable $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ if (isset($errorHandler)) {
+ $errorHandler->deactivate();
+ }
+
+ if (isset($_smarty_old_error_level)) {
+ error_reporting($_smarty_old_error_level);
+ }
+ throw $e;
+ }
+ }
+
+ /**
+ * @return Config|Source|null
+ */
+ public function getSource() {
+ return $this->source;
+ }
+
+ /**
+ * @param Config|Source|null $source
+ */
+ public function setSource($source): void {
+ $this->source = $source;
+ }
+
+ /**
+ * Sets the Cached object, so subtemplates can share one Cached object to gather meta-data.
+ *
+ * @param Cached $cached
+ *
+ * @return void
+ */
+ private function setCached(Cached $cached) {
+ $this->cached = $cached;
+ }
+
+ /**
+ * @param string $compile_id
+ *
+ * @throws Exception
+ */
+ public function setCompileId($compile_id) {
+ parent::setCompileId($compile_id);
+ $this->getCompiled(true);
+ if ($this->caching) {
+ $this->getCached(true);
+ }
+ }
+
+ /**
+ * @param string $cache_id
+ *
+ * @throws Exception
+ */
+ public function setCacheId($cache_id) {
+ parent::setCacheId($cache_id);
+ $this->getCached(true);
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Template/Cached.php b/vendor/smarty/smarty/src/Template/Cached.php
new file mode 100644
index 000000000..78635db06
--- /dev/null
+++ b/vendor/smarty/smarty/src/Template/Cached.php
@@ -0,0 +1,428 @@
+<?php
+
+namespace Smarty\Template;
+
+use Smarty\Exception;
+use Smarty\Template;
+use Smarty\Template\Cacheresource\Base;
+use Smarty\Template\Compiler\CodeFrame;
+
+/**
+ * Represents a cached version of a template or config file.
+ * @author Rodney Rehm
+ */
+class Cached extends GeneratedPhpFile {
+
+ /**
+ * Cache Is Valid
+ *
+ * @var boolean
+ */
+ private $valid = null;
+
+ /**
+ * @param bool|null $valid
+ */
+ public function setValid(?bool $valid): void {
+ $this->valid = $valid;
+ }
+
+ /**
+ * CacheResource Handler
+ *
+ * @var \Smarty\Cacheresource\Base
+ */
+ public $handler = null;
+
+ /**
+ * Template Cache Id (\Smarty\Template::$cache_id)
+ *
+ * @var string
+ */
+ public $cache_id = null;
+
+ /**
+ * saved cache lifetime in seconds
+ *
+ * @var int
+ */
+ 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 Source
+ */
+ public $source = null;
+
+ /**
+ * Nocache hash codes of processed compiled templates
+ *
+ * @var array
+ */
+ public $hashes = [];
+
+ /**
+ * Content buffer
+ *
+ * @var string
+ */
+ public $content = null;
+
+ /**
+ * create Cached Object container
+ *
+ * @param Source $source
+ * @param \Smarty\Cacheresource\Base $handler
+ * @param $compile_id
+ * @param $cache_id
+ */
+ public function __construct(Source $source, \Smarty\Cacheresource\Base $handler, $compile_id, $cache_id) {
+ $this->compile_id = $compile_id;
+ $this->cache_id = $cache_id;
+ $this->source = $source;
+ $this->handler = $handler;
+ }
+
+ /**
+ * Render cache template
+ *
+ * @param \Smarty\Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \Exception
+ */
+ public function render(Template $_template, $no_output_filter = true) {
+
+ if (!$this->isCached($_template)) {
+ $this->updateCache($_template, $no_output_filter);
+ } else {
+ if (!$this->processed) {
+ $this->process($_template);
+ }
+ }
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->start_cache($_template);
+ }
+
+ $this->getRenderedTemplateCode($_template, $this->unifunc);
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->end_cache($_template);
+ }
+
+ }
+
+ /**
+ * Check if cache is valid, lock cache if required
+ *
+ * @param Template $_template
+ *
+ * @return bool flag true if cache is valid
+ * @throws Exception
+ */
+ public function isCached(Template $_template) {
+ if ($this->valid !== null) {
+ return $this->valid;
+ }
+ while (true) {
+ while (true) {
+ if ($this->exists === false || $_template->getSmarty()->force_compile || $_template->getSmarty()->force_cache) {
+ $this->valid = false;
+ } else {
+ $this->valid = true;
+ }
+ if ($this->valid && $_template->caching === \Smarty\Smarty::CACHING_LIFETIME_CURRENT
+ && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)
+ ) {
+ // lifetime expired
+ $this->valid = false;
+ }
+ if ($this->valid && $_template->compile_check === \Smarty\Smarty::COMPILECHECK_ON
+ && $_template->getSource()->getTimeStamp() > $this->timestamp
+ ) {
+ $this->valid = false;
+ }
+ if ($this->valid || !$_template->getSmarty()->cache_locking) {
+ break;
+ }
+ if (!$this->handler->locked($_template->getSmarty(), $this)) {
+ $this->handler->acquireLock($_template->getSmarty(), $this);
+ break 2;
+ }
+ $this->handler->populate($this, $_template);
+ }
+ if ($this->valid) {
+ if (!$_template->getSmarty()->cache_locking || $this->handler->locked($_template->getSmarty(), $this) === null) {
+ // load cache file for the following checks
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->start_cache($_template);
+ }
+ if ($this->handler->process($_template, $this) === false) {
+ $this->valid = false;
+ } else {
+ $this->processed = true;
+ }
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->end_cache($_template);
+ }
+ } else {
+ $this->is_locked = true;
+ continue;
+ }
+ } else {
+ return $this->valid;
+ }
+ if ($this->valid && $_template->caching === \Smarty\Smarty::CACHING_LIFETIME_SAVED
+ && $_template->getCached()->cache_lifetime >= 0
+ && (time() > ($_template->getCached()->timestamp + $_template->getCached()->cache_lifetime))
+ ) {
+ $this->valid = false;
+ }
+ if ($_template->getSmarty()->cache_locking) {
+ if (!$this->valid) {
+ $this->handler->acquireLock($_template->getSmarty(), $this);
+ } elseif ($this->is_locked) {
+ $this->handler->releaseLock($_template->getSmarty(), $this);
+ }
+ }
+ return $this->valid;
+ }
+ return $this->valid;
+ }
+
+ /**
+ * Process cached template
+ *
+ * @param Template $_template template object
+ */
+ private function process(Template $_template) {
+ if ($this->handler->process($_template, $this) === false) {
+ $this->valid = false;
+ }
+ $this->processed = $this->valid;
+ }
+
+ /**
+ * Read cache content from handler
+ *
+ * @param Template $_template template object
+ *
+ * @return string|false content
+ */
+ public function readCache(Template $_template) {
+ if (!$_template->getSource()->handler->recompiled) {
+ return $this->handler->retrieveCachedContent($_template);
+ }
+ return false;
+ }
+
+ /**
+ * Write this cache object to handler
+ *
+ * @param string $content content to cache
+ *
+ * @return bool success
+ */
+ public function writeCache(Template $_template, $content) {
+ if (!$_template->getSource()->handler->recompiled) {
+ if ($this->handler->storeCachedContent($_template, $content)) {
+ $this->content = null;
+ $this->timestamp = time();
+ $this->exists = true;
+ $this->valid = true;
+ $this->cache_lifetime = $_template->cache_lifetime;
+ $this->processed = false;
+ if ($_template->getSmarty()->cache_locking) {
+ $this->handler->releaseLock($_template->getSmarty(), $this);
+ }
+ return true;
+ }
+ $this->content = null;
+ $this->timestamp = false;
+ $this->exists = false;
+ $this->valid = false;
+ $this->processed = false;
+ }
+ return false;
+ }
+
+ /**
+ * Cache was invalid , so render from compiled and write to cache
+ *
+ * @param Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \Smarty\Exception
+ */
+ private function updateCache(Template $_template, $no_output_filter) {
+
+ ob_start();
+
+ $_template->getCompiled()->render($_template);
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->start_cache($_template);
+ }
+
+ $this->removeNoCacheHash($_template, $no_output_filter);
+ $this->process($_template);
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->end_cache($_template);
+ }
+ }
+
+ /**
+ * Sanitize content and write it to cache resource
+ *
+ * @param Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \Smarty\Exception
+ */
+ private function removeNoCacheHash(Template $_template, $no_output_filter) {
+ $php_pattern = '/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/';
+ $content = ob_get_clean();
+ $hash_array = $this->hashes;
+ $hash_array[$_template->getCompiled()->nocache_hash] = true;
+ $hash_array = array_keys($hash_array);
+ $nocache_hash = '(' . implode('|', $hash_array) . ')';
+ $_template->getCached()->setNocacheCode(false);
+ // get text between non-cached items
+ $cache_split =
+ preg_split(
+ "!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
+ $content
+ );
+ // get non-cached items
+ preg_match_all(
+ "!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
+ $content,
+ $cache_parts
+ );
+ $content = '';
+ // loop over items, stitch back together
+ foreach ($cache_split as $curr_idx => $curr_split) {
+ if (preg_match($php_pattern, $curr_split)) {
+ // escape PHP tags in template content
+ $php_split = preg_split(
+ $php_pattern,
+ $curr_split
+ );
+ preg_match_all(
+ $php_pattern,
+ $curr_split,
+ $php_parts
+ );
+ foreach ($php_split as $idx_php => $curr_php) {
+ $content .= $curr_php;
+ if (isset($php_parts[0][$idx_php])) {
+ $content .= "<?php echo '{$php_parts[ 1 ][ $idx_php ]}'; ?>\n";
+ }
+ }
+ } else {
+ $content .= $curr_split;
+ }
+ if (isset($cache_parts[0][$curr_idx])) {
+ $_template->getCached()->setNocacheCode(true);
+ $content .= $cache_parts[2][$curr_idx];
+ }
+ }
+ if (
+ !$no_output_filter
+ && !$_template->getCached()->getNocacheCode()
+ ) {
+ $content = $_template->getSmarty()->runOutputFilters($content, $_template);
+ }
+
+ $codeframe = (new \Smarty\Compiler\CodeFrame($_template))->create($content, '', true);
+ $this->writeCache($_template, $codeframe);
+ }
+
+ /**
+ * @return Source|null
+ */
+ public function getSource(): ?Source {
+ return $this->source;
+ }
+
+ /**
+ * @param Source|null $source
+ */
+ public function setSource(?Source $source): void {
+ $this->source = $source;
+ }
+
+ /**
+ * Returns the generated content
+ *
+ * @param Template $template
+ *
+ * @return string|null
+ * @throws \Exception
+ */
+ public function getContent(Template $template) {
+ ob_start();
+ $this->render($template);
+ return ob_get_clean();
+ }
+
+ /**
+ * This function is executed automatically when a generated file is included
+ * - Decode saved properties
+ * - Check if file is valid
+ *
+ * @param Template $_template
+ * @param array $properties special template properties
+ *
+ * @return bool flag if compiled or cache file is valid
+ * @throws Exception
+ */
+ public function isFresh(Template $_template, array $properties): bool {
+
+ // on cache resources other than file check version stored in cache code
+ if (\Smarty\Smarty::SMARTY_VERSION !== $properties['version']) {
+ return false;
+ }
+
+ $is_valid = true;
+
+ if (!empty($properties['file_dependency']) && ($_template->compile_check === \Smarty\Smarty::COMPILECHECK_ON)) {
+ $is_valid = $this->checkFileDependencies($properties['file_dependency'], $_template);
+ }
+
+ // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc
+ if ($_template->caching === \Smarty\Smarty::CACHING_LIFETIME_SAVED && $properties['cache_lifetime'] >= 0
+ && (time() > ($this->timestamp + $properties['cache_lifetime']))
+ ) {
+ $is_valid = false;
+ }
+
+ $this->cache_lifetime = $properties['cache_lifetime'];
+ $this->setValid($is_valid);
+
+ if ($is_valid) {
+ $this->unifunc = $properties['unifunc'];
+ $this->setNocacheCode($properties['has_nocache_code']);
+ $this->file_dependency = $properties['file_dependency'];
+ }
+ return $is_valid && !function_exists($properties['unifunc']);
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Template/Compiled.php b/vendor/smarty/smarty/src/Template/Compiled.php
new file mode 100644
index 000000000..5a07db0e6
--- /dev/null
+++ b/vendor/smarty/smarty/src/Template/Compiled.php
@@ -0,0 +1,305 @@
+<?php
+
+namespace Smarty\Template;
+
+use Smarty\Exception;
+use Smarty\Template;
+
+/**
+ * Represents a compiled version of a template or config file.
+ * @author Rodney Rehm
+ */
+class Compiled extends GeneratedPhpFile {
+
+ /**
+ * nocache hash
+ *
+ * @var string|null
+ */
+ public $nocache_hash = null;
+
+ /**
+ * Included sub templates
+ * - index name
+ * - value use count
+ *
+ * @var int[]
+ */
+ public $includes = [];
+ /**
+ * @var bool
+ */
+ private $isValid = false;
+
+ /**
+ * get a Compiled Object of this source
+ *
+ * @param Template $_template template object
+ *
+ * @return Compiled compiled object
+ */
+ public static function load($_template) {
+ $compiled = new Compiled();
+ if ($_template->getSource()->handler->supportsCompiledTemplates()) {
+ $compiled->populateCompiledFilepath($_template);
+ }
+ return $compiled;
+ }
+
+ /**
+ * populate Compiled Object with compiled filepath
+ *
+ * @param Template $_template template object
+ **/
+ private function populateCompiledFilepath(Template $_template) {
+ $source = $_template->getSource();
+ $smarty = $_template->getSmarty();
+ $this->filepath = $smarty->getCompileDir();
+ if (isset($_template->compile_id)) {
+ $this->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) .
+ ($smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^');
+ }
+ // if use_sub_dirs, break file into directories
+ if ($smarty->use_sub_dirs) {
+ $this->filepath .= $source->uid[0] . $source->uid[1] . DIRECTORY_SEPARATOR . $source->uid[2] .
+ $source->uid[3] . DIRECTORY_SEPARATOR . $source->uid[4] . $source->uid[5] .
+ DIRECTORY_SEPARATOR;
+ }
+ $this->filepath .= $source->uid . '_';
+ if ($source->isConfig) {
+ $this->filepath .= (int)$smarty->config_read_hidden + (int)$smarty->config_booleanize * 2 +
+ (int)$smarty->config_overwrite * 4;
+ } else {
+ $this->filepath .= (int)$smarty->escape_html * 2;
+ }
+ $this->filepath .= '.' . $source->type . '_' . $source->getBasename();
+
+ if ($_template->caching) {
+ $this->filepath .= '.cache';
+ }
+ $this->filepath .= '.php';
+ $this->timestamp = $this->exists = is_file($this->filepath);
+ if ($this->exists) {
+ $this->timestamp = filemtime($this->filepath);
+ }
+ }
+
+ /**
+ * render compiled template code
+ *
+ * @param Template $_template
+ *
+ * @return string
+ * @throws \Smarty\Exception
+ */
+ public function render(Template $_template) {
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->start_render($_template);
+ }
+ if (!$this->processed) {
+ $this->compileAndLoad($_template);
+ }
+
+ // @TODO Can't Cached handle this? Maybe introduce an event to decouple.
+ if ($_template->caching) {
+ $_template->getCached()->file_dependency =
+ array_merge($_template->getCached()->file_dependency, $this->file_dependency);
+ }
+
+ $this->getRenderedTemplateCode($_template, $this->unifunc);
+
+ // @TODO Can't Cached handle this? Maybe introduce an event to decouple and remove the $_template->caching property.
+ if ($_template->caching && $this->getNocacheCode()) {
+ $_template->getCached()->hashes[$this->nocache_hash] = true;
+ }
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->end_render($_template);
+ }
+ }
+
+ /**
+ * load compiled template or compile from source
+ *
+ * @param Template $_smarty_tpl do not change variable name, is used by compiled template
+ *
+ * @throws Exception
+ */
+ private function compileAndLoad(Template $_smarty_tpl) {
+
+ if ($_smarty_tpl->getSource()->handler->recompiled) {
+ $this->recompile($_smarty_tpl);
+ return;
+ }
+
+ if ($this->exists && !$_smarty_tpl->getSmarty()->force_compile
+ && !($_smarty_tpl->compile_check && $_smarty_tpl->getSource()->getTimeStamp() > $this->getTimeStamp())
+ ) {
+ $this->loadCompiledTemplate($_smarty_tpl, false);
+ }
+
+ if (!$this->isValid) {
+ $this->compileAndWrite($_smarty_tpl);
+ $this->loadCompiledTemplate($_smarty_tpl);
+ }
+
+ $this->processed = true;
+ }
+
+ /**
+ * compile template from source
+ *
+ * @param Template $_smarty_tpl do not change variable name, is used by compiled template
+ *
+ * @throws Exception
+ */
+ private function recompile(Template $_smarty_tpl) {
+ $level = ob_get_level();
+ ob_start();
+ // call compiler
+ try {
+ eval('?>' . $this->doCompile($_smarty_tpl));
+ } catch (\Exception $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ throw $e;
+ }
+ ob_get_clean();
+ $this->timestamp = time();
+ $this->exists = true;
+ }
+
+ /**
+ * compile template from source
+ *
+ * @param Template $_template
+ *
+ * @throws Exception
+ */
+ public function compileAndWrite(Template $_template) {
+ // compile locking
+ if ($saved_timestamp = (!$_template->getSource()->handler->recompiled && is_file($this->filepath))) {
+ $saved_timestamp = $this->getTimeStamp();
+ touch($this->filepath);
+ }
+ // compile locking
+ try {
+ // call compiler
+ $this->write($_template, $this->doCompile($_template));
+ } catch (\Exception $e) {
+ // restore old timestamp in case of error
+ if ($saved_timestamp && is_file($this->filepath)) {
+ touch($this->filepath, $saved_timestamp);
+ }
+ throw $e;
+ }
+ }
+
+ /**
+ * Do the actual compiling.
+ *
+ * @param Template $_smarty_tpl
+ *
+ * @return string
+ * @throws Exception
+ */
+ private function doCompile(Template $_smarty_tpl): string {
+ $this->file_dependency = [];
+ $this->includes = [];
+ $this->nocache_hash = null;
+ $this->unifunc = null;
+ return $_smarty_tpl->getCompiler()->compileTemplate($_smarty_tpl);
+ }
+
+ /**
+ * Write compiled code by handler
+ *
+ * @param Template $_template template object
+ * @param string $code compiled code
+ *
+ * @return bool success
+ * @throws \Smarty\Exception
+ */
+ private function write(Template $_template, $code) {
+ if (!$_template->getSource()->handler->recompiled) {
+ if ($_template->getSmarty()->writeFile($this->filepath, $code) === true) {
+ $this->timestamp = $this->exists = is_file($this->filepath);
+ if ($this->exists) {
+ $this->timestamp = filemtime($this->filepath);
+ return true;
+ }
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Load fresh compiled template by including the PHP file
+ * HHVM requires a workaround because of a PHP incompatibility
+ *
+ * @param Template $_smarty_tpl do not change/remove variable name, is used by compiled template
+ * @param bool $invalidateCachedFiles forces a revalidation of the file in opcache or apc cache (if available)
+ *
+ */
+ private function loadCompiledTemplate(Template $_smarty_tpl, bool $invalidateCachedFiles = true) {
+
+ if ($invalidateCachedFiles) {
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
+ ) {
+ opcache_invalidate($this->filepath, true);
+ } elseif (function_exists('apc_compile_file')) {
+ apc_compile_file($this->filepath);
+ }
+ }
+ if (defined('HHVM_VERSION')) {
+ eval('?>' . file_get_contents($this->filepath));
+ } else {
+ include $this->filepath;
+ }
+
+ }
+
+ /**
+ * 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 Template $_template
+ * @param array $properties special template properties
+ *
+ * @return bool flag if compiled or cache file is valid
+ * @throws Exception
+ */
+ public function isFresh(Template $_template, array $properties): bool {
+
+ // on cache resources other than file check version stored in cache code
+ if (\Smarty\Smarty::SMARTY_VERSION !== $properties['version']) {
+ return false;
+ }
+
+ $is_valid = true;
+ if (!empty($properties['file_dependency']) && $_template->compile_check) {
+ $is_valid = $this->checkFileDependencies($properties['file_dependency'], $_template);
+ }
+
+ $this->isValid = $is_valid;
+ $this->includes = $properties['includes'] ?? [];
+
+ if ($is_valid) {
+ $this->unifunc = $properties['unifunc'];
+ $this->setNocacheCode($properties['has_nocache_code']);
+ $this->file_dependency = $properties['file_dependency'];
+ }
+ return $is_valid && !function_exists($properties['unifunc']);
+ }
+
+ /**
+ * This method is here only to fix an issue when upgrading from Smarty v4 to v5.
+ */
+ public function _decodeProperties($a, $b, $c = false): bool { return false; }
+
+}
diff --git a/vendor/smarty/smarty/src/Template/Config.php b/vendor/smarty/smarty/src/Template/Config.php
new file mode 100644
index 000000000..b2fcbf813
--- /dev/null
+++ b/vendor/smarty/smarty/src/Template/Config.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Smarty\Template;
+
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Exception;
+
+/**
+ * Smarty Config Resource Data Object
+ * Metadata Container for Config Files
+ *
+ * @author Uwe Tews
+ */
+class Config extends Source {
+
+ /**
+ * Flag that source is a config file
+ *
+ * @var bool
+ */
+ public $isConfig = true;
+
+ /**
+ * @var array
+ */
+ static protected $_incompatible_resources = ['extends' => true];
+
+ public function createCompiler(): \Smarty\Compiler\BaseCompiler {
+ return new \Smarty\Compiler\Configfile($this->smarty);
+ }
+
+ protected static function getDefaultHandlerFunc(Smarty $smarty) {
+ return $smarty->default_config_handler_func;
+ }
+}
diff --git a/vendor/smarty/smarty/src/Template/GeneratedPhpFile.php b/vendor/smarty/smarty/src/Template/GeneratedPhpFile.php
new file mode 100644
index 000000000..f436e9769
--- /dev/null
+++ b/vendor/smarty/smarty/src/Template/GeneratedPhpFile.php
@@ -0,0 +1,159 @@
+<?php
+
+namespace Smarty\Template;
+
+use Smarty\Exception;
+use Smarty\Resource\FilePlugin;
+use Smarty\Template;
+
+/**
+ * Base class for generated PHP files, such as compiled and cached versions of templates and config files.
+ *
+ * @author Rodney Rehm
+ */
+abstract class GeneratedPhpFile {
+
+ /**
+ * Compiled Filepath
+ *
+ * @var string
+ */
+ public $filepath = null;
+
+ /**
+ * Compiled Timestamp
+ *
+ * @var int|bool
+ */
+ public $timestamp = false;
+
+ /**
+ * Compiled Existence
+ *
+ * @var boolean
+ */
+ public $exists = false;
+
+ /**
+ * Template Compile Id (\Smarty\Template::$compile_id)
+ *
+ * @var string
+ */
+ public $compile_id = null;
+
+ /**
+ * Compiled Content Loaded
+ *
+ * @var boolean
+ */
+ protected $processed = false;
+
+ /**
+ * unique function name for compiled template code
+ *
+ * @var string
+ */
+ public $unifunc = '';
+
+ /**
+ * flag if template does contain nocache code sections
+ *
+ * @var bool
+ */
+ private $has_nocache_code = false;
+
+ /**
+ * resource file dependency
+ *
+ * @var array
+ */
+ public $file_dependency = [];
+
+ /**
+ * Get compiled time stamp
+ *
+ * @return int
+ */
+ public function getTimeStamp() {
+ if ($this->exists && !$this->timestamp) {
+ $this->timestamp = filemtime($this->filepath);
+ }
+ return $this->timestamp;
+ }
+
+ /**
+ * @return bool
+ */
+ public function getNocacheCode(): bool {
+ return $this->has_nocache_code;
+ }
+
+ /**
+ * @param bool $has_nocache_code
+ */
+ public function setNocacheCode(bool $has_nocache_code): void {
+ $this->has_nocache_code = $has_nocache_code;
+ }
+
+ /**
+ * get rendered template content by calling compiled or cached template code
+ *
+ * @param string $unifunc function with template code
+ *
+ * @throws \Exception
+ */
+ protected function getRenderedTemplateCode(\Smarty\Template $_template, $unifunc) {
+ $level = ob_get_level();
+ try {
+ if (empty($unifunc) || !function_exists($unifunc)) {
+ throw new \Smarty\Exception("Invalid compiled template for '{$this->filepath}'");
+ }
+ $unifunc($_template);
+ } catch (\Exception $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+
+ throw $e;
+ }
+ }
+
+ /**
+ * @param $file_dependency
+ * @param Template $_template
+ *
+ * @return bool
+ * @throws Exception
+ */
+ protected function checkFileDependencies($file_dependency, Template $_template): bool {
+ // check file dependencies at compiled code
+ foreach ($file_dependency as $_file_to_check) {
+
+ $handler = \Smarty\Resource\BasePlugin::load($_template->getSmarty(), $_file_to_check[2]);
+
+ if ($handler instanceof FilePlugin) {
+ if ($_template->getSource()->getResourceName() === $_file_to_check[0]) {
+ // do not recheck current template
+ continue;
+ }
+ $mtime = $handler->getResourceNameTimestamp($_file_to_check[0], $_template->getSmarty(), $_template->getSource()->isConfig);
+ } else {
+
+ if ($handler->checkTimestamps()) {
+ // @TODO this doesn't actually check any dependencies, but only the main source file
+ // and that might to be irrelevant, as the comment "do not recheck current template" above suggests
+ $source = Source::load($_template, $_template->getSmarty());
+ $mtime = $source->getTimeStamp();
+ } else {
+ continue;
+ }
+ }
+
+ if ($mtime === false || $mtime > $_file_to_check[1]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/Template/Source.php b/vendor/smarty/smarty/src/Template/Source.php
new file mode 100644
index 000000000..2c2022ee5
--- /dev/null
+++ b/vendor/smarty/smarty/src/Template/Source.php
@@ -0,0 +1,285 @@
+<?php
+
+namespace Smarty\Template;
+
+use Smarty\Resource\FilePlugin;
+use Smarty\Smarty;
+use Smarty\Template;
+use Smarty\Exception;
+
+/**
+ * Meta-data Container for Template source files
+ * @author Rodney Rehm
+ */
+class Source {
+
+ /**
+ * Unique Template ID
+ *
+ * @var string|null
+ */
+ public $uid = null;
+
+ /**
+ * Template Resource (\Smarty\Template::$template_resource)
+ *
+ * @var string
+ */
+ public $resource = null;
+
+ /**
+ * Resource Type
+ *
+ * @var string
+ */
+ public $type = null;
+
+ /**
+ * Resource Name
+ *
+ * @var string
+ */
+ public $name = null;
+
+ /**
+ * Source Timestamp
+ *
+ * @var int
+ */
+ 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\BasePlugin
+ */
+ public $handler = null;
+
+ /**
+ * Smarty instance
+ *
+ * @var Smarty
+ */
+ protected $smarty = null;
+
+ /**
+ * Resource is source
+ *
+ * @var bool
+ */
+ public $isConfig = false;
+
+ /**
+ * Template source content eventually set by default handler
+ *
+ * @var string
+ */
+ public $content = null;
+
+ /**
+ * @var array
+ */
+ static protected $_incompatible_resources = [];
+
+ /**
+ * create Source Object container
+ *
+ * @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
+ *
+ * @throws \Smarty\Exception
+ * @internal param \Smarty\Resource\Base $handler Resource Handler this source object communicates with
+ */
+ public function __construct(Smarty $smarty, $type, $name) {
+ $this->handler = \Smarty\Resource\BasePlugin::load($smarty, $type);
+
+ $this->smarty = $smarty;
+ $this->resource = $type . ':' . $name;
+ $this->type = $type;
+ $this->name = $name;
+ }
+
+ /**
+ * initialize Source Object for given resource
+ * Either [$_template] or [$smarty, $template_resource] must be specified
+ *
+ * @param Template|null $_template template object
+ * @param Smarty|null $smarty smarty object
+ * @param null $template_resource resource identifier
+ *
+ * @return Source Source Object
+ * @throws Exception
+ */
+ public static function load(
+ ?Template $_template = null,
+ ?Smarty $smarty = null,
+ $template_resource = null
+ ) {
+ if ($_template) {
+ $smarty = $_template->getSmarty();
+ $template_resource = $_template->template_resource;
+ }
+ if (empty($template_resource)) {
+ throw new Exception('Source: Missing name');
+ }
+ // parse resource_name, load resource handler, identify unique resource name
+ if (preg_match('/^([A-Za-z0-9_\-]{2,}):([\s\S]*)$/', $template_resource, $match)) {
+ $type = $match[1];
+ $name = $match[2];
+ } else {
+ // no resource given, use default
+ // or single character before the colon is not a resource type, but part of the filepath
+ $type = $smarty->default_resource_type;
+ $name = $template_resource;
+ }
+
+ if (isset(self::$_incompatible_resources[$type])) {
+ throw new Exception("Unable to use resource '{$type}' for " . __METHOD__);
+ }
+
+ // create new source object
+ $source = new static($smarty, $type, $name);
+ $source->handler->populate($source, $_template);
+ if (!$source->exists && static::getDefaultHandlerFunc($smarty)) {
+ $source->_getDefaultTemplate(static::getDefaultHandlerFunc($smarty));
+ $source->handler->populate($source, $_template);
+ }
+ return $source;
+ }
+
+ protected static function getDefaultHandlerFunc(Smarty $smarty) {
+ return $smarty->default_template_handler_func;
+ }
+
+ /**
+ * 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
+ * @throws \Smarty\Exception
+ */
+ public function getContent() {
+ return $this->content ?? $this->handler->getContent($this);
+ }
+
+ /**
+ * get default content from template or config resource handler
+ *
+ * @throws \Smarty\Exception
+ */
+ public function _getDefaultTemplate($default_handler) {
+ $_content = $_timestamp = null;
+ $_return = \call_user_func_array(
+ $default_handler,
+ [$this->type, $this->name, &$_content, &$_timestamp, $this->smarty]
+ );
+ if (is_string($_return)) {
+ $this->exists = is_file($_return);
+ if ($this->exists) {
+ $this->timestamp = filemtime($_return);
+ } else {
+ throw new Exception(
+ 'Default handler: Unable to load ' .
+ "default file '{$_return}' for '{$this->type}:{$this->name}'"
+ );
+ }
+ $this->name = $_return;
+ $this->uid = sha1($_return);
+ } elseif ($_return === true) {
+ $this->content = $_content;
+ $this->exists = true;
+ $this->uid = $this->name = sha1($_content);
+ $this->handler = \Smarty\Resource\BasePlugin::load($this->smarty, 'eval');
+ } else {
+ $this->exists = false;
+ throw new Exception(
+ 'Default handler: No ' . ($this->isConfig ? 'config' : 'template') .
+ " default content for '{$this->type}:{$this->name}'"
+ );
+ }
+ }
+
+ public function createCompiler(): \Smarty\Compiler\BaseCompiler {
+ return new \Smarty\Compiler\Template($this->smarty);
+ }
+
+ public function getSmarty() {
+ return $this->smarty;
+ }
+
+ /**
+ * Determine basename for compiled filename
+ *
+ * @return string resource's basename
+ */
+ public function getBasename()
+ {
+ return $this->handler->getBasename($this);
+ }
+
+ /**
+ * Return source name
+ * e.g.: 'sub/index.tpl'
+ *
+ * @return string
+ */
+ public function getResourceName(): string {
+ return (string) $this->name;
+ }
+
+ /**
+ * Return source name, including the type prefix.
+ * e.g.: 'file:sub/index.tpl'
+ *
+ * @return string
+ */
+ public function getFullResourceName(): string {
+ return $this->type . ':' . $this->name;
+ }
+
+ public function getFilepath(): ?string {
+ if ($this->handler instanceof FilePlugin) {
+ return $this->handler->getFilePath($this->name, $this->smarty, $this->isConfig);
+ }
+ return null;
+ }
+
+ public function isConfig(): bool {
+ return $this->isConfig;
+ }
+
+}
diff --git a/vendor/smarty/smarty/src/TemplateBase.php b/vendor/smarty/smarty/src/TemplateBase.php
new file mode 100644
index 000000000..f01d11076
--- /dev/null
+++ b/vendor/smarty/smarty/src/TemplateBase.php
@@ -0,0 +1,425 @@
+<?php
+/**
+ * Smarty Internal Plugin Smarty Template Base
+ * This file contains the basic shared methods for template handling
+ *
+
+
+ * @author Uwe Tews
+ */
+
+namespace Smarty;
+
+/**
+ * Class with shared smarty/template methods
+ */
+abstract class TemplateBase extends Data {
+
+ /**
+ * 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;
+
+ /**
+ * caching enabled
+ *
+ * @var int
+ */
+ public $caching = \Smarty\Smarty::CACHING_OFF;
+
+ /**
+ * check template for modifications?
+ *
+ * @var int
+ */
+ public $compile_check = \Smarty\Smarty::COMPILECHECK_ON;
+
+ /**
+ * cache lifetime in seconds
+ *
+ * @var int
+ */
+ public $cache_lifetime = 3600;
+
+ /**
+ * Array of source information for known template functions
+ *
+ * @var array
+ */
+ public $tplFunctions = [];
+
+ /**
+ * @var Debug
+ */
+ private $debug;
+
+ /**
+ * Registers object to be used in templates
+ *
+ * @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 static
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::registerObject()
+ */
+ public function registerObject(
+ $object_name,
+ $object,
+ $allowed_methods_properties = [],
+ $format = true,
+ $block_methods = []
+ ) {
+ $smarty = $this->getSmarty();
+ // test if allowed methods callable
+ if (!empty($allowed_methods_properties)) {
+ foreach ((array)$allowed_methods_properties as $method) {
+ if (!is_callable([$object, $method]) && !property_exists($object, $method)) {
+ throw new Exception("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([$object, $method])) {
+ throw new Exception("Undefined method '$method' in registered object");
+ }
+ }
+ }
+ // register the object
+ $smarty->registered_objects[$object_name] =
+ [$object, (array)$allowed_methods_properties, (boolean)$format, (array)$block_methods];
+ return $this;
+ }
+
+ /**
+ * Registers plugin to be used in templates
+ *
+ * @param string $object_name name of object
+ *
+ * @return static
+ * @api Smarty::unregisterObject()
+ *
+ */
+ public function unregisterObject($object_name) {
+ $smarty = $this->getSmarty();
+ if (isset($smarty->registered_objects[$object_name])) {
+ unset($smarty->registered_objects[$object_name]);
+ }
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCompileCheck(): int {
+ return $this->compile_check;
+ }
+
+ /**
+ * @param int $compile_check
+ */
+ public function setCompileCheck($compile_check) {
+ $this->compile_check = (int)$compile_check;
+ }
+
+ /**
+ * @param int $caching
+ */
+ public function setCaching($caching) {
+ $this->caching = (int)$caching;
+ }
+
+ /**
+ * @param int $cache_lifetime
+ */
+ public function setCacheLifetime($cache_lifetime) {
+ $this->cache_lifetime = $cache_lifetime;
+ }
+
+ /**
+ * @param string $compile_id
+ */
+ public function setCompileId($compile_id) {
+ $this->compile_id = $compile_id;
+ }
+
+ /**
+ * @param string $cache_id
+ */
+ public function setCacheId($cache_id) {
+ $this->cache_id = $cache_id;
+ }
+
+ /**
+ * creates a data object
+ *
+ * @param Data|null $parent next higher level of Smarty
+ * variables
+ * @param null $name optional data block name
+ *
+ * @return Data data object
+ * @throws Exception
+ * @api Smarty::createData()
+ *
+ */
+ public function createData(?Data $parent = null, $name = null) {
+ /* @var Smarty $smarty */
+ $smarty = $this->getSmarty();
+ $dataObj = new Data($parent, $smarty, $name);
+ if ($smarty->debugging) {
+ $smarty->getDebug()->register_data($dataObj);
+ }
+ return $dataObj;
+ }
+
+ /**
+ * return name of debugging template
+ *
+ * @return string
+ * @api Smarty::getDebugTemplate()
+ *
+ */
+ public function getDebugTemplate() {
+ $smarty = $this->getSmarty();
+ return $smarty->debug_tpl;
+ }
+
+ /**
+ * @return Debug
+ */
+ public function getDebug(): Debug {
+ if (!isset($this->debug)) {
+ $this->debug = new \Smarty\Debug();
+ }
+ return $this->debug;
+ }
+
+
+ /**
+ * return a reference to a registered object
+ *
+ * @param string $object_name object name
+ *
+ * @return object
+ * @throws \Smarty\Exception if no such object is found
+ *
+ * @api Smarty::getRegisteredObject()
+ */
+ public function getRegisteredObject($object_name) {
+ $smarty = $this->getSmarty();
+ if (!isset($smarty->registered_objects[$object_name])) {
+ throw new Exception("'$object_name' is not a registered object");
+ }
+ if (!is_object($smarty->registered_objects[$object_name][0])) {
+ throw new Exception("registered '$object_name' is not an object");
+ }
+ return $smarty->registered_objects[$object_name][0];
+ }
+
+ /**
+ * Get literals
+ *
+ * @return array list of literals
+ * @api Smarty::getLiterals()
+ *
+ */
+ public function getLiterals() {
+ $smarty = $this->getSmarty();
+ return (array)$smarty->literals;
+ }
+
+ /**
+ * Add literals
+ *
+ * @param array|string $literals literal or list of literals
+ * to addto add
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ * @api Smarty::addLiterals()
+ *
+ */
+ public function addLiterals($literals = null) {
+ if (isset($literals)) {
+ $this->_setLiterals($this->getSmarty(), (array)$literals);
+ }
+ return $this;
+ }
+
+ /**
+ * Set literals
+ *
+ * @param array|string $literals literal or list of literals
+ * to setto set
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ * @api Smarty::setLiterals()
+ *
+ */
+ public function setLiterals($literals = null) {
+ $smarty = $this->getSmarty();
+ $smarty->literals = [];
+ if (!empty($literals)) {
+ $this->_setLiterals($smarty, (array)$literals);
+ }
+ return $this;
+ }
+
+ /**
+ * common setter for literals for easier handling of duplicates the
+ * Smarty::$literals array gets filled with identical key values
+ *
+ * @param Smarty $smarty
+ * @param array $literals
+ *
+ * @throws \Smarty\Exception
+ */
+ private function _setLiterals(Smarty $smarty, $literals) {
+ $literals = array_combine($literals, $literals);
+ $error = isset($literals[$smarty->getLeftDelimiter()]) ? [$smarty->getLeftDelimiter()] : [];
+ $error = isset($literals[$smarty->getRightDelimiter()]) ? $error[] = $smarty->getRightDelimiter() : $error;
+ if (!empty($error)) {
+ throw new Exception(
+ 'User defined literal(s) "' . $error .
+ '" may not be identical with left or right delimiter'
+ );
+ }
+ $smarty->literals = array_merge((array)$smarty->literals, (array)$literals);
+ }
+
+ /**
+ * Registers static classes to be used in templates
+ *
+ * @param string $class_name
+ * @param string $class_impl the referenced PHP class to
+ * register
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ * @api Smarty::registerClass()
+ *
+ */
+ public function registerClass($class_name, $class_impl) {
+ $smarty = $this->getSmarty();
+ // test if exists
+ if (!class_exists($class_impl)) {
+ throw new Exception("Undefined class '$class_impl' in register template class");
+ }
+ // register the class
+ $smarty->registered_classes[$class_name] = $class_impl;
+ return $this;
+ }
+
+ /**
+ * Register config default handler
+ *
+ * @param callable $callback class/method name
+ *
+ * @return static
+ * @throws Exception if $callback is not callable
+ * @api Smarty::registerDefaultConfigHandler()
+ *
+ */
+ public function registerDefaultConfigHandler($callback) {
+ $smarty = $this->getSmarty();
+ if (is_callable($callback)) {
+ $smarty->default_config_handler_func = $callback;
+ } else {
+ throw new Exception('Default config handler not callable');
+ }
+ return $this;
+ }
+
+ /**
+ * Register template default handler
+ *
+ * @param callable $callback class/method name
+ *
+ * @return static
+ * @throws Exception if $callback is not callable
+ * @api Smarty::registerDefaultTemplateHandler()
+ *
+ */
+ public function registerDefaultTemplateHandler($callback) {
+ $smarty = $this->getSmarty();
+ if (is_callable($callback)) {
+ $smarty->default_template_handler_func = $callback;
+ } else {
+ throw new Exception('Default template handler not callable');
+ }
+ return $this;
+ }
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @param string $name name of resource type
+ * @param \Smarty\Resource\BasePlugin $resource_handler instance of Smarty\Resource\BasePlugin
+ *
+ * @return static
+ *
+ * @api Smarty::registerResource()
+ */
+ public function registerResource($name, \Smarty\Resource\BasePlugin $resource_handler) {
+ $smarty = $this->getSmarty();
+ $smarty->registered_resources[$name] = $resource_handler;
+ return $this;
+ }
+
+ /**
+ * Unregisters a resource to fetch a template
+ *
+ * @param string $type name of resource type
+ *
+ * @return static
+ * @api Smarty::unregisterResource()
+ *
+ */
+ public function unregisterResource($type) {
+ $smarty = $this->getSmarty();
+ if (isset($smarty->registered_resources[$type])) {
+ unset($smarty->registered_resources[$type]);
+ }
+ return $this;
+ }
+
+ /**
+ * set the debug template
+ *
+ * @param string $tpl_name
+ *
+ * @return static
+ * @throws Exception if file is not readable
+ * @api Smarty::setDebugTemplate()
+ *
+ */
+ public function setDebugTemplate($tpl_name) {
+ $smarty = $this->getSmarty();
+ if (!is_readable($tpl_name)) {
+ throw new Exception("Unknown file '{$tpl_name}'");
+ }
+ $smarty->debug_tpl = $tpl_name;
+ return $this;
+ }
+
+
+
+}
diff --git a/vendor/smarty/smarty/src/TestInstall.php b/vendor/smarty/smarty/src/TestInstall.php
new file mode 100644
index 000000000..e24c39848
--- /dev/null
+++ b/vendor/smarty/smarty/src/TestInstall.php
@@ -0,0 +1,211 @@
+<?php
+
+namespace Smarty;
+
+/**
+ * Smarty Internal TestInstall
+ * Test Smarty installation
+ *
+
+
+ * @author Uwe Tews
+ */
+
+/**
+ * TestInstall class
+ *
+
+
+ */
+class TestInstall
+{
+ /**
+ * diagnose Smarty setup
+ * If $errors is secified, the diagnostic report will be appended to the array, rather than being output.
+ *
+ * @param \Smarty $smarty
+ * @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) {
+ $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";
+ }
+ 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) {
+ $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 "Tests complete.\n";
+ echo "</PRE>\n";
+ }
+ return $status;
+ }
+}
diff --git a/vendor/smarty/smarty/src/UndefinedVariable.php b/vendor/smarty/smarty/src/UndefinedVariable.php
new file mode 100644
index 000000000..53f13f416
--- /dev/null
+++ b/vendor/smarty/smarty/src/UndefinedVariable.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Smarty;
+
+/**
+ * class for undefined variable object
+ * This class defines an object for undefined variable handling
+ */
+class UndefinedVariable extends Variable {
+
+ /**
+ * Always returns an empty string.
+ *
+ * @return string
+ */
+ public function __toString() {
+ return '';
+ }
+}
diff --git a/vendor/smarty/smarty/src/Variable.php b/vendor/smarty/smarty/src/Variable.php
new file mode 100644
index 000000000..0e38d1257
--- /dev/null
+++ b/vendor/smarty/smarty/src/Variable.php
@@ -0,0 +1,118 @@
+<?php
+
+namespace Smarty;
+
+/**
+ * class for the Smarty variable object
+ * This class defines the Smarty variable object
+ *
+
+
+ */
+#[\AllowDynamicProperties]
+class Variable
+{
+ /**
+ * template variable
+ *
+ * @var mixed
+ */
+ public $value = null;
+
+ /**
+ * Other r/w properties for foreach, for, while, etc.
+ */
+ public $step, $total, $first, $last, $key, $show, $iteration, $index = null;
+
+ /**
+ * @param mixed|null $value
+ */
+ public function setValue($value): void {
+ $this->value = $value;
+ }
+
+ /**
+ * if true any output of this variable will be not cached
+ *
+ * @var boolean
+ */
+ private $nocache = false;
+
+ /**
+ * @param bool $nocache
+ */
+ public function setNocache(bool $nocache): void {
+ $this->nocache = $nocache;
+ }
+
+ /**
+ * 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;
+ }
+
+ public function getValue() {
+ return $this->value;
+ }
+
+ /**
+ * <<magic>> String conversion
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return (string)$this->value;
+ }
+
+ /**
+ * Handles ++$a and --$a in templates.
+ *
+ * @param $operator '++' or '--', defaults to '++'
+ *
+ * @return int|mixed
+ * @throws Exception
+ */
+ public function preIncDec($operator = '++') {
+ if ($operator == '--') {
+ return --$this->value;
+ } elseif ($operator == '++') {
+ return ++$this->value;
+ } else {
+ throw new Exception("Invalid incdec operator. Use '--' or '++'.");
+ }
+ return $this->value;
+ }
+
+ /**
+ * Handles $a++ and $a-- in templates.
+ *
+ * @param $operator '++' or '--', defaults to '++'
+ *
+ * @return int|mixed
+ * @throws Exception
+ */
+ public function postIncDec($operator = '++') {
+ if ($operator == '--') {
+ return $this->value--;
+ } elseif ($operator == '++') {
+ return $this->value++;
+ } else {
+ throw new Exception("Invalid incdec operator. Use '--' or '++'.");
+ }
+ }
+
+ /**
+ * @return bool
+ */
+ public function isNocache(): bool {
+ return $this->nocache;
+ }
+
+}
diff --git a/vendor/smarty/smarty/libs/debug.tpl b/vendor/smarty/smarty/src/debug.tpl
index cd9325668..3dd25bf37 100644
--- a/vendor/smarty/smarty/libs/debug.tpl
+++ b/vendor/smarty/smarty/src/debug.tpl
@@ -1,4 +1,4 @@
-{capture name='_smarty_debug' assign=debug_output}
+{capture name='_smarty_debug' assign='debug_output'}
<!DOCTYPE html>
<html lang="en">
<head>
@@ -108,7 +108,7 @@
</head>
<body>
- <h1>Smarty {Smarty::SMARTY_VERSION} Debug Console
+ <h1>Smarty {\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)}
@@ -144,6 +144,7 @@
{$vars['attributes']|debug_print_var nofilter}
{/if}
</td>
+ </tr>
{/foreach}
</table>
@@ -166,7 +167,7 @@
</body>
</html>
{/capture}
-<script type="text/javascript">
+<script>
_smarty_console = window.open("", "console{$targetWindow}", "width=1024,height=600,left={$offset},top={$offset},resizable,scrollbars=yes");
_smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");
_smarty_console.document.close();
diff --git a/vendor/smarty/smarty/src/functions.php b/vendor/smarty/smarty/src/functions.php
new file mode 100644
index 000000000..590789ba3
--- /dev/null
+++ b/vendor/smarty/smarty/src/functions.php
@@ -0,0 +1,253 @@
+<?php
+/**
+ * This file is part of the Smarty package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Smarty\Exception;
+
+/**
+ * Converts the first characters in $string to uppercase (A-Z) if it is an ASCII lowercase character (a-z).
+ *
+ * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
+ *
+ * @param $string
+ *
+ * @return string
+ */
+function smarty_ucfirst_ascii($string): string {
+ return smarty_strtoupper_ascii(substr($string, 0, 1)) . substr($string, 1);
+}
+
+/**
+ * Converts all uppercase ASCII characters (A-Z) in $string to lowercase (a-z).
+ *
+ * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
+ *
+ * @param $string
+ *
+ * @return string
+ */
+function smarty_strtolower_ascii($string): string {
+ return strtr($string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
+}
+
+/**
+ * Converts all lowercase ASCII characters (a-z) in $string to uppercase (A-Z).
+ *
+ * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
+ *
+ * @param $string
+ *
+ * @return string
+ */
+function smarty_strtoupper_ascii($string): string {
+ return strtr($string, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+}
+
+/**
+ * Function: smarty_make_timestamp
+ * 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()
+ *
+ * @return int
+ */
+function smarty_make_timestamp($string)
+{
+ if (empty($string)) {
+ // use "now":
+ return time();
+ } 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)$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)
+ );
+ } 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) {
+ // strtotime() was not able to parse $string, use "now":
+ return time();
+ }
+ return $time;
+ }
+}
+
+/**
+ * Multibyte string replace
+ *
+ * @param string|string[] $search the string to be searched
+ * @param string|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)
+{
+ if (!is_array($search) && is_array($replace)) {
+ return false;
+ }
+ 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);
+ $count += $c;
+ }
+ } elseif (is_array($search)) {
+ if (!is_array($replace)) {
+ foreach ($search as &$string) {
+ $subject = smarty_mb_str_replace($string, $replace, $subject, $c);
+ $count += $c;
+ }
+ } else {
+ $n = max(count($search), count($replace));
+ while ($n--) {
+ $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
+ $count += $c;
+ next($search);
+ next($replace);
+ }
+ }
+ } else {
+ $mb_reg_charset = mb_regex_encoding();
+ // Check if mbstring regex is using UTF-8
+ $reg_is_unicode = !strcasecmp($mb_reg_charset, "UTF-8");
+ if(!$reg_is_unicode) {
+ // ...and set to UTF-8 if not
+ mb_regex_encoding("UTF-8");
+ }
+
+ // See if charset used by Smarty is matching one used by regex...
+ $current_charset = mb_regex_encoding();
+ $convert_result = (bool)strcasecmp(\Smarty\Smarty::$_CHARSET, $current_charset);
+ if($convert_result) {
+ // ...convert to it if not.
+ $subject = mb_convert_encoding($subject, $current_charset, \Smarty\Smarty::$_CHARSET);
+ $search = mb_convert_encoding($search, $current_charset, \Smarty\Smarty::$_CHARSET);
+ $replace = mb_convert_encoding($replace, $current_charset, \Smarty\Smarty::$_CHARSET);
+ }
+
+ $parts = mb_split(preg_quote($search), $subject ?? "") ?: array();
+ // If original regex encoding was not unicode...
+ if(!$reg_is_unicode) {
+ // ...restore original regex encoding to avoid breaking the system.
+ mb_regex_encoding($mb_reg_charset);
+ }
+ if($parts === false) {
+ // This exception is thrown if call to mb_split failed.
+ // Usually it happens, when $search or $replace are not valid for given mb_regex_encoding().
+ // There may be other cases for it to fail, please file an issue if you find a reproducible one.
+ throw new Exception("Source string is not a valid $current_charset sequence (probably)");
+ }
+
+ $count = count($parts) - 1;
+ $subject = implode($replace, $parts);
+ // Convert results back to charset used by Smarty, if needed.
+ if($convert_result) {
+ $subject = mb_convert_encoding($subject, \Smarty\Smarty::$_CHARSET, $current_charset);
+ }
+ }
+ return $subject;
+}
+/**
+ * escape_special_chars common function
+ * Function: smarty_function_escape_special_chars
+ * 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
+ *
+ * @return string
+ */
+function smarty_function_escape_special_chars($string)
+{
+ if (!is_array($string)) {
+ $string = htmlspecialchars((string) $string, ENT_COMPAT, \Smarty\Smarty::$_CHARSET, false);
+ }
+ return $string;
+}
+
+/**
+ * Smarty wordwrap supporting multibyte
+ * Name: smarty_mb_wordwrap
+ * Purpose: Wrap a string to a given number of characters
+ *
+ * @link https://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)
+{
+ // break words into tokens using white space as a delimiter
+ $tokens = preg_split('!(\s)!S' . \Smarty\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\Smarty::$_CHARSET);
+ $_tokens = array($_token);
+ if ($token_length > $width) {
+ if ($cut) {
+ $_tokens = preg_split(
+ '!(.{' . $width . '})!S' . \Smarty\Smarty::$_UTF8_MODIFIER,
+ $_token,
+ -1,
+ PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE
+ );
+ }
+ }
+ foreach ($_tokens as $token) {
+ $_space = !!preg_match('!^\s$!S' . \Smarty\Smarty::$_UTF8_MODIFIER, $token);
+ $token_length = mb_strlen($token, \Smarty\Smarty::$_CHARSET);
+ $length += $token_length;
+ if ($length > $width) {
+ // remove space before inserted break
+ if ($_previous) {
+ $t = mb_substr($t, 0, -1, \Smarty\Smarty::$_CHARSET);
+ }
+ if (!$_space) {
+ // add the break before the token
+ if (!empty($t)) {
+ $t .= $break;
+ }
+ $length = $token_length;
+ }
+ } elseif ($token === "\n") {
+ // hard break must reset counters
+ $length = 0;
+ }
+ $_previous = $_space;
+ // add the token
+ $t .= $token;
+ }
+ }
+ return $t;
+}
diff --git a/vendor/spomky-labs/otphp/README.md b/vendor/spomky-labs/otphp/README.md
index b23282ea1..542de6fbd 100644
--- a/vendor/spomky-labs/otphp/README.md
+++ b/vendor/spomky-labs/otphp/README.md
@@ -2,6 +2,7 @@ TOTP / HOTP library in PHP
==========================
![Build Status](https://github.com/spomky-labs/otphp/workflows/Integrate/badge.svg)
+![Build Status](https://github.com/spomky-labs/otphp/workflows/Infection/badge.svg)
[![Latest Stable Version](https://poser.pugx.org/spomky-labs/otphp/v/stable.png)](https://packagist.org/packages/spomky-labs/otphp)
[![Total Downloads](https://poser.pugx.org/spomky-labs/otphp/downloads.png)](https://packagist.org/packages/spomky-labs/otphp)
diff --git a/vendor/spomky-labs/otphp/composer.json b/vendor/spomky-labs/otphp/composer.json
index 080df371a..bff1e48f3 100644
--- a/vendor/spomky-labs/otphp/composer.json
+++ b/vendor/spomky-labs/otphp/composer.json
@@ -16,23 +16,25 @@
}
],
"require": {
- "php": "^8.1",
+ "php": ">=8.1",
"ext-mbstring": "*",
- "paragonie/constant_time_encoding": "^2.0"
+ "paragonie/constant_time_encoding": "^2.0 || ^3.0",
+ "psr/clock": "^1.0",
+ "symfony/deprecation-contracts": "^3.2"
},
"require-dev": {
"ekino/phpstan-banned-code": "^1.0",
- "infection/infection": "^0.26",
+ "infection/infection": "^0.26|^0.27|^0.28|^0.29",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-strict-rules": "^1.0",
- "phpunit/phpunit": "^9.5.26",
+ "phpunit/phpunit": "^9.5.26|^10.0|^11.0",
"qossmic/deptrac-shim": "^1.0",
- "rector/rector": "^0.15",
- "symfony/phpunit-bridge": "^6.1",
- "symplify/easy-coding-standard": "^11.0"
+ "rector/rector": "^1.0",
+ "symfony/phpunit-bridge": "^6.1|^7.0",
+ "symplify/easy-coding-standard": "^12.0"
},
"autoload": {
"psr-4": { "OTPHP\\": "src/" }
diff --git a/vendor/spomky-labs/otphp/src/Factory.php b/vendor/spomky-labs/otphp/src/Factory.php
index 409d8751e..4bf41a84a 100644
--- a/vendor/spomky-labs/otphp/src/Factory.php
+++ b/vendor/spomky-labs/otphp/src/Factory.php
@@ -4,10 +4,11 @@ declare(strict_types=1);
namespace OTPHP;
-use function assert;
-use function count;
use InvalidArgumentException;
+use Psr\Clock\ClockInterface;
use Throwable;
+use function assert;
+use function count;
/**
* This class is used to load OTP object from a provisioning Uri.
@@ -16,7 +17,7 @@ use Throwable;
*/
final class Factory implements FactoryInterface
{
- public static function loadFromProvisioningUri(string $uri): OTPInterface
+ public static function loadFromProvisioningUri(string $uri, ?ClockInterface $clock = null): OTPInterface
{
try {
$parsed_url = Url::fromString($uri);
@@ -24,8 +25,16 @@ final class Factory implements FactoryInterface
} catch (Throwable $throwable) {
throw new InvalidArgumentException('Not a valid OTP provisioning URI', $throwable->getCode(), $throwable);
}
+ if ($clock === null) {
+ trigger_deprecation(
+ 'spomky-labs/otphp',
+ '11.3.0',
+ 'The parameter "$clock" will become mandatory in 12.0.0. Please set a valid PSR Clock implementation instead of "null".'
+ );
+ $clock = new InternalClock();
+ }
- $otp = self::createOTP($parsed_url);
+ $otp = self::createOTP($parsed_url, $clock);
self::populateOTP($otp, $parsed_url);
@@ -62,11 +71,11 @@ final class Factory implements FactoryInterface
$otp->setIssuer($result[0]);
}
- private static function createOTP(Url $parsed_url): OTPInterface
+ private static function createOTP(Url $parsed_url, ClockInterface $clock): OTPInterface
{
switch ($parsed_url->getHost()) {
case 'totp':
- $totp = TOTP::createFromSecret($parsed_url->getSecret());
+ $totp = TOTP::createFromSecret($parsed_url->getSecret(), $clock);
$totp->setLabel(self::getLabel($parsed_url->getPath()));
return $totp;
diff --git a/vendor/spomky-labs/otphp/src/HOTP.php b/vendor/spomky-labs/otphp/src/HOTP.php
index 1588d48aa..835de35f3 100644
--- a/vendor/spomky-labs/otphp/src/HOTP.php
+++ b/vendor/spomky-labs/otphp/src/HOTP.php
@@ -46,6 +46,9 @@ final class HOTP extends OTP implements HOTPInterface
return self::createFromSecret(self::generateSecret());
}
+ /**
+ * @return 0|positive-int
+ */
public function getCounter(): int
{
$value = $this->getParameter('counter');
@@ -63,6 +66,8 @@ final class HOTP extends OTP implements HOTPInterface
/**
* If the counter is not provided, the OTP is verified at the actual counter.
+ *
+ * @param null|0|positive-int $counter
*/
public function verify(string $otp, null|int $counter = null, null|int $window = null): bool
{
@@ -97,9 +102,6 @@ final class HOTP extends OTP implements HOTPInterface
]];
}
- /**
- * @param positive-int $counter
- */
private function updateCounter(int $counter): void
{
$this->setCounter($counter);
diff --git a/vendor/spomky-labs/otphp/src/HOTPInterface.php b/vendor/spomky-labs/otphp/src/HOTPInterface.php
index 449e9383b..915569a03 100644
--- a/vendor/spomky-labs/otphp/src/HOTPInterface.php
+++ b/vendor/spomky-labs/otphp/src/HOTPInterface.php
@@ -10,8 +10,6 @@ interface HOTPInterface extends OTPInterface
/**
* The initial counter (a positive integer).
- *
- * @return 0|positive-int
*/
public function getCounter(): int;
@@ -34,8 +32,5 @@ interface HOTPInterface extends OTPInterface
int $digits = 6
): self;
- /**
- * @param 0|positive-int $counter
- */
public function setCounter(int $counter): void;
}
diff --git a/vendor/spomky-labs/otphp/src/InternalClock.php b/vendor/spomky-labs/otphp/src/InternalClock.php
new file mode 100644
index 000000000..8be469318
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/InternalClock.php
@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+use DateTimeImmutable;
+use Psr\Clock\ClockInterface;
+
+/**
+ * @internal
+ */
+final class InternalClock implements ClockInterface
+{
+ public function now(): DateTimeImmutable
+ {
+ return new DateTimeImmutable();
+ }
+}
diff --git a/vendor/spomky-labs/otphp/src/OTP.php b/vendor/spomky-labs/otphp/src/OTP.php
index 4765d49eb..f4c242c8f 100644
--- a/vendor/spomky-labs/otphp/src/OTP.php
+++ b/vendor/spomky-labs/otphp/src/OTP.php
@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace OTPHP;
-use function assert;
-use function chr;
-use function count;
use Exception;
use InvalidArgumentException;
-use function is_string;
use ParagonIE\ConstantTime\Base32;
use RuntimeException;
+use function assert;
+use function chr;
+use function count;
+use function is_string;
use const STR_PAD_LEFT;
abstract class OTP implements OTPInterface
@@ -35,6 +35,9 @@ abstract class OTP implements OTPInterface
return str_replace($placeholder, $provisioning_uri, $uri);
}
+ /**
+ * @param 0|positive-int $input
+ */
public function at(int $input): string
{
return $this->generateOTP($input);
@@ -100,7 +103,7 @@ abstract class OTP implements OTPInterface
$this->hasColon($label) === false || throw new InvalidArgumentException('Label must not contain a colon.');
$options = [...$options, ...$this->getParameters()];
$this->filterOptions($options);
- $params = str_replace(['+', '%7E'], ['%20', '~'], http_build_query($options));
+ $params = str_replace(['+', '%7E'], ['%20', '~'], http_build_query($options, '', '&'));
return sprintf(
'otpauth://%s/%s?%s',
@@ -134,9 +137,6 @@ abstract class OTP implements OTPInterface
return $decoded;
}
- /**
- * @param 0|positive-int $int
- */
private function intToByteString(int $int): string
{
$result = [];
diff --git a/vendor/spomky-labs/otphp/src/OTPInterface.php b/vendor/spomky-labs/otphp/src/OTPInterface.php
index f14eef9f4..39ce4acd0 100644
--- a/vendor/spomky-labs/otphp/src/OTPInterface.php
+++ b/vendor/spomky-labs/otphp/src/OTPInterface.php
@@ -27,9 +27,6 @@ interface OTPInterface
*/
public function setSecret(string $secret): void;
- /**
- * @param positive-int $digits
- */
public function setDigits(int $digits): void;
/**
@@ -38,6 +35,8 @@ interface OTPInterface
public function setDigest(string $digest): void;
/**
+ * Generate the OTP at the specified input.
+ *
* @param 0|positive-int $input
*
* @return non-empty-string Return the OTP at the specified timestamp
diff --git a/vendor/spomky-labs/otphp/src/ParameterTrait.php b/vendor/spomky-labs/otphp/src/ParameterTrait.php
index 3b2641e0c..dc92861c4 100644
--- a/vendor/spomky-labs/otphp/src/ParameterTrait.php
+++ b/vendor/spomky-labs/otphp/src/ParameterTrait.php
@@ -4,10 +4,10 @@ declare(strict_types=1);
namespace OTPHP;
+use InvalidArgumentException;
use function array_key_exists;
use function assert;
use function in_array;
-use InvalidArgumentException;
use function is_int;
use function is_string;
diff --git a/vendor/spomky-labs/otphp/src/TOTP.php b/vendor/spomky-labs/otphp/src/TOTP.php
index 3a7d72870..035e04f95 100644
--- a/vendor/spomky-labs/otphp/src/TOTP.php
+++ b/vendor/spomky-labs/otphp/src/TOTP.php
@@ -4,8 +4,9 @@ declare(strict_types=1);
namespace OTPHP;
-use function assert;
use InvalidArgumentException;
+use Psr\Clock\ClockInterface;
+use function assert;
use function is_int;
/**
@@ -13,16 +14,34 @@ use function is_int;
*/
final class TOTP extends OTP implements TOTPInterface
{
+ private readonly ClockInterface $clock;
+
+ public function __construct(string $secret, ?ClockInterface $clock = null)
+ {
+ parent::__construct($secret);
+ if ($clock === null) {
+ trigger_deprecation(
+ 'spomky-labs/otphp',
+ '11.3.0',
+ 'The parameter "$clock" will become mandatory in 12.0.0. Please set a valid PSR Clock implementation instead of "null".'
+ );
+ $clock = new InternalClock();
+ }
+
+ $this->clock = $clock;
+ }
+
public static function create(
null|string $secret = null,
int $period = self::DEFAULT_PERIOD,
string $digest = self::DEFAULT_DIGEST,
int $digits = self::DEFAULT_DIGITS,
- int $epoch = self::DEFAULT_EPOCH
+ int $epoch = self::DEFAULT_EPOCH,
+ ?ClockInterface $clock = null
): self {
$totp = $secret !== null
- ? self::createFromSecret($secret)
- : self::generate()
+ ? self::createFromSecret($secret, $clock)
+ : self::generate($clock)
;
$totp->setPeriod($period);
$totp->setDigest($digest);
@@ -32,9 +51,9 @@ final class TOTP extends OTP implements TOTPInterface
return $totp;
}
- public static function createFromSecret(string $secret): self
+ public static function createFromSecret(string $secret, ?ClockInterface $clock = null): self
{
- $totp = new self($secret);
+ $totp = new self($secret, $clock);
$totp->setPeriod(self::DEFAULT_PERIOD);
$totp->setDigest(self::DEFAULT_DIGEST);
$totp->setDigits(self::DEFAULT_DIGITS);
@@ -43,9 +62,9 @@ final class TOTP extends OTP implements TOTPInterface
return $totp;
}
- public static function generate(): self
+ public static function generate(?ClockInterface $clock = null): self
{
- return self::createFromSecret(self::generateSecret());
+ return self::createFromSecret(self::generateSecret(), $clock);
}
public function getPeriod(): int
@@ -68,9 +87,14 @@ final class TOTP extends OTP implements TOTPInterface
{
$period = $this->getPeriod();
- return $period - (time() % $this->getPeriod());
+ return $period - ($this->clock->now()->getTimestamp() % $this->getPeriod());
}
+ /**
+ * The OTP at the specified input.
+ *
+ * @param 0|positive-int $input
+ */
public function at(int $input): string
{
return $this->generateOTP($this->timecode($input));
@@ -78,16 +102,24 @@ final class TOTP extends OTP implements TOTPInterface
public function now(): string
{
- return $this->at(time());
+ $timestamp = $this->clock->now()
+ ->getTimestamp();
+ assert($timestamp >= 0, 'The timestamp must return a positive integer.');
+
+ return $this->at($timestamp);
}
/**
* If no timestamp is provided, the OTP is verified at the actual timestamp. When used, the leeway parameter will
* allow time drift. The passed value is in seconds.
+ *
+ * @param 0|positive-int $timestamp
+ * @param null|0|positive-int $leeway
*/
public function verify(string $otp, null|int $timestamp = null, null|int $leeway = null): bool
{
- $timestamp ??= time();
+ $timestamp ??= $this->clock->now()
+ ->getTimestamp();
$timestamp >= 0 || throw new InvalidArgumentException('Timestamp must be at least 0.');
if ($leeway === null) {
@@ -98,8 +130,12 @@ final class TOTP extends OTP implements TOTPInterface
$leeway < $this->getPeriod() || throw new InvalidArgumentException(
'The leeway must be lower than the TOTP period'
);
+ $timestampMinusLeeway = $timestamp - $leeway;
+ $timestampMinusLeeway >= 0 || throw new InvalidArgumentException(
+ 'The timestamp must be greater than or equal to the leeway.'
+ );
- return $this->compareOTP($this->at($timestamp - $leeway), $otp)
+ return $this->compareOTP($this->at($timestampMinusLeeway), $otp)
|| $this->compareOTP($this->at($timestamp), $otp)
|| $this->compareOTP($this->at($timestamp + $leeway), $otp);
}
@@ -133,23 +169,21 @@ final class TOTP extends OTP implements TOTPInterface
*/
protected function getParameterMap(): array
{
- return array_merge(
- parent::getParameterMap(),
- [
- 'period' => static function ($value): int {
- (int) $value > 0 || throw new InvalidArgumentException('Period must be at least 1.');
-
- return (int) $value;
- },
- 'epoch' => static function ($value): int {
- (int) $value >= 0 || throw new InvalidArgumentException(
- 'Epoch must be greater than or equal to 0.'
- );
-
- return (int) $value;
- },
- ]
- );
+ return [
+ ...parent::getParameterMap(),
+ 'period' => static function ($value): int {
+ (int) $value > 0 || throw new InvalidArgumentException('Period must be at least 1.');
+
+ return (int) $value;
+ },
+ 'epoch' => static function ($value): int {
+ (int) $value >= 0 || throw new InvalidArgumentException(
+ 'Epoch must be greater than or equal to 0.'
+ );
+
+ return (int) $value;
+ },
+ ];
}
/**
diff --git a/vendor/spomky-labs/otphp/src/TOTPInterface.php b/vendor/spomky-labs/otphp/src/TOTPInterface.php
index 47ef16ac0..a79fedcce 100644
--- a/vendor/spomky-labs/otphp/src/TOTPInterface.php
+++ b/vendor/spomky-labs/otphp/src/TOTPInterface.php
@@ -29,14 +29,8 @@ interface TOTPInterface extends OTPInterface
int $digits = self::DEFAULT_DIGITS
): self;
- /**
- * @param positive-int $period
- */
public function setPeriod(int $period): void;
- /**
- * @param 0|positive-int $epoch
- */
public function setEpoch(int $epoch): void;
/**
@@ -48,18 +42,10 @@ interface TOTPInterface extends OTPInterface
/**
* Get the period of time for OTP generation (a non-null positive integer, in second).
- *
- * @return positive-int
*/
public function getPeriod(): int;
- /**
- * @return 0|positive-int
- */
public function expiresIn(): int;
- /**
- * @return 0|positive-int
- */
public function getEpoch(): int;
}
diff --git a/vendor/spomky-labs/otphp/src/Url.php b/vendor/spomky-labs/otphp/src/Url.php
index 76919d27a..e88cd6d29 100644
--- a/vendor/spomky-labs/otphp/src/Url.php
+++ b/vendor/spomky-labs/otphp/src/Url.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
namespace OTPHP;
-use function array_key_exists;
use InvalidArgumentException;
+use function array_key_exists;
use function is_string;
/**
@@ -80,7 +80,6 @@ final class Url
array_key_exists($key, $parsed_url) || throw new InvalidArgumentException(
'Not a valid OTP provisioning URI'
);
- is_string($parsed_url[$key]) || throw new InvalidArgumentException('Not a valid OTP provisioning URI');
}
$scheme = $parsed_url['scheme'] ?? null;
$host = $parsed_url['host'] ?? null;
diff --git a/vendor/symfony/deprecation-contracts/CHANGELOG.md b/vendor/symfony/deprecation-contracts/CHANGELOG.md
new file mode 100644
index 000000000..7932e2613
--- /dev/null
+++ b/vendor/symfony/deprecation-contracts/CHANGELOG.md
@@ -0,0 +1,5 @@
+CHANGELOG
+=========
+
+The changelog is maintained for all Symfony contracts at the following URL:
+https://github.com/symfony/contracts/blob/main/CHANGELOG.md
diff --git a/library/symfony/options-resolver/LICENSE b/vendor/symfony/deprecation-contracts/LICENSE
index 43028bc60..0ed3a2465 100644
--- a/library/symfony/options-resolver/LICENSE
+++ b/vendor/symfony/deprecation-contracts/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2015 Fabien Potencier
+Copyright (c) 2020-present Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/deprecation-contracts/README.md b/vendor/symfony/deprecation-contracts/README.md
new file mode 100644
index 000000000..9814864c0
--- /dev/null
+++ b/vendor/symfony/deprecation-contracts/README.md
@@ -0,0 +1,26 @@
+Symfony Deprecation Contracts
+=============================
+
+A generic function and convention to trigger deprecation notices.
+
+This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices.
+
+By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component,
+the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments.
+
+The function requires at least 3 arguments:
+ - the name of the Composer package that is triggering the deprecation
+ - the version of the package that introduced the deprecation
+ - the message of the deprecation
+ - more arguments can be provided: they will be inserted in the message using `printf()` formatting
+
+Example:
+```php
+trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin');
+```
+
+This will generate the following message:
+`Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.`
+
+While not recommended, the deprecation notices can be completely ignored by declaring an empty
+`function trigger_deprecation() {}` in your application.
diff --git a/vendor/symfony/deprecation-contracts/composer.json b/vendor/symfony/deprecation-contracts/composer.json
new file mode 100644
index 000000000..ceb6c0796
--- /dev/null
+++ b/vendor/symfony/deprecation-contracts/composer.json
@@ -0,0 +1,35 @@
+{
+ "name": "symfony/deprecation-contracts",
+ "type": "library",
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=8.1"
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ }
+}
diff --git a/vendor/symfony/deprecation-contracts/function.php b/vendor/symfony/deprecation-contracts/function.php
new file mode 100644
index 000000000..2d56512ba
--- /dev/null
+++ b/vendor/symfony/deprecation-contracts/function.php
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (!function_exists('trigger_deprecation')) {
+ /**
+ * Triggers a silenced deprecation notice.
+ *
+ * @param string $package The name of the Composer package that is triggering the deprecation
+ * @param string $version The version of the package that introduced the deprecation
+ * @param string $message The message of the deprecation
+ * @param mixed ...$args Values to insert in the message using printf() formatting
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+ function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void
+ {
+ @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED);
+ }
+}
diff --git a/library/symfony/process/LICENSE b/vendor/symfony/polyfill-mbstring/LICENSE
index 43028bc60..6e3afce69 100644
--- a/library/symfony/process/LICENSE
+++ b/vendor/symfony/polyfill-mbstring/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2015 Fabien Potencier
+Copyright (c) 2015-present Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php
new file mode 100644
index 000000000..3d45c9d9a
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/Mbstring.php
@@ -0,0 +1,1045 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Mbstring;
+
+/**
+ * Partial mbstring implementation in PHP, iconv based, UTF-8 centric.
+ *
+ * Implemented:
+ * - mb_chr - Returns a specific character from its Unicode code point
+ * - mb_convert_encoding - Convert character encoding
+ * - mb_convert_variables - Convert character code in variable(s)
+ * - mb_decode_mimeheader - Decode string in MIME header field
+ * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED
+ * - mb_decode_numericentity - Decode HTML numeric string reference to character
+ * - mb_encode_numericentity - Encode character to HTML numeric string reference
+ * - mb_convert_case - Perform case folding on a string
+ * - mb_detect_encoding - Detect character encoding
+ * - mb_get_info - Get internal settings of mbstring
+ * - mb_http_input - Detect HTTP input character encoding
+ * - mb_http_output - Set/Get HTTP output character encoding
+ * - mb_internal_encoding - Set/Get internal character encoding
+ * - mb_list_encodings - Returns an array of all supported encodings
+ * - mb_ord - Returns the Unicode code point of a character
+ * - mb_output_handler - Callback function converts character encoding in output buffer
+ * - mb_scrub - Replaces ill-formed byte sequences with substitute characters
+ * - mb_strlen - Get string length
+ * - mb_strpos - Find position of first occurrence of string in a string
+ * - mb_strrpos - Find position of last occurrence of a string in a string
+ * - mb_str_split - Convert a string to an array
+ * - mb_strtolower - Make a string lowercase
+ * - mb_strtoupper - Make a string uppercase
+ * - mb_substitute_character - Set/Get substitution character
+ * - mb_substr - Get part of string
+ * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive
+ * - mb_stristr - Finds first occurrence of a string within another, case insensitive
+ * - mb_strrchr - Finds the last occurrence of a character in a string within another
+ * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive
+ * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive
+ * - mb_strstr - Finds first occurrence of a string within another
+ * - mb_strwidth - Return width of string
+ * - mb_substr_count - Count the number of substring occurrences
+ * - mb_ucfirst - Make a string's first character uppercase
+ * - mb_lcfirst - Make a string's first character lowercase
+ * - mb_trim - Strip whitespace (or other characters) from the beginning and end of a string
+ * - mb_ltrim - Strip whitespace (or other characters) from the beginning of a string
+ * - mb_rtrim - Strip whitespace (or other characters) from the end of a string
+ *
+ * Not implemented:
+ * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
+ * - mb_ereg_* - Regular expression with multibyte support
+ * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable
+ * - mb_preferred_mime_name - Get MIME charset string
+ * - mb_regex_encoding - Returns current encoding for multibyte regex as string
+ * - mb_regex_set_options - Set/Get the default options for mbregex functions
+ * - mb_send_mail - Send encoded mail
+ * - mb_split - Split multibyte string using regular expression
+ * - mb_strcut - Get part of string
+ * - mb_strimwidth - Get truncated string with specified width
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @internal
+ */
+final class Mbstring
+{
+ public const MB_CASE_FOLD = \PHP_INT_MAX;
+
+ private const SIMPLE_CASE_FOLD = [
+ ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"],
+ ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'],
+ ];
+
+ private static $encodingList = ['ASCII', 'UTF-8'];
+ private static $language = 'neutral';
+ private static $internalEncoding = 'UTF-8';
+
+ public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
+ {
+ if (\is_array($s)) {
+ $r = [];
+ foreach ($s as $str) {
+ $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding);
+ }
+
+ return $r;
+ }
+
+ if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) {
+ $fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
+ } else {
+ $fromEncoding = self::getEncoding($fromEncoding);
+ }
+
+ $toEncoding = self::getEncoding($toEncoding);
+
+ if ('BASE64' === $fromEncoding) {
+ $s = base64_decode($s);
+ $fromEncoding = $toEncoding;
+ }
+
+ if ('BASE64' === $toEncoding) {
+ return base64_encode($s);
+ }
+
+ if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
+ if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
+ $fromEncoding = 'Windows-1252';
+ }
+ if ('UTF-8' !== $fromEncoding) {
+ $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
+ }
+
+ return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s);
+ }
+
+ if ('HTML-ENTITIES' === $fromEncoding) {
+ $s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8');
+ $fromEncoding = 'UTF-8';
+ }
+
+ return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
+ }
+
+ public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars)
+ {
+ $ok = true;
+ array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
+ if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
+ $ok = false;
+ }
+ });
+
+ return $ok ? $fromEncoding : false;
+ }
+
+ public static function mb_decode_mimeheader($s)
+ {
+ return iconv_mime_decode($s, 2, self::$internalEncoding);
+ }
+
+ public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
+ {
+ trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING);
+ }
+
+ public static function mb_decode_numericentity($s, $convmap, $encoding = null)
+ {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+ trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) {
+ return false;
+ }
+
+ if (null !== $encoding && !\is_scalar($encoding)) {
+ trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return ''; // Instead of null (cf. mb_encode_numericentity).
+ }
+
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ $cnt = floor(\count($convmap) / 4) * 4;
+
+ for ($i = 0; $i < $cnt; $i += 4) {
+ // collector_decode_htmlnumericentity ignores $convmap[$i + 3]
+ $convmap[$i] += $convmap[$i + 2];
+ $convmap[$i + 1] += $convmap[$i + 2];
+ }
+
+ $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
+ $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
+ for ($i = 0; $i < $cnt; $i += 4) {
+ if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
+ return self::mb_chr($c - $convmap[$i + 2]);
+ }
+ }
+
+ return $m[0];
+ }, $s);
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
+ }
+
+ public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
+ {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+ trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) {
+ return false;
+ }
+
+ if (null !== $encoding && !\is_scalar($encoding)) {
+ trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null; // Instead of '' (cf. mb_decode_numericentity).
+ }
+
+ if (null !== $is_hex && !\is_scalar($is_hex)) {
+ trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+
+ $cnt = floor(\count($convmap) / 4) * 4;
+ $i = 0;
+ $len = \strlen($s);
+ $result = '';
+
+ while ($i < $len) {
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+ $c = self::mb_ord($uchr);
+
+ for ($j = 0; $j < $cnt; $j += 4) {
+ if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
+ $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
+ $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';';
+ continue 2;
+ }
+ }
+ $result .= $uchr;
+ }
+
+ if (null === $encoding) {
+ return $result;
+ }
+
+ return iconv('UTF-8', $encoding.'//IGNORE', $result);
+ }
+
+ public static function mb_convert_case($s, $mode, $encoding = null)
+ {
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ if (\MB_CASE_TITLE == $mode) {
+ static $titleRegexp = null;
+ if (null === $titleRegexp) {
+ $titleRegexp = self::getData('titleCaseRegexp');
+ }
+ $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s);
+ } else {
+ if (\MB_CASE_UPPER == $mode) {
+ static $upper = null;
+ if (null === $upper) {
+ $upper = self::getData('upperCase');
+ }
+ $map = $upper;
+ } else {
+ if (self::MB_CASE_FOLD === $mode) {
+ static $caseFolding = null;
+ if (null === $caseFolding) {
+ $caseFolding = self::getData('caseFolding');
+ }
+ $s = strtr($s, $caseFolding);
+ }
+
+ static $lower = null;
+ if (null === $lower) {
+ $lower = self::getData('lowerCase');
+ }
+ $map = $lower;
+ }
+
+ static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+
+ $i = 0;
+ $len = \strlen($s);
+
+ while ($i < $len) {
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+
+ if (isset($map[$uchr])) {
+ $uchr = $map[$uchr];
+ $nlen = \strlen($uchr);
+
+ if ($nlen == $ulen) {
+ $nlen = $i;
+ do {
+ $s[--$nlen] = $uchr[--$ulen];
+ } while ($ulen);
+ } else {
+ $s = substr_replace($s, $uchr, $i - $ulen, $ulen);
+ $len += $nlen - $ulen;
+ $i += $nlen - $ulen;
+ }
+ }
+ }
+ }
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
+ }
+
+ public static function mb_internal_encoding($encoding = null)
+ {
+ if (null === $encoding) {
+ return self::$internalEncoding;
+ }
+
+ $normalizedEncoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) {
+ self::$internalEncoding = $normalizedEncoding;
+
+ return true;
+ }
+
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+
+ throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding));
+ }
+
+ public static function mb_language($lang = null)
+ {
+ if (null === $lang) {
+ return self::$language;
+ }
+
+ switch ($normalizedLang = strtolower($lang)) {
+ case 'uni':
+ case 'neutral':
+ self::$language = $normalizedLang;
+
+ return true;
+ }
+
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+
+ throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang));
+ }
+
+ public static function mb_list_encodings()
+ {
+ return ['UTF-8'];
+ }
+
+ public static function mb_encoding_aliases($encoding)
+ {
+ switch (strtoupper($encoding)) {
+ case 'UTF8':
+ case 'UTF-8':
+ return ['utf8'];
+ }
+
+ return false;
+ }
+
+ public static function mb_check_encoding($var = null, $encoding = null)
+ {
+ if (null === $encoding) {
+ if (null === $var) {
+ return false;
+ }
+ $encoding = self::$internalEncoding;
+ }
+
+ if (!\is_array($var)) {
+ return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var);
+ }
+
+ foreach ($var as $key => $value) {
+ if (!self::mb_check_encoding($key, $encoding)) {
+ return false;
+ }
+ if (!self::mb_check_encoding($value, $encoding)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
+ {
+ if (null === $encodingList) {
+ $encodingList = self::$encodingList;
+ } else {
+ if (!\is_array($encodingList)) {
+ $encodingList = array_map('trim', explode(',', $encodingList));
+ }
+ $encodingList = array_map('strtoupper', $encodingList);
+ }
+
+ foreach ($encodingList as $enc) {
+ switch ($enc) {
+ case 'ASCII':
+ if (!preg_match('/[\x80-\xFF]/', $str)) {
+ return $enc;
+ }
+ break;
+
+ case 'UTF8':
+ case 'UTF-8':
+ if (preg_match('//u', $str)) {
+ return 'UTF-8';
+ }
+ break;
+
+ default:
+ if (0 === strncmp($enc, 'ISO-8859-', 9)) {
+ return $enc;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public static function mb_detect_order($encodingList = null)
+ {
+ if (null === $encodingList) {
+ return self::$encodingList;
+ }
+
+ if (!\is_array($encodingList)) {
+ $encodingList = array_map('trim', explode(',', $encodingList));
+ }
+ $encodingList = array_map('strtoupper', $encodingList);
+
+ foreach ($encodingList as $enc) {
+ switch ($enc) {
+ default:
+ if (strncmp($enc, 'ISO-8859-', 9)) {
+ return false;
+ }
+ // no break
+ case 'ASCII':
+ case 'UTF8':
+ case 'UTF-8':
+ }
+ }
+
+ self::$encodingList = $encodingList;
+
+ return true;
+ }
+
+ public static function mb_strlen($s, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return \strlen($s);
+ }
+
+ return @iconv_strlen($s, $encoding);
+ }
+
+ public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return strpos($haystack, $needle, $offset);
+ }
+
+ $needle = (string) $needle;
+ if ('' === $needle) {
+ if (80000 > \PHP_VERSION_ID) {
+ trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING);
+
+ return false;
+ }
+
+ return 0;
+ }
+
+ return iconv_strpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return strrpos($haystack, $needle, $offset);
+ }
+
+ if ($offset != (int) $offset) {
+ $offset = 0;
+ } elseif ($offset = (int) $offset) {
+ if ($offset < 0) {
+ if (0 > $offset += self::mb_strlen($needle)) {
+ $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
+ }
+ $offset = 0;
+ } else {
+ $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
+ }
+ }
+
+ $pos = '' !== $needle || 80000 > \PHP_VERSION_ID
+ ? iconv_strrpos($haystack, $needle, $encoding)
+ : self::mb_strlen($haystack, $encoding);
+
+ return false !== $pos ? $offset + $pos : false;
+ }
+
+ public static function mb_str_split($string, $split_length = 1, $encoding = null)
+ {
+ if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) {
+ trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ if (1 > $split_length = (int) $split_length) {
+ if (80000 > \PHP_VERSION_ID) {
+ trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING);
+
+ return false;
+ }
+
+ throw new \ValueError('Argument #2 ($length) must be greater than 0');
+ }
+
+ if (null === $encoding) {
+ $encoding = mb_internal_encoding();
+ }
+
+ if ('UTF-8' === $encoding = self::getEncoding($encoding)) {
+ $rx = '/(';
+ while (65535 < $split_length) {
+ $rx .= '.{65535}';
+ $split_length -= 65535;
+ }
+ $rx .= '.{'.$split_length.'})/us';
+
+ return preg_split($rx, $string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY);
+ }
+
+ $result = [];
+ $length = mb_strlen($string, $encoding);
+
+ for ($i = 0; $i < $length; $i += $split_length) {
+ $result[] = mb_substr($string, $i, $split_length, $encoding);
+ }
+
+ return $result;
+ }
+
+ public static function mb_strtolower($s, $encoding = null)
+ {
+ return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding);
+ }
+
+ public static function mb_strtoupper($s, $encoding = null)
+ {
+ return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding);
+ }
+
+ public static function mb_substitute_character($c = null)
+ {
+ if (null === $c) {
+ return 'none';
+ }
+ if (0 === strcasecmp($c, 'none')) {
+ return true;
+ }
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+ if (\is_int($c) || 'long' === $c || 'entity' === $c) {
+ return false;
+ }
+
+ throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint');
+ }
+
+ public static function mb_substr($s, $start, $length = null, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return (string) substr($s, $start, null === $length ? 2147483647 : $length);
+ }
+
+ if ($start < 0) {
+ $start = iconv_strlen($s, $encoding) + $start;
+ if ($start < 0) {
+ $start = 0;
+ }
+ }
+
+ if (null === $length) {
+ $length = 2147483647;
+ } elseif ($length < 0) {
+ $length = iconv_strlen($s, $encoding) + $length - $start;
+ if ($length < 0) {
+ return '';
+ }
+ }
+
+ return (string) iconv_substr($s, $start, $length, $encoding);
+ }
+
+ public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [
+ self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding),
+ self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding),
+ ]);
+
+ return self::mb_strpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $pos = self::mb_stripos($haystack, $needle, 0, $encoding);
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ $pos = strrpos($haystack, $needle);
+ } else {
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
+ }
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
+ $pos = self::mb_strripos($haystack, $needle, $encoding);
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $haystack = self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding);
+ $needle = self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding);
+
+ $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack);
+ $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle);
+
+ return self::mb_strrpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $pos = strpos($haystack, $needle);
+ if (false === $pos) {
+ return false;
+ }
+ if ($part) {
+ return substr($haystack, 0, $pos);
+ }
+
+ return substr($haystack, $pos);
+ }
+
+ public static function mb_get_info($type = 'all')
+ {
+ $info = [
+ 'internal_encoding' => self::$internalEncoding,
+ 'http_output' => 'pass',
+ 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
+ 'func_overload' => 0,
+ 'func_overload_list' => 'no overload',
+ 'mail_charset' => 'UTF-8',
+ 'mail_header_encoding' => 'BASE64',
+ 'mail_body_encoding' => 'BASE64',
+ 'illegal_chars' => 0,
+ 'encoding_translation' => 'Off',
+ 'language' => self::$language,
+ 'detect_order' => self::$encodingList,
+ 'substitute_character' => 'none',
+ 'strict_detection' => 'Off',
+ ];
+
+ if ('all' === $type) {
+ return $info;
+ }
+ if (isset($info[$type])) {
+ return $info[$type];
+ }
+
+ return false;
+ }
+
+ public static function mb_http_input($type = '')
+ {
+ return false;
+ }
+
+ public static function mb_http_output($encoding = null)
+ {
+ return null !== $encoding ? 'pass' === $encoding : 'pass';
+ }
+
+ public static function mb_strwidth($s, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' !== $encoding) {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
+
+ return ($wide << 1) + iconv_strlen($s, 'UTF-8');
+ }
+
+ public static function mb_substr_count($haystack, $needle, $encoding = null)
+ {
+ return substr_count($haystack, $needle);
+ }
+
+ public static function mb_output_handler($contents, $status)
+ {
+ return $contents;
+ }
+
+ public static function mb_chr($code, $encoding = null)
+ {
+ if (0x80 > $code %= 0x200000) {
+ $s = \chr($code);
+ } elseif (0x800 > $code) {
+ $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
+ } elseif (0x10000 > $code) {
+ $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+ } else {
+ $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+ }
+
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+ $s = mb_convert_encoding($s, $encoding, 'UTF-8');
+ }
+
+ return $s;
+ }
+
+ public static function mb_ord($s, $encoding = null)
+ {
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+ $s = mb_convert_encoding($s, 'UTF-8', $encoding);
+ }
+
+ if (1 === \strlen($s)) {
+ return \ord($s);
+ }
+
+ $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
+ if (0xF0 <= $code) {
+ return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
+ }
+ if (0xE0 <= $code) {
+ return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
+ }
+ if (0xC0 <= $code) {
+ return (($code - 0xC0) << 6) + $s[2] - 0x80;
+ }
+
+ return $code;
+ }
+
+ public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null): string
+ {
+ if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) {
+ throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');
+ }
+
+ if (null === $encoding) {
+ $encoding = self::mb_internal_encoding();
+ } else {
+ self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given');
+ }
+
+ if (self::mb_strlen($pad_string, $encoding) <= 0) {
+ throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');
+ }
+
+ $paddingRequired = $length - self::mb_strlen($string, $encoding);
+
+ if ($paddingRequired < 1) {
+ return $string;
+ }
+
+ switch ($pad_type) {
+ case \STR_PAD_LEFT:
+ return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string;
+ case \STR_PAD_RIGHT:
+ return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding);
+ default:
+ $leftPaddingLength = floor($paddingRequired / 2);
+ $rightPaddingLength = $paddingRequired - $leftPaddingLength;
+
+ return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding);
+ }
+ }
+
+ public static function mb_ucfirst(string $string, ?string $encoding = null): string
+ {
+ if (null === $encoding) {
+ $encoding = self::mb_internal_encoding();
+ } else {
+ self::assertEncoding($encoding, 'mb_ucfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given');
+ }
+
+ $firstChar = mb_substr($string, 0, 1, $encoding);
+ $firstChar = mb_convert_case($firstChar, \MB_CASE_TITLE, $encoding);
+
+ return $firstChar.mb_substr($string, 1, null, $encoding);
+ }
+
+ public static function mb_lcfirst(string $string, ?string $encoding = null): string
+ {
+ if (null === $encoding) {
+ $encoding = self::mb_internal_encoding();
+ } else {
+ self::assertEncoding($encoding, 'mb_lcfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given');
+ }
+
+ $firstChar = mb_substr($string, 0, 1, $encoding);
+ $firstChar = mb_convert_case($firstChar, \MB_CASE_LOWER, $encoding);
+
+ return $firstChar.mb_substr($string, 1, null, $encoding);
+ }
+
+ private static function getSubpart($pos, $part, $haystack, $encoding)
+ {
+ if (false === $pos) {
+ return false;
+ }
+ if ($part) {
+ return self::mb_substr($haystack, 0, $pos, $encoding);
+ }
+
+ return self::mb_substr($haystack, $pos, null, $encoding);
+ }
+
+ private static function html_encoding_callback(array $m)
+ {
+ $i = 1;
+ $entities = '';
+ $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8'));
+
+ while (isset($m[$i])) {
+ if (0x80 > $m[$i]) {
+ $entities .= \chr($m[$i++]);
+ continue;
+ }
+ if (0xF0 <= $m[$i]) {
+ $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+ } elseif (0xE0 <= $m[$i]) {
+ $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+ } else {
+ $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
+ }
+
+ $entities .= '&#'.$c.';';
+ }
+
+ return $entities;
+ }
+
+ private static function title_case(array $s)
+ {
+ return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8');
+ }
+
+ private static function getData($file)
+ {
+ if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
+ return require $file;
+ }
+
+ return false;
+ }
+
+ private static function getEncoding($encoding)
+ {
+ if (null === $encoding) {
+ return self::$internalEncoding;
+ }
+
+ if ('UTF-8' === $encoding) {
+ return 'UTF-8';
+ }
+
+ $encoding = strtoupper($encoding);
+
+ if ('8BIT' === $encoding || 'BINARY' === $encoding) {
+ return 'CP850';
+ }
+
+ if ('UTF8' === $encoding) {
+ return 'UTF-8';
+ }
+
+ return $encoding;
+ }
+
+ public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string
+ {
+ return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__);
+ }
+
+ public static function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string
+ {
+ return self::mb_internal_trim('{^[%s]+}Du', $string, $characters, $encoding, __FUNCTION__);
+ }
+
+ public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string
+ {
+ return self::mb_internal_trim('{[%s]+$}D', $string, $characters, $encoding, __FUNCTION__);
+ }
+
+ private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function): string
+ {
+ if (null === $encoding) {
+ $encoding = self::mb_internal_encoding();
+ } else {
+ self::assertEncoding($encoding, $function.'(): Argument #3 ($encoding) must be a valid encoding, "%s" given');
+ }
+
+ if ('' === $characters) {
+ return null === $encoding ? $string : self::mb_convert_encoding($string, $encoding);
+ }
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $string)) {
+ $string = @iconv('UTF-8', 'UTF-8//IGNORE', $string);
+ }
+ if (null !== $characters && !preg_match('//u', $characters)) {
+ $characters = @iconv('UTF-8', 'UTF-8//IGNORE', $characters);
+ }
+ } else {
+ $string = iconv($encoding, 'UTF-8//IGNORE', $string);
+
+ if (null !== $characters) {
+ $characters = iconv($encoding, 'UTF-8//IGNORE', $characters);
+ }
+ }
+
+ if (null === $characters) {
+ $characters = "\\0 \f\n\r\t\v\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}";
+ } else {
+ $characters = preg_quote($characters);
+ }
+
+ $string = preg_replace(sprintf($regex, $characters), '', $string);
+
+ if (null === $encoding) {
+ return $string;
+ }
+
+ return iconv('UTF-8', $encoding.'//IGNORE', $string);
+ }
+
+ private static function assertEncoding(string $encoding, string $errorFormat): void
+ {
+ try {
+ $validEncoding = @self::mb_check_encoding('', $encoding);
+ } catch (\ValueError $e) {
+ throw new \ValueError(sprintf($errorFormat, $encoding));
+ }
+
+ // BC for PHP 7.3 and lower
+ if (!$validEncoding) {
+ throw new \ValueError(sprintf($errorFormat, $encoding));
+ }
+ }
+}
diff --git a/vendor/symfony/polyfill-mbstring/README.md b/vendor/symfony/polyfill-mbstring/README.md
new file mode 100644
index 000000000..478b40da2
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/README.md
@@ -0,0 +1,13 @@
+Symfony Polyfill / Mbstring
+===========================
+
+This component provides a partial, native PHP implementation for the
+[Mbstring](https://php.net/mbstring) extension.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php
new file mode 100644
index 000000000..512bba0bf
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php
@@ -0,0 +1,119 @@
+<?php
+
+return [
+ 'İ' => 'i̇',
+ 'µ' => 'μ',
+ 'ſ' => 's',
+ 'ͅ' => 'ι',
+ 'ς' => 'σ',
+ 'ϐ' => 'β',
+ 'ϑ' => 'θ',
+ 'ϕ' => 'φ',
+ 'ϖ' => 'π',
+ 'ϰ' => 'κ',
+ 'ϱ' => 'ρ',
+ 'ϵ' => 'ε',
+ 'ẛ' => 'ṡ',
+ 'ι' => 'ι',
+ 'ß' => 'ss',
+ 'ʼn' => 'ʼn',
+ 'ǰ' => 'ǰ',
+ 'ΐ' => 'ΐ',
+ 'ΰ' => 'ΰ',
+ 'և' => 'եւ',
+ 'ẖ' => 'ẖ',
+ 'ẗ' => 'ẗ',
+ 'ẘ' => 'ẘ',
+ 'ẙ' => 'ẙ',
+ 'ẚ' => 'aʾ',
+ 'ẞ' => 'ss',
+ 'ὐ' => 'ὐ',
+ 'ὒ' => 'ὒ',
+ 'ὔ' => 'ὔ',
+ 'ὖ' => 'ὖ',
+ 'ᾀ' => 'ἀι',
+ 'ᾁ' => 'ἁι',
+ 'ᾂ' => 'ἂι',
+ 'ᾃ' => 'ἃι',
+ 'ᾄ' => 'ἄι',
+ 'ᾅ' => 'ἅι',
+ 'ᾆ' => 'ἆι',
+ 'ᾇ' => 'ἇι',
+ 'ᾈ' => 'ἀι',
+ 'ᾉ' => 'ἁι',
+ 'ᾊ' => 'ἂι',
+ 'ᾋ' => 'ἃι',
+ 'ᾌ' => 'ἄι',
+ 'ᾍ' => 'ἅι',
+ 'ᾎ' => 'ἆι',
+ 'ᾏ' => 'ἇι',
+ 'ᾐ' => 'ἠι',
+ 'ᾑ' => 'ἡι',
+ 'ᾒ' => 'ἢι',
+ 'ᾓ' => 'ἣι',
+ 'ᾔ' => 'ἤι',
+ 'ᾕ' => 'ἥι',
+ 'ᾖ' => 'ἦι',
+ 'ᾗ' => 'ἧι',
+ 'ᾘ' => 'ἠι',
+ 'ᾙ' => 'ἡι',
+ 'ᾚ' => 'ἢι',
+ 'ᾛ' => 'ἣι',
+ 'ᾜ' => 'ἤι',
+ 'ᾝ' => 'ἥι',
+ 'ᾞ' => 'ἦι',
+ 'ᾟ' => 'ἧι',
+ 'ᾠ' => 'ὠι',
+ 'ᾡ' => 'ὡι',
+ 'ᾢ' => 'ὢι',
+ 'ᾣ' => 'ὣι',
+ 'ᾤ' => 'ὤι',
+ 'ᾥ' => 'ὥι',
+ 'ᾦ' => 'ὦι',
+ 'ᾧ' => 'ὧι',
+ 'ᾨ' => 'ὠι',
+ 'ᾩ' => 'ὡι',
+ 'ᾪ' => 'ὢι',
+ 'ᾫ' => 'ὣι',
+ 'ᾬ' => 'ὤι',
+ 'ᾭ' => 'ὥι',
+ 'ᾮ' => 'ὦι',
+ 'ᾯ' => 'ὧι',
+ 'ᾲ' => 'ὰι',
+ 'ᾳ' => 'αι',
+ 'ᾴ' => 'άι',
+ 'ᾶ' => 'ᾶ',
+ 'ᾷ' => 'ᾶι',
+ 'ᾼ' => 'αι',
+ 'ῂ' => 'ὴι',
+ 'ῃ' => 'ηι',
+ 'ῄ' => 'ήι',
+ 'ῆ' => 'ῆ',
+ 'ῇ' => 'ῆι',
+ 'ῌ' => 'ηι',
+ 'ῒ' => 'ῒ',
+ 'ῖ' => 'ῖ',
+ 'ῗ' => 'ῗ',
+ 'ῢ' => 'ῢ',
+ 'ῤ' => 'ῤ',
+ 'ῦ' => 'ῦ',
+ 'ῧ' => 'ῧ',
+ 'ῲ' => 'ὼι',
+ 'ῳ' => 'ωι',
+ 'ῴ' => 'ώι',
+ 'ῶ' => 'ῶ',
+ 'ῷ' => 'ῶι',
+ 'ῼ' => 'ωι',
+ 'ff' => 'ff',
+ 'fi' => 'fi',
+ 'fl' => 'fl',
+ 'ffi' => 'ffi',
+ 'ffl' => 'ffl',
+ 'ſt' => 'st',
+ 'st' => 'st',
+ 'ﬓ' => 'մն',
+ 'ﬔ' => 'մե',
+ 'ﬕ' => 'մի',
+ 'ﬖ' => 'վն',
+ 'ﬗ' => 'մխ',
+];
diff --git a/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
new file mode 100644
index 000000000..fac60b081
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
@@ -0,0 +1,1397 @@
+<?php
+
+return array (
+ 'A' => 'a',
+ 'B' => 'b',
+ 'C' => 'c',
+ 'D' => 'd',
+ 'E' => 'e',
+ 'F' => 'f',
+ 'G' => 'g',
+ 'H' => 'h',
+ 'I' => 'i',
+ 'J' => 'j',
+ 'K' => 'k',
+ 'L' => 'l',
+ 'M' => 'm',
+ 'N' => 'n',
+ 'O' => 'o',
+ 'P' => 'p',
+ 'Q' => 'q',
+ 'R' => 'r',
+ 'S' => 's',
+ 'T' => 't',
+ 'U' => 'u',
+ 'V' => 'v',
+ 'W' => 'w',
+ 'X' => 'x',
+ 'Y' => 'y',
+ 'Z' => 'z',
+ 'À' => 'à',
+ 'Á' => 'á',
+ 'Â' => 'â',
+ 'Ã' => 'ã',
+ 'Ä' => 'ä',
+ 'Å' => 'å',
+ 'Æ' => 'æ',
+ 'Ç' => 'ç',
+ 'È' => 'è',
+ 'É' => 'é',
+ 'Ê' => 'ê',
+ 'Ë' => 'ë',
+ 'Ì' => 'ì',
+ 'Í' => 'í',
+ 'Î' => 'î',
+ 'Ï' => 'ï',
+ 'Ð' => 'ð',
+ 'Ñ' => 'ñ',
+ 'Ò' => 'ò',
+ 'Ó' => 'ó',
+ 'Ô' => 'ô',
+ 'Õ' => 'õ',
+ 'Ö' => 'ö',
+ 'Ø' => 'ø',
+ 'Ù' => 'ù',
+ 'Ú' => 'ú',
+ 'Û' => 'û',
+ 'Ü' => 'ü',
+ 'Ý' => 'ý',
+ 'Þ' => 'þ',
+ 'Ā' => 'ā',
+ 'Ă' => 'ă',
+ 'Ą' => 'ą',
+ 'Ć' => 'ć',
+ 'Ĉ' => 'ĉ',
+ 'Ċ' => 'ċ',
+ 'Č' => 'č',
+ 'Ď' => 'ď',
+ 'Đ' => 'đ',
+ 'Ē' => 'ē',
+ 'Ĕ' => 'ĕ',
+ 'Ė' => 'ė',
+ 'Ę' => 'ę',
+ 'Ě' => 'ě',
+ 'Ĝ' => 'ĝ',
+ 'Ğ' => 'ğ',
+ 'Ġ' => 'ġ',
+ 'Ģ' => 'ģ',
+ 'Ĥ' => 'ĥ',
+ 'Ħ' => 'ħ',
+ 'Ĩ' => 'ĩ',
+ 'Ī' => 'ī',
+ 'Ĭ' => 'ĭ',
+ 'Į' => 'į',
+ 'İ' => 'i̇',
+ 'IJ' => 'ij',
+ 'Ĵ' => 'ĵ',
+ 'Ķ' => 'ķ',
+ 'Ĺ' => 'ĺ',
+ 'Ļ' => 'ļ',
+ 'Ľ' => 'ľ',
+ 'Ŀ' => 'ŀ',
+ 'Ł' => 'ł',
+ 'Ń' => 'ń',
+ 'Ņ' => 'ņ',
+ 'Ň' => 'ň',
+ 'Ŋ' => 'ŋ',
+ 'Ō' => 'ō',
+ 'Ŏ' => 'ŏ',
+ 'Ő' => 'ő',
+ 'Œ' => 'œ',
+ 'Ŕ' => 'ŕ',
+ 'Ŗ' => 'ŗ',
+ 'Ř' => 'ř',
+ 'Ś' => 'ś',
+ 'Ŝ' => 'ŝ',
+ 'Ş' => 'ş',
+ 'Š' => 'š',
+ 'Ţ' => 'ţ',
+ 'Ť' => 'ť',
+ 'Ŧ' => 'ŧ',
+ 'Ũ' => 'ũ',
+ 'Ū' => 'ū',
+ 'Ŭ' => 'ŭ',
+ 'Ů' => 'ů',
+ 'Ű' => 'ű',
+ 'Ų' => 'ų',
+ 'Ŵ' => 'ŵ',
+ 'Ŷ' => 'ŷ',
+ 'Ÿ' => 'ÿ',
+ 'Ź' => 'ź',
+ 'Ż' => 'ż',
+ 'Ž' => 'ž',
+ 'Ɓ' => 'ɓ',
+ 'Ƃ' => 'ƃ',
+ 'Ƅ' => 'ƅ',
+ 'Ɔ' => 'ɔ',
+ 'Ƈ' => 'ƈ',
+ 'Ɖ' => 'ɖ',
+ 'Ɗ' => 'ɗ',
+ 'Ƌ' => 'ƌ',
+ 'Ǝ' => 'ǝ',
+ 'Ə' => 'ə',
+ 'Ɛ' => 'ɛ',
+ 'Ƒ' => 'ƒ',
+ 'Ɠ' => 'ɠ',
+ 'Ɣ' => 'ɣ',
+ 'Ɩ' => 'ɩ',
+ 'Ɨ' => 'ɨ',
+ 'Ƙ' => 'ƙ',
+ 'Ɯ' => 'ɯ',
+ 'Ɲ' => 'ɲ',
+ 'Ɵ' => 'ɵ',
+ 'Ơ' => 'ơ',
+ 'Ƣ' => 'ƣ',
+ 'Ƥ' => 'ƥ',
+ 'Ʀ' => 'ʀ',
+ 'Ƨ' => 'ƨ',
+ 'Ʃ' => 'ʃ',
+ 'Ƭ' => 'ƭ',
+ 'Ʈ' => 'ʈ',
+ 'Ư' => 'ư',
+ 'Ʊ' => 'ʊ',
+ 'Ʋ' => 'ʋ',
+ 'Ƴ' => 'ƴ',
+ 'Ƶ' => 'ƶ',
+ 'Ʒ' => 'ʒ',
+ 'Ƹ' => 'ƹ',
+ 'Ƽ' => 'ƽ',
+ 'DŽ' => 'dž',
+ 'Dž' => 'dž',
+ 'LJ' => 'lj',
+ 'Lj' => 'lj',
+ 'NJ' => 'nj',
+ 'Nj' => 'nj',
+ 'Ǎ' => 'ǎ',
+ 'Ǐ' => 'ǐ',
+ 'Ǒ' => 'ǒ',
+ 'Ǔ' => 'ǔ',
+ 'Ǖ' => 'ǖ',
+ 'Ǘ' => 'ǘ',
+ 'Ǚ' => 'ǚ',
+ 'Ǜ' => 'ǜ',
+ 'Ǟ' => 'ǟ',
+ 'Ǡ' => 'ǡ',
+ 'Ǣ' => 'ǣ',
+ 'Ǥ' => 'ǥ',
+ 'Ǧ' => 'ǧ',
+ 'Ǩ' => 'ǩ',
+ 'Ǫ' => 'ǫ',
+ 'Ǭ' => 'ǭ',
+ 'Ǯ' => 'ǯ',
+ 'DZ' => 'dz',
+ 'Dz' => 'dz',
+ 'Ǵ' => 'ǵ',
+ 'Ƕ' => 'ƕ',
+ 'Ƿ' => 'ƿ',
+ 'Ǹ' => 'ǹ',
+ 'Ǻ' => 'ǻ',
+ 'Ǽ' => 'ǽ',
+ 'Ǿ' => 'ǿ',
+ 'Ȁ' => 'ȁ',
+ 'Ȃ' => 'ȃ',
+ 'Ȅ' => 'ȅ',
+ 'Ȇ' => 'ȇ',
+ 'Ȉ' => 'ȉ',
+ 'Ȋ' => 'ȋ',
+ 'Ȍ' => 'ȍ',
+ 'Ȏ' => 'ȏ',
+ 'Ȑ' => 'ȑ',
+ 'Ȓ' => 'ȓ',
+ 'Ȕ' => 'ȕ',
+ 'Ȗ' => 'ȗ',
+ 'Ș' => 'ș',
+ 'Ț' => 'ț',
+ 'Ȝ' => 'ȝ',
+ 'Ȟ' => 'ȟ',
+ 'Ƞ' => 'ƞ',
+ 'Ȣ' => 'ȣ',
+ 'Ȥ' => 'ȥ',
+ 'Ȧ' => 'ȧ',
+ 'Ȩ' => 'ȩ',
+ 'Ȫ' => 'ȫ',
+ 'Ȭ' => 'ȭ',
+ 'Ȯ' => 'ȯ',
+ 'Ȱ' => 'ȱ',
+ 'Ȳ' => 'ȳ',
+ 'Ⱥ' => 'ⱥ',
+ 'Ȼ' => 'ȼ',
+ 'Ƚ' => 'ƚ',
+ 'Ⱦ' => 'ⱦ',
+ 'Ɂ' => 'ɂ',
+ 'Ƀ' => 'ƀ',
+ 'Ʉ' => 'ʉ',
+ 'Ʌ' => 'ʌ',
+ 'Ɇ' => 'ɇ',
+ 'Ɉ' => 'ɉ',
+ 'Ɋ' => 'ɋ',
+ 'Ɍ' => 'ɍ',
+ 'Ɏ' => 'ɏ',
+ 'Ͱ' => 'ͱ',
+ 'Ͳ' => 'ͳ',
+ 'Ͷ' => 'ͷ',
+ 'Ϳ' => 'ϳ',
+ 'Ά' => 'ά',
+ 'Έ' => 'έ',
+ 'Ή' => 'ή',
+ 'Ί' => 'ί',
+ 'Ό' => 'ό',
+ 'Ύ' => 'ύ',
+ 'Ώ' => 'ώ',
+ 'Α' => 'α',
+ 'Β' => 'β',
+ 'Γ' => 'γ',
+ 'Δ' => 'δ',
+ 'Ε' => 'ε',
+ 'Ζ' => 'ζ',
+ 'Η' => 'η',
+ 'Θ' => 'θ',
+ 'Ι' => 'ι',
+ 'Κ' => 'κ',
+ 'Λ' => 'λ',
+ 'Μ' => 'μ',
+ 'Ν' => 'ν',
+ 'Ξ' => 'ξ',
+ 'Ο' => 'ο',
+ 'Π' => 'π',
+ 'Ρ' => 'ρ',
+ 'Σ' => 'σ',
+ 'Τ' => 'τ',
+ 'Υ' => 'υ',
+ 'Φ' => 'φ',
+ 'Χ' => 'χ',
+ 'Ψ' => 'ψ',
+ 'Ω' => 'ω',
+ 'Ϊ' => 'ϊ',
+ 'Ϋ' => 'ϋ',
+ 'Ϗ' => 'ϗ',
+ 'Ϙ' => 'ϙ',
+ 'Ϛ' => 'ϛ',
+ 'Ϝ' => 'ϝ',
+ 'Ϟ' => 'ϟ',
+ 'Ϡ' => 'ϡ',
+ 'Ϣ' => 'ϣ',
+ 'Ϥ' => 'ϥ',
+ 'Ϧ' => 'ϧ',
+ 'Ϩ' => 'ϩ',
+ 'Ϫ' => 'ϫ',
+ 'Ϭ' => 'ϭ',
+ 'Ϯ' => 'ϯ',
+ 'ϴ' => 'θ',
+ 'Ϸ' => 'ϸ',
+ 'Ϲ' => 'ϲ',
+ 'Ϻ' => 'ϻ',
+ 'Ͻ' => 'ͻ',
+ 'Ͼ' => 'ͼ',
+ 'Ͽ' => 'ͽ',
+ 'Ѐ' => 'ѐ',
+ 'Ё' => 'ё',
+ 'Ђ' => 'ђ',
+ 'Ѓ' => 'ѓ',
+ 'Є' => 'є',
+ 'Ѕ' => 'ѕ',
+ 'І' => 'і',
+ 'Ї' => 'ї',
+ 'Ј' => 'ј',
+ 'Љ' => 'љ',
+ 'Њ' => 'њ',
+ 'Ћ' => 'ћ',
+ 'Ќ' => 'ќ',
+ 'Ѝ' => 'ѝ',
+ 'Ў' => 'ў',
+ 'Џ' => 'џ',
+ 'А' => 'а',
+ 'Б' => 'б',
+ 'В' => 'в',
+ 'Г' => 'г',
+ 'Д' => 'д',
+ 'Е' => 'е',
+ 'Ж' => 'ж',
+ 'З' => 'з',
+ 'И' => 'и',
+ 'Й' => 'й',
+ 'К' => 'к',
+ 'Л' => 'л',
+ 'М' => 'м',
+ 'Н' => 'н',
+ 'О' => 'о',
+ 'П' => 'п',
+ 'Р' => 'р',
+ 'С' => 'с',
+ 'Т' => 'т',
+ 'У' => 'у',
+ 'Ф' => 'ф',
+ 'Х' => 'х',
+ 'Ц' => 'ц',
+ 'Ч' => 'ч',
+ 'Ш' => 'ш',
+ 'Щ' => 'щ',
+ 'Ъ' => 'ъ',
+ 'Ы' => 'ы',
+ 'Ь' => 'ь',
+ 'Э' => 'э',
+ 'Ю' => 'ю',
+ 'Я' => 'я',
+ 'Ѡ' => 'ѡ',
+ 'Ѣ' => 'ѣ',
+ 'Ѥ' => 'ѥ',
+ 'Ѧ' => 'ѧ',
+ 'Ѩ' => 'ѩ',
+ 'Ѫ' => 'ѫ',
+ 'Ѭ' => 'ѭ',
+ 'Ѯ' => 'ѯ',
+ 'Ѱ' => 'ѱ',
+ 'Ѳ' => 'ѳ',
+ 'Ѵ' => 'ѵ',
+ 'Ѷ' => 'ѷ',
+ 'Ѹ' => 'ѹ',
+ 'Ѻ' => 'ѻ',
+ 'Ѽ' => 'ѽ',
+ 'Ѿ' => 'ѿ',
+ 'Ҁ' => 'ҁ',
+ 'Ҋ' => 'ҋ',
+ 'Ҍ' => 'ҍ',
+ 'Ҏ' => 'ҏ',
+ 'Ґ' => 'ґ',
+ 'Ғ' => 'ғ',
+ 'Ҕ' => 'ҕ',
+ 'Җ' => 'җ',
+ 'Ҙ' => 'ҙ',
+ 'Қ' => 'қ',
+ 'Ҝ' => 'ҝ',
+ 'Ҟ' => 'ҟ',
+ 'Ҡ' => 'ҡ',
+ 'Ң' => 'ң',
+ 'Ҥ' => 'ҥ',
+ 'Ҧ' => 'ҧ',
+ 'Ҩ' => 'ҩ',
+ 'Ҫ' => 'ҫ',
+ 'Ҭ' => 'ҭ',
+ 'Ү' => 'ү',
+ 'Ұ' => 'ұ',
+ 'Ҳ' => 'ҳ',
+ 'Ҵ' => 'ҵ',
+ 'Ҷ' => 'ҷ',
+ 'Ҹ' => 'ҹ',
+ 'Һ' => 'һ',
+ 'Ҽ' => 'ҽ',
+ 'Ҿ' => 'ҿ',
+ 'Ӏ' => 'ӏ',
+ 'Ӂ' => 'ӂ',
+ 'Ӄ' => 'ӄ',
+ 'Ӆ' => 'ӆ',
+ 'Ӈ' => 'ӈ',
+ 'Ӊ' => 'ӊ',
+ 'Ӌ' => 'ӌ',
+ 'Ӎ' => 'ӎ',
+ 'Ӑ' => 'ӑ',
+ 'Ӓ' => 'ӓ',
+ 'Ӕ' => 'ӕ',
+ 'Ӗ' => 'ӗ',
+ 'Ә' => 'ә',
+ 'Ӛ' => 'ӛ',
+ 'Ӝ' => 'ӝ',
+ 'Ӟ' => 'ӟ',
+ 'Ӡ' => 'ӡ',
+ 'Ӣ' => 'ӣ',
+ 'Ӥ' => 'ӥ',
+ 'Ӧ' => 'ӧ',
+ 'Ө' => 'ө',
+ 'Ӫ' => 'ӫ',
+ 'Ӭ' => 'ӭ',
+ 'Ӯ' => 'ӯ',
+ 'Ӱ' => 'ӱ',
+ 'Ӳ' => 'ӳ',
+ 'Ӵ' => 'ӵ',
+ 'Ӷ' => 'ӷ',
+ 'Ӹ' => 'ӹ',
+ 'Ӻ' => 'ӻ',
+ 'Ӽ' => 'ӽ',
+ 'Ӿ' => 'ӿ',
+ 'Ԁ' => 'ԁ',
+ 'Ԃ' => 'ԃ',
+ 'Ԅ' => 'ԅ',
+ 'Ԇ' => 'ԇ',
+ 'Ԉ' => 'ԉ',
+ 'Ԋ' => 'ԋ',
+ 'Ԍ' => 'ԍ',
+ 'Ԏ' => 'ԏ',
+ 'Ԑ' => 'ԑ',
+ 'Ԓ' => 'ԓ',
+ 'Ԕ' => 'ԕ',
+ 'Ԗ' => 'ԗ',
+ 'Ԙ' => 'ԙ',
+ 'Ԛ' => 'ԛ',
+ 'Ԝ' => 'ԝ',
+ 'Ԟ' => 'ԟ',
+ 'Ԡ' => 'ԡ',
+ 'Ԣ' => 'ԣ',
+ 'Ԥ' => 'ԥ',
+ 'Ԧ' => 'ԧ',
+ 'Ԩ' => 'ԩ',
+ 'Ԫ' => 'ԫ',
+ 'Ԭ' => 'ԭ',
+ 'Ԯ' => 'ԯ',
+ 'Ա' => 'ա',
+ 'Բ' => 'բ',
+ 'Գ' => 'գ',
+ 'Դ' => 'դ',
+ 'Ե' => 'ե',
+ 'Զ' => 'զ',
+ 'Է' => 'է',
+ 'Ը' => 'ը',
+ 'Թ' => 'թ',
+ 'Ժ' => 'ժ',
+ 'Ի' => 'ի',
+ 'Լ' => 'լ',
+ 'Խ' => 'խ',
+ 'Ծ' => 'ծ',
+ 'Կ' => 'կ',
+ 'Հ' => 'հ',
+ 'Ձ' => 'ձ',
+ 'Ղ' => 'ղ',
+ 'Ճ' => 'ճ',
+ 'Մ' => 'մ',
+ 'Յ' => 'յ',
+ 'Ն' => 'ն',
+ 'Շ' => 'շ',
+ 'Ո' => 'ո',
+ 'Չ' => 'չ',
+ 'Պ' => 'պ',
+ 'Ջ' => 'ջ',
+ 'Ռ' => 'ռ',
+ 'Ս' => 'ս',
+ 'Վ' => 'վ',
+ 'Տ' => 'տ',
+ 'Ր' => 'ր',
+ 'Ց' => 'ց',
+ 'Ւ' => 'ւ',
+ 'Փ' => 'փ',
+ 'Ք' => 'ք',
+ 'Օ' => 'օ',
+ 'Ֆ' => 'ֆ',
+ 'Ⴀ' => 'ⴀ',
+ 'Ⴁ' => 'ⴁ',
+ 'Ⴂ' => 'ⴂ',
+ 'Ⴃ' => 'ⴃ',
+ 'Ⴄ' => 'ⴄ',
+ 'Ⴅ' => 'ⴅ',
+ 'Ⴆ' => 'ⴆ',
+ 'Ⴇ' => 'ⴇ',
+ 'Ⴈ' => 'ⴈ',
+ 'Ⴉ' => 'ⴉ',
+ 'Ⴊ' => 'ⴊ',
+ 'Ⴋ' => 'ⴋ',
+ 'Ⴌ' => 'ⴌ',
+ 'Ⴍ' => 'ⴍ',
+ 'Ⴎ' => 'ⴎ',
+ 'Ⴏ' => 'ⴏ',
+ 'Ⴐ' => 'ⴐ',
+ 'Ⴑ' => 'ⴑ',
+ 'Ⴒ' => 'ⴒ',
+ 'Ⴓ' => 'ⴓ',
+ 'Ⴔ' => 'ⴔ',
+ 'Ⴕ' => 'ⴕ',
+ 'Ⴖ' => 'ⴖ',
+ 'Ⴗ' => 'ⴗ',
+ 'Ⴘ' => 'ⴘ',
+ 'Ⴙ' => 'ⴙ',
+ 'Ⴚ' => 'ⴚ',
+ 'Ⴛ' => 'ⴛ',
+ 'Ⴜ' => 'ⴜ',
+ 'Ⴝ' => 'ⴝ',
+ 'Ⴞ' => 'ⴞ',
+ 'Ⴟ' => 'ⴟ',
+ 'Ⴠ' => 'ⴠ',
+ 'Ⴡ' => 'ⴡ',
+ 'Ⴢ' => 'ⴢ',
+ 'Ⴣ' => 'ⴣ',
+ 'Ⴤ' => 'ⴤ',
+ 'Ⴥ' => 'ⴥ',
+ 'Ⴧ' => 'ⴧ',
+ 'Ⴭ' => 'ⴭ',
+ 'Ꭰ' => 'ꭰ',
+ 'Ꭱ' => 'ꭱ',
+ 'Ꭲ' => 'ꭲ',
+ 'Ꭳ' => 'ꭳ',
+ 'Ꭴ' => 'ꭴ',
+ 'Ꭵ' => 'ꭵ',
+ 'Ꭶ' => 'ꭶ',
+ 'Ꭷ' => 'ꭷ',
+ 'Ꭸ' => 'ꭸ',
+ 'Ꭹ' => 'ꭹ',
+ 'Ꭺ' => 'ꭺ',
+ 'Ꭻ' => 'ꭻ',
+ 'Ꭼ' => 'ꭼ',
+ 'Ꭽ' => 'ꭽ',
+ 'Ꭾ' => 'ꭾ',
+ 'Ꭿ' => 'ꭿ',
+ 'Ꮀ' => 'ꮀ',
+ 'Ꮁ' => 'ꮁ',
+ 'Ꮂ' => 'ꮂ',
+ 'Ꮃ' => 'ꮃ',
+ 'Ꮄ' => 'ꮄ',
+ 'Ꮅ' => 'ꮅ',
+ 'Ꮆ' => 'ꮆ',
+ 'Ꮇ' => 'ꮇ',
+ 'Ꮈ' => 'ꮈ',
+ 'Ꮉ' => 'ꮉ',
+ 'Ꮊ' => 'ꮊ',
+ 'Ꮋ' => 'ꮋ',
+ 'Ꮌ' => 'ꮌ',
+ 'Ꮍ' => 'ꮍ',
+ 'Ꮎ' => 'ꮎ',
+ 'Ꮏ' => 'ꮏ',
+ 'Ꮐ' => 'ꮐ',
+ 'Ꮑ' => 'ꮑ',
+ 'Ꮒ' => 'ꮒ',
+ 'Ꮓ' => 'ꮓ',
+ 'Ꮔ' => 'ꮔ',
+ 'Ꮕ' => 'ꮕ',
+ 'Ꮖ' => 'ꮖ',
+ 'Ꮗ' => 'ꮗ',
+ 'Ꮘ' => 'ꮘ',
+ 'Ꮙ' => 'ꮙ',
+ 'Ꮚ' => 'ꮚ',
+ 'Ꮛ' => 'ꮛ',
+ 'Ꮜ' => 'ꮜ',
+ 'Ꮝ' => 'ꮝ',
+ 'Ꮞ' => 'ꮞ',
+ 'Ꮟ' => 'ꮟ',
+ 'Ꮠ' => 'ꮠ',
+ 'Ꮡ' => 'ꮡ',
+ 'Ꮢ' => 'ꮢ',
+ 'Ꮣ' => 'ꮣ',
+ 'Ꮤ' => 'ꮤ',
+ 'Ꮥ' => 'ꮥ',
+ 'Ꮦ' => 'ꮦ',
+ 'Ꮧ' => 'ꮧ',
+ 'Ꮨ' => 'ꮨ',
+ 'Ꮩ' => 'ꮩ',
+ 'Ꮪ' => 'ꮪ',
+ 'Ꮫ' => 'ꮫ',
+ 'Ꮬ' => 'ꮬ',
+ 'Ꮭ' => 'ꮭ',
+ 'Ꮮ' => 'ꮮ',
+ 'Ꮯ' => 'ꮯ',
+ 'Ꮰ' => 'ꮰ',
+ 'Ꮱ' => 'ꮱ',
+ 'Ꮲ' => 'ꮲ',
+ 'Ꮳ' => 'ꮳ',
+ 'Ꮴ' => 'ꮴ',
+ 'Ꮵ' => 'ꮵ',
+ 'Ꮶ' => 'ꮶ',
+ 'Ꮷ' => 'ꮷ',
+ 'Ꮸ' => 'ꮸ',
+ 'Ꮹ' => 'ꮹ',
+ 'Ꮺ' => 'ꮺ',
+ 'Ꮻ' => 'ꮻ',
+ 'Ꮼ' => 'ꮼ',
+ 'Ꮽ' => 'ꮽ',
+ 'Ꮾ' => 'ꮾ',
+ 'Ꮿ' => 'ꮿ',
+ 'Ᏸ' => 'ᏸ',
+ 'Ᏹ' => 'ᏹ',
+ 'Ᏺ' => 'ᏺ',
+ 'Ᏻ' => 'ᏻ',
+ 'Ᏼ' => 'ᏼ',
+ 'Ᏽ' => 'ᏽ',
+ 'Ა' => 'ა',
+ 'Ბ' => 'ბ',
+ 'Გ' => 'გ',
+ 'Დ' => 'დ',
+ 'Ე' => 'ე',
+ 'Ვ' => 'ვ',
+ 'Ზ' => 'ზ',
+ 'Თ' => 'თ',
+ 'Ი' => 'ი',
+ 'Კ' => 'კ',
+ 'Ლ' => 'ლ',
+ 'Მ' => 'მ',
+ 'Ნ' => 'ნ',
+ 'Ო' => 'ო',
+ 'Პ' => 'პ',
+ 'Ჟ' => 'ჟ',
+ 'Რ' => 'რ',
+ 'Ს' => 'ს',
+ 'Ტ' => 'ტ',
+ 'Უ' => 'უ',
+ 'Ფ' => 'ფ',
+ 'Ქ' => 'ქ',
+ 'Ღ' => 'ღ',
+ 'Ყ' => 'ყ',
+ 'Შ' => 'შ',
+ 'Ჩ' => 'ჩ',
+ 'Ც' => 'ც',
+ 'Ძ' => 'ძ',
+ 'Წ' => 'წ',
+ 'Ჭ' => 'ჭ',
+ 'Ხ' => 'ხ',
+ 'Ჯ' => 'ჯ',
+ 'Ჰ' => 'ჰ',
+ 'Ჱ' => 'ჱ',
+ 'Ჲ' => 'ჲ',
+ 'Ჳ' => 'ჳ',
+ 'Ჴ' => 'ჴ',
+ 'Ჵ' => 'ჵ',
+ 'Ჶ' => 'ჶ',
+ 'Ჷ' => 'ჷ',
+ 'Ჸ' => 'ჸ',
+ 'Ჹ' => 'ჹ',
+ 'Ჺ' => 'ჺ',
+ 'Ჽ' => 'ჽ',
+ 'Ჾ' => 'ჾ',
+ 'Ჿ' => 'ჿ',
+ 'Ḁ' => 'ḁ',
+ 'Ḃ' => 'ḃ',
+ 'Ḅ' => 'ḅ',
+ 'Ḇ' => 'ḇ',
+ 'Ḉ' => 'ḉ',
+ 'Ḋ' => 'ḋ',
+ 'Ḍ' => 'ḍ',
+ 'Ḏ' => 'ḏ',
+ 'Ḑ' => 'ḑ',
+ 'Ḓ' => 'ḓ',
+ 'Ḕ' => 'ḕ',
+ 'Ḗ' => 'ḗ',
+ 'Ḙ' => 'ḙ',
+ 'Ḛ' => 'ḛ',
+ 'Ḝ' => 'ḝ',
+ 'Ḟ' => 'ḟ',
+ 'Ḡ' => 'ḡ',
+ 'Ḣ' => 'ḣ',
+ 'Ḥ' => 'ḥ',
+ 'Ḧ' => 'ḧ',
+ 'Ḩ' => 'ḩ',
+ 'Ḫ' => 'ḫ',
+ 'Ḭ' => 'ḭ',
+ 'Ḯ' => 'ḯ',
+ 'Ḱ' => 'ḱ',
+ 'Ḳ' => 'ḳ',
+ 'Ḵ' => 'ḵ',
+ 'Ḷ' => 'ḷ',
+ 'Ḹ' => 'ḹ',
+ 'Ḻ' => 'ḻ',
+ 'Ḽ' => 'ḽ',
+ 'Ḿ' => 'ḿ',
+ 'Ṁ' => 'ṁ',
+ 'Ṃ' => 'ṃ',
+ 'Ṅ' => 'ṅ',
+ 'Ṇ' => 'ṇ',
+ 'Ṉ' => 'ṉ',
+ 'Ṋ' => 'ṋ',
+ 'Ṍ' => 'ṍ',
+ 'Ṏ' => 'ṏ',
+ 'Ṑ' => 'ṑ',
+ 'Ṓ' => 'ṓ',
+ 'Ṕ' => 'ṕ',
+ 'Ṗ' => 'ṗ',
+ 'Ṙ' => 'ṙ',
+ 'Ṛ' => 'ṛ',
+ 'Ṝ' => 'ṝ',
+ 'Ṟ' => 'ṟ',
+ 'Ṡ' => 'ṡ',
+ 'Ṣ' => 'ṣ',
+ 'Ṥ' => 'ṥ',
+ 'Ṧ' => 'ṧ',
+ 'Ṩ' => 'ṩ',
+ 'Ṫ' => 'ṫ',
+ 'Ṭ' => 'ṭ',
+ 'Ṯ' => 'ṯ',
+ 'Ṱ' => 'ṱ',
+ 'Ṳ' => 'ṳ',
+ 'Ṵ' => 'ṵ',
+ 'Ṷ' => 'ṷ',
+ 'Ṹ' => 'ṹ',
+ 'Ṻ' => 'ṻ',
+ 'Ṽ' => 'ṽ',
+ 'Ṿ' => 'ṿ',
+ 'Ẁ' => 'ẁ',
+ 'Ẃ' => 'ẃ',
+ 'Ẅ' => 'ẅ',
+ 'Ẇ' => 'ẇ',
+ 'Ẉ' => 'ẉ',
+ 'Ẋ' => 'ẋ',
+ 'Ẍ' => 'ẍ',
+ 'Ẏ' => 'ẏ',
+ 'Ẑ' => 'ẑ',
+ 'Ẓ' => 'ẓ',
+ 'Ẕ' => 'ẕ',
+ 'ẞ' => 'ß',
+ 'Ạ' => 'ạ',
+ 'Ả' => 'ả',
+ 'Ấ' => 'ấ',
+ 'Ầ' => 'ầ',
+ 'Ẩ' => 'ẩ',
+ 'Ẫ' => 'ẫ',
+ 'Ậ' => 'ậ',
+ 'Ắ' => 'ắ',
+ 'Ằ' => 'ằ',
+ 'Ẳ' => 'ẳ',
+ 'Ẵ' => 'ẵ',
+ 'Ặ' => 'ặ',
+ 'Ẹ' => 'ẹ',
+ 'Ẻ' => 'ẻ',
+ 'Ẽ' => 'ẽ',
+ 'Ế' => 'ế',
+ 'Ề' => 'ề',
+ 'Ể' => 'ể',
+ 'Ễ' => 'ễ',
+ 'Ệ' => 'ệ',
+ 'Ỉ' => 'ỉ',
+ 'Ị' => 'ị',
+ 'Ọ' => 'ọ',
+ 'Ỏ' => 'ỏ',
+ 'Ố' => 'ố',
+ 'Ồ' => 'ồ',
+ 'Ổ' => 'ổ',
+ 'Ỗ' => 'ỗ',
+ 'Ộ' => 'ộ',
+ 'Ớ' => 'ớ',
+ 'Ờ' => 'ờ',
+ 'Ở' => 'ở',
+ 'Ỡ' => 'ỡ',
+ 'Ợ' => 'ợ',
+ 'Ụ' => 'ụ',
+ 'Ủ' => 'ủ',
+ 'Ứ' => 'ứ',
+ 'Ừ' => 'ừ',
+ 'Ử' => 'ử',
+ 'Ữ' => 'ữ',
+ 'Ự' => 'ự',
+ 'Ỳ' => 'ỳ',
+ 'Ỵ' => 'ỵ',
+ 'Ỷ' => 'ỷ',
+ 'Ỹ' => 'ỹ',
+ 'Ỻ' => 'ỻ',
+ 'Ỽ' => 'ỽ',
+ 'Ỿ' => 'ỿ',
+ 'Ἀ' => 'ἀ',
+ 'Ἁ' => 'ἁ',
+ 'Ἂ' => 'ἂ',
+ 'Ἃ' => 'ἃ',
+ 'Ἄ' => 'ἄ',
+ 'Ἅ' => 'ἅ',
+ 'Ἆ' => 'ἆ',
+ 'Ἇ' => 'ἇ',
+ 'Ἐ' => 'ἐ',
+ 'Ἑ' => 'ἑ',
+ 'Ἒ' => 'ἒ',
+ 'Ἓ' => 'ἓ',
+ 'Ἔ' => 'ἔ',
+ 'Ἕ' => 'ἕ',
+ 'Ἠ' => 'ἠ',
+ 'Ἡ' => 'ἡ',
+ 'Ἢ' => 'ἢ',
+ 'Ἣ' => 'ἣ',
+ 'Ἤ' => 'ἤ',
+ 'Ἥ' => 'ἥ',
+ 'Ἦ' => 'ἦ',
+ 'Ἧ' => 'ἧ',
+ 'Ἰ' => 'ἰ',
+ 'Ἱ' => 'ἱ',
+ 'Ἲ' => 'ἲ',
+ 'Ἳ' => 'ἳ',
+ 'Ἴ' => 'ἴ',
+ 'Ἵ' => 'ἵ',
+ 'Ἶ' => 'ἶ',
+ 'Ἷ' => 'ἷ',
+ 'Ὀ' => 'ὀ',
+ 'Ὁ' => 'ὁ',
+ 'Ὂ' => 'ὂ',
+ 'Ὃ' => 'ὃ',
+ 'Ὄ' => 'ὄ',
+ 'Ὅ' => 'ὅ',
+ 'Ὑ' => 'ὑ',
+ 'Ὓ' => 'ὓ',
+ 'Ὕ' => 'ὕ',
+ 'Ὗ' => 'ὗ',
+ 'Ὠ' => 'ὠ',
+ 'Ὡ' => 'ὡ',
+ 'Ὢ' => 'ὢ',
+ 'Ὣ' => 'ὣ',
+ 'Ὤ' => 'ὤ',
+ 'Ὥ' => 'ὥ',
+ 'Ὦ' => 'ὦ',
+ 'Ὧ' => 'ὧ',
+ 'ᾈ' => 'ᾀ',
+ 'ᾉ' => 'ᾁ',
+ 'ᾊ' => 'ᾂ',
+ 'ᾋ' => 'ᾃ',
+ 'ᾌ' => 'ᾄ',
+ 'ᾍ' => 'ᾅ',
+ 'ᾎ' => 'ᾆ',
+ 'ᾏ' => 'ᾇ',
+ 'ᾘ' => 'ᾐ',
+ 'ᾙ' => 'ᾑ',
+ 'ᾚ' => 'ᾒ',
+ 'ᾛ' => 'ᾓ',
+ 'ᾜ' => 'ᾔ',
+ 'ᾝ' => 'ᾕ',
+ 'ᾞ' => 'ᾖ',
+ 'ᾟ' => 'ᾗ',
+ 'ᾨ' => 'ᾠ',
+ 'ᾩ' => 'ᾡ',
+ 'ᾪ' => 'ᾢ',
+ 'ᾫ' => 'ᾣ',
+ 'ᾬ' => 'ᾤ',
+ 'ᾭ' => 'ᾥ',
+ 'ᾮ' => 'ᾦ',
+ 'ᾯ' => 'ᾧ',
+ 'Ᾰ' => 'ᾰ',
+ 'Ᾱ' => 'ᾱ',
+ 'Ὰ' => 'ὰ',
+ 'Ά' => 'ά',
+ 'ᾼ' => 'ᾳ',
+ 'Ὲ' => 'ὲ',
+ 'Έ' => 'έ',
+ 'Ὴ' => 'ὴ',
+ 'Ή' => 'ή',
+ 'ῌ' => 'ῃ',
+ 'Ῐ' => 'ῐ',
+ 'Ῑ' => 'ῑ',
+ 'Ὶ' => 'ὶ',
+ 'Ί' => 'ί',
+ 'Ῠ' => 'ῠ',
+ 'Ῡ' => 'ῡ',
+ 'Ὺ' => 'ὺ',
+ 'Ύ' => 'ύ',
+ 'Ῥ' => 'ῥ',
+ 'Ὸ' => 'ὸ',
+ 'Ό' => 'ό',
+ 'Ὼ' => 'ὼ',
+ 'Ώ' => 'ώ',
+ 'ῼ' => 'ῳ',
+ 'Ω' => 'ω',
+ 'K' => 'k',
+ 'Å' => 'å',
+ 'Ⅎ' => 'ⅎ',
+ 'Ⅰ' => 'ⅰ',
+ 'Ⅱ' => 'ⅱ',
+ 'Ⅲ' => 'ⅲ',
+ 'Ⅳ' => 'ⅳ',
+ 'Ⅴ' => 'ⅴ',
+ 'Ⅵ' => 'ⅵ',
+ 'Ⅶ' => 'ⅶ',
+ 'Ⅷ' => 'ⅷ',
+ 'Ⅸ' => 'ⅸ',
+ 'Ⅹ' => 'ⅹ',
+ 'Ⅺ' => 'ⅺ',
+ 'Ⅻ' => 'ⅻ',
+ 'Ⅼ' => 'ⅼ',
+ 'Ⅽ' => 'ⅽ',
+ 'Ⅾ' => 'ⅾ',
+ 'Ⅿ' => 'ⅿ',
+ 'Ↄ' => 'ↄ',
+ 'Ⓐ' => 'ⓐ',
+ 'Ⓑ' => 'ⓑ',
+ 'Ⓒ' => 'ⓒ',
+ 'Ⓓ' => 'ⓓ',
+ 'Ⓔ' => 'ⓔ',
+ 'Ⓕ' => 'ⓕ',
+ 'Ⓖ' => 'ⓖ',
+ 'Ⓗ' => 'ⓗ',
+ 'Ⓘ' => 'ⓘ',
+ 'Ⓙ' => 'ⓙ',
+ 'Ⓚ' => 'ⓚ',
+ 'Ⓛ' => 'ⓛ',
+ 'Ⓜ' => 'ⓜ',
+ 'Ⓝ' => 'ⓝ',
+ 'Ⓞ' => 'ⓞ',
+ 'Ⓟ' => 'ⓟ',
+ 'Ⓠ' => 'ⓠ',
+ 'Ⓡ' => 'ⓡ',
+ 'Ⓢ' => 'ⓢ',
+ 'Ⓣ' => 'ⓣ',
+ 'Ⓤ' => 'ⓤ',
+ 'Ⓥ' => 'ⓥ',
+ 'Ⓦ' => 'ⓦ',
+ 'Ⓧ' => 'ⓧ',
+ 'Ⓨ' => 'ⓨ',
+ 'Ⓩ' => 'ⓩ',
+ 'Ⰰ' => 'ⰰ',
+ 'Ⰱ' => 'ⰱ',
+ 'Ⰲ' => 'ⰲ',
+ 'Ⰳ' => 'ⰳ',
+ 'Ⰴ' => 'ⰴ',
+ 'Ⰵ' => 'ⰵ',
+ 'Ⰶ' => 'ⰶ',
+ 'Ⰷ' => 'ⰷ',
+ 'Ⰸ' => 'ⰸ',
+ 'Ⰹ' => 'ⰹ',
+ 'Ⰺ' => 'ⰺ',
+ 'Ⰻ' => 'ⰻ',
+ 'Ⰼ' => 'ⰼ',
+ 'Ⰽ' => 'ⰽ',
+ 'Ⰾ' => 'ⰾ',
+ 'Ⰿ' => 'ⰿ',
+ 'Ⱀ' => 'ⱀ',
+ 'Ⱁ' => 'ⱁ',
+ 'Ⱂ' => 'ⱂ',
+ 'Ⱃ' => 'ⱃ',
+ 'Ⱄ' => 'ⱄ',
+ 'Ⱅ' => 'ⱅ',
+ 'Ⱆ' => 'ⱆ',
+ 'Ⱇ' => 'ⱇ',
+ 'Ⱈ' => 'ⱈ',
+ 'Ⱉ' => 'ⱉ',
+ 'Ⱊ' => 'ⱊ',
+ 'Ⱋ' => 'ⱋ',
+ 'Ⱌ' => 'ⱌ',
+ 'Ⱍ' => 'ⱍ',
+ 'Ⱎ' => 'ⱎ',
+ 'Ⱏ' => 'ⱏ',
+ 'Ⱐ' => 'ⱐ',
+ 'Ⱑ' => 'ⱑ',
+ 'Ⱒ' => 'ⱒ',
+ 'Ⱓ' => 'ⱓ',
+ 'Ⱔ' => 'ⱔ',
+ 'Ⱕ' => 'ⱕ',
+ 'Ⱖ' => 'ⱖ',
+ 'Ⱗ' => 'ⱗ',
+ 'Ⱘ' => 'ⱘ',
+ 'Ⱙ' => 'ⱙ',
+ 'Ⱚ' => 'ⱚ',
+ 'Ⱛ' => 'ⱛ',
+ 'Ⱜ' => 'ⱜ',
+ 'Ⱝ' => 'ⱝ',
+ 'Ⱞ' => 'ⱞ',
+ 'Ⱡ' => 'ⱡ',
+ 'Ɫ' => 'ɫ',
+ 'Ᵽ' => 'ᵽ',
+ 'Ɽ' => 'ɽ',
+ 'Ⱨ' => 'ⱨ',
+ 'Ⱪ' => 'ⱪ',
+ 'Ⱬ' => 'ⱬ',
+ 'Ɑ' => 'ɑ',
+ 'Ɱ' => 'ɱ',
+ 'Ɐ' => 'ɐ',
+ 'Ɒ' => 'ɒ',
+ 'Ⱳ' => 'ⱳ',
+ 'Ⱶ' => 'ⱶ',
+ 'Ȿ' => 'ȿ',
+ 'Ɀ' => 'ɀ',
+ 'Ⲁ' => 'ⲁ',
+ 'Ⲃ' => 'ⲃ',
+ 'Ⲅ' => 'ⲅ',
+ 'Ⲇ' => 'ⲇ',
+ 'Ⲉ' => 'ⲉ',
+ 'Ⲋ' => 'ⲋ',
+ 'Ⲍ' => 'ⲍ',
+ 'Ⲏ' => 'ⲏ',
+ 'Ⲑ' => 'ⲑ',
+ 'Ⲓ' => 'ⲓ',
+ 'Ⲕ' => 'ⲕ',
+ 'Ⲗ' => 'ⲗ',
+ 'Ⲙ' => 'ⲙ',
+ 'Ⲛ' => 'ⲛ',
+ 'Ⲝ' => 'ⲝ',
+ 'Ⲟ' => 'ⲟ',
+ 'Ⲡ' => 'ⲡ',
+ 'Ⲣ' => 'ⲣ',
+ 'Ⲥ' => 'ⲥ',
+ 'Ⲧ' => 'ⲧ',
+ 'Ⲩ' => 'ⲩ',
+ 'Ⲫ' => 'ⲫ',
+ 'Ⲭ' => 'ⲭ',
+ 'Ⲯ' => 'ⲯ',
+ 'Ⲱ' => 'ⲱ',
+ 'Ⲳ' => 'ⲳ',
+ 'Ⲵ' => 'ⲵ',
+ 'Ⲷ' => 'ⲷ',
+ 'Ⲹ' => 'ⲹ',
+ 'Ⲻ' => 'ⲻ',
+ 'Ⲽ' => 'ⲽ',
+ 'Ⲿ' => 'ⲿ',
+ 'Ⳁ' => 'ⳁ',
+ 'Ⳃ' => 'ⳃ',
+ 'Ⳅ' => 'ⳅ',
+ 'Ⳇ' => 'ⳇ',
+ 'Ⳉ' => 'ⳉ',
+ 'Ⳋ' => 'ⳋ',
+ 'Ⳍ' => 'ⳍ',
+ 'Ⳏ' => 'ⳏ',
+ 'Ⳑ' => 'ⳑ',
+ 'Ⳓ' => 'ⳓ',
+ 'Ⳕ' => 'ⳕ',
+ 'Ⳗ' => 'ⳗ',
+ 'Ⳙ' => 'ⳙ',
+ 'Ⳛ' => 'ⳛ',
+ 'Ⳝ' => 'ⳝ',
+ 'Ⳟ' => 'ⳟ',
+ 'Ⳡ' => 'ⳡ',
+ 'Ⳣ' => 'ⳣ',
+ 'Ⳬ' => 'ⳬ',
+ 'Ⳮ' => 'ⳮ',
+ 'Ⳳ' => 'ⳳ',
+ 'Ꙁ' => 'ꙁ',
+ 'Ꙃ' => 'ꙃ',
+ 'Ꙅ' => 'ꙅ',
+ 'Ꙇ' => 'ꙇ',
+ 'Ꙉ' => 'ꙉ',
+ 'Ꙋ' => 'ꙋ',
+ 'Ꙍ' => 'ꙍ',
+ 'Ꙏ' => 'ꙏ',
+ 'Ꙑ' => 'ꙑ',
+ 'Ꙓ' => 'ꙓ',
+ 'Ꙕ' => 'ꙕ',
+ 'Ꙗ' => 'ꙗ',
+ 'Ꙙ' => 'ꙙ',
+ 'Ꙛ' => 'ꙛ',
+ 'Ꙝ' => 'ꙝ',
+ 'Ꙟ' => 'ꙟ',
+ 'Ꙡ' => 'ꙡ',
+ 'Ꙣ' => 'ꙣ',
+ 'Ꙥ' => 'ꙥ',
+ 'Ꙧ' => 'ꙧ',
+ 'Ꙩ' => 'ꙩ',
+ 'Ꙫ' => 'ꙫ',
+ 'Ꙭ' => 'ꙭ',
+ 'Ꚁ' => 'ꚁ',
+ 'Ꚃ' => 'ꚃ',
+ 'Ꚅ' => 'ꚅ',
+ 'Ꚇ' => 'ꚇ',
+ 'Ꚉ' => 'ꚉ',
+ 'Ꚋ' => 'ꚋ',
+ 'Ꚍ' => 'ꚍ',
+ 'Ꚏ' => 'ꚏ',
+ 'Ꚑ' => 'ꚑ',
+ 'Ꚓ' => 'ꚓ',
+ 'Ꚕ' => 'ꚕ',
+ 'Ꚗ' => 'ꚗ',
+ 'Ꚙ' => 'ꚙ',
+ 'Ꚛ' => 'ꚛ',
+ 'Ꜣ' => 'ꜣ',
+ 'Ꜥ' => 'ꜥ',
+ 'Ꜧ' => 'ꜧ',
+ 'Ꜩ' => 'ꜩ',
+ 'Ꜫ' => 'ꜫ',
+ 'Ꜭ' => 'ꜭ',
+ 'Ꜯ' => 'ꜯ',
+ 'Ꜳ' => 'ꜳ',
+ 'Ꜵ' => 'ꜵ',
+ 'Ꜷ' => 'ꜷ',
+ 'Ꜹ' => 'ꜹ',
+ 'Ꜻ' => 'ꜻ',
+ 'Ꜽ' => 'ꜽ',
+ 'Ꜿ' => 'ꜿ',
+ 'Ꝁ' => 'ꝁ',
+ 'Ꝃ' => 'ꝃ',
+ 'Ꝅ' => 'ꝅ',
+ 'Ꝇ' => 'ꝇ',
+ 'Ꝉ' => 'ꝉ',
+ 'Ꝋ' => 'ꝋ',
+ 'Ꝍ' => 'ꝍ',
+ 'Ꝏ' => 'ꝏ',
+ 'Ꝑ' => 'ꝑ',
+ 'Ꝓ' => 'ꝓ',
+ 'Ꝕ' => 'ꝕ',
+ 'Ꝗ' => 'ꝗ',
+ 'Ꝙ' => 'ꝙ',
+ 'Ꝛ' => 'ꝛ',
+ 'Ꝝ' => 'ꝝ',
+ 'Ꝟ' => 'ꝟ',
+ 'Ꝡ' => 'ꝡ',
+ 'Ꝣ' => 'ꝣ',
+ 'Ꝥ' => 'ꝥ',
+ 'Ꝧ' => 'ꝧ',
+ 'Ꝩ' => 'ꝩ',
+ 'Ꝫ' => 'ꝫ',
+ 'Ꝭ' => 'ꝭ',
+ 'Ꝯ' => 'ꝯ',
+ 'Ꝺ' => 'ꝺ',
+ 'Ꝼ' => 'ꝼ',
+ 'Ᵹ' => 'ᵹ',
+ 'Ꝿ' => 'ꝿ',
+ 'Ꞁ' => 'ꞁ',
+ 'Ꞃ' => 'ꞃ',
+ 'Ꞅ' => 'ꞅ',
+ 'Ꞇ' => 'ꞇ',
+ 'Ꞌ' => 'ꞌ',
+ 'Ɥ' => 'ɥ',
+ 'Ꞑ' => 'ꞑ',
+ 'Ꞓ' => 'ꞓ',
+ 'Ꞗ' => 'ꞗ',
+ 'Ꞙ' => 'ꞙ',
+ 'Ꞛ' => 'ꞛ',
+ 'Ꞝ' => 'ꞝ',
+ 'Ꞟ' => 'ꞟ',
+ 'Ꞡ' => 'ꞡ',
+ 'Ꞣ' => 'ꞣ',
+ 'Ꞥ' => 'ꞥ',
+ 'Ꞧ' => 'ꞧ',
+ 'Ꞩ' => 'ꞩ',
+ 'Ɦ' => 'ɦ',
+ 'Ɜ' => 'ɜ',
+ 'Ɡ' => 'ɡ',
+ 'Ɬ' => 'ɬ',
+ 'Ɪ' => 'ɪ',
+ 'Ʞ' => 'ʞ',
+ 'Ʇ' => 'ʇ',
+ 'Ʝ' => 'ʝ',
+ 'Ꭓ' => 'ꭓ',
+ 'Ꞵ' => 'ꞵ',
+ 'Ꞷ' => 'ꞷ',
+ 'Ꞹ' => 'ꞹ',
+ 'Ꞻ' => 'ꞻ',
+ 'Ꞽ' => 'ꞽ',
+ 'Ꞿ' => 'ꞿ',
+ 'Ꟃ' => 'ꟃ',
+ 'Ꞔ' => 'ꞔ',
+ 'Ʂ' => 'ʂ',
+ 'Ᶎ' => 'ᶎ',
+ 'Ꟈ' => 'ꟈ',
+ 'Ꟊ' => 'ꟊ',
+ 'Ꟶ' => 'ꟶ',
+ 'A' => 'a',
+ 'B' => 'b',
+ 'C' => 'c',
+ 'D' => 'd',
+ 'E' => 'e',
+ 'F' => 'f',
+ 'G' => 'g',
+ 'H' => 'h',
+ 'I' => 'i',
+ 'J' => 'j',
+ 'K' => 'k',
+ 'L' => 'l',
+ 'M' => 'm',
+ 'N' => 'n',
+ 'O' => 'o',
+ 'P' => 'p',
+ 'Q' => 'q',
+ 'R' => 'r',
+ 'S' => 's',
+ 'T' => 't',
+ 'U' => 'u',
+ 'V' => 'v',
+ 'W' => 'w',
+ 'X' => 'x',
+ 'Y' => 'y',
+ 'Z' => 'z',
+ '𐐀' => '𐐨',
+ '𐐁' => '𐐩',
+ '𐐂' => '𐐪',
+ '𐐃' => '𐐫',
+ '𐐄' => '𐐬',
+ '𐐅' => '𐐭',
+ '𐐆' => '𐐮',
+ '𐐇' => '𐐯',
+ '𐐈' => '𐐰',
+ '𐐉' => '𐐱',
+ '𐐊' => '𐐲',
+ '𐐋' => '𐐳',
+ '𐐌' => '𐐴',
+ '𐐍' => '𐐵',
+ '𐐎' => '𐐶',
+ '𐐏' => '𐐷',
+ '𐐐' => '𐐸',
+ '𐐑' => '𐐹',
+ '𐐒' => '𐐺',
+ '𐐓' => '𐐻',
+ '𐐔' => '𐐼',
+ '𐐕' => '𐐽',
+ '𐐖' => '𐐾',
+ '𐐗' => '𐐿',
+ '𐐘' => '𐑀',
+ '𐐙' => '𐑁',
+ '𐐚' => '𐑂',
+ '𐐛' => '𐑃',
+ '𐐜' => '𐑄',
+ '𐐝' => '𐑅',
+ '𐐞' => '𐑆',
+ '𐐟' => '𐑇',
+ '𐐠' => '𐑈',
+ '𐐡' => '𐑉',
+ '𐐢' => '𐑊',
+ '𐐣' => '𐑋',
+ '𐐤' => '𐑌',
+ '𐐥' => '𐑍',
+ '𐐦' => '𐑎',
+ '𐐧' => '𐑏',
+ '𐒰' => '𐓘',
+ '𐒱' => '𐓙',
+ '𐒲' => '𐓚',
+ '𐒳' => '𐓛',
+ '𐒴' => '𐓜',
+ '𐒵' => '𐓝',
+ '𐒶' => '𐓞',
+ '𐒷' => '𐓟',
+ '𐒸' => '𐓠',
+ '𐒹' => '𐓡',
+ '𐒺' => '𐓢',
+ '𐒻' => '𐓣',
+ '𐒼' => '𐓤',
+ '𐒽' => '𐓥',
+ '𐒾' => '𐓦',
+ '𐒿' => '𐓧',
+ '𐓀' => '𐓨',
+ '𐓁' => '𐓩',
+ '𐓂' => '𐓪',
+ '𐓃' => '𐓫',
+ '𐓄' => '𐓬',
+ '𐓅' => '𐓭',
+ '𐓆' => '𐓮',
+ '𐓇' => '𐓯',
+ '𐓈' => '𐓰',
+ '𐓉' => '𐓱',
+ '𐓊' => '𐓲',
+ '𐓋' => '𐓳',
+ '𐓌' => '𐓴',
+ '𐓍' => '𐓵',
+ '𐓎' => '𐓶',
+ '𐓏' => '𐓷',
+ '𐓐' => '𐓸',
+ '𐓑' => '𐓹',
+ '𐓒' => '𐓺',
+ '𐓓' => '𐓻',
+ '𐲀' => '𐳀',
+ '𐲁' => '𐳁',
+ '𐲂' => '𐳂',
+ '𐲃' => '𐳃',
+ '𐲄' => '𐳄',
+ '𐲅' => '𐳅',
+ '𐲆' => '𐳆',
+ '𐲇' => '𐳇',
+ '𐲈' => '𐳈',
+ '𐲉' => '𐳉',
+ '𐲊' => '𐳊',
+ '𐲋' => '𐳋',
+ '𐲌' => '𐳌',
+ '𐲍' => '𐳍',
+ '𐲎' => '𐳎',
+ '𐲏' => '𐳏',
+ '𐲐' => '𐳐',
+ '𐲑' => '𐳑',
+ '𐲒' => '𐳒',
+ '𐲓' => '𐳓',
+ '𐲔' => '𐳔',
+ '𐲕' => '𐳕',
+ '𐲖' => '𐳖',
+ '𐲗' => '𐳗',
+ '𐲘' => '𐳘',
+ '𐲙' => '𐳙',
+ '𐲚' => '𐳚',
+ '𐲛' => '𐳛',
+ '𐲜' => '𐳜',
+ '𐲝' => '𐳝',
+ '𐲞' => '𐳞',
+ '𐲟' => '𐳟',
+ '𐲠' => '𐳠',
+ '𐲡' => '𐳡',
+ '𐲢' => '𐳢',
+ '𐲣' => '𐳣',
+ '𐲤' => '𐳤',
+ '𐲥' => '𐳥',
+ '𐲦' => '𐳦',
+ '𐲧' => '𐳧',
+ '𐲨' => '𐳨',
+ '𐲩' => '𐳩',
+ '𐲪' => '𐳪',
+ '𐲫' => '𐳫',
+ '𐲬' => '𐳬',
+ '𐲭' => '𐳭',
+ '𐲮' => '𐳮',
+ '𐲯' => '𐳯',
+ '𐲰' => '𐳰',
+ '𐲱' => '𐳱',
+ '𐲲' => '𐳲',
+ '𑢠' => '𑣀',
+ '𑢡' => '𑣁',
+ '𑢢' => '𑣂',
+ '𑢣' => '𑣃',
+ '𑢤' => '𑣄',
+ '𑢥' => '𑣅',
+ '𑢦' => '𑣆',
+ '𑢧' => '𑣇',
+ '𑢨' => '𑣈',
+ '𑢩' => '𑣉',
+ '𑢪' => '𑣊',
+ '𑢫' => '𑣋',
+ '𑢬' => '𑣌',
+ '𑢭' => '𑣍',
+ '𑢮' => '𑣎',
+ '𑢯' => '𑣏',
+ '𑢰' => '𑣐',
+ '𑢱' => '𑣑',
+ '𑢲' => '𑣒',
+ '𑢳' => '𑣓',
+ '𑢴' => '𑣔',
+ '𑢵' => '𑣕',
+ '𑢶' => '𑣖',
+ '𑢷' => '𑣗',
+ '𑢸' => '𑣘',
+ '𑢹' => '𑣙',
+ '𑢺' => '𑣚',
+ '𑢻' => '𑣛',
+ '𑢼' => '𑣜',
+ '𑢽' => '𑣝',
+ '𑢾' => '𑣞',
+ '𑢿' => '𑣟',
+ '𖹀' => '𖹠',
+ '𖹁' => '𖹡',
+ '𖹂' => '𖹢',
+ '𖹃' => '𖹣',
+ '𖹄' => '𖹤',
+ '𖹅' => '𖹥',
+ '𖹆' => '𖹦',
+ '𖹇' => '𖹧',
+ '𖹈' => '𖹨',
+ '𖹉' => '𖹩',
+ '𖹊' => '𖹪',
+ '𖹋' => '𖹫',
+ '𖹌' => '𖹬',
+ '𖹍' => '𖹭',
+ '𖹎' => '𖹮',
+ '𖹏' => '𖹯',
+ '𖹐' => '𖹰',
+ '𖹑' => '𖹱',
+ '𖹒' => '𖹲',
+ '𖹓' => '𖹳',
+ '𖹔' => '𖹴',
+ '𖹕' => '𖹵',
+ '𖹖' => '𖹶',
+ '𖹗' => '𖹷',
+ '𖹘' => '𖹸',
+ '𖹙' => '𖹹',
+ '𖹚' => '𖹺',
+ '𖹛' => '𖹻',
+ '𖹜' => '𖹼',
+ '𖹝' => '𖹽',
+ '𖹞' => '𖹾',
+ '𖹟' => '𖹿',
+ '𞤀' => '𞤢',
+ '𞤁' => '𞤣',
+ '𞤂' => '𞤤',
+ '𞤃' => '𞤥',
+ '𞤄' => '𞤦',
+ '𞤅' => '𞤧',
+ '𞤆' => '𞤨',
+ '𞤇' => '𞤩',
+ '𞤈' => '𞤪',
+ '𞤉' => '𞤫',
+ '𞤊' => '𞤬',
+ '𞤋' => '𞤭',
+ '𞤌' => '𞤮',
+ '𞤍' => '𞤯',
+ '𞤎' => '𞤰',
+ '𞤏' => '𞤱',
+ '𞤐' => '𞤲',
+ '𞤑' => '𞤳',
+ '𞤒' => '𞤴',
+ '𞤓' => '𞤵',
+ '𞤔' => '𞤶',
+ '𞤕' => '𞤷',
+ '𞤖' => '𞤸',
+ '𞤗' => '𞤹',
+ '𞤘' => '𞤺',
+ '𞤙' => '𞤻',
+ '𞤚' => '𞤼',
+ '𞤛' => '𞤽',
+ '𞤜' => '𞤾',
+ '𞤝' => '𞤿',
+ '𞤞' => '𞥀',
+ '𞤟' => '𞥁',
+ '𞤠' => '𞥂',
+ '𞤡' => '𞥃',
+);
diff --git a/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
new file mode 100644
index 000000000..2a8f6e73b
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
@@ -0,0 +1,5 @@
+<?php
+
+// from Case_Ignorable in https://unicode.org/Public/UNIDATA/DerivedCoreProperties.txt
+
+return '/(?<![\x{0027}\x{002E}\x{003A}\x{005E}\x{0060}\x{00A8}\x{00AD}\x{00AF}\x{00B4}\x{00B7}\x{00B8}\x{02B0}-\x{02C1}\x{02C2}-\x{02C5}\x{02C6}-\x{02D1}\x{02D2}-\x{02DF}\x{02E0}-\x{02E4}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EE}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037A}\x{0384}-\x{0385}\x{0387}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0559}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{05F4}\x{0600}-\x{0605}\x{0610}-\x{061A}\x{061C}\x{0640}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DD}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07FA}\x{07FD}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0971}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E46}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EB9}\x{0EBB}-\x{0EBC}\x{0EC6}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{10FC}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17D7}\x{17DD}\x{180B}-\x{180D}\x{180E}\x{1843}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AA7}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1C78}-\x{1C7D}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1D2C}-\x{1D6A}\x{1D78}\x{1D9B}-\x{1DBF}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{200B}-\x{200F}\x{2018}\x{2019}\x{2024}\x{2027}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{2066}-\x{206F}\x{2071}\x{207F}\x{2090}-\x{209C}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2C7C}-\x{2C7D}\x{2CEF}-\x{2CF1}\x{2D6F}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E2F}\x{3005}\x{302A}-\x{302D}\x{3031}-\x{3035}\x{303B}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{309D}-\x{309E}\x{30FC}-\x{30FE}\x{A015}\x{A4F8}-\x{A4FD}\x{A60C}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A67F}\x{A69C}-\x{A69D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A770}\x{A788}\x{A789}-\x{A78A}\x{A7F8}-\x{A7F9}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}\x{A9CF}\x{A9E5}\x{A9E6}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA70}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AADD}\x{AAEC}-\x{AAED}\x{AAF3}-\x{AAF4}\x{AAF6}\x{AB5B}\x{AB5C}-\x{AB5F}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FBB2}-\x{FBC1}\x{FE00}-\x{FE0F}\x{FE13}\x{FE20}-\x{FE2F}\x{FE52}\x{FE55}\x{FEFF}\x{FF07}\x{FF0E}\x{FF1A}\x{FF3E}\x{FF40}\x{FF70}\x{FF9E}-\x{FF9F}\x{FFE3}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{110BD}\x{110CD}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16B40}-\x{16B43}\x{16F8F}-\x{16F92}\x{16F93}-\x{16F9F}\x{16FE0}-\x{16FE1}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1F3FB}-\x{1F3FF}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}])(\pL)(\pL*+)/u';
diff --git a/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php
new file mode 100644
index 000000000..56b9cb852
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php
@@ -0,0 +1,1489 @@
+<?php
+
+return array (
+ 'a' => 'A',
+ 'b' => 'B',
+ 'c' => 'C',
+ 'd' => 'D',
+ 'e' => 'E',
+ 'f' => 'F',
+ 'g' => 'G',
+ 'h' => 'H',
+ 'i' => 'I',
+ 'j' => 'J',
+ 'k' => 'K',
+ 'l' => 'L',
+ 'm' => 'M',
+ 'n' => 'N',
+ 'o' => 'O',
+ 'p' => 'P',
+ 'q' => 'Q',
+ 'r' => 'R',
+ 's' => 'S',
+ 't' => 'T',
+ 'u' => 'U',
+ 'v' => 'V',
+ 'w' => 'W',
+ 'x' => 'X',
+ 'y' => 'Y',
+ 'z' => 'Z',
+ 'µ' => 'Μ',
+ 'à' => 'À',
+ 'á' => 'Á',
+ 'â' => 'Â',
+ 'ã' => 'Ã',
+ 'ä' => 'Ä',
+ 'å' => 'Å',
+ 'æ' => 'Æ',
+ 'ç' => 'Ç',
+ 'è' => 'È',
+ 'é' => 'É',
+ 'ê' => 'Ê',
+ 'ë' => 'Ë',
+ 'ì' => 'Ì',
+ 'í' => 'Í',
+ 'î' => 'Î',
+ 'ï' => 'Ï',
+ 'ð' => 'Ð',
+ 'ñ' => 'Ñ',
+ 'ò' => 'Ò',
+ 'ó' => 'Ó',
+ 'ô' => 'Ô',
+ 'õ' => 'Õ',
+ 'ö' => 'Ö',
+ 'ø' => 'Ø',
+ 'ù' => 'Ù',
+ 'ú' => 'Ú',
+ 'û' => 'Û',
+ 'ü' => 'Ü',
+ 'ý' => 'Ý',
+ 'þ' => 'Þ',
+ 'ÿ' => 'Ÿ',
+ 'ā' => 'Ā',
+ 'ă' => 'Ă',
+ 'ą' => 'Ą',
+ 'ć' => 'Ć',
+ 'ĉ' => 'Ĉ',
+ 'ċ' => 'Ċ',
+ 'č' => 'Č',
+ 'ď' => 'Ď',
+ 'đ' => 'Đ',
+ 'ē' => 'Ē',
+ 'ĕ' => 'Ĕ',
+ 'ė' => 'Ė',
+ 'ę' => 'Ę',
+ 'ě' => 'Ě',
+ 'ĝ' => 'Ĝ',
+ 'ğ' => 'Ğ',
+ 'ġ' => 'Ġ',
+ 'ģ' => 'Ģ',
+ 'ĥ' => 'Ĥ',
+ 'ħ' => 'Ħ',
+ 'ĩ' => 'Ĩ',
+ 'ī' => 'Ī',
+ 'ĭ' => 'Ĭ',
+ 'į' => 'Į',
+ 'ı' => 'I',
+ 'ij' => 'IJ',
+ 'ĵ' => 'Ĵ',
+ 'ķ' => 'Ķ',
+ 'ĺ' => 'Ĺ',
+ 'ļ' => 'Ļ',
+ 'ľ' => 'Ľ',
+ 'ŀ' => 'Ŀ',
+ 'ł' => 'Ł',
+ 'ń' => 'Ń',
+ 'ņ' => 'Ņ',
+ 'ň' => 'Ň',
+ 'ŋ' => 'Ŋ',
+ 'ō' => 'Ō',
+ 'ŏ' => 'Ŏ',
+ 'ő' => 'Ő',
+ 'œ' => 'Œ',
+ 'ŕ' => 'Ŕ',
+ 'ŗ' => 'Ŗ',
+ 'ř' => 'Ř',
+ 'ś' => 'Ś',
+ 'ŝ' => 'Ŝ',
+ 'ş' => 'Ş',
+ 'š' => 'Š',
+ 'ţ' => 'Ţ',
+ 'ť' => 'Ť',
+ 'ŧ' => 'Ŧ',
+ 'ũ' => 'Ũ',
+ 'ū' => 'Ū',
+ 'ŭ' => 'Ŭ',
+ 'ů' => 'Ů',
+ 'ű' => 'Ű',
+ 'ų' => 'Ų',
+ 'ŵ' => 'Ŵ',
+ 'ŷ' => 'Ŷ',
+ 'ź' => 'Ź',
+ 'ż' => 'Ż',
+ 'ž' => 'Ž',
+ 'ſ' => 'S',
+ 'ƀ' => 'Ƀ',
+ 'ƃ' => 'Ƃ',
+ 'ƅ' => 'Ƅ',
+ 'ƈ' => 'Ƈ',
+ 'ƌ' => 'Ƌ',
+ 'ƒ' => 'Ƒ',
+ 'ƕ' => 'Ƕ',
+ 'ƙ' => 'Ƙ',
+ 'ƚ' => 'Ƚ',
+ 'ƞ' => 'Ƞ',
+ 'ơ' => 'Ơ',
+ 'ƣ' => 'Ƣ',
+ 'ƥ' => 'Ƥ',
+ 'ƨ' => 'Ƨ',
+ 'ƭ' => 'Ƭ',
+ 'ư' => 'Ư',
+ 'ƴ' => 'Ƴ',
+ 'ƶ' => 'Ƶ',
+ 'ƹ' => 'Ƹ',
+ 'ƽ' => 'Ƽ',
+ 'ƿ' => 'Ƿ',
+ 'Dž' => 'DŽ',
+ 'dž' => 'DŽ',
+ 'Lj' => 'LJ',
+ 'lj' => 'LJ',
+ 'Nj' => 'NJ',
+ 'nj' => 'NJ',
+ 'ǎ' => 'Ǎ',
+ 'ǐ' => 'Ǐ',
+ 'ǒ' => 'Ǒ',
+ 'ǔ' => 'Ǔ',
+ 'ǖ' => 'Ǖ',
+ 'ǘ' => 'Ǘ',
+ 'ǚ' => 'Ǚ',
+ 'ǜ' => 'Ǜ',
+ 'ǝ' => 'Ǝ',
+ 'ǟ' => 'Ǟ',
+ 'ǡ' => 'Ǡ',
+ 'ǣ' => 'Ǣ',
+ 'ǥ' => 'Ǥ',
+ 'ǧ' => 'Ǧ',
+ 'ǩ' => 'Ǩ',
+ 'ǫ' => 'Ǫ',
+ 'ǭ' => 'Ǭ',
+ 'ǯ' => 'Ǯ',
+ 'Dz' => 'DZ',
+ 'dz' => 'DZ',
+ 'ǵ' => 'Ǵ',
+ 'ǹ' => 'Ǹ',
+ 'ǻ' => 'Ǻ',
+ 'ǽ' => 'Ǽ',
+ 'ǿ' => 'Ǿ',
+ 'ȁ' => 'Ȁ',
+ 'ȃ' => 'Ȃ',
+ 'ȅ' => 'Ȅ',
+ 'ȇ' => 'Ȇ',
+ 'ȉ' => 'Ȉ',
+ 'ȋ' => 'Ȋ',
+ 'ȍ' => 'Ȍ',
+ 'ȏ' => 'Ȏ',
+ 'ȑ' => 'Ȑ',
+ 'ȓ' => 'Ȓ',
+ 'ȕ' => 'Ȕ',
+ 'ȗ' => 'Ȗ',
+ 'ș' => 'Ș',
+ 'ț' => 'Ț',
+ 'ȝ' => 'Ȝ',
+ 'ȟ' => 'Ȟ',
+ 'ȣ' => 'Ȣ',
+ 'ȥ' => 'Ȥ',
+ 'ȧ' => 'Ȧ',
+ 'ȩ' => 'Ȩ',
+ 'ȫ' => 'Ȫ',
+ 'ȭ' => 'Ȭ',
+ 'ȯ' => 'Ȯ',
+ 'ȱ' => 'Ȱ',
+ 'ȳ' => 'Ȳ',
+ 'ȼ' => 'Ȼ',
+ 'ȿ' => 'Ȿ',
+ 'ɀ' => 'Ɀ',
+ 'ɂ' => 'Ɂ',
+ 'ɇ' => 'Ɇ',
+ 'ɉ' => 'Ɉ',
+ 'ɋ' => 'Ɋ',
+ 'ɍ' => 'Ɍ',
+ 'ɏ' => 'Ɏ',
+ 'ɐ' => 'Ɐ',
+ 'ɑ' => 'Ɑ',
+ 'ɒ' => 'Ɒ',
+ 'ɓ' => 'Ɓ',
+ 'ɔ' => 'Ɔ',
+ 'ɖ' => 'Ɖ',
+ 'ɗ' => 'Ɗ',
+ 'ə' => 'Ə',
+ 'ɛ' => 'Ɛ',
+ 'ɜ' => 'Ɜ',
+ 'ɠ' => 'Ɠ',
+ 'ɡ' => 'Ɡ',
+ 'ɣ' => 'Ɣ',
+ 'ɥ' => 'Ɥ',
+ 'ɦ' => 'Ɦ',
+ 'ɨ' => 'Ɨ',
+ 'ɩ' => 'Ɩ',
+ 'ɪ' => 'Ɪ',
+ 'ɫ' => 'Ɫ',
+ 'ɬ' => 'Ɬ',
+ 'ɯ' => 'Ɯ',
+ 'ɱ' => 'Ɱ',
+ 'ɲ' => 'Ɲ',
+ 'ɵ' => 'Ɵ',
+ 'ɽ' => 'Ɽ',
+ 'ʀ' => 'Ʀ',
+ 'ʂ' => 'Ʂ',
+ 'ʃ' => 'Ʃ',
+ 'ʇ' => 'Ʇ',
+ 'ʈ' => 'Ʈ',
+ 'ʉ' => 'Ʉ',
+ 'ʊ' => 'Ʊ',
+ 'ʋ' => 'Ʋ',
+ 'ʌ' => 'Ʌ',
+ 'ʒ' => 'Ʒ',
+ 'ʝ' => 'Ʝ',
+ 'ʞ' => 'Ʞ',
+ 'ͅ' => 'Ι',
+ 'ͱ' => 'Ͱ',
+ 'ͳ' => 'Ͳ',
+ 'ͷ' => 'Ͷ',
+ 'ͻ' => 'Ͻ',
+ 'ͼ' => 'Ͼ',
+ 'ͽ' => 'Ͽ',
+ 'ά' => 'Ά',
+ 'έ' => 'Έ',
+ 'ή' => 'Ή',
+ 'ί' => 'Ί',
+ 'α' => 'Α',
+ 'β' => 'Β',
+ 'γ' => 'Γ',
+ 'δ' => 'Δ',
+ 'ε' => 'Ε',
+ 'ζ' => 'Ζ',
+ 'η' => 'Η',
+ 'θ' => 'Θ',
+ 'ι' => 'Ι',
+ 'κ' => 'Κ',
+ 'λ' => 'Λ',
+ 'μ' => 'Μ',
+ 'ν' => 'Ν',
+ 'ξ' => 'Ξ',
+ 'ο' => 'Ο',
+ 'π' => 'Π',
+ 'ρ' => 'Ρ',
+ 'ς' => 'Σ',
+ 'σ' => 'Σ',
+ 'τ' => 'Τ',
+ 'υ' => 'Υ',
+ 'φ' => 'Φ',
+ 'χ' => 'Χ',
+ 'ψ' => 'Ψ',
+ 'ω' => 'Ω',
+ 'ϊ' => 'Ϊ',
+ 'ϋ' => 'Ϋ',
+ 'ό' => 'Ό',
+ 'ύ' => 'Ύ',
+ 'ώ' => 'Ώ',
+ 'ϐ' => 'Β',
+ 'ϑ' => 'Θ',
+ 'ϕ' => 'Φ',
+ 'ϖ' => 'Π',
+ 'ϗ' => 'Ϗ',
+ 'ϙ' => 'Ϙ',
+ 'ϛ' => 'Ϛ',
+ 'ϝ' => 'Ϝ',
+ 'ϟ' => 'Ϟ',
+ 'ϡ' => 'Ϡ',
+ 'ϣ' => 'Ϣ',
+ 'ϥ' => 'Ϥ',
+ 'ϧ' => 'Ϧ',
+ 'ϩ' => 'Ϩ',
+ 'ϫ' => 'Ϫ',
+ 'ϭ' => 'Ϭ',
+ 'ϯ' => 'Ϯ',
+ 'ϰ' => 'Κ',
+ 'ϱ' => 'Ρ',
+ 'ϲ' => 'Ϲ',
+ 'ϳ' => 'Ϳ',
+ 'ϵ' => 'Ε',
+ 'ϸ' => 'Ϸ',
+ 'ϻ' => 'Ϻ',
+ 'а' => 'А',
+ 'б' => 'Б',
+ 'в' => 'В',
+ 'г' => 'Г',
+ 'д' => 'Д',
+ 'е' => 'Е',
+ 'ж' => 'Ж',
+ 'з' => 'З',
+ 'и' => 'И',
+ 'й' => 'Й',
+ 'к' => 'К',
+ 'л' => 'Л',
+ 'м' => 'М',
+ 'н' => 'Н',
+ 'о' => 'О',
+ 'п' => 'П',
+ 'р' => 'Р',
+ 'с' => 'С',
+ 'т' => 'Т',
+ 'у' => 'У',
+ 'ф' => 'Ф',
+ 'х' => 'Х',
+ 'ц' => 'Ц',
+ 'ч' => 'Ч',
+ 'ш' => 'Ш',
+ 'щ' => 'Щ',
+ 'ъ' => 'Ъ',
+ 'ы' => 'Ы',
+ 'ь' => 'Ь',
+ 'э' => 'Э',
+ 'ю' => 'Ю',
+ 'я' => 'Я',
+ 'ѐ' => 'Ѐ',
+ 'ё' => 'Ё',
+ 'ђ' => 'Ђ',
+ 'ѓ' => 'Ѓ',
+ 'є' => 'Є',
+ 'ѕ' => 'Ѕ',
+ 'і' => 'І',
+ 'ї' => 'Ї',
+ 'ј' => 'Ј',
+ 'љ' => 'Љ',
+ 'њ' => 'Њ',
+ 'ћ' => 'Ћ',
+ 'ќ' => 'Ќ',
+ 'ѝ' => 'Ѝ',
+ 'ў' => 'Ў',
+ 'џ' => 'Џ',
+ 'ѡ' => 'Ѡ',
+ 'ѣ' => 'Ѣ',
+ 'ѥ' => 'Ѥ',
+ 'ѧ' => 'Ѧ',
+ 'ѩ' => 'Ѩ',
+ 'ѫ' => 'Ѫ',
+ 'ѭ' => 'Ѭ',
+ 'ѯ' => 'Ѯ',
+ 'ѱ' => 'Ѱ',
+ 'ѳ' => 'Ѳ',
+ 'ѵ' => 'Ѵ',
+ 'ѷ' => 'Ѷ',
+ 'ѹ' => 'Ѹ',
+ 'ѻ' => 'Ѻ',
+ 'ѽ' => 'Ѽ',
+ 'ѿ' => 'Ѿ',
+ 'ҁ' => 'Ҁ',
+ 'ҋ' => 'Ҋ',
+ 'ҍ' => 'Ҍ',
+ 'ҏ' => 'Ҏ',
+ 'ґ' => 'Ґ',
+ 'ғ' => 'Ғ',
+ 'ҕ' => 'Ҕ',
+ 'җ' => 'Җ',
+ 'ҙ' => 'Ҙ',
+ 'қ' => 'Қ',
+ 'ҝ' => 'Ҝ',
+ 'ҟ' => 'Ҟ',
+ 'ҡ' => 'Ҡ',
+ 'ң' => 'Ң',
+ 'ҥ' => 'Ҥ',
+ 'ҧ' => 'Ҧ',
+ 'ҩ' => 'Ҩ',
+ 'ҫ' => 'Ҫ',
+ 'ҭ' => 'Ҭ',
+ 'ү' => 'Ү',
+ 'ұ' => 'Ұ',
+ 'ҳ' => 'Ҳ',
+ 'ҵ' => 'Ҵ',
+ 'ҷ' => 'Ҷ',
+ 'ҹ' => 'Ҹ',
+ 'һ' => 'Һ',
+ 'ҽ' => 'Ҽ',
+ 'ҿ' => 'Ҿ',
+ 'ӂ' => 'Ӂ',
+ 'ӄ' => 'Ӄ',
+ 'ӆ' => 'Ӆ',
+ 'ӈ' => 'Ӈ',
+ 'ӊ' => 'Ӊ',
+ 'ӌ' => 'Ӌ',
+ 'ӎ' => 'Ӎ',
+ 'ӏ' => 'Ӏ',
+ 'ӑ' => 'Ӑ',
+ 'ӓ' => 'Ӓ',
+ 'ӕ' => 'Ӕ',
+ 'ӗ' => 'Ӗ',
+ 'ә' => 'Ә',
+ 'ӛ' => 'Ӛ',
+ 'ӝ' => 'Ӝ',
+ 'ӟ' => 'Ӟ',
+ 'ӡ' => 'Ӡ',
+ 'ӣ' => 'Ӣ',
+ 'ӥ' => 'Ӥ',
+ 'ӧ' => 'Ӧ',
+ 'ө' => 'Ө',
+ 'ӫ' => 'Ӫ',
+ 'ӭ' => 'Ӭ',
+ 'ӯ' => 'Ӯ',
+ 'ӱ' => 'Ӱ',
+ 'ӳ' => 'Ӳ',
+ 'ӵ' => 'Ӵ',
+ 'ӷ' => 'Ӷ',
+ 'ӹ' => 'Ӹ',
+ 'ӻ' => 'Ӻ',
+ 'ӽ' => 'Ӽ',
+ 'ӿ' => 'Ӿ',
+ 'ԁ' => 'Ԁ',
+ 'ԃ' => 'Ԃ',
+ 'ԅ' => 'Ԅ',
+ 'ԇ' => 'Ԇ',
+ 'ԉ' => 'Ԉ',
+ 'ԋ' => 'Ԋ',
+ 'ԍ' => 'Ԍ',
+ 'ԏ' => 'Ԏ',
+ 'ԑ' => 'Ԑ',
+ 'ԓ' => 'Ԓ',
+ 'ԕ' => 'Ԕ',
+ 'ԗ' => 'Ԗ',
+ 'ԙ' => 'Ԙ',
+ 'ԛ' => 'Ԛ',
+ 'ԝ' => 'Ԝ',
+ 'ԟ' => 'Ԟ',
+ 'ԡ' => 'Ԡ',
+ 'ԣ' => 'Ԣ',
+ 'ԥ' => 'Ԥ',
+ 'ԧ' => 'Ԧ',
+ 'ԩ' => 'Ԩ',
+ 'ԫ' => 'Ԫ',
+ 'ԭ' => 'Ԭ',
+ 'ԯ' => 'Ԯ',
+ 'ա' => 'Ա',
+ 'բ' => 'Բ',
+ 'գ' => 'Գ',
+ 'դ' => 'Դ',
+ 'ե' => 'Ե',
+ 'զ' => 'Զ',
+ 'է' => 'Է',
+ 'ը' => 'Ը',
+ 'թ' => 'Թ',
+ 'ժ' => 'Ժ',
+ 'ի' => 'Ի',
+ 'լ' => 'Լ',
+ 'խ' => 'Խ',
+ 'ծ' => 'Ծ',
+ 'կ' => 'Կ',
+ 'հ' => 'Հ',
+ 'ձ' => 'Ձ',
+ 'ղ' => 'Ղ',
+ 'ճ' => 'Ճ',
+ 'մ' => 'Մ',
+ 'յ' => 'Յ',
+ 'ն' => 'Ն',
+ 'շ' => 'Շ',
+ 'ո' => 'Ո',
+ 'չ' => 'Չ',
+ 'պ' => 'Պ',
+ 'ջ' => 'Ջ',
+ 'ռ' => 'Ռ',
+ 'ս' => 'Ս',
+ 'վ' => 'Վ',
+ 'տ' => 'Տ',
+ 'ր' => 'Ր',
+ 'ց' => 'Ց',
+ 'ւ' => 'Ւ',
+ 'փ' => 'Փ',
+ 'ք' => 'Ք',
+ 'օ' => 'Օ',
+ 'ֆ' => 'Ֆ',
+ 'ა' => 'Ა',
+ 'ბ' => 'Ბ',
+ 'გ' => 'Გ',
+ 'დ' => 'Დ',
+ 'ე' => 'Ე',
+ 'ვ' => 'Ვ',
+ 'ზ' => 'Ზ',
+ 'თ' => 'Თ',
+ 'ი' => 'Ი',
+ 'კ' => 'Კ',
+ 'ლ' => 'Ლ',
+ 'მ' => 'Მ',
+ 'ნ' => 'Ნ',
+ 'ო' => 'Ო',
+ 'პ' => 'Პ',
+ 'ჟ' => 'Ჟ',
+ 'რ' => 'Რ',
+ 'ს' => 'Ს',
+ 'ტ' => 'Ტ',
+ 'უ' => 'Უ',
+ 'ფ' => 'Ფ',
+ 'ქ' => 'Ქ',
+ 'ღ' => 'Ღ',
+ 'ყ' => 'Ყ',
+ 'შ' => 'Შ',
+ 'ჩ' => 'Ჩ',
+ 'ც' => 'Ც',
+ 'ძ' => 'Ძ',
+ 'წ' => 'Წ',
+ 'ჭ' => 'Ჭ',
+ 'ხ' => 'Ხ',
+ 'ჯ' => 'Ჯ',
+ 'ჰ' => 'Ჰ',
+ 'ჱ' => 'Ჱ',
+ 'ჲ' => 'Ჲ',
+ 'ჳ' => 'Ჳ',
+ 'ჴ' => 'Ჴ',
+ 'ჵ' => 'Ჵ',
+ 'ჶ' => 'Ჶ',
+ 'ჷ' => 'Ჷ',
+ 'ჸ' => 'Ჸ',
+ 'ჹ' => 'Ჹ',
+ 'ჺ' => 'Ჺ',
+ 'ჽ' => 'Ჽ',
+ 'ჾ' => 'Ჾ',
+ 'ჿ' => 'Ჿ',
+ 'ᏸ' => 'Ᏸ',
+ 'ᏹ' => 'Ᏹ',
+ 'ᏺ' => 'Ᏺ',
+ 'ᏻ' => 'Ᏻ',
+ 'ᏼ' => 'Ᏼ',
+ 'ᏽ' => 'Ᏽ',
+ 'ᲀ' => 'В',
+ 'ᲁ' => 'Д',
+ 'ᲂ' => 'О',
+ 'ᲃ' => 'С',
+ 'ᲄ' => 'Т',
+ 'ᲅ' => 'Т',
+ 'ᲆ' => 'Ъ',
+ 'ᲇ' => 'Ѣ',
+ 'ᲈ' => 'Ꙋ',
+ 'ᵹ' => 'Ᵹ',
+ 'ᵽ' => 'Ᵽ',
+ 'ᶎ' => 'Ᶎ',
+ 'ḁ' => 'Ḁ',
+ 'ḃ' => 'Ḃ',
+ 'ḅ' => 'Ḅ',
+ 'ḇ' => 'Ḇ',
+ 'ḉ' => 'Ḉ',
+ 'ḋ' => 'Ḋ',
+ 'ḍ' => 'Ḍ',
+ 'ḏ' => 'Ḏ',
+ 'ḑ' => 'Ḑ',
+ 'ḓ' => 'Ḓ',
+ 'ḕ' => 'Ḕ',
+ 'ḗ' => 'Ḗ',
+ 'ḙ' => 'Ḙ',
+ 'ḛ' => 'Ḛ',
+ 'ḝ' => 'Ḝ',
+ 'ḟ' => 'Ḟ',
+ 'ḡ' => 'Ḡ',
+ 'ḣ' => 'Ḣ',
+ 'ḥ' => 'Ḥ',
+ 'ḧ' => 'Ḧ',
+ 'ḩ' => 'Ḩ',
+ 'ḫ' => 'Ḫ',
+ 'ḭ' => 'Ḭ',
+ 'ḯ' => 'Ḯ',
+ 'ḱ' => 'Ḱ',
+ 'ḳ' => 'Ḳ',
+ 'ḵ' => 'Ḵ',
+ 'ḷ' => 'Ḷ',
+ 'ḹ' => 'Ḹ',
+ 'ḻ' => 'Ḻ',
+ 'ḽ' => 'Ḽ',
+ 'ḿ' => 'Ḿ',
+ 'ṁ' => 'Ṁ',
+ 'ṃ' => 'Ṃ',
+ 'ṅ' => 'Ṅ',
+ 'ṇ' => 'Ṇ',
+ 'ṉ' => 'Ṉ',
+ 'ṋ' => 'Ṋ',
+ 'ṍ' => 'Ṍ',
+ 'ṏ' => 'Ṏ',
+ 'ṑ' => 'Ṑ',
+ 'ṓ' => 'Ṓ',
+ 'ṕ' => 'Ṕ',
+ 'ṗ' => 'Ṗ',
+ 'ṙ' => 'Ṙ',
+ 'ṛ' => 'Ṛ',
+ 'ṝ' => 'Ṝ',
+ 'ṟ' => 'Ṟ',
+ 'ṡ' => 'Ṡ',
+ 'ṣ' => 'Ṣ',
+ 'ṥ' => 'Ṥ',
+ 'ṧ' => 'Ṧ',
+ 'ṩ' => 'Ṩ',
+ 'ṫ' => 'Ṫ',
+ 'ṭ' => 'Ṭ',
+ 'ṯ' => 'Ṯ',
+ 'ṱ' => 'Ṱ',
+ 'ṳ' => 'Ṳ',
+ 'ṵ' => 'Ṵ',
+ 'ṷ' => 'Ṷ',
+ 'ṹ' => 'Ṹ',
+ 'ṻ' => 'Ṻ',
+ 'ṽ' => 'Ṽ',
+ 'ṿ' => 'Ṿ',
+ 'ẁ' => 'Ẁ',
+ 'ẃ' => 'Ẃ',
+ 'ẅ' => 'Ẅ',
+ 'ẇ' => 'Ẇ',
+ 'ẉ' => 'Ẉ',
+ 'ẋ' => 'Ẋ',
+ 'ẍ' => 'Ẍ',
+ 'ẏ' => 'Ẏ',
+ 'ẑ' => 'Ẑ',
+ 'ẓ' => 'Ẓ',
+ 'ẕ' => 'Ẕ',
+ 'ẛ' => 'Ṡ',
+ 'ạ' => 'Ạ',
+ 'ả' => 'Ả',
+ 'ấ' => 'Ấ',
+ 'ầ' => 'Ầ',
+ 'ẩ' => 'Ẩ',
+ 'ẫ' => 'Ẫ',
+ 'ậ' => 'Ậ',
+ 'ắ' => 'Ắ',
+ 'ằ' => 'Ằ',
+ 'ẳ' => 'Ẳ',
+ 'ẵ' => 'Ẵ',
+ 'ặ' => 'Ặ',
+ 'ẹ' => 'Ẹ',
+ 'ẻ' => 'Ẻ',
+ 'ẽ' => 'Ẽ',
+ 'ế' => 'Ế',
+ 'ề' => 'Ề',
+ 'ể' => 'Ể',
+ 'ễ' => 'Ễ',
+ 'ệ' => 'Ệ',
+ 'ỉ' => 'Ỉ',
+ 'ị' => 'Ị',
+ 'ọ' => 'Ọ',
+ 'ỏ' => 'Ỏ',
+ 'ố' => 'Ố',
+ 'ồ' => 'Ồ',
+ 'ổ' => 'Ổ',
+ 'ỗ' => 'Ỗ',
+ 'ộ' => 'Ộ',
+ 'ớ' => 'Ớ',
+ 'ờ' => 'Ờ',
+ 'ở' => 'Ở',
+ 'ỡ' => 'Ỡ',
+ 'ợ' => 'Ợ',
+ 'ụ' => 'Ụ',
+ 'ủ' => 'Ủ',
+ 'ứ' => 'Ứ',
+ 'ừ' => 'Ừ',
+ 'ử' => 'Ử',
+ 'ữ' => 'Ữ',
+ 'ự' => 'Ự',
+ 'ỳ' => 'Ỳ',
+ 'ỵ' => 'Ỵ',
+ 'ỷ' => 'Ỷ',
+ 'ỹ' => 'Ỹ',
+ 'ỻ' => 'Ỻ',
+ 'ỽ' => 'Ỽ',
+ 'ỿ' => 'Ỿ',
+ 'ἀ' => 'Ἀ',
+ 'ἁ' => 'Ἁ',
+ 'ἂ' => 'Ἂ',
+ 'ἃ' => 'Ἃ',
+ 'ἄ' => 'Ἄ',
+ 'ἅ' => 'Ἅ',
+ 'ἆ' => 'Ἆ',
+ 'ἇ' => 'Ἇ',
+ 'ἐ' => 'Ἐ',
+ 'ἑ' => 'Ἑ',
+ 'ἒ' => 'Ἒ',
+ 'ἓ' => 'Ἓ',
+ 'ἔ' => 'Ἔ',
+ 'ἕ' => 'Ἕ',
+ 'ἠ' => 'Ἠ',
+ 'ἡ' => 'Ἡ',
+ 'ἢ' => 'Ἢ',
+ 'ἣ' => 'Ἣ',
+ 'ἤ' => 'Ἤ',
+ 'ἥ' => 'Ἥ',
+ 'ἦ' => 'Ἦ',
+ 'ἧ' => 'Ἧ',
+ 'ἰ' => 'Ἰ',
+ 'ἱ' => 'Ἱ',
+ 'ἲ' => 'Ἲ',
+ 'ἳ' => 'Ἳ',
+ 'ἴ' => 'Ἴ',
+ 'ἵ' => 'Ἵ',
+ 'ἶ' => 'Ἶ',
+ 'ἷ' => 'Ἷ',
+ 'ὀ' => 'Ὀ',
+ 'ὁ' => 'Ὁ',
+ 'ὂ' => 'Ὂ',
+ 'ὃ' => 'Ὃ',
+ 'ὄ' => 'Ὄ',
+ 'ὅ' => 'Ὅ',
+ 'ὑ' => 'Ὑ',
+ 'ὓ' => 'Ὓ',
+ 'ὕ' => 'Ὕ',
+ 'ὗ' => 'Ὗ',
+ 'ὠ' => 'Ὠ',
+ 'ὡ' => 'Ὡ',
+ 'ὢ' => 'Ὢ',
+ 'ὣ' => 'Ὣ',
+ 'ὤ' => 'Ὤ',
+ 'ὥ' => 'Ὥ',
+ 'ὦ' => 'Ὦ',
+ 'ὧ' => 'Ὧ',
+ 'ὰ' => 'Ὰ',
+ 'ά' => 'Ά',
+ 'ὲ' => 'Ὲ',
+ 'έ' => 'Έ',
+ 'ὴ' => 'Ὴ',
+ 'ή' => 'Ή',
+ 'ὶ' => 'Ὶ',
+ 'ί' => 'Ί',
+ 'ὸ' => 'Ὸ',
+ 'ό' => 'Ό',
+ 'ὺ' => 'Ὺ',
+ 'ύ' => 'Ύ',
+ 'ὼ' => 'Ὼ',
+ 'ώ' => 'Ώ',
+ 'ᾀ' => 'ἈΙ',
+ 'ᾁ' => 'ἉΙ',
+ 'ᾂ' => 'ἊΙ',
+ 'ᾃ' => 'ἋΙ',
+ 'ᾄ' => 'ἌΙ',
+ 'ᾅ' => 'ἍΙ',
+ 'ᾆ' => 'ἎΙ',
+ 'ᾇ' => 'ἏΙ',
+ 'ᾐ' => 'ἨΙ',
+ 'ᾑ' => 'ἩΙ',
+ 'ᾒ' => 'ἪΙ',
+ 'ᾓ' => 'ἫΙ',
+ 'ᾔ' => 'ἬΙ',
+ 'ᾕ' => 'ἭΙ',
+ 'ᾖ' => 'ἮΙ',
+ 'ᾗ' => 'ἯΙ',
+ 'ᾠ' => 'ὨΙ',
+ 'ᾡ' => 'ὩΙ',
+ 'ᾢ' => 'ὪΙ',
+ 'ᾣ' => 'ὫΙ',
+ 'ᾤ' => 'ὬΙ',
+ 'ᾥ' => 'ὭΙ',
+ 'ᾦ' => 'ὮΙ',
+ 'ᾧ' => 'ὯΙ',
+ 'ᾰ' => 'Ᾰ',
+ 'ᾱ' => 'Ᾱ',
+ 'ᾳ' => 'ΑΙ',
+ 'ι' => 'Ι',
+ 'ῃ' => 'ΗΙ',
+ 'ῐ' => 'Ῐ',
+ 'ῑ' => 'Ῑ',
+ 'ῠ' => 'Ῠ',
+ 'ῡ' => 'Ῡ',
+ 'ῥ' => 'Ῥ',
+ 'ῳ' => 'ΩΙ',
+ 'ⅎ' => 'Ⅎ',
+ 'ⅰ' => 'Ⅰ',
+ 'ⅱ' => 'Ⅱ',
+ 'ⅲ' => 'Ⅲ',
+ 'ⅳ' => 'Ⅳ',
+ 'ⅴ' => 'Ⅴ',
+ 'ⅵ' => 'Ⅵ',
+ 'ⅶ' => 'Ⅶ',
+ 'ⅷ' => 'Ⅷ',
+ 'ⅸ' => 'Ⅸ',
+ 'ⅹ' => 'Ⅹ',
+ 'ⅺ' => 'Ⅺ',
+ 'ⅻ' => 'Ⅻ',
+ 'ⅼ' => 'Ⅼ',
+ 'ⅽ' => 'Ⅽ',
+ 'ⅾ' => 'Ⅾ',
+ 'ⅿ' => 'Ⅿ',
+ 'ↄ' => 'Ↄ',
+ 'ⓐ' => 'Ⓐ',
+ 'ⓑ' => 'Ⓑ',
+ 'ⓒ' => 'Ⓒ',
+ 'ⓓ' => 'Ⓓ',
+ 'ⓔ' => 'Ⓔ',
+ 'ⓕ' => 'Ⓕ',
+ 'ⓖ' => 'Ⓖ',
+ 'ⓗ' => 'Ⓗ',
+ 'ⓘ' => 'Ⓘ',
+ 'ⓙ' => 'Ⓙ',
+ 'ⓚ' => 'Ⓚ',
+ 'ⓛ' => 'Ⓛ',
+ 'ⓜ' => 'Ⓜ',
+ 'ⓝ' => 'Ⓝ',
+ 'ⓞ' => 'Ⓞ',
+ 'ⓟ' => 'Ⓟ',
+ 'ⓠ' => 'Ⓠ',
+ 'ⓡ' => 'Ⓡ',
+ 'ⓢ' => 'Ⓢ',
+ 'ⓣ' => 'Ⓣ',
+ 'ⓤ' => 'Ⓤ',
+ 'ⓥ' => 'Ⓥ',
+ 'ⓦ' => 'Ⓦ',
+ 'ⓧ' => 'Ⓧ',
+ 'ⓨ' => 'Ⓨ',
+ 'ⓩ' => 'Ⓩ',
+ 'ⰰ' => 'Ⰰ',
+ 'ⰱ' => 'Ⰱ',
+ 'ⰲ' => 'Ⰲ',
+ 'ⰳ' => 'Ⰳ',
+ 'ⰴ' => 'Ⰴ',
+ 'ⰵ' => 'Ⰵ',
+ 'ⰶ' => 'Ⰶ',
+ 'ⰷ' => 'Ⰷ',
+ 'ⰸ' => 'Ⰸ',
+ 'ⰹ' => 'Ⰹ',
+ 'ⰺ' => 'Ⰺ',
+ 'ⰻ' => 'Ⰻ',
+ 'ⰼ' => 'Ⰼ',
+ 'ⰽ' => 'Ⰽ',
+ 'ⰾ' => 'Ⰾ',
+ 'ⰿ' => 'Ⰿ',
+ 'ⱀ' => 'Ⱀ',
+ 'ⱁ' => 'Ⱁ',
+ 'ⱂ' => 'Ⱂ',
+ 'ⱃ' => 'Ⱃ',
+ 'ⱄ' => 'Ⱄ',
+ 'ⱅ' => 'Ⱅ',
+ 'ⱆ' => 'Ⱆ',
+ 'ⱇ' => 'Ⱇ',
+ 'ⱈ' => 'Ⱈ',
+ 'ⱉ' => 'Ⱉ',
+ 'ⱊ' => 'Ⱊ',
+ 'ⱋ' => 'Ⱋ',
+ 'ⱌ' => 'Ⱌ',
+ 'ⱍ' => 'Ⱍ',
+ 'ⱎ' => 'Ⱎ',
+ 'ⱏ' => 'Ⱏ',
+ 'ⱐ' => 'Ⱐ',
+ 'ⱑ' => 'Ⱑ',
+ 'ⱒ' => 'Ⱒ',
+ 'ⱓ' => 'Ⱓ',
+ 'ⱔ' => 'Ⱔ',
+ 'ⱕ' => 'Ⱕ',
+ 'ⱖ' => 'Ⱖ',
+ 'ⱗ' => 'Ⱗ',
+ 'ⱘ' => 'Ⱘ',
+ 'ⱙ' => 'Ⱙ',
+ 'ⱚ' => 'Ⱚ',
+ 'ⱛ' => 'Ⱛ',
+ 'ⱜ' => 'Ⱜ',
+ 'ⱝ' => 'Ⱝ',
+ 'ⱞ' => 'Ⱞ',
+ 'ⱡ' => 'Ⱡ',
+ 'ⱥ' => 'Ⱥ',
+ 'ⱦ' => 'Ⱦ',
+ 'ⱨ' => 'Ⱨ',
+ 'ⱪ' => 'Ⱪ',
+ 'ⱬ' => 'Ⱬ',
+ 'ⱳ' => 'Ⱳ',
+ 'ⱶ' => 'Ⱶ',
+ 'ⲁ' => 'Ⲁ',
+ 'ⲃ' => 'Ⲃ',
+ 'ⲅ' => 'Ⲅ',
+ 'ⲇ' => 'Ⲇ',
+ 'ⲉ' => 'Ⲉ',
+ 'ⲋ' => 'Ⲋ',
+ 'ⲍ' => 'Ⲍ',
+ 'ⲏ' => 'Ⲏ',
+ 'ⲑ' => 'Ⲑ',
+ 'ⲓ' => 'Ⲓ',
+ 'ⲕ' => 'Ⲕ',
+ 'ⲗ' => 'Ⲗ',
+ 'ⲙ' => 'Ⲙ',
+ 'ⲛ' => 'Ⲛ',
+ 'ⲝ' => 'Ⲝ',
+ 'ⲟ' => 'Ⲟ',
+ 'ⲡ' => 'Ⲡ',
+ 'ⲣ' => 'Ⲣ',
+ 'ⲥ' => 'Ⲥ',
+ 'ⲧ' => 'Ⲧ',
+ 'ⲩ' => 'Ⲩ',
+ 'ⲫ' => 'Ⲫ',
+ 'ⲭ' => 'Ⲭ',
+ 'ⲯ' => 'Ⲯ',
+ 'ⲱ' => 'Ⲱ',
+ 'ⲳ' => 'Ⲳ',
+ 'ⲵ' => 'Ⲵ',
+ 'ⲷ' => 'Ⲷ',
+ 'ⲹ' => 'Ⲹ',
+ 'ⲻ' => 'Ⲻ',
+ 'ⲽ' => 'Ⲽ',
+ 'ⲿ' => 'Ⲿ',
+ 'ⳁ' => 'Ⳁ',
+ 'ⳃ' => 'Ⳃ',
+ 'ⳅ' => 'Ⳅ',
+ 'ⳇ' => 'Ⳇ',
+ 'ⳉ' => 'Ⳉ',
+ 'ⳋ' => 'Ⳋ',
+ 'ⳍ' => 'Ⳍ',
+ 'ⳏ' => 'Ⳏ',
+ 'ⳑ' => 'Ⳑ',
+ 'ⳓ' => 'Ⳓ',
+ 'ⳕ' => 'Ⳕ',
+ 'ⳗ' => 'Ⳗ',
+ 'ⳙ' => 'Ⳙ',
+ 'ⳛ' => 'Ⳛ',
+ 'ⳝ' => 'Ⳝ',
+ 'ⳟ' => 'Ⳟ',
+ 'ⳡ' => 'Ⳡ',
+ 'ⳣ' => 'Ⳣ',
+ 'ⳬ' => 'Ⳬ',
+ 'ⳮ' => 'Ⳮ',
+ 'ⳳ' => 'Ⳳ',
+ 'ⴀ' => 'Ⴀ',
+ 'ⴁ' => 'Ⴁ',
+ 'ⴂ' => 'Ⴂ',
+ 'ⴃ' => 'Ⴃ',
+ 'ⴄ' => 'Ⴄ',
+ 'ⴅ' => 'Ⴅ',
+ 'ⴆ' => 'Ⴆ',
+ 'ⴇ' => 'Ⴇ',
+ 'ⴈ' => 'Ⴈ',
+ 'ⴉ' => 'Ⴉ',
+ 'ⴊ' => 'Ⴊ',
+ 'ⴋ' => 'Ⴋ',
+ 'ⴌ' => 'Ⴌ',
+ 'ⴍ' => 'Ⴍ',
+ 'ⴎ' => 'Ⴎ',
+ 'ⴏ' => 'Ⴏ',
+ 'ⴐ' => 'Ⴐ',
+ 'ⴑ' => 'Ⴑ',
+ 'ⴒ' => 'Ⴒ',
+ 'ⴓ' => 'Ⴓ',
+ 'ⴔ' => 'Ⴔ',
+ 'ⴕ' => 'Ⴕ',
+ 'ⴖ' => 'Ⴖ',
+ 'ⴗ' => 'Ⴗ',
+ 'ⴘ' => 'Ⴘ',
+ 'ⴙ' => 'Ⴙ',
+ 'ⴚ' => 'Ⴚ',
+ 'ⴛ' => 'Ⴛ',
+ 'ⴜ' => 'Ⴜ',
+ 'ⴝ' => 'Ⴝ',
+ 'ⴞ' => 'Ⴞ',
+ 'ⴟ' => 'Ⴟ',
+ 'ⴠ' => 'Ⴠ',
+ 'ⴡ' => 'Ⴡ',
+ 'ⴢ' => 'Ⴢ',
+ 'ⴣ' => 'Ⴣ',
+ 'ⴤ' => 'Ⴤ',
+ 'ⴥ' => 'Ⴥ',
+ 'ⴧ' => 'Ⴧ',
+ 'ⴭ' => 'Ⴭ',
+ 'ꙁ' => 'Ꙁ',
+ 'ꙃ' => 'Ꙃ',
+ 'ꙅ' => 'Ꙅ',
+ 'ꙇ' => 'Ꙇ',
+ 'ꙉ' => 'Ꙉ',
+ 'ꙋ' => 'Ꙋ',
+ 'ꙍ' => 'Ꙍ',
+ 'ꙏ' => 'Ꙏ',
+ 'ꙑ' => 'Ꙑ',
+ 'ꙓ' => 'Ꙓ',
+ 'ꙕ' => 'Ꙕ',
+ 'ꙗ' => 'Ꙗ',
+ 'ꙙ' => 'Ꙙ',
+ 'ꙛ' => 'Ꙛ',
+ 'ꙝ' => 'Ꙝ',
+ 'ꙟ' => 'Ꙟ',
+ 'ꙡ' => 'Ꙡ',
+ 'ꙣ' => 'Ꙣ',
+ 'ꙥ' => 'Ꙥ',
+ 'ꙧ' => 'Ꙧ',
+ 'ꙩ' => 'Ꙩ',
+ 'ꙫ' => 'Ꙫ',
+ 'ꙭ' => 'Ꙭ',
+ 'ꚁ' => 'Ꚁ',
+ 'ꚃ' => 'Ꚃ',
+ 'ꚅ' => 'Ꚅ',
+ 'ꚇ' => 'Ꚇ',
+ 'ꚉ' => 'Ꚉ',
+ 'ꚋ' => 'Ꚋ',
+ 'ꚍ' => 'Ꚍ',
+ 'ꚏ' => 'Ꚏ',
+ 'ꚑ' => 'Ꚑ',
+ 'ꚓ' => 'Ꚓ',
+ 'ꚕ' => 'Ꚕ',
+ 'ꚗ' => 'Ꚗ',
+ 'ꚙ' => 'Ꚙ',
+ 'ꚛ' => 'Ꚛ',
+ 'ꜣ' => 'Ꜣ',
+ 'ꜥ' => 'Ꜥ',
+ 'ꜧ' => 'Ꜧ',
+ 'ꜩ' => 'Ꜩ',
+ 'ꜫ' => 'Ꜫ',
+ 'ꜭ' => 'Ꜭ',
+ 'ꜯ' => 'Ꜯ',
+ 'ꜳ' => 'Ꜳ',
+ 'ꜵ' => 'Ꜵ',
+ 'ꜷ' => 'Ꜷ',
+ 'ꜹ' => 'Ꜹ',
+ 'ꜻ' => 'Ꜻ',
+ 'ꜽ' => 'Ꜽ',
+ 'ꜿ' => 'Ꜿ',
+ 'ꝁ' => 'Ꝁ',
+ 'ꝃ' => 'Ꝃ',
+ 'ꝅ' => 'Ꝅ',
+ 'ꝇ' => 'Ꝇ',
+ 'ꝉ' => 'Ꝉ',
+ 'ꝋ' => 'Ꝋ',
+ 'ꝍ' => 'Ꝍ',
+ 'ꝏ' => 'Ꝏ',
+ 'ꝑ' => 'Ꝑ',
+ 'ꝓ' => 'Ꝓ',
+ 'ꝕ' => 'Ꝕ',
+ 'ꝗ' => 'Ꝗ',
+ 'ꝙ' => 'Ꝙ',
+ 'ꝛ' => 'Ꝛ',
+ 'ꝝ' => 'Ꝝ',
+ 'ꝟ' => 'Ꝟ',
+ 'ꝡ' => 'Ꝡ',
+ 'ꝣ' => 'Ꝣ',
+ 'ꝥ' => 'Ꝥ',
+ 'ꝧ' => 'Ꝧ',
+ 'ꝩ' => 'Ꝩ',
+ 'ꝫ' => 'Ꝫ',
+ 'ꝭ' => 'Ꝭ',
+ 'ꝯ' => 'Ꝯ',
+ 'ꝺ' => 'Ꝺ',
+ 'ꝼ' => 'Ꝼ',
+ 'ꝿ' => 'Ꝿ',
+ 'ꞁ' => 'Ꞁ',
+ 'ꞃ' => 'Ꞃ',
+ 'ꞅ' => 'Ꞅ',
+ 'ꞇ' => 'Ꞇ',
+ 'ꞌ' => 'Ꞌ',
+ 'ꞑ' => 'Ꞑ',
+ 'ꞓ' => 'Ꞓ',
+ 'ꞔ' => 'Ꞔ',
+ 'ꞗ' => 'Ꞗ',
+ 'ꞙ' => 'Ꞙ',
+ 'ꞛ' => 'Ꞛ',
+ 'ꞝ' => 'Ꞝ',
+ 'ꞟ' => 'Ꞟ',
+ 'ꞡ' => 'Ꞡ',
+ 'ꞣ' => 'Ꞣ',
+ 'ꞥ' => 'Ꞥ',
+ 'ꞧ' => 'Ꞧ',
+ 'ꞩ' => 'Ꞩ',
+ 'ꞵ' => 'Ꞵ',
+ 'ꞷ' => 'Ꞷ',
+ 'ꞹ' => 'Ꞹ',
+ 'ꞻ' => 'Ꞻ',
+ 'ꞽ' => 'Ꞽ',
+ 'ꞿ' => 'Ꞿ',
+ 'ꟃ' => 'Ꟃ',
+ 'ꟈ' => 'Ꟈ',
+ 'ꟊ' => 'Ꟊ',
+ 'ꟶ' => 'Ꟶ',
+ 'ꭓ' => 'Ꭓ',
+ 'ꭰ' => 'Ꭰ',
+ 'ꭱ' => 'Ꭱ',
+ 'ꭲ' => 'Ꭲ',
+ 'ꭳ' => 'Ꭳ',
+ 'ꭴ' => 'Ꭴ',
+ 'ꭵ' => 'Ꭵ',
+ 'ꭶ' => 'Ꭶ',
+ 'ꭷ' => 'Ꭷ',
+ 'ꭸ' => 'Ꭸ',
+ 'ꭹ' => 'Ꭹ',
+ 'ꭺ' => 'Ꭺ',
+ 'ꭻ' => 'Ꭻ',
+ 'ꭼ' => 'Ꭼ',
+ 'ꭽ' => 'Ꭽ',
+ 'ꭾ' => 'Ꭾ',
+ 'ꭿ' => 'Ꭿ',
+ 'ꮀ' => 'Ꮀ',
+ 'ꮁ' => 'Ꮁ',
+ 'ꮂ' => 'Ꮂ',
+ 'ꮃ' => 'Ꮃ',
+ 'ꮄ' => 'Ꮄ',
+ 'ꮅ' => 'Ꮅ',
+ 'ꮆ' => 'Ꮆ',
+ 'ꮇ' => 'Ꮇ',
+ 'ꮈ' => 'Ꮈ',
+ 'ꮉ' => 'Ꮉ',
+ 'ꮊ' => 'Ꮊ',
+ 'ꮋ' => 'Ꮋ',
+ 'ꮌ' => 'Ꮌ',
+ 'ꮍ' => 'Ꮍ',
+ 'ꮎ' => 'Ꮎ',
+ 'ꮏ' => 'Ꮏ',
+ 'ꮐ' => 'Ꮐ',
+ 'ꮑ' => 'Ꮑ',
+ 'ꮒ' => 'Ꮒ',
+ 'ꮓ' => 'Ꮓ',
+ 'ꮔ' => 'Ꮔ',
+ 'ꮕ' => 'Ꮕ',
+ 'ꮖ' => 'Ꮖ',
+ 'ꮗ' => 'Ꮗ',
+ 'ꮘ' => 'Ꮘ',
+ 'ꮙ' => 'Ꮙ',
+ 'ꮚ' => 'Ꮚ',
+ 'ꮛ' => 'Ꮛ',
+ 'ꮜ' => 'Ꮜ',
+ 'ꮝ' => 'Ꮝ',
+ 'ꮞ' => 'Ꮞ',
+ 'ꮟ' => 'Ꮟ',
+ 'ꮠ' => 'Ꮠ',
+ 'ꮡ' => 'Ꮡ',
+ 'ꮢ' => 'Ꮢ',
+ 'ꮣ' => 'Ꮣ',
+ 'ꮤ' => 'Ꮤ',
+ 'ꮥ' => 'Ꮥ',
+ 'ꮦ' => 'Ꮦ',
+ 'ꮧ' => 'Ꮧ',
+ 'ꮨ' => 'Ꮨ',
+ 'ꮩ' => 'Ꮩ',
+ 'ꮪ' => 'Ꮪ',
+ 'ꮫ' => 'Ꮫ',
+ 'ꮬ' => 'Ꮬ',
+ 'ꮭ' => 'Ꮭ',
+ 'ꮮ' => 'Ꮮ',
+ 'ꮯ' => 'Ꮯ',
+ 'ꮰ' => 'Ꮰ',
+ 'ꮱ' => 'Ꮱ',
+ 'ꮲ' => 'Ꮲ',
+ 'ꮳ' => 'Ꮳ',
+ 'ꮴ' => 'Ꮴ',
+ 'ꮵ' => 'Ꮵ',
+ 'ꮶ' => 'Ꮶ',
+ 'ꮷ' => 'Ꮷ',
+ 'ꮸ' => 'Ꮸ',
+ 'ꮹ' => 'Ꮹ',
+ 'ꮺ' => 'Ꮺ',
+ 'ꮻ' => 'Ꮻ',
+ 'ꮼ' => 'Ꮼ',
+ 'ꮽ' => 'Ꮽ',
+ 'ꮾ' => 'Ꮾ',
+ 'ꮿ' => 'Ꮿ',
+ 'a' => 'A',
+ 'b' => 'B',
+ 'c' => 'C',
+ 'd' => 'D',
+ 'e' => 'E',
+ 'f' => 'F',
+ 'g' => 'G',
+ 'h' => 'H',
+ 'i' => 'I',
+ 'j' => 'J',
+ 'k' => 'K',
+ 'l' => 'L',
+ 'm' => 'M',
+ 'n' => 'N',
+ 'o' => 'O',
+ 'p' => 'P',
+ 'q' => 'Q',
+ 'r' => 'R',
+ 's' => 'S',
+ 't' => 'T',
+ 'u' => 'U',
+ 'v' => 'V',
+ 'w' => 'W',
+ 'x' => 'X',
+ 'y' => 'Y',
+ 'z' => 'Z',
+ '𐐨' => '𐐀',
+ '𐐩' => '𐐁',
+ '𐐪' => '𐐂',
+ '𐐫' => '𐐃',
+ '𐐬' => '𐐄',
+ '𐐭' => '𐐅',
+ '𐐮' => '𐐆',
+ '𐐯' => '𐐇',
+ '𐐰' => '𐐈',
+ '𐐱' => '𐐉',
+ '𐐲' => '𐐊',
+ '𐐳' => '𐐋',
+ '𐐴' => '𐐌',
+ '𐐵' => '𐐍',
+ '𐐶' => '𐐎',
+ '𐐷' => '𐐏',
+ '𐐸' => '𐐐',
+ '𐐹' => '𐐑',
+ '𐐺' => '𐐒',
+ '𐐻' => '𐐓',
+ '𐐼' => '𐐔',
+ '𐐽' => '𐐕',
+ '𐐾' => '𐐖',
+ '𐐿' => '𐐗',
+ '𐑀' => '𐐘',
+ '𐑁' => '𐐙',
+ '𐑂' => '𐐚',
+ '𐑃' => '𐐛',
+ '𐑄' => '𐐜',
+ '𐑅' => '𐐝',
+ '𐑆' => '𐐞',
+ '𐑇' => '𐐟',
+ '𐑈' => '𐐠',
+ '𐑉' => '𐐡',
+ '𐑊' => '𐐢',
+ '𐑋' => '𐐣',
+ '𐑌' => '𐐤',
+ '𐑍' => '𐐥',
+ '𐑎' => '𐐦',
+ '𐑏' => '𐐧',
+ '𐓘' => '𐒰',
+ '𐓙' => '𐒱',
+ '𐓚' => '𐒲',
+ '𐓛' => '𐒳',
+ '𐓜' => '𐒴',
+ '𐓝' => '𐒵',
+ '𐓞' => '𐒶',
+ '𐓟' => '𐒷',
+ '𐓠' => '𐒸',
+ '𐓡' => '𐒹',
+ '𐓢' => '𐒺',
+ '𐓣' => '𐒻',
+ '𐓤' => '𐒼',
+ '𐓥' => '𐒽',
+ '𐓦' => '𐒾',
+ '𐓧' => '𐒿',
+ '𐓨' => '𐓀',
+ '𐓩' => '𐓁',
+ '𐓪' => '𐓂',
+ '𐓫' => '𐓃',
+ '𐓬' => '𐓄',
+ '𐓭' => '𐓅',
+ '𐓮' => '𐓆',
+ '𐓯' => '𐓇',
+ '𐓰' => '𐓈',
+ '𐓱' => '𐓉',
+ '𐓲' => '𐓊',
+ '𐓳' => '𐓋',
+ '𐓴' => '𐓌',
+ '𐓵' => '𐓍',
+ '𐓶' => '𐓎',
+ '𐓷' => '𐓏',
+ '𐓸' => '𐓐',
+ '𐓹' => '𐓑',
+ '𐓺' => '𐓒',
+ '𐓻' => '𐓓',
+ '𐳀' => '𐲀',
+ '𐳁' => '𐲁',
+ '𐳂' => '𐲂',
+ '𐳃' => '𐲃',
+ '𐳄' => '𐲄',
+ '𐳅' => '𐲅',
+ '𐳆' => '𐲆',
+ '𐳇' => '𐲇',
+ '𐳈' => '𐲈',
+ '𐳉' => '𐲉',
+ '𐳊' => '𐲊',
+ '𐳋' => '𐲋',
+ '𐳌' => '𐲌',
+ '𐳍' => '𐲍',
+ '𐳎' => '𐲎',
+ '𐳏' => '𐲏',
+ '𐳐' => '𐲐',
+ '𐳑' => '𐲑',
+ '𐳒' => '𐲒',
+ '𐳓' => '𐲓',
+ '𐳔' => '𐲔',
+ '𐳕' => '𐲕',
+ '𐳖' => '𐲖',
+ '𐳗' => '𐲗',
+ '𐳘' => '𐲘',
+ '𐳙' => '𐲙',
+ '𐳚' => '𐲚',
+ '𐳛' => '𐲛',
+ '𐳜' => '𐲜',
+ '𐳝' => '𐲝',
+ '𐳞' => '𐲞',
+ '𐳟' => '𐲟',
+ '𐳠' => '𐲠',
+ '𐳡' => '𐲡',
+ '𐳢' => '𐲢',
+ '𐳣' => '𐲣',
+ '𐳤' => '𐲤',
+ '𐳥' => '𐲥',
+ '𐳦' => '𐲦',
+ '𐳧' => '𐲧',
+ '𐳨' => '𐲨',
+ '𐳩' => '𐲩',
+ '𐳪' => '𐲪',
+ '𐳫' => '𐲫',
+ '𐳬' => '𐲬',
+ '𐳭' => '𐲭',
+ '𐳮' => '𐲮',
+ '𐳯' => '𐲯',
+ '𐳰' => '𐲰',
+ '𐳱' => '𐲱',
+ '𐳲' => '𐲲',
+ '𑣀' => '𑢠',
+ '𑣁' => '𑢡',
+ '𑣂' => '𑢢',
+ '𑣃' => '𑢣',
+ '𑣄' => '𑢤',
+ '𑣅' => '𑢥',
+ '𑣆' => '𑢦',
+ '𑣇' => '𑢧',
+ '𑣈' => '𑢨',
+ '𑣉' => '𑢩',
+ '𑣊' => '𑢪',
+ '𑣋' => '𑢫',
+ '𑣌' => '𑢬',
+ '𑣍' => '𑢭',
+ '𑣎' => '𑢮',
+ '𑣏' => '𑢯',
+ '𑣐' => '𑢰',
+ '𑣑' => '𑢱',
+ '𑣒' => '𑢲',
+ '𑣓' => '𑢳',
+ '𑣔' => '𑢴',
+ '𑣕' => '𑢵',
+ '𑣖' => '𑢶',
+ '𑣗' => '𑢷',
+ '𑣘' => '𑢸',
+ '𑣙' => '𑢹',
+ '𑣚' => '𑢺',
+ '𑣛' => '𑢻',
+ '𑣜' => '𑢼',
+ '𑣝' => '𑢽',
+ '𑣞' => '𑢾',
+ '𑣟' => '𑢿',
+ '𖹠' => '𖹀',
+ '𖹡' => '𖹁',
+ '𖹢' => '𖹂',
+ '𖹣' => '𖹃',
+ '𖹤' => '𖹄',
+ '𖹥' => '𖹅',
+ '𖹦' => '𖹆',
+ '𖹧' => '𖹇',
+ '𖹨' => '𖹈',
+ '𖹩' => '𖹉',
+ '𖹪' => '𖹊',
+ '𖹫' => '𖹋',
+ '𖹬' => '𖹌',
+ '𖹭' => '𖹍',
+ '𖹮' => '𖹎',
+ '𖹯' => '𖹏',
+ '𖹰' => '𖹐',
+ '𖹱' => '𖹑',
+ '𖹲' => '𖹒',
+ '𖹳' => '𖹓',
+ '𖹴' => '𖹔',
+ '𖹵' => '𖹕',
+ '𖹶' => '𖹖',
+ '𖹷' => '𖹗',
+ '𖹸' => '𖹘',
+ '𖹹' => '𖹙',
+ '𖹺' => '𖹚',
+ '𖹻' => '𖹛',
+ '𖹼' => '𖹜',
+ '𖹽' => '𖹝',
+ '𖹾' => '𖹞',
+ '𖹿' => '𖹟',
+ '𞤢' => '𞤀',
+ '𞤣' => '𞤁',
+ '𞤤' => '𞤂',
+ '𞤥' => '𞤃',
+ '𞤦' => '𞤄',
+ '𞤧' => '𞤅',
+ '𞤨' => '𞤆',
+ '𞤩' => '𞤇',
+ '𞤪' => '𞤈',
+ '𞤫' => '𞤉',
+ '𞤬' => '𞤊',
+ '𞤭' => '𞤋',
+ '𞤮' => '𞤌',
+ '𞤯' => '𞤍',
+ '𞤰' => '𞤎',
+ '𞤱' => '𞤏',
+ '𞤲' => '𞤐',
+ '𞤳' => '𞤑',
+ '𞤴' => '𞤒',
+ '𞤵' => '𞤓',
+ '𞤶' => '𞤔',
+ '𞤷' => '𞤕',
+ '𞤸' => '𞤖',
+ '𞤹' => '𞤗',
+ '𞤺' => '𞤘',
+ '𞤻' => '𞤙',
+ '𞤼' => '𞤚',
+ '𞤽' => '𞤛',
+ '𞤾' => '𞤜',
+ '𞤿' => '𞤝',
+ '𞥀' => '𞤞',
+ '𞥁' => '𞤟',
+ '𞥂' => '𞤠',
+ '𞥃' => '𞤡',
+ 'ß' => 'SS',
+ 'ff' => 'FF',
+ 'fi' => 'FI',
+ 'fl' => 'FL',
+ 'ffi' => 'FFI',
+ 'ffl' => 'FFL',
+ 'ſt' => 'ST',
+ 'st' => 'ST',
+ 'և' => 'ԵՒ',
+ 'ﬓ' => 'ՄՆ',
+ 'ﬔ' => 'ՄԵ',
+ 'ﬕ' => 'ՄԻ',
+ 'ﬖ' => 'ՎՆ',
+ 'ﬗ' => 'ՄԽ',
+ 'ʼn' => 'ʼN',
+ 'ΐ' => 'Ϊ́',
+ 'ΰ' => 'Ϋ́',
+ 'ǰ' => 'J̌',
+ 'ẖ' => 'H̱',
+ 'ẗ' => 'T̈',
+ 'ẘ' => 'W̊',
+ 'ẙ' => 'Y̊',
+ 'ẚ' => 'Aʾ',
+ 'ὐ' => 'Υ̓',
+ 'ὒ' => 'Υ̓̀',
+ 'ὔ' => 'Υ̓́',
+ 'ὖ' => 'Υ̓͂',
+ 'ᾶ' => 'Α͂',
+ 'ῆ' => 'Η͂',
+ 'ῒ' => 'Ϊ̀',
+ 'ΐ' => 'Ϊ́',
+ 'ῖ' => 'Ι͂',
+ 'ῗ' => 'Ϊ͂',
+ 'ῢ' => 'Ϋ̀',
+ 'ΰ' => 'Ϋ́',
+ 'ῤ' => 'Ρ̓',
+ 'ῦ' => 'Υ͂',
+ 'ῧ' => 'Ϋ͂',
+ 'ῶ' => 'Ω͂',
+ 'ᾈ' => 'ἈΙ',
+ 'ᾉ' => 'ἉΙ',
+ 'ᾊ' => 'ἊΙ',
+ 'ᾋ' => 'ἋΙ',
+ 'ᾌ' => 'ἌΙ',
+ 'ᾍ' => 'ἍΙ',
+ 'ᾎ' => 'ἎΙ',
+ 'ᾏ' => 'ἏΙ',
+ 'ᾘ' => 'ἨΙ',
+ 'ᾙ' => 'ἩΙ',
+ 'ᾚ' => 'ἪΙ',
+ 'ᾛ' => 'ἫΙ',
+ 'ᾜ' => 'ἬΙ',
+ 'ᾝ' => 'ἭΙ',
+ 'ᾞ' => 'ἮΙ',
+ 'ᾟ' => 'ἯΙ',
+ 'ᾨ' => 'ὨΙ',
+ 'ᾩ' => 'ὩΙ',
+ 'ᾪ' => 'ὪΙ',
+ 'ᾫ' => 'ὫΙ',
+ 'ᾬ' => 'ὬΙ',
+ 'ᾭ' => 'ὭΙ',
+ 'ᾮ' => 'ὮΙ',
+ 'ᾯ' => 'ὯΙ',
+ 'ᾼ' => 'ΑΙ',
+ 'ῌ' => 'ΗΙ',
+ 'ῼ' => 'ΩΙ',
+ 'ᾲ' => 'ᾺΙ',
+ 'ᾴ' => 'ΆΙ',
+ 'ῂ' => 'ῊΙ',
+ 'ῄ' => 'ΉΙ',
+ 'ῲ' => 'ῺΙ',
+ 'ῴ' => 'ΏΙ',
+ 'ᾷ' => 'Α͂Ι',
+ 'ῇ' => 'Η͂Ι',
+ 'ῷ' => 'Ω͂Ι',
+);
diff --git a/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php
new file mode 100644
index 000000000..ff51ae079
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/bootstrap.php
@@ -0,0 +1,172 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Mbstring as p;
+
+if (\PHP_VERSION_ID >= 80000) {
+ return require __DIR__.'/bootstrap80.php';
+}
+
+if (!function_exists('mb_convert_encoding')) {
+ function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); }
+}
+if (!function_exists('mb_decode_mimeheader')) {
+ function mb_decode_mimeheader($string) { return p\Mbstring::mb_decode_mimeheader($string); }
+}
+if (!function_exists('mb_encode_mimeheader')) {
+ function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = "\r\n", $indent = 0) { return p\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); }
+}
+if (!function_exists('mb_decode_numericentity')) {
+ function mb_decode_numericentity($string, $map, $encoding = null) { return p\Mbstring::mb_decode_numericentity($string, $map, $encoding); }
+}
+if (!function_exists('mb_encode_numericentity')) {
+ function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); }
+}
+if (!function_exists('mb_convert_case')) {
+ function mb_convert_case($string, $mode, $encoding = null) { return p\Mbstring::mb_convert_case($string, $mode, $encoding); }
+}
+if (!function_exists('mb_internal_encoding')) {
+ function mb_internal_encoding($encoding = null) { return p\Mbstring::mb_internal_encoding($encoding); }
+}
+if (!function_exists('mb_language')) {
+ function mb_language($language = null) { return p\Mbstring::mb_language($language); }
+}
+if (!function_exists('mb_list_encodings')) {
+ function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); }
+}
+if (!function_exists('mb_encoding_aliases')) {
+ function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); }
+}
+if (!function_exists('mb_check_encoding')) {
+ function mb_check_encoding($value = null, $encoding = null) { return p\Mbstring::mb_check_encoding($value, $encoding); }
+}
+if (!function_exists('mb_detect_encoding')) {
+ function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\Mbstring::mb_detect_encoding($string, $encodings, $strict); }
+}
+if (!function_exists('mb_detect_order')) {
+ function mb_detect_order($encoding = null) { return p\Mbstring::mb_detect_order($encoding); }
+}
+if (!function_exists('mb_parse_str')) {
+ function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; }
+}
+if (!function_exists('mb_strlen')) {
+ function mb_strlen($string, $encoding = null) { return p\Mbstring::mb_strlen($string, $encoding); }
+}
+if (!function_exists('mb_strpos')) {
+ function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strtolower')) {
+ function mb_strtolower($string, $encoding = null) { return p\Mbstring::mb_strtolower($string, $encoding); }
+}
+if (!function_exists('mb_strtoupper')) {
+ function mb_strtoupper($string, $encoding = null) { return p\Mbstring::mb_strtoupper($string, $encoding); }
+}
+if (!function_exists('mb_substitute_character')) {
+ function mb_substitute_character($substitute_character = null) { return p\Mbstring::mb_substitute_character($substitute_character); }
+}
+if (!function_exists('mb_substr')) {
+ function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\Mbstring::mb_substr($string, $start, $length, $encoding); }
+}
+if (!function_exists('mb_stripos')) {
+ function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_stristr')) {
+ function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrchr')) {
+ function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrichr')) {
+ function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strripos')) {
+ function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strrpos')) {
+ function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strstr')) {
+ function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_get_info')) {
+ function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); }
+}
+if (!function_exists('mb_http_output')) {
+ function mb_http_output($encoding = null) { return p\Mbstring::mb_http_output($encoding); }
+}
+if (!function_exists('mb_strwidth')) {
+ function mb_strwidth($string, $encoding = null) { return p\Mbstring::mb_strwidth($string, $encoding); }
+}
+if (!function_exists('mb_substr_count')) {
+ function mb_substr_count($haystack, $needle, $encoding = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $encoding); }
+}
+if (!function_exists('mb_output_handler')) {
+ function mb_output_handler($string, $status) { return p\Mbstring::mb_output_handler($string, $status); }
+}
+if (!function_exists('mb_http_input')) {
+ function mb_http_input($type = null) { return p\Mbstring::mb_http_input($type); }
+}
+
+if (!function_exists('mb_convert_variables')) {
+ function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); }
+}
+
+if (!function_exists('mb_ord')) {
+ function mb_ord($string, $encoding = null) { return p\Mbstring::mb_ord($string, $encoding); }
+}
+if (!function_exists('mb_chr')) {
+ function mb_chr($codepoint, $encoding = null) { return p\Mbstring::mb_chr($codepoint, $encoding); }
+}
+if (!function_exists('mb_scrub')) {
+ function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); }
+}
+if (!function_exists('mb_str_split')) {
+ function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); }
+}
+
+if (!function_exists('mb_str_pad')) {
+ function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }
+}
+
+if (!function_exists('mb_ucfirst')) {
+ function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); }
+}
+
+if (!function_exists('mb_lcfirst')) {
+ function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); }
+}
+
+if (!function_exists('mb_trim')) {
+ function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); }
+}
+
+if (!function_exists('mb_ltrim')) {
+ function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); }
+}
+
+if (!function_exists('mb_rtrim')) {
+ function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); }
+}
+
+
+if (extension_loaded('mbstring')) {
+ return;
+}
+
+if (!defined('MB_CASE_UPPER')) {
+ define('MB_CASE_UPPER', 0);
+}
+if (!defined('MB_CASE_LOWER')) {
+ define('MB_CASE_LOWER', 1);
+}
+if (!defined('MB_CASE_TITLE')) {
+ define('MB_CASE_TITLE', 2);
+}
diff --git a/vendor/symfony/polyfill-mbstring/bootstrap80.php b/vendor/symfony/polyfill-mbstring/bootstrap80.php
new file mode 100644
index 000000000..5be7d2018
--- /dev/null
+++ b/vendor/symfony/polyfill-mbstring/bootstrap80.php
@@ -0,0 +1,167 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Mbstring as p;
+
+if (!function_exists('mb_convert_encoding')) {
+ function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); }
+}
+if (!function_exists('mb_decode_mimeheader')) {
+ function mb_decode_mimeheader(?string $string): string { return p\Mbstring::mb_decode_mimeheader((string) $string); }
+}
+if (!function_exists('mb_encode_mimeheader')) {
+ function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = "\r\n", ?int $indent = 0): string { return p\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); }
+}
+if (!function_exists('mb_decode_numericentity')) {
+ function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); }
+}
+if (!function_exists('mb_encode_numericentity')) {
+ function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); }
+}
+if (!function_exists('mb_convert_case')) {
+ function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); }
+}
+if (!function_exists('mb_internal_encoding')) {
+ function mb_internal_encoding(?string $encoding = null): string|bool { return p\Mbstring::mb_internal_encoding($encoding); }
+}
+if (!function_exists('mb_language')) {
+ function mb_language(?string $language = null): string|bool { return p\Mbstring::mb_language($language); }
+}
+if (!function_exists('mb_list_encodings')) {
+ function mb_list_encodings(): array { return p\Mbstring::mb_list_encodings(); }
+}
+if (!function_exists('mb_encoding_aliases')) {
+ function mb_encoding_aliases(?string $encoding): array { return p\Mbstring::mb_encoding_aliases((string) $encoding); }
+}
+if (!function_exists('mb_check_encoding')) {
+ function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\Mbstring::mb_check_encoding($value, $encoding); }
+}
+if (!function_exists('mb_detect_encoding')) {
+ function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); }
+}
+if (!function_exists('mb_detect_order')) {
+ function mb_detect_order(array|string|null $encoding = null): array|bool { return p\Mbstring::mb_detect_order($encoding); }
+}
+if (!function_exists('mb_parse_str')) {
+ function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; }
+}
+if (!function_exists('mb_strlen')) {
+ function mb_strlen(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strlen((string) $string, $encoding); }
+}
+if (!function_exists('mb_strpos')) {
+ function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strtolower')) {
+ function mb_strtolower(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtolower((string) $string, $encoding); }
+}
+if (!function_exists('mb_strtoupper')) {
+ function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtoupper((string) $string, $encoding); }
+}
+if (!function_exists('mb_substitute_character')) {
+ function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\Mbstring::mb_substitute_character($substitute_character); }
+}
+if (!function_exists('mb_substr')) {
+ function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); }
+}
+if (!function_exists('mb_stripos')) {
+ function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_stristr')) {
+ function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrchr')) {
+ function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrichr')) {
+ function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strripos')) {
+ function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strrpos')) {
+ function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strstr')) {
+ function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_get_info')) {
+ function mb_get_info(?string $type = 'all'): array|string|int|false|null { return p\Mbstring::mb_get_info((string) $type); }
+}
+if (!function_exists('mb_http_output')) {
+ function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); }
+}
+if (!function_exists('mb_strwidth')) {
+ function mb_strwidth(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strwidth((string) $string, $encoding); }
+}
+if (!function_exists('mb_substr_count')) {
+ function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); }
+}
+if (!function_exists('mb_output_handler')) {
+ function mb_output_handler(?string $string, ?int $status): string { return p\Mbstring::mb_output_handler((string) $string, (int) $status); }
+}
+if (!function_exists('mb_http_input')) {
+ function mb_http_input(?string $type = null): array|string|false { return p\Mbstring::mb_http_input($type); }
+}
+
+if (!function_exists('mb_convert_variables')) {
+ function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); }
+}
+
+if (!function_exists('mb_ord')) {
+ function mb_ord(?string $string, ?string $encoding = null): int|false { return p\Mbstring::mb_ord((string) $string, $encoding); }
+}
+if (!function_exists('mb_chr')) {
+ function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\Mbstring::mb_chr((int) $codepoint, $encoding); }
+}
+if (!function_exists('mb_scrub')) {
+ function mb_scrub(?string $string, ?string $encoding = null): string { $encoding ??= mb_internal_encoding(); return mb_convert_encoding((string) $string, $encoding, $encoding); }
+}
+if (!function_exists('mb_str_split')) {
+ function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); }
+}
+
+if (!function_exists('mb_str_pad')) {
+ function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }
+}
+
+if (!function_exists('mb_ucfirst')) {
+ function mb_ucfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); }
+}
+
+if (!function_exists('mb_lcfirst')) {
+ function mb_lcfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); }
+}
+
+if (!function_exists('mb_trim')) {
+ function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); }
+}
+
+if (!function_exists('mb_ltrim')) {
+ function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); }
+}
+
+if (!function_exists('mb_rtrim')) {
+ function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ return;
+}
+
+if (!defined('MB_CASE_UPPER')) {
+ define('MB_CASE_UPPER', 0);
+}
+if (!defined('MB_CASE_LOWER')) {
+ define('MB_CASE_LOWER', 1);
+}
+if (!defined('MB_CASE_TITLE')) {
+ define('MB_CASE_TITLE', 2);
+}
diff --git a/vendor/symfony/polyfill-php81/composer.json b/vendor/symfony/polyfill-mbstring/composer.json
index 381af79ac..4ed241a33 100644
--- a/vendor/symfony/polyfill-php81/composer.json
+++ b/vendor/symfony/polyfill-mbstring/composer.json
@@ -1,8 +1,8 @@
{
- "name": "symfony/polyfill-php81",
+ "name": "symfony/polyfill-mbstring",
"type": "library",
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "keywords": ["polyfill", "shim", "compatibility", "portable"],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"],
"homepage": "https://symfony.com",
"license": "MIT",
"authors": [
@@ -16,12 +16,17 @@
}
],
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
},
"autoload": {
- "psr-4": { "Symfony\\Polyfill\\Php81\\": "" },
- "files": [ "bootstrap.php" ],
- "classmap": [ "Resources/stubs" ]
+ "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" },
+ "files": [ "bootstrap.php" ]
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
},
"minimum-stability": "dev",
"extra": {
diff --git a/vendor/symfony/polyfill-php81/Php81.php b/vendor/symfony/polyfill-php81/Php81.php
deleted file mode 100644
index f0507b765..000000000
--- a/vendor/symfony/polyfill-php81/Php81.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Polyfill\Php81;
-
-/**
- * @author Nicolas Grekas <p@tchwork.com>
- *
- * @internal
- */
-final class Php81
-{
- public static function array_is_list(array $array): bool
- {
- if ([] === $array || $array === array_values($array)) {
- return true;
- }
-
- $nextKey = -1;
-
- foreach ($array as $k => $v) {
- if ($k !== ++$nextKey) {
- return false;
- }
- }
-
- return true;
- }
-}
diff --git a/vendor/symfony/polyfill-php81/README.md b/vendor/symfony/polyfill-php81/README.md
deleted file mode 100644
index c07ef7820..000000000
--- a/vendor/symfony/polyfill-php81/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-Symfony Polyfill / Php81
-========================
-
-This component provides features added to PHP 8.1 core:
-
-- [`array_is_list`](https://php.net/array_is_list)
-- [`enum_exists`](https://php.net/enum-exists)
-- [`MYSQLI_REFRESH_REPLICA`](https://php.net/mysqli.constants#constantmysqli-refresh-replica) constant
-- [`ReturnTypeWillChange`](https://wiki.php.net/rfc/internal_method_return_types)
-- [`CURLStringFile`](https://php.net/CURLStringFile) (but only if PHP >= 7.4 is used)
-
-More information can be found in the
-[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
-
-License
-=======
-
-This library is released under the [MIT license](LICENSE).
diff --git a/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php b/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php
deleted file mode 100644
index eb5952ee3..000000000
--- a/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-if (\PHP_VERSION_ID >= 70400 && extension_loaded('curl')) {
- /**
- * @property string $data
- */
- class CURLStringFile extends CURLFile
- {
- private $data;
-
- public function __construct(string $data, string $postname, string $mime = 'application/octet-stream')
- {
- $this->data = $data;
- parent::__construct('data://application/octet-stream;base64,'.base64_encode($data), $mime, $postname);
- }
-
- public function __set(string $name, $value): void
- {
- if ('data' !== $name) {
- $this->$name = $value;
-
- return;
- }
-
- if (is_object($value) ? !method_exists($value, '__toString') : !is_scalar($value)) {
- throw new \TypeError('Cannot assign '.gettype($value).' to property CURLStringFile::$data of type string');
- }
-
- $this->name = 'data://application/octet-stream;base64,'.base64_encode($value);
- }
-
- public function __isset(string $name): bool
- {
- return isset($this->$name);
- }
-
- public function &__get(string $name)
- {
- return $this->$name;
- }
- }
-}
diff --git a/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php b/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php
deleted file mode 100644
index cb7720a8d..000000000
--- a/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-if (\PHP_VERSION_ID < 80100) {
- #[Attribute(Attribute::TARGET_METHOD)]
- final class ReturnTypeWillChange
- {
- public function __construct()
- {
- }
- }
-}
diff --git a/vendor/symfony/polyfill-php81/bootstrap.php b/vendor/symfony/polyfill-php81/bootstrap.php
deleted file mode 100644
index 9f872e02f..000000000
--- a/vendor/symfony/polyfill-php81/bootstrap.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-use Symfony\Polyfill\Php81 as p;
-
-if (\PHP_VERSION_ID >= 80100) {
- return;
-}
-
-if (defined('MYSQLI_REFRESH_SLAVE') && !defined('MYSQLI_REFRESH_REPLICA')) {
- define('MYSQLI_REFRESH_REPLICA', 64);
-}
-
-if (!function_exists('array_is_list')) {
- function array_is_list(array $array): bool { return p\Php81::array_is_list($array); }
-}
-
-if (!function_exists('enum_exists')) {
- function enum_exists(string $enum, bool $autoload = true): bool { return $autoload && class_exists($enum) && false; }
-}
diff --git a/vendor/voku/portable-ascii/.deepsource.toml b/vendor/voku/portable-ascii/.deepsource.toml
new file mode 100644
index 000000000..3f8f43cef
--- /dev/null
+++ b/vendor/voku/portable-ascii/.deepsource.toml
@@ -0,0 +1,4 @@
+version = 1
+
+[[analyzers]]
+name = "php" \ No newline at end of file
diff --git a/vendor/voku/portable-ascii/CHANGELOG.md b/vendor/voku/portable-ascii/CHANGELOG.md
index 12fc393a7..52f4912e7 100644
--- a/vendor/voku/portable-ascii/CHANGELOG.md
+++ b/vendor/voku/portable-ascii/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+### 2.0.3 (2024-11-21)
+
+- use modern phpdocs e.g. list<int> or conditional-return annotations
+
+### 2.0.2 (2024-11-21)
+
+- small fix for PHP 8.4 (thanks to @gilbertoalbino)
+
### 2.0.1 (2022-03-08)
- "To people of Russia": There is a war in Ukraine right now. The forces of the Russian Federation are attacking civilians.
diff --git a/vendor/voku/portable-ascii/composer.json b/vendor/voku/portable-ascii/composer.json
index 99dee4f80..b3a22fa8c 100644
--- a/vendor/voku/portable-ascii/composer.json
+++ b/vendor/voku/portable-ascii/composer.json
@@ -12,7 +12,7 @@
"authors": [
{
"name": "Lars Moelleken",
- "homepage": "http://www.moelleken.org/"
+ "homepage": "https://www.moelleken.org/"
}
],
"require": {
diff --git a/vendor/voku/portable-ascii/src/voku/helper/ASCII.php b/vendor/voku/portable-ascii/src/voku/helper/ASCII.php
index 7d8b66de7..406407e19 100644
--- a/vendor/voku/portable-ascii/src/voku/helper/ASCII.php
+++ b/vendor/voku/portable-ascii/src/voku/helper/ASCII.php
@@ -214,9 +214,9 @@ final class ASCII
/**
* Get all languages from the constants "ASCII::.*LANGUAGE_CODE".
*
- * @return string[]
- *
- * @phpstan-return array<string, string>
+ * @return array<string, string>
+ * <p>An associative array where the key is the language code in lowercase
+ * and the value is the corresponding language string.</p>
*/
public static function getAllLanguages(): array
{
@@ -246,15 +246,13 @@ final class ASCII
* var_dump($array['ru']['б']); // 'b'
* </code>
*
- * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here
- *
* @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
*
* @psalm-pure
*
- * @return array
- *
- * @phpstan-return array<string, array<string , string>>
+ * @return array<string, array<string , string>>
+ * <p>An array where the key is the language code, and the value is
+ * an associative array mapping original characters to their replacements.</p>
*/
public static function charsArray(bool $replace_extra_symbols = false): array
{
@@ -281,14 +279,11 @@ final class ASCII
*
* @psalm-pure
*
- * @return array
- * <p>An array of replacements.</p>
- *
- * @phpstan-return array<string, array<int, string>>
+ * @return array<string, list<string>>
+ * <p>An array of replacements.</p>
*/
public static function charsArrayWithMultiLanguageValues(bool $replace_extra_symbols = false): array
{
- /** @var array<string, array<string, array<int, string>>> */
static $CHARS_ARRAY = [];
$cacheKey = '' . $replace_extra_symbols;
@@ -303,18 +298,13 @@ final class ASCII
false
);
- /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */
- /** @var array<string, string> $language_all_chars */
- $language_all_chars = $language_all_chars;
-
- /** @noinspection AlterInForeachInspection */
+ /* @noinspection AlterInForeachInspection | ok here */
foreach ($language_all_chars as $key => &$value) {
$return[$value][] = $key;
}
$CHARS_ARRAY[$cacheKey] = $return;
- /** @var array<string, array<int, string>> $return - hack for phpstan */
return $return;
}
@@ -330,21 +320,17 @@ final class ASCII
* echo $array['orig'][$tmpKey]; // 'ё'
* </code>
*
- * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here
- *
* @param string $language [optional] <p>Language of the source string e.g.: en, de_at, or de-ch.
* (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
* @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
- * @param bool $asOrigReplaceArray [optional] <p>TRUE === return {orig: string[], replace: string[]}
+ * @param bool $asOrigReplaceArray [optional] <p>TRUE === return {orig: list<string>, replace: list<string>}
* array</p>
*
* @psalm-pure
*
- * @return array
- * <p>An array of replacements.</p>
+ * @return ($asOrigReplaceArray is true ? array{orig: list<string>, replace: list<string>} : array<string, string>)
*
* @phpstan-param ASCII::*_LANGUAGE_CODE $language
- * @phpstan-return array{orig: string[], replace: string[]}|array<string, string>
*/
public static function charsArrayWithOneLanguage(
string $language = self::ENGLISH_LANGUAGE_CODE,
@@ -354,7 +340,6 @@ final class ASCII
$language = self::get_language($language);
// init
- /** @var array<string, array<string, array<string, string>|array{orig: string[], replace: string[]}>> */
static $CHARS_ARRAY = [];
$cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray;
@@ -366,7 +351,6 @@ final class ASCII
if ($replace_extra_symbols) {
self::prepareAsciiAndExtrasMaps();
- /** @noinspection DuplicatedCode */
if (isset(self::$ASCII_MAPS_AND_EXTRAS[$language])) {
$tmpArray = self::$ASCII_MAPS_AND_EXTRAS[$language];
@@ -379,7 +363,6 @@ final class ASCII
$CHARS_ARRAY[$cacheKey][$language] = $tmpArray;
}
} else {
- /** @noinspection NestedPositiveIfStatementsInspection */
if ($asOrigReplaceArray) {
$CHARS_ARRAY[$cacheKey][$language] = [
'orig' => [],
@@ -392,7 +375,6 @@ final class ASCII
} else {
self::prepareAsciiMaps();
- /** @noinspection DuplicatedCode */
if (isset(self::$ASCII_MAPS[$language])) {
$tmpArray = self::$ASCII_MAPS[$language];
@@ -405,7 +387,6 @@ final class ASCII
$CHARS_ARRAY[$cacheKey][$language] = $tmpArray;
}
} else {
- /** @noinspection NestedPositiveIfStatementsInspection */
if ($asOrigReplaceArray) {
$CHARS_ARRAY[$cacheKey][$language] = [
'orig' => [],
@@ -430,22 +411,18 @@ final class ASCII
* </code>
*
* @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
- * @param bool $asOrigReplaceArray [optional] <p>TRUE === return {orig: string[], replace: string[]}
+ * @param bool $asOrigReplaceArray [optional] <p>TRUE === return {orig: list<string>, replace: list<string>}
* array</p>
*
* @psalm-pure
*
- * @return array
- * <p>An array of replacements.</p>
- *
- * @phpstan-return array{orig: string[], replace: string[]}|array<string, string>
+ * @return ($asOrigReplaceArray is true ? array{orig: list<string>, replace: list<string>} : array<string, string>)
*/
public static function charsArrayWithSingleLanguageValues(
bool $replace_extra_symbols = false,
bool $asOrigReplaceArray = true
): array {
// init
- /** @var array<string, array<string, string>|array{orig: string[], replace: string[]}> */
static $CHARS_ARRAY = [];
$cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray;
@@ -456,22 +433,19 @@ final class ASCII
if ($replace_extra_symbols) {
self::prepareAsciiAndExtrasMaps();
- /** @noinspection AlterInForeachInspection */
- /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */
+ /* @noinspection AlterInForeachInspection | ok here */
foreach (self::$ASCII_MAPS_AND_EXTRAS ?? [] as &$map) {
$CHARS_ARRAY[$cacheKey][] = $map;
}
} else {
self::prepareAsciiMaps();
- /** @noinspection AlterInForeachInspection */
- /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */
+ /* @noinspection AlterInForeachInspection | ok here */
foreach (self::$ASCII_MAPS ?? [] as &$map) {
$CHARS_ARRAY[$cacheKey][] = $map;
}
}
- /** @phpstan-ignore-next-line - ... error? */
$CHARS_ARRAY[$cacheKey] = \array_merge([], ...$CHARS_ARRAY[$cacheKey]);
if ($asOrigReplaceArray) {
@@ -590,13 +564,11 @@ final class ASCII
return '';
}
- /** @var array{orig: string[], replace: string[]} */
static $MSWORD_CACHE = ['orig' => [], 'replace' => []];
if (empty($MSWORD_CACHE['orig'])) {
self::prepareAsciiMaps();
- /** @var array<string, string> */
$map = self::$ASCII_MAPS[self::EXTRA_MSWORD_CHARS_LANGUAGE_CODE] ?? [];
$MSWORD_CACHE = [
@@ -636,7 +608,6 @@ final class ASCII
return '';
}
- /** @var array<int,array<string,string>> */
static $WHITESPACE_CACHE = [];
$cacheKey = (int) $keepNonBreakingSpace;
@@ -673,7 +644,6 @@ final class ASCII
}
if (!$keepBidiUnicodeControls) {
- /** @var array<int,string>|null */
static $BIDI_UNICODE_CONTROLS_CACHE = null;
if ($BIDI_UNICODE_CONTROLS_CACHE === null) {
@@ -689,7 +659,7 @@ final class ASCII
/**
* Remove invisible characters from a string.
*
- * e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script.
+ * This prevents malicious code injection through null bytes or other control characters.
*
* copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php
*
@@ -735,21 +705,16 @@ final class ASCII
}
/**
- * WARNING: This method will return broken characters and is only for special cases.
+ * WARNING: This method will return broken characters and is only for special cases.
*
- * Convert two UTF-8 encoded string to a single-byte strings suitable for
+ * Convert two UTF-8 encoded strings to a single-byte strings suitable for
* functions that need the same string length after the conversion.
*
* The function simply uses (and updates) a tailored dynamic encoding
* (in/out map parameter) where non-ascii characters are remapped to
* the range [128-255] in order of appearance.
*
- * @param string $str1
- * @param string $str2
- *
- * @return string[]
- *
- * @phpstan-return array{0: string, 1: string}
+ * @return array{0: string, 1: string}
*/
public static function to_ascii_remap(string $str1, string $str2): array
{
@@ -775,14 +740,14 @@ final class ASCII
* @param string $str <p>The input string.</p>
* @param string $language [optional] <p>Language of the source string.
* (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
- * @param bool $remove_unsupported_chars [optional] <p>Whether or not to remove the
+ * @param bool $remove_unsupported_chars [optional] <p>Whether to remove the
* unsupported characters.</p>
* @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound
* ".</p>
* @param bool $use_transliterate [optional] <p>Use ASCII::to_transliterate() for unknown chars.</p>
- * @param bool|null $replace_single_chars_only [optional] <p>Single char replacement is better for the
- * performance, but some languages need to replace more then one char
- * at the same time. | NULL === auto-setting, depended on the
+ * @param bool $replace_single_chars_only [optional] <p>Single char replacement is better for the
+ * performance, but some languages need to replace more than one char
+ * at the same time. If FALSE === auto-setting, depended on the
* language</p>
*
* @psalm-pure
@@ -798,18 +763,17 @@ final class ASCII
bool $remove_unsupported_chars = true,
bool $replace_extra_symbols = false,
bool $use_transliterate = false,
- bool $replace_single_chars_only = null
+ bool $replace_single_chars_only = false
): string {
if ($str === '') {
return '';
}
- /** @phpstan-var ASCII::*_LANGUAGE_CODE - hack for phpstan */
+ /** @phpstan-var ASCII::*_LANGUAGE_CODE $language - hack for phpstan */
$language = self::get_language($language);
static $EXTRA_SYMBOLS_CACHE = null;
- /** @var array<string,array<string,string>> */
static $REPLACE_HELPER_CACHE = [];
$cacheKey = $language . '-' . $replace_extra_symbols;
@@ -977,7 +941,6 @@ final class ASCII
}
}
- /** @psalm-suppress PossiblyNullOperand - we use the prepare* methods here, so we don't get NULL here */
if (!isset(self::$ASCII_MAPS[$language])) {
$use_transliterate = true;
}
@@ -1001,10 +964,10 @@ final class ASCII
* ASCII::to_filename('שדגשדג.png', true)); // 'shdgshdg.png'
* </code>
*
- * @param string $str
+ * @param string $str <p>The string input.</p>
* @param bool $use_transliterate <p>ASCII::to_transliterate() is used by default - unsafe characters are
* simply replaced with hyphen otherwise.</p>
- * @param string $fallback_char
+ * @param string $fallback_char <p>The fallback character. - "-" is the default</p>
*
* @psalm-pure
*
@@ -1040,27 +1003,27 @@ final class ASCII
}
/**
- * Converts the string into an URL slug. This includes replacing non-ASCII
- * characters with their closest ASCII equivalents, removing remaining
- * non-ASCII and non-alphanumeric characters, and replacing whitespace with
- * $separator. The separator defaults to a single dash, and the string
- * is also converted to lowercase. The language of the source string can
- * also be supplied for language-specific transliteration.
- *
- * @param string $str
+ * Converts a string into a URL-friendly slug.
+ *
+ * - This includes replacing non-ASCII characters with their closest ASCII equivalents, removing remaining
+ * non-ASCII and non-alphanumeric characters, and replacing whitespace with $separator.
+ * - The separator defaults to a single dash, and the string is also converted to lowercase.
+ * - The language of the source string can also be supplied for language-specific transliteration.
+ *
+ * @param string $str <p>The string input.</p>
* @param string $separator [optional] <p>The string used to replace whitespace.</p>
* @param string $language [optional] <p>Language of the source string.
* (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
* @param array<string, string> $replacements [optional] <p>A map of replaceable strings.</p>
- * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with "
+ * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with "
* pound ".</p>
* @param bool $use_str_to_lower [optional] <p>Use "string to lower" for the input.</p>
- * @param bool $use_transliterate [optional] <p>Use ASCII::to_transliterate() for unknown
+ * @param bool $use_transliterate [optional] <p>Use ASCII::to_transliterate() for unknown
* chars.</p>
* @psalm-pure
*
* @return string
- * <p>A string that has been converted to an URL slug.</p>
+ * <p>The URL-friendly slug.</p>
*
* @phpstan-param ASCII::*_LANGUAGE_CODE $language
*/
@@ -1135,21 +1098,16 @@ final class ASCII
*
* @return string
* <p>A String that contains only ASCII characters.</p>
- *
- * @noinspection ParameterDefaultValueIsNotNullInspection
*/
public static function to_transliterate(
string $str,
$unknown = '?',
bool $strict = false
): string {
- /** @var array<int,string>|null */
static $UTF8_TO_TRANSLIT = null;
- /** null|\Transliterator */
static $TRANSLITERATOR = null;
- /** @var bool|null */
static $SUPPORT_INTL = null;
if ($str === '') {
@@ -1168,7 +1126,7 @@ final class ASCII
$str = self::clean($str);
- // check again, if we only have ASCII, now ...
+ // check again if we only have ASCII, now ...
if (
$str_tmp !== $str
&&
@@ -1184,7 +1142,6 @@ final class ASCII
) {
if (!isset($TRANSLITERATOR)) {
// INFO: see "*-Latin" rules via "transliterator_list_ids()"
- /** @var \Transliterator */
$TRANSLITERATOR = \transliterator_create('NFKC; [:Nonspacing Mark:] Remove; NFKC; Any-Latin; Latin-ASCII;');
}
@@ -1192,8 +1149,7 @@ final class ASCII
$str_tmp = \transliterator_transliterate($TRANSLITERATOR, $str);
if ($str_tmp !== false) {
-
- // check again, if we only have ASCII, now ...
+ // check again if we only have ASCII, now ...
if (
$str_tmp !== $str
&&
@@ -1285,7 +1241,6 @@ final class ASCII
$new_char = $ord & 255;
if (isset($UTF8_TO_TRANSLIT[$bank][$new_char])) {
-
// keep for debugging
/*
echo "file: " . sprintf('x%02x', $bank) . "\n";
@@ -1299,8 +1254,7 @@ final class ASCII
$new_char = $UTF8_TO_TRANSLIT[$bank][$new_char];
- /** @noinspection MissingOrEmptyGroupStatementInspection */
- /** @noinspection PhpStatementHasEmptyBodyInspection */
+ /* @noinspection PhpStatementHasEmptyBodyInspection */
if ($unknown === null && $new_char === '') {
// nothing
} elseif (
@@ -1313,7 +1267,6 @@ final class ASCII
$c = $new_char;
}
} else {
-
// keep for debugging missing chars
/*
echo "file: " . sprintf('x%02x', $bank) . "\n";
@@ -1352,7 +1305,7 @@ final class ASCII
* @param array $map <p>Internal-Map of code points to ASCII characters.</p>
*
* @return string
- * <p>Mapped borken string.</p>
+ * <p>Mapped broken string.</p>
*
* @phpstan-param array<string, string> $map
*/
@@ -1385,12 +1338,6 @@ final class ASCII
* DE_DE -> de
* de-de -> de
*
- * @noinspection ReturnTypeCanBeDeclaredInspection
- *
- * @param string $language
- *
- * @psalm-pure
- *
* @return string
*/
private static function get_language(string $language)
@@ -1417,39 +1364,22 @@ final class ASCII
/**
* Get data from "/data/*.php".
*
- * @noinspection ReturnTypeCanBeDeclaredInspection
- *
- * @param string $file
- *
- * @psalm-pure
- *
- * @return array<mixed>
+ * @return array<array-key,mixed>
*/
private static function getData(string $file)
{
- /** @noinspection PhpIncludeInspection */
- /** @noinspection UsingInclusionReturnValueInspection */
- /** @psalm-suppress UnresolvableInclude */
return include __DIR__ . '/data/' . $file . '.php';
}
/**
* Get data from "/data/*.php".
*
- * @param string $file
- *
- * @psalm-pure
- *
- * @return array<mixed>
+ * @return array<array-key,mixed>
*/
private static function getDataIfExists(string $file): array
{
$file = __DIR__ . '/data/' . $file . '.php';
- /** @psalm-suppress ImpureFunctionCall */
if (\is_file($file)) {
- /** @noinspection PhpIncludeInspection */
- /** @noinspection UsingInclusionReturnValueInspection */
- /** @psalm-suppress UnresolvableInclude */
return include $file;
}
@@ -1457,8 +1387,6 @@ final class ASCII
}
/**
- * @psalm-pure
- *
* @return void
*/
private static function prepareAsciiAndExtrasMaps()
@@ -1467,7 +1395,6 @@ final class ASCII
self::prepareAsciiMaps();
self::prepareAsciiExtras();
- /** @psalm-suppress PossiblyNullArgument - we use the prepare* methods here, so we don't get NULL here */
self::$ASCII_MAPS_AND_EXTRAS = \array_merge_recursive(
self::$ASCII_MAPS ?? [],
self::$ASCII_EXTRAS ?? []
@@ -1476,8 +1403,6 @@ final class ASCII
}
/**
- * @psalm-pure
- *
* @return void
*/
private static function prepareAsciiMaps()
@@ -1488,8 +1413,6 @@ final class ASCII
}
/**
- * @psalm-pure
- *
* @return void
*/
private static function prepareAsciiExtras()
diff --git a/view/css/conversation.css b/view/css/conversation.css
index 491cee92e..fb26c7e3f 100644
--- a/view/css/conversation.css
+++ b/view/css/conversation.css
@@ -96,10 +96,6 @@
/* conv_item */
-.wall-item-head-new {
- border-top: 0.2rem solid var(--bs-primary);
-}
-
.wall-item-wrapper {
margin-left: .75rem;
}
diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po
index 20afa3ffc..ff41710fb 100644
--- a/view/es-es/hmessages.po
+++ b/view/es-es/hmessages.po
@@ -1,12 +1,12 @@
# hubzilla
# Copyright (C) 2012-2016 hubzilla
# This file is distributed under the same license as the hubzilla package.
-#
+#
# Translators:
# Alfonso Martínez, 2015
# inboxwall <axetransit@gmail.com>, 2015
# 0019cac9045ba5ad44f6e8f0d6edc0ee_372278a, 2015
-# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2024
+# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2025
# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2015-2017
# Rafael, 2015
# tony baldwin <tonybaldwin@gmx.com>, 2014
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: hubzilla\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-03-15 18:45+0000\n"
+"POT-Creation-Date: 2024-12-13 08:47+0000\n"
"PO-Revision-Date: 2015-09-27 06:48+0000\n"
-"Last-Translator: Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2024\n"
+"Last-Translator: Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2025\n"
"Language-Team: Spanish (Spain) (http://app.transifex.com/Friendica/hubzilla/language/es_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,17 +24,16 @@ msgstr ""
"Language: es_ES\n"
"Plural-Forms: nplurals=2; plural=(n != 1 ? 1 : 0);\n"
-
#: ../../util/nconfig.php:34
msgid "Source channel not found."
msgstr "No se ha encontrado el canal de origen."
-#: ../../view/theme/redbasic/php/config.php:18 ../../include/text.php:3514
+#: ../../view/theme/redbasic/php/config.php:18 ../../include/text.php:3518
#: ../../addon/cart/submodules/orderoptions.php:335
#: ../../addon/cart/submodules/orderoptions.php:359
#: ../../addon/cart/submodules/orderoptions.php:435
#: ../../addon/cart/submodules/orderoptions.php:459
-#: ../../Zotlabs/Module/Admin/Site.php:231
+#: ../../Zotlabs/Module/Admin/Site.php:233
msgid "Default"
msgstr "Predeterminado"
@@ -45,9 +44,8 @@ msgstr "Focus (predefinido)"
#: ../../view/theme/redbasic/php/config.php:188
#: ../../include/js_strings.php:23 ../../addon/irc/irc.php:45
-#: ../../addon/smileybutton/Mod_Smileybutton.php:53
#: ../../addon/socialauth/Mod_SocialAuth.php:341
-#: ../../addon/hubwall/hubwall.php:95
+#: ../../addon/hubwall/hubwall.php:96
#: ../../addon/openclipatar/openclipatar.php:54
#: ../../addon/hzfiles/hzfiles.php:86 ../../addon/piwik/piwik.php:95
#: ../../addon/redphotos/redphotos.php:136
@@ -78,21 +76,21 @@ msgstr "Focus (predefinido)"
#: ../../addon/cart/Settings/Cart.php:142
#: ../../addon/twitter/Mod_Twitter.php:182
#: ../../addon/redfiles/redfiles.php:124
-#: ../../addon/openstreetmap/openstreetmap.php:155
+#: ../../addon/openstreetmap/openstreetmap.php:147
#: ../../addon/workflow/workflow.php:1490
#: ../../addon/workflow/workflow.php:1549
#: ../../addon/workflow/workflow.php:1668
-#: ../../addon/workflow/workflow.php:2786
+#: ../../addon/workflow/workflow.php:2815
#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94
#: ../../addon/skeleton/Mod_Skeleton.php:49
#: ../../addon/content_import/Mod_content_import.php:140
#: ../../addon/rtof/Mod_Rtof.php:70 ../../addon/nofed/Mod_Nofed.php:51
#: ../../addon/photocache/Mod_Photocache.php:63
#: ../../addon/likebanner/likebanner.php:57
-#: ../../Zotlabs/Lib/ThreadItem.php:862 ../../Zotlabs/Storage/Browser.php:385
-#: ../../Zotlabs/Module/Oauth.php:109
+#: ../../Zotlabs/Lib/ThreadItem.php:799 ../../Zotlabs/Storage/Browser.php:386
+#: ../../Zotlabs/Module/Oauth.php:110
#: ../../Zotlabs/Module/Import_items.php:125
-#: ../../Zotlabs/Module/Thing.php:357 ../../Zotlabs/Module/Thing.php:409
+#: ../../Zotlabs/Module/Thing.php:364 ../../Zotlabs/Module/Thing.php:414
#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Pdledit.php:137
#: ../../Zotlabs/Module/Connect.php:107
#: ../../Zotlabs/Module/Filestorage.php:208
@@ -101,45 +99,45 @@ msgstr "Focus (predefinido)"
#: ../../Zotlabs/Module/Pconfig.php:117 ../../Zotlabs/Module/Appman.php:230
#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Defperms.php:262
#: ../../Zotlabs/Module/Locs.php:125
-#: ../../Zotlabs/Module/Admin/Accounts.php:309
-#: ../../Zotlabs/Module/Admin/Themes.php:173
-#: ../../Zotlabs/Module/Admin/Addons.php:445
-#: ../../Zotlabs/Module/Admin/Features.php:66
-#: ../../Zotlabs/Module/Admin/Profs.php:178
-#: ../../Zotlabs/Module/Admin/Channels.php:147
-#: ../../Zotlabs/Module/Admin/Account_edit.php:73
-#: ../../Zotlabs/Module/Admin/Logs.php:84
-#: ../../Zotlabs/Module/Admin/Site.php:401
-#: ../../Zotlabs/Module/Admin/Security.php:129
+#: ../../Zotlabs/Module/Admin/Accounts.php:209
+#: ../../Zotlabs/Module/Admin/Themes.php:174
+#: ../../Zotlabs/Module/Admin/Addons.php:193
+#: ../../Zotlabs/Module/Admin/Features.php:67
+#: ../../Zotlabs/Module/Admin/Profs.php:179
+#: ../../Zotlabs/Module/Admin/Channels.php:169
+#: ../../Zotlabs/Module/Admin/Account_edit.php:78
+#: ../../Zotlabs/Module/Admin/Logs.php:85
+#: ../../Zotlabs/Module/Admin/Site.php:403
+#: ../../Zotlabs/Module/Admin/Security.php:130
#: ../../Zotlabs/Module/Affinity.php:84 ../../Zotlabs/Module/Permcats.php:257
-#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Group.php:150
-#: ../../Zotlabs/Module/Group.php:159 ../../Zotlabs/Module/Invite.php:563
-#: ../../Zotlabs/Module/Mitem.php:259 ../../Zotlabs/Module/Photos.php:1056
+#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Group.php:151
+#: ../../Zotlabs/Module/Group.php:160 ../../Zotlabs/Module/Invite.php:564
+#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:1056
#: ../../Zotlabs/Module/Photos.php:1095 ../../Zotlabs/Module/Photos.php:1208
#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
-#: ../../Zotlabs/Module/Profiles.php:735 ../../Zotlabs/Module/Chat.php:208
-#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Regate.php:407
-#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:356
-#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Oauth2.php:114
-#: ../../Zotlabs/Module/Settings/Display.php:187
+#: ../../Zotlabs/Module/Profiles.php:738 ../../Zotlabs/Module/Chat.php:208
+#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Regate.php:408
+#: ../../Zotlabs/Module/Setup.php:322 ../../Zotlabs/Module/Setup.php:362
+#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Oauth2.php:115
+#: ../../Zotlabs/Module/Settings/Display.php:188
#: ../../Zotlabs/Module/Settings/Network.php:62
#: ../../Zotlabs/Module/Settings/Channel_home.php:91
-#: ../../Zotlabs/Module/Settings/Account.php:107
+#: ../../Zotlabs/Module/Settings/Account.php:109
#: ../../Zotlabs/Module/Settings/Editor.php:42
#: ../../Zotlabs/Module/Settings/Features.php:48
#: ../../Zotlabs/Module/Settings/Directory.php:42
#: ../../Zotlabs/Module/Settings/Manage.php:43
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
+#: ../../Zotlabs/Module/Settings/Privacy.php:123
#: ../../Zotlabs/Module/Settings/Events.php:42
#: ../../Zotlabs/Module/Settings/Photos.php:42
-#: ../../Zotlabs/Module/Settings/Conversation.php:49
-#: ../../Zotlabs/Module/Settings/Channel.php:229
+#: ../../Zotlabs/Module/Settings/Conversation.php:44
+#: ../../Zotlabs/Module/Settings/Channel.php:230
#: ../../Zotlabs/Module/Settings/Profiles.php:52
#: ../../Zotlabs/Module/Settings/Connections.php:42
#: ../../Zotlabs/Module/Settings/Calendar.php:42
#: ../../Zotlabs/Module/Settings/Multifactor.php:85
-#: ../../Zotlabs/Module/Email_validation.php:40
-#: ../../Zotlabs/Module/Import.php:611
+#: ../../Zotlabs/Module/Email_validation.php:41
+#: ../../Zotlabs/Module/Import.php:623
msgid "Submit"
msgstr "Enviar"
@@ -195,8 +193,7 @@ msgstr "Modo oscuro por defecto"
#: ../../view/theme/redbasic/php/config.php:202
#: ../../view/theme/redbasic/php/config.php:203
#: ../../view/theme/redbasic/php/config.php:215
-#: ../../include/conversation.php:1265
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+#: ../../include/conversation.php:1273
#: ../../addon/socialauth/Mod_SocialAuth.php:218
#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
#: ../../addon/libertree/Mod_Libertree.php:57
@@ -236,39 +233,39 @@ msgstr "Modo oscuro por defecto"
#: ../../addon/content_import/Mod_content_import.php:135
#: ../../addon/content_import/Mod_content_import.php:136
#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../boot.php:1751 ../../Zotlabs/Lib/Libzotdir.php:165
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
-#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
+#: ../../boot.php:1759 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:558
#: ../../Zotlabs/Module/Filestorage.php:203
#: ../../Zotlabs/Module/Filestorage.php:211
#: ../../Zotlabs/Module/Contactedit.php:270
#: ../../Zotlabs/Module/Contactedit.php:315
-#: ../../Zotlabs/Module/Register.php:512 ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Api.php:99
+#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Api.php:101
#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-#: ../../Zotlabs/Module/Admin/Site.php:305
-#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:137
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
-#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
-#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Mitem.php:176
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
-#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:666
+#: ../../Zotlabs/Module/Admin/Site.php:307
+#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:254
+#: ../../Zotlabs/Module/Mitem.php:255 ../../Zotlabs/Module/Photos.php:666
#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Module/Profiles.php:671 ../../Zotlabs/Module/Profiles.php:681
-#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:693
-#: ../../Zotlabs/Module/Settings/Display.php:86
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
+#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684
+#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696
+#: ../../Zotlabs/Module/Settings/Display.php:87
#: ../../Zotlabs/Module/Settings/Privacy.php:133
#: ../../Zotlabs/Module/Settings/Privacy.php:134
#: ../../Zotlabs/Module/Settings/Privacy.php:135
#: ../../Zotlabs/Module/Settings/Privacy.php:136
#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Settings/Channel.php:224
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Channel.php:225
#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605
+#: ../../Zotlabs/Module/Import.php:612 ../../Zotlabs/Module/Import.php:616
+#: ../../Zotlabs/Module/Import.php:617
msgid "No"
msgstr "No"
@@ -276,8 +273,7 @@ msgstr "No"
#: ../../view/theme/redbasic/php/config.php:202
#: ../../view/theme/redbasic/php/config.php:203
#: ../../view/theme/redbasic/php/config.php:215
-#: ../../include/conversation.php:1265
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+#: ../../include/conversation.php:1273
#: ../../addon/socialauth/Mod_SocialAuth.php:218
#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
#: ../../addon/libertree/Mod_Libertree.php:57
@@ -317,37 +313,37 @@ msgstr "No"
#: ../../addon/content_import/Mod_content_import.php:135
#: ../../addon/content_import/Mod_content_import.php:136
#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../boot.php:1751 ../../Zotlabs/Lib/Libzotdir.php:165
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
-#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
+#: ../../boot.php:1759 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:558
#: ../../Zotlabs/Module/Filestorage.php:203
#: ../../Zotlabs/Module/Filestorage.php:211
#: ../../Zotlabs/Module/Contactedit.php:270
-#: ../../Zotlabs/Module/Register.php:512 ../../Zotlabs/Module/Defperms.php:195
-#: ../../Zotlabs/Module/Api.php:98 ../../Zotlabs/Module/Menu.php:163
-#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:307
-#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:137
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
-#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
-#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Mitem.php:176
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
-#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:666
+#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Defperms.php:195
+#: ../../Zotlabs/Module/Api.php:100 ../../Zotlabs/Module/Menu.php:163
+#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:309
+#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:254
+#: ../../Zotlabs/Module/Mitem.php:255 ../../Zotlabs/Module/Photos.php:666
#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Module/Profiles.php:671 ../../Zotlabs/Module/Profiles.php:681
-#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:693
-#: ../../Zotlabs/Module/Settings/Display.php:86
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
+#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684
+#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696
+#: ../../Zotlabs/Module/Settings/Display.php:87
#: ../../Zotlabs/Module/Settings/Privacy.php:133
#: ../../Zotlabs/Module/Settings/Privacy.php:134
#: ../../Zotlabs/Module/Settings/Privacy.php:135
#: ../../Zotlabs/Module/Settings/Privacy.php:136
#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Settings/Channel.php:224
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Channel.php:225
#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605
+#: ../../Zotlabs/Module/Import.php:612 ../../Zotlabs/Module/Import.php:616
+#: ../../Zotlabs/Module/Import.php:617
msgid "Yes"
msgstr "Sí"
@@ -438,23 +434,23 @@ msgstr "Marcadores de %1$s"
msgid "This is the home page of %s."
msgstr "Esta es la página personal de %s."
-#: ../../include/auth.php:197
+#: ../../include/auth.php:232
msgid "Delegation session ended."
msgstr "Finalizó la sesión de la delegación."
-#: ../../include/auth.php:201
+#: ../../include/auth.php:236
msgid "Logged out."
msgstr "Desconectado/a."
-#: ../../include/auth.php:308
+#: ../../include/auth.php:342
msgid "Email validation is incomplete. Please check your email."
msgstr "La validación del correo electrónico está incompleta. Por favor, compruebe su correo electrónico."
-#: ../../include/auth.php:324
+#: ../../include/auth.php:358
msgid "Failed authentication"
msgstr "Autenticación fallida."
-#: ../../include/auth.php:334 ../../addon/openid/Mod_Openid.php:189
+#: ../../include/auth.php:368 ../../addon/openid/Mod_Openid.php:189
msgid "Login failed."
msgstr "El acceso ha fallado."
@@ -462,52 +458,52 @@ msgstr "El acceso ha fallado."
msgid "View PDF"
msgstr "Ver PDF"
-#: ../../include/oembed.php:391
+#: ../../include/oembed.php:390
msgid " by "
msgstr "por"
-#: ../../include/oembed.php:392
+#: ../../include/oembed.php:391
msgid " on "
msgstr "en"
-#: ../../include/oembed.php:425
+#: ../../include/oembed.php:424
msgid "Embedded content"
msgstr "Contenido incorporado"
-#: ../../include/oembed.php:434
+#: ../../include/oembed.php:433
msgid "Embedding disabled"
msgstr "Incrustación deshabilitada"
-#: ../../include/event.php:34 ../../include/event.php:132
+#: ../../include/event.php:35 ../../include/event.php:133
msgid "l F d, Y \\@ g:i A"
msgstr "l d de F, Y \\@ G:i"
-#: ../../include/event.php:42
+#: ../../include/event.php:43
msgid "Starts:"
msgstr "Comienza:"
-#: ../../include/event.php:52
+#: ../../include/event.php:53
msgid "Finishes:"
msgstr "Finaliza:"
-#: ../../include/event.php:66 ../../include/event.php:157
-#: ../../include/channel.php:1639 ../../Zotlabs/Module/Directory.php:354
+#: ../../include/event.php:67 ../../include/event.php:158
+#: ../../include/channel.php:1642 ../../Zotlabs/Module/Directory.php:354
msgid "Location:"
msgstr "Ubicación:"
-#: ../../include/event.php:132
+#: ../../include/event.php:133
msgid "l F d, Y"
msgstr "l F d, Y"
-#: ../../include/event.php:136
+#: ../../include/event.php:137
msgid "Start:"
msgstr "Iniciar: "
-#: ../../include/event.php:140
+#: ../../include/event.php:141
msgid "End:"
msgstr "Finalizar: "
-#: ../../include/event.php:145 ../../addon/openid/MysqlProvider.php:67
+#: ../../include/event.php:146 ../../addon/openid/MysqlProvider.php:67
msgid "Timezone"
msgstr "Zona horaria"
@@ -515,568 +511,566 @@ msgstr "Zona horaria"
msgid "This event has been added to your calendar."
msgstr "Este evento ha sido añadido a su calendario."
-#: ../../include/event.php:1399 ../../include/conversation.php:151
-#: ../../include/text.php:2355 ../../Zotlabs/Module/Tagger.php:75
-#: ../../Zotlabs/Module/Like.php:450
-#: ../../Zotlabs/Module/Channel_calendar.php:221
+#: ../../include/event.php:1365 ../../include/conversation.php:153
+#: ../../include/text.php:2359 ../../Zotlabs/Module/Tagger.php:77
+#: ../../Zotlabs/Module/Like.php:453
+#: ../../Zotlabs/Module/Channel_calendar.php:209
msgid "event"
msgstr "el/su evento"
-#: ../../include/event.php:1478
+#: ../../include/event.php:1449
msgid "Not specified"
msgstr "Sin especificar"
-#: ../../include/event.php:1479
+#: ../../include/event.php:1450
msgid "Needs Action"
msgstr "Necesita de una intervención"
-#: ../../include/event.php:1480
+#: ../../include/event.php:1451
msgid "Completed"
msgstr "Completado/a"
-#: ../../include/event.php:1481
+#: ../../include/event.php:1452
msgid "In Process"
msgstr "En proceso"
-#: ../../include/event.php:1482
+#: ../../include/event.php:1453
msgid "Cancelled"
msgstr "Cancelado/a"
-#: ../../include/event.php:1563 ../../include/connections.php:781
+#: ../../include/event.php:1534 ../../include/connections.php:790
#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377
msgid "Mobile"
msgstr "Móvil"
-#: ../../include/event.php:1564 ../../include/connections.php:782
+#: ../../include/event.php:1535 ../../include/connections.php:791
#: ../../Zotlabs/Widget/Notifications.php:43
#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378
msgid "Home"
msgstr "Inicio"
-#: ../../include/event.php:1565 ../../include/connections.php:783
+#: ../../include/event.php:1536 ../../include/connections.php:792
msgid "Home, Voice"
msgstr "Llamadas particulares"
-#: ../../include/event.php:1566 ../../include/connections.php:784
+#: ../../include/event.php:1537 ../../include/connections.php:793
msgid "Home, Fax"
msgstr "Fax particular"
-#: ../../include/event.php:1567 ../../include/connections.php:785
+#: ../../include/event.php:1538 ../../include/connections.php:794
#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379
msgid "Work"
msgstr "Trabajo"
-#: ../../include/event.php:1568 ../../include/connections.php:786
+#: ../../include/event.php:1539 ../../include/connections.php:795
msgid "Work, Voice"
msgstr "Llamadas de trabajo"
-#: ../../include/event.php:1569 ../../include/connections.php:787
+#: ../../include/event.php:1540 ../../include/connections.php:796
msgid "Work, Fax"
msgstr "Fax de trabajo"
-#: ../../include/event.php:1570 ../../include/event.php:1577
+#: ../../include/event.php:1541 ../../include/event.php:1548
#: ../../include/selectors.php:64 ../../include/selectors.php:81
#: ../../include/selectors.php:119 ../../include/selectors.php:155
-#: ../../include/connections.php:788 ../../include/connections.php:795
-#: ../../Zotlabs/Access/PermissionRoles.php:360
+#: ../../include/connections.php:797 ../../include/connections.php:804
+#: ../../Zotlabs/Access/PermissionRoles.php:362
#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1380
msgid "Other"
msgstr "Otro"
-#: ../../include/feedutils.php:849 ../../include/text.php:1579
+#: ../../include/feedutils.php:851 ../../include/text.php:1580
msgid "unknown"
msgstr "desconocido"
-#: ../../include/items.php:448 ../../addon/hzfiles/hzfiles.php:75
+#: ../../include/items.php:481 ../../addon/hzfiles/hzfiles.php:75
#: ../../addon/redphotos/redphotos.php:119
#: ../../addon/redfiles/redfiles.php:109
#: ../../Zotlabs/Module/Import_items.php:116
-#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:54
-#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:108
-#: ../../Zotlabs/Module/Like.php:344 ../../Zotlabs/Module/Profperm.php:28
-#: ../../Zotlabs/Web/WebServer.php:118
+#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:60
+#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:109
+#: ../../Zotlabs/Module/Like.php:344 ../../Zotlabs/Module/Profperm.php:29
+#: ../../Zotlabs/Web/WebServer.php:120
msgid "Permission denied"
msgstr "Permiso denegado"
-#: ../../include/items.php:1233
+#: ../../include/items.php:1275
msgid "Visible to anybody on the internet."
msgstr "Visible para cualquiera en internet."
-#: ../../include/items.php:1235
+#: ../../include/items.php:1277
msgid "Visible to you only."
msgstr "Visible sólo para usted."
-#: ../../include/items.php:1237
+#: ../../include/items.php:1279
msgid "Visible to anybody in this network."
msgstr "Visible para cualquiera en esta red."
-#: ../../include/items.php:1239
+#: ../../include/items.php:1281
msgid "Visible to anybody authenticated."
msgstr "Visible para cualquiera que esté autenticado."
-#: ../../include/items.php:1241
+#: ../../include/items.php:1283
#, php-format
msgid "Visible to anybody on %s."
msgstr "Visible para cualquiera en %s."
-#: ../../include/items.php:1243
+#: ../../include/items.php:1285
msgid "Visible to all connections."
msgstr "Visible para todas las conexiones."
-#: ../../include/items.php:1245
+#: ../../include/items.php:1287
msgid "Visible to approved connections."
msgstr "Visible para las conexiones permitidas."
-#: ../../include/items.php:1247
+#: ../../include/items.php:1289
msgid "Visible to specific connections."
msgstr "Visible para conexiones específicas."
-#: ../../include/items.php:3340 ../../Zotlabs/Lib/Activity.php:2177
-#: ../../Zotlabs/Module/Share.php:118
+#: ../../include/items.php:3491 ../../Zotlabs/Lib/Activity.php:2280
+#: ../../Zotlabs/Module/Share.php:124
#, php-format
msgid "&#x1f501; Repeated %1$s's %2$s"
msgstr "&#x1f501; Repitió %2$sde %1$s"
-#: ../../include/items.php:3843 ../../addon/flashcards/Mod_Flashcards.php:291
-#: ../../addon/flashcards/Mod_Flashcards.php:292
-#: ../../Zotlabs/Module/Display.php:58 ../../Zotlabs/Module/Display.php:119
-#: ../../Zotlabs/Module/Display.php:390 ../../Zotlabs/Module/Thing.php:113
-#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Viewsrc.php:25
-#: ../../Zotlabs/Module/Admin/Themes.php:72
-#: ../../Zotlabs/Module/Admin/Addons.php:263 ../../Zotlabs/Module/Admin.php:61
-msgid "Item not found."
-msgstr "Elemento no encontrado."
-
-#: ../../include/items.php:3923 ../../include/attach.php:156
-#: ../../include/attach.php:205 ../../include/attach.php:278
-#: ../../include/attach.php:329 ../../include/attach.php:431
-#: ../../include/attach.php:445 ../../include/attach.php:452
-#: ../../include/attach.php:534 ../../include/attach.php:1106
-#: ../../include/attach.php:1179 ../../include/attach.php:1344
-#: ../../include/photos.php:30 ../../addon/openid/Mod_Id.php:53
-#: ../../addon/keepout/keepout.php:36 ../../addon/cards/Mod_Cards.php:89
-#: ../../addon/cards/Mod_Card_edit.php:51 ../../addon/pumpio/pumpio.php:44
-#: ../../addon/articles/Mod_Article_edit.php:51
-#: ../../addon/articles/Mod_Articles.php:94 ../../addon/wiki/Mod_Wiki.php:63
-#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425
-#: ../../Zotlabs/Lib/Chatroom.php:135 ../../Zotlabs/Module/Page.php:34
-#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Display.php:386
-#: ../../Zotlabs/Module/Cover_photo.php:298
-#: ../../Zotlabs/Module/Cover_photo.php:311
-#: ../../Zotlabs/Module/Editwebpage.php:68
-#: ../../Zotlabs/Module/Editwebpage.php:89
-#: ../../Zotlabs/Module/Editwebpage.php:107
-#: ../../Zotlabs/Module/Editwebpage.php:121
-#: ../../Zotlabs/Module/Webpages.php:131 ../../Zotlabs/Module/Network.php:18
-#: ../../Zotlabs/Module/Service_limits.php:11
-#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:331
-#: ../../Zotlabs/Module/Thing.php:372 ../../Zotlabs/Module/Pdledit.php:35
-#: ../../Zotlabs/Module/Filestorage.php:20
-#: ../../Zotlabs/Module/Filestorage.php:78
-#: ../../Zotlabs/Module/Filestorage.php:96
-#: ../../Zotlabs/Module/Filestorage.php:119
-#: ../../Zotlabs/Module/Filestorage.php:165
-#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Appman.php:163
-#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Item.php:512
-#: ../../Zotlabs/Module/Item.php:531 ../../Zotlabs/Module/Item.php:541
-#: ../../Zotlabs/Module/Item.php:1457 ../../Zotlabs/Module/Achievements.php:34
-#: ../../Zotlabs/Module/Connedit.php:299 ../../Zotlabs/Module/Defperms.php:181
-#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Regmod.php:20
-#: ../../Zotlabs/Module/Profile_photo.php:389
-#: ../../Zotlabs/Module/Profile_photo.php:420
-#: ../../Zotlabs/Module/Viewconnections.php:28
-#: ../../Zotlabs/Module/Viewconnections.php:33
-#: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74
-#: ../../Zotlabs/Module/Api.php:24 ../../Zotlabs/Module/Layouts.php:71
-#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
-#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Locs.php:98
-#: ../../Zotlabs/Module/Menu.php:130 ../../Zotlabs/Module/Menu.php:141
-#: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Bookmarks.php:70
-#: ../../Zotlabs/Module/Attach_edit.php:90
-#: ../../Zotlabs/Module/Attach_edit.php:99
-#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Group.php:14
-#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Invite.php:64
-#: ../../Zotlabs/Module/Invite.php:315 ../../Zotlabs/Module/Like.php:242
-#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
-#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/New_channel.php:105
-#: ../../Zotlabs/Module/New_channel.php:130 ../../Zotlabs/Module/Photos.php:71
-#: ../../Zotlabs/Module/Channel.php:233 ../../Zotlabs/Module/Channel.php:390
-#: ../../Zotlabs/Module/Channel.php:428 ../../Zotlabs/Module/Profile.php:99
-#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Moderate.php:15
-#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:167
-#: ../../Zotlabs/Module/Profiles.php:610
-#: ../../Zotlabs/Module/Sharedwithme.php:19
-#: ../../Zotlabs/Module/Authtest.php:13
-#: ../../Zotlabs/Module/Channel_calendar.php:232
-#: ../../Zotlabs/Module/Chat.php:111 ../../Zotlabs/Module/Chat.php:116
-#: ../../Zotlabs/Module/Editlayout.php:67
-#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Settings.php:59
-#: ../../Zotlabs/Module/Setup.php:218 ../../Zotlabs/Module/Editpost.php:17
-#: ../../Zotlabs/Module/Connections.php:32
-#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Vote.php:19
-#: ../../Zotlabs/Web/WebServer.php:119
-msgid "Permission denied."
-msgstr "Acceso denegado."
-
-#: ../../include/items.php:4425 ../../Zotlabs/Module/Group.php:62
-#: ../../Zotlabs/Module/Group.php:206
+#: ../../include/items.php:4568 ../../Zotlabs/Module/Group.php:63
+#: ../../Zotlabs/Module/Group.php:207
msgid "Privacy group not found."
msgstr "Grupo de canales no encontrado."
-#: ../../include/items.php:4441
+#: ../../include/items.php:4584
msgid "Privacy group is empty."
msgstr "El grupo de canales está vacío."
-#: ../../include/items.php:4448
+#: ../../include/items.php:4591
#, php-format
msgid "Privacy group: %s"
msgstr "Grupo de canales: %s"
-#: ../../include/items.php:4458
+#: ../../include/items.php:4601
#, php-format
msgid "Connection: %s"
msgstr "Conexión: %s"
-#: ../../include/items.php:4460
+#: ../../include/items.php:4603
msgid "Connection not found."
msgstr "Conexión no encontrada"
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55
#: ../../Zotlabs/Module/Admin/Features.php:56
#: ../../Zotlabs/Module/Settings/Features.php:38
msgid "Off"
msgstr "Desactivado"
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55
#: ../../Zotlabs/Module/Admin/Features.php:56
#: ../../Zotlabs/Module/Settings/Features.php:38
msgid "On"
msgstr "Activado"
-#: ../../include/features.php:82 ../../include/nav.php:488
-#: ../../include/nav.php:491 ../../Zotlabs/Lib/Apps.php:351
+#: ../../include/features.php:80 ../../include/nav.php:489
+#: ../../include/nav.php:492 ../../Zotlabs/Lib/Apps.php:352
msgid "Calendar"
msgstr "Calendario"
-#: ../../include/features.php:86
+#: ../../include/features.php:84
msgid "Start calendar week on Monday"
msgstr "Comenzar el calendario semanal por el lunes"
-#: ../../include/features.php:87
+#: ../../include/features.php:85
msgid "Default is Sunday"
msgstr "Por defecto es domingo"
-#: ../../include/features.php:94
+#: ../../include/features.php:92
msgid "Event Timezone Selection"
msgstr "Selección del huso horario del evento"
-#: ../../include/features.php:95
+#: ../../include/features.php:93
msgid "Allow event creation in timezones other than your own."
msgstr "Permitir la creación de eventos en husos horarios distintos del suyo."
-#: ../../include/features.php:104
+#: ../../include/features.php:102
msgid "Channel Home"
msgstr "Mi canal"
-#: ../../include/features.php:108
+#: ../../include/features.php:106
msgid "Search by Date"
msgstr "Buscar por fecha"
-#: ../../include/features.php:109
+#: ../../include/features.php:107
msgid "Ability to select posts by date ranges"
msgstr "Capacidad de seleccionar entradas por rango de fechas"
-#: ../../include/features.php:116
+#: ../../include/features.php:114
msgid "Tag Cloud"
msgstr "Nube de etiquetas"
-#: ../../include/features.php:117
+#: ../../include/features.php:115
msgid "Provide a personal tag cloud on your channel page"
msgstr "Proveer nube de etiquetas personal en su página de canal"
-#: ../../include/features.php:124 ../../include/features.php:358
+#: ../../include/features.php:122 ../../include/features.php:364
msgid "Use blog/list mode"
msgstr "Usar el modo blog/lista"
-#: ../../include/features.php:125 ../../include/features.php:359
+#: ../../include/features.php:123 ../../include/features.php:365
msgid "Comments will be displayed separately"
msgstr "Los comentarios se mostrarán por separado"
-#: ../../include/features.php:133 ../../include/text.php:1077
-#: ../../Zotlabs/Lib/Apps.php:338 ../../Zotlabs/Module/Connections.php:399
+#: ../../include/features.php:131 ../../include/text.php:1078
+#: ../../Zotlabs/Lib/Apps.php:339 ../../Zotlabs/Module/Connections.php:399
msgid "Connections"
msgstr "Conexiones"
-#: ../../include/features.php:137
+#: ../../include/features.php:135
msgid "Connection Filtering"
msgstr "Filtrado de conexiones"
-#: ../../include/features.php:138
+#: ../../include/features.php:136
msgid "Filter incoming posts from connections based on keywords/content"
msgstr "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido"
-#: ../../include/features.php:146
+#: ../../include/features.php:144
msgid "Conversation"
msgstr "Conversación"
-#: ../../include/features.php:158
+#: ../../include/features.php:156
msgid "Emoji Reactions"
msgstr "Emoticonos \"emoji\""
-#: ../../include/features.php:159
+#: ../../include/features.php:157
msgid "Add emoji reaction ability to posts"
msgstr "Activar la capacidad de añadir un emoticono \"emoji\" a las entradas"
-#: ../../include/features.php:166
+#: ../../include/features.php:164
msgid "Dislike Posts"
msgstr "Desagrado de publicaciones"
-#: ../../include/features.php:167
+#: ../../include/features.php:165
msgid "Ability to dislike posts/comments"
msgstr "Capacidad de mostrar desacuerdo con el contenido de entradas y comentarios"
-#: ../../include/features.php:174
+#: ../../include/features.php:172
msgid "Star Posts"
msgstr "Entradas destacadas"
-#: ../../include/features.php:175
-msgid "Ability to mark special posts with a star indicator"
-msgstr "Capacidad de marcar entradas destacadas con un indicador de estrella"
+#: ../../include/features.php:173
+msgid "Ability to mark conversations with a star"
+msgstr "Posibilidad de marcar las conversaciones con una estrella"
+
+#: ../../include/features.php:180
+msgid "File Posts"
+msgstr "Archivo de entradas"
-#: ../../include/features.php:182
+#: ../../include/features.php:181
+msgid "Ability to file posts"
+msgstr "Posibilidad de archivar las entradas"
+
+#: ../../include/features.php:188
msgid "Reply on comment"
msgstr "Responder a los comentarios"
-#: ../../include/features.php:183
+#: ../../include/features.php:189
msgid "Ability to reply on selected comment"
msgstr "Posibilidad de responder a los comentarios seleccionados"
-#: ../../include/features.php:192 ../../Zotlabs/Lib/Apps.php:352
+#: ../../include/features.php:198 ../../Zotlabs/Lib/Apps.php:353
msgid "Directory"
msgstr "Directorio"
-#: ../../include/features.php:196
+#: ../../include/features.php:202
msgid "Advanced Directory Search"
msgstr "Búsqueda avanzada en el directorio"
-#: ../../include/features.php:197
+#: ../../include/features.php:203
msgid "Allows creation of complex directory search queries"
msgstr "Permitir la creación de consultas complejas en las búsquedas en el directorio"
-#: ../../include/features.php:206
+#: ../../include/features.php:212
msgid "Editor"
msgstr "Editor"
-#: ../../include/features.php:210
+#: ../../include/features.php:216
msgid "Post Categories"
msgstr "Temas de las entradas"
-#: ../../include/features.php:211
+#: ../../include/features.php:217
msgid "Add categories to your posts"
msgstr "Añadir temas a sus publicaciones"
-#: ../../include/features.php:218
+#: ../../include/features.php:224
msgid "Large Photos"
msgstr "Fotos de gran tamaño"
-#: ../../include/features.php:219
+#: ../../include/features.php:225
msgid ""
"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
"(640px) photo thumbnails"
msgstr "Incluir miniaturas de fotos grandes (1024px) en publicaciones. Si no está habilitado, usar miniaturas pequeñas (640px)"
-#: ../../include/features.php:226
+#: ../../include/features.php:232
msgid "Even More Encryption"
msgstr "Más cifrado todavía"
-#: ../../include/features.php:227
+#: ../../include/features.php:233
msgid ""
"Allow optional encryption of content end-to-end with a shared secret key"
msgstr "Permitir cifrado adicional de contenido \"punto-a-punto\" con una clave secreta compartida."
-#: ../../include/features.php:234
+#: ../../include/features.php:240
msgid "Disable Comments"
msgstr "Deshabilitar comentarios"
-#: ../../include/features.php:235
+#: ../../include/features.php:241
msgid "Provide the option to disable comments for a post"
msgstr "Proporcionar la opción de desactivar los comentarios para una entrada"
-#: ../../include/features.php:242
+#: ../../include/features.php:248
msgid "Delayed Posting"
msgstr "Publicación aplazada"
-#: ../../include/features.php:243
+#: ../../include/features.php:249
msgid "Allow posts to be published at a later date"
msgstr "Permitir mensajes que se publicarán en una fecha posterior"
-#: ../../include/features.php:250
+#: ../../include/features.php:256
msgid "Content Expiration"
msgstr "Caducidad del contenido"
-#: ../../include/features.php:251
+#: ../../include/features.php:257
msgid "Remove posts/comments and/or private messages at a future time"
msgstr "Eliminar publicaciones/comentarios y/o mensajes privados más adelante"
-#: ../../include/features.php:258
+#: ../../include/features.php:264
msgid "Suppress Duplicate Posts/Comments"
msgstr "Prevenir entradas o comentarios duplicados"
-#: ../../include/features.php:259
+#: ../../include/features.php:265
msgid ""
"Prevent posts with identical content to be published with less than two "
"minutes in between submissions."
msgstr "Prevenir que entradas con contenido idéntico se publiquen con menos de dos minutos de intervalo."
-#: ../../include/features.php:266
+#: ../../include/features.php:272
msgid "Auto-save drafts of posts and comments"
msgstr "Guardar automáticamente borradores de entradas y comentarios"
-#: ../../include/features.php:267
+#: ../../include/features.php:273
msgid ""
"Automatically saves post and comment drafts in local browser storage to help"
" prevent accidental loss of compositions"
msgstr "Guarda automáticamente los borradores de comentarios y publicaciones en el almacenamiento del navegador local para ayudar a evitar la pérdida accidental de composiciones."
-#: ../../include/features.php:276
+#: ../../include/features.php:282
msgid "Manage"
msgstr "Gestionar"
-#: ../../include/features.php:280
+#: ../../include/features.php:286
msgid "Navigation Channel Select"
msgstr "Navegación por el selector de canales"
-#: ../../include/features.php:281
+#: ../../include/features.php:287
msgid "Change channels directly from within the navigation dropdown menu"
msgstr "Cambiar de canales directamente desde el menú de navegación desplegable"
-#: ../../include/features.php:290 ../../Zotlabs/Widget/Notifications.php:23
+#: ../../include/features.php:296 ../../Zotlabs/Widget/Notifications.php:23
#: ../../Zotlabs/Module/Connections.php:347
msgid "Network"
msgstr "Red"
-#: ../../include/features.php:294
+#: ../../include/features.php:300
msgid "Events Filter"
msgstr "Filtro de eventos"
-#: ../../include/features.php:295
+#: ../../include/features.php:301
msgid "Ability to display only events"
msgstr "Capacidad para mostrar solo eventos"
-#: ../../include/features.php:302
+#: ../../include/features.php:308
msgid "Polls Filter"
msgstr "Filtro de encuestas"
-#: ../../include/features.php:303
+#: ../../include/features.php:309
msgid "Ability to display only polls"
msgstr "Capacidad para mostrar solo encuestas"
-#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89
+#: ../../include/features.php:316 ../../Zotlabs/Widget/Savedsearch.php:89
msgid "Saved Searches"
msgstr "Búsquedas guardadas"
-#: ../../include/features.php:311
+#: ../../include/features.php:317
msgid "Save search terms for re-use"
msgstr "Guardar términos de búsqueda para su reutilización"
-#: ../../include/features.php:318 ../../include/contact_widgets.php:53
+#: ../../include/features.php:324 ../../include/contact_widgets.php:55
#: ../../Zotlabs/Widget/Activity_filter.php:196
#: ../../Zotlabs/Widget/Filer.php:33
msgid "Saved Folders"
msgstr "Carpetas guardadas"
-#: ../../include/features.php:319
+#: ../../include/features.php:325
msgid "Ability to file posts under folders"
msgstr "Capacidad de archivar entradas en carpetas"
-#: ../../include/features.php:326
+#: ../../include/features.php:332
msgid "Alternate Stream Order"
msgstr "Orden de stream alternativo"
-#: ../../include/features.php:327
+#: ../../include/features.php:333
msgid ""
"Ability to order the stream by last post date, last comment date or "
"unthreaded activities"
msgstr "Posibilidad de ordenar el stream por última fecha de publicación, última fecha de comentario o actividades sin hilo"
-#: ../../include/features.php:334
+#: ../../include/features.php:340
msgid "Contact Filter"
msgstr "Filtro de contactos"
-#: ../../include/features.php:335
+#: ../../include/features.php:341
msgid "Ability to display only posts of a selected contact"
msgstr "Posibilidad de mostrar sólo los mensajes de un contacto seleccionado"
-#: ../../include/features.php:342
+#: ../../include/features.php:348
msgid "Forum Filter"
msgstr "Filtro de foro"
-#: ../../include/features.php:343
+#: ../../include/features.php:349
msgid "Ability to display only posts of a specific forum"
msgstr "Posibilidad de mostrar sólo los mensajes de un foro específico"
-#: ../../include/features.php:350
+#: ../../include/features.php:356
msgid "Personal Posts Filter"
msgstr "Filtro de entradas personales"
-#: ../../include/features.php:351
+#: ../../include/features.php:357
msgid "Ability to display only posts that you've interacted on"
msgstr "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado"
-#: ../../include/features.php:368 ../../include/nav.php:469
-#: ../../Zotlabs/Lib/Apps.php:350
+#: ../../include/features.php:374 ../../include/nav.php:470
+#: ../../Zotlabs/Lib/Apps.php:351
#: ../../Zotlabs/Widget/Channel_activities.php:93
-#: ../../Zotlabs/Module/Fbrowser.php:29
+#: ../../Zotlabs/Module/Fbrowser.php:31
msgid "Photos"
msgstr "Fotos"
-#: ../../include/features.php:372
+#: ../../include/features.php:378
msgid "Photo Location"
msgstr "Ubicación de las fotos"
-#: ../../include/features.php:373
+#: ../../include/features.php:379
msgid "If location data is available on uploaded photos, link this to a map."
msgstr "Si los datos de ubicación están disponibles en las fotos subidas, enlazar estas a un mapa."
-#: ../../include/features.php:380
+#: ../../include/features.php:386
msgid "Flag Adult Photos"
msgstr "Indicador (\"flag\") de fotos de adultos"
-#: ../../include/features.php:381
+#: ../../include/features.php:387
msgid ""
"Provide photo edit option to hide inappropriate photos from default album "
"view"
msgstr "Proporcionar una opción de edición de fotos para ocultar las fotos inapropiadas de la vista de álbum predeterminada"
-#: ../../include/features.php:390 ../../Zotlabs/Lib/Apps.php:366
+#: ../../include/features.php:396 ../../Zotlabs/Lib/Apps.php:367
#: ../../Zotlabs/Module/Contactedit.php:430
msgid "Profiles"
msgstr "Perfiles"
-#: ../../include/features.php:394
+#: ../../include/features.php:400
msgid "Advanced Profiles"
msgstr "Perfiles avanzados"
-#: ../../include/features.php:395
+#: ../../include/features.php:401
msgid "Additional profile sections and selections"
msgstr "Secciones y selecciones de perfil adicionales"
-#: ../../include/features.php:402
+#: ../../include/features.php:408
msgid "Profile Import/Export"
msgstr "Importar/Exportar perfil"
-#: ../../include/features.php:403
+#: ../../include/features.php:409
msgid "Save and load profile details across sites/channels"
msgstr "Guardar y cargar detalles del perfil a través de sitios/canales"
-#: ../../include/features.php:410
+#: ../../include/features.php:416
msgid "Multiple Profiles"
msgstr "Múltiples perfiles"
-#: ../../include/features.php:411
+#: ../../include/features.php:417
msgid "Ability to create multiple profiles"
msgstr "Capacidad de crear múltiples perfiles"
+#: ../../include/attach.php:156 ../../include/attach.php:205
+#: ../../include/attach.php:278 ../../include/attach.php:329
+#: ../../include/attach.php:431 ../../include/attach.php:445
+#: ../../include/attach.php:452 ../../include/attach.php:534
+#: ../../include/attach.php:1106 ../../include/attach.php:1179
+#: ../../include/attach.php:1344 ../../include/photos.php:32
+#: ../../addon/openid/Mod_Id.php:53 ../../addon/keepout/keepout.php:36
+#: ../../addon/cards/Mod_Cards.php:89 ../../addon/cards/Mod_Card_edit.php:51
+#: ../../addon/pumpio/pumpio.php:44
+#: ../../addon/articles/Mod_Article_edit.php:51
+#: ../../addon/articles/Mod_Articles.php:94 ../../addon/wiki/Mod_Wiki.php:63
+#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425
+#: ../../Zotlabs/Lib/Chatroom.php:135 ../../Zotlabs/Module/Page.php:34
+#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Display.php:392
+#: ../../Zotlabs/Module/Cover_photo.php:299
+#: ../../Zotlabs/Module/Cover_photo.php:312
+#: ../../Zotlabs/Module/Editwebpage.php:68
+#: ../../Zotlabs/Module/Editwebpage.php:89
+#: ../../Zotlabs/Module/Editwebpage.php:107
+#: ../../Zotlabs/Module/Editwebpage.php:121
+#: ../../Zotlabs/Module/Webpages.php:130 ../../Zotlabs/Module/Network.php:18
+#: ../../Zotlabs/Module/Service_limits.php:11
+#: ../../Zotlabs/Module/Thing.php:316 ../../Zotlabs/Module/Thing.php:338
+#: ../../Zotlabs/Module/Thing.php:377 ../../Zotlabs/Module/Pdledit.php:35
+#: ../../Zotlabs/Module/Filestorage.php:20
+#: ../../Zotlabs/Module/Filestorage.php:78
+#: ../../Zotlabs/Module/Filestorage.php:96
+#: ../../Zotlabs/Module/Filestorage.php:119
+#: ../../Zotlabs/Module/Filestorage.php:165
+#: ../../Zotlabs/Module/Register.php:201 ../../Zotlabs/Module/Appman.php:163
+#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Item.php:288
+#: ../../Zotlabs/Module/Item.php:307 ../../Zotlabs/Module/Item.php:317
+#: ../../Zotlabs/Module/Item.php:1276 ../../Zotlabs/Module/Achievements.php:34
+#: ../../Zotlabs/Module/Connedit.php:299 ../../Zotlabs/Module/Defperms.php:181
+#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Regmod.php:20
+#: ../../Zotlabs/Module/Profile_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:421
+#: ../../Zotlabs/Module/Viewconnections.php:28
+#: ../../Zotlabs/Module/Viewconnections.php:33
+#: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74
+#: ../../Zotlabs/Module/Api.php:26 ../../Zotlabs/Module/Layouts.php:71
+#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
+#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Locs.php:98
+#: ../../Zotlabs/Module/Menu.php:130 ../../Zotlabs/Module/Menu.php:141
+#: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Bookmarks.php:70
+#: ../../Zotlabs/Module/Attach_edit.php:90
+#: ../../Zotlabs/Module/Attach_edit.php:99
+#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Group.php:15
+#: ../../Zotlabs/Module/Group.php:31 ../../Zotlabs/Module/Invite.php:65
+#: ../../Zotlabs/Module/Invite.php:316 ../../Zotlabs/Module/Like.php:242
+#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
+#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/New_channel.php:106
+#: ../../Zotlabs/Module/New_channel.php:131 ../../Zotlabs/Module/Photos.php:71
+#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Channel.php:391
+#: ../../Zotlabs/Module/Channel.php:429 ../../Zotlabs/Module/Profile.php:99
+#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Moderate.php:15
+#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:168
+#: ../../Zotlabs/Module/Profiles.php:611
+#: ../../Zotlabs/Module/Sharedwithme.php:19
+#: ../../Zotlabs/Module/Authtest.php:13
+#: ../../Zotlabs/Module/Channel_calendar.php:220
+#: ../../Zotlabs/Module/Chat.php:111 ../../Zotlabs/Module/Chat.php:116
+#: ../../Zotlabs/Module/Editlayout.php:67
+#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Settings.php:59
+#: ../../Zotlabs/Module/Setup.php:220 ../../Zotlabs/Module/Editpost.php:17
+#: ../../Zotlabs/Module/Connections.php:32
+#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Vote.php:19
+#: ../../Zotlabs/Web/WebServer.php:121
+msgid "Permission denied."
+msgstr "Acceso denegado."
+
#: ../../include/attach.php:273 ../../include/attach.php:324
#: ../../include/attach.php:426
msgid "Item was not found."
@@ -1144,21 +1138,21 @@ msgstr "el almacenamiento en la base de datos ha fallado."
msgid "Empty path"
msgstr "Ruta vacía"
-#: ../../include/attach.php:1984
+#: ../../include/attach.php:1992
#, php-format
msgid "%s shared an %s with you"
msgstr "%s ha compartido un/una %s con usted"
-#: ../../include/attach.php:1984
+#: ../../include/attach.php:1992
#, php-format
msgid "%s shared a %s with you"
msgstr "%s ha compartido un/una %s con usted"
-#: ../../include/attach.php:1984 ../../Zotlabs/Module/Like.php:447
+#: ../../include/attach.php:1992 ../../Zotlabs/Module/Like.php:450
msgid "image"
msgstr "Imagen"
-#: ../../include/attach.php:1984 ../../addon/redfiles/redfilehelper.php:64
+#: ../../include/attach.php:1992 ../../addon/redfiles/redfilehelper.php:64
msgid "file"
msgstr "fichero"
@@ -1191,12 +1185,12 @@ msgid "Monthly"
msgstr "Mensualmente"
#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1728 ../../addon/openid/Mod_Id.php:85
+#: ../../include/channel.php:1731 ../../addon/openid/Mod_Id.php:85
msgid "Male"
msgstr "Hombre"
#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1726 ../../addon/openid/Mod_Id.php:87
+#: ../../include/channel.php:1729 ../../addon/openid/Mod_Id.php:87
msgid "Female"
msgstr "Mujer"
@@ -1232,11 +1226,11 @@ msgstr "Transexual"
msgid "Hermaphrodite"
msgstr "Hermafrodita"
-#: ../../include/selectors.php:64 ../../include/channel.php:1732
+#: ../../include/selectors.php:64 ../../include/channel.php:1735
msgid "Neuter"
msgstr "Neutral"
-#: ../../include/selectors.php:64 ../../include/channel.php:1734
+#: ../../include/selectors.php:64 ../../include/channel.php:1737
msgid "Non-specific"
msgstr "No especificado"
@@ -1332,8 +1326,8 @@ msgstr "Infiel"
msgid "Sex Addict"
msgstr "Con adicción al sexo"
-#: ../../include/selectors.php:138 ../../include/channel.php:464
-#: ../../include/channel.php:467 ../../Zotlabs/Widget/Affinity.php:38
+#: ../../include/selectors.php:138 ../../include/channel.php:467
+#: ../../include/channel.php:470 ../../Zotlabs/Widget/Affinity.php:38
#: ../../Zotlabs/Module/Contactedit.php:283
#: ../../Zotlabs/Module/Connedit.php:581
msgid "Friends"
@@ -1434,14 +1428,12 @@ msgstr ", "
#: ../../include/activities.php:36 ../../include/activities.php:38
#: ../../addon/openid/MysqlProvider.php:58
#: ../../addon/openid/MysqlProvider.php:59
-#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:364
-#: ../../Zotlabs/Module/Profile_photo.php:226
+#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:365
+#: ../../Zotlabs/Module/Profile_photo.php:227
msgid "Profile Photo"
msgstr "Foto del perfil"
-#: ../../include/activities.php:36
-#: ../../store/[data]/smarty3/compiled/2cbde885645602969010e846a38817a1297aafb9_0.file.cover_photo.tpl.php:127
-#: ../../Zotlabs/Module/Cover_photo.php:229
+#: ../../include/activities.php:36 ../../Zotlabs/Module/Cover_photo.php:230
msgid "Cover Photo"
msgstr "Imagen de portada del perfil"
@@ -1459,7 +1451,7 @@ msgstr "%1$s%2$sse ha actualizado a %3$s."
msgid "%1$s updated the %2$s. Changed %3$s."
msgstr "%1$sactualizó el %2$s. Ha cambiado %3$s."
-#: ../../include/contact_widgets.php:11
+#: ../../include/contact_widgets.php:13
#, php-format
msgid "%d invitation available"
msgid_plural "%d invitations available"
@@ -1467,73 +1459,73 @@ msgstr[0] "%d invitación pendiente"
msgstr[1] "%d invitaciones disponibles"
msgstr[2] "%d invitaciones disponibles"
-#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
-#: ../../Zotlabs/Module/Admin/Site.php:405
+#: ../../include/contact_widgets.php:18 ../../include/acl_selectors.php:145
+#: ../../Zotlabs/Module/Admin/Site.php:407
msgid "Advanced"
msgstr "Avanzado"
-#: ../../include/contact_widgets.php:19
+#: ../../include/contact_widgets.php:21
msgid "Find Channels"
msgstr "Encontrar canales"
-#: ../../include/contact_widgets.php:20
+#: ../../include/contact_widgets.php:22
msgid "Enter name or interest"
msgstr "Introducir nombre o interés"
-#: ../../include/contact_widgets.php:21
+#: ../../include/contact_widgets.php:23
msgid "Connect/Follow"
msgstr "Conectar/Seguir"
-#: ../../include/contact_widgets.php:22
+#: ../../include/contact_widgets.php:24
msgid "Examples: Robert Morgenstein, Fishing"
msgstr "Ejemplos: José Fernández, Pesca"
-#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:435
+#: ../../include/contact_widgets.php:25 ../../Zotlabs/Module/Directory.php:435
#: ../../Zotlabs/Module/Directory.php:440
#: ../../Zotlabs/Module/Connections.php:407
msgid "Find"
msgstr "Encontrar"
-#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Suggest.php:77
+#: ../../include/contact_widgets.php:26 ../../Zotlabs/Module/Suggest.php:77
#: ../../Zotlabs/Module/Directory.php:439
msgid "Channel Suggestions"
msgstr "Sugerencias de canales"
-#: ../../include/contact_widgets.php:26
+#: ../../include/contact_widgets.php:28
msgid "Random Profile"
msgstr "Perfil aleatorio"
-#: ../../include/contact_widgets.php:27
+#: ../../include/contact_widgets.php:29
msgid "Invite Friends"
msgstr "Invitar a amigos"
-#: ../../include/contact_widgets.php:29
+#: ../../include/contact_widgets.php:31
msgid "Advanced example: name=fred and country=iceland"
msgstr "Ejemplo avanzado: nombre=juan y país=españa"
-#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:118
-#: ../../include/contact_widgets.php:152
+#: ../../include/contact_widgets.php:58 ../../include/contact_widgets.php:121
+#: ../../include/contact_widgets.php:155
#: ../../addon/cards/Widget/Cards_categories.php:83
#: ../../addon/articles/Widget/Articles_categories.php:83
#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
msgid "Everything"
msgstr "Todo"
-#: ../../include/contact_widgets.php:115 ../../include/contact_widgets.php:149
-#: ../../include/taxonomy.php:423 ../../include/taxonomy.php:505
-#: ../../include/taxonomy.php:525 ../../include/taxonomy.php:546
+#: ../../include/contact_widgets.php:118 ../../include/contact_widgets.php:152
+#: ../../include/taxonomy.php:425 ../../include/taxonomy.php:507
+#: ../../include/taxonomy.php:527 ../../include/taxonomy.php:548
#: ../../addon/cards/Widget/Cards_categories.php:80
#: ../../addon/articles/Widget/Articles_categories.php:80
-#: ../../Zotlabs/Storage/Browser.php:292 ../../Zotlabs/Storage/Browser.php:391
+#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:392
#: ../../Zotlabs/Storage/Browser.php:406 ../../Zotlabs/Module/Cdav.php:1062
msgid "Categories"
msgstr "Temas"
-#: ../../include/contact_widgets.php:182
+#: ../../include/contact_widgets.php:185
msgid "Common Connections"
msgstr "Conexiones comunes"
-#: ../../include/contact_widgets.php:186
+#: ../../include/contact_widgets.php:189
#, php-format
msgid "View all %d common connections"
msgstr "Ver todas las %d conexiones comunes"
@@ -1547,10 +1539,10 @@ msgid "Summary: "
msgstr "Resumen: "
#: ../../include/cdav.php:158 ../../include/cdav.php:159
-#: ../../include/cdav.php:167 ../../include/conversation.php:999
-#: ../../Zotlabs/Lib/Apps.php:1167 ../../Zotlabs/Lib/Apps.php:1251
-#: ../../Zotlabs/Lib/Activity.php:1675 ../../Zotlabs/Widget/Album.php:90
-#: ../../Zotlabs/Widget/Pinned.php:255 ../../Zotlabs/Widget/Portfolio.php:99
+#: ../../include/cdav.php:167 ../../include/conversation.php:1006
+#: ../../Zotlabs/Lib/Apps.php:1168 ../../Zotlabs/Lib/Apps.php:1252
+#: ../../Zotlabs/Lib/Activity.php:1724 ../../Zotlabs/Widget/Album.php:90
+#: ../../Zotlabs/Widget/Pinned.php:256 ../../Zotlabs/Widget/Portfolio.php:99
#: ../../Zotlabs/Module/Embedphotos.php:177
#: ../../Zotlabs/Module/Photos.php:788 ../../Zotlabs/Module/Photos.php:1246
msgid "Unknown"
@@ -1588,8 +1580,8 @@ msgid "edit"
msgstr "editar"
#: ../../include/group.php:327 ../../include/acl_selectors.php:87
-#: ../../Zotlabs/Lib/Apps.php:367 ../../Zotlabs/Widget/Activity_filter.php:95
-#: ../../Zotlabs/Module/Group.php:143
+#: ../../Zotlabs/Lib/Apps.php:368 ../../Zotlabs/Widget/Activity_filter.php:95
+#: ../../Zotlabs/Module/Group.php:144
msgid "Privacy Groups"
msgstr "Grupos de canales"
@@ -1609,52 +1601,52 @@ msgstr "Sin canales en ningún grupo"
msgid "add"
msgstr "añadir"
-#: ../../include/taxonomy.php:324
+#: ../../include/taxonomy.php:326
msgid "Trending"
msgstr "Etiquetas populares"
-#: ../../include/taxonomy.php:324 ../../include/taxonomy.php:463
-#: ../../include/taxonomy.php:484 ../../Zotlabs/Widget/Tagcloud.php:27
+#: ../../include/taxonomy.php:326 ../../include/taxonomy.php:465
+#: ../../include/taxonomy.php:486 ../../Zotlabs/Widget/Tagcloud.php:26
msgid "Tags"
msgstr "Etiquetas"
-#: ../../include/taxonomy.php:564
+#: ../../include/taxonomy.php:566
msgid "Keywords"
msgstr "Palabras clave"
-#: ../../include/taxonomy.php:585
+#: ../../include/taxonomy.php:587
msgid "have"
msgstr "tener"
-#: ../../include/taxonomy.php:585
+#: ../../include/taxonomy.php:587
msgid "has"
msgstr "tiene"
-#: ../../include/taxonomy.php:586
+#: ../../include/taxonomy.php:588
msgid "want"
msgstr "quiero"
-#: ../../include/taxonomy.php:586
+#: ../../include/taxonomy.php:588
msgid "wants"
msgstr "quiere"
-#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:333
+#: ../../include/taxonomy.php:589 ../../Zotlabs/Lib/ThreadItem.php:296
msgid "like"
msgstr "me gusta"
-#: ../../include/taxonomy.php:587
+#: ../../include/taxonomy.php:589
msgid "likes"
msgstr "gusta de"
-#: ../../include/taxonomy.php:588 ../../Zotlabs/Lib/ThreadItem.php:334
+#: ../../include/taxonomy.php:590 ../../Zotlabs/Lib/ThreadItem.php:297
msgid "dislike"
msgstr "no me gusta"
-#: ../../include/taxonomy.php:588
+#: ../../include/taxonomy.php:590
msgid "dislikes"
msgstr "no gusta de"
-#: ../../include/taxonomy.php:675 ../../include/conversation.php:1550
+#: ../../include/taxonomy.php:677 ../../include/conversation.php:1560
#: ../../Zotlabs/Module/Photos.php:1129
msgctxt "noun"
msgid "Like"
@@ -1663,130 +1655,108 @@ msgstr[0] "Me gusta"
msgstr[1] "Me gusta"
msgstr[2] "Me gusta"
-#: ../../include/photo/photo_driver.php:457
-#: ../../Zotlabs/Module/Profile_photo.php:167
-#: ../../Zotlabs/Module/Profile_photo.php:336
+#: ../../include/photo/photo_driver.php:458
+#: ../../Zotlabs/Module/Profile_photo.php:168
+#: ../../Zotlabs/Module/Profile_photo.php:337
msgid "Profile Photos"
msgstr "Fotos del perfil"
-#: ../../include/account.php:38
+#: ../../include/account.php:39
msgid "The provided email address is not valid"
msgstr "La dirección de correo electrónico proporcionada no es válida"
-#: ../../include/account.php:41
+#: ../../include/account.php:42
msgid "The provided email domain is not among those allowed on this site"
msgstr "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio"
-#: ../../include/account.php:48
+#: ../../include/account.php:49
msgid "The provided email address is already registered at this site"
msgstr "La dirección de correo electrónico proporcionada ya está registrada en este sitio"
-#: ../../include/account.php:55
+#: ../../include/account.php:56
msgid ""
"There is a pending registration for this address - click \"Register\" to "
"continue verification"
msgstr "Hay un registro pendiente para esta dirección - haga clic en \"Registro\" para continuar la verificación"
-#: ../../include/account.php:94
+#: ../../include/account.php:95
msgid "An invitation is required."
msgstr "Es obligatorio que le inviten."
-#: ../../include/account.php:103
+#: ../../include/account.php:104
msgid "Invitation could not be verified."
msgstr "No se ha podido verificar su invitación."
-#: ../../include/account.php:191
+#: ../../include/account.php:192
msgid "Please enter the required information."
msgstr "Por favor introduzca la información requerida."
-#: ../../include/account.php:258 ../../include/account.php:366
+#: ../../include/account.php:259 ../../include/account.php:367
msgid "Failed to store account information."
msgstr "La información de la cuenta no se ha podido guardar."
-#: ../../include/account.php:435 ../../include/account.php:503
-#: ../../Zotlabs/Module/Register.php:328
+#: ../../include/account.php:436 ../../include/account.php:504
+#: ../../Zotlabs/Module/Register.php:329
#, php-format
msgid "Registration confirmation for %s"
msgstr "Confirmación de registro para %s"
-#: ../../include/account.php:578
+#: ../../include/account.php:579
#, php-format
msgid "Registration request at %s"
msgstr "Solicitud de registro en %s"
-#: ../../include/account.php:600
+#: ../../include/account.php:601
msgid "your registration password"
msgstr "su contraseña de registro"
-#: ../../include/account.php:606 ../../include/account.php:695
+#: ../../include/account.php:607 ../../include/account.php:680
#, php-format
msgid "Registration details for %s"
msgstr "Detalles del registro de %s"
-#: ../../include/account.php:706
+#: ../../include/account.php:695
msgid "Account approved."
msgstr "Cuenta aprobada."
-#: ../../include/account.php:762
+#: ../../include/account.php:747
#, php-format
msgid "Registration revoked for %s"
msgstr "Registro revocado para %s"
-#: ../../include/account.php:769
+#: ../../include/account.php:754
#, php-format
msgid "Could not revoke registration for %s"
msgstr "No se ha podido revocar el registro de %s"
-#: ../../include/account.php:1186 ../../include/account.php:1188
+#: ../../include/account.php:1171 ../../include/account.php:1173
msgid "Click here to upgrade."
msgstr "Pulse aquí para actualizar"
-#: ../../include/account.php:1194
+#: ../../include/account.php:1179
msgid "This action exceeds the limits set by your subscription plan."
msgstr "Esta acción supera los límites establecidos por su plan de suscripción "
-#: ../../include/account.php:1199
+#: ../../include/account.php:1184
msgid "This action is not available under your subscription plan."
msgstr "Esta acción no está disponible en su plan de suscripción."
-#: ../../include/account.php:1259
+#: ../../include/account.php:1244
msgid "open"
msgstr "abierto"
-#: ../../include/account.php:1259
+#: ../../include/account.php:1244
msgid "closed"
msgstr "cerrado"
-#: ../../include/account.php:1266
+#: ../../include/account.php:1251
msgid "Registration is currently"
msgstr "El registro está actualmente "
-#: ../../include/account.php:1275
+#: ../../include/account.php:1260
msgid "please come back"
msgstr "por favor, vuelva"
-#: ../../include/help.php:82
-msgid "Help:"
-msgstr "Ayuda:"
-
-#: ../../include/help.php:119 ../../include/help.php:127
-#: ../../include/nav.php:193 ../../include/nav.php:340
-#: ../../Zotlabs/Lib/Apps.php:353 ../../Zotlabs/Module/Layouts.php:184
-msgid "Help"
-msgstr "Ayuda"
-
-#: ../../include/help.php:131
-msgid "Not Found"
-msgstr "No encontrado"
-
-#: ../../include/help.php:134 ../../addon/cards/cards.php:104
-#: ../../addon/articles/articles.php:105
-#: ../../addon/wiki/Lib/NativeWikiPage.php:545
-#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:154
-#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Web/Router.php:186
-msgid "Page not found."
-msgstr "Página no encontrada."
-
#: ../../include/js_strings.php:5
msgid "Delete this item?"
msgstr "¿Borrar este elemento?"
@@ -1795,36 +1765,32 @@ msgstr "¿Borrar este elemento?"
msgid "Item deleted"
msgstr "Elemento eliminado"
-#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:861
+#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:798
#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Module/Photos.php:1207
msgid "Comment"
msgstr "Comentar"
-#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:570
-#, php-format
-msgid "%s show all"
-msgstr "%s mostrar todo"
+#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:507
+msgid "show all"
+msgstr "Mostrar todo"
#: ../../include/js_strings.php:9
-#, php-format
-msgid "%s show less"
-msgstr "%s mostrar menos"
+msgid "show less"
+msgstr "ver menos"
#: ../../include/js_strings.php:10
-#, php-format
-msgid "%s expand"
-msgstr "%s expandir"
+msgid "expand"
+msgstr "ampliar"
#: ../../include/js_strings.php:11
-#, php-format
-msgid "%s collapse"
-msgstr "%s contraer"
+msgid "collapse"
+msgstr "contraer"
#: ../../include/js_strings.php:12
msgid "Password too short"
msgstr "Contraseña demasiado corta"
-#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:161
+#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:162
msgid "Passwords do not match"
msgstr "Las contraseñas no coinciden"
@@ -1873,8 +1839,8 @@ msgid "Unsaved changes. Are you sure you wish to leave this page?"
msgstr "Cambios no guardados. ¿Está seguro de que desea abandonar la página?"
#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Locs.php:121
-#: ../../Zotlabs/Module/Pubsites.php:54 ../../Zotlabs/Module/Profiles.php:475
-#: ../../Zotlabs/Module/Profiles.php:746 ../../Zotlabs/Module/Cdav.php:1006
+#: ../../Zotlabs/Module/Pubsites.php:55 ../../Zotlabs/Module/Profiles.php:476
+#: ../../Zotlabs/Module/Profiles.php:749 ../../Zotlabs/Module/Cdav.php:1006
msgid "Location"
msgstr "Ubicación"
@@ -1928,12 +1894,12 @@ msgstr "Volver a la respuesta"
msgid "Pinned"
msgstr "Anclado/a"
-#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:494
+#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:457
msgid "Pin to the top"
msgstr "Anclar en la parte superior"
-#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:494
-#: ../../Zotlabs/Widget/Pinned.php:149
+#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:457
+#: ../../Zotlabs/Widget/Pinned.php:150
msgid "Unpin from the top"
msgstr "Desanclar de la parte superior"
@@ -1977,366 +1943,318 @@ msgstr[0] "%d años"
msgstr[1] "%d años"
msgstr[2] "%d años"
-#: ../../include/js_strings.php:55
-msgid "timeago.prefixAgo"
-msgstr "hace "
-
-#: ../../include/js_strings.php:56
-msgid "timeago.prefixFromNow"
-msgstr "en "
-
-#: ../../include/js_strings.php:57
-msgid "timeago.suffixAgo"
-msgstr "NONE"
-
-#: ../../include/js_strings.php:58
-msgid "timeago.suffixFromNow"
-msgstr "NONE"
-
-#: ../../include/js_strings.php:61
-msgid "less than a minute"
-msgstr "menos de un minuto"
-
-#: ../../include/js_strings.php:62
-msgid "about a minute"
-msgstr "alrededor de un minuto"
-
-#: ../../include/js_strings.php:64
-msgid "about an hour"
-msgstr "alrededor de una hora"
-
-#: ../../include/js_strings.php:66
-msgid "a day"
-msgstr "un día"
-
-#: ../../include/js_strings.php:68
-msgid "about a month"
-msgstr "alrededor de un mes"
-
-#: ../../include/js_strings.php:70
-msgid "about a year"
-msgstr "alrededor de un año"
-
-#: ../../include/js_strings.php:72
-msgid " "
-msgstr " "
-
-#: ../../include/js_strings.php:73
-msgid "timeago.numbers"
-msgstr "timeago.numbers"
-
-#: ../../include/js_strings.php:75 ../../include/text.php:1502
+#: ../../include/js_strings.php:52 ../../include/text.php:1503
msgid "January"
msgstr "enero"
-#: ../../include/js_strings.php:76 ../../include/text.php:1502
+#: ../../include/js_strings.php:53 ../../include/text.php:1503
msgid "February"
msgstr "febrero"
-#: ../../include/js_strings.php:77 ../../include/text.php:1502
+#: ../../include/js_strings.php:54 ../../include/text.php:1503
msgid "March"
msgstr "marzo"
-#: ../../include/js_strings.php:78 ../../include/text.php:1502
+#: ../../include/js_strings.php:55 ../../include/text.php:1503
msgid "April"
msgstr "abril"
-#: ../../include/js_strings.php:79
+#: ../../include/js_strings.php:56
msgctxt "long"
msgid "May"
msgstr "mayo"
-#: ../../include/js_strings.php:80 ../../include/text.php:1502
+#: ../../include/js_strings.php:57 ../../include/text.php:1503
msgid "June"
msgstr "junio"
-#: ../../include/js_strings.php:81 ../../include/text.php:1502
+#: ../../include/js_strings.php:58 ../../include/text.php:1503
msgid "July"
msgstr "julio"
-#: ../../include/js_strings.php:82 ../../include/text.php:1502
+#: ../../include/js_strings.php:59 ../../include/text.php:1503
msgid "August"
msgstr "agosto"
-#: ../../include/js_strings.php:83 ../../include/text.php:1502
+#: ../../include/js_strings.php:60 ../../include/text.php:1503
msgid "September"
msgstr "septiembre"
-#: ../../include/js_strings.php:84 ../../include/text.php:1502
+#: ../../include/js_strings.php:61 ../../include/text.php:1503
msgid "October"
msgstr "octubre"
-#: ../../include/js_strings.php:85 ../../include/text.php:1502
+#: ../../include/js_strings.php:62 ../../include/text.php:1503
msgid "November"
msgstr "noviembre"
-#: ../../include/js_strings.php:86 ../../include/text.php:1502
+#: ../../include/js_strings.php:63 ../../include/text.php:1503
msgid "December"
msgstr "diciembre"
-#: ../../include/js_strings.php:87
+#: ../../include/js_strings.php:64
msgid "Jan"
msgstr "ene"
-#: ../../include/js_strings.php:88
+#: ../../include/js_strings.php:65
msgid "Feb"
msgstr "feb"
-#: ../../include/js_strings.php:89
+#: ../../include/js_strings.php:66
msgid "Mar"
msgstr "mar"
-#: ../../include/js_strings.php:90
+#: ../../include/js_strings.php:67
msgid "Apr"
msgstr "abr"
-#: ../../include/js_strings.php:91
+#: ../../include/js_strings.php:68
msgctxt "short"
msgid "May"
msgstr "may"
-#: ../../include/js_strings.php:92
+#: ../../include/js_strings.php:69
msgid "Jun"
msgstr "jun"
-#: ../../include/js_strings.php:93
+#: ../../include/js_strings.php:70
msgid "Jul"
msgstr "jul"
-#: ../../include/js_strings.php:94
+#: ../../include/js_strings.php:71
msgid "Aug"
msgstr "ago"
-#: ../../include/js_strings.php:95
+#: ../../include/js_strings.php:72
msgid "Sep"
msgstr "sep"
-#: ../../include/js_strings.php:96
+#: ../../include/js_strings.php:73
msgid "Oct"
msgstr "oct"
-#: ../../include/js_strings.php:97
+#: ../../include/js_strings.php:74
msgid "Nov"
msgstr "nov"
-#: ../../include/js_strings.php:98
+#: ../../include/js_strings.php:75
msgid "Dec"
msgstr "dic"
-#: ../../include/js_strings.php:99 ../../include/text.php:1498
+#: ../../include/js_strings.php:76 ../../include/text.php:1499
msgid "Sunday"
msgstr "domingo"
-#: ../../include/js_strings.php:100 ../../include/text.php:1498
+#: ../../include/js_strings.php:77 ../../include/text.php:1499
msgid "Monday"
msgstr "lunes"
-#: ../../include/js_strings.php:101 ../../include/text.php:1498
+#: ../../include/js_strings.php:78 ../../include/text.php:1499
msgid "Tuesday"
msgstr "martes"
-#: ../../include/js_strings.php:102 ../../include/text.php:1498
+#: ../../include/js_strings.php:79 ../../include/text.php:1499
msgid "Wednesday"
msgstr "miércoles"
-#: ../../include/js_strings.php:103 ../../include/text.php:1498
+#: ../../include/js_strings.php:80 ../../include/text.php:1499
msgid "Thursday"
msgstr "jueves"
-#: ../../include/js_strings.php:104 ../../include/text.php:1498
+#: ../../include/js_strings.php:81 ../../include/text.php:1499
msgid "Friday"
msgstr "viernes"
-#: ../../include/js_strings.php:105 ../../include/text.php:1498
+#: ../../include/js_strings.php:82 ../../include/text.php:1499
msgid "Saturday"
msgstr "sábado"
-#: ../../include/js_strings.php:106
+#: ../../include/js_strings.php:83
msgid "Sun"
msgstr "dom"
-#: ../../include/js_strings.php:107
+#: ../../include/js_strings.php:84
msgid "Mon"
msgstr "lun"
-#: ../../include/js_strings.php:108
+#: ../../include/js_strings.php:85
msgid "Tue"
msgstr "mar"
-#: ../../include/js_strings.php:109
+#: ../../include/js_strings.php:86
msgid "Wed"
msgstr "mié"
-#: ../../include/js_strings.php:110
+#: ../../include/js_strings.php:87
msgid "Thu"
msgstr "jue"
-#: ../../include/js_strings.php:111
+#: ../../include/js_strings.php:88
msgid "Fri"
msgstr "vie"
-#: ../../include/js_strings.php:112
+#: ../../include/js_strings.php:89
msgid "Sat"
msgstr "sáb"
-#: ../../include/js_strings.php:113
+#: ../../include/js_strings.php:90
msgctxt "calendar"
msgid "today"
msgstr "hoy"
-#: ../../include/js_strings.php:114
+#: ../../include/js_strings.php:91
msgctxt "calendar"
msgid "month"
msgstr "mes"
-#: ../../include/js_strings.php:115
+#: ../../include/js_strings.php:92
msgctxt "calendar"
msgid "week"
msgstr "semana"
-#: ../../include/js_strings.php:116
+#: ../../include/js_strings.php:93
msgctxt "calendar"
msgid "day"
msgstr "día"
-#: ../../include/js_strings.php:117
+#: ../../include/js_strings.php:94
msgctxt "calendar"
msgid "All day"
msgstr "Todos los días"
-#: ../../include/js_strings.php:120
+#: ../../include/js_strings.php:97
msgid "Please stand by while your download is being prepared."
msgstr "Por favor, espere mientras se prepara la descarga."
-#: ../../include/js_strings.php:123
+#: ../../include/js_strings.php:100
msgid "Email address not valid"
msgstr "Dirección de correo electrónica no válida"
-#: ../../include/js_strings.php:124 ../../include/datetime.php:211
+#: ../../include/js_strings.php:101 ../../include/datetime.php:211
#: ../../addon/cart/submodules/orderoptions.php:334
#: ../../addon/cart/submodules/orderoptions.php:358
#: ../../addon/cart/submodules/orderoptions.php:434
#: ../../addon/cart/submodules/orderoptions.php:458
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:218
-#: ../../Zotlabs/Module/Appman.php:219 ../../Zotlabs/Module/Profiles.php:757
-#: ../../Zotlabs/Module/Profiles.php:761
+#: ../../Zotlabs/Module/Register.php:501 ../../Zotlabs/Module/Appman.php:218
+#: ../../Zotlabs/Module/Appman.php:219 ../../Zotlabs/Module/Profiles.php:760
+#: ../../Zotlabs/Module/Profiles.php:764
#: ../../Zotlabs/Module/Settings/Multifactor.php:84
msgid "Required"
msgstr "Obligatorio"
-#: ../../include/zid.php:410
+#: ../../include/zid.php:417
#, php-format
msgid "OpenWebAuth: %1$s welcomes %2$s"
msgstr "OpenWebAuth: %1$s da la bienvenida a %2$s"
-#: ../../include/conversation.php:147 ../../include/text.php:2352
+#: ../../include/conversation.php:149 ../../include/text.php:2356
#: ../../addon/redphotos/redphotohelper.php:71
-#: ../../addon/diaspora/Receiver.php:1693
-#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Tagger.php:71
+#: ../../addon/diaspora/Receiver.php:1704
+#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Tagger.php:73
msgid "photo"
msgstr "foto"
-#: ../../include/conversation.php:155 ../../Zotlabs/Module/Like.php:183
+#: ../../include/conversation.php:157 ../../Zotlabs/Module/Like.php:183
msgid "channel"
msgstr "el canal"
-#: ../../include/conversation.php:178 ../../include/markdown.php:208
-#: ../../include/text.php:2358 ../../include/bbcode.php:571
-#: ../../Zotlabs/Module/Tagger.php:79
+#: ../../include/conversation.php:180 ../../include/markdown.php:192
+#: ../../include/text.php:2362 ../../include/bbcode.php:572
+#: ../../Zotlabs/Module/Tagger.php:81
msgid "post"
msgstr "la entrada"
-#: ../../include/conversation.php:180 ../../include/text.php:2360
-#: ../../Zotlabs/Module/Tagger.php:81
+#: ../../include/conversation.php:182 ../../include/text.php:2364
+#: ../../Zotlabs/Module/Tagger.php:83
msgid "comment"
msgstr "el comentario"
-#: ../../include/conversation.php:194 ../../addon/diaspora/Receiver.php:1628
-#: ../../Zotlabs/Module/Like.php:483
+#: ../../include/conversation.php:196 ../../addon/diaspora/Receiver.php:1639
+#: ../../Zotlabs/Module/Like.php:486
#, php-format
msgid "%1$s likes %2$s's %3$s"
msgstr "A %1$s le gusta %3$s de %2$s"
-#: ../../include/conversation.php:196
+#: ../../include/conversation.php:198
#, php-format
msgid "likes %1$s's %2$s"
msgstr "gusta de %2$s de %1$s"
-#: ../../include/conversation.php:199 ../../Zotlabs/Module/Like.php:485
+#: ../../include/conversation.php:201 ../../Zotlabs/Module/Like.php:488
#, php-format
msgid "%1$s doesn't like %2$s's %3$s"
msgstr "A %1$s no le gusta %3$s de %2$s"
-#: ../../include/conversation.php:200
+#: ../../include/conversation.php:202
#, php-format
msgid "doesn't like %1$s's %2$s"
msgstr "no gusta de %2$s de %1$s"
-#: ../../include/conversation.php:203
+#: ../../include/conversation.php:205
#, php-format
msgid "%1$s repeated %2$s's %3$s"
msgstr "%1$s repitió %3$sde %2$s"
-#: ../../include/conversation.php:204
+#: ../../include/conversation.php:206
#, php-format
msgid "repeated %1$s's %2$s"
msgstr "repitió %2$s de %1$s"
-#: ../../include/conversation.php:332 ../../Zotlabs/Lib/ThreadItem.php:532
+#: ../../include/conversation.php:334 ../../Zotlabs/Lib/ThreadItem.php:474
msgid "This is an unsaved preview"
msgstr "Esta es una previsualización sin guardar"
-#: ../../include/conversation.php:464 ../../Zotlabs/Module/Photos.php:1110
+#: ../../include/conversation.php:471 ../../Zotlabs/Module/Photos.php:1110
msgctxt "title"
msgid "Likes"
msgstr "Me gusta"
-#: ../../include/conversation.php:465 ../../Zotlabs/Module/Photos.php:1110
+#: ../../include/conversation.php:472 ../../Zotlabs/Module/Photos.php:1110
msgctxt "title"
msgid "Dislikes"
msgstr "No me gusta"
-#: ../../include/conversation.php:466 ../../Zotlabs/Widget/Pinned.php:71
+#: ../../include/conversation.php:473 ../../Zotlabs/Widget/Pinned.php:73
#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Attending"
msgstr "Participaré"
-#: ../../include/conversation.php:467 ../../Zotlabs/Widget/Pinned.php:72
+#: ../../include/conversation.php:474 ../../Zotlabs/Widget/Pinned.php:74
#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Not attending"
msgstr "No participaré"
-#: ../../include/conversation.php:468 ../../Zotlabs/Widget/Pinned.php:73
+#: ../../include/conversation.php:475 ../../Zotlabs/Widget/Pinned.php:75
#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Might attend"
msgstr "Quizá participe"
-#: ../../include/conversation.php:470
+#: ../../include/conversation.php:477
msgctxt "title"
msgid "Repeats"
msgstr "Repite"
-#: ../../include/conversation.php:539
+#: ../../include/conversation.php:546
msgid "Select"
msgstr "Seleccionar"
-#: ../../include/conversation.php:540 ../../include/conversation.php:601
-#: ../../addon/cards/Mod_Card_edit.php:130
-#: ../../addon/articles/Mod_Article_edit.php:128
-#: ../../Zotlabs/Lib/Apps.php:617 ../../Zotlabs/Lib/ThreadItem.php:184
-#: ../../Zotlabs/Lib/ThreadItem.php:540 ../../Zotlabs/Storage/Browser.php:387
+#: ../../include/conversation.php:547 ../../include/conversation.php:608
+#: ../../addon/cards/Mod_Card_edit.php:124
+#: ../../addon/articles/Mod_Article_edit.php:124
+#: ../../Zotlabs/Lib/Apps.php:618 ../../Zotlabs/Lib/ThreadItem.php:183
+#: ../../Zotlabs/Lib/ThreadItem.php:482 ../../Zotlabs/Storage/Browser.php:388
#: ../../Zotlabs/Module/Editwebpage.php:167
-#: ../../Zotlabs/Module/Webpages.php:252 ../../Zotlabs/Module/Oauth.php:172
-#: ../../Zotlabs/Module/Thing.php:295 ../../Zotlabs/Module/Tokens.php:295
+#: ../../Zotlabs/Module/Webpages.php:251 ../../Zotlabs/Module/Oauth.php:172
+#: ../../Zotlabs/Module/Thing.php:302 ../../Zotlabs/Module/Tokens.php:295
#: ../../Zotlabs/Module/Contactedit.php:651
#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Connedit.php:749
-#: ../../Zotlabs/Module/Admin/Accounts.php:320
-#: ../../Zotlabs/Module/Admin/Profs.php:176
-#: ../../Zotlabs/Module/Admin/Channels.php:149
-#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Group.php:251
+#: ../../Zotlabs/Module/Admin/Accounts.php:220
+#: ../../Zotlabs/Module/Admin/Profs.php:177
+#: ../../Zotlabs/Module/Admin/Channels.php:171
+#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Group.php:252
#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Photos.php:1173
#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Cdav.php:1047
#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Oauth2.php:193
@@ -2344,141 +2262,139 @@ msgstr "Seleccionar"
msgid "Delete"
msgstr "Eliminar"
-#: ../../include/conversation.php:546 ../../Zotlabs/Lib/ThreadItem.php:286
+#: ../../include/conversation.php:553 ../../Zotlabs/Lib/ThreadItem.php:248
msgid "Toggle Star Status"
msgstr "Activar o desactivar el estado de entrada preferida"
-#: ../../include/conversation.php:552
+#: ../../include/conversation.php:559
msgid "Private Message"
msgstr "Mensaje Privado"
-#: ../../include/conversation.php:561 ../../Zotlabs/Lib/ThreadItem.php:296
-#: ../../Zotlabs/Widget/Pinned.php:82
+#: ../../include/conversation.php:568 ../../Zotlabs/Lib/ThreadItem.php:258
+#: ../../Zotlabs/Widget/Pinned.php:84
msgid "Message signature validated"
msgstr "Firma de mensaje validada"
-#: ../../include/conversation.php:562 ../../Zotlabs/Lib/ThreadItem.php:297
-#: ../../Zotlabs/Widget/Pinned.php:83
+#: ../../include/conversation.php:569 ../../Zotlabs/Lib/ThreadItem.php:259
+#: ../../Zotlabs/Widget/Pinned.php:85
msgid "Message signature incorrect"
msgstr "Firma de mensaje incorrecta"
-#: ../../include/conversation.php:600 ../../Zotlabs/Lib/ThreadItem.php:539
-#: ../../Zotlabs/Module/Admin/Accounts.php:318
+#: ../../include/conversation.php:607 ../../Zotlabs/Lib/ThreadItem.php:481
+#: ../../Zotlabs/Module/Admin/Accounts.php:218
#: ../../Zotlabs/Module/Connections.php:358
#: ../../Zotlabs/Module/Connections.php:409
msgid "Approve"
msgstr "Aprobar"
-#: ../../include/conversation.php:606
+#: ../../include/conversation.php:613
#, php-format
msgid "View %s's profile @ %s"
msgstr "Ver el perfil @ %s de %s"
-#: ../../include/conversation.php:628
+#: ../../include/conversation.php:635
msgid "Categories:"
msgstr "Temas:"
-#: ../../include/conversation.php:629
+#: ../../include/conversation.php:636
msgid "Filed under:"
msgstr "Archivado bajo:"
-#: ../../include/conversation.php:635 ../../Zotlabs/Lib/ThreadItem.php:451
-#: ../../Zotlabs/Widget/Pinned.php:126
+#: ../../include/conversation.php:642 ../../Zotlabs/Lib/ThreadItem.php:414
+#: ../../Zotlabs/Widget/Pinned.php:127
#, php-format
msgid "from %s"
msgstr "desde %s"
-#: ../../include/conversation.php:638 ../../Zotlabs/Lib/ThreadItem.php:454
-#: ../../Zotlabs/Widget/Pinned.php:129
+#: ../../include/conversation.php:645 ../../Zotlabs/Widget/Pinned.php:130
#, php-format
msgid "last edited: %s"
msgstr "último cambio: %s"
-#: ../../include/conversation.php:639 ../../Zotlabs/Lib/ThreadItem.php:455
-#: ../../Zotlabs/Widget/Pinned.php:130
+#: ../../include/conversation.php:646 ../../Zotlabs/Widget/Pinned.php:131
#, php-format
msgid "Expires: %s"
msgstr "Caduca: %s"
-#: ../../include/conversation.php:654 ../../addon/cards/cards.php:82
+#: ../../include/conversation.php:661 ../../addon/cards/cards.php:82
#: ../../addon/articles/articles.php:83
msgid "View in context"
msgstr "Mostrar en su contexto"
-#: ../../include/conversation.php:656 ../../Zotlabs/Lib/ThreadItem.php:533
+#: ../../include/conversation.php:663 ../../Zotlabs/Lib/ThreadItem.php:475
#: ../../Zotlabs/Module/Photos.php:1077
msgid "Please wait"
msgstr "Espere por favor"
-#: ../../include/conversation.php:757
+#: ../../include/conversation.php:764
msgid "remove"
msgstr "eliminar"
-#: ../../include/conversation.php:761
+#: ../../include/conversation.php:768
msgid "Loading..."
msgstr "Cargando..."
-#: ../../include/conversation.php:762 ../../Zotlabs/Lib/ThreadItem.php:313
+#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:275
msgid "Conversation Features"
msgstr "Funciones de conversación "
-#: ../../include/conversation.php:763
+#: ../../include/conversation.php:770
msgid "Delete Selected Items"
msgstr "Eliminar elementos seleccionados"
-#: ../../include/conversation.php:799
+#: ../../include/conversation.php:806
msgid "View Source"
msgstr "Ver el código fuente de la entrada"
-#: ../../include/conversation.php:809
+#: ../../include/conversation.php:816
msgid "Follow Thread"
msgstr "Seguir este hilo"
-#: ../../include/conversation.php:818
+#: ../../include/conversation.php:825
msgid "Unfollow Thread"
msgstr "Dejar de seguir este hilo"
-#: ../../include/conversation.php:895 ../../include/nav.php:126
-#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:349
+#: ../../include/conversation.php:902 ../../include/nav.php:127
+#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:350
#: ../../Zotlabs/Module/Connedit.php:480
msgid "View Profile"
msgstr "Ver el perfil"
-#: ../../include/conversation.php:907 ../../Zotlabs/Module/Connedit.php:501
+#: ../../include/conversation.php:914 ../../Zotlabs/Module/Connedit.php:501
msgid "Recent Activity"
msgstr "Actividad reciente"
-#: ../../include/conversation.php:919 ../../include/connections.php:141
-#: ../../include/channel.php:1624 ../../Zotlabs/Widget/Suggestions.php:51
+#: ../../include/conversation.php:926 ../../include/connections.php:150
+#: ../../include/channel.php:1627 ../../Zotlabs/Widget/Suggestions.php:51
#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Suggest.php:69
#: ../../Zotlabs/Module/Directory.php:371
#: ../../Zotlabs/Module/Connections.php:365
msgid "Connect"
msgstr "Conectar"
-#: ../../include/conversation.php:931
+#: ../../include/conversation.php:938
msgid "Edit Connection"
msgstr "Editar conexión"
-#: ../../include/conversation.php:1001
+#: ../../include/conversation.php:1008
msgid "Approve this item"
msgstr "Aprobar este elemento"
-#: ../../include/conversation.php:1001
+#: ../../include/conversation.php:1008
msgid "Delete this item"
msgstr "Borrar este elemento"
-#: ../../include/conversation.php:1055
+#: ../../include/conversation.php:1062
#, php-format
msgid "%s likes this."
msgstr "A %s le gusta esto."
-#: ../../include/conversation.php:1055
+#: ../../include/conversation.php:1062
#, php-format
msgid "%s doesn't like this."
msgstr "A %s no le gusta esto."
-#: ../../include/conversation.php:1059
+#: ../../include/conversation.php:1066
#, php-format
msgid "<span %1$s>%2$d people</span> like this."
msgid_plural "<span %1$s>%2$d people</span> like this."
@@ -2486,7 +2402,7 @@ msgstr[0] "a <span %1$s>%2$d personas</span> le gusta esto."
msgstr[1] "A <span %1$s>%2$d personas</span> les gusta esto."
msgstr[2] "A <span %1$s>%2$d personas</span> les gusta esto."
-#: ../../include/conversation.php:1061
+#: ../../include/conversation.php:1068
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this."
msgid_plural "<span %1$s>%2$d people</span> don't like this."
@@ -2494,11 +2410,11 @@ msgstr[0] "a <span %1$s>%2$d personas</span> no les gusta esto."
msgstr[1] "A <span %1$s>%2$d personas</span> no les gusta esto."
msgstr[2] "A <span %1$s>%2$d personas</span> no les gusta esto."
-#: ../../include/conversation.php:1067
+#: ../../include/conversation.php:1074
msgid "and"
msgstr "y"
-#: ../../include/conversation.php:1070
+#: ../../include/conversation.php:1077
#, php-format
msgid ", and %d other people"
msgid_plural ", and %d other people"
@@ -2506,252 +2422,256 @@ msgstr[0] ", y %d persona más"
msgstr[1] ", y %d personas más"
msgstr[2] ", y %d personas más"
-#: ../../include/conversation.php:1071
+#: ../../include/conversation.php:1078
#, php-format
msgid "%s like this."
msgstr "A %s le gusta esto."
-#: ../../include/conversation.php:1071
+#: ../../include/conversation.php:1078
#, php-format
msgid "%s don't like this."
msgstr "A %s no le gusta esto."
-#: ../../include/conversation.php:1122 ../../addon/hsse/hsse.php:82
+#: ../../include/conversation.php:1129 ../../addon/hsse/hsse.php:82
msgid "Set your location"
msgstr "Establecer su ubicación"
-#: ../../include/conversation.php:1123 ../../addon/hsse/hsse.php:83
+#: ../../include/conversation.php:1130 ../../addon/hsse/hsse.php:83
msgid "Clear browser location"
msgstr "Eliminar los datos de localización geográfica del navegador"
-#: ../../include/conversation.php:1135 ../../addon/cards/Mod_Card_edit.php:101
-#: ../../addon/articles/Mod_Article_edit.php:99 ../../addon/hsse/hsse.php:95
+#: ../../include/conversation.php:1142 ../../addon/cards/Mod_Card_edit.php:94
+#: ../../addon/articles/Mod_Article_edit.php:94 ../../addon/hsse/hsse.php:95
#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:219
#: ../../Zotlabs/Module/Editblock.php:116
msgid "Insert web link"
msgstr "Insertar enlace web"
-#: ../../include/conversation.php:1139 ../../addon/hsse/hsse.php:99
+#: ../../include/conversation.php:1146 ../../addon/hsse/hsse.php:99
msgid "Embed (existing) photo from your photo albums"
msgstr "Insertar una foto (existente) de sus álbumes"
-#: ../../include/conversation.php:1172 ../../addon/hsse/hsse.php:134
+#: ../../include/conversation.php:1179 ../../addon/hsse/hsse.php:134
#: ../../Zotlabs/Module/Chat.php:217
msgid "Please enter a link URL:"
msgstr "Por favor, introduzca la dirección del enlace:"
-#: ../../include/conversation.php:1173 ../../addon/hsse/hsse.php:135
+#: ../../include/conversation.php:1180 ../../addon/hsse/hsse.php:135
msgid "Tag term:"
msgstr "Término de la etiqueta:"
-#: ../../include/conversation.php:1174 ../../addon/hsse/hsse.php:136
+#: ../../include/conversation.php:1181 ../../addon/hsse/hsse.php:136
msgid "Where are you right now?"
msgstr "¿Donde está ahora?"
-#: ../../include/conversation.php:1177 ../../addon/wiki/Mod_Wiki.php:400
-#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:387
-#: ../../Zotlabs/Module/Profile_photo.php:554
+#: ../../include/conversation.php:1184 ../../addon/wiki/Mod_Wiki.php:400
+#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:388
+#: ../../Zotlabs/Module/Profile_photo.php:555
msgid "Choose images to embed"
msgstr "Elegir imágenes para incluir"
-#: ../../include/conversation.php:1178 ../../addon/wiki/Mod_Wiki.php:401
-#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:388
-#: ../../Zotlabs/Module/Profile_photo.php:555
+#: ../../include/conversation.php:1185 ../../addon/wiki/Mod_Wiki.php:401
+#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:389
+#: ../../Zotlabs/Module/Profile_photo.php:556
msgid "Choose an album"
msgstr "Elegir un álbum"
-#: ../../include/conversation.php:1179 ../../addon/hsse/hsse.php:141
+#: ../../include/conversation.php:1186 ../../addon/hsse/hsse.php:141
msgid "Choose a different album..."
msgstr "Elegir un álbum diferente..."
-#: ../../include/conversation.php:1180 ../../addon/wiki/Mod_Wiki.php:403
-#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:557
+#: ../../include/conversation.php:1187 ../../addon/wiki/Mod_Wiki.php:403
+#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:391
+#: ../../Zotlabs/Module/Profile_photo.php:558
msgid "Error getting album list"
msgstr "Error al obtener la lista de álbumes"
-#: ../../include/conversation.php:1181 ../../addon/wiki/Mod_Wiki.php:404
-#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:391
-#: ../../Zotlabs/Module/Profile_photo.php:558
+#: ../../include/conversation.php:1188 ../../addon/wiki/Mod_Wiki.php:404
+#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:392
+#: ../../Zotlabs/Module/Profile_photo.php:559
msgid "Error getting photo link"
msgstr "Error al obtener el enlace de la foto"
-#: ../../include/conversation.php:1182 ../../addon/wiki/Mod_Wiki.php:405
-#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:392
-#: ../../Zotlabs/Module/Profile_photo.php:559
+#: ../../include/conversation.php:1189 ../../addon/wiki/Mod_Wiki.php:405
+#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:393
+#: ../../Zotlabs/Module/Profile_photo.php:560
msgid "Error getting album"
msgstr "Error al obtener el álbum"
-#: ../../include/conversation.php:1183 ../../addon/hsse/hsse.php:145
+#: ../../include/conversation.php:1190 ../../addon/hsse/hsse.php:145
msgid "Comments enabled"
msgstr "Comentarios habilitados"
-#: ../../include/conversation.php:1184 ../../addon/hsse/hsse.php:146
+#: ../../include/conversation.php:1191 ../../addon/hsse/hsse.php:146
+#: ../../Zotlabs/Lib/ThreadItem.php:472
msgid "Comments disabled"
msgstr "Comentarios deshabilitados"
-#: ../../include/conversation.php:1201 ../../addon/hsse/hsse.php:153
-#: ../../Zotlabs/Lib/ThreadItem.php:872 ../../Zotlabs/Module/Webpages.php:257
+#: ../../include/conversation.php:1192
+msgid "Confirm delete"
+msgstr "Confirmar eliminación"
+
+#: ../../include/conversation.php:1209 ../../addon/hsse/hsse.php:153
+#: ../../Zotlabs/Lib/ThreadItem.php:809 ../../Zotlabs/Module/Webpages.php:256
#: ../../Zotlabs/Module/Photos.php:1096
msgid "Preview"
msgstr "Previsualizar"
-#: ../../include/conversation.php:1234 ../../addon/wiki/Mod_Wiki.php:304
-#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Lib/ThreadItem.php:341
-#: ../../Zotlabs/Widget/Cdav.php:142 ../../Zotlabs/Module/Webpages.php:251
+#: ../../include/conversation.php:1242 ../../addon/wiki/Mod_Wiki.php:304
+#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Lib/ThreadItem.php:305
+#: ../../Zotlabs/Widget/Cdav.php:142 ../../Zotlabs/Module/Webpages.php:250
#: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Blocks.php:159
#: ../../Zotlabs/Module/Photos.php:1076
msgid "Share"
msgstr "Compartir"
-#: ../../include/conversation.php:1243 ../../addon/hsse/hsse.php:195
+#: ../../include/conversation.php:1251 ../../addon/hsse/hsse.php:195
msgid "Page link name"
msgstr "Nombre del enlace de la página"
-#: ../../include/conversation.php:1246 ../../addon/hsse/hsse.php:198
+#: ../../include/conversation.php:1254 ../../addon/hsse/hsse.php:198
msgid "Post as"
msgstr "Publicar como"
-#: ../../include/conversation.php:1248 ../../addon/hsse/hsse.php:200
-#: ../../Zotlabs/Lib/ThreadItem.php:863
+#: ../../include/conversation.php:1256 ../../addon/hsse/hsse.php:200
+#: ../../Zotlabs/Lib/ThreadItem.php:800
msgid "Bold"
msgstr "Negrita"
-#: ../../include/conversation.php:1249 ../../addon/hsse/hsse.php:201
-#: ../../Zotlabs/Lib/ThreadItem.php:864
+#: ../../include/conversation.php:1257 ../../addon/hsse/hsse.php:201
+#: ../../Zotlabs/Lib/ThreadItem.php:801
msgid "Italic"
msgstr "Itálico "
-#: ../../include/conversation.php:1250 ../../addon/hsse/hsse.php:202
-#: ../../Zotlabs/Lib/ThreadItem.php:865
+#: ../../include/conversation.php:1258 ../../addon/hsse/hsse.php:202
+#: ../../Zotlabs/Lib/ThreadItem.php:802
msgid "Underline"
msgstr "Subrayar"
-#: ../../include/conversation.php:1251 ../../addon/hsse/hsse.php:203
-#: ../../Zotlabs/Lib/ThreadItem.php:866
+#: ../../include/conversation.php:1259 ../../addon/hsse/hsse.php:203
+#: ../../Zotlabs/Lib/ThreadItem.php:803
msgid "Quote"
msgstr "Citar"
-#: ../../include/conversation.php:1252 ../../addon/hsse/hsse.php:204
-#: ../../Zotlabs/Lib/ThreadItem.php:867
+#: ../../include/conversation.php:1260 ../../addon/hsse/hsse.php:204
+#: ../../Zotlabs/Lib/ThreadItem.php:804
msgid "Code"
msgstr "Código"
-#: ../../include/conversation.php:1253 ../../addon/hsse/hsse.php:205
-#: ../../Zotlabs/Lib/ThreadItem.php:869
+#: ../../include/conversation.php:1261 ../../addon/hsse/hsse.php:205
+#: ../../Zotlabs/Lib/ThreadItem.php:806
msgid "Attach/Upload file"
msgstr "Adjuntar/cargar fichero"
-#: ../../include/conversation.php:1256 ../../addon/wiki/Mod_Wiki.php:397
+#: ../../include/conversation.php:1264 ../../addon/wiki/Mod_Wiki.php:397
#: ../../addon/hsse/hsse.php:208
msgid "Embed an image from your albums"
msgstr "Incluir una imagen de sus álbumes"
-#: ../../include/conversation.php:1257 ../../include/conversation.php:1312
-#: ../../addon/cards/Mod_Card_edit.php:132
-#: ../../addon/articles/Mod_Article_edit.php:130
+#: ../../include/conversation.php:1265 ../../include/conversation.php:1320
+#: ../../addon/cards/Mod_Card_edit.php:126
+#: ../../addon/articles/Mod_Article_edit.php:126
#: ../../addon/wiki/Mod_Wiki.php:365 ../../addon/wiki/Mod_Wiki.php:398
#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
-#: ../../Zotlabs/Storage/Browser.php:386
-#: ../../Zotlabs/Module/Cover_photo.php:385
-#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Oauth.php:110
+#: ../../Zotlabs/Storage/Browser.php:387
+#: ../../Zotlabs/Module/Cover_photo.php:386
+#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Oauth.php:111
#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Connedit.php:750
-#: ../../Zotlabs/Module/Profile_photo.php:552
+#: ../../Zotlabs/Module/Profile_photo.php:553
#: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138
-#: ../../Zotlabs/Module/Admin/Addons.php:430
-#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
+#: ../../Zotlabs/Module/Fbrowser.php:68 ../../Zotlabs/Module/Fbrowser.php:90
#: ../../Zotlabs/Module/Editlayout.php:140
-#: ../../Zotlabs/Module/Editpost.php:114 ../../Zotlabs/Module/Cdav.php:1049
-#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Oauth2.php:115
+#: ../../Zotlabs/Module/Editpost.php:115 ../../Zotlabs/Module/Cdav.php:1049
+#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Oauth2.php:116
#: ../../Zotlabs/Module/Oauth2.php:143 ../../Zotlabs/Module/Editblock.php:141
-#: ../../Zotlabs/Module/Filer.php:56
+#: ../../Zotlabs/Module/Filer.php:67
msgid "Cancel"
msgstr "Cancelar"
-#: ../../include/conversation.php:1258 ../../include/conversation.php:1311
+#: ../../include/conversation.php:1266 ../../include/conversation.php:1319
#: ../../addon/wiki/Mod_Wiki.php:399 ../../addon/hsse/hsse.php:210
-#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:386
-#: ../../Zotlabs/Module/Profile_photo.php:553
+#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:387
+#: ../../Zotlabs/Module/Profile_photo.php:554
msgid "OK"
msgstr "OK"
-#: ../../include/conversation.php:1260 ../../addon/hsse/hsse.php:212
+#: ../../include/conversation.php:1268 ../../addon/hsse/hsse.php:212
msgid "Toggle voting"
msgstr "Cambiar votación"
-#: ../../include/conversation.php:1261
+#: ../../include/conversation.php:1269
msgid "Toggle poll"
msgstr "Activar o desactivar encuestas"
-#: ../../include/conversation.php:1262
+#: ../../include/conversation.php:1270
msgid "Option"
msgstr "Opción"
-#: ../../include/conversation.php:1263
+#: ../../include/conversation.php:1271
msgid "Add option"
msgstr "Añadir una opción"
-#: ../../include/conversation.php:1264
+#: ../../include/conversation.php:1272
msgid "Minutes"
msgstr "Minutos "
-#: ../../include/conversation.php:1264
+#: ../../include/conversation.php:1272
msgid "Hours"
msgstr "Horas "
-#: ../../include/conversation.php:1264
+#: ../../include/conversation.php:1272
msgid "Days"
msgstr "Días "
-#: ../../include/conversation.php:1265
+#: ../../include/conversation.php:1273
msgid "Allow multiple answers"
msgstr "Permitir respuestas múltiples"
-#: ../../include/conversation.php:1267 ../../addon/hsse/hsse.php:215
+#: ../../include/conversation.php:1275 ../../addon/hsse/hsse.php:215
msgid "Disable comments"
msgstr "Dehabilitar los comentarios"
-#: ../../include/conversation.php:1268 ../../addon/hsse/hsse.php:216
+#: ../../include/conversation.php:1276 ../../addon/hsse/hsse.php:216
msgid "Toggle comments"
msgstr "Activar o desactivar los comentarios"
-#: ../../include/conversation.php:1274 ../../addon/cards/Mod_Card_edit.php:118
-#: ../../addon/articles/Mod_Article_edit.php:116 ../../addon/hsse/hsse.php:221
+#: ../../include/conversation.php:1282 ../../addon/cards/Mod_Card_edit.php:111
+#: ../../addon/articles/Mod_Article_edit.php:111 ../../addon/hsse/hsse.php:221
#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1042
#: ../../Zotlabs/Module/Editblock.php:129
msgid "Title (optional)"
msgstr "Título (opcional)"
-#: ../../include/conversation.php:1275
+#: ../../include/conversation.php:1283
msgid "Summary (optional)"
msgstr "Sumario (opcional)"
-#: ../../include/conversation.php:1278 ../../addon/hsse/hsse.php:224
+#: ../../include/conversation.php:1286 ../../addon/hsse/hsse.php:224
msgid "Categories (optional, comma-separated list)"
msgstr "Temas (opcional, lista separada por comas)"
-#: ../../include/conversation.php:1279 ../../addon/hsse/hsse.php:225
+#: ../../include/conversation.php:1287 ../../addon/hsse/hsse.php:225
msgid "Permission settings"
msgstr "Configuración de permisos"
-#: ../../include/conversation.php:1301 ../../addon/hsse/hsse.php:247
+#: ../../include/conversation.php:1309 ../../addon/hsse/hsse.php:247
msgid "Other networks and post services"
msgstr "Otras redes y servicios de publicación"
-#: ../../include/conversation.php:1304 ../../addon/hsse/hsse.php:250
+#: ../../include/conversation.php:1312 ../../addon/hsse/hsse.php:250
msgid "Set expiration date"
msgstr "Configurar fecha de caducidad"
-#: ../../include/conversation.php:1307 ../../addon/hsse/hsse.php:253
+#: ../../include/conversation.php:1315 ../../addon/hsse/hsse.php:253
msgid "Set publish date"
msgstr "Establecer la fecha de publicación"
-#: ../../include/conversation.php:1309 ../../addon/hsse/hsse.php:255
-#: ../../Zotlabs/Lib/ThreadItem.php:875 ../../Zotlabs/Module/Chat.php:218
+#: ../../include/conversation.php:1317 ../../addon/hsse/hsse.php:255
+#: ../../Zotlabs/Lib/ThreadItem.php:812 ../../Zotlabs/Module/Chat.php:218
msgid "Encrypt text"
msgstr "Cifrar texto"
-#: ../../include/conversation.php:1553
+#: ../../include/conversation.php:1563
msgctxt "noun"
msgid "Repeat"
msgid_plural "Repeats"
@@ -2759,7 +2679,7 @@ msgstr[0] "Se repite"
msgstr[1] "Se repite"
msgstr[2] "Repite"
-#: ../../include/conversation.php:1556 ../../Zotlabs/Module/Photos.php:1134
+#: ../../include/conversation.php:1566 ../../Zotlabs/Module/Photos.php:1134
msgctxt "noun"
msgid "Dislike"
msgid_plural "Dislikes"
@@ -2767,7 +2687,7 @@ msgstr[0] "No me gusta"
msgstr[1] "No me gusta"
msgstr[2] "No me gusta"
-#: ../../include/conversation.php:1559
+#: ../../include/conversation.php:1569
msgctxt "noun"
msgid "Attending"
msgid_plural "Attending"
@@ -2775,7 +2695,7 @@ msgstr[0] "Participaré"
msgstr[1] "Participaré"
msgstr[2] "Participaré"
-#: ../../include/conversation.php:1562
+#: ../../include/conversation.php:1572
msgctxt "noun"
msgid "Not Attending"
msgid_plural "Not Attending"
@@ -2783,7 +2703,7 @@ msgstr[0] "No participaré"
msgstr[1] "No participaré"
msgstr[2] "No participaré"
-#: ../../include/conversation.php:1565
+#: ../../include/conversation.php:1575
msgctxt "noun"
msgid "Undecided"
msgid_plural "Undecided"
@@ -2791,226 +2711,222 @@ msgstr[0] "Indeciso/a"
msgstr[1] "Indecisos/as"
msgstr[2] "Indecisos/as"
-#: ../../include/nav.php:108
+#: ../../include/nav.php:109
msgid "Remote authentication"
msgstr "Acceder desde su servidor"
-#: ../../include/nav.php:108
+#: ../../include/nav.php:109
msgid "Click to authenticate to your home hub"
msgstr "Pulsar para identificarse en su servidor de inicio"
-#: ../../include/nav.php:114 ../../Zotlabs/Widget/Channel_activities.php:239
+#: ../../include/nav.php:115 ../../Zotlabs/Widget/Channel_activities.php:239
#: ../../Zotlabs/Widget/Admin.php:29
-#: ../../Zotlabs/Module/Admin/Channels.php:146
-#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:116
+#: ../../Zotlabs/Module/Admin/Channels.php:168
+#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:118
msgid "Channels"
msgstr "Canales"
-#: ../../include/nav.php:114
+#: ../../include/nav.php:115
msgid "Manage your channels"
msgstr "Gestionar sus canales"
-#: ../../include/nav.php:117 ../../Zotlabs/Lib/Apps.php:344
-#: ../../Zotlabs/Widget/Newmember.php:58
+#: ../../include/nav.php:118 ../../Zotlabs/Lib/Apps.php:345
+#: ../../Zotlabs/Widget/Newmember.php:60
#: ../../Zotlabs/Widget/Settings_menu.php:71
-#: ../../Zotlabs/Module/Admin/Themes.php:140
-#: ../../Zotlabs/Module/Admin/Addons.php:348
+#: ../../Zotlabs/Module/Admin/Themes.php:141
+#: ../../Zotlabs/Module/Admin/Addons.php:127
msgid "Settings"
msgstr "Ajustes"
-#: ../../include/nav.php:117
+#: ../../include/nav.php:118
msgid "Account/Channel Settings"
msgstr "Ajustes de cuenta/canales"
-#: ../../include/nav.php:123 ../../include/nav.php:153
-#: ../../include/nav.php:174 ../../boot.php:1745
+#: ../../include/nav.php:124 ../../include/nav.php:154
+#: ../../include/nav.php:175 ../../boot.php:1753
msgid "Logout"
msgstr "Finalizar sesión"
-#: ../../include/nav.php:123 ../../include/nav.php:153
+#: ../../include/nav.php:124 ../../include/nav.php:154
msgid "End this session"
msgstr "Finalizar esta sesión"
-#: ../../include/nav.php:126
+#: ../../include/nav.php:127
msgid "Your profile page"
msgstr "Su página del perfil"
-#: ../../include/nav.php:129 ../../include/channel.php:1538
-#: ../../Zotlabs/Module/Profiles.php:847
+#: ../../include/nav.php:130 ../../include/channel.php:1541
+#: ../../Zotlabs/Module/Profiles.php:851
msgid "Edit Profiles"
msgstr "Editar perfiles"
-#: ../../include/nav.php:129
+#: ../../include/nav.php:130
msgid "Manage/Edit profiles"
msgstr "Administrar/editar perfiles"
-#: ../../include/nav.php:131 ../../include/channel.php:1542
+#: ../../include/nav.php:132 ../../include/channel.php:1545
#: ../../addon/openclipatar/openclipatar.php:59
msgid "Edit Profile"
msgstr "Editar el perfil"
-#: ../../include/nav.php:131 ../../Zotlabs/Widget/Newmember.php:40
+#: ../../include/nav.php:132 ../../Zotlabs/Widget/Newmember.php:42
msgid "Edit your profile"
msgstr "Editar su perfil"
-#: ../../include/nav.php:138 ../../include/nav.php:142 ../../boot.php:1746
-#: ../../Zotlabs/Lib/Apps.php:341
+#: ../../include/nav.php:139 ../../include/nav.php:143 ../../boot.php:1754
+#: ../../Zotlabs/Lib/Apps.php:342
msgid "Login"
msgstr "Iniciar sesión"
-#: ../../include/nav.php:138 ../../include/nav.php:142
+#: ../../include/nav.php:139 ../../include/nav.php:143
msgid "Sign in"
msgstr "Acceder"
-#: ../../include/nav.php:172
+#: ../../include/nav.php:173
msgid "Take me home"
msgstr "Volver a la página principal"
-#: ../../include/nav.php:174
+#: ../../include/nav.php:175
msgid "Log me out of this site"
msgstr "Salir de este sitio"
-#: ../../include/nav.php:179 ../../boot.php:1723
-#: ../../Zotlabs/Module/Register.php:542
+#: ../../include/nav.php:180 ../../boot.php:1731
+#: ../../Zotlabs/Module/Register.php:543
msgid "Register"
msgstr "Registrarse"
-#: ../../include/nav.php:179
+#: ../../include/nav.php:180
msgid "Create an account"
msgstr "Crear una cuenta"
-#: ../../include/nav.php:193
+#: ../../include/nav.php:194 ../../include/nav.php:341
+#: ../../Zotlabs/Lib/Apps.php:354 ../../Zotlabs/Module/Layouts.php:184
+msgid "Help"
+msgstr "Ayuda"
+
+#: ../../include/nav.php:194
msgid "Help and documentation"
msgstr "Ayuda y documentación"
-#: ../../include/nav.php:207 ../../include/acl_selectors.php:149
-#: ../../include/text.php:1189 ../../include/text.php:1201
-#: ../../Zotlabs/Lib/Apps.php:356 ../../Zotlabs/Widget/Sitesearch.php:37
+#: ../../include/nav.php:208 ../../include/acl_selectors.php:149
+#: ../../include/text.php:1190 ../../include/text.php:1202
+#: ../../Zotlabs/Lib/Apps.php:357 ../../Zotlabs/Widget/Sitesearch.php:37
#: ../../Zotlabs/Widget/Activity_filter.php:210
-#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:403
+#: ../../Zotlabs/Module/Search.php:47 ../../Zotlabs/Module/Connections.php:403
msgid "Search"
msgstr "Buscar"
-#: ../../include/nav.php:207
+#: ../../include/nav.php:208
msgid "Search site @name, !forum, #tag, ?docs, content"
msgstr "Buscar en el sitio @nombre, !foro, #tag, ?docs, contenido"
-#: ../../include/nav.php:213 ../../Zotlabs/Widget/Admin.php:61
+#: ../../include/nav.php:214 ../../Zotlabs/Widget/Admin.php:61
msgid "Admin"
msgstr "Administrador"
-#: ../../include/nav.php:213
+#: ../../include/nav.php:214
msgid "Site Setup and Configuration"
msgstr "Ajustes y configuración del sitio"
-#: ../../include/nav.php:344 ../../Zotlabs/Widget/Notifications.php:175
-#: ../../Zotlabs/Widget/Messages.php:36 ../../Zotlabs/Module/Defperms.php:254
-#: ../../Zotlabs/Module/New_channel.php:157
-#: ../../Zotlabs/Module/New_channel.php:164
+#: ../../include/nav.php:345 ../../Zotlabs/Widget/Notifications.php:175
+#: ../../Zotlabs/Widget/Messages.php:50 ../../Zotlabs/Module/Defperms.php:254
+#: ../../Zotlabs/Module/New_channel.php:158
+#: ../../Zotlabs/Module/New_channel.php:165
msgid "Loading"
msgstr "Cargando"
-#: ../../include/nav.php:349
+#: ../../include/nav.php:350
msgid "@name, #tag, ?doc, content"
msgstr "@nombre, #etiqueta, ?ayuda, contenido"
-#: ../../include/nav.php:350
+#: ../../include/nav.php:351
msgid "Please wait..."
msgstr "Espere por favor…"
-#: ../../include/nav.php:356 ../../Zotlabs/Lib/Apps.php:328
+#: ../../include/nav.php:357 ../../Zotlabs/Lib/Apps.php:329
msgid "Apps"
msgstr "Aplicaciones (apps)"
-#: ../../include/nav.php:357
+#: ../../include/nav.php:358
msgid "Channel Apps"
msgstr "Apps del canal "
-#: ../../include/nav.php:358
+#: ../../include/nav.php:359
msgid "System Apps"
msgstr "Apps del sistema "
-#: ../../include/nav.php:359
+#: ../../include/nav.php:360
msgid "Pinned Apps"
msgstr "Apps ancladas "
-#: ../../include/nav.php:360
+#: ../../include/nav.php:361
msgid "Featured Apps"
msgstr "Apps destacadas "
-#: ../../include/nav.php:446 ../../Zotlabs/Lib/Apps.php:348
-#: ../../Zotlabs/Module/Admin/Channels.php:154
+#: ../../include/nav.php:447 ../../Zotlabs/Lib/Apps.php:349
+#: ../../Zotlabs/Module/Admin/Channels.php:176
msgid "Channel"
msgstr "Canal"
-#: ../../include/nav.php:449
+#: ../../include/nav.php:450
msgid "Status Messages and Posts"
msgstr "Mensajes de estado y publicaciones"
-#: ../../include/nav.php:459 ../../Zotlabs/Module/Help.php:85
+#: ../../include/nav.php:460 ../../Zotlabs/Module/Help.php:240
msgid "About"
msgstr "Mi perfil"
-#: ../../include/nav.php:462
+#: ../../include/nav.php:463
msgid "Profile Details"
msgstr "Detalles del perfil"
-#: ../../include/nav.php:472 ../../include/photos.php:721
+#: ../../include/nav.php:473 ../../include/photos.php:747
msgid "Photo Albums"
msgstr "Álbumes de fotos"
-#: ../../include/nav.php:477 ../../Zotlabs/Lib/Apps.php:345
+#: ../../include/nav.php:478 ../../Zotlabs/Lib/Apps.php:346
#: ../../Zotlabs/Widget/Notifications.php:108
#: ../../Zotlabs/Widget/Channel_activities.php:125
-#: ../../Zotlabs/Storage/Browser.php:350 ../../Zotlabs/Module/Fbrowser.php:85
+#: ../../Zotlabs/Storage/Browser.php:351 ../../Zotlabs/Module/Fbrowser.php:87
msgid "Files"
msgstr "Ficheros"
-#: ../../include/nav.php:480
+#: ../../include/nav.php:481
msgid "Files and Storage"
msgstr "Ficheros y repositorio"
-#: ../../include/nav.php:502 ../../include/nav.php:505
-#: ../../Zotlabs/Lib/Apps.php:335 ../../Zotlabs/Widget/Chatroom_list.php:22
+#: ../../include/nav.php:503 ../../include/nav.php:506
+#: ../../Zotlabs/Lib/Apps.php:336 ../../Zotlabs/Widget/Chatroom_list.php:22
msgid "Chatrooms"
msgstr "Salas de chat"
-#: ../../include/nav.php:515 ../../Zotlabs/Lib/Apps.php:334
+#: ../../include/nav.php:516 ../../Zotlabs/Lib/Apps.php:335
#: ../../Zotlabs/Module/Bookmarks.php:90
msgid "Bookmarks"
msgstr "Marcadores"
-#: ../../include/nav.php:518
+#: ../../include/nav.php:519
msgid "Saved Bookmarks"
msgstr "Marcadores guardados"
-#: ../../include/nav.php:526 ../../Zotlabs/Lib/Apps.php:346
+#: ../../include/nav.php:527 ../../Zotlabs/Lib/Apps.php:347
#: ../../Zotlabs/Widget/Channel_activities.php:168
-#: ../../Zotlabs/Module/Webpages.php:247
+#: ../../Zotlabs/Module/Webpages.php:246
msgid "Webpages"
msgstr "Páginas web"
-#: ../../include/nav.php:529
+#: ../../include/nav.php:530
msgid "View Webpages"
msgstr "Ver páginas web"
-#: ../../include/nav.php:537 ../../addon/wiki/Mod_Wiki.php:209
-#: ../../addon/wiki/Widget/Wiki_list.php:23 ../../addon/wiki/wiki.php:72
-msgid "Wikis"
-msgstr "Wikis"
-
-#: ../../include/nav.php:540 ../../Zotlabs/Lib/Apps.php:347
-msgid "Wiki"
-msgstr "Wiki"
-
#: ../../include/security.php:633
msgid ""
"The form security token was not correct. This probably happened because the "
"form has been opened for too long (>3 hours) before submitting it."
msgstr "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado"
-#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:56
-#: ../../Zotlabs/Module/Profiles.php:748
+#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:58
+#: ../../Zotlabs/Module/Profiles.php:751
msgid "Miscellaneous"
msgstr "Varios"
@@ -3026,7 +2942,7 @@ msgstr "Edad:"
msgid "YYYY-MM-DD or MM-DD"
msgstr "AAAA-MM-DD o MM-DD"
-#: ../../include/datetime.php:238 ../../boot.php:2752
+#: ../../include/datetime.php:238 ../../boot.php:2768
msgid "never"
msgstr "nunca"
@@ -3040,7 +2956,19 @@ msgctxt "e.g. 22 hours ago, 1 minute ago"
msgid "%1$d %2$s ago"
msgstr "hace %1$d %2$s"
-#: ../../include/datetime.php:273
+#: ../../include/datetime.php:284
+msgid "ago"
+msgstr "antes"
+
+#: ../../include/datetime.php:287
+msgid "in"
+msgstr "en"
+
+#: ../../include/datetime.php:304
+msgid "now"
+msgstr "ahora"
+
+#: ../../include/datetime.php:312
msgctxt "relative_date"
msgid "year"
msgid_plural "years"
@@ -3048,7 +2976,7 @@ msgstr[0] "año"
msgstr[1] "años"
msgstr[2] "años"
-#: ../../include/datetime.php:276
+#: ../../include/datetime.php:315
msgctxt "relative_date"
msgid "month"
msgid_plural "months"
@@ -3056,7 +2984,7 @@ msgstr[0] "mes"
msgstr[1] "meses"
msgstr[2] "meses"
-#: ../../include/datetime.php:279
+#: ../../include/datetime.php:318
msgctxt "relative_date"
msgid "week"
msgid_plural "weeks"
@@ -3064,7 +2992,7 @@ msgstr[0] "semana"
msgstr[1] "semanas"
msgstr[2] "semanas"
-#: ../../include/datetime.php:282
+#: ../../include/datetime.php:321
msgctxt "relative_date"
msgid "day"
msgid_plural "days"
@@ -3072,7 +3000,7 @@ msgstr[0] "día"
msgstr[1] "días"
msgstr[2] "días"
-#: ../../include/datetime.php:285
+#: ../../include/datetime.php:324
msgctxt "relative_date"
msgid "hour"
msgid_plural "hours"
@@ -3080,7 +3008,7 @@ msgstr[0] "hora"
msgstr[1] "horas"
msgstr[2] "horas"
-#: ../../include/datetime.php:288
+#: ../../include/datetime.php:327
msgctxt "relative_date"
msgid "minute"
msgid_plural "minutes"
@@ -3088,7 +3016,7 @@ msgstr[0] "minuto"
msgstr[1] "minutos"
msgstr[2] "minutos"
-#: ../../include/datetime.php:291
+#: ../../include/datetime.php:330
msgctxt "relative_date"
msgid "second"
msgid_plural "seconds"
@@ -3096,160 +3024,158 @@ msgstr[0] "segundo"
msgstr[1] "segundos"
msgstr[2] "segundos"
-#: ../../include/datetime.php:520
+#: ../../include/datetime.php:559
#, php-format
msgid "%1$s's birthday"
msgstr "Cumpleaños de %1$s"
-#: ../../include/datetime.php:521
+#: ../../include/datetime.php:560
#, php-format
msgid "Happy Birthday %1$s"
msgstr "Feliz cumpleaños %1$s"
-#: ../../include/photos.php:152
+#: ../../include/photos.php:154
#, php-format
msgid "Image exceeds website size limit of %lu bytes"
msgstr "La imagen excede el límite de %lu bytes del sitio"
-#: ../../include/photos.php:163
+#: ../../include/photos.php:165
msgid "Image file is empty."
msgstr "El fichero de imagen está vacío. "
-#: ../../include/photos.php:197 ../../Zotlabs/Module/Cover_photo.php:239
-#: ../../Zotlabs/Module/Profile_photo.php:274
+#: ../../include/photos.php:199 ../../Zotlabs/Module/Cover_photo.php:240
+#: ../../Zotlabs/Module/Profile_photo.php:275
msgid "Unable to process image"
msgstr "No ha sido posible procesar la imagen"
-#: ../../include/photos.php:323
+#: ../../include/photos.php:325
msgid "Photo storage failed."
msgstr "La foto no ha podido ser guardada."
-#: ../../include/photos.php:372
+#: ../../include/photos.php:374
msgid "a new photo"
msgstr "una nueva foto"
-#: ../../include/photos.php:376
+#: ../../include/photos.php:378
#, php-format
msgctxt "photo_upload"
msgid "%1$s posted %2$s to %3$s"
msgstr "%1$s ha publicado %2$s en %3$s"
-#: ../../include/photos.php:722 ../../Zotlabs/Module/Photos.php:1339
+#: ../../include/photos.php:748 ../../Zotlabs/Module/Photos.php:1339
#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1353
msgid "Recent Photos"
msgstr "Fotos recientes"
-#: ../../include/photos.php:726
+#: ../../include/photos.php:752
msgid "Upload New Photos"
msgstr "Subir nuevas fotos"
-#: ../../include/connections.php:165
+#: ../../include/connections.php:174
msgid "New window"
msgstr "Nueva ventana"
-#: ../../include/connections.php:166
+#: ../../include/connections.php:175
msgid "Open the selected location in a different window or browser tab"
msgstr "Abrir la dirección seleccionada en una ventana o pestaña aparte"
-#: ../../include/network.php:412
+#: ../../include/network.php:414
msgid "url: "
msgstr "url: "
-#: ../../include/network.php:413
+#: ../../include/network.php:415
msgid "error_code: "
msgstr "código_de_error: "
-#: ../../include/network.php:414
+#: ../../include/network.php:416
msgid "error_string: "
msgstr "cadena_de_error: "
-#: ../../include/network.php:415
+#: ../../include/network.php:417
msgid "content-type: "
msgstr "tipo de contenido: "
-#: ../../include/network.php:1770 ../../include/network.php:1771
+#: ../../include/network.php:1775 ../../include/network.php:1776
msgid "Friendica"
msgstr "Friendica"
-#: ../../include/network.php:1772
+#: ../../include/network.php:1777
msgid "OStatus"
msgstr "OStatus"
-#: ../../include/network.php:1773
+#: ../../include/network.php:1778
msgid "GNU-Social"
msgstr "GNU Social"
-#: ../../include/network.php:1774
+#: ../../include/network.php:1779
msgid "RSS/Atom"
msgstr "RSS/Atom"
-#: ../../include/network.php:1775
+#: ../../include/network.php:1780
msgid "ActivityPub"
msgstr "ActivityPub"
-#: ../../include/network.php:1776 ../../addon/openid/MysqlProvider.php:56
+#: ../../include/network.php:1781 ../../addon/openid/MysqlProvider.php:56
#: ../../addon/openid/MysqlProvider.php:57
#: ../../addon/redred/Mod_Redred.php:69 ../../addon/rtof/Mod_Rtof.php:55
#: ../../Zotlabs/Module/Connedit.php:736
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-#: ../../Zotlabs/Module/Admin/Accounts.php:330
+#: ../../Zotlabs/Module/Admin/Accounts.php:216
+#: ../../Zotlabs/Module/Admin/Accounts.php:230
#: ../../Zotlabs/Module/Cdav.php:1372
msgid "Email"
msgstr "Correo electrónico"
-#: ../../include/network.php:1777
+#: ../../include/network.php:1782
msgid "Diaspora"
msgstr "Diaspora"
-#: ../../include/network.php:1778
+#: ../../include/network.php:1783
msgid "Facebook"
msgstr "Facebook"
-#: ../../include/network.php:1779
+#: ../../include/network.php:1784
msgid "Zot"
msgstr "Zot"
-#: ../../include/network.php:1780
+#: ../../include/network.php:1785
msgid "LinkedIn"
msgstr "LinkedIn"
-#: ../../include/network.php:1781
+#: ../../include/network.php:1786
msgid "XMPP/IM"
msgstr "XMPP/IM"
-#: ../../include/network.php:1782
+#: ../../include/network.php:1787
msgid "MySpace"
msgstr "MySpace"
-#: ../../include/markdown.php:206 ../../include/bbcode.php:575
+#: ../../include/markdown.php:190 ../../include/bbcode.php:576
#, php-format
msgid "%1$s wrote the following %2$s %3$s"
-msgstr "%1$s escribió la/el %2$s siguiente %3$s"
+msgstr "%1$s escribió %2$s siguiente %3$s"
-#: ../../include/markdown.php:259 ../../include/bbcode.php:660
+#: ../../include/markdown.php:262 ../../include/bbcode.php:661
msgid "spoiler"
msgstr "spoiler"
-#: ../../include/language.php:422 ../../include/text.php:2193
+#: ../../include/language.php:423 ../../include/text.php:2197
msgid "default"
msgstr "por defecto"
-#: ../../include/language.php:435
+#: ../../include/language.php:436
msgid "Select an alternate language"
msgstr "Seleccionar un idioma alternativo"
-#: ../../include/menu.php:120 ../../include/channel.php:1538
-#: ../../include/channel.php:1542 ../../addon/cards/cards.php:74
-#: ../../addon/cards/Mod_Card_edit.php:99
-#: ../../addon/articles/Mod_Article_edit.php:97
+#: ../../include/menu.php:120 ../../include/channel.php:1541
+#: ../../include/channel.php:1545 ../../addon/cards/cards.php:74
#: ../../addon/articles/articles.php:75 ../../addon/wiki/Mod_Wiki.php:214
-#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:616
-#: ../../Zotlabs/Lib/ThreadItem.php:163 ../../Zotlabs/Widget/Cdav.php:144
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:617
+#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Widget/Cdav.php:144
#: ../../Zotlabs/Widget/Cdav.php:181 ../../Zotlabs/Module/Editwebpage.php:142
-#: ../../Zotlabs/Module/Webpages.php:250 ../../Zotlabs/Module/Oauth.php:171
-#: ../../Zotlabs/Module/Thing.php:294 ../../Zotlabs/Module/Layouts.php:191
-#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:175
-#: ../../Zotlabs/Module/Group.php:245 ../../Zotlabs/Module/Blocks.php:158
+#: ../../Zotlabs/Module/Webpages.php:249 ../../Zotlabs/Module/Oauth.php:171
+#: ../../Zotlabs/Module/Thing.php:301 ../../Zotlabs/Module/Layouts.php:191
+#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:176
+#: ../../Zotlabs/Module/Group.php:246 ../../Zotlabs/Module/Blocks.php:158
#: ../../Zotlabs/Module/Editlayout.php:114
#: ../../Zotlabs/Module/Connections.php:338
#: ../../Zotlabs/Module/Connections.php:387
@@ -3281,7 +3207,7 @@ msgstr "Foros"
#: ../../include/acl_selectors.php:136
#: ../../Zotlabs/Lib/PermissionDescription.php:107
-#: ../../Zotlabs/Module/Settings/Privacy.php:65
+#: ../../Zotlabs/Module/Settings/Privacy.php:66
msgid "Only me"
msgstr "Sólo yo"
@@ -3309,15 +3235,15 @@ msgstr "No permitir"
#: ../../include/acl_selectors.php:154
#: ../../addon/flashcards/Mod_Flashcards.php:261
-#: ../../Zotlabs/Module/Thing.php:350 ../../Zotlabs/Module/Thing.php:402
+#: ../../Zotlabs/Module/Thing.php:357 ../../Zotlabs/Module/Thing.php:407
#: ../../Zotlabs/Module/Filestorage.php:195
#: ../../Zotlabs/Module/Photos.php:671 ../../Zotlabs/Module/Photos.php:1045
#: ../../Zotlabs/Module/Chat.php:240
msgid "Permissions"
msgstr "Permisos"
-#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:527
-#: ../../Zotlabs/Widget/Pinned.php:152 ../../Zotlabs/Storage/Browser.php:414
+#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:470
+#: ../../Zotlabs/Widget/Pinned.php:153 ../../Zotlabs/Storage/Browser.php:414
#: ../../Zotlabs/Module/Photos.php:1266
msgid "Close"
msgstr "Cerrar"
@@ -3329,102 +3255,103 @@ msgid ""
" permissions set who is allowed to view the post."
msgstr "Los permisos de la entrada %s no se pueden cambiar %s una vez que se ha compartido.</br /> Estos permisos establecen quién está autorizado para ver el mensaje."
-#: ../../include/text.php:561
+#: ../../include/text.php:562
msgid "prev"
msgstr "anterior"
-#: ../../include/text.php:563
+#: ../../include/text.php:564
msgid "first"
msgstr "primera"
-#: ../../include/text.php:592
+#: ../../include/text.php:593
msgid "last"
msgstr "última"
-#: ../../include/text.php:595
+#: ../../include/text.php:596
msgid "next"
msgstr "próxima"
-#: ../../include/text.php:613
+#: ../../include/text.php:614
msgid "older"
msgstr "más antiguas"
-#: ../../include/text.php:615
+#: ../../include/text.php:616
msgid "newer"
msgstr "más recientes"
-#: ../../include/text.php:1085 ../../Zotlabs/Module/Viewconnections.php:80
+#: ../../include/text.php:1086 ../../Zotlabs/Module/Viewconnections.php:80
#: ../../Zotlabs/Module/Connections.php:306
msgid "Accepts"
msgstr "Se acepta"
-#: ../../include/text.php:1088 ../../Zotlabs/Module/Viewconnections.php:83
+#: ../../include/text.php:1089 ../../Zotlabs/Module/Viewconnections.php:83
#: ../../Zotlabs/Module/Connections.php:309
msgid "Comments"
msgstr "Comentarios"
-#: ../../include/text.php:1093 ../../Zotlabs/Module/Viewconnections.php:88
+#: ../../include/text.php:1094 ../../Zotlabs/Module/Viewconnections.php:88
#: ../../Zotlabs/Module/Connections.php:314
msgid "Stream items"
msgstr "Elementos del stream"
-#: ../../include/text.php:1098 ../../Zotlabs/Module/Viewconnections.php:93
+#: ../../include/text.php:1099 ../../Zotlabs/Module/Viewconnections.php:93
#: ../../Zotlabs/Module/Connections.php:319
msgid "Wall posts"
msgstr "Entradas del Muro"
-#: ../../include/text.php:1102 ../../Zotlabs/Module/Viewconnections.php:97
+#: ../../include/text.php:1103 ../../Zotlabs/Module/Viewconnections.php:97
#: ../../Zotlabs/Module/Connections.php:323
msgid "Nothing"
msgstr "Nada"
-#: ../../include/text.php:1115
+#: ../../include/text.php:1116
#, php-format
msgid "View all %s connections"
msgstr "Ver todas las %s conexiones"
-#: ../../include/text.php:1178
+#: ../../include/text.php:1179
#, php-format
msgid "Network: %s"
msgstr "Red %s"
-#: ../../include/text.php:1190 ../../include/text.php:1202
-#: ../../addon/cards/Mod_Cards.php:116
+#: ../../include/text.php:1191 ../../include/text.php:1203
+#: ../../addon/cards/Mod_Cards.php:116 ../../addon/cards/Mod_Card_edit.php:92
+#: ../../addon/articles/Mod_Article_edit.php:92
#: ../../addon/articles/Mod_Articles.php:120
-#: ../../Zotlabs/Module/Admin/Queueworker.php:114
-#: ../../Zotlabs/Module/Admin/Profs.php:94
-#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Rbmark.php:31
-#: ../../Zotlabs/Module/Rbmark.php:103 ../../Zotlabs/Module/Filer.php:54
+#: ../../Zotlabs/Module/Admin/Queueworker.php:115
+#: ../../Zotlabs/Module/Admin/Profs.php:95
+#: ../../Zotlabs/Module/Admin/Profs.php:115 ../../Zotlabs/Module/Rbmark.php:29
+#: ../../Zotlabs/Module/Rbmark.php:85 ../../Zotlabs/Module/Filer.php:65
msgid "Save"
msgstr "Guardar"
-#: ../../include/text.php:1502
+#: ../../include/text.php:1503
msgid "May"
msgstr "mayo"
-#: ../../include/text.php:1576
+#: ../../include/text.php:1577
msgid "Unknown attachment"
msgstr "Adjunto no reconocido"
-#: ../../include/text.php:1579 ../../Zotlabs/Storage/Browser.php:382
+#: ../../include/text.php:1580 ../../Zotlabs/Storage/Browser.php:383
#: ../../Zotlabs/Module/Sharedwithme.php:109
msgid "Size"
msgstr "Tamaño"
-#: ../../include/text.php:1622
+#: ../../include/text.php:1621
msgid "remove category"
msgstr "eliminar el tema"
-#: ../../include/text.php:1700
+#: ../../include/text.php:1699
msgid "remove from file"
msgstr "eliminar del fichero"
-#: ../../include/text.php:1887
+#: ../../include/text.php:1886
msgid "Download binary/encrypted content"
msgstr "Descargar contenido binario o cifrado"
-#: ../../include/text.php:1945 ../../include/text.php:1954
-#: ../../include/text.php:1981 ../../include/text.php:1990
+#: ../../include/text.php:1944 ../../include/text.php:1953
+#: ../../include/text.php:1980 ../../include/text.php:1989
#, php-format
msgctxt "noun"
msgid "%d Vote"
@@ -3433,7 +3360,7 @@ msgstr[0] "%dVoto"
msgstr[1] "%dVotos"
msgstr[2] "%dVotos"
-#: ../../include/text.php:1997
+#: ../../include/text.php:1996
#, php-format
msgctxt "noun"
msgid "%d Vote in total"
@@ -3442,210 +3369,210 @@ msgstr[0] "%dVoto en total"
msgstr[1] "%dVotos en total"
msgstr[2] "%dVotos en total"
-#: ../../include/text.php:2003
+#: ../../include/text.php:2002
msgid "Poll has ended"
msgstr "La encuesta ha terminado"
-#: ../../include/text.php:2006
+#: ../../include/text.php:2005
#, php-format
msgid "Poll ends in %s"
msgstr "La encuesta termina en %s"
-#: ../../include/text.php:2013 ../../Zotlabs/Lib/ThreadItem.php:467
+#: ../../include/text.php:2012 ../../Zotlabs/Lib/ThreadItem.php:430
msgid "Vote"
msgstr "Votar"
-#: ../../include/text.php:2168
+#: ../../include/text.php:2172
msgid "Link to Source"
msgstr "Enlazar con la entrada en su ubicación original"
-#: ../../include/text.php:2201
+#: ../../include/text.php:2205
msgid "Page layout"
msgstr "Plantilla de la página"
-#: ../../include/text.php:2201
+#: ../../include/text.php:2205
msgid "You can create your own with the layouts tool"
msgstr "Puede crear su propia disposición gráfica con la herramienta de plantillas"
-#: ../../include/text.php:2211 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../include/text.php:2215 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
#: ../../addon/wiki/Widget/Wiki_pages.php:68
msgid "BBcode"
msgstr "BBcode"
-#: ../../include/text.php:2212
+#: ../../include/text.php:2216
msgid "HTML"
msgstr "HTML"
-#: ../../include/text.php:2213 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../include/text.php:2217 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
#: ../../addon/wiki/Widget/Wiki_pages.php:68 ../../addon/mdpost/mdpost.php:41
msgid "Markdown"
msgstr "Markdown"
-#: ../../include/text.php:2214 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../include/text.php:2218 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:68
msgid "Text"
msgstr "Texto"
-#: ../../include/text.php:2215
+#: ../../include/text.php:2219
msgid "Comanche Layout"
msgstr "Plantilla de Comanche"
-#: ../../include/text.php:2220
+#: ../../include/text.php:2224
msgid "PHP"
msgstr "PHP"
-#: ../../include/text.php:2232
+#: ../../include/text.php:2236
msgid "Page content type"
msgstr "Tipo de contenido de la página"
-#: ../../include/text.php:2365
+#: ../../include/text.php:2369
msgid "activity"
msgstr "la/su actividad"
-#: ../../include/text.php:2368
+#: ../../include/text.php:2372
msgid "poll"
msgstr "encuesta"
-#: ../../include/text.php:2481
+#: ../../include/text.php:2485
msgid "a-z, 0-9, -, and _ only"
msgstr "a-z, 0-9, -, and _ only"
-#: ../../include/text.php:2789
+#: ../../include/text.php:2793
msgid "Design Tools"
msgstr "Herramientas de diseño web"
-#: ../../include/text.php:2792 ../../Zotlabs/Module/Blocks.php:152
+#: ../../include/text.php:2796 ../../Zotlabs/Module/Blocks.php:152
msgid "Blocks"
msgstr "Bloques"
-#: ../../include/text.php:2793 ../../Zotlabs/Module/Menu.php:171
+#: ../../include/text.php:2797 ../../Zotlabs/Module/Menu.php:171
msgid "Menus"
msgstr "Menús"
-#: ../../include/text.php:2794 ../../Zotlabs/Module/Layouts.php:182
+#: ../../include/text.php:2798 ../../Zotlabs/Module/Layouts.php:182
msgid "Layouts"
msgstr "Plantillas"
-#: ../../include/text.php:2795
+#: ../../include/text.php:2799
msgid "Pages"
msgstr "Páginas"
-#: ../../include/text.php:2807
+#: ../../include/text.php:2811
msgid "Import"
msgstr "Importar"
-#: ../../include/text.php:2808
+#: ../../include/text.php:2812
msgid "Import website..."
msgstr "Importar un sitio web..."
-#: ../../include/text.php:2809
+#: ../../include/text.php:2813
msgid "Select folder to import"
msgstr "Seleccionar la carpeta que se va a importar"
-#: ../../include/text.php:2810
+#: ../../include/text.php:2814
msgid "Import from a zipped folder:"
msgstr "Importar desde una carpeta comprimida: "
-#: ../../include/text.php:2811
+#: ../../include/text.php:2815
msgid "Import from cloud files:"
msgstr "Importar desde los ficheros en la nube: "
-#: ../../include/text.php:2812
+#: ../../include/text.php:2816
msgid "/cloud/channel/path/to/folder"
msgstr "/cloud/canal/ruta/a la/carpeta"
-#: ../../include/text.php:2813
+#: ../../include/text.php:2817
msgid "Enter path to website files"
msgstr "Ruta a los ficheros del sitio web"
-#: ../../include/text.php:2814
+#: ../../include/text.php:2818
msgid "Select folder"
msgstr "Seleccionar la carpeta"
-#: ../../include/text.php:2815
+#: ../../include/text.php:2819
msgid "Export website..."
msgstr "Exportar un sitio web..."
-#: ../../include/text.php:2816
+#: ../../include/text.php:2820
msgid "Export to a zip file"
msgstr "Exportar a un fichero comprimido .zip"
-#: ../../include/text.php:2817
+#: ../../include/text.php:2821
msgid "website.zip"
msgstr "sitio_web.zip"
-#: ../../include/text.php:2818
+#: ../../include/text.php:2822
msgid "Enter a name for the zip file."
msgstr "Escriba un nombre para el fichero zip."
-#: ../../include/text.php:2819
+#: ../../include/text.php:2823
msgid "Export to cloud files"
msgstr "Exportar a la nube de ficheros"
-#: ../../include/text.php:2820
+#: ../../include/text.php:2824
msgid "/path/to/export/folder"
msgstr "/ruta/para/exportar/carpeta"
-#: ../../include/text.php:2821
+#: ../../include/text.php:2825
msgid "Enter a path to a cloud files destination."
msgstr "Escriba una ruta de destino a la nube de ficheros."
-#: ../../include/text.php:2822
+#: ../../include/text.php:2826
msgid "Specify folder"
msgstr "Especificar una carpeta"
-#: ../../include/channel.php:49
+#: ../../include/channel.php:50
msgid "Unable to obtain identity information from database"
msgstr "No ha sido posible obtener información sobre la identidad desde la base de datos"
-#: ../../include/channel.php:82
+#: ../../include/channel.php:83
msgid "Empty name"
msgstr "Nombre vacío"
-#: ../../include/channel.php:85
+#: ../../include/channel.php:86
msgid "Name too long"
msgstr "Nombre demasiado largo"
-#: ../../include/channel.php:202
+#: ../../include/channel.php:205
msgid "No account identifier"
msgstr "Ningún identificador de la cuenta"
-#: ../../include/channel.php:214 ../../Zotlabs/Module/Register.php:95
+#: ../../include/channel.php:217 ../../Zotlabs/Module/Register.php:96
msgid "Nickname is required."
msgstr "Se requiere un sobrenombre (alias)."
-#: ../../include/channel.php:228 ../../include/channel.php:667
-#: ../../Zotlabs/Module/Register.php:100
+#: ../../include/channel.php:231 ../../include/channel.php:670
+#: ../../Zotlabs/Module/Register.php:101
#: ../../Zotlabs/Module/Changeaddr.php:46
msgid "Reserved nickname. Please choose another."
msgstr "Sobrenombre en uso. Por favor, elija otro."
-#: ../../include/channel.php:233 ../../include/channel.php:672
-#: ../../Zotlabs/Module/Register.php:105
+#: ../../include/channel.php:236 ../../include/channel.php:675
+#: ../../Zotlabs/Module/Register.php:106
#: ../../Zotlabs/Module/Changeaddr.php:51
msgid ""
"Nickname has unsupported characters or is already being used on this site."
msgstr "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio."
-#: ../../include/channel.php:299
+#: ../../include/channel.php:302
msgid "Unable to retrieve created identity"
msgstr "No ha sido posible recuperar la identidad creada"
-#: ../../include/channel.php:410
+#: ../../include/channel.php:413
msgid "Default Profile"
msgstr "Perfil principal"
-#: ../../include/channel.php:600 ../../include/channel.php:689
+#: ../../include/channel.php:603 ../../include/channel.php:692
msgid "Unable to retrieve modified identity"
msgstr "No se puede recuperar la identidad modficada"
-#: ../../include/channel.php:1381
+#: ../../include/channel.php:1384
msgid "Requested channel is not available"
msgstr "El canal solicitado no está disponible"
-#: ../../include/channel.php:1435 ../../addon/cards/Mod_Cards.php:42
+#: ../../include/channel.php:1438 ../../addon/cards/Mod_Cards.php:42
#: ../../addon/articles/Mod_Articles.php:46
#: ../../addon/gallery/Mod_Gallery.php:49
#: ../../Zotlabs/Module/Editwebpage.php:32
@@ -3659,268 +3586,268 @@ msgstr "El canal solicitado no está disponible"
msgid "Requested profile is not available."
msgstr "El perfil solicitado no está disponible."
-#: ../../include/channel.php:1531 ../../Zotlabs/Module/Profiles.php:740
+#: ../../include/channel.php:1534 ../../Zotlabs/Module/Profiles.php:743
msgid "Change profile photo"
msgstr "Cambiar la foto del perfil"
-#: ../../include/channel.php:1539
+#: ../../include/channel.php:1542
msgid "Create New Profile"
msgstr "Crear un nuevo perfil"
-#: ../../include/channel.php:1557 ../../Zotlabs/Module/Profiles.php:837
+#: ../../include/channel.php:1560 ../../Zotlabs/Module/Profiles.php:841
msgid "Profile Image"
msgstr "Imagen del perfil"
-#: ../../include/channel.php:1560
+#: ../../include/channel.php:1563
msgid "Visible to everybody"
msgstr "Visible para todos"
-#: ../../include/channel.php:1561 ../../Zotlabs/Module/Profiles.php:737
-#: ../../Zotlabs/Module/Profiles.php:841
+#: ../../include/channel.php:1564 ../../Zotlabs/Module/Profiles.php:740
+#: ../../Zotlabs/Module/Profiles.php:845
msgid "Edit visibility"
msgstr "Editar visibilidad"
-#: ../../include/channel.php:1643 ../../include/channel.php:1771
+#: ../../include/channel.php:1646 ../../include/channel.php:1774
msgid "Gender:"
msgstr "Género:"
-#: ../../include/channel.php:1644 ../../include/channel.php:1817
+#: ../../include/channel.php:1647 ../../include/channel.php:1820
msgid "Status:"
msgstr "Estado:"
-#: ../../include/channel.php:1645 ../../include/channel.php:1841
+#: ../../include/channel.php:1648 ../../include/channel.php:1844
msgid "Homepage:"
msgstr "Página personal:"
-#: ../../include/channel.php:1646 ../../include/channel.php:1843
+#: ../../include/channel.php:1649 ../../include/channel.php:1846
#: ../../Zotlabs/Module/Directory.php:368
msgid "Hometown:"
msgstr "Lugar de nacimiento:"
-#: ../../include/channel.php:1647
+#: ../../include/channel.php:1650
msgid "Online Now"
msgstr "Ahora en línea"
-#: ../../include/channel.php:1696
+#: ../../include/channel.php:1699
msgid "This channel has not added a profile description yet"
msgstr "Este canal aún no ha añadido una descripción de perfil"
-#: ../../include/channel.php:1698
+#: ../../include/channel.php:1701
msgid "Change your profile photo"
msgstr "Cambiar su foto del perfil"
-#: ../../include/channel.php:1730
+#: ../../include/channel.php:1733
msgid "Trans"
msgstr "Trans"
-#: ../../include/channel.php:1769
+#: ../../include/channel.php:1772
msgid "Full Name:"
msgstr "Nombre completo:"
-#: ../../include/channel.php:1802
+#: ../../include/channel.php:1805
msgid "j F, Y"
msgstr "j F Y"
-#: ../../include/channel.php:1803
+#: ../../include/channel.php:1806
msgid "j F"
msgstr "j F"
-#: ../../include/channel.php:1810
+#: ../../include/channel.php:1813
msgid "Birthday:"
msgstr "Cumpleaños:"
-#: ../../include/channel.php:1814 ../../Zotlabs/Module/Directory.php:349
+#: ../../include/channel.php:1817 ../../Zotlabs/Module/Directory.php:349
msgid "Age:"
msgstr "Edad:"
-#: ../../include/channel.php:1823
+#: ../../include/channel.php:1826
#, php-format
msgid "for %1$d %2$s"
msgstr "por %1$d %2$s"
-#: ../../include/channel.php:1835
+#: ../../include/channel.php:1838
msgid "Tags:"
msgstr "Etiquetas:"
-#: ../../include/channel.php:1839
+#: ../../include/channel.php:1842
msgid "Sexual Preference:"
msgstr "Orientación sexual:"
-#: ../../include/channel.php:1845
+#: ../../include/channel.php:1848
msgid "Political Views:"
msgstr "Posición política:"
-#: ../../include/channel.php:1847
+#: ../../include/channel.php:1850
msgid "Religion:"
msgstr "Religión:"
-#: ../../include/channel.php:1849 ../../Zotlabs/Module/Directory.php:370
+#: ../../include/channel.php:1852 ../../Zotlabs/Module/Directory.php:370
msgid "About:"
msgstr "Sobre mí:"
-#: ../../include/channel.php:1851
+#: ../../include/channel.php:1854
msgid "Hobbies/Interests:"
msgstr "Aficciones o intereses:"
-#: ../../include/channel.php:1853
+#: ../../include/channel.php:1856
msgid "Likes:"
msgstr "Me gusta:"
-#: ../../include/channel.php:1855
+#: ../../include/channel.php:1858
msgid "Dislikes:"
msgstr "No me gusta:"
-#: ../../include/channel.php:1857
+#: ../../include/channel.php:1860
msgid "Contact information and Social Networks:"
msgstr "Información de contacto y redes sociales:"
-#: ../../include/channel.php:1859
+#: ../../include/channel.php:1862
msgid "My other channels:"
msgstr "Mis otros canales:"
-#: ../../include/channel.php:1861
+#: ../../include/channel.php:1864
msgid "Musical interests:"
msgstr "Preferencias musicales:"
-#: ../../include/channel.php:1863
+#: ../../include/channel.php:1866
msgid "Books, literature:"
msgstr "Libros, literatura:"
-#: ../../include/channel.php:1865
+#: ../../include/channel.php:1868
msgid "Television:"
msgstr "Televisión:"
-#: ../../include/channel.php:1867
+#: ../../include/channel.php:1870
msgid "Film/dance/culture/entertainment:"
msgstr "Cine, danza, cultura, entretenimiento:"
-#: ../../include/channel.php:1869
+#: ../../include/channel.php:1872
msgid "Love/Romance:"
msgstr "Vida sentimental o amorosa:"
-#: ../../include/channel.php:1871
+#: ../../include/channel.php:1874
msgid "Work/employment:"
msgstr "Trabajo:"
-#: ../../include/channel.php:1873
+#: ../../include/channel.php:1876
msgid "School/education:"
msgstr "Estudios:"
-#: ../../include/channel.php:1894 ../../Zotlabs/Lib/Apps.php:365
-#: ../../Zotlabs/Module/Profperm.php:113
+#: ../../include/channel.php:1897 ../../Zotlabs/Lib/Apps.php:366
+#: ../../Zotlabs/Module/Profperm.php:116
msgid "Profile"
msgstr "Perfil"
-#: ../../include/channel.php:1896
+#: ../../include/channel.php:1899
msgid "Like this thing"
msgstr "Me gusta esto"
-#: ../../include/channel.php:1897
+#: ../../include/channel.php:1900
msgid "Export"
msgstr "Exportar"
-#: ../../include/channel.php:2350
+#: ../../include/channel.php:2353
msgid "cover photo"
msgstr "Imagen de portada del perfil"
-#: ../../include/channel.php:2631 ../../boot.php:1747
+#: ../../include/channel.php:2628 ../../boot.php:1755
#: ../../Zotlabs/Module/Rmagic.php:96
msgid "Remote Authentication"
msgstr "Acceso desde su servidor"
-#: ../../include/channel.php:2632 ../../Zotlabs/Module/Rmagic.php:97
+#: ../../include/channel.php:2629 ../../Zotlabs/Module/Rmagic.php:97
msgid "Enter your channel address (e.g. channel@example.com)"
msgstr "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)"
-#: ../../include/channel.php:2633 ../../Zotlabs/Module/Rmagic.php:98
+#: ../../include/channel.php:2630 ../../Zotlabs/Module/Rmagic.php:98
msgid "Authenticate"
msgstr "Acceder"
-#: ../../include/channel.php:2793 ../../Zotlabs/Module/Admin/Accounts.php:184
+#: ../../include/channel.php:2790 ../../Zotlabs/Module/Admin/Accounts.php:84
#, php-format
msgid "Account '%s' deleted"
msgstr "La cuenta '%s' ha sido eliminada"
-#: ../../include/bbcode.php:233 ../../include/bbcode.php:993
-#: ../../include/bbcode.php:1613 ../../include/bbcode.php:1621
+#: ../../include/bbcode.php:234 ../../include/bbcode.php:994
+#: ../../include/bbcode.php:1659 ../../include/bbcode.php:1667
msgid "Image/photo"
msgstr "Imagen/foto"
-#: ../../include/bbcode.php:285
+#: ../../include/bbcode.php:286
msgid "Encrypted content"
msgstr "Contenido cifrado"
-#: ../../include/bbcode.php:341
+#: ../../include/bbcode.php:342
#, php-format
msgid "Install %1$s element %2$s"
msgstr "Instalar el elemento de%1$s%2$s"
-#: ../../include/bbcode.php:345
+#: ../../include/bbcode.php:346
#, php-format
msgid ""
"This post contains an installable %s element, however you lack permissions "
"to install it on this site."
msgstr "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio."
-#: ../../include/bbcode.php:355 ../../Zotlabs/Module/Impel.php:47
+#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:47
msgid "webpage"
msgstr "página web"
-#: ../../include/bbcode.php:358 ../../Zotlabs/Module/Impel.php:57
+#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:57
msgid "layout"
msgstr "plantilla"
-#: ../../include/bbcode.php:361 ../../Zotlabs/Module/Impel.php:52
+#: ../../include/bbcode.php:362 ../../Zotlabs/Module/Impel.php:52
msgid "block"
msgstr "bloque"
-#: ../../include/bbcode.php:364 ../../Zotlabs/Module/Impel.php:64
+#: ../../include/bbcode.php:365 ../../Zotlabs/Module/Impel.php:64
msgid "menu"
msgstr "menú"
-#: ../../include/bbcode.php:567
+#: ../../include/bbcode.php:568
msgid "card"
msgstr "ficha"
-#: ../../include/bbcode.php:569
+#: ../../include/bbcode.php:570
msgid "article"
msgstr "el artículo"
-#: ../../include/bbcode.php:652 ../../include/bbcode.php:660
+#: ../../include/bbcode.php:653 ../../include/bbcode.php:661
msgid "Click to open/close"
msgstr "Pulsar para abrir/cerrar"
-#: ../../include/bbcode.php:673
+#: ../../include/bbcode.php:674
msgid "View article"
msgstr "Ver el artículo"
-#: ../../include/bbcode.php:673
+#: ../../include/bbcode.php:674
msgid "View summary"
msgstr "Ver sumario"
-#: ../../include/bbcode.php:1117 ../../include/bbcode.php:1299
-#: ../../addon/wiki/Lib/NativeWikiPage.php:630
+#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1312
+#: ../../addon/wiki/Lib/NativeWikiPage.php:634
msgid "Different viewers will see this text differently"
msgstr "Visitantes diferentes verán este texto de forma distinta"
-#: ../../include/bbcode.php:1589
+#: ../../include/bbcode.php:1635
msgid "$1 wrote:"
msgstr "$1 escribió:"
-#: ../../include/import.php:30
+#: ../../include/import.php:31
msgid "Unable to import a removed channel."
msgstr "No se puede importar un canal eliminado."
-#: ../../include/import.php:56
+#: ../../include/import.php:57
msgid ""
"Cannot create a duplicate channel identifier on this system. Import failed."
msgstr "No se ha podido crear un canal con un identificador que ya existe en este sistema. La importación ha fallado."
-#: ../../include/import.php:77 ../../addon/diaspora/import_diaspora.php:43
+#: ../../include/import.php:78 ../../addon/diaspora/import_diaspora.php:43
msgid "Unable to create a unique channel address. Import failed."
msgstr "No se ha podido crear una dirección de canal única. Ha fallado la importación."
-#: ../../include/import.php:128
+#: ../../include/import.php:129
msgid "Cloned channel not found. Import failed."
msgstr "No se ha podido importar el canal porque el canal clonado no se ha encontrado."
@@ -3948,15 +3875,7 @@ msgstr "Se han guardado los ajustes de IRC."
msgid "IRC Chatroom"
msgstr "Sala de chat IRC"
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-msgid "Hide the button and show the smilies directly."
-msgstr "Ocultar el botón y mostrar los smilies directamente."
-
-#: ../../addon/smileybutton/Mod_Smileybutton.php:50
-msgid "Smileybutton Settings"
-msgstr "Ajustes de Smileybutton"
-
-#: ../../addon/fediquest/fediquest.php:211
+#: ../../addon/fediquest/fediquest.php:215
msgid "ERROR: word length is not correct!"
msgstr "ERROR: ¡la longitud de la palabra no es correcta!"
@@ -4104,7 +4023,7 @@ msgstr "Enviar ZID"
msgid "Send email to all members"
msgstr "Enviar un correo electrónico a todos los miembros"
-#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:65
+#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:66
#, php-format
msgid "%s Administrator"
msgstr "%s Administrador"
@@ -4113,24 +4032,24 @@ msgstr "%s Administrador"
msgid "No recipients found."
msgstr "No se han encontrado destinatarios."
-#: ../../addon/hubwall/hubwall.php:73
+#: ../../addon/hubwall/hubwall.php:74
#, php-format
msgid "%1$d of %2$d messages sent."
msgstr "%1$d de %2$d mensajes enviados."
-#: ../../addon/hubwall/hubwall.php:81
+#: ../../addon/hubwall/hubwall.php:82
msgid "Send email to all hub members."
msgstr "Enviar un correo electrónico a todos los miembros del hub."
-#: ../../addon/hubwall/hubwall.php:92 ../../addon/mailtest/mailtest.php:96
+#: ../../addon/hubwall/hubwall.php:93 ../../addon/mailtest/mailtest.php:96
msgid "Message subject"
msgstr "Asunto del mensaje"
-#: ../../addon/hubwall/hubwall.php:93
+#: ../../addon/hubwall/hubwall.php:94
msgid "Sender Email address"
msgstr "Dirección de correo electrónico del remitente"
-#: ../../addon/hubwall/hubwall.php:94
+#: ../../addon/hubwall/hubwall.php:95
msgid "Test mode (only send to hub administrator)"
msgstr "Modo de prueba (enviar sólo al administrador del hub)"
@@ -4174,7 +4093,7 @@ msgid "Last Name"
msgstr "Apellido"
#: ../../addon/openid/MysqlProvider.php:54
-#: ../../addon/redred/Mod_Redred.php:73 ../../boot.php:1740
+#: ../../addon/redred/Mod_Redred.php:73 ../../boot.php:1748
msgid "Nickname"
msgstr "Alias"
@@ -4207,11 +4126,11 @@ msgid "Profile Photo 128px"
msgstr "Foto del perfil 128px"
#: ../../addon/openid/MysqlProvider.php:68
-#: ../../Zotlabs/Module/Profiles.php:779
+#: ../../Zotlabs/Module/Profiles.php:782
msgid "Homepage URL"
msgstr "Dirección de la página personal"
-#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:362
+#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:363
msgid "Language"
msgstr "Idioma"
@@ -4232,7 +4151,7 @@ msgid "Birthdate"
msgstr "Fecha de nacimiento"
#: ../../addon/openid/MysqlProvider.php:74
-#: ../../Zotlabs/Module/Profiles.php:452
+#: ../../Zotlabs/Module/Profiles.php:453
msgid "Gender"
msgstr "Género"
@@ -4336,7 +4255,7 @@ msgid "Unknown error. Please try again later."
msgstr "Error desconocido. Por favor, inténtelo otra vez."
#: ../../addon/openclipatar/openclipatar.php:299
-#: ../../Zotlabs/Module/Profile_photo.php:268
+#: ../../Zotlabs/Module/Profile_photo.php:269
msgid ""
"Shift-reload the page or clear browser cache if the new photo does not "
"display immediately."
@@ -4405,8 +4324,8 @@ msgid "for further info."
msgstr "para más información."
#: ../../addon/upgrade_info/upgrade_info.php:60
-msgid "Upgrade Info"
-msgstr "Información de actualización"
+msgid "$Projectname Upgrade Info"
+msgstr "$Projectname Información de actualización"
#: ../../addon/upgrade_info/upgrade_info.php:64
msgid "Do not show this again"
@@ -4423,10 +4342,10 @@ msgctxt "opensearch"
msgid "$Projectname"
msgstr "$Projectname"
-#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:66
-#: ../../Zotlabs/Module/Home.php:87 ../../Zotlabs/Module/Home.php:95
-#: ../../Zotlabs/Module/Invite.php:238 ../../Zotlabs/Module/Invite.php:507
-#: ../../Zotlabs/Module/Invite.php:521
+#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:67
+#: ../../Zotlabs/Module/Home.php:88 ../../Zotlabs/Module/Home.php:96
+#: ../../Zotlabs/Module/Invite.php:239 ../../Zotlabs/Module/Invite.php:508
+#: ../../Zotlabs/Module/Invite.php:522
msgid "$Projectname"
msgstr "$Projectname"
@@ -4542,9 +4461,9 @@ msgstr "Esta funcionalidad requiere Piwik >= 2.2.0"
#: ../../addon/msgfooter/msgfooter.php:54
#: ../../addon/rendezvous/rendezvous.php:82 ../../addon/xmpp/xmpp.php:54
#: ../../addon/faces/faces.php:291 ../../addon/twitter/twitter.php:493
-#: ../../addon/openstreetmap/openstreetmap.php:171
+#: ../../addon/openstreetmap/openstreetmap.php:163
#: ../../Zotlabs/Module/Defperms.php:111
-#: ../../Zotlabs/Module/Settings/Channel.php:150
+#: ../../Zotlabs/Module/Settings/Channel.php:151
msgid "Settings updated."
msgstr "Ajustes actualizados."
@@ -4603,7 +4522,7 @@ msgstr "Mensaje para mostrar en todas las páginas de este servidor"
msgid "Page Header"
msgstr "Page Header"
-#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:333
+#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:334
msgid "Report Bug"
msgstr "Informe de errores"
@@ -4628,7 +4547,7 @@ msgid "Insane Journal Crosspost Connector App"
msgstr "App Ajustes del Conector de publicación cruzada de InsaneJournal"
#: ../../addon/ijpost/Mod_Ijpost.php:35 ../../addon/xmpp/Mod_Xmpp.php:35
-#: ../../Zotlabs/Module/Invite.php:69 ../../Zotlabs/Module/Lang.php:20
+#: ../../Zotlabs/Module/Invite.php:70 ../../Zotlabs/Module/Lang.php:20
msgid "Not Installed"
msgstr "No instalado/a"
@@ -4701,14 +4620,22 @@ msgid "Hubzilla Crosspost Connector"
msgstr "Hubzilla Crosspost Connector"
#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160
-#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:331
+#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:332
msgid "Cards"
msgstr "Fichas"
-#: ../../addon/cards/cards.php:51
+#: ../../addon/cards/cards.php:51 ../../addon/wiki/wiki.php:48
msgid "View Cards"
msgstr "Ver las fichas"
+#: ../../addon/cards/cards.php:104 ../../addon/articles/articles.php:105
+#: ../../addon/wiki/Lib/NativeWikiPage.php:549
+#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:155
+#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Help.php:173
+#: ../../Zotlabs/Web/Router.php:188
+msgid "Page not found."
+msgstr "Página no encontrada."
+
#: ../../addon/cards/Mod_Cards.php:115
msgid "Add Card"
msgstr "Añadir una ficha"
@@ -4732,7 +4659,7 @@ msgstr "Elemento no encontrado"
msgid "Channel not found."
msgstr "Canal no encontrado."
-#: ../../addon/cards/Mod_Card_edit.php:129
+#: ../../addon/cards/Mod_Card_edit.php:123
msgid "Edit Card"
msgstr "Editar la ficha"
@@ -4823,20 +4750,20 @@ msgstr "Los servicios de microblog como Mastodon no soportan correctamente los a
msgid "Activitypub Protocol"
msgstr "Protocolo Activitypub"
-#: ../../addon/pubcrawl/pubcrawl.php:1073
+#: ../../addon/pubcrawl/pubcrawl.php:1080
#: ../../addon/diaspora/diaspora.php:415
#: ../../Zotlabs/Module/Contactedit.php:494
msgid "Refresh failed"
msgstr "Error de actualización"
-#: ../../addon/pubcrawl/pubcrawl.php:1080
+#: ../../addon/pubcrawl/pubcrawl.php:1087
#: ../../addon/diaspora/diaspora.php:420
#: ../../Zotlabs/Module/Contactedit.php:491
msgid "Refresh succeeded"
msgstr "Actualización con éxito"
#: ../../addon/bookmarker/bookmarker.php:38
-#: ../../Zotlabs/Lib/ThreadItem.php:495
+#: ../../Zotlabs/Lib/ThreadItem.php:458
msgid "Save Bookmarks"
msgstr "Guardar en Marcadores"
@@ -4918,31 +4845,31 @@ msgid "Import completed."
msgstr "Importación completada."
#: ../../addon/diaspora/p.php:48 ../../addon/diaspora/util.php:346
-#: ../../addon/diaspora/util.php:359 ../../Zotlabs/Lib/Enotify.php:61
+#: ../../addon/diaspora/util.php:359 ../../Zotlabs/Lib/Enotify.php:62
msgid "$projectname"
msgstr "$projectname"
-#: ../../addon/diaspora/Receiver.php:1632
+#: ../../addon/diaspora/Receiver.php:1643
#, php-format
msgid "%1$s dislikes %2$s's %3$s"
msgstr "a %1$s no le gusta el %3$s de %2$s"
-#: ../../addon/diaspora/Receiver.php:1693
-#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:456
+#: ../../addon/diaspora/Receiver.php:1704
+#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:459
msgid "status"
msgstr "el mensaje de estado "
-#: ../../addon/diaspora/Receiver.php:2248 ../../Zotlabs/Module/Like.php:487
+#: ../../addon/diaspora/Receiver.php:2265 ../../Zotlabs/Module/Like.php:490
#, php-format
msgid "%1$s is attending %2$s's %3$s"
msgstr "%3$s de %2$s: %1$s participa"
-#: ../../addon/diaspora/Receiver.php:2250 ../../Zotlabs/Module/Like.php:489
+#: ../../addon/diaspora/Receiver.php:2267 ../../Zotlabs/Module/Like.php:492
#, php-format
msgid "%1$s is not attending %2$s's %3$s"
msgstr "%3$s de %2$s: %1$s no participa"
-#: ../../addon/diaspora/Receiver.php:2252 ../../Zotlabs/Module/Like.php:491
+#: ../../addon/diaspora/Receiver.php:2269 ../../Zotlabs/Module/Like.php:494
#, php-format
msgid "%1$s may attend %2$s's %3$s"
msgstr "%3$s de %2$s: %1$s quizá participe"
@@ -5016,8 +4943,7 @@ msgid "No channels currently blocked"
msgstr "No hay canales bloqueados actualmente"
#: ../../addon/superblock/Mod_Superblock.php:90
-#: ../../Zotlabs/Module/Cover_photo.php:381 ../../Zotlabs/Module/Tagrm.php:137
-#: ../../Zotlabs/Module/Admin/Addons.php:462
+#: ../../Zotlabs/Module/Cover_photo.php:382 ../../Zotlabs/Module/Tagrm.php:137
#: ../../Zotlabs/Module/Photos.php:994
msgid "Remove"
msgstr "Eliminar"
@@ -5026,19 +4952,19 @@ msgstr "Eliminar"
msgid "Block Completely"
msgstr "Bloquear completamente"
-#: ../../addon/randpost/randpost.php:99
+#: ../../addon/randpost/randpost.php:101
msgid "You're welcome."
msgstr "Bienvenido."
-#: ../../addon/randpost/randpost.php:100
+#: ../../addon/randpost/randpost.php:102
msgid "Ah shucks..."
msgstr "Ah, joder..."
-#: ../../addon/randpost/randpost.php:101
+#: ../../addon/randpost/randpost.php:103
msgid "Don't mention it."
msgstr "No lo menciones."
-#: ../../addon/randpost/randpost.php:102
+#: ../../addon/randpost/randpost.php:104
msgid "&lt;blush&gt;"
msgstr "&lt;sonrojo&gt;"
@@ -5158,13 +5084,13 @@ msgid "Let's meet here"
msgstr "Reunámonos aquí"
#: ../../addon/rendezvous/rendezvous.php:172 ../../addon/wiki/Mod_Wiki.php:221
-#: ../../addon/wiki/Lib/NativeWikiPage.php:588
+#: ../../addon/wiki/Lib/NativeWikiPage.php:592
#: ../../addon/wiki/Widget/Wiki_page_history.php:28
-#: ../../Zotlabs/Storage/Browser.php:380 ../../Zotlabs/Module/Oauth.php:111
+#: ../../Zotlabs/Storage/Browser.php:381 ../../Zotlabs/Module/Oauth.php:112
#: ../../Zotlabs/Module/Oauth.php:137 ../../Zotlabs/Module/Connedit.php:732
-#: ../../Zotlabs/Module/Admin/Channels.php:159
+#: ../../Zotlabs/Module/Admin/Channels.php:181
#: ../../Zotlabs/Module/Sharedwithme.php:107 ../../Zotlabs/Module/Chat.php:256
-#: ../../Zotlabs/Module/Cdav.php:1368 ../../Zotlabs/Module/Oauth2.php:116
+#: ../../Zotlabs/Module/Cdav.php:1368 ../../Zotlabs/Module/Oauth2.php:117
#: ../../Zotlabs/Module/Oauth2.php:144
msgid "Name"
msgstr "Nombre"
@@ -5172,7 +5098,7 @@ msgstr "Nombre"
#: ../../addon/rendezvous/rendezvous.php:173
#: ../../addon/cart/submodules/hzservices.php:657
#: ../../addon/cart/submodules/manualcat.php:260
-#: ../../Zotlabs/Module/Appman.php:220 ../../Zotlabs/Module/Rbmark.php:100
+#: ../../Zotlabs/Module/Appman.php:220 ../../Zotlabs/Module/Rbmark.php:82
#: ../../Zotlabs/Module/Cdav.php:1005
msgid "Description"
msgstr "Descripción"
@@ -5253,7 +5179,7 @@ msgid "You have no rendezvous. Press the button above to create a rendezvous!"
msgstr "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!"
#: ../../addon/rendezvous/rendezvous.php:401
-#: ../../Zotlabs/Module/Setup.php:748
+#: ../../Zotlabs/Module/Setup.php:754
msgid "Errors encountered creating database tables."
msgstr "Se han encontrado errores al crear las tablas de la base de datos."
@@ -5357,12 +5283,12 @@ msgstr "Reenviar comentarios (requerido por el plugin hubzilla_wp)"
msgid "Wordpress Post"
msgstr "Publicar en Wordpress"
-#: ../../addon/articles/Mod_Article_edit.php:127
+#: ../../addon/articles/Mod_Article_edit.php:123
msgid "Edit Article"
msgstr "Editar el artículo"
#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160
-#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:330
+#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:331
msgid "Articles"
msgstr "Artículos"
@@ -5399,18 +5325,23 @@ msgstr "Error al crear el fichero comprimido zip de la carpeta a exportar"
msgid "Error downloading wiki: "
msgstr "Error al descargar el wiki: "
+#: ../../addon/wiki/Mod_Wiki.php:209 ../../addon/wiki/Widget/Wiki_list.php:23
+#: ../../addon/wiki/wiki.php:45 ../../addon/wiki/wiki.php:98
+msgid "Wikis"
+msgstr "Wikis"
+
#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407
msgid "Download"
msgstr "Descargar"
#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406
-#: ../../Zotlabs/Module/Webpages.php:256 ../../Zotlabs/Module/Layouts.php:196
-#: ../../Zotlabs/Module/Pubsites.php:62 ../../Zotlabs/Module/Blocks.php:164
+#: ../../Zotlabs/Module/Webpages.php:255 ../../Zotlabs/Module/Layouts.php:196
+#: ../../Zotlabs/Module/Pubsites.php:63 ../../Zotlabs/Module/Blocks.php:164
msgid "View"
msgstr "Ver"
#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137
-#: ../../Zotlabs/Module/Profiles.php:848
+#: ../../Zotlabs/Module/Profiles.php:852
msgid "Create New"
msgstr "Crear"
@@ -5422,7 +5353,7 @@ msgstr "Nombre del wiki"
msgid "Content type"
msgstr "Tipo de contenido"
-#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:381
+#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:382
msgid "Type"
msgstr "Tipo"
@@ -5463,7 +5394,7 @@ msgid "Revision Comparison"
msgstr "Comparación de revisiones"
#: ../../addon/wiki/Mod_Wiki.php:364
-#: ../../addon/wiki/Lib/NativeWikiPage.php:591
+#: ../../addon/wiki/Lib/NativeWikiPage.php:595
#: ../../addon/wiki/Widget/Wiki_page_history.php:31
msgid "Revert"
msgstr "Revertir"
@@ -5480,8 +5411,8 @@ msgstr "Nombre de la nueva página"
msgid "Embed image from photo albums"
msgstr "Incluir una imagen de los álbumes de fotos"
-#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:389
-#: ../../Zotlabs/Module/Profile_photo.php:556
+#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:557
msgid "Choose a different album"
msgstr "Elegir un álbum diferente..."
@@ -5546,83 +5477,83 @@ msgid "Add new page"
msgstr "Añadir una nueva página"
#: ../../addon/wiki/Mod_Wiki.php:906 ../../addon/wiki/Widget/Wiki_pages.php:71
-#: ../../Zotlabs/Module/Dreport.php:132
+#: ../../Zotlabs/Module/Dreport.php:138
msgid "Options"
msgstr "Opciones"
-#: ../../addon/wiki/Lib/NativeWiki.php:144
+#: ../../addon/wiki/Lib/NativeWiki.php:146
msgid "Wiki updated successfully"
msgstr "El wiki se ha actualizado con éxito"
-#: ../../addon/wiki/Lib/NativeWiki.php:204
+#: ../../addon/wiki/Lib/NativeWiki.php:206
msgid "Wiki files deleted successfully"
msgstr "Se han borrado con éxito los ficheros del wiki"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:41
-#: ../../addon/wiki/Lib/NativeWikiPage.php:109
+#: ../../addon/wiki/Lib/NativeWikiPage.php:42
+#: ../../addon/wiki/Lib/NativeWikiPage.php:110
msgid "(No Title)"
msgstr "(Sin título)"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:123
+#: ../../addon/wiki/Lib/NativeWikiPage.php:124
msgid "Wiki page create failed."
msgstr "Se ha producido un error en la creación de la página wiki."
-#: ../../addon/wiki/Lib/NativeWikiPage.php:137
+#: ../../addon/wiki/Lib/NativeWikiPage.php:138
msgid "Wiki not found."
msgstr "No se ha encontrado el wiki."
-#: ../../addon/wiki/Lib/NativeWikiPage.php:148
+#: ../../addon/wiki/Lib/NativeWikiPage.php:149
msgid "Destination name already exists"
msgstr "El nombre de destino ya existe"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:181
-#: ../../addon/wiki/Lib/NativeWikiPage.php:376
+#: ../../addon/wiki/Lib/NativeWikiPage.php:182
+#: ../../addon/wiki/Lib/NativeWikiPage.php:377
msgid "Page not found"
msgstr "No se ha encontrado la página"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:211
+#: ../../addon/wiki/Lib/NativeWikiPage.php:212
msgid "Error reading page content"
msgstr "Se ha producido un error al leer el contenido de la página"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:367
-#: ../../addon/wiki/Lib/NativeWikiPage.php:425
-#: ../../addon/wiki/Lib/NativeWikiPage.php:493
-#: ../../addon/wiki/Lib/NativeWikiPage.php:534
+#: ../../addon/wiki/Lib/NativeWikiPage.php:368
+#: ../../addon/wiki/Lib/NativeWikiPage.php:426
+#: ../../addon/wiki/Lib/NativeWikiPage.php:494
+#: ../../addon/wiki/Lib/NativeWikiPage.php:538
msgid "Error reading wiki"
msgstr "Se ha producido un error al leer el wiki"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:411
+#: ../../addon/wiki/Lib/NativeWikiPage.php:412
msgid "Page update failed."
msgstr "Se ha producido un error al actualizar la página."
-#: ../../addon/wiki/Lib/NativeWikiPage.php:447
+#: ../../addon/wiki/Lib/NativeWikiPage.php:448
msgid "Nothing deleted"
msgstr "No se ha eliminado nada"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:514
+#: ../../addon/wiki/Lib/NativeWikiPage.php:518
msgid "Compare: object not found."
msgstr "No se ha encontrado un objeto para comparar."
-#: ../../addon/wiki/Lib/NativeWikiPage.php:521
+#: ../../addon/wiki/Lib/NativeWikiPage.php:525
msgid "Page updated"
msgstr "Se ha actualizado la página"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:529
+#: ../../addon/wiki/Lib/NativeWikiPage.php:533
msgid "Wiki resource_id required for git commit"
msgstr "Se necesita Wiki resource_id para el git commit"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:589
+#: ../../addon/wiki/Lib/NativeWikiPage.php:593
#: ../../addon/wiki/Widget/Wiki_page_history.php:29
msgctxt "wiki_history"
msgid "Message"
msgstr "Mensaje"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:590
+#: ../../addon/wiki/Lib/NativeWikiPage.php:594
#: ../../addon/wiki/Widget/Wiki_page_history.php:30
msgid "Date"
msgstr "Fecha"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:592
+#: ../../addon/wiki/Lib/NativeWikiPage.php:596
#: ../../addon/wiki/Widget/Wiki_page_history.php:32
msgid "Compare"
msgstr "Comparar"
@@ -5753,7 +5684,7 @@ msgid "New registration"
msgstr "Nuevo registro"
#: ../../addon/notifyadmin/notifyadmin.php:40
-#: ../../Zotlabs/Module/Invite.php:265
+#: ../../Zotlabs/Module/Invite.php:266
#, php-format
msgid "%s : Message delivery failed."
msgstr "%s : Falló el envío del mensaje."
@@ -5768,7 +5699,7 @@ msgid "Post to GNU social"
msgstr "Publicar en GNU social"
#: ../../addon/statusnet/statusnet.php:593
-#: ../../Zotlabs/Module/Admin/Site.php:409
+#: ../../Zotlabs/Module/Admin/Site.php:411
msgid "Site name"
msgstr "Nombre del sitio"
@@ -5777,13 +5708,13 @@ msgid "API URL"
msgstr "URL de la API"
#: ../../addon/statusnet/statusnet.php:595 ../../addon/twitter/twitter.php:505
-#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
+#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:139
+#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:145
msgid "Consumer Secret"
msgstr "Consumer Secret"
#: ../../addon/statusnet/statusnet.php:596 ../../addon/twitter/twitter.php:504
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
+#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:138
msgid "Consumer Key"
msgstr "Consumer Key"
@@ -5918,6 +5849,16 @@ msgstr "No permitido/a."
msgid "Set/edit permissions"
msgstr "Establecer/editar los permisos"
+#: ../../addon/flashcards/Mod_Flashcards.php:291
+#: ../../addon/flashcards/Mod_Flashcards.php:292
+#: ../../Zotlabs/Module/Display.php:59 ../../Zotlabs/Module/Display.php:120
+#: ../../Zotlabs/Module/Display.php:396 ../../Zotlabs/Module/Thing.php:120
+#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Viewsrc.php:25
+#: ../../Zotlabs/Module/Admin/Themes.php:73
+#: ../../Zotlabs/Module/Admin/Addons.php:42 ../../Zotlabs/Module/Admin.php:63
+msgid "Item not found."
+msgstr "Elemento no encontrado."
+
#: ../../addon/ljpost/ljpost.php:49
msgid "Post to Livejournal"
msgstr "Publicar en Livejournal"
@@ -6375,44 +6316,44 @@ msgstr "Importar repositorio de ficheros de Redmatrix"
msgid "This will import all your Redmatrix cloud files to this channel."
msgstr "Esto importará todos sus ficheros de la nube de Redmatrix a este canal."
-#: ../../addon/openstreetmap/openstreetmap.php:133
+#: ../../addon/openstreetmap/openstreetmap.php:125
msgid "View Larger"
msgstr "Ver más grande"
-#: ../../addon/openstreetmap/openstreetmap.php:156
+#: ../../addon/openstreetmap/openstreetmap.php:148
msgid "Tile Server URL"
msgstr "URL del servidor de mosaicos de imágenes "
-#: ../../addon/openstreetmap/openstreetmap.php:156
+#: ../../addon/openstreetmap/openstreetmap.php:148
msgid ""
"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
"target=\"_blank\">public tile servers</a>"
msgstr "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">servidores públicos de mosaicos de imágenes</a>"
-#: ../../addon/openstreetmap/openstreetmap.php:157
+#: ../../addon/openstreetmap/openstreetmap.php:149
msgid "Nominatim (reverse geocoding) Server URL"
msgstr "URL del servidor nominatim (geocodificación inversa)"
-#: ../../addon/openstreetmap/openstreetmap.php:157
+#: ../../addon/openstreetmap/openstreetmap.php:149
msgid ""
"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
"target=\"_blank\">Nominatim servers</a>"
msgstr "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">servidores nominatim</a>"
-#: ../../addon/openstreetmap/openstreetmap.php:158
+#: ../../addon/openstreetmap/openstreetmap.php:150
msgid "Default zoom"
msgstr "Zoom predeterminado"
-#: ../../addon/openstreetmap/openstreetmap.php:158
+#: ../../addon/openstreetmap/openstreetmap.php:150
msgid ""
"The default zoom level. (1:world, 18:highest, also depends on tile server)"
msgstr "El nivel de zoom predeterminado. (1: mundo, 18: el más alto, también depende del servidor del mosaico de imágenes)"
-#: ../../addon/openstreetmap/openstreetmap.php:159
+#: ../../addon/openstreetmap/openstreetmap.php:151
msgid "Include marker on map"
msgstr "Incluir un marcador en el mapa"
-#: ../../addon/openstreetmap/openstreetmap.php:159
+#: ../../addon/openstreetmap/openstreetmap.php:151
msgid "Include a marker on the map."
msgstr "Incluir un marcador en el mapa."
@@ -6451,45 +6392,45 @@ msgstr "A qué Workflow añadir un elemento"
msgid "Create Workflow Item"
msgstr "Crear elemento de Workflow"
-#: ../../addon/workflow/workflow.php:2632
+#: ../../addon/workflow/workflow.php:2661
msgid "Link"
msgstr "Enlazar"
-#: ../../addon/workflow/workflow.php:2634
+#: ../../addon/workflow/workflow.php:2663
msgid "Web link."
msgstr "Enlace Web."
-#: ../../addon/workflow/workflow.php:2653
-#: ../../addon/workflow/workflow.php:2722
+#: ../../addon/workflow/workflow.php:2682
+#: ../../addon/workflow/workflow.php:2751
#: ../../Zotlabs/Module/Connedit.php:734 ../../Zotlabs/Module/Cdav.php:1370
msgid "Title"
msgstr "Título"
-#: ../../addon/workflow/workflow.php:2655
-#: ../../addon/workflow/workflow.php:2724
+#: ../../addon/workflow/workflow.php:2684
+#: ../../addon/workflow/workflow.php:2753
msgid "Brief description or title"
msgstr "Breve descripción o título"
-#: ../../addon/workflow/workflow.php:2661 ../../Zotlabs/Lib/Apps.php:373
-#: ../../Zotlabs/Widget/Notes.php:38
+#: ../../addon/workflow/workflow.php:2690 ../../Zotlabs/Lib/Apps.php:374
+#: ../../Zotlabs/Widget/Notes.php:41
msgid "Notes"
msgstr "Notas"
-#: ../../addon/workflow/workflow.php:2663
-#: ../../addon/workflow/workflow.php:2732
+#: ../../addon/workflow/workflow.php:2692
+#: ../../addon/workflow/workflow.php:2761
msgid "Notes and Info"
msgstr "Notas e información"
-#: ../../addon/workflow/workflow.php:2668
+#: ../../addon/workflow/workflow.php:2697
#: ../../Zotlabs/Module/Admin/Queue.php:47
msgid "Priority"
msgstr "Prioridad"
-#: ../../addon/workflow/workflow.php:2670
+#: ../../addon/workflow/workflow.php:2699
msgid "Used to order links"
msgstr "Se utiliza para solicitar enlaces"
-#: ../../addon/workflow/workflow.php:2730
+#: ../../addon/workflow/workflow.php:2759
msgid "Body"
msgstr "Cuerpo"
@@ -6535,7 +6476,7 @@ msgid "Files imported"
msgstr "Ficheros importados"
#: ../../addon/content_import/Mod_content_import.php:133
-#: ../../Zotlabs/Lib/Apps.php:337
+#: ../../Zotlabs/Lib/Apps.php:338
msgid "Content Import"
msgstr "Importación de contenidos"
@@ -6726,510 +6667,513 @@ msgstr "¡El juego del \"gato\"!"
msgid "I won!"
msgstr "¡He ganado yo!"
-#: ../../boot.php:1722
+#: ../../boot.php:1730
msgid "Create an account to access services and applications"
msgstr "Crear una cuenta para acceder a los servicios y aplicaciones"
-#: ../../boot.php:1740
+#: ../../boot.php:1748
msgid "Email or nickname"
msgstr "Correo electrónico o apodo"
-#: ../../boot.php:1750
+#: ../../boot.php:1758
msgid "Password"
msgstr "Contraseña"
-#: ../../boot.php:1751
+#: ../../boot.php:1759
msgid "Remember me"
msgstr "Recordarme"
-#: ../../boot.php:1754
+#: ../../boot.php:1762
msgid "Forgot your password?"
msgstr "¿Olvidó su contraseña?"
-#: ../../boot.php:1755 ../../Zotlabs/Module/Lostpass.php:91
+#: ../../boot.php:1763 ../../Zotlabs/Module/Lostpass.php:91
msgid "Password Reset"
msgstr "Restablecer la contraseña"
-#: ../../boot.php:2625
+#: ../../boot.php:2641
#, php-format
msgid "[$Projectname] Website SSL error for %s"
msgstr "[$Projectname] Error SSL del sitio web en %s"
-#: ../../boot.php:2630
+#: ../../boot.php:2646
msgid "Website SSL certificate is not valid. Please correct."
msgstr "El certificado SSL del sitio web no es válido. Por favor, solucione el problema."
-#: ../../boot.php:2746
+#: ../../boot.php:2762
#, php-format
msgid "[$Projectname] Cron tasks not running on %s"
msgstr "[$Projectname] Las tareas de Cron no están funcionando en %s"
-#: ../../boot.php:2751
+#: ../../boot.php:2767
msgid "Cron/Scheduled tasks not running."
msgstr "Las tareas del Planificador/Cron no están funcionando."
-#: ../../Zotlabs/Lib/Enotify.php:60
+#: ../../Zotlabs/Lib/Enotify.php:61
msgid "$Projectname Notification"
msgstr "Notificación de $Projectname"
-#: ../../Zotlabs/Lib/Enotify.php:63
+#: ../../Zotlabs/Lib/Enotify.php:64
msgid "Thank You,"
msgstr "Gracias,"
-#: ../../Zotlabs/Lib/Enotify.php:66
+#: ../../Zotlabs/Lib/Enotify.php:67
#, php-format
msgid "This email was sent by %1$s at %2$s."
msgstr "Este email ha sido enviado por %1$s a %2$s."
-#: ../../Zotlabs/Lib/Enotify.php:67
+#: ../../Zotlabs/Lib/Enotify.php:68
#, php-format
msgid ""
"To stop receiving these messages, please adjust your Notification Settings "
"at %s"
msgstr "Para dejar de recibir estos mensajes, por favor ajuste la configuración de notificación en %s"
-#: ../../Zotlabs/Lib/Enotify.php:68
+#: ../../Zotlabs/Lib/Enotify.php:69
#, php-format
msgid "To stop receiving these messages, please adjust your %s."
msgstr "Para dejar de recibir estos mensajes, por favor, ajuste su %s"
-#: ../../Zotlabs/Lib/Enotify.php:68
-#: ../../Zotlabs/Module/Settings/Channel.php:241
+#: ../../Zotlabs/Lib/Enotify.php:69
+#: ../../Zotlabs/Module/Settings/Channel.php:242
msgid "Notification Settings"
msgstr "Configuración de las notificaciones"
-#: ../../Zotlabs/Lib/Enotify.php:123
+#: ../../Zotlabs/Lib/Enotify.php:124
#, php-format
msgid "%s <!item_type!>"
msgstr "%s <!item_type!>"
-#: ../../Zotlabs/Lib/Enotify.php:131
+#: ../../Zotlabs/Lib/Enotify.php:132
#, php-format
msgid "[$Projectname:Notify] New direct message received at %s"
msgstr "[$Projectname:Aviso] Nuevo mensaje directo recibido en %s"
-#: ../../Zotlabs/Lib/Enotify.php:133
+#: ../../Zotlabs/Lib/Enotify.php:134
#, php-format
msgid "%1$s sent you a new direct message at %2$s"
msgstr "%1$s le ha enviado un nuevo mensaje directo en %2$s."
-#: ../../Zotlabs/Lib/Enotify.php:134
+#: ../../Zotlabs/Lib/Enotify.php:135
#, php-format
msgid "%1$s sent you %2$s."
msgstr "%1$s le ha enviado %2$s."
-#: ../../Zotlabs/Lib/Enotify.php:134
+#: ../../Zotlabs/Lib/Enotify.php:135
msgid "a direct message"
msgstr "un mensaje directo"
-#: ../../Zotlabs/Lib/Enotify.php:135
+#: ../../Zotlabs/Lib/Enotify.php:136
#, php-format
msgid "Please visit %s to view and/or reply to your direct messages."
msgstr "Por favor visite %s para ver y/o responder a su mensaje directo."
-#: ../../Zotlabs/Lib/Enotify.php:148
+#: ../../Zotlabs/Lib/Enotify.php:149
msgid "requested to comment on"
msgstr "solicita comentar sobre "
-#: ../../Zotlabs/Lib/Enotify.php:148
+#: ../../Zotlabs/Lib/Enotify.php:149
msgid "commented on"
msgstr "ha comentado sobre "
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:317
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
msgid "requested to like"
msgstr "solicita que se permita mostrar agrado "
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:317
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
msgid "liked"
msgstr "ha gustado de "
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:320
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
msgid "requested to dislike"
msgstr "solicita que se permita mostrar desagrado "
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:320
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
msgid "disliked"
msgstr "no ha gustado de "
-#: ../../Zotlabs/Lib/Enotify.php:167
+#: ../../Zotlabs/Lib/Enotify.php:168
msgid "repeated"
msgstr "repitió"
-#: ../../Zotlabs/Lib/Enotify.php:172
+#: ../../Zotlabs/Lib/Enotify.php:173
msgid "voted on"
msgstr "votado en "
-#: ../../Zotlabs/Lib/Enotify.php:215
+#: ../../Zotlabs/Lib/Enotify.php:216
#, php-format
msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
msgstr "%1$s%2$s [zrl=%3$s ]un %4$s[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:223
+#: ../../Zotlabs/Lib/Enotify.php:224
#, php-format
msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
msgstr "%1$s %2$s[zrl=%3$s]%5$s de %4$s[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:232 ../../Zotlabs/Lib/Enotify.php:324
+#: ../../Zotlabs/Lib/Enotify.php:233 ../../Zotlabs/Lib/Enotify.php:325
#, php-format
msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
msgstr "%1$s %2$s [zrl=%3$s]su %4$s[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:244
+#: ../../Zotlabs/Lib/Enotify.php:245
#, php-format
msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
msgstr "[$Projectname:Aviso] Comentario moderado en la conversación #%1$d por %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:246
+#: ../../Zotlabs/Lib/Enotify.php:247
#, php-format
msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
msgstr "[$Projectname:Aviso] Nuevo comentario de %2$s en la conversación #%1$d"
-#: ../../Zotlabs/Lib/Enotify.php:247
+#: ../../Zotlabs/Lib/Enotify.php:248
#, php-format
msgid "%1$s commented on an item/conversation you have been following"
msgstr "%1$sha comentado un elemento/conversación que ha estado siguiendo."
-#: ../../Zotlabs/Lib/Enotify.php:250 ../../Zotlabs/Lib/Enotify.php:344
-#: ../../Zotlabs/Lib/Enotify.php:360 ../../Zotlabs/Lib/Enotify.php:384
-#: ../../Zotlabs/Lib/Enotify.php:401 ../../Zotlabs/Lib/Enotify.php:414
+#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:345
+#: ../../Zotlabs/Lib/Enotify.php:361 ../../Zotlabs/Lib/Enotify.php:385
+#: ../../Zotlabs/Lib/Enotify.php:402 ../../Zotlabs/Lib/Enotify.php:416
#, php-format
msgid "Please visit %s to view and/or reply to the conversation."
msgstr "Para ver o comentar la conversación, visite %s"
-#: ../../Zotlabs/Lib/Enotify.php:254 ../../Zotlabs/Lib/Enotify.php:255
+#: ../../Zotlabs/Lib/Enotify.php:255 ../../Zotlabs/Lib/Enotify.php:256
#, php-format
msgid "Please visit %s to approve or reject this comment."
msgstr "Por favor, visite %s para aprobar o rechazar este comentario."
-#: ../../Zotlabs/Lib/Enotify.php:340
+#: ../../Zotlabs/Lib/Enotify.php:341
#, php-format
msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
msgstr "[$Projectname:Aviso] \"Me gusta\" de %2$s en la conversación #%1$d"
-#: ../../Zotlabs/Lib/Enotify.php:341
+#: ../../Zotlabs/Lib/Enotify.php:342
#, php-format
msgid "%1$s liked an item/conversation you created"
msgstr "A %1$s le ha gustado un elemento o conversación que ha creado usted."
-#: ../../Zotlabs/Lib/Enotify.php:352
+#: ../../Zotlabs/Lib/Enotify.php:353
#, php-format
msgid "[$Projectname:Notify] %s posted to your profile wall"
msgstr "[$Projectname:Aviso] %s ha publicado una entrada en su página de inicio del perfil (\"muro\")"
-#: ../../Zotlabs/Lib/Enotify.php:354
+#: ../../Zotlabs/Lib/Enotify.php:355
#, php-format
msgid "%1$s posted to your profile wall at %2$s"
msgstr "%1$s ha publicado en su muro en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:356
+#: ../../Zotlabs/Lib/Enotify.php:357
#, php-format
msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
msgstr "%1$sha publicado en [zrl=%2$s]su muro[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:378
+#: ../../Zotlabs/Lib/Enotify.php:379
#, php-format
msgid "[$Projectname:Notify] %s tagged you"
msgstr "[$Projectname:Aviso] %s le ha etiquetado"
-#: ../../Zotlabs/Lib/Enotify.php:379
+#: ../../Zotlabs/Lib/Enotify.php:380
#, php-format
msgid "%1$s tagged you at %2$s"
msgstr "%1$sle ha etiquetado en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:380
+#: ../../Zotlabs/Lib/Enotify.php:381
#, php-format
msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
msgstr "%1$s [zrl=%2$s]le ha etiquetado[/zrl]."
-#: ../../Zotlabs/Lib/Enotify.php:391
+#: ../../Zotlabs/Lib/Enotify.php:392
#, php-format
msgid "[$Projectname:Notify] %1$s poked you"
msgstr "[$Projectname:Aviso] %1$s le ha dado un toque"
-#: ../../Zotlabs/Lib/Enotify.php:392
+#: ../../Zotlabs/Lib/Enotify.php:393
#, php-format
msgid "%1$s poked you at %2$s"
msgstr "%1$sle ha dado un toque en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:393
+#: ../../Zotlabs/Lib/Enotify.php:394
#, php-format
msgid "%1$s [zrl=%2$s]poked you[/zrl]."
msgstr "%1$s [zrl=%2$s] le ha dado un toque[/zrl]."
-#: ../../Zotlabs/Lib/Enotify.php:408
+#: ../../Zotlabs/Lib/Enotify.php:410
#, php-format
msgid "[$Projectname:Notify] %s tagged your post"
msgstr "[$Projectname:Aviso] %s ha etiquetado su entrada"
-#: ../../Zotlabs/Lib/Enotify.php:409
+#: ../../Zotlabs/Lib/Enotify.php:411
#, php-format
msgid "%1$s tagged your post at %2$s"
msgstr "%1$sha etiquetado su entrada en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:410
+#: ../../Zotlabs/Lib/Enotify.php:412
#, php-format
msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
msgstr "%1$s ha etiquetado [zrl=%2$s]su entrada[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:421
+#: ../../Zotlabs/Lib/Enotify.php:422
msgid "[$Projectname:Notify] Introduction received"
msgstr "[$Projectname:Aviso] Ha recibido una solicitud de conexión"
-#: ../../Zotlabs/Lib/Enotify.php:422
+#: ../../Zotlabs/Lib/Enotify.php:423
#, php-format
msgid "You've received an new connection request from '%1$s' at %2$s"
msgstr "Ha recibido una nueva solicitud de conexión de '%1$s' en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:423
+#: ../../Zotlabs/Lib/Enotify.php:424
#, php-format
msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
msgstr "Ha recibido [zrl=%1$s]una nueva solicitud de conexión[/zrl] de %2$s."
-#: ../../Zotlabs/Lib/Enotify.php:426 ../../Zotlabs/Lib/Enotify.php:444
+#: ../../Zotlabs/Lib/Enotify.php:427 ../../Zotlabs/Lib/Enotify.php:446
#, php-format
msgid "You may visit their profile at %s"
msgstr "Puede visitar su perfil en %s"
-#: ../../Zotlabs/Lib/Enotify.php:428
+#: ../../Zotlabs/Lib/Enotify.php:429
#, php-format
msgid "Please visit %s to approve or reject the connection request."
msgstr "Por favor, visite %s para permitir o rechazar la solicitad de conexión."
-#: ../../Zotlabs/Lib/Enotify.php:435
+#: ../../Zotlabs/Lib/Enotify.php:437
msgid "[$Projectname:Notify] Friend suggestion received"
msgstr "[$Projectname:Aviso] Ha recibido una sugerencia de conexión"
-#: ../../Zotlabs/Lib/Enotify.php:436
+#: ../../Zotlabs/Lib/Enotify.php:438
#, php-format
msgid "You've received a friend suggestion from '%1$s' at %2$s"
msgstr "Ha recibido una sugerencia de amistad de '%1$s' en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:437
+#: ../../Zotlabs/Lib/Enotify.php:439
#, php-format
msgid ""
"You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
msgstr "Ha recibido [zrl=%1$s]una sugerencia de amistad[/zrl] para %2$s de %3$s."
-#: ../../Zotlabs/Lib/Enotify.php:442
+#: ../../Zotlabs/Lib/Enotify.php:444
msgid "Name:"
msgstr "Nombre:"
-#: ../../Zotlabs/Lib/Enotify.php:443
+#: ../../Zotlabs/Lib/Enotify.php:445
msgid "Photo:"
msgstr "Foto:"
-#: ../../Zotlabs/Lib/Enotify.php:446
+#: ../../Zotlabs/Lib/Enotify.php:448
#, php-format
msgid "Please visit %s to approve or reject the suggestion."
msgstr "Por favor, visite %s para aprobar o rechazar la sugerencia."
-#: ../../Zotlabs/Lib/Enotify.php:676
+#: ../../Zotlabs/Lib/Enotify.php:677
msgid "[$Projectname:Notify]"
msgstr "[$Projectname:Aviso]"
-#: ../../Zotlabs/Lib/Enotify.php:842
+#: ../../Zotlabs/Lib/Enotify.php:843
msgid "created a new poll"
msgstr "se ha creado una nueva encuesta"
-#: ../../Zotlabs/Lib/Enotify.php:842
+#: ../../Zotlabs/Lib/Enotify.php:843
msgid "created a new post"
msgstr "ha creado una nueva entrada"
-#: ../../Zotlabs/Lib/Enotify.php:843
+#: ../../Zotlabs/Lib/Enotify.php:844
#, php-format
msgid "voted on %s's poll"
msgstr "votado en la encuesta de %s"
-#: ../../Zotlabs/Lib/Enotify.php:843
+#: ../../Zotlabs/Lib/Enotify.php:844
#, php-format
msgid "commented on %s's post"
msgstr "ha comentado la entrada de %s"
-#: ../../Zotlabs/Lib/Enotify.php:847 ../../Zotlabs/Lib/Enotify.php:947
+#: ../../Zotlabs/Lib/Enotify.php:848 ../../Zotlabs/Lib/Enotify.php:948
msgid "shared a file with you"
msgstr "compartió un archivo con usted"
-#: ../../Zotlabs/Lib/Enotify.php:856
+#: ../../Zotlabs/Lib/Enotify.php:857
#, php-format
msgid "edited a post dated %s"
msgstr "ha editado una entrada %s"
-#: ../../Zotlabs/Lib/Enotify.php:859
+#: ../../Zotlabs/Lib/Enotify.php:860
#, php-format
msgid "edited a comment dated %s"
msgstr "ha editado un comentario %s"
-#: ../../Zotlabs/Lib/Enotify.php:932
+#: ../../Zotlabs/Lib/Enotify.php:933
msgid "added your channel"
msgstr "añadió este canal a sus conexiones"
-#: ../../Zotlabs/Lib/Enotify.php:962
+#: ../../Zotlabs/Lib/Enotify.php:963
msgid "sent you a direct message"
msgstr "enviarle un mensaje directo"
-#: ../../Zotlabs/Lib/Enotify.php:969
+#: ../../Zotlabs/Lib/Enotify.php:970
msgid "g A l F d"
msgstr "g A l d F"
-#: ../../Zotlabs/Lib/Enotify.php:972
+#: ../../Zotlabs/Lib/Enotify.php:973
msgid "[today]"
msgstr "[hoy]"
-#: ../../Zotlabs/Lib/Enotify.php:982
+#: ../../Zotlabs/Lib/Enotify.php:983
msgid "created an event"
msgstr "se creó un evento"
-#: ../../Zotlabs/Lib/Enotify.php:997
+#: ../../Zotlabs/Lib/Enotify.php:998
msgid "status verified"
msgstr "estado verificado"
-#: ../../Zotlabs/Lib/Apps.php:329
+#: ../../Zotlabs/Lib/Apps.php:330
msgid "Affinity Tool"
msgstr "Herramienta de afinidad"
-#: ../../Zotlabs/Lib/Apps.php:332
+#: ../../Zotlabs/Lib/Apps.php:333
msgid "Site Admin"
msgstr "Administrador del sitio"
-#: ../../Zotlabs/Lib/Apps.php:336
+#: ../../Zotlabs/Lib/Apps.php:337
msgid "Content Filter"
msgstr "Filtro de contenido"
-#: ../../Zotlabs/Lib/Apps.php:339
+#: ../../Zotlabs/Lib/Apps.php:340
msgid "Remote Diagnostics"
msgstr "Diagnóstico remoto"
-#: ../../Zotlabs/Lib/Apps.php:340
+#: ../../Zotlabs/Lib/Apps.php:341
msgid "Suggest Channels"
msgstr "Sugerir canales"
-#: ../../Zotlabs/Lib/Apps.php:342
+#: ../../Zotlabs/Lib/Apps.php:343
msgid "Channel Manager"
msgstr "Administración de canales"
-#: ../../Zotlabs/Lib/Apps.php:343
+#: ../../Zotlabs/Lib/Apps.php:344
msgid "Stream"
msgstr "Stream"
-#: ../../Zotlabs/Lib/Apps.php:354
+#: ../../Zotlabs/Lib/Apps.php:348
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../Zotlabs/Lib/Apps.php:355
msgid "Mail"
msgstr "Correo"
-#: ../../Zotlabs/Lib/Apps.php:355
+#: ../../Zotlabs/Lib/Apps.php:356
msgid "Chat"
msgstr "Chat"
-#: ../../Zotlabs/Lib/Apps.php:357
+#: ../../Zotlabs/Lib/Apps.php:358
msgid "Probe"
msgstr "Probar"
-#: ../../Zotlabs/Lib/Apps.php:358
+#: ../../Zotlabs/Lib/Apps.php:359
msgid "Suggest"
msgstr "Sugerir"
-#: ../../Zotlabs/Lib/Apps.php:359
+#: ../../Zotlabs/Lib/Apps.php:360
msgid "Random Channel"
msgstr "Canal aleatorio"
-#: ../../Zotlabs/Lib/Apps.php:360
+#: ../../Zotlabs/Lib/Apps.php:361
msgid "Invite"
msgstr "Invitar"
-#: ../../Zotlabs/Lib/Apps.php:361 ../../Zotlabs/Widget/Admin.php:31
+#: ../../Zotlabs/Lib/Apps.php:362 ../../Zotlabs/Widget/Admin.php:31
msgid "Features"
msgstr "Funcionalidades"
-#: ../../Zotlabs/Lib/Apps.php:363 ../../Zotlabs/Storage/Browser.php:410
+#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:410
msgid "Post"
msgstr "Publicación"
-#: ../../Zotlabs/Lib/Apps.php:368
+#: ../../Zotlabs/Lib/Apps.php:369
msgid "Notifications"
msgstr "Notificaciones"
-#: ../../Zotlabs/Lib/Apps.php:369
+#: ../../Zotlabs/Lib/Apps.php:370
msgid "Order Apps"
msgstr "Ordenar las apps"
-#: ../../Zotlabs/Lib/Apps.php:370
+#: ../../Zotlabs/Lib/Apps.php:371
msgid "CardDAV"
msgstr "CardDAV"
-#: ../../Zotlabs/Lib/Apps.php:371 ../../Zotlabs/Module/Sources.php:105
+#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Sources.php:105
msgid "Channel Sources"
msgstr "Orígenes de los contenidos del canal"
-#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Tokens.php:288
+#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Tokens.php:288
msgid "Guest Access"
msgstr "Acceso para invitados"
-#: ../../Zotlabs/Lib/Apps.php:374
+#: ../../Zotlabs/Lib/Apps.php:375
msgid "OAuth Apps Manager"
msgstr "Administrador de apps OAuth"
-#: ../../Zotlabs/Lib/Apps.php:375
+#: ../../Zotlabs/Lib/Apps.php:376
msgid "OAuth2 Apps Manager"
msgstr "Administrador de apps OAuth2"
-#: ../../Zotlabs/Lib/Apps.php:376
+#: ../../Zotlabs/Lib/Apps.php:377
msgid "PDL Editor"
msgstr "Editor PDL"
-#: ../../Zotlabs/Lib/Apps.php:377 ../../Zotlabs/Module/Permcats.php:248
+#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Module/Permcats.php:248
msgid "Contact Roles"
msgstr "Roles de contacto"
-#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Widget/Notifications.php:154
-#: ../../Zotlabs/Module/Pubstream.php:108
+#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Widget/Notifications.php:154
+#: ../../Zotlabs/Module/Pubstream.php:109
msgid "Public Stream"
msgstr "\"Stream\" público"
-#: ../../Zotlabs/Lib/Apps.php:379
+#: ../../Zotlabs/Lib/Apps.php:380
msgid "My Chatrooms"
msgstr "Mis salas de chat"
-#: ../../Zotlabs/Lib/Apps.php:380
+#: ../../Zotlabs/Lib/Apps.php:381
msgid "Channel Export"
msgstr "Exportar canal"
-#: ../../Zotlabs/Lib/Apps.php:561 ../../Zotlabs/Module/Oauth.php:53
+#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Oauth.php:53
#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Connedit.php:748
-#: ../../Zotlabs/Module/Admin/Addons.php:460
#: ../../Zotlabs/Module/Cdav.php:1044 ../../Zotlabs/Module/Cdav.php:1384
#: ../../Zotlabs/Module/Oauth2.php:58 ../../Zotlabs/Module/Oauth2.php:142
msgid "Update"
msgstr "Actualizar"
-#: ../../Zotlabs/Lib/Apps.php:561 ../../Zotlabs/Module/Admin/Addons.php:429
+#: ../../Zotlabs/Lib/Apps.php:562
msgid "Install"
msgstr "Instalar"
-#: ../../Zotlabs/Lib/Apps.php:591 ../../Zotlabs/Lib/Apps.php:613
+#: ../../Zotlabs/Lib/Apps.php:592 ../../Zotlabs/Lib/Apps.php:614
msgid "Purchase"
msgstr "Comprar"
-#: ../../Zotlabs/Lib/Apps.php:618
+#: ../../Zotlabs/Lib/Apps.php:619
msgid "Undelete"
msgstr "Recuperar"
-#: ../../Zotlabs/Lib/Apps.php:626
+#: ../../Zotlabs/Lib/Apps.php:627
msgid "Add to app-tray"
msgstr "Añadir a la bandeja de aplicaciones"
-#: ../../Zotlabs/Lib/Apps.php:627
+#: ../../Zotlabs/Lib/Apps.php:628
msgid "Remove from app-tray"
msgstr "Quitar de la bandeja de aplicaciones"
-#: ../../Zotlabs/Lib/Apps.php:628
+#: ../../Zotlabs/Lib/Apps.php:629
msgid "Pin to navbar"
msgstr "Fijar en la barra de navegación"
-#: ../../Zotlabs/Lib/Apps.php:629
+#: ../../Zotlabs/Lib/Apps.php:630
msgid "Unpin from navbar"
msgstr "Quitar de la barra de navegación"
#: ../../Zotlabs/Lib/PermissionDescription.php:108
-#: ../../Zotlabs/Access/PermissionRoles.php:384
+#: ../../Zotlabs/Access/PermissionRoles.php:386
msgid "Public"
msgstr "Público"
@@ -7287,121 +7231,121 @@ msgctxt "permcat"
msgid "Default"
msgstr "Predeterminado"
-#: ../../Zotlabs/Lib/DB_Upgrade.php:67
+#: ../../Zotlabs/Lib/DB_Upgrade.php:85
msgid "Source code of failed update: "
msgstr "Código fuente de la actualización fallida: "
-#: ../../Zotlabs/Lib/DB_Upgrade.php:88
+#: ../../Zotlabs/Lib/DB_Upgrade.php:106
#, php-format
msgid "Update Error at %s"
msgstr "Error de actualización en %s"
-#: ../../Zotlabs/Lib/DB_Upgrade.php:94
+#: ../../Zotlabs/Lib/DB_Upgrade.php:112
#, php-format
msgid "Update %s failed. See error logs."
msgstr "La actualización %s ha fallado. Mire el informe de errores."
-#: ../../Zotlabs/Lib/Connect.php:46 ../../Zotlabs/Lib/Connect.php:147
+#: ../../Zotlabs/Lib/Connect.php:45 ../../Zotlabs/Lib/Connect.php:146
msgid "Channel is blocked on this site."
msgstr "El canal está bloqueado en este sitio."
-#: ../../Zotlabs/Lib/Connect.php:51
+#: ../../Zotlabs/Lib/Connect.php:50
msgid "Channel location missing."
msgstr "Falta la dirección del canal."
-#: ../../Zotlabs/Lib/Connect.php:105
+#: ../../Zotlabs/Lib/Connect.php:104
msgid "Remote channel or protocol unavailable."
msgstr "Canal remoto o protocolo no disponible."
-#: ../../Zotlabs/Lib/Connect.php:141
+#: ../../Zotlabs/Lib/Connect.php:140
msgid "Channel discovery failed."
msgstr "El intento de acceder al canal ha fallado."
-#: ../../Zotlabs/Lib/Connect.php:159
+#: ../../Zotlabs/Lib/Connect.php:158
msgid "Protocol disabled."
msgstr "Protocolo deshabilitado."
-#: ../../Zotlabs/Lib/Connect.php:171
+#: ../../Zotlabs/Lib/Connect.php:170
msgid "Cannot connect to yourself."
msgstr "No puede conectarse consigo mismo."
-#: ../../Zotlabs/Lib/Connect.php:276
+#: ../../Zotlabs/Lib/Connect.php:275
msgid "error saving data"
msgstr "error guardando los datos"
-#: ../../Zotlabs/Lib/ThreadItem.php:111
+#: ../../Zotlabs/Lib/ThreadItem.php:110
msgid "Restricted message"
msgstr "Mensaje restringido"
-#: ../../Zotlabs/Lib/ThreadItem.php:118
+#: ../../Zotlabs/Lib/ThreadItem.php:117
msgid "Direct message"
msgstr "Mensaje directo"
-#: ../../Zotlabs/Lib/ThreadItem.php:123
+#: ../../Zotlabs/Lib/ThreadItem.php:122
msgid "Public Policy"
msgstr "Política pública"
-#: ../../Zotlabs/Lib/ThreadItem.php:157
+#: ../../Zotlabs/Lib/ThreadItem.php:156
msgid "Privacy conflict. Discretion advised."
msgstr "Conflicto de privacidad. Se aconseja discreción."
-#: ../../Zotlabs/Lib/ThreadItem.php:188 ../../Zotlabs/Storage/Browser.php:372
+#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:373
msgid "Admin Delete"
msgstr "Eliminar admin"
-#: ../../Zotlabs/Lib/ThreadItem.php:191 ../../Zotlabs/Module/Filer.php:55
+#: ../../Zotlabs/Lib/ThreadItem.php:190 ../../Zotlabs/Module/Filer.php:66
msgid "Save to Folder"
msgstr "Guardar en carpeta"
-#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
msgid "I will attend"
msgstr "Participaré"
-#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
msgid "I will not attend"
msgstr "No participaré"
-#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
msgid "I might attend"
msgstr "Quizá participe"
-#: ../../Zotlabs/Lib/ThreadItem.php:333 ../../Zotlabs/Module/Photos.php:1074
+#: ../../Zotlabs/Lib/ThreadItem.php:296 ../../Zotlabs/Module/Photos.php:1074
msgid "I like this (toggle)"
msgstr "Me gusta (cambiar)"
-#: ../../Zotlabs/Lib/ThreadItem.php:334 ../../Zotlabs/Module/Photos.php:1075
+#: ../../Zotlabs/Lib/ThreadItem.php:297 ../../Zotlabs/Module/Photos.php:1075
msgid "I don't like this (toggle)"
msgstr "No me gusta esto (cambiar)"
-#: ../../Zotlabs/Lib/ThreadItem.php:335
-msgid "Reply on this comment"
+#: ../../Zotlabs/Lib/ThreadItem.php:298
+msgid "Reply to this comment"
msgstr "Responder a este comentario"
-#: ../../Zotlabs/Lib/ThreadItem.php:335
+#: ../../Zotlabs/Lib/ThreadItem.php:298
msgid "reply"
msgstr "responder"
-#: ../../Zotlabs/Lib/ThreadItem.php:335
+#: ../../Zotlabs/Lib/ThreadItem.php:298
msgid "Reply to"
msgstr "Responder a "
-#: ../../Zotlabs/Lib/ThreadItem.php:341 ../../Zotlabs/Widget/Pinned.php:93
+#: ../../Zotlabs/Lib/ThreadItem.php:305 ../../Zotlabs/Widget/Pinned.php:95
msgid "share"
msgstr "compartir"
-#: ../../Zotlabs/Lib/ThreadItem.php:345
+#: ../../Zotlabs/Lib/ThreadItem.php:309
msgid "Repeat"
msgstr "Repetir"
-#: ../../Zotlabs/Lib/ThreadItem.php:345
+#: ../../Zotlabs/Lib/ThreadItem.php:309
msgid "repeat"
msgstr "repetir"
-#: ../../Zotlabs/Lib/ThreadItem.php:356
+#: ../../Zotlabs/Lib/ThreadItem.php:320
msgid "Delivery Report"
msgstr "Informe de transmisión"
-#: ../../Zotlabs/Lib/ThreadItem.php:376
+#: ../../Zotlabs/Lib/ThreadItem.php:341
#, php-format
msgid "%d comment"
msgid_plural "%d comments"
@@ -7409,141 +7353,164 @@ msgstr[0] "%d comentario"
msgstr[1] "%d comentarios"
msgstr[2] "%d comentarios"
-#: ../../Zotlabs/Lib/ThreadItem.php:377
+#: ../../Zotlabs/Lib/ThreadItem.php:342
#, php-format
msgid "%d unseen"
msgstr "%dno visto/a vistos/as"
-#: ../../Zotlabs/Lib/ThreadItem.php:427
+#: ../../Zotlabs/Lib/ThreadItem.php:391
msgid "Forum"
msgstr "Foro"
-#: ../../Zotlabs/Lib/ThreadItem.php:434
+#: ../../Zotlabs/Lib/ThreadItem.php:398
msgid "to"
msgstr "a"
-#: ../../Zotlabs/Lib/ThreadItem.php:435 ../../Zotlabs/Widget/Messages.php:146
-#: ../../Zotlabs/Widget/Messages.php:149 ../../Zotlabs/Widget/Pinned.php:121
+#: ../../Zotlabs/Lib/ThreadItem.php:399 ../../Zotlabs/Widget/Messages.php:175
+#: ../../Zotlabs/Widget/Messages.php:178 ../../Zotlabs/Widget/Pinned.php:122
msgid "via"
msgstr "mediante"
-#: ../../Zotlabs/Lib/ThreadItem.php:436
+#: ../../Zotlabs/Lib/ThreadItem.php:400
msgid "Wall-to-Wall"
msgstr "De página del perfil a página del perfil (de \"muro\" a \"muro\")"
-#: ../../Zotlabs/Lib/ThreadItem.php:437
+#: ../../Zotlabs/Lib/ThreadItem.php:401
msgid "via Wall-To-Wall:"
msgstr "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")"
-#: ../../Zotlabs/Lib/ThreadItem.php:465
+#: ../../Zotlabs/Lib/ThreadItem.php:417
+#, php-format
+msgid "Last edited %s"
+msgstr "Último cambio %s"
+
+#: ../../Zotlabs/Lib/ThreadItem.php:418
+#, php-format
+msgid "Expires %s"
+msgstr "Caduca: %s"
+
+#: ../../Zotlabs/Lib/ThreadItem.php:421
+#, php-format
+msgid "Published %s"
+msgstr "Publicado en%s"
+
+#: ../../Zotlabs/Lib/ThreadItem.php:428
msgid "Attend"
msgstr "Participar o asistir"
-#: ../../Zotlabs/Lib/ThreadItem.php:466 ../../Zotlabs/Widget/Pinned.php:135
+#: ../../Zotlabs/Lib/ThreadItem.php:429 ../../Zotlabs/Widget/Pinned.php:136
msgid "Attendance Options"
msgstr "Opciones de participación o asistencia"
-#: ../../Zotlabs/Lib/ThreadItem.php:468 ../../Zotlabs/Widget/Pinned.php:136
+#: ../../Zotlabs/Lib/ThreadItem.php:431 ../../Zotlabs/Widget/Pinned.php:137
msgid "Voting Options"
msgstr "Opciones de votación"
-#: ../../Zotlabs/Lib/ThreadItem.php:483
+#: ../../Zotlabs/Lib/ThreadItem.php:446
msgid "Go to previous comment"
msgstr "Ir al comentario anterior"
-#: ../../Zotlabs/Lib/ThreadItem.php:492 ../../Zotlabs/Widget/Pinned.php:148
+#: ../../Zotlabs/Lib/ThreadItem.php:455 ../../Zotlabs/Widget/Pinned.php:149
msgid "Pinned post"
msgstr "Entradas ancladas"
-#: ../../Zotlabs/Lib/ThreadItem.php:496
+#: ../../Zotlabs/Lib/ThreadItem.php:459
msgid "Add to Calendar"
msgstr "Añadir al calendario"
-#: ../../Zotlabs/Lib/ThreadItem.php:504
+#: ../../Zotlabs/Lib/ThreadItem.php:467
msgid "Mark all comments seen"
msgstr "Marcar como leídos todos los comentarios"
-#: ../../Zotlabs/Lib/ThreadItem.php:859 ../../Zotlabs/Module/Photos.php:1092
+#: ../../Zotlabs/Lib/ThreadItem.php:485
+msgid "Add yours"
+msgstr "Añadir el tuyo"
+
+#: ../../Zotlabs/Lib/ThreadItem.php:485
+msgid "Remove yours"
+msgstr "Eliminar el tuyo"
+
+#: ../../Zotlabs/Lib/ThreadItem.php:796 ../../Zotlabs/Module/Photos.php:1092
#: ../../Zotlabs/Module/Photos.php:1205
msgid "This is you"
msgstr "Este es usted"
-#: ../../Zotlabs/Lib/ThreadItem.php:868
+#: ../../Zotlabs/Lib/ThreadItem.php:805
msgid "Image"
msgstr "Imagen"
-#: ../../Zotlabs/Lib/ThreadItem.php:870
+#: ../../Zotlabs/Lib/ThreadItem.php:807
msgid "Insert Link"
msgstr "Insertar enlace"
-#: ../../Zotlabs/Lib/ThreadItem.php:871
+#: ../../Zotlabs/Lib/ThreadItem.php:808
msgid "Video"
msgstr "Vídeo"
-#: ../../Zotlabs/Lib/ThreadItem.php:880
+#: ../../Zotlabs/Lib/ThreadItem.php:817
msgid "Your full name (required)"
msgstr "Su nombre completo (requerido)"
-#: ../../Zotlabs/Lib/ThreadItem.php:881
+#: ../../Zotlabs/Lib/ThreadItem.php:818
msgid "Your email address (required)"
msgstr "Su dirección de correo electrónico (requerido)"
-#: ../../Zotlabs/Lib/ThreadItem.php:882
+#: ../../Zotlabs/Lib/ThreadItem.php:819
msgid "Your website URL (optional)"
msgstr "La URL de su sitio web (opcional)"
-#: ../../Zotlabs/Lib/Libzot.php:687
+#: ../../Zotlabs/Lib/Libzot.php:688
msgid "Unable to verify channel signature"
msgstr "No ha sido posible de verificar la firma del canal"
-#: ../../Zotlabs/Lib/Activity.php:2154
+#: ../../Zotlabs/Lib/Activity.php:2257
#, php-format
msgid "Likes %1$s's %2$s"
msgstr "Gusta de %2$sde %1$s"
-#: ../../Zotlabs/Lib/Activity.php:2157
+#: ../../Zotlabs/Lib/Activity.php:2260
#, php-format
msgid "Doesn't like %1$s's %2$s"
msgstr "No le gusta %2$sde %1$s"
-#: ../../Zotlabs/Lib/Activity.php:2163
+#: ../../Zotlabs/Lib/Activity.php:2266
#, php-format
msgid "Will attend %s's event"
msgstr "Asistirá al evento de %s"
-#: ../../Zotlabs/Lib/Activity.php:2166
+#: ../../Zotlabs/Lib/Activity.php:2269
#, php-format
msgid "Will not attend %s's event"
msgstr "No asistirá al evento de %s"
-#: ../../Zotlabs/Lib/Activity.php:2169
+#: ../../Zotlabs/Lib/Activity.php:2272
#, php-format
msgid "May attend %s's event"
msgstr "Puede asistir al evento de %s"
-#: ../../Zotlabs/Lib/Activity.php:2172
+#: ../../Zotlabs/Lib/Activity.php:2275
#, php-format
msgid "May not attend %s's event"
msgstr "Puede no asistir al evento de %s"
-#: ../../Zotlabs/Lib/Libsync.php:823
+#: ../../Zotlabs/Lib/Libsync.php:824
#, php-format
msgid "Unable to verify site signature for %s"
msgstr "No ha sido posible de verificar la firma del sitio para %s"
-#: ../../Zotlabs/Lib/Libzotdir.php:163
+#: ../../Zotlabs/Lib/Libzotdir.php:164
msgid "Directory Options"
msgstr "Opciones del directorio"
-#: ../../Zotlabs/Lib/Libzotdir.php:165
+#: ../../Zotlabs/Lib/Libzotdir.php:166
msgid "Safe Mode"
msgstr "Modo seguro"
-#: ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167
msgid "Public Forums Only"
msgstr "Solo foros públicos"
-#: ../../Zotlabs/Lib/Libzotdir.php:168
+#: ../../Zotlabs/Lib/Libzotdir.php:169
msgid "This Website Only"
msgstr "Solo este sitio web"
@@ -7603,79 +7570,79 @@ msgstr "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posi
msgid "Select a privacy group"
msgstr "Seleccionar un grupo privado de canales"
-#: ../../Zotlabs/Access/PermissionRoles.php:337
+#: ../../Zotlabs/Access/PermissionRoles.php:339
msgid "Social Networking"
msgstr "Redes sociales"
-#: ../../Zotlabs/Access/PermissionRoles.php:338
+#: ../../Zotlabs/Access/PermissionRoles.php:340
msgid "Social - Federation"
msgstr "Social - Federación"
-#: ../../Zotlabs/Access/PermissionRoles.php:339
+#: ../../Zotlabs/Access/PermissionRoles.php:341
msgid "Social - Mostly Public"
msgstr "Social - Público en su mayor parte"
-#: ../../Zotlabs/Access/PermissionRoles.php:340
+#: ../../Zotlabs/Access/PermissionRoles.php:342
msgid "Social - Restricted"
msgstr "Social - Restringido"
-#: ../../Zotlabs/Access/PermissionRoles.php:341
+#: ../../Zotlabs/Access/PermissionRoles.php:343
msgid "Social - Private"
msgstr "Social - Privado"
-#: ../../Zotlabs/Access/PermissionRoles.php:344
+#: ../../Zotlabs/Access/PermissionRoles.php:346
msgid "Community Forum"
msgstr "Foro de discusión"
-#: ../../Zotlabs/Access/PermissionRoles.php:345
+#: ../../Zotlabs/Access/PermissionRoles.php:347
msgid "Forum - Mostly Public"
msgstr "Foro - Público en su mayor parte"
-#: ../../Zotlabs/Access/PermissionRoles.php:346
+#: ../../Zotlabs/Access/PermissionRoles.php:348
msgid "Forum - Restricted"
msgstr "Foro - Restringido"
-#: ../../Zotlabs/Access/PermissionRoles.php:347
+#: ../../Zotlabs/Access/PermissionRoles.php:349
msgid "Forum - Private"
msgstr "Foro - Privado"
-#: ../../Zotlabs/Access/PermissionRoles.php:350
+#: ../../Zotlabs/Access/PermissionRoles.php:352
msgid "Feed Republish"
msgstr "Republicar un \"feed\""
-#: ../../Zotlabs/Access/PermissionRoles.php:351
+#: ../../Zotlabs/Access/PermissionRoles.php:353
msgid "Feed - Mostly Public"
msgstr "Feed - Público en su mayor parte"
-#: ../../Zotlabs/Access/PermissionRoles.php:352
+#: ../../Zotlabs/Access/PermissionRoles.php:354
msgid "Feed - Restricted"
msgstr "Feed - Restringido"
-#: ../../Zotlabs/Access/PermissionRoles.php:355
+#: ../../Zotlabs/Access/PermissionRoles.php:357
msgid "Special Purpose"
msgstr "Propósito especial"
-#: ../../Zotlabs/Access/PermissionRoles.php:356
+#: ../../Zotlabs/Access/PermissionRoles.php:358
msgid "Special - Celebrity/Soapbox"
msgstr "Especial - Celebridad / Tribuna improvisada"
-#: ../../Zotlabs/Access/PermissionRoles.php:357
+#: ../../Zotlabs/Access/PermissionRoles.php:359
msgid "Special - Group Repository"
msgstr "Especial - Repositorio de grupo"
-#: ../../Zotlabs/Access/PermissionRoles.php:361
+#: ../../Zotlabs/Access/PermissionRoles.php:363
msgid "Custom/Expert Mode"
msgstr "Modo personalizado/experto"
-#: ../../Zotlabs/Access/PermissionRoles.php:385
+#: ../../Zotlabs/Access/PermissionRoles.php:387
msgid "Personal"
msgstr "Personales"
-#: ../../Zotlabs/Access/PermissionRoles.php:386
+#: ../../Zotlabs/Access/PermissionRoles.php:388
msgid "Community forum"
msgstr "Foro de discusión"
-#: ../../Zotlabs/Access/PermissionRoles.php:387
+#: ../../Zotlabs/Access/PermissionRoles.php:389
msgid "Custom"
msgstr "Personalizado"
@@ -7767,15 +7734,15 @@ msgstr "Aplicaciones instaladas"
msgid "Available Apps"
msgstr "Aplicaciones disponibles"
-#: ../../Zotlabs/Widget/Rating.php:57
+#: ../../Zotlabs/Widget/Rating.php:59
msgid "Rating Tools"
msgstr "Valoraciones"
-#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63
+#: ../../Zotlabs/Widget/Rating.php:63 ../../Zotlabs/Widget/Rating.php:65
msgid "Rate Me"
msgstr "Valorar este canal"
-#: ../../Zotlabs/Widget/Rating.php:66
+#: ../../Zotlabs/Widget/Rating.php:68
msgid "View Ratings"
msgstr "Mostrar las valoraciones"
@@ -7804,7 +7771,7 @@ msgstr "Mostrar solo las entradas nuevas"
#: ../../Zotlabs/Widget/Notifications.php:73
#: ../../Zotlabs/Widget/Notifications.php:134
#: ../../Zotlabs/Widget/Notifications.php:167
-#: ../../Zotlabs/Widget/Messages.php:39
+#: ../../Zotlabs/Widget/Messages.php:53
msgid "Filter by name or address"
msgstr "Filtrar por nombre o dirección"
@@ -7869,7 +7836,7 @@ msgstr "Avisos de nuevos ficheros"
#: ../../Zotlabs/Widget/Notifications.php:116
#: ../../Zotlabs/Widget/Notifications.php:117
-#: ../../Zotlabs/Widget/Messages.php:35
+#: ../../Zotlabs/Widget/Messages.php:49
msgid "Notices"
msgstr "Avisos"
@@ -7917,68 +7884,68 @@ msgstr "Añadir un nuevo invitado"
msgid "Guest access"
msgstr "Acceso para invitados"
-#: ../../Zotlabs/Widget/Newmember.php:36
+#: ../../Zotlabs/Widget/Newmember.php:38
msgid "Profile Creation"
msgstr "Creación de perfiles"
-#: ../../Zotlabs/Widget/Newmember.php:38
+#: ../../Zotlabs/Widget/Newmember.php:40
msgid "Upload profile photo"
msgstr "Cargar la foto del perfil"
-#: ../../Zotlabs/Widget/Newmember.php:39
+#: ../../Zotlabs/Widget/Newmember.php:41
msgid "Upload cover photo"
msgstr "Cargar la foto de portada del perfil"
-#: ../../Zotlabs/Widget/Newmember.php:43
+#: ../../Zotlabs/Widget/Newmember.php:45
msgid "Find and Connect with others"
msgstr "Encontrar y conectarse con otros"
-#: ../../Zotlabs/Widget/Newmember.php:45
+#: ../../Zotlabs/Widget/Newmember.php:47
msgid "View the directory"
msgstr "Ver el directorio"
-#: ../../Zotlabs/Widget/Newmember.php:46 ../../Zotlabs/Module/Go.php:38
+#: ../../Zotlabs/Widget/Newmember.php:48 ../../Zotlabs/Module/Go.php:39
msgid "View friend suggestions"
msgstr "Ver sugerencias de amistad"
-#: ../../Zotlabs/Widget/Newmember.php:47
+#: ../../Zotlabs/Widget/Newmember.php:49
msgid "Manage your connections"
msgstr "Gestionar sus conexiones"
-#: ../../Zotlabs/Widget/Newmember.php:50
+#: ../../Zotlabs/Widget/Newmember.php:52
msgid "Communicate"
msgstr "Comunicarse"
-#: ../../Zotlabs/Widget/Newmember.php:52
+#: ../../Zotlabs/Widget/Newmember.php:54
msgid "View your channel homepage"
msgstr "Ver la página principal de su canal"
-#: ../../Zotlabs/Widget/Newmember.php:53
+#: ../../Zotlabs/Widget/Newmember.php:55
msgid "View your network stream"
msgstr "Ver el \"stream\" de su red"
-#: ../../Zotlabs/Widget/Newmember.php:59
+#: ../../Zotlabs/Widget/Newmember.php:61
msgid "Documentation"
msgstr "Documentación"
-#: ../../Zotlabs/Widget/Newmember.php:62
+#: ../../Zotlabs/Widget/Newmember.php:64
msgid "Missing Features?"
msgstr "¿Faltan Características?"
-#: ../../Zotlabs/Widget/Newmember.php:64
+#: ../../Zotlabs/Widget/Newmember.php:66
msgid "Pin apps to navigation bar"
msgstr "Fijar apps a la barra de navegación"
-#: ../../Zotlabs/Widget/Newmember.php:65
+#: ../../Zotlabs/Widget/Newmember.php:67
msgid "Install more apps"
msgstr "Instalar más apps"
-#: ../../Zotlabs/Widget/Newmember.php:76
+#: ../../Zotlabs/Widget/Newmember.php:78
msgid "View public stream"
msgstr "Ver el \"stream\" público"
-#: ../../Zotlabs/Widget/Newmember.php:80
-#: ../../Zotlabs/Module/Settings/Display.php:201
+#: ../../Zotlabs/Widget/Newmember.php:82
+#: ../../Zotlabs/Module/Settings/Display.php:202
msgid "New Member Links"
msgstr "Enlaces para nuevos miembros"
@@ -7994,26 +7961,34 @@ msgstr "Sugerencias"
msgid "See more..."
msgstr "Ver más..."
-#: ../../Zotlabs/Widget/Messages.php:32
+#: ../../Zotlabs/Widget/Messages.php:45
msgid "Public and restricted messages"
msgstr "Mensajes públicos y restringidos"
-#: ../../Zotlabs/Widget/Messages.php:33
+#: ../../Zotlabs/Widget/Messages.php:46
msgid "Direct messages"
msgstr "Mensajes directos"
-#: ../../Zotlabs/Widget/Messages.php:34
+#: ../../Zotlabs/Widget/Messages.php:47
msgid "Starred messages"
msgstr "Entradas preferidas"
-#: ../../Zotlabs/Widget/Messages.php:37
+#: ../../Zotlabs/Widget/Messages.php:48
+msgid "Filed messages"
+msgstr "Mensajes archivados"
+
+#: ../../Zotlabs/Widget/Messages.php:51
msgid "No messages"
msgstr "Sin mensajes"
-#: ../../Zotlabs/Widget/Messages.php:38
+#: ../../Zotlabs/Widget/Messages.php:52
msgid "Unseen"
msgstr "No visto"
+#: ../../Zotlabs/Widget/Messages.php:54
+msgid "Filter by file name"
+msgstr "Filtrar por nombre de archivo"
+
#: ../../Zotlabs/Widget/Hq_controls.php:23
msgid "Toggle post editor"
msgstr "Alternar editor de entradas"
@@ -8041,23 +8016,23 @@ msgstr "Editar álbum"
#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Portfolio.php:114
#: ../../Zotlabs/Widget/Cdav.php:152 ../../Zotlabs/Widget/Cdav.php:188
#: ../../Zotlabs/Storage/Browser.php:546
-#: ../../Zotlabs/Module/Cover_photo.php:380
+#: ../../Zotlabs/Module/Cover_photo.php:381
#: ../../Zotlabs/Module/Embedphotos.php:189
-#: ../../Zotlabs/Module/Profile_photo.php:546
+#: ../../Zotlabs/Module/Profile_photo.php:547
#: ../../Zotlabs/Module/Photos.php:681
msgid "Upload"
msgstr "Subir"
-#: ../../Zotlabs/Widget/Pinned.php:93
+#: ../../Zotlabs/Widget/Pinned.php:95
msgid "Share This"
msgstr "Compartir esto"
-#: ../../Zotlabs/Widget/Pinned.php:116 ../../Zotlabs/Widget/Pinned.php:117
+#: ../../Zotlabs/Widget/Pinned.php:117 ../../Zotlabs/Widget/Pinned.php:118
#, php-format
msgid "View %s's profile - %s"
msgstr "Ver el perfil de %s - %s"
-#: ../../Zotlabs/Widget/Pinned.php:150
+#: ../../Zotlabs/Widget/Pinned.php:151
msgid "Don't show"
msgstr "No mostrar"
@@ -8078,23 +8053,23 @@ msgstr "Dirección del canal"
msgid "Examples: bob@example.com, https://example.com/barbara"
msgstr "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen"
-#: ../../Zotlabs/Widget/Notes.php:39
+#: ../../Zotlabs/Widget/Notes.php:42
msgid "Read mode"
msgstr "Modo lectura"
-#: ../../Zotlabs/Widget/Notes.php:40
+#: ../../Zotlabs/Widget/Notes.php:43
msgid "Edit mode"
msgstr "Modo edición"
-#: ../../Zotlabs/Widget/Notes.php:41
+#: ../../Zotlabs/Widget/Notes.php:44
msgid "Editing"
msgstr "Editar"
-#: ../../Zotlabs/Widget/Notes.php:42
+#: ../../Zotlabs/Widget/Notes.php:45
msgid "Saving"
msgstr "Guardar"
-#: ../../Zotlabs/Widget/Notes.php:43
+#: ../../Zotlabs/Widget/Notes.php:46
msgid "Saved"
msgstr "Guardado"
@@ -8201,7 +8176,7 @@ msgid "Stream Filters"
msgstr "Filtros del stream"
#: ../../Zotlabs/Widget/Channel_activities.php:29
-#: ../../Zotlabs/Module/Go.php:27
+#: ../../Zotlabs/Module/Go.php:28
msgid "Welcome"
msgstr "Bienvenido/a"
@@ -8256,14 +8231,14 @@ msgstr "Todos/as"
msgid "Refresh"
msgstr "Recargar"
-#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:400
+#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:402
msgid "Site"
msgstr "Sitio"
#: ../../Zotlabs/Widget/Admin.php:28
-#: ../../Zotlabs/Module/Admin/Accounts.php:308
-#: ../../Zotlabs/Module/Admin/Accounts.php:327
-#: ../../Zotlabs/Module/Admin.php:95
+#: ../../Zotlabs/Module/Admin/Accounts.php:208
+#: ../../Zotlabs/Module/Admin/Accounts.php:227
+#: ../../Zotlabs/Module/Admin.php:97
msgid "Accounts"
msgstr "Cuentas"
@@ -8272,17 +8247,17 @@ msgid "Member registrations waiting for confirmation"
msgstr "Inscripciones de nuevos miembros pendientes de aprobación"
#: ../../Zotlabs/Widget/Admin.php:30
-#: ../../Zotlabs/Module/Admin/Security.php:106
+#: ../../Zotlabs/Module/Admin/Security.php:107
msgid "Security"
msgstr "Seguridad"
-#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:346
-#: ../../Zotlabs/Module/Admin/Addons.php:444
+#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:125
+#: ../../Zotlabs/Module/Admin/Addons.php:192
msgid "Addons"
msgstr "Addons"
-#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:138
-#: ../../Zotlabs/Module/Admin/Themes.php:172
+#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:139
+#: ../../Zotlabs/Module/Admin/Themes.php:173
msgid "Themes"
msgstr "Temas"
@@ -8294,7 +8269,7 @@ msgstr "Examinar la cola"
msgid "Queueworker"
msgstr "Queueworker - Trabajador de cola"
-#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:168
+#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:169
msgid "Profile Fields"
msgstr "Campos del perfil"
@@ -8303,7 +8278,7 @@ msgid "DB updates"
msgstr "Actualizaciones de la base de datos"
#: ../../Zotlabs/Widget/Admin.php:54 ../../Zotlabs/Widget/Admin.php:64
-#: ../../Zotlabs/Module/Admin/Logs.php:83
+#: ../../Zotlabs/Module/Admin/Logs.php:84
msgid "Logs"
msgstr "Informes"
@@ -8411,11 +8386,11 @@ msgid "Create new CalDAV calendar"
msgstr "Crear un nuevo calendario CalDAV"
#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184
-#: ../../Zotlabs/Storage/Browser.php:367 ../../Zotlabs/Storage/Browser.php:544
-#: ../../Zotlabs/Module/Webpages.php:249 ../../Zotlabs/Module/Connedit.php:747
+#: ../../Zotlabs/Storage/Browser.php:368 ../../Zotlabs/Storage/Browser.php:544
+#: ../../Zotlabs/Module/Webpages.php:248 ../../Zotlabs/Module/Connedit.php:747
#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Menu.php:182
#: ../../Zotlabs/Module/Blocks.php:157
-#: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Module/Cdav.php:1050
+#: ../../Zotlabs/Module/New_channel.php:190 ../../Zotlabs/Module/Cdav.php:1050
#: ../../Zotlabs/Module/Cdav.php:1383
msgid "Create"
msgstr "Crear"
@@ -8477,57 +8452,57 @@ msgstr "Añadir nuevo grupo"
msgid "Privacy groups"
msgstr "Grupos de canales"
-#: ../../Zotlabs/Storage/Browser.php:291
+#: ../../Zotlabs/Storage/Browser.php:292
msgid "Change filename to"
msgstr "Cambiar el nombre de archivo a "
-#: ../../Zotlabs/Storage/Browser.php:308 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394
msgid "Select a target location"
msgstr "Seleccionar un lugar de destino "
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:395
msgid "Copy to target location"
msgstr "Copiar a la ubicación de destino"
-#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:392
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:393
msgid "Set permissions for all files and sub folders"
msgstr "Establecer los permisos para todos los ficheros y subcarpetas"
-#: ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312
msgid "Notify your contacts about this file"
msgstr "Advertir a sus contactos sobre este archivo"
-#: ../../Zotlabs/Storage/Browser.php:350
+#: ../../Zotlabs/Storage/Browser.php:351
msgid "File category"
msgstr "Categoría del fichero"
-#: ../../Zotlabs/Storage/Browser.php:364
+#: ../../Zotlabs/Storage/Browser.php:365
msgid "Total"
msgstr "Total"
-#: ../../Zotlabs/Storage/Browser.php:366
+#: ../../Zotlabs/Storage/Browser.php:367
msgid "Shared"
msgstr "Compartido"
-#: ../../Zotlabs/Storage/Browser.php:368
+#: ../../Zotlabs/Storage/Browser.php:369
msgid "Add Files"
msgstr "Añadir ficheros"
-#: ../../Zotlabs/Storage/Browser.php:383
+#: ../../Zotlabs/Storage/Browser.php:384
#: ../../Zotlabs/Module/Sharedwithme.php:110
msgid "Last Modified"
msgstr "Última modificación"
-#: ../../Zotlabs/Storage/Browser.php:384
+#: ../../Zotlabs/Storage/Browser.php:385
msgid "parent"
msgstr "padre"
-#: ../../Zotlabs/Storage/Browser.php:389
+#: ../../Zotlabs/Storage/Browser.php:390
#: ../../Zotlabs/Module/Filestorage.php:206
msgid "Copy/paste this code to attach file to a post"
msgstr "Copiar/pegar este código para adjuntar el fichero al envío"
-#: ../../Zotlabs/Storage/Browser.php:390
+#: ../../Zotlabs/Storage/Browser.php:391
#: ../../Zotlabs/Module/Filestorage.php:207
msgid "Copy/paste this URL to link file from a web page"
msgstr "Copiar/pegar esta dirección para enlazar el fichero desde una página web"
@@ -8619,147 +8594,152 @@ msgid ""
"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
msgstr "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
-#: ../../Zotlabs/Module/Import_progress.php:36
+#: ../../Zotlabs/Module/Import_progress.php:40
msgid "Item sync completed!"
msgstr "¡Sincronización de artículos completada!"
-#: ../../Zotlabs/Module/Import_progress.php:51
+#: ../../Zotlabs/Module/Import_progress.php:63
+#: ../../Zotlabs/Module/Import_progress.php:112
+msgid "Import host does not seem to be online or compatible"
+msgstr "El host de importación no parece estar en línea ni ser compatible"
+
+#: ../../Zotlabs/Module/Import_progress.php:74
msgid "Item sync completed but no items were found!"
msgstr "¡Sincronización de artículos completada pero no se ha encontrado ningún artículo!"
-#: ../../Zotlabs/Module/Import_progress.php:68
+#: ../../Zotlabs/Module/Import_progress.php:91
msgid "File sync completed!"
msgstr "¡Sincronización de archivos completada!"
-#: ../../Zotlabs/Module/Import_progress.php:83
+#: ../../Zotlabs/Module/Import_progress.php:123
msgid "File sync completed but no files were found!"
msgstr "¡La sincronización de archivos se ha completado pero no se ha encontrado ningún archivo!"
-#: ../../Zotlabs/Module/Import_progress.php:98
+#: ../../Zotlabs/Module/Import_progress.php:141
msgid "Channel clone status"
msgstr "Estado de clonación del canal"
-#: ../../Zotlabs/Module/Import_progress.php:99
+#: ../../Zotlabs/Module/Import_progress.php:142
msgid "Item sync status"
msgstr "Estado de sincronización de artículos"
-#: ../../Zotlabs/Module/Import_progress.php:100
+#: ../../Zotlabs/Module/Import_progress.php:143
msgid "File sync status"
msgstr "Estado de sincronización de archivos"
-#: ../../Zotlabs/Module/Import_progress.php:107
+#: ../../Zotlabs/Module/Import_progress.php:150
msgid "Channel cloning completed!"
msgstr "Clonación del canal completada."
-#: ../../Zotlabs/Module/Import_progress.php:108
+#: ../../Zotlabs/Module/Import_progress.php:151
msgid "Resume"
msgstr "Reanudar"
-#: ../../Zotlabs/Module/Import_progress.php:109
+#: ../../Zotlabs/Module/Import_progress.php:152
msgid "Only resume if sync stalled!"
msgstr "Sólo se reanuda si la sincronización se estanca."
-#: ../../Zotlabs/Module/Display.php:26 ../../Zotlabs/Module/Search.php:23
+#: ../../Zotlabs/Module/Display.php:27 ../../Zotlabs/Module/Search.php:24
#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Directory.php:77
#: ../../Zotlabs/Module/Viewconnections.php:23
#: ../../Zotlabs/Module/Photos.php:511
msgid "Public access denied."
msgstr "Acceso público denegado."
-#: ../../Zotlabs/Module/Display.php:52 ../../Zotlabs/Module/Oep.php:82
-#: ../../Zotlabs/Module/Pubstream.php:54 ../../Zotlabs/Module/Channel.php:194
+#: ../../Zotlabs/Module/Display.php:53 ../../Zotlabs/Module/Oep.php:82
+#: ../../Zotlabs/Module/Pubstream.php:55 ../../Zotlabs/Module/Channel.php:195
msgid "Malformed message id."
msgstr "ID de mensaje malformado."
-#: ../../Zotlabs/Module/Display.php:94 ../../Zotlabs/Module/Network.php:213
-#: ../../Zotlabs/Module/Hq.php:108 ../../Zotlabs/Module/Pubstream.php:97
-#: ../../Zotlabs/Module/Channel.php:278 ../../Zotlabs/Module/Rpost.php:210
+#: ../../Zotlabs/Module/Display.php:95 ../../Zotlabs/Module/Network.php:213
+#: ../../Zotlabs/Module/Hq.php:99 ../../Zotlabs/Module/Pubstream.php:98
+#: ../../Zotlabs/Module/Channel.php:279 ../../Zotlabs/Module/Rpost.php:111
msgid "Reset form"
msgstr "Reiniciar el formulario"
-#: ../../Zotlabs/Module/Display.php:319 ../../Zotlabs/Module/Channel.php:500
+#: ../../Zotlabs/Module/Display.php:320 ../../Zotlabs/Module/Channel.php:501
msgid ""
"You must enable javascript for your browser to be able to view this content."
msgstr "Debe habilitar javascript para poder ver este contenido en su navegador."
-#: ../../Zotlabs/Module/Display.php:339
+#: ../../Zotlabs/Module/Display.php:340
msgid "Article"
msgstr "Artículo"
-#: ../../Zotlabs/Module/Display.php:383
+#: ../../Zotlabs/Module/Display.php:389
msgid "Item has been removed."
msgstr "Se ha eliminado el elemento."
-#: ../../Zotlabs/Module/Cover_photo.php:85
-#: ../../Zotlabs/Module/Profile_photo.php:128
+#: ../../Zotlabs/Module/Cover_photo.php:86
+#: ../../Zotlabs/Module/Profile_photo.php:129
msgid "Image uploaded but image cropping failed."
msgstr "Imagen actualizada, pero el recorte de la imagen ha fallado. "
-#: ../../Zotlabs/Module/Cover_photo.php:194
-#: ../../Zotlabs/Module/Cover_photo.php:251
+#: ../../Zotlabs/Module/Cover_photo.php:195
+#: ../../Zotlabs/Module/Cover_photo.php:252
msgid "Cover Photos"
msgstr "Imágenes de portada del perfil"
-#: ../../Zotlabs/Module/Cover_photo.php:210
-#: ../../Zotlabs/Module/Profile_photo.php:184
+#: ../../Zotlabs/Module/Cover_photo.php:211
+#: ../../Zotlabs/Module/Profile_photo.php:185
msgid "Image resize failed."
msgstr "El ajuste del tamaño de la imagen ha fallado."
-#: ../../Zotlabs/Module/Cover_photo.php:262
-#: ../../Zotlabs/Module/Profile_photo.php:349
+#: ../../Zotlabs/Module/Cover_photo.php:263
+#: ../../Zotlabs/Module/Profile_photo.php:350
msgid "Image upload failed."
msgstr "La carga de la imagen ha fallado."
-#: ../../Zotlabs/Module/Cover_photo.php:279
-#: ../../Zotlabs/Module/Profile_photo.php:369
+#: ../../Zotlabs/Module/Cover_photo.php:280
+#: ../../Zotlabs/Module/Profile_photo.php:370
msgid "Unable to process image."
msgstr "No ha sido posible procesar la imagen."
-#: ../../Zotlabs/Module/Cover_photo.php:324
-#: ../../Zotlabs/Module/Cover_photo.php:339
-#: ../../Zotlabs/Module/Profile_photo.php:431
-#: ../../Zotlabs/Module/Profile_photo.php:496
+#: ../../Zotlabs/Module/Cover_photo.php:325
+#: ../../Zotlabs/Module/Cover_photo.php:340
+#: ../../Zotlabs/Module/Profile_photo.php:432
+#: ../../Zotlabs/Module/Profile_photo.php:497
msgid "Photo not available."
msgstr "Foto no disponible."
-#: ../../Zotlabs/Module/Cover_photo.php:375
+#: ../../Zotlabs/Module/Cover_photo.php:376
msgid "Your cover photo may be visible to anybody on the internet"
msgstr "La foto de la portada puede ser visible para cualquiera en Internet"
-#: ../../Zotlabs/Module/Cover_photo.php:377
+#: ../../Zotlabs/Module/Cover_photo.php:378
msgid "Upload File:"
msgstr "Subir fichero:"
-#: ../../Zotlabs/Module/Cover_photo.php:378
+#: ../../Zotlabs/Module/Cover_photo.php:379
msgid "Select a profile:"
msgstr "Seleccionar un perfil:"
-#: ../../Zotlabs/Module/Cover_photo.php:379
+#: ../../Zotlabs/Module/Cover_photo.php:380
msgid "Change Cover Photo"
msgstr "Cambiar la foto de portada del perfil"
-#: ../../Zotlabs/Module/Cover_photo.php:383
#: ../../Zotlabs/Module/Cover_photo.php:384
-#: ../../Zotlabs/Module/Profile_photo.php:550
+#: ../../Zotlabs/Module/Cover_photo.php:385
#: ../../Zotlabs/Module/Profile_photo.php:551
+#: ../../Zotlabs/Module/Profile_photo.php:552
msgid "Use a photo from your albums"
msgstr "Usar una foto de sus álbumes"
-#: ../../Zotlabs/Module/Cover_photo.php:395
+#: ../../Zotlabs/Module/Cover_photo.php:396
msgid "Select existing photo"
msgstr "Seleccionar una foto"
-#: ../../Zotlabs/Module/Cover_photo.php:412
-#: ../../Zotlabs/Module/Profile_photo.php:580
+#: ../../Zotlabs/Module/Cover_photo.php:413
+#: ../../Zotlabs/Module/Profile_photo.php:581
msgid "Crop Image"
msgstr "Recortar imagen"
-#: ../../Zotlabs/Module/Cover_photo.php:413
-#: ../../Zotlabs/Module/Profile_photo.php:581
+#: ../../Zotlabs/Module/Cover_photo.php:414
+#: ../../Zotlabs/Module/Profile_photo.php:582
msgid "Please adjust the image cropping for optimum viewing."
msgstr "Por favor ajuste el recorte de la imagen para una visión óptima."
-#: ../../Zotlabs/Module/Cover_photo.php:415
+#: ../../Zotlabs/Module/Cover_photo.php:416
msgid "Done Editing"
msgstr "Edición completada"
@@ -8771,11 +8751,11 @@ msgstr "Enlace de la página"
msgid "Edit Webpage"
msgstr "Editar la página web"
-#: ../../Zotlabs/Module/Sse_bs.php:626
+#: ../../Zotlabs/Module/Sse_bs.php:631
msgid "Private forum"
msgstr "Foro privado"
-#: ../../Zotlabs/Module/Sse_bs.php:626
+#: ../../Zotlabs/Module/Sse_bs.php:631
msgid "Public forum"
msgstr "Foro público"
@@ -8787,53 +8767,53 @@ msgstr "Importar elementos de una página web"
msgid "Import selected"
msgstr "Importar elementos seleccionados"
-#: ../../Zotlabs/Module/Webpages.php:91
+#: ../../Zotlabs/Module/Webpages.php:90
msgid "Export Webpage Elements"
msgstr "Exportar elementos de una página web"
-#: ../../Zotlabs/Module/Webpages.php:92
+#: ../../Zotlabs/Module/Webpages.php:91
msgid "Export selected"
msgstr "Exportar los elementos seleccionados"
-#: ../../Zotlabs/Module/Webpages.php:258
+#: ../../Zotlabs/Module/Webpages.php:257
msgid "Actions"
msgstr "Acciones"
-#: ../../Zotlabs/Module/Webpages.php:259
+#: ../../Zotlabs/Module/Webpages.php:258
msgid "Page Link"
msgstr "Vínculo de la página"
-#: ../../Zotlabs/Module/Webpages.php:260
+#: ../../Zotlabs/Module/Webpages.php:259
msgid "Page Title"
msgstr "Título de página"
-#: ../../Zotlabs/Module/Webpages.php:261 ../../Zotlabs/Module/Layouts.php:189
+#: ../../Zotlabs/Module/Webpages.php:260 ../../Zotlabs/Module/Layouts.php:189
#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Blocks.php:155
msgid "Created"
msgstr "Creado"
-#: ../../Zotlabs/Module/Webpages.php:262 ../../Zotlabs/Module/Layouts.php:190
+#: ../../Zotlabs/Module/Webpages.php:261 ../../Zotlabs/Module/Layouts.php:190
#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Blocks.php:156
msgid "Edited"
msgstr "Editado"
-#: ../../Zotlabs/Module/Webpages.php:290
+#: ../../Zotlabs/Module/Webpages.php:289
msgid "Invalid file type."
msgstr "Tipo de fichero no válido."
-#: ../../Zotlabs/Module/Webpages.php:302
+#: ../../Zotlabs/Module/Webpages.php:301
msgid "Error opening zip file"
msgstr "Error al abrir el fichero comprimido zip"
-#: ../../Zotlabs/Module/Webpages.php:313
+#: ../../Zotlabs/Module/Webpages.php:312
msgid "Invalid folder path."
msgstr "La ruta de la carpeta no es válida."
-#: ../../Zotlabs/Module/Webpages.php:340
+#: ../../Zotlabs/Module/Webpages.php:339
msgid "No webpage elements detected."
msgstr "No se han detectado elementos de ninguna página web."
-#: ../../Zotlabs/Module/Webpages.php:415
+#: ../../Zotlabs/Module/Webpages.php:414
msgid "Import complete."
msgstr "Importación completada."
@@ -8855,39 +8835,39 @@ msgstr "El nombre es obligatorio"
msgid "Key and Secret are required"
msgstr "\"Key\" y \"Secret\" son obligatorios"
-#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134
+#: ../../Zotlabs/Module/Oauth.php:109 ../../Zotlabs/Module/Oauth.php:134
#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141
#: ../../Zotlabs/Module/Oauth2.php:191
msgid "Add application"
msgstr "Añadir aplicación"
-#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth2.php:116
+#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth2.php:117
#: ../../Zotlabs/Module/Oauth2.php:144
msgid "Name of application"
msgstr "Nombre de la aplicación"
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
+#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:114
+#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:145
msgid "Automatically generated - change if desired. Max length 20"
msgstr "Generado automáticamente - si lo desea, cámbielo. Longitud máxima: 20"
-#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140
-#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:140
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:146
msgid "Redirect"
msgstr "Redirigir"
-#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth2.php:118
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth2.php:119
#: ../../Zotlabs/Module/Oauth2.php:146
msgid ""
"Redirect URI - leave blank unless your application specifically requires "
"this"
msgstr "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera"
-#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:141
+#: ../../Zotlabs/Module/Oauth.php:116 ../../Zotlabs/Module/Oauth.php:141
msgid "Icon url"
msgstr "Dirección del icono"
-#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Register.php:498
+#: ../../Zotlabs/Module/Oauth.php:116 ../../Zotlabs/Module/Register.php:501
#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
msgid "Optional"
msgstr "Opcional"
@@ -8920,7 +8900,7 @@ msgstr "No se encuentra el grupo"
msgid "No such channel"
msgstr "No se encuentra el canal"
-#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:245
+#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:246
msgid "Search Results For:"
msgstr "Buscar resultados para:"
@@ -9025,7 +9005,7 @@ msgid ""
msgstr "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña."
#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
-#: ../../Zotlabs/Module/Settings/Channel.php:282
+#: ../../Zotlabs/Module/Settings/Channel.php:283
msgid "Remove Channel"
msgstr "Eliminar el canal"
@@ -9063,12 +9043,12 @@ msgid ""
msgstr "Utilice este formulario para importar entradas y contenido desde un archivo de exportación."
#: ../../Zotlabs/Module/Import_items.php:123
-#: ../../Zotlabs/Module/Import.php:594
+#: ../../Zotlabs/Module/Import.php:606
msgid "File to Upload"
msgstr "Fichero para subir"
#: ../../Zotlabs/Module/Import_items.php:136
-#: ../../Zotlabs/Module/Import.php:107
+#: ../../Zotlabs/Module/Import.php:108
msgid "Imported file is empty."
msgstr "El fichero importado está vacío."
@@ -9100,7 +9080,7 @@ msgstr "Importación de wikis completada"
msgid "Webpages import completed"
msgstr "Importación de páginas web completada"
-#: ../../Zotlabs/Module/Regdir.php:52 ../../Zotlabs/Module/Dirsearch.php:23
+#: ../../Zotlabs/Module/Regdir.php:53 ../../Zotlabs/Module/Dirsearch.php:24
msgid "This site is not a directory server"
msgstr "Este sitio no es un servidor de directorio"
@@ -9140,56 +9120,56 @@ msgstr "php util/z6convert.php"
msgid "from the terminal."
msgstr "desde la terminal."
-#: ../../Zotlabs/Module/Thing.php:139
+#: ../../Zotlabs/Module/Thing.php:146
msgid "Thing updated"
msgstr "Elemento actualizado."
-#: ../../Zotlabs/Module/Thing.php:191
+#: ../../Zotlabs/Module/Thing.php:198
msgid "Object store: failed"
msgstr "Guardar objeto: ha fallado"
-#: ../../Zotlabs/Module/Thing.php:195
+#: ../../Zotlabs/Module/Thing.php:202
msgid "Thing added"
msgstr "Elemento añadido"
-#: ../../Zotlabs/Module/Thing.php:210
+#: ../../Zotlabs/Module/Thing.php:217
#, php-format
msgid "OBJ: %1$s %2$s %3$s"
msgstr "OBJ: %1$s %2$s %3$s"
-#: ../../Zotlabs/Module/Thing.php:277 ../../Zotlabs/Module/Thing.php:301
+#: ../../Zotlabs/Module/Thing.php:284 ../../Zotlabs/Module/Thing.php:308
msgid "item not found."
msgstr "elemento no encontrado."
-#: ../../Zotlabs/Module/Thing.php:336
+#: ../../Zotlabs/Module/Thing.php:343
msgid "Edit Thing"
msgstr "Editar elemento"
-#: ../../Zotlabs/Module/Thing.php:338 ../../Zotlabs/Module/Thing.php:394
+#: ../../Zotlabs/Module/Thing.php:345 ../../Zotlabs/Module/Thing.php:399
msgid "Select a profile"
msgstr "Seleccionar un perfil"
-#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
+#: ../../Zotlabs/Module/Thing.php:349 ../../Zotlabs/Module/Thing.php:402
msgid "Post an activity"
msgstr "Publicar una actividad"
-#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
+#: ../../Zotlabs/Module/Thing.php:349 ../../Zotlabs/Module/Thing.php:402
msgid "Only sends to viewers of the applicable profile"
msgstr "Sólo enviar a espectadores del perfil pertinente."
-#: ../../Zotlabs/Module/Thing.php:344 ../../Zotlabs/Module/Thing.php:399
+#: ../../Zotlabs/Module/Thing.php:351 ../../Zotlabs/Module/Thing.php:404
msgid "Name of thing e.g. something"
msgstr "Nombre del elemento, p. ej.:. \"algo\""
-#: ../../Zotlabs/Module/Thing.php:346 ../../Zotlabs/Module/Thing.php:400
+#: ../../Zotlabs/Module/Thing.php:353 ../../Zotlabs/Module/Thing.php:405
msgid "URL of thing (optional)"
msgstr "Dirección del elemento (opcional)"
-#: ../../Zotlabs/Module/Thing.php:348 ../../Zotlabs/Module/Thing.php:401
+#: ../../Zotlabs/Module/Thing.php:355 ../../Zotlabs/Module/Thing.php:406
msgid "URL for photo of thing (optional)"
msgstr "Dirección para la foto o elemento (opcional)"
-#: ../../Zotlabs/Module/Thing.php:392
+#: ../../Zotlabs/Module/Thing.php:397
msgid "Add Thing to your Profile"
msgstr "Añadir alguna cosa a su perfil"
@@ -9214,7 +9194,7 @@ msgid "This action is permanent and can not be undone!"
msgstr "¡Esta acción tiene carácter definitivo y no se puede deshacer!"
#: ../../Zotlabs/Module/Removeaccount.php:61
-#: ../../Zotlabs/Module/Settings/Account.php:111
+#: ../../Zotlabs/Module/Settings/Account.php:113
msgid "Remove Account"
msgstr "Eliminar cuenta"
@@ -9368,7 +9348,7 @@ msgid "Show URL to this file"
msgstr "Mostrar la dirección de este fichero"
#: ../../Zotlabs/Module/Totp_check.php:71
-#: ../../Zotlabs/Module/Admin/Account_edit.php:61
+#: ../../Zotlabs/Module/Admin/Account_edit.php:66
msgid "Account not found."
msgstr "No se ha encontrado la cuenta."
@@ -9464,15 +9444,15 @@ msgstr "Filtro personalizado"
#: ../../Zotlabs/Module/Contactedit.php:409
#: ../../Zotlabs/Module/Connedit.php:706
-#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Settings/Channel.php:287
msgid "Only import posts with this text"
msgstr "Importar solo entradas que contengan este texto"
#: ../../Zotlabs/Module/Contactedit.php:409
#: ../../Zotlabs/Module/Contactedit.php:410
#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Admin/Site.php:500
-#: ../../Zotlabs/Module/Admin/Site.php:501
+#: ../../Zotlabs/Module/Admin/Site.php:502
+#: ../../Zotlabs/Module/Admin/Site.php:503
msgid ""
"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
"all posts"
@@ -9480,7 +9460,7 @@ msgstr "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx
#: ../../Zotlabs/Module/Contactedit.php:410
#: ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Settings/Channel.php:285
+#: ../../Zotlabs/Module/Settings/Channel.php:286
msgid "Do not import posts with this text"
msgstr "No importar entradas que contengan este texto"
@@ -9579,13 +9559,13 @@ msgstr "Recuperar información de contacto"
#: ../../Zotlabs/Module/Contactedit.php:623
#: ../../Zotlabs/Module/Connedit.php:508
-#: ../../Zotlabs/Module/Admin/Accounts.php:322
+#: ../../Zotlabs/Module/Admin/Accounts.php:222
msgid "Unblock"
msgstr "Desbloquear"
#: ../../Zotlabs/Module/Contactedit.php:623
#: ../../Zotlabs/Module/Connedit.php:508
-#: ../../Zotlabs/Module/Admin/Accounts.php:321
+#: ../../Zotlabs/Module/Admin/Accounts.php:221
msgid "Block"
msgstr "Bloquear"
@@ -9666,146 +9646,146 @@ msgstr "¡Esta conexión está oculta!"
msgid "Delete this connection"
msgstr "Eliminar esta conexión"
-#: ../../Zotlabs/Module/Search.php:250
+#: ../../Zotlabs/Module/Search.php:251
#, php-format
msgid "Items tagged with: %s"
msgstr "elementos etiquetados con: %s"
-#: ../../Zotlabs/Module/Search.php:252
+#: ../../Zotlabs/Module/Search.php:253
#, php-format
msgid "Search results for: %s"
msgstr "Resultados de la búsqueda para: %s"
-#: ../../Zotlabs/Module/Register.php:112
+#: ../../Zotlabs/Module/Register.php:113
msgid "Email address required"
msgstr "Dirección de correo electrónico requerida"
-#: ../../Zotlabs/Module/Register.php:156
+#: ../../Zotlabs/Module/Register.php:157
msgid "No password provided"
msgstr "No se ha proporcionado la contraseña"
-#: ../../Zotlabs/Module/Register.php:179
+#: ../../Zotlabs/Module/Register.php:180
msgid "Terms of Service not accepted"
msgstr "No se han aceptado los Términos del servicio"
-#: ../../Zotlabs/Module/Register.php:241
+#: ../../Zotlabs/Module/Register.php:242
msgid "Invitation code succesfully applied"
msgstr "El código de invitación se ha aplicado con éxito"
-#: ../../Zotlabs/Module/Register.php:261
+#: ../../Zotlabs/Module/Register.php:262
msgid "Invitation not in time or too late"
msgstr "La invitación no llega a tiempo o llega demasiado tarde"
-#: ../../Zotlabs/Module/Register.php:267
+#: ../../Zotlabs/Module/Register.php:268
msgid "Invitation email failed"
msgstr "Error en el correo electrónico de invitación"
-#: ../../Zotlabs/Module/Register.php:275
+#: ../../Zotlabs/Module/Register.php:276
msgid "Invitation code failed"
msgstr "Código de invitación fallido"
-#: ../../Zotlabs/Module/Register.php:282
+#: ../../Zotlabs/Module/Register.php:283
msgid "Invitations are not available"
msgstr "No hay invitaciones disponibles"
-#: ../../Zotlabs/Module/Register.php:292
+#: ../../Zotlabs/Module/Register.php:293
msgid "Registration on this hub is by invitation only"
msgstr "El registro en este hub solo es posible por invitación"
-#: ../../Zotlabs/Module/Register.php:399
+#: ../../Zotlabs/Module/Register.php:400
msgid "New register request"
msgstr "Nueva solicitud de registro"
-#: ../../Zotlabs/Module/Register.php:417
+#: ../../Zotlabs/Module/Register.php:418
msgid "Error creating dId A"
msgstr "Error al crear dId A"
-#: ../../Zotlabs/Module/Register.php:435
+#: ../../Zotlabs/Module/Register.php:437
msgid "Registration on this hub is disabled."
msgstr "El registro está deshabilitado en este sitio."
-#: ../../Zotlabs/Module/Register.php:444
+#: ../../Zotlabs/Module/Register.php:446
+msgid "Why do you want to join this hub?"
+msgstr "¿Por qué quiere unirse a este hub?"
+
+#: ../../Zotlabs/Module/Register.php:446
+msgid "This will help to review your registration"
+msgstr "Esto ayudará a revisar su registro"
+
+#: ../../Zotlabs/Module/Register.php:447
msgid "Registration on this hub is by approval only."
msgstr "El registro en este hub está sometido a aprobación previa."
-#: ../../Zotlabs/Module/Register.php:445
+#: ../../Zotlabs/Module/Register.php:448
msgid "Register at another affiliated hub in case when prefered"
msgstr "Regístrese en otro hub afiliado en caso de que lo prefiera"
-#: ../../Zotlabs/Module/Register.php:458
+#: ../../Zotlabs/Module/Register.php:461
msgid "Registration on this hub is by invitation only."
msgstr "La inscripción en este hub es sólo posible por invitación."
-#: ../../Zotlabs/Module/Register.php:459
+#: ../../Zotlabs/Module/Register.php:462
msgid "Register at another affiliated hub"
msgstr "Regístrese en otro hub afiliado"
-#: ../../Zotlabs/Module/Register.php:473 ../../Zotlabs/Module/Siteinfo.php:28
+#: ../../Zotlabs/Module/Register.php:476 ../../Zotlabs/Module/Siteinfo.php:29
msgid "Terms of Service"
msgstr "Términos del servicio"
-#: ../../Zotlabs/Module/Register.php:479
+#: ../../Zotlabs/Module/Register.php:482
#, php-format
msgid "I accept the %s for this website"
msgstr "Acepto los %s de este sitio"
-#: ../../Zotlabs/Module/Register.php:486
+#: ../../Zotlabs/Module/Register.php:489
#, php-format
msgid "I am over %s years of age and accept the %s for this website"
msgstr "Tengo más de %s años de edad y acepto los %s de este sitio web"
-#: ../../Zotlabs/Module/Register.php:496
+#: ../../Zotlabs/Module/Register.php:499
msgid "Your email address"
msgstr "Su dirección de correo electrónico"
-#: ../../Zotlabs/Module/Register.php:503
+#: ../../Zotlabs/Module/Register.php:506
msgid "Choose a password"
msgstr "Elija una contraseña"
-#: ../../Zotlabs/Module/Register.php:504
+#: ../../Zotlabs/Module/Register.php:507
msgid "Please re-enter your password"
msgstr "Por favor, vuelva a escribir su contraseña"
-#: ../../Zotlabs/Module/Register.php:506
+#: ../../Zotlabs/Module/Register.php:509
msgid "Please enter your invitation code"
msgstr "Por favor, introduzca el código de su invitación"
-#: ../../Zotlabs/Module/Register.php:508
+#: ../../Zotlabs/Module/Register.php:511
msgid "Your name"
msgstr "Su nombre"
-#: ../../Zotlabs/Module/Register.php:508
+#: ../../Zotlabs/Module/Register.php:511
msgid "Real name is preferred"
msgstr "Se prefiere el nombre real"
-#: ../../Zotlabs/Module/Register.php:510
-#: ../../Zotlabs/Module/New_channel.php:177
+#: ../../Zotlabs/Module/Register.php:513
+#: ../../Zotlabs/Module/New_channel.php:178
msgid "Choose a short nickname"
msgstr "Elija un alias corto"
-#: ../../Zotlabs/Module/Register.php:510
+#: ../../Zotlabs/Module/Register.php:513
msgid ""
"Your nickname will be used to create an easy to remember channel address"
msgstr "Tu alias se utilizará para crear una dirección de canal fácil de recordar"
-#: ../../Zotlabs/Module/Register.php:514
-msgid "Why do you want to join this hub?"
-msgstr "¿Por qué quiere unirse a este hub?"
-
-#: ../../Zotlabs/Module/Register.php:514
-msgid "This will help to review your registration"
-msgstr "Esto ayudará a revisar su registro"
-
-#: ../../Zotlabs/Module/Register.php:520
-#: ../../Zotlabs/Module/Admin/Site.php:402
+#: ../../Zotlabs/Module/Register.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:404
msgid "Registration"
msgstr "Registro"
-#: ../../Zotlabs/Module/Register.php:528
+#: ../../Zotlabs/Module/Register.php:529
msgid "I have an invite code"
msgstr "Tengo un código de invitación"
-#: ../../Zotlabs/Module/Register.php:575
+#: ../../Zotlabs/Module/Register.php:576
msgid ""
"This site has exceeded the number of allowed daily account registrations."
msgstr "Este sitio ha superado el número permitido de registros diarios de cuentas."
@@ -9881,36 +9861,36 @@ msgstr "Dirección (URL) donde adquirir la aplicación"
msgid "item"
msgstr "elemento"
-#: ../../Zotlabs/Module/Item.php:477 ../../Zotlabs/Module/Pin.php:36
+#: ../../Zotlabs/Module/Item.php:253 ../../Zotlabs/Module/Pin.php:36
msgid "Unable to locate original post."
msgstr "No ha sido posible encontrar la entrada original."
-#: ../../Zotlabs/Module/Item.php:763
+#: ../../Zotlabs/Module/Item.php:539
msgid "Empty post discarded."
msgstr "La entrada vacía ha sido desechada."
-#: ../../Zotlabs/Module/Item.php:1205
+#: ../../Zotlabs/Module/Item.php:1010
msgid "Duplicate post suppressed."
msgstr "Se ha suprimido la entrada duplicada."
-#: ../../Zotlabs/Module/Item.php:1343
+#: ../../Zotlabs/Module/Item.php:1160
msgid "System error. Post not saved."
msgstr "Error del sistema. La entrada no se ha podido salvar."
-#: ../../Zotlabs/Module/Item.php:1377
+#: ../../Zotlabs/Module/Item.php:1200
msgid "Your comment is awaiting approval."
msgstr "Su comentario está pendiente de aprobación."
-#: ../../Zotlabs/Module/Item.php:1514
+#: ../../Zotlabs/Module/Item.php:1337
msgid "Unable to obtain post information from database."
msgstr "No ha sido posible obtener información de la entrada en la base de datos."
-#: ../../Zotlabs/Module/Item.php:1521
+#: ../../Zotlabs/Module/Item.php:1344
#, php-format
msgid "You have reached your limit of %1$.0f top level posts."
msgstr "Ha alcanzado su límite de %1$.0f entradas en la página principal."
-#: ../../Zotlabs/Module/Item.php:1528
+#: ../../Zotlabs/Module/Item.php:1351
#, php-format
msgid "You have reached your limit of %1$.0f webpages."
msgstr "Ha alcanzado su límite de %1$.0f páginas web."
@@ -10099,8 +10079,8 @@ msgid "Website"
msgstr "Sitio web"
#: ../../Zotlabs/Module/Connedit.php:739 ../../Zotlabs/Module/Locs.php:122
-#: ../../Zotlabs/Module/Admin/Channels.php:160
-#: ../../Zotlabs/Module/Profiles.php:468 ../../Zotlabs/Module/Cdav.php:1375
+#: ../../Zotlabs/Module/Admin/Channels.php:182
+#: ../../Zotlabs/Module/Profiles.php:469 ../../Zotlabs/Module/Cdav.php:1375
msgid "Address"
msgstr "Dirección"
@@ -10140,7 +10120,7 @@ msgstr "Provincia, región o estado"
msgid "ZIP Code"
msgstr "Código postal"
-#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:769
+#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:772
#: ../../Zotlabs/Module/Cdav.php:1393
msgid "Country"
msgstr "País"
@@ -10282,35 +10262,35 @@ msgstr "De más antiguo a más nuevo"
msgid "No entries (some entries may be hidden)."
msgstr "Sin entradas (algunas entradas pueden estar ocultas)."
-#: ../../Zotlabs/Module/Profile_photo.php:543
+#: ../../Zotlabs/Module/Profile_photo.php:544
msgid ""
"This profile photo will be visible to anybody on the internet and may be "
"distributed to other websites."
msgstr "Esta foto de perfil será visible para cualquier persona en Internet y podrá ser distribuida a otros sitios web."
-#: ../../Zotlabs/Module/Profile_photo.php:543
+#: ../../Zotlabs/Module/Profile_photo.php:544
msgid ""
"This profile photo will be visible only to channels with permission to view "
"this profile."
msgstr "Esta foto de perfil sólo será visible para los canales con permiso para ver este perfil."
-#: ../../Zotlabs/Module/Profile_photo.php:545
+#: ../../Zotlabs/Module/Profile_photo.php:546
msgid "Use Photo for Profile"
msgstr "Usar la fotografía para el perfil"
-#: ../../Zotlabs/Module/Profile_photo.php:545
+#: ../../Zotlabs/Module/Profile_photo.php:546
msgid "Change Profile Photo"
msgstr "Cambiar la foto del perfil"
-#: ../../Zotlabs/Module/Profile_photo.php:547
+#: ../../Zotlabs/Module/Profile_photo.php:548
msgid "Reset to default"
msgstr "Restablecer los valores por defecto"
-#: ../../Zotlabs/Module/Profile_photo.php:561
+#: ../../Zotlabs/Module/Profile_photo.php:562
msgid "Select existing"
msgstr "Seleccione lo que hay"
-#: ../../Zotlabs/Module/Profile_photo.php:583
+#: ../../Zotlabs/Module/Profile_photo.php:584
msgid "Done editing"
msgstr "Edición completada"
@@ -10328,7 +10308,7 @@ msgid "Do you authorize the app %s to access your channel data?"
msgstr "¿Autoriza a la aplicación %s a acceder a los datos de su canal?"
#: ../../Zotlabs/Module/Authorize.php:33
-#: ../../Zotlabs/Module/Admin/Accounts.php:319
+#: ../../Zotlabs/Module/Admin/Accounts.php:219
msgid "Deny"
msgstr "Rechazar"
@@ -10345,19 +10325,19 @@ msgstr "Visitar el perfil de %s [%s]"
msgid "View Connections"
msgstr "Ver conexiones"
-#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95
+#: ../../Zotlabs/Module/Api.php:76 ../../Zotlabs/Module/Api.php:97
msgid "Authorize application connection"
msgstr "Autorizar una conexión de aplicación"
-#: ../../Zotlabs/Module/Api.php:75
+#: ../../Zotlabs/Module/Api.php:77
msgid "Return to your app and insert this Security Code:"
msgstr "Vuelva a su aplicación e introduzca este código de seguridad: "
-#: ../../Zotlabs/Module/Api.php:85
+#: ../../Zotlabs/Module/Api.php:87
msgid "Please login to continue."
msgstr "Por favor inicie sesión para continuar."
-#: ../../Zotlabs/Module/Api.php:97
+#: ../../Zotlabs/Module/Api.php:99
msgid ""
"Do you want to authorize this application to access your posts and contacts,"
" and/or create new posts for you?"
@@ -10379,7 +10359,7 @@ msgstr "Contenido de la página principal"
msgid "The main page content can not be edited!"
msgstr "El contenido de la página principal no se puede editar."
-#: ../../Zotlabs/Module/Home.php:104
+#: ../../Zotlabs/Module/Home.php:105
#, php-format
msgid "Welcome to %s"
msgstr "Bienvenido a %s"
@@ -10478,11 +10458,11 @@ msgstr "Cuando sea posible, elimine una ubicación iniciando sesión en el sitio
msgid "Use this form to drop the location if the hub is no longer operating."
msgstr "Utilice este formulario para eliminar la dirección si el \"hub\" no está funcionando desde hace tiempo."
-#: ../../Zotlabs/Module/Pubsites.php:26
+#: ../../Zotlabs/Module/Pubsites.php:27
msgid "Public Hubs"
msgstr "Servidores públicos"
-#: ../../Zotlabs/Module/Pubsites.php:29
+#: ../../Zotlabs/Module/Pubsites.php:30
msgid ""
"The listed hubs allow public registration for the $Projectname network. All "
"hubs in the network are interlinked so membership on any of them conveys "
@@ -10491,31 +10471,31 @@ msgid ""
"additional details."
msgstr "Los sitios listados permiten el registro público en la red $Projectname. Todos los sitios de la red están vinculados entre sí, por lo que sus miembros, en ninguno de ellos, indican la pertenencia a la red en su conjunto. Algunos sitios pueden requerir suscripción o proporcionar planes de servicio por niveles. Los mismos hubs <strong>pueden</strong> proporcionar detalles adicionales."
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Hub URL"
msgstr "Dirección del hub"
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Access Type"
msgstr "Tipo de acceso"
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Registration Policy"
msgstr "Normas de registro"
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Stats"
msgstr "Estadísticas"
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Software"
msgstr "Software"
-#: ../../Zotlabs/Module/Pubsites.php:37
+#: ../../Zotlabs/Module/Pubsites.php:38
msgid "Ratings"
msgstr "Valoraciones"
-#: ../../Zotlabs/Module/Pubsites.php:51
+#: ../../Zotlabs/Module/Pubsites.php:52
msgid "Rate"
msgstr "Valorar"
@@ -10634,383 +10614,348 @@ msgstr "Permitir marcadores"
msgid "Not found."
msgstr "No encontrado."
-#: ../../Zotlabs/Module/Admin/Accounts.php:128
-#, php-format
-msgid "%s account blocked/unblocked"
-msgid_plural "%s account blocked/unblocked"
-msgstr[0] "%s cuenta bloqueada/desbloqueada"
-msgstr[1] "%s cuenta bloqueada/desbloqueada"
-msgstr[2] "%s cuenta bloqueada/desbloqueada"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:135
-#, php-format
-msgid "%s account deleted"
-msgid_plural "%s accounts deleted"
-msgstr[0] "%s cuentas eliminadas"
-msgstr[1] "%s cuentas eliminadas"
-msgstr[2] "%s cuentas eliminadas"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:171
+#: ../../Zotlabs/Module/Admin/Accounts.php:71
msgid "Account not found"
msgstr "Cuenta no encontrada"
-#: ../../Zotlabs/Module/Admin/Accounts.php:192
+#: ../../Zotlabs/Module/Admin/Accounts.php:92
#, php-format
msgid "Account '%s' blocked"
msgstr "La cuenta '%s' ha sido bloqueada"
-#: ../../Zotlabs/Module/Admin/Accounts.php:200
+#: ../../Zotlabs/Module/Admin/Accounts.php:100
#, php-format
msgid "Account '%s' unblocked"
msgstr "La cuenta '%s' ha sido desbloqueada"
-#: ../../Zotlabs/Module/Admin/Accounts.php:240
+#: ../../Zotlabs/Module/Admin/Accounts.php:140
msgid "Unverified"
msgstr "Sin verificar"
-#: ../../Zotlabs/Module/Admin/Accounts.php:243
+#: ../../Zotlabs/Module/Admin/Accounts.php:143
msgid "Expired"
msgstr "Caducado/a"
-#: ../../Zotlabs/Module/Admin/Accounts.php:307
-#: ../../Zotlabs/Module/Admin/Themes.php:137
-#: ../../Zotlabs/Module/Admin/Themes.php:171
-#: ../../Zotlabs/Module/Admin/Addons.php:345
-#: ../../Zotlabs/Module/Admin/Addons.php:443
-#: ../../Zotlabs/Module/Admin/Channels.php:145
-#: ../../Zotlabs/Module/Admin/Logs.php:82
-#: ../../Zotlabs/Module/Admin/Site.php:397
-#: ../../Zotlabs/Module/Admin/Security.php:105
-#: ../../Zotlabs/Module/Admin.php:140
+#: ../../Zotlabs/Module/Admin/Accounts.php:207
+#: ../../Zotlabs/Module/Admin/Themes.php:138
+#: ../../Zotlabs/Module/Admin/Themes.php:172
+#: ../../Zotlabs/Module/Admin/Addons.php:124
+#: ../../Zotlabs/Module/Admin/Addons.php:191
+#: ../../Zotlabs/Module/Admin/Channels.php:167
+#: ../../Zotlabs/Module/Admin/Logs.php:83
+#: ../../Zotlabs/Module/Admin/Site.php:399
+#: ../../Zotlabs/Module/Admin/Security.php:106
+#: ../../Zotlabs/Module/Admin.php:142
msgid "Administration"
msgstr "Administración"
-#: ../../Zotlabs/Module/Admin/Accounts.php:310
+#: ../../Zotlabs/Module/Admin/Accounts.php:210
msgid "Show verified registrations"
msgstr "Mostrar registros verificados"
-#: ../../Zotlabs/Module/Admin/Accounts.php:310
+#: ../../Zotlabs/Module/Admin/Accounts.php:210
msgid "Show all registrations"
msgstr "Mostrar todos los registros"
-#: ../../Zotlabs/Module/Admin/Accounts.php:312
+#: ../../Zotlabs/Module/Admin/Accounts.php:212
msgid "Select toggle"
msgstr "Seleccionar alternar"
-#: ../../Zotlabs/Module/Admin/Accounts.php:313
+#: ../../Zotlabs/Module/Admin/Accounts.php:213
msgid "Deny selected"
msgstr "Denegar seleccionado"
-#: ../../Zotlabs/Module/Admin/Accounts.php:314
+#: ../../Zotlabs/Module/Admin/Accounts.php:214
msgid "Approve selected"
msgstr "Aprobar seleccionado"
-#: ../../Zotlabs/Module/Admin/Accounts.php:315
+#: ../../Zotlabs/Module/Admin/Accounts.php:215
msgid "All registrations"
msgstr "Todos los registros"
-#: ../../Zotlabs/Module/Admin/Accounts.php:315
+#: ../../Zotlabs/Module/Admin/Accounts.php:215
msgid "Verified registrations waiting for approval"
msgstr "Registros verificados en espera de aprobación"
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
+#: ../../Zotlabs/Module/Admin/Accounts.php:216
msgid "Request date"
msgstr "Fecha de solicitud"
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
+#: ../../Zotlabs/Module/Admin/Accounts.php:216
msgid "Requests"
msgstr "Solicitudes"
-#: ../../Zotlabs/Module/Admin/Accounts.php:317
+#: ../../Zotlabs/Module/Admin/Accounts.php:217
msgid "No registrations available"
msgstr "No hay registros disponibles"
-#: ../../Zotlabs/Module/Admin/Accounts.php:317
+#: ../../Zotlabs/Module/Admin/Accounts.php:217
msgid "No verified registrations available"
msgstr "No hay registros verificados disponibles"
-#: ../../Zotlabs/Module/Admin/Accounts.php:323
+#: ../../Zotlabs/Module/Admin/Accounts.php:223
msgid "Verified"
msgstr "Verificado/a"
-#: ../../Zotlabs/Module/Admin/Accounts.php:324
+#: ../../Zotlabs/Module/Admin/Accounts.php:224
msgid "Not yet verified"
msgstr "Aún no se ha verificado"
-#: ../../Zotlabs/Module/Admin/Accounts.php:329
+#: ../../Zotlabs/Module/Admin/Accounts.php:229
msgid "ID"
msgstr "ID"
-#: ../../Zotlabs/Module/Admin/Accounts.php:331
+#: ../../Zotlabs/Module/Admin/Accounts.php:231
msgid "All channels"
msgstr "Todos los canales"
-#: ../../Zotlabs/Module/Admin/Accounts.php:332
+#: ../../Zotlabs/Module/Admin/Accounts.php:232
msgid "Register date"
msgstr "Fecha de registro"
-#: ../../Zotlabs/Module/Admin/Accounts.php:333
+#: ../../Zotlabs/Module/Admin/Accounts.php:233
msgid "Last login"
msgstr "Último acceso"
-#: ../../Zotlabs/Module/Admin/Accounts.php:334
+#: ../../Zotlabs/Module/Admin/Accounts.php:234
msgid "Expires"
msgstr "Caduca"
-#: ../../Zotlabs/Module/Admin/Accounts.php:335
-#: ../../Zotlabs/Module/Admin/Account_edit.php:72
+#: ../../Zotlabs/Module/Admin/Accounts.php:235
+#: ../../Zotlabs/Module/Admin/Account_edit.php:77
msgid "Service class"
msgstr "Clase de servicio"
-#: ../../Zotlabs/Module/Admin/Accounts.php:337
+#: ../../Zotlabs/Module/Admin/Accounts.php:237
msgid ""
"Selected accounts will be deleted!\\n\\nEverything these accounts had posted"
" on this site will be permanently deleted!\\n\\nAre you sure?"
msgstr "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"
-#: ../../Zotlabs/Module/Admin/Accounts.php:338
+#: ../../Zotlabs/Module/Admin/Accounts.php:238
msgid ""
"The account {0} will be deleted!\\n\\nEverything this account has posted on "
"this site will be permanently deleted!\\n\\nAre you sure?"
msgstr "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"
-#: ../../Zotlabs/Module/Admin/Accounts.php:347
+#: ../../Zotlabs/Module/Admin/Accounts.php:247
msgid "Message"
msgstr "Mensaje"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:65
+#: ../../Zotlabs/Module/Admin/Accounts.php:366
+#, php-format
+msgid "%s account blocked/unblocked"
+msgid_plural "%s account blocked/unblocked"
+msgstr[0] "%s cuenta bloqueada/desbloqueada"
+msgstr[1] "%s cuenta bloqueada/desbloqueada"
+msgstr[2] "%s cuenta bloqueada/desbloqueada"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:389
+#, php-format
+msgid "%s account deleted"
+msgid_plural "%s accounts deleted"
+msgstr[0] "%s cuentas eliminadas"
+msgstr[1] "%s cuentas eliminadas"
+msgstr[2] "%s cuentas eliminadas"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:66
msgid "Max queueworker threads"
msgstr "Máximo de hilos en la cola"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:67
+#: ../../Zotlabs/Module/Admin/Queueworker.php:68
msgid "Minimum 4, default 4"
msgstr "Mínimo 4, por defecto 4"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:77
+#: ../../Zotlabs/Module/Admin/Queueworker.php:78
msgid "Assume workers dead after"
msgstr "Asumir que los procesos han muerto después de "
-#: ../../Zotlabs/Module/Admin/Queueworker.php:79
+#: ../../Zotlabs/Module/Admin/Queueworker.php:80
msgid "Minimum 120, default 300 seconds"
msgstr "Mínimo de 120 segundos, por defecto, 300"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:91
+#: ../../Zotlabs/Module/Admin/Queueworker.php:92
msgid "Pause before starting next task"
msgstr "Pausa antes de comenzar la siguiente tarea"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:93
+#: ../../Zotlabs/Module/Admin/Queueworker.php:94
msgid "Minimum 100, default 100 microseconds"
msgstr "Mínimo 100, por defecto 100 microsegundos"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:102
+#: ../../Zotlabs/Module/Admin/Queueworker.php:103
msgid "Automatically adjust pause before starting next task"
msgstr "Ajustar automáticamente una pausa antes de comenzar la siguiente tarea"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:111
+#: ../../Zotlabs/Module/Admin/Queueworker.php:112
msgid "Queueworker Settings"
msgstr "Configuración del gestor de procesos de trabajo en cola"
-#: ../../Zotlabs/Module/Admin/Themes.php:26
+#: ../../Zotlabs/Module/Admin/Themes.php:27
msgid "Theme settings updated."
msgstr "Ajustes del tema actualizados."
-#: ../../Zotlabs/Module/Admin/Themes.php:61
+#: ../../Zotlabs/Module/Admin/Themes.php:62
msgid "No themes found."
msgstr "No se han encontrado temas."
-#: ../../Zotlabs/Module/Admin/Themes.php:110
-#: ../../Zotlabs/Module/Admin/Addons.php:314
+#: ../../Zotlabs/Module/Admin/Themes.php:111
+#: ../../Zotlabs/Module/Admin/Addons.php:93
msgid "Disable"
msgstr "Desactivar"
-#: ../../Zotlabs/Module/Admin/Themes.php:112
-#: ../../Zotlabs/Module/Admin/Addons.php:317
+#: ../../Zotlabs/Module/Admin/Themes.php:113
+#: ../../Zotlabs/Module/Admin/Addons.php:96
msgid "Enable"
msgstr "Activar"
-#: ../../Zotlabs/Module/Admin/Themes.php:131
+#: ../../Zotlabs/Module/Admin/Themes.php:132
msgid "Screenshot"
msgstr "Instantánea de pantalla"
-#: ../../Zotlabs/Module/Admin/Themes.php:139
-#: ../../Zotlabs/Module/Admin/Addons.php:347
+#: ../../Zotlabs/Module/Admin/Themes.php:140
+#: ../../Zotlabs/Module/Admin/Addons.php:126
msgid "Toggle"
msgstr "Cambiar"
-#: ../../Zotlabs/Module/Admin/Themes.php:149
-#: ../../Zotlabs/Module/Admin/Addons.php:355
+#: ../../Zotlabs/Module/Admin/Themes.php:150
+#: ../../Zotlabs/Module/Admin/Addons.php:134
msgid "Author: "
msgstr "Autor:"
-#: ../../Zotlabs/Module/Admin/Themes.php:150
-#: ../../Zotlabs/Module/Admin/Addons.php:356
+#: ../../Zotlabs/Module/Admin/Themes.php:151
+#: ../../Zotlabs/Module/Admin/Addons.php:135
msgid "Maintainer: "
msgstr "Mantenedor:"
-#: ../../Zotlabs/Module/Admin/Themes.php:177
+#: ../../Zotlabs/Module/Admin/Themes.php:178
msgid "[Experimental]"
msgstr "[Experimental]"
-#: ../../Zotlabs/Module/Admin/Themes.php:178
+#: ../../Zotlabs/Module/Admin/Themes.php:179
msgid "[Unsupported]"
msgstr "[No soportado]"
-#: ../../Zotlabs/Module/Admin/Addons.php:293
+#: ../../Zotlabs/Module/Admin/Addons.php:72
#, php-format
msgid "Plugin %s disabled."
msgstr "Extensión %s desactivada."
-#: ../../Zotlabs/Module/Admin/Addons.php:298
+#: ../../Zotlabs/Module/Admin/Addons.php:77
#, php-format
msgid "Plugin %s enabled."
msgstr "Extensión %s activada."
-#: ../../Zotlabs/Module/Admin/Addons.php:357
+#: ../../Zotlabs/Module/Admin/Addons.php:136
msgid "Minimum project version: "
msgstr "Versión mínima del proyecto:"
-#: ../../Zotlabs/Module/Admin/Addons.php:358
+#: ../../Zotlabs/Module/Admin/Addons.php:137
msgid "Maximum project version: "
msgstr "Versión máxima del proyecto:"
-#: ../../Zotlabs/Module/Admin/Addons.php:359
+#: ../../Zotlabs/Module/Admin/Addons.php:138
msgid "Minimum PHP version: "
msgstr "Versión mínima de PHP:"
-#: ../../Zotlabs/Module/Admin/Addons.php:360
+#: ../../Zotlabs/Module/Admin/Addons.php:139
msgid "Compatible Server Roles: "
msgstr "Configuraciones compatibles con este servidor:"
-#: ../../Zotlabs/Module/Admin/Addons.php:361
+#: ../../Zotlabs/Module/Admin/Addons.php:140
msgid "Requires: "
msgstr "Se requiere:"
-#: ../../Zotlabs/Module/Admin/Addons.php:362
-#: ../../Zotlabs/Module/Admin/Addons.php:449
+#: ../../Zotlabs/Module/Admin/Addons.php:141
+#: ../../Zotlabs/Module/Admin/Addons.php:197
msgid "Disabled - version incompatibility"
msgstr "Deshabilitado - versiones incompatibles"
-#: ../../Zotlabs/Module/Admin/Addons.php:418
-msgid "Enter the public git repository URL of the addon repo."
-msgstr "Introduzca la URL del repositorio público de git del addon repo."
-
-#: ../../Zotlabs/Module/Admin/Addons.php:419
-msgid "Addon repo git URL"
-msgstr "URL del repositorio git del addon"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:420
-msgid "Custom repo name"
-msgstr "Nombre personalizado del repositorio"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:420
-msgid "(optional)"
-msgstr "(opcional)"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:421
-msgid "Download Addon Repo"
-msgstr "Descargar el repositorio"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:428
-msgid "Install new repo"
-msgstr "Instalar un nuevo repositorio"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:452
-msgid "Manage Repos"
-msgstr "Gestionar los repositorios"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:453
-msgid "Installed Addon Repositories"
-msgstr "Repositorioe de addons instalados"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:454
-msgid "Install a New Addon Repository"
-msgstr "Instalar un nuevo repositorio de addons"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:461
-msgid "Switch branch"
-msgstr "Cambiar la rama"
-
#: ../../Zotlabs/Module/Admin/Features.php:56
#, php-format
msgid "Lock feature %s"
msgstr "Bloquear la funcionalidad %s"
-#: ../../Zotlabs/Module/Admin/Features.php:64
+#: ../../Zotlabs/Module/Admin/Features.php:65
msgid "Manage Additional Features"
msgstr "Gestionar las funcionalidades"
-#: ../../Zotlabs/Module/Admin/Profs.php:89
+#: ../../Zotlabs/Module/Admin/Profs.php:90
msgid "New Profile Field"
msgstr "Nuevo campo en el perfil"
-#: ../../Zotlabs/Module/Admin/Profs.php:90
-#: ../../Zotlabs/Module/Admin/Profs.php:110
+#: ../../Zotlabs/Module/Admin/Profs.php:91
+#: ../../Zotlabs/Module/Admin/Profs.php:111
msgid "Field nickname"
msgstr "Alias del campo"
-#: ../../Zotlabs/Module/Admin/Profs.php:90
-#: ../../Zotlabs/Module/Admin/Profs.php:110
+#: ../../Zotlabs/Module/Admin/Profs.php:91
+#: ../../Zotlabs/Module/Admin/Profs.php:111
msgid "System name of field"
msgstr "Nombre del campo en el sistema"
-#: ../../Zotlabs/Module/Admin/Profs.php:91
-#: ../../Zotlabs/Module/Admin/Profs.php:111
+#: ../../Zotlabs/Module/Admin/Profs.php:92
+#: ../../Zotlabs/Module/Admin/Profs.php:112
msgid "Input type"
msgstr "Tipo de entrada"
-#: ../../Zotlabs/Module/Admin/Profs.php:92
-#: ../../Zotlabs/Module/Admin/Profs.php:112
+#: ../../Zotlabs/Module/Admin/Profs.php:93
+#: ../../Zotlabs/Module/Admin/Profs.php:113
msgid "Field Name"
msgstr "Nombre del campo"
-#: ../../Zotlabs/Module/Admin/Profs.php:92
-#: ../../Zotlabs/Module/Admin/Profs.php:112
+#: ../../Zotlabs/Module/Admin/Profs.php:93
+#: ../../Zotlabs/Module/Admin/Profs.php:113
msgid "Label on profile pages"
msgstr "Etiqueta a mostrar en la página del perfil"
-#: ../../Zotlabs/Module/Admin/Profs.php:93
-#: ../../Zotlabs/Module/Admin/Profs.php:113
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
msgid "Help text"
msgstr "Texto de ayuda"
-#: ../../Zotlabs/Module/Admin/Profs.php:93
-#: ../../Zotlabs/Module/Admin/Profs.php:113
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
msgid "Additional info (optional)"
msgstr "Información adicional (opcional)"
-#: ../../Zotlabs/Module/Admin/Profs.php:103
+#: ../../Zotlabs/Module/Admin/Profs.php:104
msgid "Field definition not found"
msgstr "Definición del campo no encontrada"
-#: ../../Zotlabs/Module/Admin/Profs.php:109
+#: ../../Zotlabs/Module/Admin/Profs.php:110
msgid "Edit Profile Field"
msgstr "Modificar el campo del perfil"
-#: ../../Zotlabs/Module/Admin/Profs.php:169
+#: ../../Zotlabs/Module/Admin/Profs.php:170
msgid "Basic Profile Fields"
msgstr "Campos básicos del perfil"
-#: ../../Zotlabs/Module/Admin/Profs.php:170
+#: ../../Zotlabs/Module/Admin/Profs.php:171
msgid "Advanced Profile Fields"
msgstr "Campos avanzados del perfil"
-#: ../../Zotlabs/Module/Admin/Profs.php:170
+#: ../../Zotlabs/Module/Admin/Profs.php:171
msgid "(In addition to basic fields)"
msgstr "(Además de los campos básicos)"
-#: ../../Zotlabs/Module/Admin/Profs.php:172
+#: ../../Zotlabs/Module/Admin/Profs.php:173
msgid "All available fields"
msgstr "Todos los campos disponibles"
-#: ../../Zotlabs/Module/Admin/Profs.php:173
+#: ../../Zotlabs/Module/Admin/Profs.php:174
msgid "Custom Fields"
msgstr "Campos personalizados"
-#: ../../Zotlabs/Module/Admin/Profs.php:177
+#: ../../Zotlabs/Module/Admin/Profs.php:178
msgid "Create Custom Field"
msgstr "Crear un campo personalizado"
-#: ../../Zotlabs/Module/Admin/Channels.php:31
+#: ../../Zotlabs/Module/Admin/Channels.php:28
+#: ../../Zotlabs/Module/Admin/Channels.php:80
+msgid "Channel not found"
+msgstr "Canal no encontrado"
+
+#: ../../Zotlabs/Module/Admin/Channels.php:48
#, php-format
msgid "%s channel censored/uncensored"
msgid_plural "%s channels censored/uncensored"
@@ -11018,7 +10963,7 @@ msgstr[0] "%s canales censurados/no censurados"
msgstr[1] "%s canales censurados/no censurados"
msgstr[2] "%s canales censurados/no censurados"
-#: ../../Zotlabs/Module/Admin/Channels.php:40
+#: ../../Zotlabs/Module/Admin/Channels.php:57
#, php-format
msgid "%s channel code allowed/disallowed"
msgid_plural "%s channels code allowed/disallowed"
@@ -11026,7 +10971,7 @@ msgstr[0] "%s código permitido/no permitido al canal"
msgstr[1] "%s código permitido/no permitido al canal"
msgstr[2] "%s código permitido/no permitido al canal"
-#: ../../Zotlabs/Module/Admin/Channels.php:46
+#: ../../Zotlabs/Module/Admin/Channels.php:63
#, php-format
msgid "%s channel deleted"
msgid_plural "%s channels deleted"
@@ -11034,93 +10979,89 @@ msgstr[0] "%s canales eliminados"
msgstr[1] "%s canales eliminados"
msgstr[2] "%s canales eliminados"
-#: ../../Zotlabs/Module/Admin/Channels.php:65
-msgid "Channel not found"
-msgstr "Canal no encontrado"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:75
+#: ../../Zotlabs/Module/Admin/Channels.php:90
#, php-format
msgid "Channel '%s' deleted"
msgstr "Canal '%s' eliminado"
-#: ../../Zotlabs/Module/Admin/Channels.php:87
+#: ../../Zotlabs/Module/Admin/Channels.php:109
#, php-format
msgid "Channel '%s' censored"
msgstr "Canal '%s' censurado"
-#: ../../Zotlabs/Module/Admin/Channels.php:87
+#: ../../Zotlabs/Module/Admin/Channels.php:109
#, php-format
msgid "Channel '%s' uncensored"
msgstr "Canal '%s' no censurado"
-#: ../../Zotlabs/Module/Admin/Channels.php:98
+#: ../../Zotlabs/Module/Admin/Channels.php:120
#, php-format
msgid "Channel '%s' code allowed"
msgstr "Código permitido al canal '%s'"
-#: ../../Zotlabs/Module/Admin/Channels.php:98
+#: ../../Zotlabs/Module/Admin/Channels.php:120
#, php-format
msgid "Channel '%s' code disallowed"
msgstr "Código no permitido al canal '%s'"
-#: ../../Zotlabs/Module/Admin/Channels.php:148
+#: ../../Zotlabs/Module/Admin/Channels.php:170
msgid "select all"
msgstr "seleccionar todo"
-#: ../../Zotlabs/Module/Admin/Channels.php:150
+#: ../../Zotlabs/Module/Admin/Channels.php:172
msgid "Censor"
msgstr "Censurar"
-#: ../../Zotlabs/Module/Admin/Channels.php:151
+#: ../../Zotlabs/Module/Admin/Channels.php:173
msgid "Uncensor"
msgstr "No censurar"
-#: ../../Zotlabs/Module/Admin/Channels.php:152
+#: ../../Zotlabs/Module/Admin/Channels.php:174
msgid "Allow Code"
msgstr "Permitir código"
-#: ../../Zotlabs/Module/Admin/Channels.php:153
+#: ../../Zotlabs/Module/Admin/Channels.php:175
msgid "Disallow Code"
msgstr "No permitir código"
-#: ../../Zotlabs/Module/Admin/Channels.php:158
+#: ../../Zotlabs/Module/Admin/Channels.php:180
msgid "UID"
msgstr "UID"
-#: ../../Zotlabs/Module/Admin/Channels.php:162
+#: ../../Zotlabs/Module/Admin/Channels.php:184
msgid ""
"Selected channels will be deleted!\\n\\nEverything that was posted in these "
"channels on this site will be permanently deleted!\\n\\nAre you sure?"
msgstr "Los canales seleccionados se eliminarán!\\n\\nTodo lo publicado por estos canales en este sitio se borrarán definitivamente!\\n\\n¿Está seguro de querer hacerlo?"
-#: ../../Zotlabs/Module/Admin/Channels.php:163
+#: ../../Zotlabs/Module/Admin/Channels.php:185
msgid ""
"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
"channel on this site will be permanently deleted!\\n\\nAre you sure?"
msgstr "El canal {0} va a ser eliminado!\\n\\nTodo lo publicado por el canal en este sitio se borrará definitivamente!\\n\\n¿Está seguro de querer hacerlo?"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:29
+#: ../../Zotlabs/Module/Admin/Account_edit.php:34
#, php-format
msgid "Password changed for account %d."
msgstr "Ha cambiado la contraseña para la cuenta %d."
-#: ../../Zotlabs/Module/Admin/Account_edit.php:46
+#: ../../Zotlabs/Module/Admin/Account_edit.php:51
msgid "Account settings updated."
msgstr "Se han actualizado los ajustes de la cuenta."
-#: ../../Zotlabs/Module/Admin/Account_edit.php:68
+#: ../../Zotlabs/Module/Admin/Account_edit.php:73
msgid "Account Edit"
msgstr "Editar la cuenta"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:69
+#: ../../Zotlabs/Module/Admin/Account_edit.php:74
msgid "New Password"
msgstr "Nueva contraseña"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:70
+#: ../../Zotlabs/Module/Admin/Account_edit.php:75
msgid "New Password again"
msgstr "Nueva contraseña otra vez"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:71
+#: ../../Zotlabs/Module/Admin/Account_edit.php:76
msgid "Account language (for emails)"
msgstr "Idioma de la cuenta (para los correos electrónicos)"
@@ -11187,29 +11128,29 @@ msgstr "Intentar ejecutar este paso de actualización automáticamente"
msgid "No failed updates."
msgstr "No ha fallado ninguna actualización."
-#: ../../Zotlabs/Module/Admin/Logs.php:28
+#: ../../Zotlabs/Module/Admin/Logs.php:29
msgid "Log settings updated."
msgstr "Actualizado el informe de configuraciones."
-#: ../../Zotlabs/Module/Admin/Logs.php:85
+#: ../../Zotlabs/Module/Admin/Logs.php:86
msgid "Clear"
msgstr "Vaciar"
-#: ../../Zotlabs/Module/Admin/Logs.php:91
+#: ../../Zotlabs/Module/Admin/Logs.php:92
msgid "Debugging"
msgstr "Depuración"
-#: ../../Zotlabs/Module/Admin/Logs.php:92
+#: ../../Zotlabs/Module/Admin/Logs.php:93
msgid "Log file"
msgstr "Fichero de informe"
-#: ../../Zotlabs/Module/Admin/Logs.php:92
+#: ../../Zotlabs/Module/Admin/Logs.php:93
msgid ""
"Must be writable by web server. Relative to your top-level webserver "
"directory."
msgstr "Debe tener permisos de escritura por el servidor web. La ruta es relativa al directorio web principal."
-#: ../../Zotlabs/Module/Admin/Logs.php:93
+#: ../../Zotlabs/Module/Admin/Logs.php:94
msgid "Log level"
msgstr "Nivel de depuración"
@@ -11241,672 +11182,672 @@ msgstr "Vaciar la cola para este servidor"
msgid "Last known contact"
msgstr "Último contacto conocido"
-#: ../../Zotlabs/Module/Admin/Site.php:111
+#: ../../Zotlabs/Module/Admin/Site.php:114
msgid "Invalid input"
msgstr "Entrada no válida"
-#: ../../Zotlabs/Module/Admin/Site.php:131
+#: ../../Zotlabs/Module/Admin/Site.php:134
msgid "Errors"
msgstr "Errores"
-#: ../../Zotlabs/Module/Admin/Site.php:219
+#: ../../Zotlabs/Module/Admin/Site.php:221
msgid "Site settings updated."
msgstr "Ajustes del sitio actualizados."
-#: ../../Zotlabs/Module/Admin/Site.php:242
-#: ../../Zotlabs/Module/Settings/Display.php:116
+#: ../../Zotlabs/Module/Admin/Site.php:244
+#: ../../Zotlabs/Module/Settings/Display.php:117
#, php-format
msgid "%s - (Incompatible)"
msgstr "%s - (Incompatible)"
-#: ../../Zotlabs/Module/Admin/Site.php:249
+#: ../../Zotlabs/Module/Admin/Site.php:251
msgid "mobile"
msgstr "móvil"
-#: ../../Zotlabs/Module/Admin/Site.php:251
+#: ../../Zotlabs/Module/Admin/Site.php:253
msgid "experimental"
msgstr "experimental"
-#: ../../Zotlabs/Module/Admin/Site.php:253
+#: ../../Zotlabs/Module/Admin/Site.php:255
msgid "unsupported"
msgstr "no soportado"
-#: ../../Zotlabs/Module/Admin/Site.php:306
+#: ../../Zotlabs/Module/Admin/Site.php:308
msgid "Yes - with approval"
msgstr "Sí - con aprobación"
-#: ../../Zotlabs/Module/Admin/Site.php:314
+#: ../../Zotlabs/Module/Admin/Site.php:316
msgid "My site is not a public server"
msgstr "Mi sitio no es un servidor público"
-#: ../../Zotlabs/Module/Admin/Site.php:315
+#: ../../Zotlabs/Module/Admin/Site.php:317
msgid "My site has paid access only"
msgstr "Mi sitio es un servicio de pago"
-#: ../../Zotlabs/Module/Admin/Site.php:316
+#: ../../Zotlabs/Module/Admin/Site.php:318
msgid "My site has free access only"
msgstr "Mi sitio es un servicio gratuito"
-#: ../../Zotlabs/Module/Admin/Site.php:317
+#: ../../Zotlabs/Module/Admin/Site.php:319
msgid "My site offers free accounts with optional paid upgrades"
msgstr "Mi sitio ofrece cuentas gratuitas con opciones extra de pago"
-#: ../../Zotlabs/Module/Admin/Site.php:335
+#: ../../Zotlabs/Module/Admin/Site.php:337
msgid "Default permission role for new accounts"
msgstr "Permisos de rol por defecto para las nuevas cuentas"
-#: ../../Zotlabs/Module/Admin/Site.php:335
+#: ../../Zotlabs/Module/Admin/Site.php:337
msgid ""
"This role will be used for the first channel created after registration."
msgstr "Este rol se utilizará para el primer canal creado después del registro."
-#: ../../Zotlabs/Module/Admin/Site.php:342 ../../Zotlabs/Module/Invite.php:410
+#: ../../Zotlabs/Module/Admin/Site.php:344 ../../Zotlabs/Module/Invite.php:411
msgid "Minute(s)"
msgstr "Minuto(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:343 ../../Zotlabs/Module/Invite.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:345 ../../Zotlabs/Module/Invite.php:412
msgid "Hour(s)"
msgstr "Hora(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:344 ../../Zotlabs/Module/Invite.php:412
+#: ../../Zotlabs/Module/Admin/Site.php:346 ../../Zotlabs/Module/Invite.php:413
msgid "Day(s)"
msgstr "Día(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:345
+#: ../../Zotlabs/Module/Admin/Site.php:347
msgid "Week(s)"
msgstr "Semana(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:346
+#: ../../Zotlabs/Module/Admin/Site.php:348
msgid "Month(s)"
msgstr "Mes(Meses)"
-#: ../../Zotlabs/Module/Admin/Site.php:347
+#: ../../Zotlabs/Module/Admin/Site.php:349
msgid "Year(s)"
msgstr "Año(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:355
+#: ../../Zotlabs/Module/Admin/Site.php:357
msgid "Register verification delay"
msgstr "Retraso en la verificación del registro"
-#: ../../Zotlabs/Module/Admin/Site.php:358
+#: ../../Zotlabs/Module/Admin/Site.php:360
msgid "Time to wait before a registration can be verified"
msgstr "Tiempo de espera para verificar un registro "
-#: ../../Zotlabs/Module/Admin/Site.php:361
-#: ../../Zotlabs/Module/Admin/Site.php:383 ../../Zotlabs/Module/Invite.php:421
+#: ../../Zotlabs/Module/Admin/Site.php:363
+#: ../../Zotlabs/Module/Admin/Site.php:385 ../../Zotlabs/Module/Invite.php:422
msgid "duration up from now"
msgstr "duración a partir de ahora "
-#: ../../Zotlabs/Module/Admin/Site.php:377
+#: ../../Zotlabs/Module/Admin/Site.php:379
msgid "Register verification expiration time"
msgstr "Tiempo de caducidad de la verificación del registro "
-#: ../../Zotlabs/Module/Admin/Site.php:380
+#: ../../Zotlabs/Module/Admin/Site.php:382
msgid "Time before an unverified registration will expire"
msgstr "Tiempo antes de que caduque un registro no verificado "
-#: ../../Zotlabs/Module/Admin/Site.php:403
+#: ../../Zotlabs/Module/Admin/Site.php:405
msgid "File upload"
msgstr "Subir fichero"
-#: ../../Zotlabs/Module/Admin/Site.php:404
+#: ../../Zotlabs/Module/Admin/Site.php:406
msgid "Policies"
msgstr "Políticas"
-#: ../../Zotlabs/Module/Admin/Site.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:413
msgid "Banner/Logo"
msgstr "Banner/Logo"
-#: ../../Zotlabs/Module/Admin/Site.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:413
msgid "Unfiltered HTML/CSS/JS is allowed"
msgstr "Se permite HTML/CSS/JS sin filtrar"
-#: ../../Zotlabs/Module/Admin/Site.php:412
+#: ../../Zotlabs/Module/Admin/Site.php:414
msgid "Administrator Information"
msgstr "Información del Administrador"
-#: ../../Zotlabs/Module/Admin/Site.php:412
+#: ../../Zotlabs/Module/Admin/Site.php:414
msgid ""
"Contact information for site administrators. Displayed on siteinfo page. "
"BBCode can be used here"
msgstr "Información de contacto de los administradores del sitio. Visible en la página \"siteinfo\". Se puede usar BBCode"
-#: ../../Zotlabs/Module/Admin/Site.php:413
-#: ../../Zotlabs/Module/Siteinfo.php:24
+#: ../../Zotlabs/Module/Admin/Site.php:415
+#: ../../Zotlabs/Module/Siteinfo.php:25
msgid "Site Information"
msgstr "Información sobre el sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:413
+#: ../../Zotlabs/Module/Admin/Site.php:415
msgid ""
"Publicly visible description of this site. Displayed on siteinfo page. "
"BBCode can be used here"
msgstr "Descripción pública de este sitio. Visible en la página \"siteinfo\". Se puede usar BBCode"
-#: ../../Zotlabs/Module/Admin/Site.php:414
+#: ../../Zotlabs/Module/Admin/Site.php:416
msgid "System theme"
msgstr "Tema gráfico del sistema"
-#: ../../Zotlabs/Module/Admin/Site.php:414
+#: ../../Zotlabs/Module/Admin/Site.php:416
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
msgstr "Tema del sistema por defecto - se puede cambiar por cada perfil de usuario - <a href='#' id='cnftheme'>modificar los ajustes del tema</a>"
-#: ../../Zotlabs/Module/Admin/Site.php:417
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid "Allow Feeds as Connections"
msgstr "Permitir contenidos RSS como conexiones"
-#: ../../Zotlabs/Module/Admin/Site.php:417
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid "(Heavy system resource usage)"
msgstr "(Uso intenso de los recursos del sistema)"
-#: ../../Zotlabs/Module/Admin/Site.php:418
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid "Maximum image size"
msgstr "Tamaño máximo de la imagen"
-#: ../../Zotlabs/Module/Admin/Site.php:418
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr "Tamaño máximo en bytes de la imagen subida. Por defecto, es 0, lo que significa que no hay límites."
-#: ../../Zotlabs/Module/Admin/Site.php:419
+#: ../../Zotlabs/Module/Admin/Site.php:421
msgid "Minimum age"
msgstr "Edad mínima"
-#: ../../Zotlabs/Module/Admin/Site.php:419
+#: ../../Zotlabs/Module/Admin/Site.php:421
msgid "Minimum age (in years) for who may register on this site."
msgstr "Edad mínima (en años) para poder registrarse en este sitio."
-#: ../../Zotlabs/Module/Admin/Site.php:420
+#: ../../Zotlabs/Module/Admin/Site.php:422
msgid "Which best describes the types of account offered by this hub?"
msgstr "¿Cómo describiría el tipo de servicio ofrecido por este servidor?"
-#: ../../Zotlabs/Module/Admin/Site.php:420
+#: ../../Zotlabs/Module/Admin/Site.php:422
msgid "This is displayed on the public server site list."
msgstr "Esto se muestra en la lista de sitios de servidores públicos."
-#: ../../Zotlabs/Module/Admin/Site.php:426
+#: ../../Zotlabs/Module/Admin/Site.php:428
msgid "Register text"
msgstr "Texto del registro"
-#: ../../Zotlabs/Module/Admin/Site.php:428
+#: ../../Zotlabs/Module/Admin/Site.php:430
msgid "This text will be displayed prominently at the registration page"
msgstr "Este texto se mostrará de forma destacada en la página de registro "
-#: ../../Zotlabs/Module/Admin/Site.php:432
+#: ../../Zotlabs/Module/Admin/Site.php:434
msgid "Does this site allow new member registration?"
msgstr "¿Debe este sitio permitir el registro de nuevos miembros?"
-#: ../../Zotlabs/Module/Admin/Site.php:439
+#: ../../Zotlabs/Module/Admin/Site.php:441
msgid "Configure the registration open days/hours"
msgstr "Configurar los días/horas de apertura del registro"
-#: ../../Zotlabs/Module/Admin/Site.php:441
+#: ../../Zotlabs/Module/Admin/Site.php:443
msgid "Empty or '-:-' value will keep registration open 24/7 (default)"
msgstr "El valor vacío o \"-:-\" mantendrá el registro abierto 24/7 (por defecto)"
-#: ../../Zotlabs/Module/Admin/Site.php:442
+#: ../../Zotlabs/Module/Admin/Site.php:444
msgid ""
"Weekdays and hours must be separated by colon ':', From-To ranges with a "
"dash `-` example: 1:800-1200"
msgstr "Los días de la semana y las horas deben separarse con dos puntos ':', los rangos Desde-Hasta con un guión `-` ejemplo: 1:800-1200"
-#: ../../Zotlabs/Module/Admin/Site.php:443
+#: ../../Zotlabs/Module/Admin/Site.php:445
msgid ""
"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 "
"2:900-1700"
msgstr "Los pares día de la semana:hora deben estar separados por un espacio ' ' ejemplo: 1:900-1700 2:900-1700"
-#: ../../Zotlabs/Module/Admin/Site.php:444
+#: ../../Zotlabs/Module/Admin/Site.php:446
msgid ""
"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 "
"or 1-2,4-5:900-1700"
msgstr "Los rangos desde-hasta deben estar separados por comas ',' ejemplo: 1:800-1200,1300-1700 o 1-2,4-5:900-1700"
-#: ../../Zotlabs/Module/Admin/Site.php:445
+#: ../../Zotlabs/Module/Admin/Site.php:447
msgid "Advanced examples:"
msgstr "Ejemplos avanzados: "
-#: ../../Zotlabs/Module/Admin/Site.php:445
-#: ../../Zotlabs/Module/Settings/Channel.php:183
+#: ../../Zotlabs/Module/Admin/Site.php:447
+#: ../../Zotlabs/Module/Settings/Channel.php:184
msgid "or"
msgstr "o"
-#: ../../Zotlabs/Module/Admin/Site.php:446
+#: ../../Zotlabs/Module/Admin/Site.php:448
msgid "Check your configuration"
msgstr "Compruebe su configuración"
-#: ../../Zotlabs/Module/Admin/Site.php:450
+#: ../../Zotlabs/Module/Admin/Site.php:452
msgid "Max account registrations per day"
msgstr "Máximo de registros de cuentas por día "
-#: ../../Zotlabs/Module/Admin/Site.php:452
+#: ../../Zotlabs/Module/Admin/Site.php:454
msgid "Unlimited if zero or no value - default 50"
msgstr "Ilimitado si es cero o sin valor - por defecto 50"
-#: ../../Zotlabs/Module/Admin/Site.php:456
+#: ../../Zotlabs/Module/Admin/Site.php:458
msgid "Max account registrations from same IP"
msgstr "Máximo de registros de cuentas desde la misma IP"
-#: ../../Zotlabs/Module/Admin/Site.php:458
+#: ../../Zotlabs/Module/Admin/Site.php:460
msgid "Unlimited if zero or no value - default 3"
msgstr "Ilimitado si es cero o sin valor - por defecto 3"
-#: ../../Zotlabs/Module/Admin/Site.php:464
+#: ../../Zotlabs/Module/Admin/Site.php:466
msgid "Auto channel create"
msgstr "Creación automática de canales"
-#: ../../Zotlabs/Module/Admin/Site.php:466
+#: ../../Zotlabs/Module/Admin/Site.php:468
msgid ""
"If disabled the channel will be created in a separate step during the "
"registration process"
msgstr "Si se desactiva, el canal se creará en un paso separado durante el proceso de registro"
-#: ../../Zotlabs/Module/Admin/Site.php:470
+#: ../../Zotlabs/Module/Admin/Site.php:472
msgid "Require invite code"
msgstr "Solicitar código de invitación"
-#: ../../Zotlabs/Module/Admin/Site.php:475
+#: ../../Zotlabs/Module/Admin/Site.php:477
msgid "Allow invite code"
msgstr "Permitir código de invitación"
-#: ../../Zotlabs/Module/Admin/Site.php:480
+#: ../../Zotlabs/Module/Admin/Site.php:482
msgid "Require email address"
msgstr "Solicitar dirección de correo electrónico"
-#: ../../Zotlabs/Module/Admin/Site.php:482
+#: ../../Zotlabs/Module/Admin/Site.php:484
msgid "The provided email address will be verified (recommended)"
msgstr "La dirección de correo electrónico proporcionada será verificada (recomendado)"
-#: ../../Zotlabs/Module/Admin/Site.php:486
+#: ../../Zotlabs/Module/Admin/Site.php:488
msgid "Abandon account after x days"
msgstr "Abandonar la cuenta después de x días"
-#: ../../Zotlabs/Module/Admin/Site.php:488
+#: ../../Zotlabs/Module/Admin/Site.php:490
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo."
-#: ../../Zotlabs/Module/Admin/Site.php:493
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid "Site homepage to show visitors (default: login box)"
msgstr "Página personal que se mostrará a los visitantes (por defecto: la página de identificación)"
-#: ../../Zotlabs/Module/Admin/Site.php:493
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid ""
"example: 'pubstream' to show public stream, 'page/sys/home' to show a system"
" webpage called 'home' or 'include:home.html' to include a file."
msgstr "ejemplo: 'pubstream' para mostrar el stream público, 'page/sys/home' para mostrar una página web del sistema llamada 'home' o 'include:home.html' para incluir un archivo."
-#: ../../Zotlabs/Module/Admin/Site.php:494
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid "Preserve site homepage URL"
msgstr "Preservar la dirección de la página personal"
-#: ../../Zotlabs/Module/Admin/Site.php:494
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid ""
"Present the site homepage in a frame at the original location instead of "
"redirecting"
msgstr "Presenta la página personal del sitio en un marco en la ubicación original, en vez de redirigirla."
-#: ../../Zotlabs/Module/Admin/Site.php:495
+#: ../../Zotlabs/Module/Admin/Site.php:497
msgid "Allowed friend domains"
msgstr "Dominios amigos permitidos"
-#: ../../Zotlabs/Module/Admin/Site.php:495
+#: ../../Zotlabs/Module/Admin/Site.php:497
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio."
-#: ../../Zotlabs/Module/Admin/Site.php:496
+#: ../../Zotlabs/Module/Admin/Site.php:498
msgid "Force publish"
msgstr "Forzar la publicación"
-#: ../../Zotlabs/Module/Admin/Site.php:496
+#: ../../Zotlabs/Module/Admin/Site.php:498
msgid ""
"Check to force all profiles on this site to be listed in the site directory"
msgstr "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio."
-#: ../../Zotlabs/Module/Admin/Site.php:497
+#: ../../Zotlabs/Module/Admin/Site.php:499
msgid "Enable public stream"
msgstr "Habilitar el \"stream\" público"
-#: ../../Zotlabs/Module/Admin/Site.php:497
+#: ../../Zotlabs/Module/Admin/Site.php:499
msgid "Enable the public stream. Warning: this content is unmoderated"
msgstr "Habilitar el \"stream\" público. Advertencia: este contenido no está moderado"
-#: ../../Zotlabs/Module/Admin/Site.php:498
+#: ../../Zotlabs/Module/Admin/Site.php:500
msgid "Site only public stream"
msgstr "Solo contenido público en este sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:498
+#: ../../Zotlabs/Module/Admin/Site.php:500
msgid "Restrict the public stream to content originating at this site"
msgstr "Restringir el \"stream\" público a los contenidos originados en este sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:499
+#: ../../Zotlabs/Module/Admin/Site.php:501
msgid "Allow anybody on the internet to access the public streams"
msgstr "Permitir que cualquiera en Internet pueda acceder a los \"streams\" públicos"
-#: ../../Zotlabs/Module/Admin/Site.php:499
+#: ../../Zotlabs/Module/Admin/Site.php:501
msgid "Disable to require authentication before viewing"
msgstr "Desactivar para requerir autenticación antes de ver"
-#: ../../Zotlabs/Module/Admin/Site.php:500
+#: ../../Zotlabs/Module/Admin/Site.php:502
msgid "Only import Public stream posts with this text"
msgstr "Importar solo entradas del stream púlbico con este texto "
-#: ../../Zotlabs/Module/Admin/Site.php:501
+#: ../../Zotlabs/Module/Admin/Site.php:503
msgid "Do not import Public stream posts with this text"
msgstr "No importar entradas del stream público con este texto "
-#: ../../Zotlabs/Module/Admin/Site.php:504
+#: ../../Zotlabs/Module/Admin/Site.php:506
msgid "Login on Homepage"
msgstr "Iniciar sesión en la página personal"
-#: ../../Zotlabs/Module/Admin/Site.php:504
+#: ../../Zotlabs/Module/Admin/Site.php:506
msgid ""
"Present a login box to visitors on the home page if no other content has "
"been configured."
msgstr "Presentar a los visitantes una casilla de identificación en la página de inicio, si no se ha configurado otro tipo de contenido."
-#: ../../Zotlabs/Module/Admin/Site.php:505
+#: ../../Zotlabs/Module/Admin/Site.php:507
msgid "Enable context help"
msgstr "Habilitar la ayuda contextual"
-#: ../../Zotlabs/Module/Admin/Site.php:505
+#: ../../Zotlabs/Module/Admin/Site.php:507
msgid ""
"Display contextual help for the current page when the help button is "
"pressed."
msgstr "Ver la ayuda contextual para la página actual cuando se pulse el botón de Ayuda."
-#: ../../Zotlabs/Module/Admin/Site.php:507
+#: ../../Zotlabs/Module/Admin/Site.php:509
msgid "Reply-to email address for system generated email."
msgstr "Dirección de respuesta para el correo electrónico generado por el sistema."
-#: ../../Zotlabs/Module/Admin/Site.php:508
+#: ../../Zotlabs/Module/Admin/Site.php:510
msgid "Sender (From) email address for system generated email."
msgstr "Dirección del remitente (From) para el correo electrónico generado por el sistema."
-#: ../../Zotlabs/Module/Admin/Site.php:509
+#: ../../Zotlabs/Module/Admin/Site.php:511
msgid "Name of email sender for system generated email."
msgstr "Nombre del remitente del correo electrónico generado por el sistema."
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:513
msgid "Directory Server URL"
msgstr "URL del servidor de directorio"
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:513
msgid "Default directory server"
msgstr "Servidor de directorio predeterminado"
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:515
msgid "Enable SSE Notifications"
msgstr "Habilitar notificaciones SSE"
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:515
msgid ""
"If disabled, traditional polling will be used. Warning: this setting might "
"not be suited for shared hosting"
msgstr "Si está desactivado, se usará el sistema de votación tradicional. Advertencia: esta configuración podría no ser adecuada para el alojamiento compartido"
-#: ../../Zotlabs/Module/Admin/Site.php:515
+#: ../../Zotlabs/Module/Admin/Site.php:517
msgid "Proxy user"
msgstr "Usuario del proxy"
-#: ../../Zotlabs/Module/Admin/Site.php:516
+#: ../../Zotlabs/Module/Admin/Site.php:518
msgid "Proxy URL"
msgstr "Dirección del proxy"
-#: ../../Zotlabs/Module/Admin/Site.php:517
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid "Network timeout"
msgstr "Tiempo de espera de la red"
-#: ../../Zotlabs/Module/Admin/Site.php:517
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr "Valor en segundos. Poner a 0 para que no haya tiempo límite (no recomendado)"
-#: ../../Zotlabs/Module/Admin/Site.php:518
+#: ../../Zotlabs/Module/Admin/Site.php:520
msgid "Delivery interval"
msgstr "Intervalo de entrega"
-#: ../../Zotlabs/Module/Admin/Site.php:518
+#: ../../Zotlabs/Module/Admin/Site.php:520
msgid ""
"Delay background delivery processes by this many seconds to reduce system "
"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
"for large dedicated servers."
msgstr "Retrasar los procesos de transmisión en segundo plano por esta cantidad de segundos para reducir la carga del sistema. Recomendado: 4-5 para sitios compartidos, 2-3 para servidores virtuales privados, 0-1 para grandes servidores dedicados."
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:521
msgid "Deliveries per process"
msgstr "Intentos de envío por proceso"
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:521
msgid ""
"Number of deliveries to attempt in a single operating system process. Adjust"
" if necessary to tune system performance. Recommend: 1-5."
msgstr "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5."
-#: ../../Zotlabs/Module/Admin/Site.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid "Poll interval"
msgstr "Intervalo máximo de tiempo entre dos mensajes sucesivos"
-#: ../../Zotlabs/Module/Admin/Site.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid ""
"Delay background polling processes by this many seconds to reduce system "
"load. If 0, use delivery interval."
msgstr "Retrasar el intervalo de envío en segundo plano, en esta cantidad de segundos, para reducir la carga del sistema. Si es 0, usar el intervalo de entrega."
-#: ../../Zotlabs/Module/Admin/Site.php:522
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid "Path to ImageMagick convert program"
msgstr "Ruta al programa de conversión de ImageMagick"
-#: ../../Zotlabs/Module/Admin/Site.php:522
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid ""
"If set, use this program to generate photo thumbnails for huge images ( > "
"4000 pixels in either dimension), otherwise memory exhaustion may occur. "
"Example: /usr/bin/convert"
msgstr "Si está configurado, utilice este programa para generar miniaturas de fotos para imágenes de gran tamaño ( > 4000 píxeles en cualquiera de las dos dimensiones), de lo contrario se puede agotar la memoria. Ejemplo: /usr/bin/convert"
-#: ../../Zotlabs/Module/Admin/Site.php:523
+#: ../../Zotlabs/Module/Admin/Site.php:525
msgid "Maximum Load Average"
msgstr "Carga media máxima"
-#: ../../Zotlabs/Module/Admin/Site.php:523
+#: ../../Zotlabs/Module/Admin/Site.php:525
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default 50."
msgstr "Carga máxima del sistema antes de que los procesos de entrega y envío se hayan retardado - por defecto, 50."
-#: ../../Zotlabs/Module/Admin/Site.php:524
+#: ../../Zotlabs/Module/Admin/Site.php:526
msgid "Expiration period in days for imported (grid/network) content"
msgstr "Caducidad del contenido importado de otros sitios (en días)"
-#: ../../Zotlabs/Module/Admin/Site.php:524
+#: ../../Zotlabs/Module/Admin/Site.php:526
msgid "0 for no expiration of imported content"
msgstr "0 para que no caduque el contenido importado"
-#: ../../Zotlabs/Module/Admin/Site.php:525
+#: ../../Zotlabs/Module/Admin/Site.php:527
msgid ""
"Do not expire any posts which have comments less than this many days ago"
msgstr "No caduque ningún mensaje que tenga menos comentarios que este hace muchos días"
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:528
msgid ""
"Public servers: Optional landing (marketing) webpage for new registrants"
msgstr "Servidores públicos: Página web de acogida (marketing) opcional para nuevos registros"
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:528
#, php-format
msgid "Create this page first. Default is %s/register"
msgstr "Crear esta página primero. Por defecto es %s/register"
-#: ../../Zotlabs/Module/Admin/Site.php:527
+#: ../../Zotlabs/Module/Admin/Site.php:529
msgid "Page to display after creating a new channel"
msgstr "Página a mostrar después de la creación de un nuevo canal"
-#: ../../Zotlabs/Module/Admin/Site.php:527
+#: ../../Zotlabs/Module/Admin/Site.php:529
msgid "Default: profiles"
msgstr "Perfiles predeterminados"
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:530
msgid "Optional: site location"
msgstr "Opcional: ubicación del sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:530
msgid "Region or country"
msgstr "Región o país"
-#: ../../Zotlabs/Module/Admin/Site.php:613
-#: ../../Zotlabs/Module/Admin/Site.php:614
+#: ../../Zotlabs/Module/Admin/Site.php:615
+#: ../../Zotlabs/Module/Admin/Site.php:616
msgid "Invalid 24h time value (hhmm/hmm)"
msgstr "Valor de tiempo de 24h no válido (hhmm/hmm)"
-#: ../../Zotlabs/Module/Admin/Security.php:96
+#: ../../Zotlabs/Module/Admin/Security.php:97
msgid ""
"By default, unfiltered HTML is allowed in embedded media. This is inherently"
" insecure."
msgstr "De forma predeterminada, el HTML sin filtrar está permitido en el contenido multimedia incorporado en una publicación. Esto es siempre inseguro."
-#: ../../Zotlabs/Module/Admin/Security.php:99
+#: ../../Zotlabs/Module/Admin/Security.php:100
msgid ""
"The recommended setting is to only allow unfiltered HTML from the following "
"sites:"
msgstr "La configuración recomendada es que sólo se permita HTML sin filtrar desde los siguientes sitios: "
-#: ../../Zotlabs/Module/Admin/Security.php:100
+#: ../../Zotlabs/Module/Admin/Security.php:101
msgid ""
"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br"
" />https://vimeo.com/<br />https://soundcloud.com/<br />"
msgstr "https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
-#: ../../Zotlabs/Module/Admin/Security.php:101
+#: ../../Zotlabs/Module/Admin/Security.php:102
msgid ""
"All other embedded content will be filtered, <strong>unless</strong> "
"embedded content from that site is explicitly blocked."
msgstr "El resto del contenido incrustado se filtrará, <strong>excepto</ strong> si el contenido incorporado desde ese sitio está bloqueado de forma explícita."
-#: ../../Zotlabs/Module/Admin/Security.php:108
+#: ../../Zotlabs/Module/Admin/Security.php:109
msgid "Block public"
msgstr "Bloquear páginas públicas"
-#: ../../Zotlabs/Module/Admin/Security.php:108
+#: ../../Zotlabs/Module/Admin/Security.php:109
msgid ""
"Check to block public access to all otherwise public personal pages on this "
"site unless you are currently authenticated."
msgstr "Habilitar para impedir ver las páginas personales de este sitio a quien no esté actualmente autenticado."
-#: ../../Zotlabs/Module/Admin/Security.php:109
+#: ../../Zotlabs/Module/Admin/Security.php:110
msgid "Provide a cloud root directory"
msgstr "Proporcionar un directorio raíz de la nube"
-#: ../../Zotlabs/Module/Admin/Security.php:109
+#: ../../Zotlabs/Module/Admin/Security.php:110
msgid ""
"The cloud root directory lists all channel names which provide public files"
msgstr "El directorio raíz de la nube lista todos los nombres de canales que proporcionan archivos públicos"
-#: ../../Zotlabs/Module/Admin/Security.php:110
+#: ../../Zotlabs/Module/Admin/Security.php:111
msgid "Show total disk space available to cloud uploads"
msgstr "Mostrar el espacio total disponible en el disco para las cargas en la nube"
-#: ../../Zotlabs/Module/Admin/Security.php:111
+#: ../../Zotlabs/Module/Admin/Security.php:112
msgid "Set \"Transport Security\" HTTP header"
msgstr "Habilitar \"Seguridad de transporte\" (\"Transport Security\") en la cabecera HTTP"
-#: ../../Zotlabs/Module/Admin/Security.php:112
+#: ../../Zotlabs/Module/Admin/Security.php:113
msgid "Set \"Content Security Policy\" HTTP header"
msgstr "Habilitar la \"Política de seguridad del contenido\" (\"Content Security Policy\") en la cabecera HTTP"
-#: ../../Zotlabs/Module/Admin/Security.php:113
+#: ../../Zotlabs/Module/Admin/Security.php:114
msgid "Allowed email domains"
msgstr "Se aceptan dominios de correo electrónico"
-#: ../../Zotlabs/Module/Admin/Security.php:113
+#: ../../Zotlabs/Module/Admin/Security.php:114
msgid ""
"Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains"
msgstr "Lista separada por comas de los dominios de los que se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio. "
-#: ../../Zotlabs/Module/Admin/Security.php:114
+#: ../../Zotlabs/Module/Admin/Security.php:115
msgid "Not allowed email domains"
msgstr "No se permiten dominios de correo electrónico"
-#: ../../Zotlabs/Module/Admin/Security.php:114
+#: ../../Zotlabs/Module/Admin/Security.php:115
msgid ""
"Comma separated list of domains which are not allowed in email addresses for"
" registrations to this site. Wildcards are accepted. Empty to allow any "
"domains, unless allowed domains have been defined."
msgstr "Lista separada por comas de los dominios de los que no se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para no aceptar cualquier dominio, excepto los que se hayan autorizado."
-#: ../../Zotlabs/Module/Admin/Security.php:115
+#: ../../Zotlabs/Module/Admin/Security.php:116
msgid "Allow communications only from these sites"
msgstr "Permitir la comunicación solo desde estos sitios"
-#: ../../Zotlabs/Module/Admin/Security.php:115
+#: ../../Zotlabs/Module/Admin/Security.php:116
msgid ""
"One site per line. Leave empty to allow communication from anywhere by "
"default"
msgstr "Un sitio por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera"
-#: ../../Zotlabs/Module/Admin/Security.php:116
+#: ../../Zotlabs/Module/Admin/Security.php:117
msgid "Block communications from these sites"
msgstr "Bloquear la comunicación desde estos sitios"
-#: ../../Zotlabs/Module/Admin/Security.php:117
+#: ../../Zotlabs/Module/Admin/Security.php:118
msgid "Allow communications only from these channels"
msgstr "Permitir la comunicación solo desde estos canales"
-#: ../../Zotlabs/Module/Admin/Security.php:117
+#: ../../Zotlabs/Module/Admin/Security.php:118
msgid ""
"One channel (hash) per line. Leave empty to allow from any channel by "
"default"
msgstr "Un canal (hash) por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera"
-#: ../../Zotlabs/Module/Admin/Security.php:118
+#: ../../Zotlabs/Module/Admin/Security.php:119
msgid "Block communications from these channels"
msgstr "Bloquear la comunicación desde estos canales"
-#: ../../Zotlabs/Module/Admin/Security.php:119
+#: ../../Zotlabs/Module/Admin/Security.php:120
msgid "Only allow embeds from secure (SSL) websites and links."
msgstr "Sólo se permite contenido multimedia incorporado desde sitios y enlaces seguros (SSL)."
-#: ../../Zotlabs/Module/Admin/Security.php:120
+#: ../../Zotlabs/Module/Admin/Security.php:121
msgid "Allow unfiltered embedded HTML content only from these domains"
msgstr "Permitir contenido HTML sin filtrar sólo desde estos dominios "
-#: ../../Zotlabs/Module/Admin/Security.php:120
+#: ../../Zotlabs/Module/Admin/Security.php:121
msgid "One site per line. By default embedded content is filtered."
msgstr "Un sitio por línea. El contenido incorporado se filtra de forma predeterminada."
-#: ../../Zotlabs/Module/Admin/Security.php:121
+#: ../../Zotlabs/Module/Admin/Security.php:122
msgid "Block embedded HTML from these domains"
msgstr "Bloquear contenido con HTML incorporado desde estos dominios"
-#: ../../Zotlabs/Module/Admin/Security.php:122
+#: ../../Zotlabs/Module/Admin/Security.php:123
msgid "Allow SVG thumbnails in file browser"
msgstr "Permitir miniaturas SVG en el navegador de archivos"
-#: ../../Zotlabs/Module/Admin/Security.php:122
+#: ../../Zotlabs/Module/Admin/Security.php:123
msgid "WARNING: SVG images may contain malicious code."
msgstr "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso."
-#: ../../Zotlabs/Module/Admin/Security.php:123
+#: ../../Zotlabs/Module/Admin/Security.php:124
msgid "Allow embedded (inline) PDF files"
msgstr "Permitir ficheros PDF incrustados (en línea)"
-#: ../../Zotlabs/Module/Admin/Security.php:125
+#: ../../Zotlabs/Module/Admin/Security.php:126
msgid "Additional trusted directory server URLs"
msgstr "URL adicionales del servidor de directorio de confianza"
-#: ../../Zotlabs/Module/Admin/Security.php:125
+#: ../../Zotlabs/Module/Admin/Security.php:126
msgid ""
"Accept directory flags (spam, nsfw) from those servers. One per line like "
"https://example.tld"
msgstr "Aceptar indicadores de directorio (spam, nsfw) de esos servidores. Uno por línea, como https://example.tld"
#: ../../Zotlabs/Module/Manage.php:130
-#: ../../Zotlabs/Module/New_channel.php:147
+#: ../../Zotlabs/Module/New_channel.php:148
#, php-format
msgid "You have created %1$.0f of %2$.0f allowed channels."
msgstr "Ha creado %1$.0f de %2$.0f canales permitidos."
@@ -11941,7 +11882,7 @@ msgid "Delegated Channel"
msgstr "Canal delegado"
#: ../../Zotlabs/Module/Email_resend.php:12
-#: ../../Zotlabs/Module/Email_validation.php:24
+#: ../../Zotlabs/Module/Email_validation.php:25
msgid "Token verification failed."
msgstr "Ha fallado el token de verificación."
@@ -11953,52 +11894,52 @@ msgstr "Reenvío del email de verificación"
msgid "Unable to resend email verification message."
msgstr "No se puede reenviar el mensaje de verificación por correo electrónico."
-#: ../../Zotlabs/Module/Dreport.php:37
+#: ../../Zotlabs/Module/Dreport.php:43
msgid "Invalid message"
msgstr "Mensaje no válido"
-#: ../../Zotlabs/Module/Dreport.php:67
+#: ../../Zotlabs/Module/Dreport.php:73
msgid "no results"
msgstr "sin resultados"
-#: ../../Zotlabs/Module/Dreport.php:81
+#: ../../Zotlabs/Module/Dreport.php:87
msgid "channel sync processed"
msgstr "se ha realizado la sincronización del canal"
-#: ../../Zotlabs/Module/Dreport.php:85
+#: ../../Zotlabs/Module/Dreport.php:91
msgid "queued"
msgstr "encolado"
-#: ../../Zotlabs/Module/Dreport.php:89
+#: ../../Zotlabs/Module/Dreport.php:95
msgid "posted"
msgstr "enviado"
-#: ../../Zotlabs/Module/Dreport.php:93
+#: ../../Zotlabs/Module/Dreport.php:99
msgid "accepted for delivery"
msgstr "aceptado para el envío"
-#: ../../Zotlabs/Module/Dreport.php:97
+#: ../../Zotlabs/Module/Dreport.php:103
msgid "updated"
msgstr "actualizado"
-#: ../../Zotlabs/Module/Dreport.php:101
+#: ../../Zotlabs/Module/Dreport.php:107
msgid "update ignored"
msgstr "actualización ignorada"
-#: ../../Zotlabs/Module/Dreport.php:104
+#: ../../Zotlabs/Module/Dreport.php:110
msgid "permission denied"
msgstr "permiso denegado"
-#: ../../Zotlabs/Module/Dreport.php:108
+#: ../../Zotlabs/Module/Dreport.php:114
msgid "recipient not found"
msgstr "destinatario no encontrado"
-#: ../../Zotlabs/Module/Dreport.php:128
+#: ../../Zotlabs/Module/Dreport.php:134
#, php-format
msgid "Delivery report for %1$s"
msgstr "Informe de entrega para %1$s"
-#: ../../Zotlabs/Module/Dreport.php:133
+#: ../../Zotlabs/Module/Dreport.php:139
msgid "Redeliver"
msgstr "Volver a enviar"
@@ -12025,7 +11966,7 @@ msgid "Permissions denied."
msgstr "Permisos denegados."
#: ../../Zotlabs/Module/Cal.php:161
-#: ../../Zotlabs/Module/Channel_calendar.php:392
+#: ../../Zotlabs/Module/Channel_calendar.php:380
#: ../../Zotlabs/Module/Cdav.php:935
msgid "Link to source"
msgstr "Enlace a la fuente"
@@ -12036,7 +11977,7 @@ msgid "Previous"
msgstr "Anterior"
#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Photos.php:955
-#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Cdav.php:1027
+#: ../../Zotlabs/Module/Setup.php:278 ../../Zotlabs/Module/Cdav.php:1027
msgid "Next"
msgstr "Siguiente"
@@ -12092,55 +12033,55 @@ msgstr "Si está desactivado, los niveles máximo y mínimo se restablecerán a
msgid "Affinity Tool Settings"
msgstr "Ajustes de Affinity Tool"
-#: ../../Zotlabs/Module/Admin.php:96
+#: ../../Zotlabs/Module/Admin.php:98
msgid "Blocked accounts"
msgstr "Cuentas bloqueadas"
-#: ../../Zotlabs/Module/Admin.php:97
+#: ../../Zotlabs/Module/Admin.php:99
msgid "Expired accounts"
msgstr "Cuentas caducadas"
-#: ../../Zotlabs/Module/Admin.php:98
+#: ../../Zotlabs/Module/Admin.php:100
msgid "Expiring accounts"
msgstr "Cuentas que caducan"
-#: ../../Zotlabs/Module/Admin.php:122
+#: ../../Zotlabs/Module/Admin.php:124
msgid "Message queues"
msgstr "Mensajes en cola"
-#: ../../Zotlabs/Module/Admin.php:136
+#: ../../Zotlabs/Module/Admin.php:138
msgid "Your software should be updated"
msgstr "Debe actualizar su software"
-#: ../../Zotlabs/Module/Admin.php:141
+#: ../../Zotlabs/Module/Admin.php:143
msgid "Summary"
msgstr "Sumario"
-#: ../../Zotlabs/Module/Admin.php:144
+#: ../../Zotlabs/Module/Admin.php:146
msgid "Registered accounts"
msgstr "Cuentas registradas"
-#: ../../Zotlabs/Module/Admin.php:145
+#: ../../Zotlabs/Module/Admin.php:147
msgid "Pending registrations"
msgstr "Registros pendientes"
-#: ../../Zotlabs/Module/Admin.php:146
+#: ../../Zotlabs/Module/Admin.php:148
msgid "Registered channels"
msgstr "Canales registrados"
-#: ../../Zotlabs/Module/Admin.php:147 ../../Zotlabs/Module/Siteinfo.php:41
+#: ../../Zotlabs/Module/Admin.php:149 ../../Zotlabs/Module/Siteinfo.php:42
msgid "Active addons"
msgstr "Addons acivos"
-#: ../../Zotlabs/Module/Admin.php:148
+#: ../../Zotlabs/Module/Admin.php:150
msgid "Version"
msgstr "Versión"
-#: ../../Zotlabs/Module/Admin.php:149
+#: ../../Zotlabs/Module/Admin.php:151
msgid "Repository version (master)"
msgstr "Versión del repositorio (master)"
-#: ../../Zotlabs/Module/Admin.php:150
+#: ../../Zotlabs/Module/Admin.php:152
msgid "Repository version (dev)"
msgstr "Versión del repositorio (dev)"
@@ -12215,262 +12156,270 @@ msgstr "Búsqueda de canales"
msgid "Lookup xchan beginning with (or webbie): "
msgstr "Buscar un canal (o un \"webbie\") que comience por:"
-#: ../../Zotlabs/Module/Group.php:47
+#: ../../Zotlabs/Module/Group.php:48
msgid "Privacy group created."
msgstr "El grupo de canales ha sido creado."
-#: ../../Zotlabs/Module/Group.php:50
+#: ../../Zotlabs/Module/Group.php:51
msgid "Could not create privacy group."
msgstr "No se puede crear el grupo de canales"
-#: ../../Zotlabs/Module/Group.php:82
+#: ../../Zotlabs/Module/Group.php:83
msgid "Privacy group updated."
msgstr "Grupo de canales actualizado."
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:301
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
msgid "Post to this group by default"
msgstr "Publicar en este grupo por defecto"
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:303
msgid "Add new contacts to this group by default"
msgstr "Añadir nuevos contactos a este grupo por defecto"
-#: ../../Zotlabs/Module/Group.php:146
+#: ../../Zotlabs/Module/Group.php:147
msgid "Privacy group name"
msgstr "Nombre del grupo"
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
+#: ../../Zotlabs/Module/Group.php:148 ../../Zotlabs/Module/Group.php:250
msgid "Members are visible to other channels"
msgstr "Los miembros son visibles para otros canales"
-#: ../../Zotlabs/Module/Group.php:175
+#: ../../Zotlabs/Module/Group.php:176
msgid "Privacy group removed."
msgstr "Grupo de canales eliminado."
-#: ../../Zotlabs/Module/Group.php:178
+#: ../../Zotlabs/Module/Group.php:179
msgid "Unable to remove privacy group."
msgstr "No se puede eliminar el grupo de canales."
-#: ../../Zotlabs/Module/Group.php:244
+#: ../../Zotlabs/Module/Group.php:245
#, php-format
msgid "Privacy Group: %s"
msgstr "Grupo privado %s"
-#: ../../Zotlabs/Module/Group.php:246
+#: ../../Zotlabs/Module/Group.php:247
msgid "Privacy group name: "
msgstr "Nombre del grupo de canales:"
-#: ../../Zotlabs/Module/Group.php:262
+#: ../../Zotlabs/Module/Group.php:263
msgid "Group members"
msgstr "Miembros del grupo"
-#: ../../Zotlabs/Module/Group.php:264
+#: ../../Zotlabs/Module/Group.php:265
msgid "Not in this group"
msgstr "No en este grupo"
-#: ../../Zotlabs/Module/Group.php:296
+#: ../../Zotlabs/Module/Group.php:297
msgid "Click a channel to toggle membership"
msgstr "Haga clic en un canal para cambiar los miembros"
-#: ../../Zotlabs/Module/Help.php:25
+#: ../../Zotlabs/Module/Help.php:61
msgid "Documentation Search"
msgstr "Búsqueda de Documentación"
-#: ../../Zotlabs/Module/Help.php:86
+#: ../../Zotlabs/Module/Help.php:170
+msgid "Not Found"
+msgstr "No encontrado"
+
+#: ../../Zotlabs/Module/Help.php:223
+msgid "$Projectname Documentation"
+msgstr "Documentación de $Projectname"
+
+#: ../../Zotlabs/Module/Help.php:234
+msgid "Contents"
+msgstr "Contenidos"
+
+#: ../../Zotlabs/Module/Help.php:241
msgid "Members"
msgstr "Miembros"
-#: ../../Zotlabs/Module/Help.php:87
+#: ../../Zotlabs/Module/Help.php:242
msgid "Administrators"
msgstr "Administradores"
-#: ../../Zotlabs/Module/Help.php:88
+#: ../../Zotlabs/Module/Help.php:243
msgid "Developers"
msgstr "Desarrolladores"
-#: ../../Zotlabs/Module/Help.php:89
+#: ../../Zotlabs/Module/Help.php:244
msgid "Tutorials"
msgstr "Tutoriales"
-#: ../../Zotlabs/Module/Help.php:101
-msgid "$Projectname Documentation"
-msgstr "Documentación de $Projectname"
-
-#: ../../Zotlabs/Module/Help.php:102
-msgid "Contents"
-msgstr "Contenidos"
+#: ../../Zotlabs/Module/Help.php:262
+msgid "Help:"
+msgstr "Ayuda:"
-#: ../../Zotlabs/Module/Tagger.php:50
+#: ../../Zotlabs/Module/Tagger.php:52
msgid "Post not found."
msgstr "Mensaje no encontrado."
-#: ../../Zotlabs/Module/Tagger.php:121
+#: ../../Zotlabs/Module/Tagger.php:123
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s ha etiquetado %3$s de %2$s con %4$s"
-#: ../../Zotlabs/Module/Invite.php:69
+#: ../../Zotlabs/Module/Invite.php:70
msgid "Invite App"
msgstr "Solicitar una app"
-#: ../../Zotlabs/Module/Invite.php:81
+#: ../../Zotlabs/Module/Invite.php:82
msgid "Register is closed"
msgstr "El registro está cerrado"
-#: ../../Zotlabs/Module/Invite.php:115 ../../Zotlabs/Module/Invite.php:562
+#: ../../Zotlabs/Module/Invite.php:116 ../../Zotlabs/Module/Invite.php:563
msgid "Note, the invitation code is valid up to"
msgstr "Tenga en cuenta que el código de invitación es válido hasta "
-#: ../../Zotlabs/Module/Invite.php:128
+#: ../../Zotlabs/Module/Invite.php:129
#, php-format
msgid "Too many recipients for one invitation (max %d)"
msgstr "Demasiados destinatarios para una invitación (máx %d)"
-#: ../../Zotlabs/Module/Invite.php:132
+#: ../../Zotlabs/Module/Invite.php:133
msgid "No recipients for this invitation"
msgstr "No hay destinatarios para esta invitación"
-#: ../../Zotlabs/Module/Invite.php:151
+#: ../../Zotlabs/Module/Invite.php:152
#, php-format
msgid "(%s) : Not a real email address"
msgstr "(%s) : No es una dirección de correo electrónica real"
-#: ../../Zotlabs/Module/Invite.php:158
+#: ../../Zotlabs/Module/Invite.php:159
#, php-format
msgid "(%s) : Not allowed email address"
msgstr "(%s) : Dirección de correo electrónico no permitida"
-#: ../../Zotlabs/Module/Invite.php:171
+#: ../../Zotlabs/Module/Invite.php:172
#, php-format
msgid "(%s) : email address already in use"
msgstr "(%s) : La dirección de correo electrónico ya está en uso"
-#: ../../Zotlabs/Module/Invite.php:178
+#: ../../Zotlabs/Module/Invite.php:179
#, php-format
msgid "(%s) : Accepted email address"
msgstr "(%s) : Dirección de correo electrónico aceptada"
-#: ../../Zotlabs/Module/Invite.php:270
+#: ../../Zotlabs/Module/Invite.php:271
#, php-format
msgid "To %s : Message delivery success."
msgstr "To %s : Entrega exitosa del mensaje."
-#: ../../Zotlabs/Module/Invite.php:302
+#: ../../Zotlabs/Module/Invite.php:303
#, php-format
msgid "%1$d mail(s) sent, %2$d mail error(s)"
msgstr "%1$d correo(s) enviado, %2$d error(es) de correo"
-#: ../../Zotlabs/Module/Invite.php:327
+#: ../../Zotlabs/Module/Invite.php:328
msgid "Invites not proposed by configuration"
msgstr "Invitaciones no propuestas por la configuración"
-#: ../../Zotlabs/Module/Invite.php:328
+#: ../../Zotlabs/Module/Invite.php:329
msgid "Contact the site admin"
msgstr "Contactar con el administrador del sitio"
-#: ../../Zotlabs/Module/Invite.php:344
+#: ../../Zotlabs/Module/Invite.php:345
msgid "Invites by users not enabled"
msgstr "Invitaciones de usuarios no habilitadas"
-#: ../../Zotlabs/Module/Invite.php:349
+#: ../../Zotlabs/Module/Invite.php:350
msgid "You have no more invitations available"
msgstr "No tiene más invitaciones disponibles"
-#: ../../Zotlabs/Module/Invite.php:365
+#: ../../Zotlabs/Module/Invite.php:366
msgid "Not on xchan"
msgstr "No en xchan"
-#: ../../Zotlabs/Module/Invite.php:398
+#: ../../Zotlabs/Module/Invite.php:399
msgid "All users invitation limit exceeded."
msgstr "Se ha superado el límite de invitaciones a todos los usuarios."
-#: ../../Zotlabs/Module/Invite.php:416
+#: ../../Zotlabs/Module/Invite.php:417
msgid "Invitation expires after"
msgstr "La invitación expira después de "
-#: ../../Zotlabs/Module/Invite.php:517 ../../Zotlabs/Module/Invite.php:556
+#: ../../Zotlabs/Module/Invite.php:518 ../../Zotlabs/Module/Invite.php:557
msgid "Invitation"
msgstr "Invitación"
-#: ../../Zotlabs/Module/Invite.php:547
+#: ../../Zotlabs/Module/Invite.php:548
msgid "Send invitations"
msgstr "Enviar invitaciones"
-#: ../../Zotlabs/Module/Invite.php:548
+#: ../../Zotlabs/Module/Invite.php:549
msgid "Invitations I am using"
msgstr "Invitaciones que estoy utilizando "
-#: ../../Zotlabs/Module/Invite.php:549
+#: ../../Zotlabs/Module/Invite.php:550
msgid "Invitations we are using"
msgstr "Invitaciones que usamos "
-#: ../../Zotlabs/Module/Invite.php:550
+#: ../../Zotlabs/Module/Invite.php:551
msgid "§ Note, the email(s) sent will be recorded in the system logs"
msgstr "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema"
-#: ../../Zotlabs/Module/Invite.php:551
+#: ../../Zotlabs/Module/Invite.php:552
msgid "Enter email addresses, one per line:"
msgstr "Introduzca las direcciones de correo electrónico, una por línea:"
-#: ../../Zotlabs/Module/Invite.php:552
+#: ../../Zotlabs/Module/Invite.php:553
msgid "Your message:"
msgstr "Su mensaje:"
-#: ../../Zotlabs/Module/Invite.php:553
+#: ../../Zotlabs/Module/Invite.php:554
msgid "Invite template"
msgstr "Plantilla de invitación"
-#: ../../Zotlabs/Module/Invite.php:555
+#: ../../Zotlabs/Module/Invite.php:556
msgid "Subject:"
msgstr "Asunto:"
-#: ../../Zotlabs/Module/Invite.php:561
+#: ../../Zotlabs/Module/Invite.php:562
msgid "Here you may enter personal notes to the recipient(s)"
msgstr "Aquí puede introducir notas personales para el/los destinatario(s)"
-#: ../../Zotlabs/Module/Siteinfo.php:21
+#: ../../Zotlabs/Module/Siteinfo.php:22
msgid "About this site"
msgstr "Acerca de este sitio"
-#: ../../Zotlabs/Module/Siteinfo.php:22
+#: ../../Zotlabs/Module/Siteinfo.php:23
msgid "Site Name"
msgstr "Nombre del sitio"
-#: ../../Zotlabs/Module/Siteinfo.php:26
+#: ../../Zotlabs/Module/Siteinfo.php:27
msgid "Administrator"
msgstr "Administrador"
-#: ../../Zotlabs/Module/Siteinfo.php:29
+#: ../../Zotlabs/Module/Siteinfo.php:30
msgid "Software and Project information"
msgstr "Información sobre el software y el proyecto"
-#: ../../Zotlabs/Module/Siteinfo.php:30
+#: ../../Zotlabs/Module/Siteinfo.php:31
msgid "This site is powered by $Projectname"
msgstr "Este sitio funciona con $Projectname"
-#: ../../Zotlabs/Module/Siteinfo.php:31
+#: ../../Zotlabs/Module/Siteinfo.php:32
msgid ""
-"Federated and decentralised networking and identity services provided by Zot"
-msgstr "Servicios federados y descentralizados de identidad y redes proporcionados por Zot"
+"Federated and decentralised networking and identity services provided by"
+msgstr "Red federada y descentralizada y servicios de identidad proporcionados por "
-#: ../../Zotlabs/Module/Siteinfo.php:34
+#: ../../Zotlabs/Module/Siteinfo.php:35
msgid "Additional federated transport protocols:"
msgstr "Protocolos adicionales de transporte federado: "
-#: ../../Zotlabs/Module/Siteinfo.php:36
+#: ../../Zotlabs/Module/Siteinfo.php:37
#, php-format
msgid "Version %s"
msgstr "Versión %s"
-#: ../../Zotlabs/Module/Siteinfo.php:37
+#: ../../Zotlabs/Module/Siteinfo.php:38
msgid "Project homepage"
msgstr "Página principal del proyecto"
-#: ../../Zotlabs/Module/Siteinfo.php:38
+#: ../../Zotlabs/Module/Siteinfo.php:39
msgid "Developer homepage"
msgstr "Página principal del desarrollador"
-#: ../../Zotlabs/Module/Siteinfo.php:42
+#: ../../Zotlabs/Module/Siteinfo.php:43
msgid "Blocked sites"
msgstr "Sitios bloqueados"
@@ -12578,15 +12527,15 @@ msgstr "Canal no disponible."
msgid "Previous action reversed."
msgstr "Acción anterior revocada."
-#: ../../Zotlabs/Module/Like.php:453
+#: ../../Zotlabs/Module/Like.php:456
msgid "profile"
msgstr "perfil"
-#: ../../Zotlabs/Module/Like.php:610
+#: ../../Zotlabs/Module/Like.php:623
msgid "Action completed."
msgstr "Acción completada."
-#: ../../Zotlabs/Module/Like.php:611
+#: ../../Zotlabs/Module/Like.php:624
msgid "Thank you."
msgstr "Gracias."
@@ -12611,11 +12560,11 @@ msgstr "No es posible actualizar el elemento del menú."
msgid "Unable to add menu element."
msgstr "No es posible añadir el elemento al menú"
-#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
+#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:244
msgid "Menu Item Permissions"
msgstr "Permisos del elemento del menú"
-#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
+#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:245
msgid "(click to open/close)"
msgstr "(pulsar para abrir o cerrar)"
@@ -12623,7 +12572,7 @@ msgstr "(pulsar para abrir o cerrar)"
msgid "Link Name"
msgstr "Nombre del enlace"
-#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
+#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:253
msgid "Link or Submenu Target"
msgstr "Destino del enlace o submenú"
@@ -12631,19 +12580,19 @@ msgstr "Destino del enlace o submenú"
msgid "Enter URL of the link or select a menu name to create a submenu"
msgstr "Introducir la dirección del enlace o seleccionar el nombre de un submenú"
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
+#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:254
msgid "Use magic-auth if available"
msgstr "Usar la autenticación mágica si está disponible"
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:255
msgid "Open link in new window"
msgstr "Abrir el enlace en una nueva ventana"
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:256
msgid "Order in list"
msgstr "Orden en la lista"
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:256
msgid "Higher numbers will sink to bottom of listing"
msgstr "Los números más altos irán al final de la lista"
@@ -12695,23 +12644,23 @@ msgstr "Eliminar este elemento del menú"
msgid "Edit this menu item"
msgstr "Modificar este elemento del menú"
-#: ../../Zotlabs/Module/Mitem.php:222
+#: ../../Zotlabs/Module/Mitem.php:220
msgid "Menu item not found."
msgstr "Este elemento del menú no se ha encontrado"
-#: ../../Zotlabs/Module/Mitem.php:235
+#: ../../Zotlabs/Module/Mitem.php:233
msgid "Menu item deleted."
msgstr "Este elemento del menú ha sido borrado"
-#: ../../Zotlabs/Module/Mitem.php:237
+#: ../../Zotlabs/Module/Mitem.php:235
msgid "Menu item could not be deleted."
msgstr "Este elemento del menú no puede ser borrado."
-#: ../../Zotlabs/Module/Mitem.php:244
+#: ../../Zotlabs/Module/Mitem.php:242
msgid "Edit Menu Element"
msgstr "Editar elemento del menú"
-#: ../../Zotlabs/Module/Mitem.php:254
+#: ../../Zotlabs/Module/Mitem.php:252
msgid "Link text"
msgstr "Texto del enlace"
@@ -12741,50 +12690,50 @@ msgstr "Use las flechas para mover la aplicación correspondiente a la izquierda
msgid "Use arrows to move the corresponding app up or down in the app tray"
msgstr "Use las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la bandeja de aplicaciones."
-#: ../../Zotlabs/Module/New_channel.php:159
+#: ../../Zotlabs/Module/New_channel.php:160
msgid "Your real name is recommended."
msgstr "Se recomienda su nombre real."
-#: ../../Zotlabs/Module/New_channel.php:160
+#: ../../Zotlabs/Module/New_channel.php:161
msgid "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""
msgstr "Ejemplos: \"Juan García\", \"Luisa y sus caballos\", \"Fútbol\", \"Grupo de aviación\""
-#: ../../Zotlabs/Module/New_channel.php:165
+#: ../../Zotlabs/Module/New_channel.php:166
msgid ""
"This will be used to create a unique network address (like an email "
"address)."
msgstr "Esto se utilizará para crear una dirección de red única (como una dirección de correo electrónico)."
-#: ../../Zotlabs/Module/New_channel.php:167
+#: ../../Zotlabs/Module/New_channel.php:168
msgid "Allowed characters are a-z 0-9, - and _"
msgstr "Los caracteres permitidos son a-z 0-9, - and _"
-#: ../../Zotlabs/Module/New_channel.php:175
+#: ../../Zotlabs/Module/New_channel.php:176
msgid "Channel name"
msgstr "Nombre del canal"
-#: ../../Zotlabs/Module/New_channel.php:178
-#: ../../Zotlabs/Module/Settings/Channel.php:233
+#: ../../Zotlabs/Module/New_channel.php:179
+#: ../../Zotlabs/Module/Settings/Channel.php:234
msgid "Channel role"
msgstr "Rol del canal"
-#: ../../Zotlabs/Module/New_channel.php:181
+#: ../../Zotlabs/Module/New_channel.php:182
msgid "Create a Channel"
msgstr "Crear un canal"
-#: ../../Zotlabs/Module/New_channel.php:182
+#: ../../Zotlabs/Module/New_channel.php:183
msgid ""
"A channel is a unique network identity. It can represent a person (social "
"network profile), a forum (group), a business or celebrity page, a newsfeed,"
" and many other things."
msgstr "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas."
-#: ../../Zotlabs/Module/New_channel.php:183
+#: ../../Zotlabs/Module/New_channel.php:184
msgid ""
"or <a href=\"import\">import an existing channel</a> from another location."
msgstr "O <a href=\"import\">importar un canal </a> desde otro lugar."
-#: ../../Zotlabs/Module/New_channel.php:188
+#: ../../Zotlabs/Module/New_channel.php:189
msgid "Validate"
msgstr "Validar"
@@ -12940,17 +12889,17 @@ msgstr "No me gusta"
msgid "You must be logged in to see this page."
msgstr "Debe haber iniciado sesión para poder ver esta página."
-#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:149
+#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:150
#: ../../Zotlabs/Module/Profile.php:62
msgid "Posts and comments"
msgstr "Publicaciones y comentarios"
-#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:156
+#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:157
#: ../../Zotlabs/Module/Profile.php:69
msgid "Only posts"
msgstr "Solo publicaciones"
-#: ../../Zotlabs/Module/Channel.php:230
+#: ../../Zotlabs/Module/Channel.php:231
msgid "Insufficient permissions. Request redirected to profile page."
msgstr "Permisos insuficientes. Petición redirigida a la página del perfil."
@@ -13038,260 +12987,260 @@ msgstr "Fuente eliminada"
msgid "Unable to remove source."
msgstr "No se puede eliminar la fuente."
-#: ../../Zotlabs/Module/Profiles.php:22 ../../Zotlabs/Module/Profiles.php:210
-#: ../../Zotlabs/Module/Profiles.php:638
+#: ../../Zotlabs/Module/Profiles.php:23 ../../Zotlabs/Module/Profiles.php:211
+#: ../../Zotlabs/Module/Profiles.php:641
msgid "Profile not found."
msgstr "Perfil no encontrado."
-#: ../../Zotlabs/Module/Profiles.php:42
+#: ../../Zotlabs/Module/Profiles.php:43
msgid "Profile deleted."
msgstr "Perfil eliminado."
-#: ../../Zotlabs/Module/Profiles.php:66 ../../Zotlabs/Module/Profiles.php:103
+#: ../../Zotlabs/Module/Profiles.php:67 ../../Zotlabs/Module/Profiles.php:104
msgid "Profile-"
msgstr "Perfil-"
-#: ../../Zotlabs/Module/Profiles.php:88 ../../Zotlabs/Module/Profiles.php:125
+#: ../../Zotlabs/Module/Profiles.php:89 ../../Zotlabs/Module/Profiles.php:126
msgid "New profile created."
msgstr "El nuevo perfil ha sido creado."
-#: ../../Zotlabs/Module/Profiles.php:109
+#: ../../Zotlabs/Module/Profiles.php:110
msgid "Profile unavailable to clone."
msgstr "Perfil no disponible para clonar."
-#: ../../Zotlabs/Module/Profiles.php:144
+#: ../../Zotlabs/Module/Profiles.php:145
msgid "Profile unavailable to export."
msgstr "Perfil no disponible para exportar."
-#: ../../Zotlabs/Module/Profiles.php:220
+#: ../../Zotlabs/Module/Profiles.php:221
msgid "Profile Name is required."
msgstr "Se necesita el nombre del perfil."
-#: ../../Zotlabs/Module/Profiles.php:425
+#: ../../Zotlabs/Module/Profiles.php:426
msgid "Marital Status"
msgstr "Estado civil"
-#: ../../Zotlabs/Module/Profiles.php:429
+#: ../../Zotlabs/Module/Profiles.php:430
msgid "Romantic Partner"
msgstr "Pareja sentimental"
-#: ../../Zotlabs/Module/Profiles.php:433 ../../Zotlabs/Module/Profiles.php:784
+#: ../../Zotlabs/Module/Profiles.php:434 ../../Zotlabs/Module/Profiles.php:787
msgid "Likes"
msgstr "Me gusta"
-#: ../../Zotlabs/Module/Profiles.php:437 ../../Zotlabs/Module/Profiles.php:785
+#: ../../Zotlabs/Module/Profiles.php:438 ../../Zotlabs/Module/Profiles.php:788
msgid "Dislikes"
msgstr "No me gusta"
-#: ../../Zotlabs/Module/Profiles.php:441 ../../Zotlabs/Module/Profiles.php:792
+#: ../../Zotlabs/Module/Profiles.php:442 ../../Zotlabs/Module/Profiles.php:795
msgid "Work/Employment"
msgstr "Trabajo:"
-#: ../../Zotlabs/Module/Profiles.php:444
+#: ../../Zotlabs/Module/Profiles.php:445
msgid "Religion"
msgstr "Religión"
-#: ../../Zotlabs/Module/Profiles.php:448
+#: ../../Zotlabs/Module/Profiles.php:449
msgid "Political Views"
msgstr "Ideas políticas"
-#: ../../Zotlabs/Module/Profiles.php:456
+#: ../../Zotlabs/Module/Profiles.php:457
msgid "Sexual Preference"
msgstr "Preferencia sexual"
-#: ../../Zotlabs/Module/Profiles.php:460
+#: ../../Zotlabs/Module/Profiles.php:461
msgid "Homepage"
msgstr "Página personal"
-#: ../../Zotlabs/Module/Profiles.php:464
+#: ../../Zotlabs/Module/Profiles.php:465
msgid "Interests"
msgstr "Intereses"
-#: ../../Zotlabs/Module/Profiles.php:572
+#: ../../Zotlabs/Module/Profiles.php:573
msgid "Profile updated."
msgstr "Perfil actualizado."
-#: ../../Zotlabs/Module/Profiles.php:668
+#: ../../Zotlabs/Module/Profiles.php:671
msgid "Hide my connections from viewers of this profile"
msgstr "Ocultar mis conexiones a los espectadores de este perfil"
-#: ../../Zotlabs/Module/Profiles.php:681
+#: ../../Zotlabs/Module/Profiles.php:684
msgid "Publish my default profile in the network directory"
msgstr "Publicar mi perfil por defecto en el directorio de la red"
-#: ../../Zotlabs/Module/Profiles.php:689
+#: ../../Zotlabs/Module/Profiles.php:692
msgid "Suggest me as a potential contact to new members"
msgstr "Sugerirme como contacto potencial a los nuevos miembros"
-#: ../../Zotlabs/Module/Profiles.php:693
+#: ../../Zotlabs/Module/Profiles.php:696
msgid "Reveal my online status"
msgstr "Revelar mi estado en línea"
-#: ../../Zotlabs/Module/Profiles.php:734
+#: ../../Zotlabs/Module/Profiles.php:737
msgid "Edit Profile Details"
msgstr "Modificar los detalles de este perfil"
-#: ../../Zotlabs/Module/Profiles.php:736
+#: ../../Zotlabs/Module/Profiles.php:739
msgid "View this profile"
msgstr "Ver este perfil"
-#: ../../Zotlabs/Module/Profiles.php:738
+#: ../../Zotlabs/Module/Profiles.php:741
msgid "Profile Tools"
msgstr "Gestión del perfil"
-#: ../../Zotlabs/Module/Profiles.php:739
+#: ../../Zotlabs/Module/Profiles.php:742
msgid "Change cover photo"
msgstr "Cambiar la imagen de portada del perfil"
-#: ../../Zotlabs/Module/Profiles.php:741
+#: ../../Zotlabs/Module/Profiles.php:744
msgid "Create a new profile using these settings"
msgstr "Crear un nuevo perfil usando estos ajustes"
-#: ../../Zotlabs/Module/Profiles.php:742
+#: ../../Zotlabs/Module/Profiles.php:745
msgid "Clone this profile"
msgstr "Clonar este perfil"
-#: ../../Zotlabs/Module/Profiles.php:743
+#: ../../Zotlabs/Module/Profiles.php:746
msgid "Delete this profile"
msgstr "Eliminar este perfil"
-#: ../../Zotlabs/Module/Profiles.php:744
+#: ../../Zotlabs/Module/Profiles.php:747
msgid "Add profile things"
msgstr "Añadir cosas al perfil"
-#: ../../Zotlabs/Module/Profiles.php:745
+#: ../../Zotlabs/Module/Profiles.php:748
msgid "Basic"
msgstr "Básico"
-#: ../../Zotlabs/Module/Profiles.php:747
+#: ../../Zotlabs/Module/Profiles.php:750
msgid "Relationship"
msgstr "Relación"
-#: ../../Zotlabs/Module/Profiles.php:750
+#: ../../Zotlabs/Module/Profiles.php:753
msgid "Import profile from file"
msgstr "Importar perfil desde un fichero"
-#: ../../Zotlabs/Module/Profiles.php:751
+#: ../../Zotlabs/Module/Profiles.php:754
msgid "Export profile to file"
msgstr "Exportar perfil a un fichero"
-#: ../../Zotlabs/Module/Profiles.php:752
+#: ../../Zotlabs/Module/Profiles.php:755
msgid "Your gender"
msgstr "Género"
-#: ../../Zotlabs/Module/Profiles.php:753
+#: ../../Zotlabs/Module/Profiles.php:756
msgid "Marital status"
msgstr "Estado civil"
-#: ../../Zotlabs/Module/Profiles.php:754
+#: ../../Zotlabs/Module/Profiles.php:757
msgid "Sexual preference"
msgstr "Preferencia sexual"
-#: ../../Zotlabs/Module/Profiles.php:757
+#: ../../Zotlabs/Module/Profiles.php:760
msgid "Profile name"
msgstr "Nombre del perfil"
-#: ../../Zotlabs/Module/Profiles.php:759
+#: ../../Zotlabs/Module/Profiles.php:762
msgid "This is your default profile."
msgstr "Este es su perfil principal."
-#: ../../Zotlabs/Module/Profiles.php:761
+#: ../../Zotlabs/Module/Profiles.php:764
msgid "Your full name"
msgstr "Nombre completo"
-#: ../../Zotlabs/Module/Profiles.php:762
+#: ../../Zotlabs/Module/Profiles.php:765
msgid "Short title/description"
msgstr "Breve título y descripción"
-#: ../../Zotlabs/Module/Profiles.php:762
+#: ../../Zotlabs/Module/Profiles.php:765
msgid "Maximal 190 characters"
msgstr "Máximo de 190 caracteres"
-#: ../../Zotlabs/Module/Profiles.php:765
+#: ../../Zotlabs/Module/Profiles.php:768
msgid "Street address"
msgstr "Dirección"
-#: ../../Zotlabs/Module/Profiles.php:766
+#: ../../Zotlabs/Module/Profiles.php:769
msgid "Locality/City"
msgstr "Ciudad"
-#: ../../Zotlabs/Module/Profiles.php:767
+#: ../../Zotlabs/Module/Profiles.php:770
msgid "Region/State"
msgstr "Región o Estado"
-#: ../../Zotlabs/Module/Profiles.php:768
+#: ../../Zotlabs/Module/Profiles.php:771
msgid "Postal/Zip code"
msgstr "Código postal"
-#: ../../Zotlabs/Module/Profiles.php:774
+#: ../../Zotlabs/Module/Profiles.php:777
msgid "Who (if applicable)"
msgstr "Quién (si es pertinente)"
-#: ../../Zotlabs/Module/Profiles.php:774
+#: ../../Zotlabs/Module/Profiles.php:777
msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
msgstr "Por ejemplo: ana123, María González, sara@ejemplo.com"
-#: ../../Zotlabs/Module/Profiles.php:775
+#: ../../Zotlabs/Module/Profiles.php:778
msgid "Since (date)"
msgstr "Desde (fecha)"
-#: ../../Zotlabs/Module/Profiles.php:778
+#: ../../Zotlabs/Module/Profiles.php:781
msgid "Tell us about yourself"
msgstr "Háblenos de usted"
-#: ../../Zotlabs/Module/Profiles.php:780
+#: ../../Zotlabs/Module/Profiles.php:783
msgid "Hometown"
msgstr "Lugar de nacimiento"
-#: ../../Zotlabs/Module/Profiles.php:781
+#: ../../Zotlabs/Module/Profiles.php:784
msgid "Political views"
msgstr "Ideas políticas"
-#: ../../Zotlabs/Module/Profiles.php:782
+#: ../../Zotlabs/Module/Profiles.php:785
msgid "Religious views"
msgstr "Creencias religiosas"
-#: ../../Zotlabs/Module/Profiles.php:783
+#: ../../Zotlabs/Module/Profiles.php:786
msgid "Keywords used in directory listings"
msgstr "Palabras clave utilizadas en los listados de directorios"
-#: ../../Zotlabs/Module/Profiles.php:783
+#: ../../Zotlabs/Module/Profiles.php:786
msgid "Example: fishing photography software"
msgstr "Por ejemplo: software de fotografía submarina"
-#: ../../Zotlabs/Module/Profiles.php:786
+#: ../../Zotlabs/Module/Profiles.php:789
msgid "Musical interests"
msgstr "Preferencias musicales"
-#: ../../Zotlabs/Module/Profiles.php:787
+#: ../../Zotlabs/Module/Profiles.php:790
msgid "Books, literature"
msgstr "Libros, literatura"
-#: ../../Zotlabs/Module/Profiles.php:788
+#: ../../Zotlabs/Module/Profiles.php:791
msgid "Television"
msgstr "Televisión"
-#: ../../Zotlabs/Module/Profiles.php:789
+#: ../../Zotlabs/Module/Profiles.php:792
msgid "Film/Dance/Culture/Entertainment"
msgstr "Cine, danza, cultura, entretenimiento"
-#: ../../Zotlabs/Module/Profiles.php:790
+#: ../../Zotlabs/Module/Profiles.php:793
msgid "Hobbies/Interests"
msgstr "Aficiones o intereses"
-#: ../../Zotlabs/Module/Profiles.php:791
+#: ../../Zotlabs/Module/Profiles.php:794
msgid "Love/Romance"
msgstr "Vida sentimental o amorosa"
-#: ../../Zotlabs/Module/Profiles.php:793
+#: ../../Zotlabs/Module/Profiles.php:796
msgid "School/Education"
msgstr "Estudios"
-#: ../../Zotlabs/Module/Profiles.php:794
+#: ../../Zotlabs/Module/Profiles.php:797
msgid "Contact information and social networks"
msgstr "Información de contacto y redes sociales"
-#: ../../Zotlabs/Module/Profiles.php:795
+#: ../../Zotlabs/Module/Profiles.php:798
msgid "My other channels"
msgstr "Mis otros canales"
@@ -13311,19 +13260,19 @@ msgstr "Eliminar todos los ficheros"
msgid "Remove this file"
msgstr "Eliminar este fichero"
-#: ../../Zotlabs/Module/Rbmark.php:93
+#: ../../Zotlabs/Module/Rbmark.php:72
msgid "Select a bookmark folder"
msgstr "Seleccionar una carpeta de marcadores"
-#: ../../Zotlabs/Module/Rbmark.php:98
+#: ../../Zotlabs/Module/Rbmark.php:80
msgid "Save Bookmark"
msgstr "Guardar marcador"
-#: ../../Zotlabs/Module/Rbmark.php:99
+#: ../../Zotlabs/Module/Rbmark.php:81
msgid "URL of bookmark"
msgstr "Dirección del marcador"
-#: ../../Zotlabs/Module/Rbmark.php:104
+#: ../../Zotlabs/Module/Rbmark.php:86
msgid "Or enter new bookmark folder name"
msgstr "O introduzca un nuevo nombre para la carpeta de marcadores"
@@ -13332,7 +13281,7 @@ msgid "Remote privacy information not available"
msgstr "La información sobre privacidad remota no está disponible"
#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203
-#: ../../Zotlabs/Module/Acl.php:123
+#: ../../Zotlabs/Module/Acl.php:124
msgctxt "acl"
msgid "Profile"
msgstr "Perfil"
@@ -13377,78 +13326,78 @@ msgid "Event title and start time are required."
msgstr "Se requieren el título del evento y su hora de inicio."
#: ../../Zotlabs/Module/Channel_calendar.php:85
-#: ../../Zotlabs/Module/Channel_calendar.php:226
+#: ../../Zotlabs/Module/Channel_calendar.php:214
msgid "Event not found."
msgstr "Evento no encontrado."
-#: ../../Zotlabs/Module/Channel_calendar.php:370
+#: ../../Zotlabs/Module/Channel_calendar.php:358
msgid "Edit event"
msgstr "Editar evento"
-#: ../../Zotlabs/Module/Channel_calendar.php:372
+#: ../../Zotlabs/Module/Channel_calendar.php:360
msgid "Delete event"
msgstr "Borrar evento"
-#: ../../Zotlabs/Module/Channel_calendar.php:406
+#: ../../Zotlabs/Module/Channel_calendar.php:394
msgid "calendar"
msgstr "calendario"
-#: ../../Zotlabs/Module/Channel_calendar.php:493
+#: ../../Zotlabs/Module/Channel_calendar.php:485
msgid "Failed to remove event"
msgstr "Error al eliminar el evento"
-#: ../../Zotlabs/Module/Go.php:21
+#: ../../Zotlabs/Module/Go.php:22
msgid "This page is available only to site members"
msgstr "Esta página está disponible sólo para los miembros del sitio"
-#: ../../Zotlabs/Module/Go.php:29
+#: ../../Zotlabs/Module/Go.php:30
msgid "What would you like to do?"
msgstr "¿Qué le gustaría hacer?"
-#: ../../Zotlabs/Module/Go.php:31
+#: ../../Zotlabs/Module/Go.php:32
msgid ""
"Please bookmark this page if you would like to return to it in the future"
msgstr "Por favor añada esta página a sus marcadores si desea volver a ella en el futuro."
-#: ../../Zotlabs/Module/Go.php:35
+#: ../../Zotlabs/Module/Go.php:36
msgid "Upload a profile photo"
msgstr "Subir una foto de perfil"
-#: ../../Zotlabs/Module/Go.php:36
+#: ../../Zotlabs/Module/Go.php:37
msgid "Upload a cover photo"
msgstr "Subir una foto de portada del perfil"
-#: ../../Zotlabs/Module/Go.php:37
+#: ../../Zotlabs/Module/Go.php:38
msgid "Edit your default profile"
msgstr "Editar su perfil por defecto"
-#: ../../Zotlabs/Module/Go.php:39
+#: ../../Zotlabs/Module/Go.php:40
msgid "View the channel directory"
msgstr "Ver el directorio de canales"
-#: ../../Zotlabs/Module/Go.php:40
+#: ../../Zotlabs/Module/Go.php:41
msgid "View/edit your channel settings"
msgstr "Ver o modificar los ajustes de su canal"
-#: ../../Zotlabs/Module/Go.php:41
+#: ../../Zotlabs/Module/Go.php:42
msgid "View the site or project documentation"
msgstr "Ver el sitio o la documentación del proyecto"
-#: ../../Zotlabs/Module/Go.php:42
+#: ../../Zotlabs/Module/Go.php:43
msgid "Visit your channel homepage"
msgstr "Visitar la página principal de su canal"
-#: ../../Zotlabs/Module/Go.php:43
+#: ../../Zotlabs/Module/Go.php:44
msgid ""
"View your connections and/or add somebody whose address you already know"
msgstr "Vea sus conexiones y/o agregue a alguien cuya dirección ya conozca"
-#: ../../Zotlabs/Module/Go.php:44
+#: ../../Zotlabs/Module/Go.php:45
msgid ""
"View your personal stream (this may be empty until you add some connections)"
msgstr "Ver su \"stream\" personal (puede que esté vacío hasta que agregue algunas conexiones)"
-#: ../../Zotlabs/Module/Go.php:52
+#: ../../Zotlabs/Module/Go.php:53
msgid "View the public stream. Warning: this content is not moderated"
msgstr "Ver el \"stream\" público. Advertencia: este contenido no está moderado"
@@ -13509,130 +13458,130 @@ msgstr "Caducidad"
msgid "min"
msgstr "min"
-#: ../../Zotlabs/Module/Regate.php:84
+#: ../../Zotlabs/Module/Regate.php:85
msgid "Email resent"
msgstr "Correo electrónico reenviado"
-#: ../../Zotlabs/Module/Regate.php:84
+#: ../../Zotlabs/Module/Regate.php:85
msgid "Email resend failed"
msgstr "Fallo en el reenvío del correo electrónico"
-#: ../../Zotlabs/Module/Regate.php:109
+#: ../../Zotlabs/Module/Regate.php:110
msgid "Verification successful"
msgstr "¡Verificación exitosa!"
-#: ../../Zotlabs/Module/Regate.php:153
+#: ../../Zotlabs/Module/Regate.php:154
msgid "Account successfull created"
msgstr "Cuenta creada con éxito"
-#: ../../Zotlabs/Module/Regate.php:211
+#: ../../Zotlabs/Module/Regate.php:212
msgid "Channel successfull created"
msgstr "Canal creado con éxito"
-#: ../../Zotlabs/Module/Regate.php:217
+#: ../../Zotlabs/Module/Regate.php:218
msgid "Automatic channel creation failed. Please create a channel."
msgstr "La creación automática de canales ha fallado. Por favor, cree un canal."
-#: ../../Zotlabs/Module/Regate.php:229
+#: ../../Zotlabs/Module/Regate.php:230
msgid "Account creation error"
msgstr "Error en la creación de la cuenta"
-#: ../../Zotlabs/Module/Regate.php:241
+#: ../../Zotlabs/Module/Regate.php:242
msgid "Verify failed"
msgstr "Verificación fallida"
-#: ../../Zotlabs/Module/Regate.php:246
+#: ../../Zotlabs/Module/Regate.php:247
msgid "Token verification failed"
msgstr "Ha fallado el token de verificación."
-#: ../../Zotlabs/Module/Regate.php:251
+#: ../../Zotlabs/Module/Regate.php:252
msgid "Request not inside time frame"
msgstr "Solicitud fuera de plazo"
-#: ../../Zotlabs/Module/Regate.php:257 ../../Zotlabs/Module/Regate.php:287
+#: ../../Zotlabs/Module/Regate.php:258 ../../Zotlabs/Module/Regate.php:288
msgid "Identity unknown"
msgstr "Identidad desconocida"
-#: ../../Zotlabs/Module/Regate.php:263
+#: ../../Zotlabs/Module/Regate.php:264
msgid "dId2 mistaken"
msgstr "did2 equivocado/a"
-#: ../../Zotlabs/Module/Regate.php:291
+#: ../../Zotlabs/Module/Regate.php:292
msgid "Your Registration ID"
msgstr "Su ID de registro"
-#: ../../Zotlabs/Module/Regate.php:304 ../../Zotlabs/Module/Regate.php:396
-#: ../../Zotlabs/Module/Regate.php:428
+#: ../../Zotlabs/Module/Regate.php:305 ../../Zotlabs/Module/Regate.php:397
+#: ../../Zotlabs/Module/Regate.php:429
msgid "Registration verification"
msgstr "Verificación del registro"
-#: ../../Zotlabs/Module/Regate.php:311 ../../Zotlabs/Module/Regate.php:433
+#: ../../Zotlabs/Module/Regate.php:312 ../../Zotlabs/Module/Regate.php:434
msgid "Hold on, you can start verification in"
msgstr "Espere, puede empezar la verificación en "
-#: ../../Zotlabs/Module/Regate.php:312
+#: ../../Zotlabs/Module/Regate.php:313
msgid "Please remember your verification token for ID"
msgstr "Por favor, recuerde su token de verificación para la identificación"
-#: ../../Zotlabs/Module/Regate.php:314
+#: ../../Zotlabs/Module/Regate.php:315
msgid "Token validity"
msgstr "Validez del token"
-#: ../../Zotlabs/Module/Regate.php:350
+#: ../../Zotlabs/Module/Regate.php:351
msgid "Resend email"
msgstr "Reenvío de correo electrónico"
-#: ../../Zotlabs/Module/Regate.php:355
+#: ../../Zotlabs/Module/Regate.php:356
msgid "Registration status"
msgstr "Estado del registro"
-#: ../../Zotlabs/Module/Regate.php:358
+#: ../../Zotlabs/Module/Regate.php:359
msgid "Verification successful!"
msgstr "¡Verificación exitosa!"
-#: ../../Zotlabs/Module/Regate.php:359
+#: ../../Zotlabs/Module/Regate.php:360
msgid "Your login ID is"
msgstr "Su ID de acceso es"
-#: ../../Zotlabs/Module/Regate.php:360
+#: ../../Zotlabs/Module/Regate.php:361
msgid ""
"After your account has been approved by our administrator you will be able "
"to login with your login ID and your provided password."
msgstr "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada."
-#: ../../Zotlabs/Module/Regate.php:372
+#: ../../Zotlabs/Module/Regate.php:373
msgid "Registration request revoked"
msgstr "Solicitud de registro anulada"
-#: ../../Zotlabs/Module/Regate.php:373
+#: ../../Zotlabs/Module/Regate.php:374
msgid "Sorry for any inconvience. Thank you for your response."
msgstr "Disculpe las molestias. Gracias por su respuesta."
-#: ../../Zotlabs/Module/Regate.php:397
+#: ../../Zotlabs/Module/Regate.php:398
msgid "Please enter your verification token for ID"
msgstr "Por favor, introduzca su token de verificación para la identificación"
-#: ../../Zotlabs/Module/Regate.php:398 ../../Zotlabs/Module/Regate.php:425
+#: ../../Zotlabs/Module/Regate.php:399 ../../Zotlabs/Module/Regate.php:426
msgid "Please check your email!"
msgstr "¡Por favor, compruebe su correo electrónico!"
-#: ../../Zotlabs/Module/Regate.php:408
+#: ../../Zotlabs/Module/Regate.php:409
msgid "Verification token"
msgstr "Token de verificación "
-#: ../../Zotlabs/Module/Regate.php:419
+#: ../../Zotlabs/Module/Regate.php:420
msgid "ID expired"
msgstr "ID caducada"
-#: ../../Zotlabs/Module/Regate.php:434
+#: ../../Zotlabs/Module/Regate.php:435
msgid "You will require the verification token for ID"
msgstr "Necesitará el token de verificación para identificarse"
-#: ../../Zotlabs/Module/Regate.php:443
+#: ../../Zotlabs/Module/Regate.php:444
msgid "Unknown or expired ID"
msgstr "ID desconocida o caducada"
-#: ../../Zotlabs/Module/Regate.php:454
+#: ../../Zotlabs/Module/Regate.php:455
msgid "dId2 malformed"
msgstr "did2 malformado/a"
@@ -13640,433 +13589,433 @@ msgstr "did2 malformado/a"
msgid "Edit Layout"
msgstr "Modificar la plantilla"
-#: ../../Zotlabs/Module/Setup.php:179
+#: ../../Zotlabs/Module/Setup.php:180
msgid "$Projectname Server - Setup"
msgstr "Servidor $Projectname - Instalación"
-#: ../../Zotlabs/Module/Setup.php:183
+#: ../../Zotlabs/Module/Setup.php:184
msgid "Could not connect to database."
msgstr "No se ha podido conectar a la base de datos."
-#: ../../Zotlabs/Module/Setup.php:187
+#: ../../Zotlabs/Module/Setup.php:188
msgid ""
"Could not connect to specified site URL. Possible SSL certificate or DNS "
"issue."
msgstr "No se puede conectar con la dirección del sitio indicada. Podría tratarse de un problema de SSL o DNS."
-#: ../../Zotlabs/Module/Setup.php:194
+#: ../../Zotlabs/Module/Setup.php:195
msgid "Could not create table."
msgstr "No se puede crear la tabla."
-#: ../../Zotlabs/Module/Setup.php:200
+#: ../../Zotlabs/Module/Setup.php:201
msgid "Your site database has been installed."
msgstr "La base de datos del sitio ha sido instalada."
-#: ../../Zotlabs/Module/Setup.php:206
+#: ../../Zotlabs/Module/Setup.php:207
msgid ""
"You may need to import the file \"install/schema_xxx.sql\" manually using a "
"database client."
msgstr "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos."
-#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
-#: ../../Zotlabs/Module/Setup.php:796
+#: ../../Zotlabs/Module/Setup.php:208 ../../Zotlabs/Module/Setup.php:277
+#: ../../Zotlabs/Module/Setup.php:802
msgid "Please see the file \"install/INSTALL.txt\"."
msgstr "Por favor, lea el fichero \"install/INSTALL.txt\"."
-#: ../../Zotlabs/Module/Setup.php:268
+#: ../../Zotlabs/Module/Setup.php:274
msgid "System check"
msgstr "Verificación del sistema"
-#: ../../Zotlabs/Module/Setup.php:273
+#: ../../Zotlabs/Module/Setup.php:279
msgid "Check again"
msgstr "Verificar de nuevo"
-#: ../../Zotlabs/Module/Setup.php:294
+#: ../../Zotlabs/Module/Setup.php:300
msgid "Database connection"
msgstr "Conexión a la base de datos"
-#: ../../Zotlabs/Module/Setup.php:295
+#: ../../Zotlabs/Module/Setup.php:301
msgid ""
"In order to install $Projectname we need to know how to connect to your "
"database."
msgstr "Para instalar $Projectname es necesario saber cómo conectar con su base de datos."
-#: ../../Zotlabs/Module/Setup.php:296
+#: ../../Zotlabs/Module/Setup.php:302
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Por favor, contacte con el proveedor de servicios o el administrador del sitio si tiene dudas sobre estos ajustes."
-#: ../../Zotlabs/Module/Setup.php:297
+#: ../../Zotlabs/Module/Setup.php:303
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "La base de datos que especifique a continuación debe existir ya. Si no es así, por favor, créela antes de seguir."
-#: ../../Zotlabs/Module/Setup.php:301
+#: ../../Zotlabs/Module/Setup.php:307
msgid "Database Server Name"
msgstr "Nombre del servidor de base de datos"
-#: ../../Zotlabs/Module/Setup.php:301
+#: ../../Zotlabs/Module/Setup.php:307
msgid "Default is 127.0.0.1"
msgstr "De forma predeterminada es 127.0.0.1"
-#: ../../Zotlabs/Module/Setup.php:302
+#: ../../Zotlabs/Module/Setup.php:308
msgid "Database Port"
msgstr "Puerto de la base de datos"
-#: ../../Zotlabs/Module/Setup.php:302
+#: ../../Zotlabs/Module/Setup.php:308
msgid "Communication port number - use 0 for default"
msgstr "Número del puerto de comunicaciones - use 0 como valor por defecto"
-#: ../../Zotlabs/Module/Setup.php:303
+#: ../../Zotlabs/Module/Setup.php:309
msgid "Database Login Name"
msgstr "Usuario de la base de datos"
-#: ../../Zotlabs/Module/Setup.php:304
+#: ../../Zotlabs/Module/Setup.php:310
msgid "Database Login Password"
msgstr "Contraseña de acceso a la base de datos"
-#: ../../Zotlabs/Module/Setup.php:305
+#: ../../Zotlabs/Module/Setup.php:311
msgid "Database Name"
msgstr "Nombre de la base de datos"
-#: ../../Zotlabs/Module/Setup.php:306
+#: ../../Zotlabs/Module/Setup.php:312
msgid "Database Type"
msgstr "Tipo de base de datos"
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+#: ../../Zotlabs/Module/Setup.php:314 ../../Zotlabs/Module/Setup.php:354
msgid "Site administrator email address"
msgstr "Dirección de correo electrónico del administrador del sitio"
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+#: ../../Zotlabs/Module/Setup.php:314 ../../Zotlabs/Module/Setup.php:354
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Su cuenta deberá usar la misma dirección de correo electrónico para poder utilizar el panel de administración web."
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+#: ../../Zotlabs/Module/Setup.php:315 ../../Zotlabs/Module/Setup.php:356
msgid "Website URL"
msgstr "Dirección del sitio web"
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+#: ../../Zotlabs/Module/Setup.php:315 ../../Zotlabs/Module/Setup.php:356
msgid "Please use SSL (https) URL if available."
msgstr "Por favor, use SSL (https) si está disponible."
-#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352
+#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:358
msgid "Please select a default timezone for your website"
msgstr "Por favor, selecciones el huso horario por defecto de su sitio web"
-#: ../../Zotlabs/Module/Setup.php:337
+#: ../../Zotlabs/Module/Setup.php:343
msgid "Site settings"
msgstr "Ajustes del sitio"
-#: ../../Zotlabs/Module/Setup.php:391
+#: ../../Zotlabs/Module/Setup.php:397
msgid "PHP version 8.0 or greater is required."
msgstr "Se requiere la versión 8.0 o superior de PHP."
-#: ../../Zotlabs/Module/Setup.php:392
+#: ../../Zotlabs/Module/Setup.php:398
msgid "PHP version"
msgstr "Versión de PHP"
-#: ../../Zotlabs/Module/Setup.php:408
+#: ../../Zotlabs/Module/Setup.php:414
msgid "Could not find a command line version of PHP in the web server PATH."
msgstr "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web."
-#: ../../Zotlabs/Module/Setup.php:409
+#: ../../Zotlabs/Module/Setup.php:415
msgid ""
"If you don't have a command line version of PHP installed on server, you "
"will not be able to run background polling via cron."
msgstr "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron."
-#: ../../Zotlabs/Module/Setup.php:413
+#: ../../Zotlabs/Module/Setup.php:419
msgid "PHP executable path"
msgstr "Ruta del ejecutable PHP"
-#: ../../Zotlabs/Module/Setup.php:413
+#: ../../Zotlabs/Module/Setup.php:419
msgid ""
"Enter full path to php executable. You can leave this blank to continue the "
"installation."
msgstr "Introducir la ruta completa del ejecutable PHP. Puede dejar la línea en blanco para continuar la instalación."
-#: ../../Zotlabs/Module/Setup.php:418
+#: ../../Zotlabs/Module/Setup.php:424
msgid "Command line PHP"
msgstr "PHP en línea de comandos"
-#: ../../Zotlabs/Module/Setup.php:428
+#: ../../Zotlabs/Module/Setup.php:434
msgid ""
"Unable to check command line PHP, as shell_exec() is disabled. This is "
"required."
msgstr "No se puede comprobar la línea de comandos PHP, ya que shell_exec() está deshabilitado. Es necesario que esté activado."
-#: ../../Zotlabs/Module/Setup.php:432
+#: ../../Zotlabs/Module/Setup.php:438
msgid ""
"The command line version of PHP on your system does not have "
"\"register_argc_argv\" enabled."
msgstr "La línea de comandos PHP de su sistema no tiene activado \"register_argc_argv\"."
-#: ../../Zotlabs/Module/Setup.php:433
+#: ../../Zotlabs/Module/Setup.php:439
msgid "This is required for message delivery to work."
msgstr "Esto es necesario para que funcione la transmisión de mensajes."
-#: ../../Zotlabs/Module/Setup.php:436
+#: ../../Zotlabs/Module/Setup.php:442
msgid "PHP register_argc_argv"
msgstr "PHP register_argc_argv"
-#: ../../Zotlabs/Module/Setup.php:456
+#: ../../Zotlabs/Module/Setup.php:462
msgid ""
"This is not sufficient to upload larger images or files. You should be able "
"to upload at least 4 MB at once."
msgstr "Esto no es suficiente para subir imágenes o archivos más grandes. Usted debe ser capaz de subir al menos 4 MB a la vez."
-#: ../../Zotlabs/Module/Setup.php:458
+#: ../../Zotlabs/Module/Setup.php:464
#, php-format
msgid ""
"Your max allowed total upload size is set to %s. Maximum size of one file to"
" upload is set to %s. You are allowed to upload up to %d files at once."
msgstr "La carga máxima que se le permite subir está establecida en %s. El tamaño máximo de un fichero está establecido en %s. Está permitido subir hasta un máximo de %d ficheros de una sola vez."
-#: ../../Zotlabs/Module/Setup.php:464
+#: ../../Zotlabs/Module/Setup.php:470
msgid "You can adjust these settings in the server php.ini file."
msgstr "Puede ajustar estos valores en el fichero php.ini de su servidor."
-#: ../../Zotlabs/Module/Setup.php:466
+#: ../../Zotlabs/Module/Setup.php:472
msgid "PHP upload limits"
msgstr "Límites PHP de subida"
-#: ../../Zotlabs/Module/Setup.php:489
+#: ../../Zotlabs/Module/Setup.php:495
msgid ""
"Error: the \"openssl_pkey_new\" function on this system is not able to "
"generate encryption keys"
msgstr "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado."
-#: ../../Zotlabs/Module/Setup.php:490
+#: ../../Zotlabs/Module/Setup.php:496
msgid ""
"If running under Windows, please see "
"\"http://www.php.net/manual/en/openssl.installation.php\"."
msgstr "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\"."
-#: ../../Zotlabs/Module/Setup.php:493
+#: ../../Zotlabs/Module/Setup.php:499
msgid "Generate encryption keys"
msgstr "Generar claves de cifrado"
-#: ../../Zotlabs/Module/Setup.php:497
+#: ../../Zotlabs/Module/Setup.php:503
msgid "Error: the sodium encryption library is not installed."
msgstr "Error: la biblioteca de encriptación sodium no está instalada."
-#: ../../Zotlabs/Module/Setup.php:499
+#: ../../Zotlabs/Module/Setup.php:505
msgid "Generate ed25519 encryption keys"
msgstr "Generar claves de cifrado ed25519"
-#: ../../Zotlabs/Module/Setup.php:504
+#: ../../Zotlabs/Module/Setup.php:510
msgid "Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are required."
msgstr "Error: se requiere una de las extensiones \"bcmath\" o \"gmp\" (bigmath library)."
-#: ../../Zotlabs/Module/Setup.php:506
+#: ../../Zotlabs/Module/Setup.php:512
msgid "Bigmath library (either bcmath or gmp)"
msgstr "Biblioteca Bigmath (bcmath o gmp)"
-#: ../../Zotlabs/Module/Setup.php:523
+#: ../../Zotlabs/Module/Setup.php:529
msgid "libCurl PHP module"
msgstr "módulo libCurl PHP"
-#: ../../Zotlabs/Module/Setup.php:524
+#: ../../Zotlabs/Module/Setup.php:530
msgid "GD graphics PHP module"
msgstr "módulo PHP GD graphics"
-#: ../../Zotlabs/Module/Setup.php:525
+#: ../../Zotlabs/Module/Setup.php:531
msgid "OpenSSL PHP module"
msgstr "módulo PHP OpenSSL"
-#: ../../Zotlabs/Module/Setup.php:526
+#: ../../Zotlabs/Module/Setup.php:532
msgid "PDO database PHP module"
msgstr "Módulo PHP de la base de datos PDO "
-#: ../../Zotlabs/Module/Setup.php:527
+#: ../../Zotlabs/Module/Setup.php:533
msgid "mb_string PHP module"
msgstr "módulo PHP mb_string"
-#: ../../Zotlabs/Module/Setup.php:528
+#: ../../Zotlabs/Module/Setup.php:534
msgid "xml PHP module"
msgstr "módulo PHP xml"
-#: ../../Zotlabs/Module/Setup.php:529
+#: ../../Zotlabs/Module/Setup.php:535
msgid "zip PHP module"
msgstr "Módulo zip PHP"
-#: ../../Zotlabs/Module/Setup.php:530
+#: ../../Zotlabs/Module/Setup.php:536
msgid "intl PHP module"
msgstr "módulo intl PHP"
-#: ../../Zotlabs/Module/Setup.php:534 ../../Zotlabs/Module/Setup.php:536
+#: ../../Zotlabs/Module/Setup.php:540 ../../Zotlabs/Module/Setup.php:542
msgid "Apache mod_rewrite module"
msgstr "módulo Apache mod_rewrite "
-#: ../../Zotlabs/Module/Setup.php:534
+#: ../../Zotlabs/Module/Setup.php:540
msgid ""
"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:540 ../../Zotlabs/Module/Setup.php:543
+#: ../../Zotlabs/Module/Setup.php:546 ../../Zotlabs/Module/Setup.php:549
msgid "exec"
msgstr "ejecutable"
-#: ../../Zotlabs/Module/Setup.php:540
+#: ../../Zotlabs/Module/Setup.php:546
msgid ""
"Error: exec is required but is either not installed or has been disabled in "
"php.ini"
msgstr "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini"
-#: ../../Zotlabs/Module/Setup.php:546 ../../Zotlabs/Module/Setup.php:549
+#: ../../Zotlabs/Module/Setup.php:552 ../../Zotlabs/Module/Setup.php:555
msgid "shell_exec"
msgstr "shell_exec"
-#: ../../Zotlabs/Module/Setup.php:546
+#: ../../Zotlabs/Module/Setup.php:552
msgid ""
"Error: shell_exec is required but is either not installed or has been "
"disabled in php.ini"
msgstr "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini"
-#: ../../Zotlabs/Module/Setup.php:554
+#: ../../Zotlabs/Module/Setup.php:560
msgid "Error: libCURL PHP module required but not installed."
msgstr "Error: se necesita el módulo PHP libCURL pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:558
+#: ../../Zotlabs/Module/Setup.php:564
msgid ""
"Error: GD PHP module with JPEG support or ImageMagick graphics library "
"required but not installed."
msgstr "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:562
+#: ../../Zotlabs/Module/Setup.php:568
msgid "Error: openssl PHP module required but not installed."
msgstr "Error: el módulo PHP openssl es necesario, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:568
+#: ../../Zotlabs/Module/Setup.php:574
msgid ""
"Error: PDO database PHP module missing a driver for either mysql or pgsql."
msgstr "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql."
-#: ../../Zotlabs/Module/Setup.php:573
+#: ../../Zotlabs/Module/Setup.php:579
msgid "Error: PDO database PHP module required but not installed."
msgstr "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:577
+#: ../../Zotlabs/Module/Setup.php:583
msgid "Error: mb_string PHP module required but not installed."
msgstr "Error: el módulo PHP mb_string es necesario, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:581
+#: ../../Zotlabs/Module/Setup.php:587
msgid "Error: xml PHP module required for DAV but not installed."
msgstr "Error: el módulo PHP xml es necesario para DAV, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:585
+#: ../../Zotlabs/Module/Setup.php:591
msgid "Error: zip PHP module required but not installed."
msgstr "Error: se requiere el módulo zip PHP pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:589
+#: ../../Zotlabs/Module/Setup.php:595
msgid "Error: intl PHP module required but not installed."
msgstr "Error: el módulo intl PHP es necesario pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:608 ../../Zotlabs/Module/Setup.php:617
+#: ../../Zotlabs/Module/Setup.php:614 ../../Zotlabs/Module/Setup.php:623
msgid ".htconfig.php is writable"
msgstr ".htconfig.php tiene permisos de escritura"
-#: ../../Zotlabs/Module/Setup.php:613
+#: ../../Zotlabs/Module/Setup.php:619
msgid ""
"The web installer needs to be able to create a file called \".htconfig.php\""
" in the top folder of your web server and it is unable to do so."
msgstr "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor."
-#: ../../Zotlabs/Module/Setup.php:614
+#: ../../Zotlabs/Module/Setup.php:620
msgid ""
"This is most often a permission setting, as the web server may not be able "
"to write files in your folder - even if you can."
msgstr "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos."
-#: ../../Zotlabs/Module/Setup.php:615
+#: ../../Zotlabs/Module/Setup.php:621
msgid "Please see install/INSTALL.txt for additional information."
msgstr "Por favor, consulte install/INSTALL.txt para más información."
-#: ../../Zotlabs/Module/Setup.php:631
+#: ../../Zotlabs/Module/Setup.php:637
msgid ""
"This software uses the Smarty3 template engine to render its web views. "
"Smarty3 compiles templates to PHP to speed up rendering."
msgstr "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización."
-#: ../../Zotlabs/Module/Setup.php:632
+#: ../../Zotlabs/Module/Setup.php:638
#, php-format
msgid ""
"In order to store these compiled templates, the web server needs to have "
"write access to the directory %s under the top level web folder."
msgstr "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal."
-#: ../../Zotlabs/Module/Setup.php:633 ../../Zotlabs/Module/Setup.php:654
+#: ../../Zotlabs/Module/Setup.php:639 ../../Zotlabs/Module/Setup.php:660
msgid ""
"Please ensure that the user that your web server runs as (e.g. www-data) has"
" write access to this folder."
msgstr "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data)."
-#: ../../Zotlabs/Module/Setup.php:634
+#: ../../Zotlabs/Module/Setup.php:640
#, php-format
msgid ""
"Note: as a security measure, you should give the web server write access to "
"%s only--not the template files (.tpl) that it contains."
msgstr "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene."
-#: ../../Zotlabs/Module/Setup.php:637
+#: ../../Zotlabs/Module/Setup.php:643
#, php-format
msgid "%s is writable"
msgstr "%s tiene permisos de escritura"
-#: ../../Zotlabs/Module/Setup.php:653
+#: ../../Zotlabs/Module/Setup.php:659
msgid ""
"This software uses the store directory to save uploaded files. The web "
"server needs to have write access to the store directory under the top level"
" web folder"
msgstr "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior"
-#: ../../Zotlabs/Module/Setup.php:657
+#: ../../Zotlabs/Module/Setup.php:663
msgid "store is writable"
msgstr "\"store\" tiene permisos de escritura"
-#: ../../Zotlabs/Module/Setup.php:689
+#: ../../Zotlabs/Module/Setup.php:695
msgid ""
"SSL certificate cannot be validated. Fix certificate or disable https access"
" to this site."
msgstr "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio."
-#: ../../Zotlabs/Module/Setup.php:690
+#: ../../Zotlabs/Module/Setup.php:696
msgid ""
"If you have https access to your website or allow connections to TCP port "
"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
"NOT use self-signed certificates!"
msgstr "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo."
-#: ../../Zotlabs/Module/Setup.php:691
+#: ../../Zotlabs/Module/Setup.php:697
msgid ""
"This restriction is incorporated because public posts from you may for "
"example contain references to images on your own hub."
msgstr "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor."
-#: ../../Zotlabs/Module/Setup.php:692
+#: ../../Zotlabs/Module/Setup.php:698
msgid ""
"If your certificate is not recognized, members of other sites (who may "
"themselves have valid certificates) will get a warning message on their own "
"site complaining about security issues."
msgstr "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web."
-#: ../../Zotlabs/Module/Setup.php:693
+#: ../../Zotlabs/Module/Setup.php:699
msgid ""
"This can cause usability issues elsewhere (not just on your own site) so we "
"must insist on this requirement."
msgstr "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos."
-#: ../../Zotlabs/Module/Setup.php:694
+#: ../../Zotlabs/Module/Setup.php:700
msgid ""
"Providers are available that issue free certificates which are browser-"
"valid."
msgstr "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos."
-#: ../../Zotlabs/Module/Setup.php:695
+#: ../../Zotlabs/Module/Setup.php:701
msgid ""
"If you are confident that the certificate is valid and signed by a trusted "
"authority, check to see if you have failed to install an intermediate cert. "
@@ -14074,32 +14023,32 @@ msgid ""
"server communications."
msgstr "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor."
-#: ../../Zotlabs/Module/Setup.php:697
+#: ../../Zotlabs/Module/Setup.php:703
msgid "SSL certificate validation"
msgstr "validación del certificado SSL"
-#: ../../Zotlabs/Module/Setup.php:703
+#: ../../Zotlabs/Module/Setup.php:709
msgid ""
"Url rewrite in .htaccess is not working. Check your server "
"configuration.Test: "
msgstr "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:"
-#: ../../Zotlabs/Module/Setup.php:706
+#: ../../Zotlabs/Module/Setup.php:712
msgid "Url rewrite is working"
msgstr "La reescritura de las direcciones funciona correctamente"
-#: ../../Zotlabs/Module/Setup.php:719
+#: ../../Zotlabs/Module/Setup.php:725
msgid ""
"The database configuration file \".htconfig.php\" could not be written. "
"Please use the enclosed text to create a configuration file in your web "
"server root."
msgstr "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor."
-#: ../../Zotlabs/Module/Setup.php:794
+#: ../../Zotlabs/Module/Setup.php:800
msgid "<h1>What next?</h1>"
msgstr "<h1>¿Qué sigue?</h1>"
-#: ../../Zotlabs/Module/Setup.php:795
+#: ../../Zotlabs/Module/Setup.php:801
msgid ""
"IMPORTANT: You will need to [manually] setup a scheduled task for the "
"poller."
@@ -14109,23 +14058,23 @@ msgstr "IMPORTANTE: Debe crear [manualmente] una tarea programada para el \"poll
msgid "toggle full screen mode"
msgstr "cambiar al modo de pantalla completa"
-#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63
+#: ../../Zotlabs/Module/Profperm.php:35 ../../Zotlabs/Module/Profperm.php:66
msgid "Invalid profile identifier."
msgstr "Identificador del perfil no válido"
-#: ../../Zotlabs/Module/Profperm.php:111
+#: ../../Zotlabs/Module/Profperm.php:114
msgid "Profile Visibility Editor"
msgstr "Editor de visibilidad del perfil"
-#: ../../Zotlabs/Module/Profperm.php:115
+#: ../../Zotlabs/Module/Profperm.php:118
msgid "Click on a contact to add or remove."
msgstr "Pulsar en un contacto para añadirlo o eliminarlo."
-#: ../../Zotlabs/Module/Profperm.php:124
+#: ../../Zotlabs/Module/Profperm.php:127
msgid "Visible To"
msgstr "Visible para"
-#: ../../Zotlabs/Module/Profperm.php:140
+#: ../../Zotlabs/Module/Profperm.php:143
#: ../../Zotlabs/Module/Connections.php:221
msgid "All Connections"
msgstr "Todas las conexiones"
@@ -14134,7 +14083,7 @@ msgstr "Todas las conexiones"
msgid "Language App"
msgstr "App idioma"
-#: ../../Zotlabs/Module/Rpost.php:217 ../../Zotlabs/Module/Editpost.php:113
+#: ../../Zotlabs/Module/Rpost.php:117 ../../Zotlabs/Module/Editpost.php:114
msgid "Edit post"
msgstr "Editar la entrada"
@@ -14344,7 +14293,7 @@ msgstr "Calendario por defecto"
msgid "Default Addressbook"
msgstr "Agenda de direcciones por defecto"
-#: ../../Zotlabs/Module/Dirsearch.php:31
+#: ../../Zotlabs/Module/Dirsearch.php:32
msgid "This directory server requires an access token"
msgstr "El servidor de este directorio necesita un \"token\" de acceso"
@@ -14352,19 +14301,19 @@ msgstr "El servidor de este directorio necesita un \"token\" de acceso"
msgid "Name and Secret are required"
msgstr "\"Key\" y \"Secret\" son obligatorios"
-#: ../../Zotlabs/Module/Oauth2.php:113
+#: ../../Zotlabs/Module/Oauth2.php:114
msgid "Add OAuth2 application"
msgstr "Añadir aplicación OAuth2"
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
+#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:147
msgid "Grant Types"
msgstr "Tipos de permisos"
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
+#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:121
msgid "leave blank unless your application sepcifically requires this"
msgstr "Dejar en blanco a menos que su aplicación lo requiera específicamente"
-#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
+#: ../../Zotlabs/Module/Oauth2.php:121 ../../Zotlabs/Module/Oauth2.php:148
msgid "Authorization scope"
msgstr "Alcance de la autorización"
@@ -14380,74 +14329,74 @@ msgstr "dejar en blanco a menos que su aplicación lo requiera específicamente"
msgid "Connected OAuth2 Apps"
msgstr "Aplicaciones OAuth2 conectadas"
-#: ../../Zotlabs/Module/Settings/Display.php:125
+#: ../../Zotlabs/Module/Settings/Display.php:126
#, php-format
msgid "%s - (Experimental)"
msgstr "%s - (Experimental)"
-#: ../../Zotlabs/Module/Settings/Display.php:182
+#: ../../Zotlabs/Module/Settings/Display.php:183
msgid "Display Settings"
msgstr "Ajustes de visualización"
-#: ../../Zotlabs/Module/Settings/Display.php:183
+#: ../../Zotlabs/Module/Settings/Display.php:184
msgid "Theme Settings"
msgstr "Ajustes del tema"
-#: ../../Zotlabs/Module/Settings/Display.php:184
+#: ../../Zotlabs/Module/Settings/Display.php:185
msgid "Custom Theme Settings"
msgstr "Ajustes personalizados del tema"
-#: ../../Zotlabs/Module/Settings/Display.php:185
+#: ../../Zotlabs/Module/Settings/Display.php:186
msgid "Content Settings"
msgstr "Ajustes del contenido"
-#: ../../Zotlabs/Module/Settings/Display.php:191
+#: ../../Zotlabs/Module/Settings/Display.php:192
msgid "Display Theme:"
msgstr "Tema gráfico del perfil:"
-#: ../../Zotlabs/Module/Settings/Display.php:192
+#: ../../Zotlabs/Module/Settings/Display.php:193
msgid "Select scheme"
msgstr "Elegir un esquema"
-#: ../../Zotlabs/Module/Settings/Display.php:194
+#: ../../Zotlabs/Module/Settings/Display.php:195
msgid "Preload images before rendering the page"
msgstr "Carga previa de las imágenes antes de generar la página"
-#: ../../Zotlabs/Module/Settings/Display.php:194
+#: ../../Zotlabs/Module/Settings/Display.php:195
msgid ""
"The subjective page load time will be longer but the page will be ready when"
" displayed"
msgstr "El tiempo subjetivo de carga de la página será más largo, pero la página estará lista cuando se muestre."
-#: ../../Zotlabs/Module/Settings/Display.php:195
+#: ../../Zotlabs/Module/Settings/Display.php:196
msgid "Enable user zoom on mobile devices"
msgstr "Habilitar zoom de usuario en dispositivos móviles"
-#: ../../Zotlabs/Module/Settings/Display.php:196
+#: ../../Zotlabs/Module/Settings/Display.php:197
msgid "Update browser every xx seconds"
msgstr "Actualizar navegador cada xx segundos"
-#: ../../Zotlabs/Module/Settings/Display.php:196
+#: ../../Zotlabs/Module/Settings/Display.php:197
msgid "Minimum of 10 seconds, no maximum"
msgstr "Mínimo de 10 segundos, sin máximo"
-#: ../../Zotlabs/Module/Settings/Display.php:197
+#: ../../Zotlabs/Module/Settings/Display.php:198
msgid "Maximum number of conversations to load at any time:"
msgstr "Máximo número de conversaciones a cargar en cualquier momento:"
-#: ../../Zotlabs/Module/Settings/Display.php:197
+#: ../../Zotlabs/Module/Settings/Display.php:198
msgid "Maximum of 30 items"
msgstr "Máximo de 30 elementos"
-#: ../../Zotlabs/Module/Settings/Display.php:198
+#: ../../Zotlabs/Module/Settings/Display.php:199
msgid "Show emoticons (smilies) as images"
msgstr "Mostrar emoticonos (smilies) como imágenes"
-#: ../../Zotlabs/Module/Settings/Display.php:199
+#: ../../Zotlabs/Module/Settings/Display.php:200
msgid "Link post titles to source"
msgstr "Enlazar título de la publicación a la fuente original"
-#: ../../Zotlabs/Module/Settings/Display.php:201
+#: ../../Zotlabs/Module/Settings/Display.php:202
msgid "Display new member quick links menu"
msgstr "Mostrar el menú de enlaces rápidos para nuevos miembros"
@@ -14473,67 +14422,67 @@ msgstr "Menú personal que debe mostrarse en las páginas de su canal"
msgid "Channel Home Settings"
msgstr "Ajustes del canal"
-#: ../../Zotlabs/Module/Settings/Account.php:21
+#: ../../Zotlabs/Module/Settings/Account.php:23
msgid "Not valid email."
msgstr "Correo electrónico no válido."
-#: ../../Zotlabs/Module/Settings/Account.php:24
+#: ../../Zotlabs/Module/Settings/Account.php:26
msgid "Protected email address. Cannot change to that email."
msgstr "Dirección de correo electrónico protegida. No se puede cambiar a ella."
-#: ../../Zotlabs/Module/Settings/Account.php:33
+#: ../../Zotlabs/Module/Settings/Account.php:35
msgid "System failure storing new email. Please try again."
msgstr "Fallo de sistema al guardar el nuevo correo electrónico. Por favor, inténtelo de nuevo."
-#: ../../Zotlabs/Module/Settings/Account.php:51
+#: ../../Zotlabs/Module/Settings/Account.php:53
msgid "Password verification failed."
msgstr "La comprobación de la contraseña ha fallado."
-#: ../../Zotlabs/Module/Settings/Account.php:58
+#: ../../Zotlabs/Module/Settings/Account.php:60
msgid "Passwords do not match. Password unchanged."
msgstr "Las contraseñas no coinciden. La contraseña no se ha cambiado."
-#: ../../Zotlabs/Module/Settings/Account.php:62
+#: ../../Zotlabs/Module/Settings/Account.php:64
msgid "Empty passwords are not allowed. Password unchanged."
msgstr "No se permiten contraseñas vacías. La contraseña no se ha cambiado."
-#: ../../Zotlabs/Module/Settings/Account.php:76
+#: ../../Zotlabs/Module/Settings/Account.php:78
msgid "Password changed."
msgstr "Contraseña cambiada."
-#: ../../Zotlabs/Module/Settings/Account.php:78
+#: ../../Zotlabs/Module/Settings/Account.php:80
msgid "Password update failed. Please try again."
msgstr "La actualización de la contraseña ha fallado. Por favor, inténtalo de nuevo."
-#: ../../Zotlabs/Module/Settings/Account.php:103
+#: ../../Zotlabs/Module/Settings/Account.php:105
msgid "Account Settings"
msgstr "Configuración de la cuenta"
-#: ../../Zotlabs/Module/Settings/Account.php:104
+#: ../../Zotlabs/Module/Settings/Account.php:106
msgid "Current Password"
msgstr "Contraseña actual"
-#: ../../Zotlabs/Module/Settings/Account.php:105
+#: ../../Zotlabs/Module/Settings/Account.php:107
msgid "Enter New Password"
msgstr "Escribir una nueva contraseña"
-#: ../../Zotlabs/Module/Settings/Account.php:106
+#: ../../Zotlabs/Module/Settings/Account.php:108
msgid "Confirm New Password"
msgstr "Confirmar la nueva contraseña"
-#: ../../Zotlabs/Module/Settings/Account.php:106
+#: ../../Zotlabs/Module/Settings/Account.php:108
msgid "Leave password fields blank unless changing"
msgstr "Dejar en blanco la contraseña a menos que desee cambiarla."
-#: ../../Zotlabs/Module/Settings/Account.php:108
+#: ../../Zotlabs/Module/Settings/Account.php:110
msgid "Multi-Factor Authentication"
msgstr "Autenticación multifactorial"
-#: ../../Zotlabs/Module/Settings/Account.php:109
+#: ../../Zotlabs/Module/Settings/Account.php:111
msgid "DId2 or Email Address:"
msgstr "Did2 o dirección de correo electrónico: "
-#: ../../Zotlabs/Module/Settings/Account.php:112
+#: ../../Zotlabs/Module/Settings/Account.php:114
msgid "Remove this account including all its channels"
msgstr "Eliminar esta cuenta incluyendo todos sus canales"
@@ -14565,103 +14514,103 @@ msgstr "Guarde o envíe los cambios a cualquier panel antes de abrir otro."
msgid "Channel Manager Settings"
msgstr "Ajustes del administrador de canales"
-#: ../../Zotlabs/Module/Settings/Privacy.php:48
+#: ../../Zotlabs/Module/Settings/Privacy.php:49
msgid "Privacy settings updated."
msgstr "Se ha actualizado la configuración de la privacidad."
-#: ../../Zotlabs/Module/Settings/Privacy.php:66
+#: ../../Zotlabs/Module/Settings/Privacy.php:67
msgid "Only those you specifically allow"
msgstr "Solo aquellos a los que usted permita explícitamente"
-#: ../../Zotlabs/Module/Settings/Privacy.php:67
+#: ../../Zotlabs/Module/Settings/Privacy.php:68
msgid "Approved connections"
msgstr "Conexiones aprobadas"
-#: ../../Zotlabs/Module/Settings/Privacy.php:68
+#: ../../Zotlabs/Module/Settings/Privacy.php:69
msgid "Any connections"
msgstr "Cualquier conexión"
-#: ../../Zotlabs/Module/Settings/Privacy.php:69
+#: ../../Zotlabs/Module/Settings/Privacy.php:70
msgid "Anybody on this website"
msgstr "Cualquiera en este sitio web"
-#: ../../Zotlabs/Module/Settings/Privacy.php:70
+#: ../../Zotlabs/Module/Settings/Privacy.php:71
msgid "Anybody in this network"
msgstr "Cualquiera en esta red"
-#: ../../Zotlabs/Module/Settings/Privacy.php:71
+#: ../../Zotlabs/Module/Settings/Privacy.php:72
msgid "Anybody authenticated"
msgstr "Cualquiera que esté autenticado"
-#: ../../Zotlabs/Module/Settings/Privacy.php:72
+#: ../../Zotlabs/Module/Settings/Privacy.php:73
msgid "Anybody on the internet"
msgstr "Cualquiera en internet"
-#: ../../Zotlabs/Module/Settings/Privacy.php:82
+#: ../../Zotlabs/Module/Settings/Privacy.php:83
msgid ""
"Advise: set to \"Anybody on the internet\" and use privacy groups to "
"restrict access"
msgstr "Consejo: establezca la opción \"Cualquiera en Internet\" y utilice los grupos de privacidad para restringir el acceso"
-#: ../../Zotlabs/Module/Settings/Privacy.php:121
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
msgid "Privacy Settings"
msgstr "Ajustes de privacidad"
-#: ../../Zotlabs/Module/Settings/Privacy.php:126
+#: ../../Zotlabs/Module/Settings/Privacy.php:127
msgid "Advanced configuration"
msgstr "Ajustes avanzados"
-#: ../../Zotlabs/Module/Settings/Privacy.php:128
+#: ../../Zotlabs/Module/Settings/Privacy.php:129
msgid "Proceed with caution"
msgstr "Proceda con precaución"
-#: ../../Zotlabs/Module/Settings/Privacy.php:129
+#: ../../Zotlabs/Module/Settings/Privacy.php:130
msgid ""
"Changing advanced configuration settings can impact your, and your contacts "
"channels functionality and security."
msgstr "El cambio de los ajustes de configuración avanzada puede afectar a la funcionalidad y seguridad de sus canales y contactos."
-#: ../../Zotlabs/Module/Settings/Privacy.php:130
+#: ../../Zotlabs/Module/Settings/Privacy.php:131
msgid "Accept the risk and continue"
msgstr "Aceptar el riesgo y continuar"
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
msgid "Automatically approve new contacts"
msgstr "Aprobar automáticamente nuevos contactos"
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
msgid "Opt-out of search engine indexing"
msgstr "Exclusión de la indexación en los motores de búsqueda"
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
msgid "Group actor"
msgstr "Grupo de actores"
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
msgid "Allow this channel to act as a forum"
msgstr "Permitir que este canal actúe como un foro"
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
msgid "Accept all messages which mention you"
msgstr "Aceptar todos los mensajes que lo mencionen"
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
msgid "This setting bypasses normal permissions"
msgstr "Esta configuración omite los permisos normales"
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
msgid "Accept unsolicited comments for moderation"
msgstr "Aceptar comentarios no solicitados para su moderación"
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
msgid "Otherwise they will be silently dropped"
msgstr "De lo contrario, se eliminarán silenciosamente"
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
msgid "Enable OCAP access"
msgstr "Habilitar acceso OCAP"
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
msgid "Grant limited posts the right to access linked private media"
msgstr "Conceder a entradas limitadas el derecho de acceso a los medios privados vinculados"
@@ -14673,283 +14622,275 @@ msgstr "Gestión de eventos"
msgid "Photos Settings"
msgstr "Gestión de las fotos"
-#: ../../Zotlabs/Module/Settings/Conversation.php:23
-msgid "Settings saved."
-msgstr "Configuración guardada."
-
-#: ../../Zotlabs/Module/Settings/Conversation.php:25
-msgid "Settings saved. Reload page please."
-msgstr "Ajustes guardados. Recargue la página, por favor."
-
-#: ../../Zotlabs/Module/Settings/Conversation.php:47
+#: ../../Zotlabs/Module/Settings/Conversation.php:42
msgid "Conversation Settings"
msgstr "Ajustes de conversación"
-#: ../../Zotlabs/Module/Settings/Channel.php:105
-#: ../../Zotlabs/Module/Settings/Channel.php:217
+#: ../../Zotlabs/Module/Settings/Channel.php:106
+#: ../../Zotlabs/Module/Settings/Channel.php:218
msgid "Please select a channel role"
msgstr "Por favor, seleccione un rol de canal"
-#: ../../Zotlabs/Module/Settings/Channel.php:194
+#: ../../Zotlabs/Module/Settings/Channel.php:195
msgid "Your channel address is"
msgstr "Su dirección de canal es"
-#: ../../Zotlabs/Module/Settings/Channel.php:197
+#: ../../Zotlabs/Module/Settings/Channel.php:198
msgid "Your files/photos are accessible via WebDAV at"
msgstr "Sus archivos y fotos son accesibles a través de WebDAV en "
-#: ../../Zotlabs/Module/Settings/Channel.php:228
+#: ../../Zotlabs/Module/Settings/Channel.php:229
msgid "Channel Settings"
msgstr "Ajustes del canal"
-#: ../../Zotlabs/Module/Settings/Channel.php:235
+#: ../../Zotlabs/Module/Settings/Channel.php:236
msgid "Basic Settings"
msgstr "Configuración básica"
-#: ../../Zotlabs/Module/Settings/Channel.php:236
+#: ../../Zotlabs/Module/Settings/Channel.php:237
msgid "Channel timezone:"
msgstr "Zona horaria del canal: "
-#: ../../Zotlabs/Module/Settings/Channel.php:237
+#: ../../Zotlabs/Module/Settings/Channel.php:238
msgid "Default post location:"
msgstr "Ubicación de publicación predeterminada: "
-#: ../../Zotlabs/Module/Settings/Channel.php:237
+#: ../../Zotlabs/Module/Settings/Channel.php:238
msgid "Geographical location to display on your posts"
msgstr "Localización geográfica que debe mostrarse en sus publicaciones"
-#: ../../Zotlabs/Module/Settings/Channel.php:238
+#: ../../Zotlabs/Module/Settings/Channel.php:239
msgid "Use browser location"
msgstr "Usar la localización del navegador: "
-#: ../../Zotlabs/Module/Settings/Channel.php:239
+#: ../../Zotlabs/Module/Settings/Channel.php:240
msgid "Adult content"
msgstr "Contenido solo para adultos"
-#: ../../Zotlabs/Module/Settings/Channel.php:239
+#: ../../Zotlabs/Module/Settings/Channel.php:240
msgid "This channel frequently or regularly publishes adult content"
msgstr "Este canal publica con frecuencia o regularmente contenidos para adultos"
-#: ../../Zotlabs/Module/Settings/Channel.php:240
+#: ../../Zotlabs/Module/Settings/Channel.php:241
msgid "Maximum Friend Requests/Day:"
msgstr "Máximo de solicitudes de amistad por día:"
-#: ../../Zotlabs/Module/Settings/Channel.php:240
+#: ../../Zotlabs/Module/Settings/Channel.php:241
msgid "May reduce spam activity"
msgstr "Podría reducir la actividad de spam"
-#: ../../Zotlabs/Module/Settings/Channel.php:242
+#: ../../Zotlabs/Module/Settings/Channel.php:243
msgid "By default post a status message when:"
msgstr "Por defecto, enviar un mensaje de estado cuando:"
-#: ../../Zotlabs/Module/Settings/Channel.php:243
+#: ../../Zotlabs/Module/Settings/Channel.php:244
msgid "accepting a friend request"
msgstr "Acepte una solicitud de amistad"
-#: ../../Zotlabs/Module/Settings/Channel.php:244
+#: ../../Zotlabs/Module/Settings/Channel.php:245
msgid "joining a forum/community"
msgstr "al unirse a un foro o comunidad"
-#: ../../Zotlabs/Module/Settings/Channel.php:245
+#: ../../Zotlabs/Module/Settings/Channel.php:246
msgid "making an <em>interesting</em> profile change"
msgstr "Realice un cambio <em>interesante</em> en su perfil"
-#: ../../Zotlabs/Module/Settings/Channel.php:246
+#: ../../Zotlabs/Module/Settings/Channel.php:247
msgid "Send a notification email when:"
msgstr "Enviar una notificación por correo electrónico cuando:"
-#: ../../Zotlabs/Module/Settings/Channel.php:247
+#: ../../Zotlabs/Module/Settings/Channel.php:248
msgid "You receive a connection request"
msgstr "Reciba una solicitud de conexión"
-#: ../../Zotlabs/Module/Settings/Channel.php:248
+#: ../../Zotlabs/Module/Settings/Channel.php:249
msgid "Your connections are confirmed"
msgstr "Sus conexiones hayan sido confirmadas"
-#: ../../Zotlabs/Module/Settings/Channel.php:249
+#: ../../Zotlabs/Module/Settings/Channel.php:250
msgid "Someone writes on your profile wall"
msgstr "Alguien escriba en la página de su perfil (\"muro\")"
-#: ../../Zotlabs/Module/Settings/Channel.php:250
+#: ../../Zotlabs/Module/Settings/Channel.php:251
msgid "Someone writes a followup comment"
msgstr "Alguien escriba un comentario sobre sus publicaciones"
-#: ../../Zotlabs/Module/Settings/Channel.php:251
+#: ../../Zotlabs/Module/Settings/Channel.php:252
msgid "You receive a private message"
msgstr "Reciba un mensaje privado"
-#: ../../Zotlabs/Module/Settings/Channel.php:252
+#: ../../Zotlabs/Module/Settings/Channel.php:253
msgid "You receive a friend suggestion"
msgstr "Reciba una sugerencia de amistad"
-#: ../../Zotlabs/Module/Settings/Channel.php:253
+#: ../../Zotlabs/Module/Settings/Channel.php:254
msgid "You are tagged in a post"
msgstr "Usted sea etiquetado en una publicación"
-#: ../../Zotlabs/Module/Settings/Channel.php:254
+#: ../../Zotlabs/Module/Settings/Channel.php:255
msgid "You are poked/prodded/etc. in a post"
msgstr "Reciba un toque o incitación en una publicación"
-#: ../../Zotlabs/Module/Settings/Channel.php:255
+#: ../../Zotlabs/Module/Settings/Channel.php:256
msgid "Someone likes your post/comment"
msgstr "Alguien muestre agrado por su entrada o comentario"
-#: ../../Zotlabs/Module/Settings/Channel.php:256
+#: ../../Zotlabs/Module/Settings/Channel.php:257
msgid "Show visual notifications including:"
msgstr "Mostrar notificaciones visuales que incluyan:"
-#: ../../Zotlabs/Module/Settings/Channel.php:257
+#: ../../Zotlabs/Module/Settings/Channel.php:258
msgid "Unseen stream activity"
msgstr "Actividad del stream no vista"
-#: ../../Zotlabs/Module/Settings/Channel.php:258
+#: ../../Zotlabs/Module/Settings/Channel.php:259
msgid "Unseen channel activity"
msgstr "Actividad no vista en el canal"
-#: ../../Zotlabs/Module/Settings/Channel.php:259
+#: ../../Zotlabs/Module/Settings/Channel.php:260
msgid "Unseen private messages"
msgstr "Mensajes privados no leídos"
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-#: ../../Zotlabs/Module/Settings/Channel.php:264
+#: ../../Zotlabs/Module/Settings/Channel.php:260
#: ../../Zotlabs/Module/Settings/Channel.php:265
#: ../../Zotlabs/Module/Settings/Channel.php:266
+#: ../../Zotlabs/Module/Settings/Channel.php:267
msgid "Recommended"
msgstr "Recomendado"
-#: ../../Zotlabs/Module/Settings/Channel.php:260
+#: ../../Zotlabs/Module/Settings/Channel.php:261
msgid "Upcoming events"
msgstr "Próximos eventos"
-#: ../../Zotlabs/Module/Settings/Channel.php:261
+#: ../../Zotlabs/Module/Settings/Channel.php:262
msgid "Events today"
msgstr "Eventos de hoy"
-#: ../../Zotlabs/Module/Settings/Channel.php:262
+#: ../../Zotlabs/Module/Settings/Channel.php:263
msgid "Upcoming birthdays"
msgstr "Próximos cumpleaños"
-#: ../../Zotlabs/Module/Settings/Channel.php:262
+#: ../../Zotlabs/Module/Settings/Channel.php:263
msgid "Not available in all themes"
msgstr "No disponible en todos los temas"
-#: ../../Zotlabs/Module/Settings/Channel.php:263
+#: ../../Zotlabs/Module/Settings/Channel.php:264
msgid "System (personal) notifications"
msgstr "Notificaciones del sistema (personales)"
-#: ../../Zotlabs/Module/Settings/Channel.php:264
+#: ../../Zotlabs/Module/Settings/Channel.php:265
msgid "System info messages"
msgstr "Mensajes de información del sistema"
-#: ../../Zotlabs/Module/Settings/Channel.php:265
+#: ../../Zotlabs/Module/Settings/Channel.php:266
msgid "System critical alerts"
msgstr "Alertas críticas del sistema"
-#: ../../Zotlabs/Module/Settings/Channel.php:266
+#: ../../Zotlabs/Module/Settings/Channel.php:267
msgid "New connections"
msgstr "Nuevas conexiones"
-#: ../../Zotlabs/Module/Settings/Channel.php:267
+#: ../../Zotlabs/Module/Settings/Channel.php:268
msgid "System Registrations"
msgstr "Registros del sistema"
-#: ../../Zotlabs/Module/Settings/Channel.php:268
+#: ../../Zotlabs/Module/Settings/Channel.php:269
msgid "Unseen shared files"
msgstr "Ficheros compartidos no vistos"
-#: ../../Zotlabs/Module/Settings/Channel.php:269
+#: ../../Zotlabs/Module/Settings/Channel.php:270
msgid "Unseen public stream activity"
msgstr "Actividad del stream público no vista"
-#: ../../Zotlabs/Module/Settings/Channel.php:270
+#: ../../Zotlabs/Module/Settings/Channel.php:271
msgid "Unseen likes and dislikes"
msgstr "Los \"me gusta\" y \"no me gusta\" no vistos"
-#: ../../Zotlabs/Module/Settings/Channel.php:271
+#: ../../Zotlabs/Module/Settings/Channel.php:272
msgid "Unseen forum posts"
msgstr "Entradas no vistas en el foro"
-#: ../../Zotlabs/Module/Settings/Channel.php:272
+#: ../../Zotlabs/Module/Settings/Channel.php:273
msgid "Email notification hub (hostname)"
msgstr "Email de notificación del hub (nombre del host)"
-#: ../../Zotlabs/Module/Settings/Channel.php:272
+#: ../../Zotlabs/Module/Settings/Channel.php:273
#, php-format
msgid ""
"If your channel is mirrored to multiple hubs, set this to your preferred "
"location. This will prevent duplicate email notifications. Example: %s"
msgstr "Si su canal está replicado en múltiples hubs, colóquelo en su ubicación preferida. Esto evitará la duplicación de notificaciones por correo electrónico. Ejemplo: %s"
-#: ../../Zotlabs/Module/Settings/Channel.php:273
+#: ../../Zotlabs/Module/Settings/Channel.php:274
msgid "Show new wall posts, private messages and connections under Notices"
msgstr "Mostrar nuevos mensajes en el muro, mensajes privados y conexiones en Avisos"
-#: ../../Zotlabs/Module/Settings/Channel.php:274
+#: ../../Zotlabs/Module/Settings/Channel.php:275
msgid "Mark all notices of the thread read if a notice is clicked"
msgstr "Marcar todos los avisos del hilo como leídos si se hace clic en un aviso"
-#: ../../Zotlabs/Module/Settings/Channel.php:274
+#: ../../Zotlabs/Module/Settings/Channel.php:275
msgid "If no, only the clicked notice will be marked read"
msgstr "Si no, sólo se marcará como leída la notificación en la que se haya hecho clic"
-#: ../../Zotlabs/Module/Settings/Channel.php:275
+#: ../../Zotlabs/Module/Settings/Channel.php:276
msgid ""
"Desktop notifications are unavailable because the required browser "
"permission has not been granted"
msgstr "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso necesario al navegador"
-#: ../../Zotlabs/Module/Settings/Channel.php:276
+#: ../../Zotlabs/Module/Settings/Channel.php:277
msgid "Grant permission"
msgstr "Permiso concedido"
-#: ../../Zotlabs/Module/Settings/Channel.php:277
+#: ../../Zotlabs/Module/Settings/Channel.php:278
msgid "Notify me of events this many days in advance"
msgstr "Avisarme de los eventos con algunos días de antelación"
-#: ../../Zotlabs/Module/Settings/Channel.php:277
+#: ../../Zotlabs/Module/Settings/Channel.php:278
msgid "Must be greater than 0"
msgstr "Debe ser mayor que 0"
-#: ../../Zotlabs/Module/Settings/Channel.php:280
+#: ../../Zotlabs/Module/Settings/Channel.php:281
msgid "Default photo upload folder"
msgstr "Carpeta por defecto de las fotos subidas"
-#: ../../Zotlabs/Module/Settings/Channel.php:280
#: ../../Zotlabs/Module/Settings/Channel.php:281
+#: ../../Zotlabs/Module/Settings/Channel.php:282
msgid "%Y - current year, %m - current month"
msgstr "%Y - año en curso, %m - mes actual"
-#: ../../Zotlabs/Module/Settings/Channel.php:281
+#: ../../Zotlabs/Module/Settings/Channel.php:282
msgid "Default file upload folder"
msgstr "Carpeta por defecto de los ficheros subidos"
-#: ../../Zotlabs/Module/Settings/Channel.php:283
+#: ../../Zotlabs/Module/Settings/Channel.php:284
msgid "Remove this channel."
msgstr "Eliminar este canal."
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "Expire other channel content after this many days"
msgstr "Caducar contenido de otros canales después de este número de días"
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "0 or blank to use the website limit."
msgstr "0 o en blanco para usar el límite del sitio web."
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
#, php-format
msgid "This website expires after %d days."
msgstr "Este sitio web caduca después de %d días."
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "This website does not expire imported content."
msgstr "Este sitio web no caduca el contenido importado."
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "The website limit takes precedence if lower than your limit."
msgstr "El límite del sitio web tiene prioridad si es inferior a su propio límite."
-#: ../../Zotlabs/Module/Settings/Channel.php:285
#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Settings/Channel.php:287
msgid ""
"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
"leave blank to import all posts"
@@ -15029,11 +14970,11 @@ msgstr "Falló la autenticación."
msgid "Edit Block"
msgstr "Modificar este bloque"
-#: ../../Zotlabs/Module/Email_validation.php:36
+#: ../../Zotlabs/Module/Email_validation.php:37
msgid "Email Verification Required"
msgstr "Verificación obligatoria del correo electrónico"
-#: ../../Zotlabs/Module/Email_validation.php:37
+#: ../../Zotlabs/Module/Email_validation.php:38
#, php-format
msgid ""
"A verification token was sent to your email address [%s]. Enter that token "
@@ -15041,73 +14982,77 @@ msgid ""
"for delivery, and check your spam folder if you do not see the message."
msgstr "Se ha enviado un token de verificación a su dirección de correo electrónico [%s]. Ingrese ese símbolo aquí para completar el paso de verificación de cuenta. Por favor, espere unos minutos para el envío, y revise su carpeta de spam si no ve el mensaje."
-#: ../../Zotlabs/Module/Email_validation.php:38
+#: ../../Zotlabs/Module/Email_validation.php:39
msgid "Resend Email"
msgstr "Reenvío de correo electrónico"
-#: ../../Zotlabs/Module/Email_validation.php:41
+#: ../../Zotlabs/Module/Email_validation.php:42
msgid "Validation token"
msgstr "Token de validación"
-#: ../../Zotlabs/Module/Import.php:70
+#: ../../Zotlabs/Module/Import.php:71
msgid "Nothing to import."
msgstr "No hay nada para importar."
-#: ../../Zotlabs/Module/Import.php:86 ../../Zotlabs/Module/Import.php:100
+#: ../../Zotlabs/Module/Import.php:87 ../../Zotlabs/Module/Import.php:101
msgid "Unable to download data from old server"
msgstr "No se han podido descargar datos de su antiguo servidor"
-#: ../../Zotlabs/Module/Import.php:163
+#: ../../Zotlabs/Module/Import.php:164
#, php-format
msgid "Your service plan only allows %d channels."
msgstr "Su paquete de servicios solo permite %d canales."
-#: ../../Zotlabs/Module/Import.php:190
+#: ../../Zotlabs/Module/Import.php:191
msgid "No channel. Import failed."
msgstr "No hay canal. La importación ha fallado"
-#: ../../Zotlabs/Module/Import.php:557
+#: ../../Zotlabs/Module/Import.php:197
+msgid "Channel exists but has been marked removed on this hub. Import failed."
+msgstr "El canal existe pero ha sido marcado como eliminado en este hub. Importación fallida."
+
+#: ../../Zotlabs/Module/Import.php:569
msgid ""
"Automatic content and files import was not possible due to API version "
"incompatiblity. Please import content and files manually!"
msgstr "La importación automática de contenidos y archivos no fue posible debido a la incompatibilidad de la versión de la API. Por favor, importe el contenido y los archivos manualmente."
-#: ../../Zotlabs/Module/Import.php:585
+#: ../../Zotlabs/Module/Import.php:597
msgid "You must be logged in to use this feature."
msgstr "Debe estar registrado para poder usar esta funcionalidad."
-#: ../../Zotlabs/Module/Import.php:592
+#: ../../Zotlabs/Module/Import.php:604
msgid "Channel Import"
msgstr "Importar canal"
-#: ../../Zotlabs/Module/Import.php:593
+#: ../../Zotlabs/Module/Import.php:605
msgid ""
"Use this form to import an existing channel from a different server/hub. You"
" may retrieve the channel identity from the old server/hub via the network "
"or provide an export file."
msgstr "Emplee este formulario para importar un canal desde un servidor/hub diferente. Puede recuperar el canal desde el antiguo servidor/hub a través de la red o proporcionando un fichero de exportación."
-#: ../../Zotlabs/Module/Import.php:595
+#: ../../Zotlabs/Module/Import.php:607
msgid "Or provide the old server/hub details"
msgstr "O proporcione los detalles de su antiguo servidor/hub"
-#: ../../Zotlabs/Module/Import.php:597
+#: ../../Zotlabs/Module/Import.php:609
msgid "Your old identity address (xyz@example.com)"
msgstr "Su identidad en el antiguo servidor (canal@ejemplo.com)"
-#: ../../Zotlabs/Module/Import.php:598
+#: ../../Zotlabs/Module/Import.php:610
msgid "Your old login email address"
msgstr "Su antigua dirección de correo electrónico"
-#: ../../Zotlabs/Module/Import.php:599
+#: ../../Zotlabs/Module/Import.php:611
msgid "Your old login password"
msgstr "Su antigua contraseña"
-#: ../../Zotlabs/Module/Import.php:600
+#: ../../Zotlabs/Module/Import.php:612
msgid "Import your items and files (limited by available memory)"
msgstr "Importar sus artículos y archivos (limitado por la memoria disponible)"
-#: ../../Zotlabs/Module/Import.php:602
+#: ../../Zotlabs/Module/Import.php:614
msgid ""
"For either option, please choose whether to make this hub your new primary "
"address, or whether your old location should continue this role. You will be"
@@ -15115,40 +15060,40 @@ msgid ""
"primary location for files, photos, and media."
msgstr "Para cualquiera de las opciones, elija si hacer de este servidor su nueva dirección primaria, o si su antigua dirección debe continuar con este papel. Usted podrá publicar desde cualquier ubicación, pero sólo una puede estar marcada como la ubicación principal para los ficheros, fotos y otras imágenes o vídeos."
-#: ../../Zotlabs/Module/Import.php:604
+#: ../../Zotlabs/Module/Import.php:616
msgid "Make this hub my primary location"
msgstr "Convertir este servidor en mi ubicación primaria"
-#: ../../Zotlabs/Module/Import.php:605
+#: ../../Zotlabs/Module/Import.php:617
msgid "Move this channel (disable all previous locations)"
msgstr "Mover este canal (desactivar todas las ubicaciones anteriores)"
-#: ../../Zotlabs/Module/Import.php:606
+#: ../../Zotlabs/Module/Import.php:618
msgid "Use this channel nickname instead of the one provided"
msgstr "Usa este alias de canal en lugar del que se proporciona"
-#: ../../Zotlabs/Module/Import.php:606
+#: ../../Zotlabs/Module/Import.php:618
msgid ""
"Leave blank to keep your existing channel nickname. You will be randomly "
"assigned a similar nickname if either name is already allocated on this "
"site."
msgstr "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio."
-#: ../../Zotlabs/Module/Import.php:608
+#: ../../Zotlabs/Module/Import.php:620
msgid ""
"This process may take several minutes to complete. Please submit the form "
"only once and leave this page open until finished."
msgstr "Este proceso puede tardar varios minutos en completarse. Por favor envíe el formulario una sola vez y mantenga esta página abierta hasta que termine."
-#: ../../Zotlabs/Module/Acl.php:370
+#: ../../Zotlabs/Module/Acl.php:371
msgid "network"
msgstr "red"
-#: ../../Zotlabs/Module/Filer.php:53
+#: ../../Zotlabs/Module/Filer.php:64
msgid "Enter a folder name"
msgstr "Escriba un nombre de carpeta"
-#: ../../Zotlabs/Module/Filer.php:53
+#: ../../Zotlabs/Module/Filer.php:64
msgid "or select an existing folder (doubleclick)"
msgstr "o seleccione una (con un doble click)"
@@ -15160,6 +15105,6 @@ msgstr "Encuesta no encontrada."
msgid "Invalid response."
msgstr "respuesta no válida."
-#: ../../Zotlabs/Module/Vote.php:125
+#: ../../Zotlabs/Module/Vote.php:128
msgid "Response submitted. Updates may not appear instantly."
msgstr "Respuesta enviada. Las actualizaciones pueden no aparecer al instante."
diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php
index d10e40ed0..06eab42eb 100644
--- a/view/es-es/hstrings.php
+++ b/view/es-es/hstrings.php
@@ -1,11 +1,9 @@
<?php
-if(!function_exists("string_plural_select_es_es")) {
- function string_plural_select_es_es($n) {
- return ($n != 1 ? 1 : 0);
- }
-}
-
+if(! function_exists("string_plural_select_es_es")) {
+function string_plural_select_es_es($n){
+ return ($n != 1 ? 1 : 0);
+}}
App::$rtl = 0;
App::$strings["plural_function_code"] = "(n != 1 ? 1 : 0)";
App::$strings["Source channel not found."] = "No se ha encontrado el canal de origen.";
@@ -90,8 +88,6 @@ App::$strings["Visible to all connections."] = "Visible para todas las conexione
App::$strings["Visible to approved connections."] = "Visible para las conexiones permitidas.";
App::$strings["Visible to specific connections."] = "Visible para conexiones específicas.";
App::$strings["&#x1f501; Repeated %1\$s's %2\$s"] = "&#x1f501; Repitió %2\$sde %1\$s";
-App::$strings["Item not found."] = "Elemento no encontrado.";
-App::$strings["Permission denied."] = "Acceso denegado.";
App::$strings["Privacy group not found."] = "Grupo de canales no encontrado.";
App::$strings["Privacy group is empty."] = "El grupo de canales está vacío.";
App::$strings["Privacy group: %s"] = "Grupo de canales: %s";
@@ -120,7 +116,9 @@ App::$strings["Add emoji reaction ability to posts"] = "Activar la capacidad de
App::$strings["Dislike Posts"] = "Desagrado de publicaciones";
App::$strings["Ability to dislike posts/comments"] = "Capacidad de mostrar desacuerdo con el contenido de entradas y comentarios";
App::$strings["Star Posts"] = "Entradas destacadas";
-App::$strings["Ability to mark special posts with a star indicator"] = "Capacidad de marcar entradas destacadas con un indicador de estrella";
+App::$strings["Ability to mark conversations with a star"] = "Posibilidad de marcar las conversaciones con una estrella";
+App::$strings["File Posts"] = "Archivo de entradas";
+App::$strings["Ability to file posts"] = "Posibilidad de archivar las entradas";
App::$strings["Reply on comment"] = "Responder a los comentarios";
App::$strings["Ability to reply on selected comment"] = "Posibilidad de responder a los comentarios seleccionados";
App::$strings["Directory"] = "Directorio";
@@ -175,6 +173,7 @@ App::$strings["Profile Import/Export"] = "Importar/Exportar perfil";
App::$strings["Save and load profile details across sites/channels"] = "Guardar y cargar detalles del perfil a través de sitios/canales";
App::$strings["Multiple Profiles"] = "Múltiples perfiles";
App::$strings["Ability to create multiple profiles"] = "Capacidad de crear múltiples perfiles";
+App::$strings["Permission denied."] = "Acceso denegado.";
App::$strings["Item was not found."] = "Elemento no encontrado.";
App::$strings["Unknown error."] = "Error desconocido";
App::$strings["No source file."] = "Ningún fichero de origen";
@@ -339,17 +338,13 @@ App::$strings["open"] = "abierto";
App::$strings["closed"] = "cerrado";
App::$strings["Registration is currently"] = "El registro está actualmente ";
App::$strings["please come back"] = "por favor, vuelva";
-App::$strings["Help:"] = "Ayuda:";
-App::$strings["Help"] = "Ayuda";
-App::$strings["Not Found"] = "No encontrado";
-App::$strings["Page not found."] = "Página no encontrada.";
App::$strings["Delete this item?"] = "¿Borrar este elemento?";
App::$strings["Item deleted"] = "Elemento eliminado";
App::$strings["Comment"] = "Comentar";
-App::$strings["%s show all"] = "%s mostrar todo";
-App::$strings["%s show less"] = "%s mostrar menos";
-App::$strings["%s expand"] = "%s expandir";
-App::$strings["%s collapse"] = "%s contraer";
+App::$strings["show all"] = "Mostrar todo";
+App::$strings["show less"] = "ver menos";
+App::$strings["expand"] = "ampliar";
+App::$strings["collapse"] = "contraer";
App::$strings["Password too short"] = "Contraseña demasiado corta";
App::$strings["Passwords do not match"] = "Las contraseñas no coinciden";
App::$strings["everybody"] = "cualquiera";
@@ -403,18 +398,6 @@ App::$strings["%d years"] = array(
1 => "%d años",
2 => "%d años",
);
-App::$strings["timeago.prefixAgo"] = "hace ";
-App::$strings["timeago.prefixFromNow"] = "en ";
-App::$strings["timeago.suffixAgo"] = "NONE";
-App::$strings["timeago.suffixFromNow"] = "NONE";
-App::$strings["less than a minute"] = "menos de un minuto";
-App::$strings["about a minute"] = "alrededor de un minuto";
-App::$strings["about an hour"] = "alrededor de una hora";
-App::$strings["a day"] = "un día";
-App::$strings["about a month"] = "alrededor de un mes";
-App::$strings["about a year"] = "alrededor de un año";
-App::$strings[" "] = " ";
-App::$strings["timeago.numbers"] = "timeago.numbers";
App::$strings["January"] = "enero";
App::$strings["February"] = "febrero";
App::$strings["March"] = "marzo";
@@ -542,6 +525,7 @@ App::$strings["Error getting photo link"] = "Error al obtener el enlace de la fo
App::$strings["Error getting album"] = "Error al obtener el álbum";
App::$strings["Comments enabled"] = "Comentarios habilitados";
App::$strings["Comments disabled"] = "Comentarios deshabilitados";
+App::$strings["Confirm delete"] = "Confirmar eliminación";
App::$strings["Preview"] = "Previsualizar";
App::$strings["Share"] = "Compartir";
App::$strings["Page link name"] = "Nombre del enlace de la página";
@@ -617,6 +601,7 @@ App::$strings["Take me home"] = "Volver a la página principal";
App::$strings["Log me out of this site"] = "Salir de este sitio";
App::$strings["Register"] = "Registrarse";
App::$strings["Create an account"] = "Crear una cuenta";
+App::$strings["Help"] = "Ayuda";
App::$strings["Help and documentation"] = "Ayuda y documentación";
App::$strings["Search"] = "Buscar";
App::$strings["Search site @name, !forum, #tag, ?docs, content"] = "Buscar en el sitio @nombre, !foro, #tag, ?docs, contenido";
@@ -642,8 +627,6 @@ App::$strings["Bookmarks"] = "Marcadores";
App::$strings["Saved Bookmarks"] = "Marcadores guardados";
App::$strings["Webpages"] = "Páginas web";
App::$strings["View Webpages"] = "Ver páginas web";
-App::$strings["Wikis"] = "Wikis";
-App::$strings["Wiki"] = "Wiki";
App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado";
App::$strings["Miscellaneous"] = "Varios";
App::$strings["Birthday"] = "Cumpleaños";
@@ -652,6 +635,9 @@ App::$strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-DD o MM-DD";
App::$strings["never"] = "nunca";
App::$strings["less than a second ago"] = "hace un instante";
App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "hace %1\$d %2\$s";
+App::$strings["ago"] = "antes";
+App::$strings["in"] = "en";
+App::$strings["now"] = "ahora";
App::$strings["__ctx:relative_date__ year"] = array(
0 => "año",
1 => "años",
@@ -715,7 +701,7 @@ App::$strings["Zot"] = "Zot";
App::$strings["LinkedIn"] = "LinkedIn";
App::$strings["XMPP/IM"] = "XMPP/IM";
App::$strings["MySpace"] = "MySpace";
-App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s escribió la/el %2\$s siguiente %3\$s";
+App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s escribió %2\$s siguiente %3\$s";
App::$strings["spoiler"] = "spoiler";
App::$strings["default"] = "por defecto";
App::$strings["Select an alternate language"] = "Seleccionar un idioma alternativo";
@@ -881,8 +867,6 @@ App::$strings["Comma separated list"] = "Lista separada por comas";
App::$strings["IRC Settings"] = "Ajustes de IRC";
App::$strings["IRC settings saved."] = "Se han guardado los ajustes de IRC.";
App::$strings["IRC Chatroom"] = "Sala de chat IRC";
-App::$strings["Hide the button and show the smilies directly."] = "Ocultar el botón y mostrar los smilies directamente.";
-App::$strings["Smileybutton Settings"] = "Ajustes de Smileybutton";
App::$strings["ERROR: word length is not correct!"] = "ERROR: ¡la longitud de la palabra no es correcta!";
App::$strings["Fediquest App"] = "Aplicación Fediquest";
App::$strings["A distributed quest for a given word (game)."] = "Una búsqueda distribuida de una palabra determinada (juego).";
@@ -988,7 +972,7 @@ App::$strings["Please have a look at the"] = "Por favor, eche un vistazo a la ";
App::$strings["git history"] = "historial del git";
App::$strings["change log"] = "lista de cambios";
App::$strings["for further info."] = "para más información.";
-App::$strings["Upgrade Info"] = "Información de actualización";
+App::$strings["\$Projectname Upgrade Info"] = "\$Projectname Información de actualización";
App::$strings["Do not show this again"] = "No mostrar esto de nuevo";
App::$strings["__ctx:opensearch__ Search %1\$s (%2\$s)"] = "Buscar %1\$s (%2\$s)";
App::$strings["__ctx:opensearch__ \$Projectname"] = "\$Projectname";
@@ -1057,6 +1041,7 @@ App::$strings["Hubzilla password"] = "Contraseña de Hubzilla";
App::$strings["Hubzilla Crosspost Connector"] = "Hubzilla Crosspost Connector";
App::$strings["Cards"] = "Fichas";
App::$strings["View Cards"] = "Ver las fichas";
+App::$strings["Page not found."] = "Página no encontrada.";
App::$strings["Add Card"] = "Añadir una ficha";
App::$strings["Item not found"] = "Elemento no encontrado";
App::$strings["Channel not found."] = "Canal no encontrado.";
@@ -1207,6 +1192,7 @@ App::$strings["Invalid channel"] = "Canal no válido";
App::$strings["Error retrieving wiki"] = "Error al recuperar el wiki";
App::$strings["Error creating zip file export folder"] = "Error al crear el fichero comprimido zip de la carpeta a exportar";
App::$strings["Error downloading wiki: "] = "Error al descargar el wiki: ";
+App::$strings["Wikis"] = "Wikis";
App::$strings["Download"] = "Descargar";
App::$strings["View"] = "Ver";
App::$strings["Create New"] = "Crear";
@@ -1320,6 +1306,7 @@ App::$strings["Clear OAuth configuration"] = "Limpiar la configuración de OAut
App::$strings["GNU-Social Crosspost Connector"] = "GNU-Social Crosspost Connector";
App::$strings["Not allowed."] = "No permitido/a.";
App::$strings["Set/edit permissions"] = "Establecer/editar los permisos";
+App::$strings["Item not found."] = "Elemento no encontrado.";
App::$strings["Post to Livejournal"] = "Publicar en Livejournal";
App::$strings["Posted by"] = "Publicado por ";
App::$strings["Livejournal username"] = "Nombre de usuario en Livejournal";
@@ -1587,6 +1574,7 @@ App::$strings["Remote Diagnostics"] = "Diagnóstico remoto";
App::$strings["Suggest Channels"] = "Sugerir canales";
App::$strings["Channel Manager"] = "Administración de canales";
App::$strings["Stream"] = "Stream";
+App::$strings["Wiki"] = "Wiki";
App::$strings["Mail"] = "Correo";
App::$strings["Chat"] = "Chat";
App::$strings["Probe"] = "Probar";
@@ -1649,7 +1637,7 @@ App::$strings["I will not attend"] = "No participaré";
App::$strings["I might attend"] = "Quizá participe";
App::$strings["I like this (toggle)"] = "Me gusta (cambiar)";
App::$strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)";
-App::$strings["Reply on this comment"] = "Responder a este comentario";
+App::$strings["Reply to this comment"] = "Responder a este comentario";
App::$strings["reply"] = "responder";
App::$strings["Reply to"] = "Responder a ";
App::$strings["share"] = "compartir";
@@ -1667,6 +1655,9 @@ App::$strings["to"] = "a";
App::$strings["via"] = "mediante";
App::$strings["Wall-to-Wall"] = "De página del perfil a página del perfil (de \"muro\" a \"muro\")";
App::$strings["via Wall-To-Wall:"] = "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")";
+App::$strings["Last edited %s"] = "Último cambio %s";
+App::$strings["Expires %s"] = "Caduca: %s";
+App::$strings["Published %s"] = "Publicado en%s";
App::$strings["Attend"] = "Participar o asistir";
App::$strings["Attendance Options"] = "Opciones de participación o asistencia";
App::$strings["Voting Options"] = "Opciones de votación";
@@ -1674,6 +1665,8 @@ App::$strings["Go to previous comment"] = "Ir al comentario anterior";
App::$strings["Pinned post"] = "Entradas ancladas";
App::$strings["Add to Calendar"] = "Añadir al calendario";
App::$strings["Mark all comments seen"] = "Marcar como leídos todos los comentarios";
+App::$strings["Add yours"] = "Añadir el tuyo";
+App::$strings["Remove yours"] = "Eliminar el tuyo";
App::$strings["This is you"] = "Este es usted";
App::$strings["Image"] = "Imagen";
App::$strings["Insert Link"] = "Insertar enlace";
@@ -1803,8 +1796,10 @@ App::$strings["See more..."] = "Ver más...";
App::$strings["Public and restricted messages"] = "Mensajes públicos y restringidos";
App::$strings["Direct messages"] = "Mensajes directos";
App::$strings["Starred messages"] = "Entradas preferidas";
+App::$strings["Filed messages"] = "Mensajes archivados";
App::$strings["No messages"] = "Sin mensajes";
App::$strings["Unseen"] = "No visto";
+App::$strings["Filter by file name"] = "Filtrar por nombre de archivo";
App::$strings["Toggle post editor"] = "Alternar editor de entradas";
App::$strings["Toggle personal notes"] = "Alternar notas personales";
App::$strings["Channel activities"] = "Actividades del canal";
@@ -1949,6 +1944,7 @@ App::$strings["You can select files via the upload button or drop them right her
App::$strings["Invalid item."] = "Elemento no válido.";
App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
App::$strings["Item sync completed!"] = "¡Sincronización de artículos completada!";
+App::$strings["Import host does not seem to be online or compatible"] = "El host de importación no parece estar en línea ni ser compatible";
App::$strings["Item sync completed but no items were found!"] = "¡Sincronización de artículos completada pero no se ha encontrado ningún artículo!";
App::$strings["File sync completed!"] = "¡Sincronización de archivos completada!";
App::$strings["File sync completed but no files were found!"] = "¡La sincronización de archivos se ha completado pero no se ha encontrado ningún archivo!";
@@ -2192,6 +2188,8 @@ App::$strings["Registration on this hub is by invitation only"] = "El registro e
App::$strings["New register request"] = "Nueva solicitud de registro";
App::$strings["Error creating dId A"] = "Error al crear dId A";
App::$strings["Registration on this hub is disabled."] = "El registro está deshabilitado en este sitio.";
+App::$strings["Why do you want to join this hub?"] = "¿Por qué quiere unirse a este hub?";
+App::$strings["This will help to review your registration"] = "Esto ayudará a revisar su registro";
App::$strings["Registration on this hub is by approval only."] = "El registro en este hub está sometido a aprobación previa.";
App::$strings["Register at another affiliated hub in case when prefered"] = "Regístrese en otro hub afiliado en caso de que lo prefiera";
App::$strings["Registration on this hub is by invitation only."] = "La inscripción en este hub es sólo posible por invitación.";
@@ -2207,8 +2205,6 @@ App::$strings["Your name"] = "Su nombre";
App::$strings["Real name is preferred"] = "Se prefiere el nombre real";
App::$strings["Choose a short nickname"] = "Elija un alias corto";
App::$strings["Your nickname will be used to create an easy to remember channel address"] = "Tu alias se utilizará para crear una dirección de canal fácil de recordar";
-App::$strings["Why do you want to join this hub?"] = "¿Por qué quiere unirse a este hub?";
-App::$strings["This will help to review your registration"] = "Esto ayudará a revisar su registro";
App::$strings["Registration"] = "Registro";
App::$strings["I have an invite code"] = "Tengo un código de invitación";
App::$strings["This site has exceeded the number of allowed daily account registrations."] = "Este sitio ha superado el número permitido de registros diarios de cuentas.";
@@ -2404,16 +2400,6 @@ App::$strings["Menu title"] = "Título del menú";
App::$strings["Menu title as seen by others"] = "El título del menú tal como será visto por los demás";
App::$strings["Allow bookmarks"] = "Permitir marcadores";
App::$strings["Not found."] = "No encontrado.";
-App::$strings["%s account blocked/unblocked"] = array(
- 0 => "%s cuenta bloqueada/desbloqueada",
- 1 => "%s cuenta bloqueada/desbloqueada",
- 2 => "%s cuenta bloqueada/desbloqueada",
-);
-App::$strings["%s account deleted"] = array(
- 0 => "%s cuentas eliminadas",
- 1 => "%s cuentas eliminadas",
- 2 => "%s cuentas eliminadas",
-);
App::$strings["Account not found"] = "Cuenta no encontrada";
App::$strings["Account '%s' blocked"] = "La cuenta '%s' ha sido bloqueada";
App::$strings["Account '%s' unblocked"] = "La cuenta '%s' ha sido desbloqueada";
@@ -2442,6 +2428,16 @@ App::$strings["Service class"] = "Clase de servicio";
App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?";
App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?";
App::$strings["Message"] = "Mensaje";
+App::$strings["%s account blocked/unblocked"] = array(
+ 0 => "%s cuenta bloqueada/desbloqueada",
+ 1 => "%s cuenta bloqueada/desbloqueada",
+ 2 => "%s cuenta bloqueada/desbloqueada",
+);
+App::$strings["%s account deleted"] = array(
+ 0 => "%s cuentas eliminadas",
+ 1 => "%s cuentas eliminadas",
+ 2 => "%s cuentas eliminadas",
+);
App::$strings["Max queueworker threads"] = "Máximo de hilos en la cola";
App::$strings["Minimum 4, default 4"] = "Mínimo 4, por defecto 4";
App::$strings["Assume workers dead after"] = "Asumir que los procesos han muerto después de ";
@@ -2468,16 +2464,6 @@ App::$strings["Minimum PHP version: "] = "Versión mínima de PHP:";
App::$strings["Compatible Server Roles: "] = "Configuraciones compatibles con este servidor:";
App::$strings["Requires: "] = "Se requiere:";
App::$strings["Disabled - version incompatibility"] = "Deshabilitado - versiones incompatibles";
-App::$strings["Enter the public git repository URL of the addon repo."] = "Introduzca la URL del repositorio público de git del addon repo.";
-App::$strings["Addon repo git URL"] = "URL del repositorio git del addon";
-App::$strings["Custom repo name"] = "Nombre personalizado del repositorio";
-App::$strings["(optional)"] = "(opcional)";
-App::$strings["Download Addon Repo"] = "Descargar el repositorio";
-App::$strings["Install new repo"] = "Instalar un nuevo repositorio";
-App::$strings["Manage Repos"] = "Gestionar los repositorios";
-App::$strings["Installed Addon Repositories"] = "Repositorioe de addons instalados";
-App::$strings["Install a New Addon Repository"] = "Instalar un nuevo repositorio de addons";
-App::$strings["Switch branch"] = "Cambiar la rama";
App::$strings["Lock feature %s"] = "Bloquear la funcionalidad %s";
App::$strings["Manage Additional Features"] = "Gestionar las funcionalidades";
App::$strings["New Profile Field"] = "Nuevo campo en el perfil";
@@ -2496,6 +2482,7 @@ App::$strings["(In addition to basic fields)"] = "(Además de los campos básico
App::$strings["All available fields"] = "Todos los campos disponibles";
App::$strings["Custom Fields"] = "Campos personalizados";
App::$strings["Create Custom Field"] = "Crear un campo personalizado";
+App::$strings["Channel not found"] = "Canal no encontrado";
App::$strings["%s channel censored/uncensored"] = array(
0 => "%s canales censurados/no censurados",
1 => "%s canales censurados/no censurados",
@@ -2511,7 +2498,6 @@ App::$strings["%s channel deleted"] = array(
1 => "%s canales eliminados",
2 => "%s canales eliminados",
);
-App::$strings["Channel not found"] = "Canal no encontrado";
App::$strings["Channel '%s' deleted"] = "Canal '%s' eliminado";
App::$strings["Channel '%s' censored"] = "Canal '%s' censurado";
App::$strings["Channel '%s' uncensored"] = "Canal '%s' no censurado";
@@ -2792,12 +2778,14 @@ App::$strings["Group members"] = "Miembros del grupo";
App::$strings["Not in this group"] = "No en este grupo";
App::$strings["Click a channel to toggle membership"] = "Haga clic en un canal para cambiar los miembros";
App::$strings["Documentation Search"] = "Búsqueda de Documentación";
+App::$strings["Not Found"] = "No encontrado";
+App::$strings["\$Projectname Documentation"] = "Documentación de \$Projectname";
+App::$strings["Contents"] = "Contenidos";
App::$strings["Members"] = "Miembros";
App::$strings["Administrators"] = "Administradores";
App::$strings["Developers"] = "Desarrolladores";
App::$strings["Tutorials"] = "Tutoriales";
-App::$strings["\$Projectname Documentation"] = "Documentación de \$Projectname";
-App::$strings["Contents"] = "Contenidos";
+App::$strings["Help:"] = "Ayuda:";
App::$strings["Post not found."] = "Mensaje no encontrado.";
App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s ha etiquetado %3\$s de %2\$s con %4\$s";
App::$strings["Invite App"] = "Solicitar una app";
@@ -2833,7 +2821,7 @@ App::$strings["Site Name"] = "Nombre del sitio";
App::$strings["Administrator"] = "Administrador";
App::$strings["Software and Project information"] = "Información sobre el software y el proyecto";
App::$strings["This site is powered by \$Projectname"] = "Este sitio funciona con \$Projectname";
-App::$strings["Federated and decentralised networking and identity services provided by Zot"] = "Servicios federados y descentralizados de identidad y redes proporcionados por Zot";
+App::$strings["Federated and decentralised networking and identity services provided by"] = "Red federada y descentralizada y servicios de identidad proporcionados por ";
App::$strings["Additional federated transport protocols:"] = "Protocolos adicionales de transporte federado: ";
App::$strings["Version %s"] = "Versión %s";
App::$strings["Project homepage"] = "Página principal del proyecto";
@@ -3352,8 +3340,6 @@ App::$strings["Enable OCAP access"] = "Habilitar acceso OCAP";
App::$strings["Grant limited posts the right to access linked private media"] = "Conceder a entradas limitadas el derecho de acceso a los medios privados vinculados";
App::$strings["Events Settings"] = "Gestión de eventos";
App::$strings["Photos Settings"] = "Gestión de las fotos";
-App::$strings["Settings saved."] = "Configuración guardada.";
-App::$strings["Settings saved. Reload page please."] = "Ajustes guardados. Recargue la página, por favor.";
App::$strings["Conversation Settings"] = "Ajustes de conversación";
App::$strings["Please select a channel role"] = "Por favor, seleccione un rol de canal";
App::$strings["Your channel address is"] = "Su dirección de canal es";
@@ -3445,6 +3431,7 @@ App::$strings["Nothing to import."] = "No hay nada para importar.";
App::$strings["Unable to download data from old server"] = "No se han podido descargar datos de su antiguo servidor";
App::$strings["Your service plan only allows %d channels."] = "Su paquete de servicios solo permite %d canales.";
App::$strings["No channel. Import failed."] = "No hay canal. La importación ha fallado";
+App::$strings["Channel exists but has been marked removed on this hub. Import failed."] = "El canal existe pero ha sido marcado como eliminado en este hub. Importación fallida.";
App::$strings["Automatic content and files import was not possible due to API version incompatiblity. Please import content and files manually!"] = "La importación automática de contenidos y archivos no fue posible debido a la incompatibilidad de la versión de la API. Por favor, importe el contenido y los archivos manualmente.";
App::$strings["You must be logged in to use this feature."] = "Debe estar registrado para poder usar esta funcionalidad.";
App::$strings["Channel Import"] = "Importar canal";
diff --git a/view/js/main.js b/view/js/main.js
index f52720693..ce1d71596 100644
--- a/view/js/main.js
+++ b/view/js/main.js
@@ -25,6 +25,7 @@ var savedTitle = '';
var followUpPageLoad = false;
var window_needs_alert = true;
var expanded_items = [];
+var updateTimeout = [];
var page_cache = {};
@@ -58,37 +59,13 @@ $.ajaxSetup({cache: false});
var tf = new Function('n', 's', 'var k = s.split("/")['+aStr['plural_func']+']; return (k ? k : s);');
-jQuery.timeago.settings.strings = {
- prefixAgo : aStr['t01'],
- prefixFromNow : aStr['t02'],
- suffixAgo : aStr['t03'],
- suffixFromNow : aStr['t04'],
- seconds : aStr['t05'],
- minute : aStr['t06'],
- minutes : function(value){return tf(value, aStr['t07']);},
- hour : aStr['t08'],
- hours : function(value){return tf(value, aStr['t09']);},
- day : aStr['t10'],
- days : function(value){return tf(value, aStr['t11']);},
- month : aStr['t12'],
- months : function(value){return tf(value, aStr['t13']);},
- year : aStr['t14'],
- years : function(value){return tf(value, aStr['t15']);},
- wordSeparator : aStr['t16'],
- numbers : aStr['t17'],
-};
-
-jQuery.timeago.settings.allowFuture = true;
-
$(document).ready(function() {
$(document).on('click focus', '.comment-edit-form', handle_comment_form);
$(document).on('click', '.conversation-settings-link', getConversationSettings);
$(document).on('click', '#settings_module_ajax_submit', postConversationSettings);
- $(document).on('click', '#expand-aside', function() {
- toggleAside();
- });
+ $(document).on('click', '#expand-aside', toggleAside);
$(document).on('click focus', '.comment-edit-form textarea', function(e) {
if(! this.autocomplete_handled) {
@@ -175,14 +152,19 @@ $(document).ready(function() {
let singlethread_modules = ['display', 'hq'];
let redirect_modules = ['display', 'notify'];
- if(! b64mid && ! notify_id)
+ if (!b64mid && !notify_id) {
return;
+ }
+
+ if (document.querySelector('main').classList.contains('region_1-on')) {
+ toggleAside();
+ }
- if(localUser && redirect_modules.indexOf(path) !== -1) {
+ if (localUser && redirect_modules.indexOf(path) !== -1) {
path = 'hq';
}
- if(notify_id) {
+ if (notify_id) {
$.ajax({
type: 'post',
url: 'notify',
@@ -198,21 +180,17 @@ $(document).ready(function() {
window.location.href = path + '/' + b64mid;
}
else {
-
if (singlethread_modules.indexOf(module) !== -1) {
history.pushState(stateObj, '', module + '/' + b64mid);
-
}
if (b64mid) {
-
e.preventDefault();
-
- if(! page_load) {
+ if (!page_load) {
prepareLiveUpdate(b64mid, notify_id);
$('.message').removeClass('active');
$('[data-b64mid="' + b64mid + '"].message').addClass('active');
- $('[data-b64mid="' + b64mid + '"].message .badge').remove();
+ $('[data-b64mid="' + b64mid + '"].message .unseen_count').remove();
}
}
}
@@ -231,20 +209,21 @@ $(document).ready(function() {
updateInit();
- var e = document.getElementById('content-complete');
- if(e)
+ if (document.getElementById('content-complete')) {
pageHasMoreContent = false;
+ }
- $(document).on('hz:updateConvItems', function(event) {
- if(!bParam_mid)
+ document.addEventListener('hz:updateConvItems', function(e) {
+ if (!bParam_mid) {
cache_next_page();
+ }
});
- $(document).on('hz:handleNetworkNotificationsItems', function(e, obj) {
+ document.addEventListener('hz:handleNetworkNotificationsItems', function(e) {
push_notification(
- obj.name,
- $('<p>' + obj.message + '</p>').text(),
- obj.b64mid
+ e.detail.name,
+ $('<p>' + e.detail.message + '</p>').text(),
+ e.detail.b64mid
);
});
});
@@ -515,14 +494,12 @@ function viewsrc(id) {
function showHideComments(id) {
if($('#collapsed-comments-' + id).is(':visible')) {
- $('#collapsed-comments-' + id + ' .autotime').timeago('dispose');
$('#collapsed-comments-' + id).hide();
$('#hide-comments-label-' + id).html(aStr.showmore);
$('#hide-comments-total-' + id).show();
$('#hide-comments-icon-' + id).toggleClass('bi-chevron-down bi-chevron-up');
} else {
- $('#collapsed-comments-' + id + ' .autotime').timeago();
$('#collapsed-comments-' + id).show();
$('#hide-comments-label-' + id).html(aStr.showfewer);
$('#hide-comments-total-' + id).hide();
@@ -650,201 +627,342 @@ function updatePageItems(mode, data) {
collapseHeight();
}
-
-function updateConvItems(mode,data) {
- let scroll_position = $(window).scrollTop();
+function updateConvItems(mode, data) {
+ let scroll_position = window.scrollY;
let b64mids = [];
- if(mode !== 'update')
- $(document).trigger('hz:updateConvItems');
+ // Parse the data string into a DOM object
+ let parser = new DOMParser();
+ let doc = parser.parseFromString(data, 'text/html');
- if(mode === 'update' || mode === 'replace') {
- prev = 'threads-begin';
+ if (mode !== 'update') {
+ document.dispatchEvent(new Event('hz:updateConvItems'));
}
- if(mode === 'append') {
- next = 'threads-end';
+
+ let prev, next;
+ if (mode === 'update' || mode === 'replace') {
+ prev = document.getElementById('threads-begin');
+ }
+ if (mode === 'append') {
+ next = document.getElementById('threads-end');
}
- $('.thread-wrapper', data).each(function() {
- if(this.classList.contains('toplevel_item')) {
- let ident = this.id;
- let convId = ident.replace('thread-wrapper-','');
- let commentWrap = $('#'+ident+' .collapsed-comments').attr('id');
+ doc.querySelectorAll('.thread-wrapper').forEach(function (elem) {
+ if (elem.classList.contains('toplevel_item')) {
+ let ident = elem.id;
+ let convId = ident.replace('thread-wrapper-', '');
+ let commentWrap = elem.querySelector('.collapsed-comments')?.id;
let itmId = 0;
let isVisible = false;
// figure out the comment state
- if(typeof commentWrap !== 'undefined')
- itmId = commentWrap.replace('collapsed-comments-','');
+ if (commentWrap !== undefined) {
+ itmId = commentWrap.replace('collapsed-comments-', '');
+ }
- if($('#collapsed-comments-'+itmId).is(':visible'))
+ let collapsedComment = document.getElementById('collapsed-comments-' + itmId);
+ if (collapsedComment && collapsedComment.style.display !== 'none') {
isVisible = true;
+ }
// insert the content according to the mode and first_page
// and whether or not the content exists already (overwrite it)
-
- if($('#' + ident).length == 0) {
- if((mode === 'update' || mode === 'replace') && profile_page == 1) {
- $('#' + prev).after($(this));
- prev = ident;
+ let existingElem = document.getElementById(ident);
+ if (!existingElem) {
+ if ((mode === 'update' || mode === 'replace') && profile_page == 1) {
+ if (prev) {
+ prev.after(elem);
+ prev = elem;
+ }
}
- if(mode === 'append') {
- $('#' + next).before($(this));
+ if (mode === 'append') {
+ if (next) {
+ next.before(elem);
+ }
}
- }
- else {
- $('#' + ident).replaceWith($(this));
+ } else {
+ existingElem.replaceWith(elem);
}
- // set the comment state to the state we discovered earlier
+ // DOMParser will prevent scripts from execution for security reasons.
+ // We remove all scripts but possibly injected some from
+ // addons like for example gallery later.
+ // TODO: make the script run from the addon itself.
+ let scripts = elem.querySelectorAll('script');
+ scripts.forEach(script => {
+ let scriptContent = script.textContent || script.innerText;
+ eval(scriptContent); // Execute the script
+ });
- if(isVisible)
+ // set the comment state to the state we discovered earlier
+ if (isVisible) {
showHideComments(itmId);
+ }
let commentBody = localStorage.getItem("comment_body-" + convId);
-
- if(commentBody) {
- var commentElm = $('#comment-edit-text-' + convId);
- if(auto_save_draft) {
- if($(commentElm).val() === '') {
- $('#comment-edit-form-' + convId).show();
- $(commentElm).addClass("expanded");
+ if (commentBody) {
+ let commentElm = document.getElementById('comment-edit-text-' + convId);
+ if (auto_save_draft && commentElm) {
+ if (commentElm.value === '') {
+ let commentForm = document.getElementById('comment-edit-form-' + convId);
+ if (commentForm) {
+ commentForm.style.display = 'block';
+ }
+ commentElm.classList.add("expanded");
openMenu("comment-tools-" + convId);
- $(commentElm).val(commentBody);
+ commentElm.value = commentBody;
}
} else {
localStorage.removeItem("comment_body-" + convId);
}
}
- // trigger the autotime function on all newly created content
- $("> .wall-item-outside-wrapper .autotime, > .thread-wrapper .autotime",this).timeago();
- $("> .shared_header .autotime",this).timeago();
-
- if((mode === 'append' || mode === 'replace') && (loadingPage)) {
+ if ((mode === 'append' || mode === 'replace') && loadingPage) {
loadingPage = false;
}
- // if single thread view and the item has a title, display it in the title bar
-
- if(mode === 'replace') {
- if (window.location.search.indexOf("mid=") != -1 || window.location.pathname.indexOf("display") != -1) {
- let title = $(".wall-item-title").text();
- title.replace(/^\s+/, '');
- title.replace(/\s+$/, '');
- if (title) {
- savedTitle = title + " " + savedTitle;
- document.title = title;
+ // if single thread view and the item has a title, display it in the title bar
+ if (mode === 'replace') {
+ if (window.location.search.includes("mid=") || window.location.pathname.includes("display")) {
+ let titleElem = document.querySelector(".wall-item-title");
+ if (titleElem) {
+ let title = titleElem.textContent.trim();
+ if (title) {
+ savedTitle = title + ' ' + savedTitle;
+ document.title = title;
+ }
}
}
}
}
- $(this).data('b64mids').forEach((b64mid) => {
- b64mids.push(b64mid);
+ b64mids.push(...JSON.parse(elem.dataset.b64mids));
+ });
+
+ document.dispatchEvent(new CustomEvent('hz:sse_setNotificationsStatus', { detail: b64mids }));
+
+ window.scrollTo(0, scroll_position);
+
+ if (followUpPageLoad) {
+ document.dispatchEvent(new Event('hz:sse_bs_counts'));
+ } else {
+ document.dispatchEvent(new Event('hz:sse_bs_init'));
+ }
+
+ if (commentBusy) {
+ commentBusy = false;
+ document.body.style.cursor = 'auto';
+ }
+
+ // Setup to determine if the media player is playing. This affects some content loading decisions.
+ ['playing', 'pause'].forEach(event => {
+ document.querySelectorAll('video, audio').forEach(media => {
+ media.removeEventListener(event, mediaHandler);
+ media.addEventListener(event, mediaHandler);
});
+ });
+
+ function mediaHandler(event) {
+ mediaPlaying = event.type === 'playing';
+ }
+ imagesLoaded(document.querySelectorAll('.wall-item-body img, .wall-photo-item img'), function () {
+ collapseHeight();
+ if (bParam_mid && mode === 'replace') {
+ scrollToItem();
+ }
});
- $(document).trigger('hz:sse_setNotificationsStatus', [b64mids]);
+ // reset rotators and cursors we may have set before reaching this place
+ let pageSpinner = document.getElementById("page-spinner");
+ if (pageSpinner) {
+ pageSpinner.style.display = 'none';
+ }
+ let profileJotTextLoading = document.getElementById("profile-jot-text-loading");
+ if (profileJotTextLoading) {
+ profileJotTextLoading.style.display = 'none';
+ }
- $(window).scrollTop(scroll_position);
+ followUpPageLoad = true;
- if(followUpPageLoad) {
- $(document).trigger('hz:sse_bs_counts');
+ updateRelativeTime('.autotime');
+}
+
+function imagesLoaded(elements, callback) {
+ let loadedCount = 0;
+ let totalImages = 0;
+ let timeoutId;
+ const timeout = 10000;
+ const processed = new Set(); // Use a Set for efficient lookup
+
+ // Helper function to extract img elements from an HTML string
+ function extractImagesFromHtml(htmlString) {
+ const tempDiv = document.createElement('div');
+ tempDiv.innerHTML = htmlString;
+ return tempDiv.querySelectorAll('.wall-item-body img, .wall-photo-item img');
}
- else {
- $(document).trigger('hz:sse_bs_init');
+
+ function checkComplete(src) {
+ // Skip processing if image has already been processed
+ if (processed.has(src)) return;
+
+ processed.add(src);
+ loadedCount++;
+
+ // Update progress
+ const progress = Math.round((loadedCount * 100) / totalImages);
+ document.getElementById('image_counter').innerText = `${progress}%`;
+
+ // If all images are loaded, trigger the callback
+ if (loadedCount === totalImages) {
+ document.getElementById('image_counter').innerText = '';
+ clearTimeout(timeoutId);
+ callback();
+ }
}
- if(commentBusy) {
- commentBusy = false;
- $('body').css('cursor', 'auto');
+ // Convert HTML string to img elements if necessary
+ if (typeof elements === 'string') {
+ elements = extractImagesFromHtml(elements);
}
- // Setup to determine if the media player is playing. This affects
- // some content loading decisions.
+ // Exit early if there are no images to load
+ if (!elements || elements.length === 0) {
+ callback();
+ return;
+ }
- $('video').off('playing');
- $('video').off('pause');
- $('audio').off('playing');
- $('audio').off('pause');
+ // Filter valid image elements (only img with src attribute)
+ const images = Array.from(elements)
+ .filter((element) => element.tagName.toLowerCase() === 'img' && element.src)
+ .filter((element, index, self) =>
+ index === self.findIndex(e => e.src === element.src) // Avoid duplicates
+ );
- $('video').on('playing', function() {
- mediaPlaying = true;
- });
- $('video').on('pause', function() {
- mediaPlaying = false;
- });
- $('audio').on('playing', function() {
- mediaPlaying = true;
+ // If no images are found, call the callback immediately
+ if (images.length === 0) {
+ callback();
+ return;
+ }
+
+ totalImages = images.length;
+
+ // Set timeout for the loading process
+ timeoutId = setTimeout(() => {
+ console.warn(`Image loading timed out after ${timeout}ms`);
+ callback(false);
+ }, timeout);
+
+ // Iterate through images to add load and error event listeners
+ images.forEach((img) => {
+ img.loading = 'eager'; // Preload the image
+
+ if (img.complete && img.naturalHeight > 0) {
+ // Image is already loaded, handle immediately
+ checkComplete(img.src);
+ } else {
+ // Add event listeners for load and error events
+ img.addEventListener('load', () => checkComplete(img.src));
+ img.addEventListener('error', () => {
+ console.log(`Image failed to load: ${img.src}`);
+ checkComplete(img.src);
+ });
+ }
});
- $('audio').on('pause', function() {
- mediaPlaying = false;
+}
+
+function updateRelativeTime(selector) {
+ // Get all elements with the given selector
+ const timeElements = document.querySelectorAll(selector);
+ if (timeElements.length === 0) return;
+
+ // Default time style and map for supported options
+ const styleMap = ['narrow', 'short', 'long'];
+ const style = styleMap.find(s => selector.includes(s)) || 'long';
+
+ // Create an instance of RelativeTimeFormat
+ const rtf = new Intl.RelativeTimeFormat(lang, {
+ localeMatcher: 'best fit', // 'best fit' or 'lookup'
+ numeric: 'always', // 'always' or 'auto'
+ style: style // 'long', 'short', or 'narrow'
});
- if(! preloadImages) {
- $('.wall-item-body, .wall-photo-item').imagesLoaded()
- .always( function( instance ) {
- //console.log('all images loaded');
- collapseHeight();
+ const now = Date.now(); // Get the current time only once
- if(bParam_mid && mode === 'replace')
- scrollToItem();
-
- })
- .done( function( instance ) {
- //console.log('all images successfully loaded');
- })
- .fail( function() {
- //console.log('all images loaded, at least one is broken');
- })
- .progress( function( instance, image ) {
- //var result = image.isLoaded ? 'loaded' : 'broken';
- //console.log( 'image is ' + result + ' for ' + image.img.src );
- });
- }
- else {
- collapseHeight();
+ // Helper function to calculate the time difference in appropriate units
+ function getRelativeTime(diffInSeconds) {
+ const isFuture = diffInSeconds > 0;
+ const absDiffInSeconds = Math.abs(diffInSeconds);
- if(bParam_mid && mode === 'replace')
- scrollToItem();
+ if (absDiffInSeconds < 60) return { value: absDiffInSeconds, unit: 'second' };
+ if (absDiffInSeconds < 3600) return { value: Math.floor(absDiffInSeconds / 60), unit: 'minute' };
+ if (absDiffInSeconds < 86400) return { value: Math.floor(absDiffInSeconds / 3600), unit: 'hour' };
+ if (absDiffInSeconds < 2592000) return { value: Math.floor(absDiffInSeconds / 86400), unit: 'day' };
+ if (absDiffInSeconds < 31536000) return { value: Math.floor(absDiffInSeconds / 2592000), unit: 'month' };
+ return { value: Math.floor(absDiffInSeconds / 31536000), unit: 'year' };
}
- // reset rotators and cursors we may have set before reaching this place
+ // Process each element
+ timeElements.forEach(element => {
+ const timestamp = new Date(element.title).getTime();
+ if (isNaN(timestamp)) return; // Skip invalid timestamps
- $("#page-spinner").hide();
- $("#profile-jot-text-loading").hide();
+ const diffInSeconds = Math.floor((timestamp - now) / 1000); // Time difference in seconds
+ const { value, unit } = getRelativeTime(diffInSeconds);
- followUpPageLoad = true;
+ // Format the relative time and set it as the element's text
+ const formattedTime = rtf.format(diffInSeconds > 0 ? value : -value, unit);
+ element.textContent = formattedTime;
+ });
+ // Avoid duplicate timeout registrations for the same selector
+ if (!updateTimeout.includes(selector)) {
+ updateTimeout.push(selector);
+ setTimeout(() => updateRelativeTime(selector), 60000); // Re-run the update every 60 seconds
+ }
}
function scrollToItem() {
- // auto-scroll to a particular comment in a thread (designated by mid) when in single-thread mode
+ // auto-scroll to a particular comment in a thread (designated by mid) when in single-thread mode
- if(justifiedGalleryActive)
- return;
+ if (justifiedGalleryActive) return;
- let submid = ((bParam_mid.length) ? bParam_mid : 'abcdefg');
- //var encoded = ((submid.substr(0,4) == 'b64.') ? true : false);
- //var submid_encoded = ((encoded) ? submid : window.btoa(submid));
+ let submid = ((bParam_mid.length) ? bParam_mid : 'abcdefg');
- $('.thread-wrapper').filter(function() {
- if($(this).data('b64mids').indexOf(submid) > -1 && !$(this).hasClass('toplevel_item')) {
- if($('.collapsed-comments').length) {
- var scrolltoid = $('.collapsed-comments').attr('id').substring(19);
- $('#collapsed-comments-' + scrolltoid + ' .autotime').timeago();
- $('#collapsed-comments-' + scrolltoid).show();
- $('#hide-comments-label-' + scrolltoid).html(aStr.showfewer);
- $('#hide-comments-total-' + scrolltoid).hide();
- }
- $('html, body').animate({ scrollTop: $(this).offset().top - $('nav').outerHeight(true) }, 'slow');
- $(this).addClass('item-highlight');
- }
- });
+ // Select all thread wrappers
+ let threadWrappers = document.querySelectorAll('.thread-wrapper');
+
+ threadWrappers.forEach(thread => {
+ // Get the 'data-b64mids' attribute and check if it contains submid
+ let b64mids = thread.dataset.b64mids;
+
+ if (b64mids && b64mids.includes(submid) && !thread.classList.contains('toplevel_item')) {
+
+ // Handle collapsed comments if any
+ let collapsedComments = document.querySelectorAll('.collapsed-comments');
+ if (collapsedComments.length) {
+ let scrolltoid = collapsedComments[0].id.substring(19);
+ let collapsedComment = document.getElementById('collapsed-comments-' + scrolltoid);
+ let hideCommentsLabel = document.getElementById('hide-comments-label-' + scrolltoid);
+ let hideCommentsTotal = document.getElementById('hide-comments-total-' + scrolltoid);
+
+ if (collapsedComment) collapsedComment.style.display = 'block';
+ if (hideCommentsLabel) hideCommentsLabel.innerHTML = aStr.showfewer;
+ if (hideCommentsTotal) hideCommentsTotal.style.display = 'none';
+ }
+
+ // Scroll to the target element
+ let navHeight = document.querySelector('nav') ? document.querySelector('nav').offsetHeight : 0;
+ window.scrollTo({
+ top: thread.offsetTop - navHeight,
+ behavior: 'smooth'
+ });
+ // Add highlight class
+ thread.classList.add('item-highlight');
+ }
+ });
}
function collapseHeight() {
@@ -908,7 +1026,7 @@ function updateInit() {
liveUpdate();
}
else {
- $(document).trigger('hz:sse_bs_init');
+ document.dispatchEvent(new Event('hz:sse_bs_init'));
}
if($('#live-photos').length || $('#live-cards').length || $('#live-articles').length ) {
@@ -1034,10 +1152,7 @@ function liveUpdate(notify_id) {
if(update_mode === 'update' || preloadImages) {
console.log('LOADING images...');
- $('.wall-item-body, .wall-photo-item',data).imagesLoaded()
- .always( function( instance ) {
- //console.log('all images loaded');
-
+ imagesLoaded(data, function () {
var iready = new Date();
console.log('IMAGES ready in: ' + (iready - dready)/1000 + ' seconds.');
@@ -1046,23 +1161,7 @@ function liveUpdate(notify_id) {
updateConvItems(update_mode,data);
in_progress = false;
- $('#image_counter').html('');
-
- // remove modal backdrop in case the update was triggered from a modal
- $('.modal-backdrop').remove();
- })
- .done( function( instance ) {
- //console.log('all images successfully loaded');
- })
- .fail( function() {
- //console.log('all images loaded, at least one is broken');
- })
- .progress( function( instance, image ) {
- $('#image_counter').html(Math.floor((instance.progressedCount*100)/instance.images.length) + '%');
- //var result = image.isLoaded ? 'loaded' : 'broken';
- //console.log( 'image is ' + result + ' for ' + image.img.src );
});
-
}
else {
page_load = false;
@@ -1104,9 +1203,8 @@ function cache_next_page() {
console.log('cached: ' + update_url);
- $('.wall-item-body, .wall-photo-item', data).imagesLoaded()
- .always( function( instance ) {
- console.log('page_cache images loaded:');
+ imagesLoaded(data, function () {
+ console.log('page_cache: images loaded');
page_cache.data = data;
page_cache.page = bParam_page;
@@ -1114,19 +1212,7 @@ function cache_next_page() {
bParam_page--;
page_load = false;
- })
- .done( function( instance ) {
- console.log('success');
- })
- .fail( function() {
- console.log('at least one is broken');
- })
- .progress( function( instance, image ) {
- //console.log(instance.progressedCount + '/' + instance.images.length);
- //var result = image.isLoaded ? 'loaded' : 'broken';
- //console.log( 'image is ' + result + ' for ' + image.img.src );
});
-
});
}
@@ -1156,7 +1242,7 @@ function pageUpdate() {
scroll_next = false;
updatePageItems(update_mode,data);
$("#page-spinner").hide();
- $(".autotime").timeago();
+ updateRelativeTime('.autotime');
in_progress = false;
});
}
@@ -1178,20 +1264,27 @@ function justifyPhotosAjax(id) {
}
function dolike(ident, verb) {
- $('#like-rotator-' + ident.toString()).show();
+ $('#like-rotator-' + ident).show();
- if(typeof conv_mode == typeof undefined)
+ if (typeof conv_mode == typeof undefined) {
conv_mode = '';
+ }
- if(typeof page_mode == typeof undefined)
+ if (typeof page_mode == typeof undefined) {
page_mode = '';
+ }
- var reload = '';
- if(module == 'photos')
+ let reload = 0;
+
+ if (module == 'photos') {
reload = 1;
+ }
- $.get('like/' + ident.toString() + '?verb=' + verb + '&conv_mode=' + conv_mode + '&page_mode=' + page_mode + '&reload=' + reload, function (data) {
- if(data.success) {
+
+ $.get('like/' + ident + '?verb=' + verb + '&conv_mode=' + conv_mode + '&page_mode=' + page_mode + '&reload=' + reload, function (data) {
+ if (data.success) {
+
+ close_modal();
// mod photos
if (data.reload) {
@@ -1210,13 +1303,12 @@ function dolike(ident, verb) {
$('#thread-wrapper-' + data.orig_id).replaceWith(data.html);
}
- $('#wall-item-ago-' + data.id + ' .autotime').timeago();
+ updateRelativeTime('.autotime');
collapseHeight();
liking = 0;
- // remove modal backdrop in case the update was triggered from a modal
- $('.modal-backdrop').remove();
}
});
+
liking = 1;
}
@@ -1332,26 +1424,28 @@ function dropItem(url, object, b64mid) {
}
function dosubthread(ident) {
- $('#like-rotator-' + ident.toString()).show();
- $.get('subthread/sub/' + ident.toString(), updateInit );
+ $('#like-rotator-' + ident).show();
+ $.get('subthread/sub/' + ident, updateInit );
liking = 1;
}
function dounsubthread(ident) {
- $('#like-rotator-' + ident.toString()).show();
- $.get('subthread/unsub/' + ident.toString(), updateInit );
+ $('#like-rotator-' + ident).show();
+ $.get('subthread/unsub/' + ident, updateInit );
liking = 1;
}
-function moderate_approve(ident) {
- $('#like-rotator-' + ident.toString()).show();
- $.get('moderate/' + ident.toString() + '/approve', updateInit );
+function moderate_approve(ident, verb) {
+ $('#like-rotator-' + ident).show();
+ close_modal();
+ $.get('moderate/' + ident + '/approve', updateInit );
liking = 1;
}
function moderate_drop(ident) {
- $('#like-rotator-' + ident.toString()).show();
- $.get('moderate/' + ident.toString() + '/drop', $('#thread-wrapper-' + ident.toString()).fadeOut(function() { this.remove(); }));
+ $('#like-rotator-' + ident).show();
+ close_modal();
+ $.get('moderate/' + ident + '/drop', $('#thread-wrapper-' + ident).fadeOut(function() { this.remove(); }));
liking = 1;
}
@@ -1450,7 +1544,7 @@ function post_comment(id) {
$("#comment-edit-preview-" + id).hide();
$("#comment-edit-text-" + id).val('').blur().attr('placeholder', aStr.comment);
$('#wall-item-comment-wrapper-' + id).before(data.html);
- $('#wall-item-ago-' + data.id + ' .autotime').timeago();
+ updateRelativeTime('.autotime');
$('body').css('cursor', 'unset');
collapseHeight();
commentBusy = false;
@@ -1480,7 +1574,7 @@ function preview_comment(id) {
function(data) {
if(data.preview) {
$("#comment-edit-preview-" + id).html(data.preview);
- $("#comment-edit-preview-" + id + " .autotime").timeago();
+ updateRelativeTime('.autotime');
$("#comment-edit-preview-" + id + " a").click(function() { return false; });
}
},
@@ -1510,7 +1604,7 @@ function preview_post() {
function(data) {
if(data.preview) {
$("#jot-preview-content").html(data.preview);
- $("#jot-preview-content .autotime").timeago();
+ updateRelativeTime('.autotime');
$("#jot-preview-content" + " a").click(function() { return false; });
}
},
@@ -1702,7 +1796,7 @@ function toggleAside() {
}
function toast(string, severity) {
- let id = btoa(string);
+ let id = bin2hex(string);
let container = document.getElementById('toast-container');
let toast = document.getElementById(id);
@@ -1723,3 +1817,11 @@ function toast(string, severity) {
toastInstance.show();
}
+
+function close_modal() {
+ let modal = bootstrap.Modal.getInstance(document.querySelector('.modal.show'));
+
+ if (modal) {
+ modal.hide();
+ }
+}
diff --git a/view/js/mod_articles.js b/view/js/mod_articles.js
index 8b31c0f52..5ebe46aa0 100644
--- a/view/js/mod_articles.js
+++ b/view/js/mod_articles.js
@@ -1,5 +1,5 @@
$(document).ready( function() {
- $(".autotime").timeago();
+ updateRelativeTime('.autotime');
/* autocomplete @nicknames */
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1");
diff --git a/view/js/mod_cards.js b/view/js/mod_cards.js
index 8b31c0f52..5ebe46aa0 100644
--- a/view/js/mod_cards.js
+++ b/view/js/mod_cards.js
@@ -1,5 +1,5 @@
$(document).ready( function() {
- $(".autotime").timeago();
+ updateRelativeTime('.autotime');
/* autocomplete @nicknames */
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1");
diff --git a/view/js/mod_cloud.js b/view/js/mod_cloud.js
index fc9219bff..9669d86f5 100644
--- a/view/js/mod_cloud.js
+++ b/view/js/mod_cloud.js
@@ -519,42 +519,45 @@ function formatSizeUnits(bytes){
// this is basically a js port of include/text.php getIconFromType() function
function getIconFromType(type) {
- var map = {
+ let map = {
//Common file
- 'application/octet-stream': 'fa-file-o',
+ 'application/octet-stream': 'bi-file-earmark',
//Text
- 'text/plain': 'fa-file-text-o',
- 'application/msword': 'fa-file-word-o',
- 'application/pdf': 'fa-file-pdf-o',
- 'application/vnd.oasis.opendocument.text': 'fa-file-word-o',
- 'application/epub+zip': 'fa-book',
+ 'text/plain': 'bi-file-earmark-text',
+ 'text/markdown': 'bi-filetype-md',
+ 'text/bbcode': 'bi-file-earmark-text',
+ 'text/html': 'bi-filetype-html',
+ 'application/msword': 'bi-file-earmark-word',
+ 'application/pdf': 'bi-file-earmark-pdf',
+ 'application/vnd.oasis.opendocument.text': 'bifile--earmark-text',
+ 'application/epub+zip': 'bi-file-earmark-text',
//Spreadsheet
- 'application/vnd.oasis.opendocument.spreadsheet': 'fa-file-excel-o',
- 'application/vnd.ms-excel': 'fa-file-excel-o',
+ 'application/vnd.oasis.opendocument.spreadsheet': 'bi-file-earmark-spreadsheet',
+ 'application/vnd.ms-excel': 'bi-file-earmark-spreadsheet',
//Image
- 'image/jpeg': 'fa-picture-o',
- 'image/png': 'fa-picture-o',
- 'image/gif': 'fa-picture-o',
- 'image/svg+xml': 'fa-picture-o',
+ 'image/jpeg': 'bi-file-earmark-image',
+ 'image/png': 'bi-file-earmark-image',
+ 'image/gif': 'bi-file-earmark-image',
+ 'image/webp': 'bi-file-earmark-image',
+ 'image/svg+xml': 'bi-filetype-svg',
//Archive
- 'application/zip': 'fa-file-archive-o',
- 'application/x-rar-compressed': 'fa-file-archive-o',
+ 'application/zip': 'bi-file-earmark-zip',
+ 'application/x-rar-compressed': 'bi-file-earmark-zip',
//Audio
- 'audio/mpeg': 'fa-file-audio-o',
- 'audio/mp3': 'fa-file-audio-o', //webkit browsers need that
- 'audio/wav': 'fa-file-audio-o',
- 'application/ogg': 'fa-file-audio-o',
- 'audio/ogg': 'fa-file-audio-o',
- 'audio/webm': 'fa-file-audio-o',
- 'audio/mp4': 'fa-file-audio-o',
+ 'audio/mpeg': 'bi-file-earmark-music',
+ 'audio/wav': 'bi-file-earmark-music',
+ 'application/ogg': 'bi-file-earmark-music',
+ 'audio/ogg': 'bi-file-earmark-music',
+ 'audio/webm': 'bi-file-earmark-music',
+ 'audio/mp4': 'bi-file-earmark-music',
//Video
- 'video/quicktime': 'fa-file-video-o',
- 'video/webm': 'fa-file-video-o',
- 'video/mp4': 'fa-file-video-o',
- 'video/x-matroska': 'fa-file-video-o'
+ 'video/quicktime': 'bi-file-earmark-play',
+ 'video/webm': 'bi-file-earmark-play',
+ 'video/mp4': 'bi-file-earmark-play',
+ 'video/x-matroska': 'bi-file-earmark-play'
};
- var iconFromType = 'fa-file-o';
+ let iconFromType = 'bi-file-earmark';
if (type in map) {
iconFromType = map[type];
diff --git a/view/js/mod_connections.js b/view/js/mod_connections.js
index cb3ecc922..c8bd494d2 100644
--- a/view/js/mod_connections.js
+++ b/view/js/mod_connections.js
@@ -2,6 +2,6 @@ $(document).ready(function() {
$("#contacts-search").name_autocomplete(baseurl + '/acl', 'a', true, function(data) {
$("#contacts-search-xchan").val(data.xid);
});
- $(".autotime").timeago();
+ updateRelativeTime('.autotime');
});
diff --git a/view/js/mod_hq.js b/view/js/mod_hq.js
index 1e4c02768..2c2aca37b 100644
--- a/view/js/mod_hq.js
+++ b/view/js/mod_hq.js
@@ -1,6 +1,5 @@
$(document).ready(function() {
-
- $('.autotime').timeago();
+ updateRelativeTime('.autotime');
if (bParam_mid) {
src = 'hq';
diff --git a/view/js/mod_import_progress.js b/view/js/mod_import_progress.js
index 7aed56365..11b324862 100644
--- a/view/js/mod_import_progress.js
+++ b/view/js/mod_import_progress.js
@@ -30,6 +30,9 @@ $(document).ready(function() {
$('#cprogress-bar').css('width', '0%');
}
+ $('#cprogress-completed span').html(data.ccompleted_str);
+
+
// files
if (typeof data.fprogress == 'number') {
$('#fprogress-label').html(data.fprogress + '%');
@@ -50,5 +53,8 @@ $(document).ready(function() {
$('#fprogress-label').html(data.fprogress);
$('#fprogress-bar').css('width', '0%');
}
+
+ $('#fprogress-completed span').html(data.fcompleted_str);
+
}
});
diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js
index c487fc417..ca1d85f0c 100644
--- a/view/js/mod_photos.js
+++ b/view/js/mod_photos.js
@@ -131,42 +131,45 @@ function formatSizeUnits(bytes){
// this is basically a js port of include/text.php getIconFromType() function
function getIconFromType(type) {
- var map = {
+ let map = {
//Common file
- 'application/octet-stream': 'fa-file-o',
+ 'application/octet-stream': 'bi-file-earmark',
//Text
- 'text/plain': 'fa-file-text-o',
- 'application/msword': 'fa-file-word-o',
- 'application/pdf': 'fa-file-pdf-o',
- 'application/vnd.oasis.opendocument.text': 'fa-file-word-o',
- 'application/epub+zip': 'fa-book',
+ 'text/plain': 'bi-file-earmark-text',
+ 'text/markdown': 'bi-filetype-md',
+ 'text/bbcode': 'bi-file-earmark-text',
+ 'text/html': 'bi-filetype-html',
+ 'application/msword': 'bi-file-earmark-word',
+ 'application/pdf': 'bi-file-earmark-pdf',
+ 'application/vnd.oasis.opendocument.text': 'bifile--earmark-text',
+ 'application/epub+zip': 'bi-file-earmark-text',
//Spreadsheet
- 'application/vnd.oasis.opendocument.spreadsheet': 'fa-file-excel-o',
- 'application/vnd.ms-excel': 'fa-file-excel-o',
+ 'application/vnd.oasis.opendocument.spreadsheet': 'bi-file-earmark-spreadsheet',
+ 'application/vnd.ms-excel': 'bi-file-earmark-spreadsheet',
//Image
- 'image/jpeg': 'fa-picture-o',
- 'image/png': 'fa-picture-o',
- 'image/gif': 'fa-picture-o',
- 'image/svg+xml': 'fa-picture-o',
+ 'image/jpeg': 'bi-file-earmark-image',
+ 'image/png': 'bi-file-earmark-image',
+ 'image/gif': 'bi-file-earmark-image',
+ 'image/webp': 'bi-file-earmark-image',
+ 'image/svg+xml': 'bi-filetype-svg',
//Archive
- 'application/zip': 'fa-file-archive-o',
- 'application/x-rar-compressed': 'fa-file-archive-o',
+ 'application/zip': 'bi-file-earmark-zip',
+ 'application/x-rar-compressed': 'bi-file-earmark-zip',
//Audio
- 'audio/mpeg': 'fa-file-audio-o',
- 'audio/mp3': 'fa-file-audio-o', //webkit browsers need that
- 'audio/wav': 'fa-file-audio-o',
- 'application/ogg': 'fa-file-audio-o',
- 'audio/ogg': 'fa-file-audio-o',
- 'audio/webm': 'fa-file-audio-o',
- 'audio/mp4': 'fa-file-audio-o',
+ 'audio/mpeg': 'bi-file-earmark-music',
+ 'audio/wav': 'bi-file-earmark-music',
+ 'application/ogg': 'bi-file-earmark-music',
+ 'audio/ogg': 'bi-file-earmark-music',
+ 'audio/webm': 'bi-file-earmark-music',
+ 'audio/mp4': 'bi-file-earmark-music',
//Video
- 'video/quicktime': 'fa-file-video-o',
- 'video/webm': 'fa-file-video-o',
- 'video/mp4': 'fa-file-video-o',
- 'video/x-matroska': 'fa-file-video-o'
+ 'video/quicktime': 'bi-file-earmark-play',
+ 'video/webm': 'bi-file-earmark-play',
+ 'video/mp4': 'bi-file-earmark-play',
+ 'video/x-matroska': 'bi-file-earmark-play'
};
- var iconFromType = 'fa-file-o';
+ let iconFromType = 'bi-file-earmark';
if (type in map) {
iconFromType = map[type];
diff --git a/view/nb-no/hmessages.po b/view/nb/hmessages.po
index d8f0bffc4..3d0fa3dca 100644
--- a/view/nb-no/hmessages.po
+++ b/view/nb/hmessages.po
@@ -3,4329 +3,2431 @@
# This file is distributed under the same license as the hubzilla package.
# Mike Macgirvin, 2012
# Haakon Meland Eriksen <haakon.eriksen@far.no>, 2015-2016.
-# SPDX-FileCopyrightText: 2022, 2023 Harald Eilertsen <haraldei@anduin.net>
+# SPDX-FileCopyrightText: 2022, 2023, 2024 Harald Eilertsen <haraldei@anduin.net>
#
msgid ""
msgstr ""
"Project-Id-Version: 8.6RC1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-07-04 17:57+0000\n"
-"PO-Revision-Date: 2023-12-15 22:33+0100\n"
+"POT-Creation-Date: 2024-09-20 12:31+0200\n"
+"PO-Revision-Date: 2024-11-04 10:19+0100\n"
"Last-Translator: Harald Eilertsen <haraldei@anduin.net>\n"
-"Language-Team: Norwegian Bokmal <l10n-no@lister.huftis.org>\n"
+"Language-Team: Norwegian Bokmål <l10n-no@lister.huftis.org>\n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1 ? 1 : 0);\n"
-"X-Generator: Lokalize 23.08.4\n"
-
-#: ../../view/theme/redbasic/php/config.php:15
-#: ../../addon/cart/submodules/orderoptions.php:335
-#: ../../addon/cart/submodules/orderoptions.php:359
-#: ../../addon/cart/submodules/orderoptions.php:435
-#: ../../addon/cart/submodules/orderoptions.php:459 ../../include/text.php:3502
-#: ../../Zotlabs/Module/Admin/Site.php:245
-msgid "Default"
-msgstr "Standard"
-
-#: ../../view/theme/redbasic/php/config.php:16
-#: ../../view/theme/redbasic/php/config.php:19
-msgid "Focus (Hubzilla default)"
-msgstr "Focus (Hubzilla standard)"
+"X-Generator: Lokalize 24.08.2\n"
-#: ../../view/theme/redbasic/php/config.php:98
-#: ../../addon/wiki/Widget/Wiki_pages.php:69 ../../addon/wiki/Mod_Wiki.php:218
-#: ../../addon/wiki/Mod_Wiki.php:907
-#: ../../addon/openclipatar/openclipatar.php:54
-#: ../../addon/photocache/Mod_Photocache.php:63
-#: ../../addon/redred/Mod_Redred.php:88 ../../addon/redphotos/redphotos.php:136
-#: ../../addon/statusnet/Mod_Statusnet.php:191
-#: ../../addon/statusnet/Mod_Statusnet.php:249
-#: ../../addon/statusnet/Mod_Statusnet.php:304
-#: ../../addon/statusnet/statusnet.php:602 ../../addon/rtof/Mod_Rtof.php:70
-#: ../../addon/wppost/Mod_Wppost.php:107
-#: ../../addon/content_import/Mod_content_import.php:140
-#: ../../addon/openstreetmap/openstreetmap.php:155
-#: ../../addon/ijpost/Mod_Ijpost.php:72
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:62
-#: ../../addon/dwpost/Mod_Dwpost.php:78
-#: ../../addon/startpage/Mod_Startpage.php:71
-#: ../../addon/twitter/Mod_Twitter.php:182
-#: ../../addon/pumpio/Mod_Pumpio.php:113
-#: ../../addon/cart/submodules/subscriptions.php:410
-#: ../../addon/cart/submodules/hzservices.php:645
-#: ../../addon/cart/submodules/orderoptions.php:312
-#: ../../addon/cart/submodules/orderoptions.php:412
-#: ../../addon/cart/submodules/manualcat.php:248
-#: ../../addon/cart/Settings/Cart.php:132
-#: ../../addon/cart/Settings/Cart.php:142 ../../addon/cart/cart.php:1425
-#: ../../addon/nofed/Mod_Nofed.php:51
-#: ../../addon/smileybutton/Mod_Smileybutton.php:53
-#: ../../addon/redfiles/redfiles.php:124 ../../addon/diaspora/diaspora.php:87
-#: ../../addon/diaspora/Mod_Diaspora.php:101 ../../addon/piwik/piwik.php:95
-#: ../../addon/workflow/workflow.php:1468
-#: ../../addon/workflow/workflow.php:1527
-#: ../../addon/workflow/workflow.php:1646
-#: ../../addon/workflow/workflow.php:2749
-#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94
-#: ../../addon/likebanner/likebanner.php:57
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54 ../../addon/hubwall/hubwall.php:95
-#: ../../addon/flashcards/Mod_Flashcards.php:269
-#: ../../addon/libertree/Mod_Libertree.php:68 ../../addon/logrot/logrot.php:35
-#: ../../addon/skeleton/Mod_Skeleton.php:49
-#: ../../addon/socialauth/Mod_SocialAuth.php:341
-#: ../../addon/nsfw/Mod_Nsfw.php:59 ../../addon/mailtest/mailtest.php:100
-#: ../../addon/ljpost/Mod_Ljpost.php:80 ../../addon/hzfiles/hzfiles.php:86
-#: ../../addon/pageheader/Mod_Pageheader.php:52 ../../addon/irc/irc.php:45
-#: ../../addon/xmpp/Mod_Xmpp.php:70 ../../include/js_strings.php:23
-#: ../../Zotlabs/Module/Tokens.php:294
-#: ../../Zotlabs/Module/Import_items.php:125
-#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Setup.php:316
-#: ../../Zotlabs/Module/Setup.php:356 ../../Zotlabs/Module/Group.php:150
-#: ../../Zotlabs/Module/Group.php:159 ../../Zotlabs/Module/Oauth.php:109
-#: ../../Zotlabs/Module/Chat.php:208 ../../Zotlabs/Module/Chat.php:247
-#: ../../Zotlabs/Module/Poke.php:199 ../../Zotlabs/Module/Mitem.php:259
-#: ../../Zotlabs/Module/Filestorage.php:208
-#: ../../Zotlabs/Module/Connect.php:107 ../../Zotlabs/Module/Editpost.php:88
-#: ../../Zotlabs/Module/Admin/Themes.php:158
-#: ../../Zotlabs/Module/Admin/Features.php:66
-#: ../../Zotlabs/Module/Admin/Security.php:129
-#: ../../Zotlabs/Module/Admin/Accounts.php:309
-#: ../../Zotlabs/Module/Admin/Site.php:415
-#: ../../Zotlabs/Module/Admin/Logs.php:84
-#: ../../Zotlabs/Module/Admin/Channels.php:147
-#: ../../Zotlabs/Module/Admin/Account_edit.php:73
-#: ../../Zotlabs/Module/Admin/Profs.php:178
-#: ../../Zotlabs/Module/Admin/Addons.php:445
-#: ../../Zotlabs/Module/Regate.php:407 ../../Zotlabs/Module/Permcats.php:257
-#: ../../Zotlabs/Module/Mood.php:156 ../../Zotlabs/Module/Appman.php:220
-#: ../../Zotlabs/Module/Contactedit.php:429
-#: ../../Zotlabs/Module/Contactedit.php:462
-#: ../../Zotlabs/Module/Email_validation.php:40
-#: ../../Zotlabs/Module/Photos.php:1053 ../../Zotlabs/Module/Photos.php:1093
-#: ../../Zotlabs/Module/Photos.php:1206 ../../Zotlabs/Module/Profiles.php:739
-#: ../../Zotlabs/Module/Invite.php:563 ../../Zotlabs/Module/Xchan.php:15
-#: ../../Zotlabs/Module/Affinity.php:84
-#: ../../Zotlabs/Module/Settings/Network.php:62
-#: ../../Zotlabs/Module/Settings/Features.php:48
-#: ../../Zotlabs/Module/Settings/Channel.php:229
-#: ../../Zotlabs/Module/Settings/Account.php:107
-#: ../../Zotlabs/Module/Settings/Events.php:42
-#: ../../Zotlabs/Module/Settings/Manage.php:43
-#: ../../Zotlabs/Module/Settings/Channel_home.php:91
-#: ../../Zotlabs/Module/Settings/Calendar.php:42
-#: ../../Zotlabs/Module/Settings/Multifactor.php:85
-#: ../../Zotlabs/Module/Settings/Display.php:186
-#: ../../Zotlabs/Module/Settings/Directory.php:42
-#: ../../Zotlabs/Module/Settings/Editor.php:42
-#: ../../Zotlabs/Module/Settings/Connections.php:42
-#: ../../Zotlabs/Module/Settings/Photos.php:42
-#: ../../Zotlabs/Module/Settings/Profiles.php:52
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
-#: ../../Zotlabs/Module/Settings/Conversation.php:49
-#: ../../Zotlabs/Module/Defperms.php:262 ../../Zotlabs/Module/Pconfig.php:117
-#: ../../Zotlabs/Module/Oauth2.php:114 ../../Zotlabs/Module/Thing.php:328
-#: ../../Zotlabs/Module/Thing.php:381 ../../Zotlabs/Module/Pdledit.php:137
-#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Locs.php:125
-#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
-#: ../../Zotlabs/Lib/ThreadItem.php:831 ../../Zotlabs/Storage/Browser.php:385
-msgid "Submit"
-msgstr "Lagre"
+#: ../../include/bbcode.php:234 ../../include/bbcode.php:994
+#: ../../include/bbcode.php:1659 ../../include/bbcode.php:1667
+msgid "Image/photo"
+msgstr "Bilde/fotografi"
-#: ../../view/theme/redbasic/php/config.php:102
-msgid "Theme settings"
-msgstr "Instillinger for utseende"
+#: ../../include/bbcode.php:286
+msgid "Encrypted content"
+msgstr "Kryptert innhold"
-#: ../../view/theme/redbasic/php/config.php:103
-msgid "Dark style"
+#: ../../include/bbcode.php:342
+#, php-format
+msgid "Install %1$s element %2$s"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:104
-msgid "Light style"
+#: ../../include/bbcode.php:346
+#, php-format
+msgid ""
+"This post contains an installable %s element, however you lack permissions "
+"to install it on this site."
msgstr ""
+"Dette innlegget inneholder det installerbare elementet %s, men du mangler "
+"tillatelse til å installere det på dette nettstedet."
-#: ../../view/theme/redbasic/php/config.php:105
-msgid "Common settings"
-msgstr ""
+#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:47
+msgid "webpage"
+msgstr "nettside"
-#: ../../view/theme/redbasic/php/config.php:106
-#, fuzzy
-#| msgid "Default photo upload folder"
-msgid "Default to dark mode"
-msgstr "Standard mappe for opplasting av bilder"
+#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:57
+msgid "layout"
+msgstr "layout"
-#: ../../view/theme/redbasic/php/config.php:106
-#: ../../view/theme/redbasic/php/config.php:107
-#: ../../view/theme/redbasic/php/config.php:108
-#: ../../view/theme/redbasic/php/config.php:124
-#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
-#: ../../addon/redred/Mod_Redred.php:61
-#: ../../addon/statusnet/Mod_Statusnet.php:258
-#: ../../addon/statusnet/Mod_Statusnet.php:280
-#: ../../addon/statusnet/Mod_Statusnet.php:289 ../../addon/rtof/Mod_Rtof.php:47
-#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
-#: ../../addon/wppost/Mod_Wppost.php:92
-#: ../../addon/content_import/Mod_content_import.php:135
-#: ../../addon/content_import/Mod_content_import.php:136
-#: ../../addon/ijpost/Mod_Ijpost.php:61
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
-#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
-#: ../../addon/twitter/Mod_Twitter.php:160
-#: ../../addon/twitter/Mod_Twitter.php:169 ../../addon/pumpio/Mod_Pumpio.php:92
-#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
-#: ../../addon/cart/submodules/subscriptions.php:153
-#: ../../addon/cart/submodules/subscriptions.php:425
-#: ../../addon/cart/submodules/hzservices.php:67
-#: ../../addon/cart/submodules/hzservices.php:651
-#: ../../addon/cart/submodules/hzservices.php:655
-#: ../../addon/cart/submodules/orderoptions.php:72
-#: ../../addon/cart/submodules/orderoptions.php:338
-#: ../../addon/cart/submodules/orderoptions.php:362
-#: ../../addon/cart/submodules/orderoptions.php:438
-#: ../../addon/cart/submodules/orderoptions.php:462
-#: ../../addon/cart/submodules/paypalbutton.php:87
-#: ../../addon/cart/submodules/paypalbutton.php:95
-#: ../../addon/cart/submodules/paypalbuttonV2.php:88
-#: ../../addon/cart/submodules/paypalbuttonV2.php:98
-#: ../../addon/cart/submodules/manualcat.php:63
-#: ../../addon/cart/submodules/manualcat.php:254
-#: ../../addon/cart/submodules/manualcat.php:258
-#: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73
-#: ../../addon/cart/cart.php:1419 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-#: ../../addon/diaspora/Mod_Diaspora.php:70
-#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/socialauth/Mod_SocialAuth.php:218
-#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
-#: ../../addon/ljpost/Mod_Ljpost.php:69 ../../include/conversation.php:1483
-#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Register.php:512
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:138
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
-#: ../../Zotlabs/Module/Group.php:301 ../../Zotlabs/Module/Group.php:302
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177
-#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Admin/Site.php:319
-#: ../../Zotlabs/Module/Permcats.php:247
-#: ../../Zotlabs/Module/Contactedit.php:284
-#: ../../Zotlabs/Module/Contactedit.php:329 ../../Zotlabs/Module/Api.php:99
-#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:675
-#: ../../Zotlabs/Module/Profiles.php:685 ../../Zotlabs/Module/Profiles.php:693
-#: ../../Zotlabs/Module/Profiles.php:697
-#: ../../Zotlabs/Module/Settings/Channel.php:224
-#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Settings/Display.php:86
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166
-#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312
-#: ../../Zotlabs/Storage/Browser.php:392 ../../Zotlabs/Storage/Browser.php:394
-#: ../../Zotlabs/Storage/Browser.php:558 ../../boot.php:1751
-msgid "No"
-msgstr "Nei"
+#: ../../include/bbcode.php:362 ../../Zotlabs/Module/Impel.php:52
+msgid "block"
+msgstr "byggekloss"
-#: ../../view/theme/redbasic/php/config.php:106
-#: ../../view/theme/redbasic/php/config.php:107
-#: ../../view/theme/redbasic/php/config.php:108
-#: ../../view/theme/redbasic/php/config.php:124
-#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
-#: ../../addon/redred/Mod_Redred.php:61
-#: ../../addon/statusnet/Mod_Statusnet.php:258
-#: ../../addon/statusnet/Mod_Statusnet.php:280
-#: ../../addon/statusnet/Mod_Statusnet.php:289 ../../addon/rtof/Mod_Rtof.php:47
-#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
-#: ../../addon/wppost/Mod_Wppost.php:92
-#: ../../addon/content_import/Mod_content_import.php:135
-#: ../../addon/content_import/Mod_content_import.php:136
-#: ../../addon/ijpost/Mod_Ijpost.php:61
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
-#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
-#: ../../addon/twitter/Mod_Twitter.php:160
-#: ../../addon/twitter/Mod_Twitter.php:169 ../../addon/pumpio/Mod_Pumpio.php:92
-#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
-#: ../../addon/cart/submodules/subscriptions.php:153
-#: ../../addon/cart/submodules/subscriptions.php:425
-#: ../../addon/cart/submodules/hzservices.php:67
-#: ../../addon/cart/submodules/hzservices.php:651
-#: ../../addon/cart/submodules/hzservices.php:655
-#: ../../addon/cart/submodules/orderoptions.php:72
-#: ../../addon/cart/submodules/orderoptions.php:337
-#: ../../addon/cart/submodules/orderoptions.php:361
-#: ../../addon/cart/submodules/orderoptions.php:437
-#: ../../addon/cart/submodules/orderoptions.php:461
-#: ../../addon/cart/submodules/paypalbutton.php:87
-#: ../../addon/cart/submodules/paypalbutton.php:95
-#: ../../addon/cart/submodules/paypalbuttonV2.php:88
-#: ../../addon/cart/submodules/paypalbuttonV2.php:98
-#: ../../addon/cart/submodules/manualcat.php:63
-#: ../../addon/cart/submodules/manualcat.php:254
-#: ../../addon/cart/submodules/manualcat.php:258
-#: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73
-#: ../../addon/cart/cart.php:1419 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-#: ../../addon/diaspora/Mod_Diaspora.php:70
-#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/socialauth/Mod_SocialAuth.php:218
-#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
-#: ../../addon/ljpost/Mod_Ljpost.php:69 ../../include/conversation.php:1483
-#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Register.php:512
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:138
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
-#: ../../Zotlabs/Module/Group.php:301 ../../Zotlabs/Module/Group.php:302
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177
-#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Admin/Site.php:321
-#: ../../Zotlabs/Module/Permcats.php:247
-#: ../../Zotlabs/Module/Contactedit.php:284 ../../Zotlabs/Module/Api.php:98
-#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:675
-#: ../../Zotlabs/Module/Profiles.php:685 ../../Zotlabs/Module/Profiles.php:693
-#: ../../Zotlabs/Module/Profiles.php:697
-#: ../../Zotlabs/Module/Settings/Channel.php:224
-#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Settings/Display.php:86
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Sources.php:122
-#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Lib/Libzotdir.php:165
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
-#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
-#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:392
-#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
-#: ../../boot.php:1751
-msgid "Yes"
-msgstr "Ja"
+#: ../../include/bbcode.php:365 ../../Zotlabs/Module/Impel.php:64
+msgid "menu"
+msgstr "meny"
-#: ../../view/theme/redbasic/php/config.php:107
-msgid "Always use light icons for navbar"
+#: ../../include/bbcode.php:568
+msgid "card"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:107
-msgid "Enable this option if you use a dark navbar color in light mode"
+#: ../../include/bbcode.php:570
+msgid "article"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:108
-msgid "Narrow navbar"
-msgstr "Smal navigasjonslinje"
-
-#: ../../view/theme/redbasic/php/config.php:109
-msgid "Navigation bar background color"
-msgstr "Navigasjonslinjens bakgrunnsfarge"
-
-#: ../../view/theme/redbasic/php/config.php:110
-#, fuzzy
-#| msgid "Navigation bar background color"
-msgid "Dark navigation bar background color"
-msgstr "Navigasjonslinjens bakgrunnsfarge"
-
-#: ../../view/theme/redbasic/php/config.php:111
-msgid "Link color"
-msgstr "Lenkefarge"
-
-#: ../../view/theme/redbasic/php/config.php:112
-#, fuzzy
-#| msgid "Link color"
-msgid "Dark link color"
-msgstr "Lenkefarge"
-
-#: ../../view/theme/redbasic/php/config.php:113
-msgid "Link hover color"
-msgstr "Lenkefarge når musepekeren er over"
-
-#: ../../view/theme/redbasic/php/config.php:114
-#, fuzzy
-#| msgid "Link hover color"
-msgid "Dark link hover color"
-msgstr "Lenkefarge når musepekeren er over"
-
-#: ../../view/theme/redbasic/php/config.php:115
-msgid "Set the background color"
-msgstr "Angi bakgrunnsfargen"
-
-#: ../../view/theme/redbasic/php/config.php:116
-#, fuzzy
-#| msgid "Set the background color"
-msgid "Set the dark background color"
-msgstr "Angi bakgrunnsfargen"
-
-#: ../../view/theme/redbasic/php/config.php:117
-msgid "Set the background image"
-msgstr "Angi bakgrunnsbilde"
-
-#: ../../view/theme/redbasic/php/config.php:118
-#, fuzzy
-#| msgid "Set the background image"
-msgid "Set the dark background image"
-msgstr "Angi bakgrunnsbilde"
-
-#: ../../view/theme/redbasic/php/config.php:119
-msgid "Set font-size for the entire application"
-msgstr "Angi skriftstørrelsen for hele programmet"
-
-#: ../../view/theme/redbasic/php/config.php:119
-msgid "Examples: 1rem, 100%, 16px"
-msgstr "For eksempel: 1rem, 100%, 16px"
-
-#: ../../view/theme/redbasic/php/config.php:120
-msgid "Set radius of corners"
-msgstr "Angi hjørneradius"
-
-#: ../../view/theme/redbasic/php/config.php:120
-msgid "Example: 4px"
-msgstr "For eksempel: 4px"
-
-#: ../../view/theme/redbasic/php/config.php:121
-msgid "Set maximum width of content region in rem"
-msgstr "Set maksbredde for hovedregionen i rem"
-
-#: ../../view/theme/redbasic/php/config.php:121
-msgid "Leave empty for default width"
-msgstr "La feltet stå tomt for å bruke standard bredde"
-
-#: ../../view/theme/redbasic/php/config.php:122
-msgid "Set size of conversation author photo"
-msgstr "Angi størrelsen for samtalens forfatterbilde"
-
-#: ../../view/theme/redbasic/php/config.php:123
-msgid "Set size of followup author photos"
-msgstr "Angi størrelsen på forfatterbilder ved oppfølging"
-
-#: ../../view/theme/redbasic/php/config.php:124
-msgid "Show advanced settings"
-msgstr "Vis avanserte innstillinger"
-
-#: ../../util/nconfig.php:34
-msgid "Source channel not found."
-msgstr "Fant ikke kildekanalen."
-
-#: ../../addon/superblock/superblock.php:355
-msgid "Block Completely"
-msgstr "Blokker helt"
-
-#: ../../addon/superblock/Mod_Superblock.php:62
-msgid "superblock settings updated"
-msgstr "innstillingene til superblokk ble oppdatert"
-
-#: ../../addon/superblock/Mod_Superblock.php:86
-msgid "Currently blocked"
-msgstr "Blokkert for øyeblikket"
-
-#: ../../addon/superblock/Mod_Superblock.php:88
-msgid "No channels currently blocked"
-msgstr "Ingen kanaler er blokkert i øyeblikket"
+#: ../../include/bbcode.php:572 ../../include/conversation.php:180
+#: ../../include/text.php:2364 ../../include/markdown.php:208
+#: ../../Zotlabs/Module/Tagger.php:79
+msgid "post"
+msgstr "innlegg"
-#: ../../addon/superblock/Mod_Superblock.php:90
-#: ../../Zotlabs/Module/Tagrm.php:137 ../../Zotlabs/Module/Admin/Addons.php:462
-#: ../../Zotlabs/Module/Cover_photo.php:424 ../../Zotlabs/Module/Photos.php:991
-msgid "Remove"
-msgstr "Fjern"
+#: ../../include/bbcode.php:576 ../../include/markdown.php:206
+#, php-format
+msgid "%1$s wrote the following %2$s %3$s"
+msgstr "%1$s skrev følgende %2$s %3$s"
-#: ../../addon/nsabait/Mod_Nsabait.php:23
-msgid "NSA Bait App"
-msgstr ""
+#: ../../include/bbcode.php:653 ../../include/bbcode.php:661
+msgid "Click to open/close"
+msgstr "Klikk for å åpne/lukke"
-#: ../../addon/nsabait/Mod_Nsabait.php:25
-msgid "Make yourself a political target."
+#: ../../include/bbcode.php:661 ../../include/markdown.php:278
+msgid "spoiler"
msgstr ""
-#: ../../addon/visage/Mod_Visage.php:23
-msgid "Recent Channel/Profile Viewers"
+#: ../../include/bbcode.php:674
+msgid "View article"
msgstr ""
-#: ../../addon/visage/Mod_Visage.php:34
-msgid "No entries."
+#: ../../include/bbcode.php:674
+msgid "View summary"
msgstr ""
-#: ../../addon/wiki/Widget/Wiki_pages.php:55
-msgid "Wiki Pages"
-msgstr "Wikisider"
-
-#: ../../addon/wiki/Widget/Wiki_pages.php:61 ../../addon/wiki/Mod_Wiki.php:899
-msgid "Add new page"
-msgstr "Legg til ny side"
-
-#: ../../addon/wiki/Widget/Wiki_pages.php:65 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
-#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2213
-msgid "Markdown"
-msgstr "Markdown"
-
-#: ../../addon/wiki/Widget/Wiki_pages.php:65 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
-#: ../../include/text.php:2211
-msgid "BBcode"
-msgstr "BBcode"
-
-#: ../../addon/wiki/Widget/Wiki_pages.php:65 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:903 ../../include/text.php:2214
-msgid "Text"
-msgstr "Tekst"
-
-#: ../../addon/wiki/Widget/Wiki_pages.php:66
-msgid "Page name"
-msgstr "Sidenavn"
-
-#: ../../addon/wiki/Widget/Wiki_pages.php:68 ../../addon/wiki/Mod_Wiki.php:906
-#: ../../Zotlabs/Module/Dreport.php:133
-msgid "Options"
-msgstr "Valg"
-
-#: ../../addon/wiki/Widget/Wiki_list.php:20 ../../addon/wiki/Mod_Wiki.php:209
-#: ../../addon/wiki/wiki.php:70 ../../include/nav.php:522
-msgid "Wikis"
-msgstr "Wikier"
-
-#: ../../addon/wiki/Widget/Wiki_page_history.php:28
-#: ../../addon/wiki/Lib/NativeWikiPage.php:588
-#: ../../addon/wiki/Mod_Wiki.php:221 ../../addon/rendezvous/rendezvous.php:172
-#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth.php:137
-#: ../../Zotlabs/Module/Chat.php:256 ../../Zotlabs/Module/Cdav.php:1364
-#: ../../Zotlabs/Module/Sharedwithme.php:107
-#: ../../Zotlabs/Module/Admin/Channels.php:159
-#: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Oauth2.php:144
-#: ../../Zotlabs/Module/Connedit.php:732 ../../Zotlabs/Storage/Browser.php:380
-msgid "Name"
-msgstr "Navn"
-
-#: ../../addon/wiki/Widget/Wiki_page_history.php:29
-#: ../../addon/wiki/Lib/NativeWikiPage.php:589
-msgctxt "wiki_history"
-msgid "Message"
-msgstr "Melding"
-
-#: ../../addon/wiki/Widget/Wiki_page_history.php:30
-#: ../../addon/wiki/Lib/NativeWikiPage.php:590
-msgid "Date"
-msgstr "Dato"
-
-#: ../../addon/wiki/Widget/Wiki_page_history.php:31
-#: ../../addon/wiki/Lib/NativeWikiPage.php:591
-#: ../../addon/wiki/Mod_Wiki.php:364
-msgid "Revert"
-msgstr "Tilbakestill"
-
-#: ../../addon/wiki/Widget/Wiki_page_history.php:32
-#: ../../addon/wiki/Lib/NativeWikiPage.php:592
-msgid "Compare"
-msgstr "Sammenlign"
-
-#: ../../addon/wiki/Lib/NativeWiki.php:144
-msgid "Wiki updated successfully"
-msgstr "Wikien ble oppdatert"
-
-#: ../../addon/wiki/Lib/NativeWiki.php:204
-msgid "Wiki files deleted successfully"
-msgstr "Wikifiler ble slettet"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:41
-#: ../../addon/wiki/Lib/NativeWikiPage.php:109
-msgid "(No Title)"
-msgstr "(Ingen tittel)"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:123
-msgid "Wiki page create failed."
-msgstr "Kunne ikke opprette wikiside."
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:137
-msgid "Wiki not found."
-msgstr "Fant ikke wikien."
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:148
-msgid "Destination name already exists"
-msgstr "Navnet finnes allerede"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:181
-#: ../../addon/wiki/Lib/NativeWikiPage.php:376
-msgid "Page not found"
-msgstr "Fant ikke siden"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:211
-msgid "Error reading page content"
-msgstr "Det oppstod en feil under lesing av innholder på siden"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:367
-#: ../../addon/wiki/Lib/NativeWikiPage.php:425
-#: ../../addon/wiki/Lib/NativeWikiPage.php:493
-#: ../../addon/wiki/Lib/NativeWikiPage.php:534
-msgid "Error reading wiki"
-msgstr "Det oppstod en feil ved lesing av wikien"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:411
-msgid "Page update failed."
-msgstr "Oppdatering av siden mislyktes."
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:447
-msgid "Nothing deleted"
-msgstr "Ingenting ble slettet"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:514
-msgid "Compare: object not found."
-msgstr "Sammanlign: fant ikke objektet."
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:521
-msgid "Page updated"
-msgstr "Siden ble oppdatert"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:529
-msgid "Wiki resource_id required for git commit"
-msgstr "Wiki ressurs_id er nødvendig for å lagre i git"
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:545 ../../addon/cards/cards.php:104
-#: ../../addon/articles/articles.php:105 ../../include/help.php:133
-#: ../../Zotlabs/Module/Display.php:149 ../../Zotlabs/Module/Page.php:136
-#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Web/Router.php:186
-msgid "Page not found."
-msgstr "Siden ikke funnet."
-
-#: ../../addon/wiki/Lib/NativeWikiPage.php:630 ../../include/bbcode.php:1061
-#: ../../include/bbcode.php:1246
+#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1312
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:630
msgid "Different viewers will see this text differently"
msgstr "Denne teksten vil se forskjellig ut for ulike besøkende"
-#: ../../addon/wiki/Mod_Wiki.php:36 ../../addon/cart/cart.php:1459
-#: ../../addon/flashcards/Mod_Flashcards.php:52
-msgid "Profile Unavailable."
-msgstr "Profilen er ikke tilgjengelig."
-
-#: ../../addon/wiki/Mod_Wiki.php:63 ../../addon/wiki/Mod_Wiki.php:288
-#: ../../addon/wiki/Mod_Wiki.php:425 ../../addon/openid/Mod_Id.php:53
-#: ../../addon/pumpio/pumpio.php:44 ../../addon/keepout/keepout.php:36
-#: ../../addon/cards/Mod_Card_edit.php:51 ../../addon/cards/Mod_Cards.php:89
-#: ../../addon/articles/Mod_Article_edit.php:51
-#: ../../addon/articles/Mod_Articles.php:94 ../../include/photos.php:30
-#: ../../include/items.php:3953 ../../include/attach.php:156
-#: ../../include/attach.php:205 ../../include/attach.php:278
-#: ../../include/attach.php:329 ../../include/attach.php:431
-#: ../../include/attach.php:445 ../../include/attach.php:452
-#: ../../include/attach.php:534 ../../include/attach.php:1106
-#: ../../include/attach.php:1179 ../../include/attach.php:1344
-#: ../../Zotlabs/Module/Attach_edit.php:90
-#: ../../Zotlabs/Module/Attach_edit.php:99
-#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Network.php:18
-#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Setup.php:218
-#: ../../Zotlabs/Module/Viewconnections.php:28
-#: ../../Zotlabs/Module/Viewconnections.php:33
-#: ../../Zotlabs/Module/Channel.php:222 ../../Zotlabs/Module/Channel.php:379
-#: ../../Zotlabs/Module/Channel.php:418 ../../Zotlabs/Module/Group.php:14
-#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Editwebpage.php:68
-#: ../../Zotlabs/Module/Editwebpage.php:89
-#: ../../Zotlabs/Module/Editwebpage.php:107
-#: ../../Zotlabs/Module/Editwebpage.php:121 ../../Zotlabs/Module/Chat.php:111
-#: ../../Zotlabs/Module/Chat.php:116
-#: ../../Zotlabs/Module/Channel_calendar.php:232
-#: ../../Zotlabs/Module/Like.php:248 ../../Zotlabs/Module/Poke.php:141
-#: ../../Zotlabs/Module/Item.php:513 ../../Zotlabs/Module/Item.php:532
-#: ../../Zotlabs/Module/Item.php:542 ../../Zotlabs/Module/Item.php:1443
-#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:99
-#: ../../Zotlabs/Module/Profile.php:114
-#: ../../Zotlabs/Module/Sharedwithme.php:19
-#: ../../Zotlabs/Module/Webpages.php:131
-#: ../../Zotlabs/Module/Filestorage.php:20
-#: ../../Zotlabs/Module/Filestorage.php:78
-#: ../../Zotlabs/Module/Filestorage.php:96
-#: ../../Zotlabs/Module/Filestorage.php:119
-#: ../../Zotlabs/Module/Filestorage.php:165
-#: ../../Zotlabs/Module/Editpost.php:17
-#: ../../Zotlabs/Module/Achievements.php:34 ../../Zotlabs/Module/Manage.php:10
-#: ../../Zotlabs/Module/Authtest.php:13 ../../Zotlabs/Module/Viewsrc.php:19
-#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Display.php:388
-#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/New_channel.php:105
-#: ../../Zotlabs/Module/New_channel.php:130
-#: ../../Zotlabs/Module/Service_limits.php:11 ../../Zotlabs/Module/Mood.php:126
-#: ../../Zotlabs/Module/Appman.php:153 ../../Zotlabs/Module/Api.php:24
-#: ../../Zotlabs/Module/Regmod.php:20 ../../Zotlabs/Module/Blocks.php:73
-#: ../../Zotlabs/Module/Blocks.php:80 ../../Zotlabs/Module/Vote.php:19
-#: ../../Zotlabs/Module/Profile_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:421
-#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Settings.php:59
-#: ../../Zotlabs/Module/Editlayout.php:67
-#: ../../Zotlabs/Module/Editlayout.php:90
-#: ../../Zotlabs/Module/Connections.php:32
-#: ../../Zotlabs/Module/Cover_photo.php:341
-#: ../../Zotlabs/Module/Cover_photo.php:354 ../../Zotlabs/Module/Photos.php:71
-#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133
-#: ../../Zotlabs/Module/Profiles.php:171 ../../Zotlabs/Module/Profiles.php:614
-#: ../../Zotlabs/Module/Bookmarks.php:70 ../../Zotlabs/Module/Invite.php:64
-#: ../../Zotlabs/Module/Invite.php:315 ../../Zotlabs/Module/Block.php:24
-#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Menu.php:130
-#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Defperms.php:181
-#: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302
-#: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Pdledit.php:35
-#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Connedit.php:299
-#: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78
-#: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Locs.php:98
-#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Lib/Chatroom.php:135
-#: ../../Zotlabs/Web/WebServer.php:119
-msgid "Permission denied."
-msgstr "Tillatelse avslått."
-
-#: ../../addon/wiki/Mod_Wiki.php:81 ../../addon/cart/manual_payments.php:93
-#: ../../addon/cart/submodules/paypalbutton.php:456
-#: ../../addon/cart/submodules/paypalbuttonV2.php:486
-#: ../../addon/cart/myshop.php:37 ../../addon/cart/cart.php:1610
-msgid "Invalid channel"
-msgstr "Ugyldig kanal"
-
-#: ../../addon/wiki/Mod_Wiki.php:136
-msgid "Error retrieving wiki"
-msgstr "Det oppstod en feil ved henting av wikien"
-
-#: ../../addon/wiki/Mod_Wiki.php:143
-msgid "Error creating zip file export folder"
-msgstr "Det oppstod en feil ved eksport av mappe til zip fil"
-
-#: ../../addon/wiki/Mod_Wiki.php:194
-msgid "Error downloading wiki: "
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:214 ../../addon/wiki/Mod_Wiki.php:381
-#: ../../addon/cards/Mod_Card_edit.php:99 ../../addon/cards/cards.php:74
-#: ../../addon/articles/Mod_Article_edit.php:97
-#: ../../addon/articles/articles.php:75 ../../include/menu.php:120
-#: ../../include/channel.php:1530 ../../include/channel.php:1534
-#: ../../Zotlabs/Widget/Cdav.php:144 ../../Zotlabs/Widget/Cdav.php:181
-#: ../../Zotlabs/Module/Group.php:245 ../../Zotlabs/Module/Oauth.php:171
-#: ../../Zotlabs/Module/Editwebpage.php:142
-#: ../../Zotlabs/Module/Webpages.php:250
-#: ../../Zotlabs/Module/Admin/Profs.php:175 ../../Zotlabs/Module/Blocks.php:158
-#: ../../Zotlabs/Module/Editblock.php:114
-#: ../../Zotlabs/Module/Editlayout.php:114
-#: ../../Zotlabs/Module/Connections.php:338
-#: ../../Zotlabs/Module/Connections.php:387
-#: ../../Zotlabs/Module/Connections.php:408 ../../Zotlabs/Module/Menu.php:176
-#: ../../Zotlabs/Module/Oauth2.php:192 ../../Zotlabs/Module/Thing.php:268
-#: ../../Zotlabs/Module/Layouts.php:191 ../../Zotlabs/Lib/Apps.php:601
-#: ../../Zotlabs/Lib/ThreadItem.php:158
-msgid "Edit"
-msgstr "Endre"
-
-#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407
-msgid "Download"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406
-#: ../../Zotlabs/Module/Pubsites.php:62 ../../Zotlabs/Module/Webpages.php:256
-#: ../../Zotlabs/Module/Blocks.php:164 ../../Zotlabs/Module/Layouts.php:196
-msgid "View"
-msgstr "Vis"
-
-#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137
-#: ../../Zotlabs/Module/Profiles.php:852
-msgid "Create New"
-msgstr "Opprett nytt"
-
-#: ../../addon/wiki/Mod_Wiki.php:219
-msgid "Wiki name"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:220
-msgid "Content type"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:381
-msgid "Type"
-msgstr "Type"
-
-#: ../../addon/wiki/Mod_Wiki.php:223
-msgid "Any&nbsp;type"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:230
-msgid "Lock content type"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:231
-msgid "Create a status post for this wiki"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:232
-msgid "Edit Wiki Name"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:277
-#, fuzzy
-msgid "Wiki not found"
-msgstr "Fant ikke wikien."
-
-#: ../../addon/wiki/Mod_Wiki.php:303
-msgid "Rename page"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:304 ../../addon/hsse/hsse.php:186
-#: ../../include/conversation.php:1452 ../../Zotlabs/Widget/Cdav.php:142
-#: ../../Zotlabs/Module/Webpages.php:251 ../../Zotlabs/Module/Blocks.php:159
-#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Module/Layouts.php:192
-msgid "Share"
-msgstr "Del"
-
-#: ../../addon/wiki/Mod_Wiki.php:318
-msgid "Error retrieving page content"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:326 ../../addon/wiki/Mod_Wiki.php:328
-msgid "New page"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:363
-msgid "Revision Comparison"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:365 ../../addon/wiki/Mod_Wiki.php:398
-#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
-#: ../../addon/cards/Mod_Card_edit.php:132
-#: ../../addon/articles/Mod_Article_edit.php:130
-#: ../../include/conversation.php:1475 ../../include/conversation.php:1530
-#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
-#: ../../Zotlabs/Module/Oauth.php:110 ../../Zotlabs/Module/Oauth.php:136
-#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Cdav.php:1049
-#: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Tagrm.php:15
-#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Editpost.php:114
-#: ../../Zotlabs/Module/Admin/Addons.php:430
-#: ../../Zotlabs/Module/Profile_photo.php:553
-#: ../../Zotlabs/Module/Editblock.php:141 ../../Zotlabs/Module/Filer.php:56
-#: ../../Zotlabs/Module/Editlayout.php:140
-#: ../../Zotlabs/Module/Cover_photo.php:428 ../../Zotlabs/Module/Oauth2.php:115
-#: ../../Zotlabs/Module/Oauth2.php:143 ../../Zotlabs/Module/Connedit.php:750
-#: ../../Zotlabs/Storage/Browser.php:386
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: ../../addon/wiki/Mod_Wiki.php:371
-msgid "Short description of your changes (optional)"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:381 ../../addon/wppost/wppost.php:174
-#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/dwpost/Mod_Dwpost.php:67
-#: ../../addon/dwpost/dwpost.php:134 ../../addon/ljpost/ljpost.php:134
-msgid "Source"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:391
-msgid "New page name"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:396
-msgid "Embed image from photo albums"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:397 ../../addon/hsse/hsse.php:208
-#: ../../include/conversation.php:1474
-msgid "Embed an image from your albums"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:399 ../../addon/hsse/hsse.php:210
-#: ../../addon/hsse/hsse.php:257 ../../include/conversation.php:1476
-#: ../../include/conversation.php:1529
-#: ../../Zotlabs/Module/Profile_photo.php:554
-#: ../../Zotlabs/Module/Cover_photo.php:429
-msgid "OK"
-msgstr "OK"
-
-#: ../../addon/wiki/Mod_Wiki.php:400 ../../addon/hsse/hsse.php:139
-#: ../../include/conversation.php:1395
-#: ../../Zotlabs/Module/Profile_photo.php:555
-#: ../../Zotlabs/Module/Cover_photo.php:430
-msgid "Choose images to embed"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:401 ../../addon/hsse/hsse.php:140
-#: ../../include/conversation.php:1396
-#: ../../Zotlabs/Module/Profile_photo.php:556
-#: ../../Zotlabs/Module/Cover_photo.php:431
-msgid "Choose an album"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Profile_photo.php:557
-#: ../../Zotlabs/Module/Cover_photo.php:432
-msgid "Choose a different album"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:403 ../../addon/hsse/hsse.php:142
-#: ../../include/conversation.php:1398
-#: ../../Zotlabs/Module/Profile_photo.php:558
-#: ../../Zotlabs/Module/Cover_photo.php:433
-msgid "Error getting album list"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:404 ../../addon/hsse/hsse.php:143
-#: ../../include/conversation.php:1399
-#: ../../Zotlabs/Module/Profile_photo.php:559
-#: ../../Zotlabs/Module/Cover_photo.php:434
-msgid "Error getting photo link"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:405 ../../addon/hsse/hsse.php:144
-#: ../../include/conversation.php:1400
-#: ../../Zotlabs/Module/Profile_photo.php:560
-#: ../../Zotlabs/Module/Cover_photo.php:435
-msgid "Error getting album"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:407
-msgid "History"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:485
-msgid "Error creating wiki. Invalid name."
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:492
-msgid "A wiki with this name already exists."
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:505
-msgid "Wiki created, but error creating Home page."
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:512
-msgid "Error creating wiki"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:536
-msgid "Error updating wiki. Invalid name."
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:555
-msgid "Error updating wiki"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:570
-msgid "Wiki delete permission denied."
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:580
-msgid "Error deleting wiki"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:613
-msgid "New page created"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:739
-msgid "Cannot delete Home"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:815
-msgid "Current Revision"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:815
-msgid "Selected Revision"
-msgstr ""
-
-#: ../../addon/wiki/Mod_Wiki.php:870
-msgid "You must be authenticated."
-msgstr ""
-
-#: ../../addon/openclipatar/openclipatar.php:51
-#: ../../addon/openclipatar/openclipatar.php:129
-msgid "System defaults:"
-msgstr ""
-
-#: ../../addon/openclipatar/openclipatar.php:55
-msgid "Preferred Clipart IDs"
-msgstr ""
-
-#: ../../addon/openclipatar/openclipatar.php:55
-msgid "List of preferred clipart ids. These will be shown first."
-msgstr ""
-
-#: ../../addon/openclipatar/openclipatar.php:56
-msgid "Default Search Term"
-msgstr "Standard søkeord"
-
-#: ../../addon/openclipatar/openclipatar.php:56
-msgid "The default search term. These will be shown second."
-msgstr "Standard søkeord. Disse vil vises som nummer to."
-
-#: ../../addon/openclipatar/openclipatar.php:57
-msgid "Return After"
-msgstr ""
-
-#: ../../addon/openclipatar/openclipatar.php:57
-msgid "Page to load after image selection."
-msgstr ""
-
-#: ../../addon/openclipatar/openclipatar.php:58 ../../include/nav.php:114
-#: ../../include/conversation.php:1096 ../../Zotlabs/Module/Connedit.php:480
-#: ../../Zotlabs/Lib/Apps.php:349
-msgid "View Profile"
-msgstr "Vis profil"
-
-#: ../../addon/openclipatar/openclipatar.php:59 ../../include/nav.php:119
-#: ../../include/channel.php:1534
-msgid "Edit Profile"
-msgstr "Endre profil"
-
-#: ../../addon/openclipatar/openclipatar.php:60
-msgid "Profile List"
-msgstr ""
-
-#: ../../addon/openclipatar/openclipatar.php:62
-msgid "Order of Preferred"
-msgstr ""
+#: ../../include/bbcode.php:1635
+msgid "$1 wrote:"
+msgstr "$1 skrev:"
-#: ../../addon/openclipatar/openclipatar.php:62
-msgid "Sort order of preferred clipart ids."
-msgstr ""
+#: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../Zotlabs/Module/Admin/Features.php:56
+#: ../../Zotlabs/Module/Settings/Features.php:38
+msgid "Off"
+msgstr "Av"
-#: ../../addon/openclipatar/openclipatar.php:63
-#: ../../addon/openclipatar/openclipatar.php:69
-msgid "Newest first"
-msgstr ""
+#: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../Zotlabs/Module/Admin/Features.php:56
+#: ../../Zotlabs/Module/Settings/Features.php:38
+msgid "On"
+msgstr "På"
-#: ../../addon/openclipatar/openclipatar.php:66
-msgid "As entered"
-msgstr ""
+#: ../../include/features.php:80 ../../include/nav.php:489
+#: ../../include/nav.php:492 ../../Zotlabs/Lib/Apps.php:352
+msgid "Calendar"
+msgstr "Kalender"
-#: ../../addon/openclipatar/openclipatar.php:68
-msgid "Order of other"
+#: ../../include/features.php:84
+msgid "Start calendar week on Monday"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:68
-msgid "Sort order of other clipart ids."
+#: ../../include/features.php:85
+msgid "Default is Sunday"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:70
-msgid "Most downloaded first"
+#: ../../include/features.php:92
+msgid "Event Timezone Selection"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:71
-msgid "Most liked first"
+#: ../../include/features.php:93
+msgid "Allow event creation in timezones other than your own."
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:73
-msgid "Preferred IDs Message"
-msgstr ""
+#: ../../include/features.php:102
+msgid "Channel Home"
+msgstr "Kanalhjem"
-#: ../../addon/openclipatar/openclipatar.php:73
-msgid "Message to display above preferred results."
-msgstr ""
+#: ../../include/features.php:106
+msgid "Search by Date"
+msgstr "Søk etter dato"
-#: ../../addon/openclipatar/openclipatar.php:79
-msgid "Uploaded by: "
-msgstr ""
+#: ../../include/features.php:107
+msgid "Ability to select posts by date ranges"
+msgstr "Mulighet for å velge innlegg etter datoområde"
-#: ../../addon/openclipatar/openclipatar.php:79
-msgid "Drawn by: "
-msgstr ""
+#: ../../include/features.php:114
+msgid "Tag Cloud"
+msgstr "Merkelappsky"
-#: ../../addon/openclipatar/openclipatar.php:183
-#: ../../addon/openclipatar/openclipatar.php:195
-msgid "Use this image"
-msgstr ""
+#: ../../include/features.php:115
+msgid "Provide a personal tag cloud on your channel page"
+msgstr "Tilby en personlig merkelappsky på din kanalside"
-#: ../../addon/openclipatar/openclipatar.php:193
-msgid "Or select from a free OpenClipart.org image:"
-msgstr ""
+#: ../../include/features.php:122 ../../include/features.php:356
+msgid "Use blog/list mode"
+msgstr "Bruk blogg/listemodus"
-#: ../../addon/openclipatar/openclipatar.php:196
-msgid "Search Term"
-msgstr "Søkeord"
+#: ../../include/features.php:123 ../../include/features.php:357
+msgid "Comments will be displayed separately"
+msgstr "Kommentarer blir vist separat fra innlegget"
-#: ../../addon/openclipatar/openclipatar.php:233
-msgid "Unknown error. Please try again later."
-msgstr ""
+#: ../../include/features.php:131 ../../include/text.php:1078
+#: ../../Zotlabs/Lib/Apps.php:339 ../../Zotlabs/Module/Connections.php:399
+msgid "Connections"
+msgstr "Forbindelser"
-#: ../../addon/openclipatar/openclipatar.php:299
-#: ../../Zotlabs/Module/Profile_photo.php:268
-msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
-msgstr ""
-"Hold nede Shift-knappen og last siden på nytt eller tøm nettleserens "
-"mellomlager hvis det nye bildet ikke vises umiddelbart."
+#: ../../include/features.php:135
+msgid "Connection Filtering"
+msgstr "Filtrer forbindelser"
-#: ../../addon/openclipatar/openclipatar.php:309
-msgid "Profile photo updated successfully."
+#: ../../include/features.php:136
+msgid "Filter incoming posts from connections based on keywords/content"
msgstr ""
+"Filtrer innkommende innlegg fra forbindelser basert på nøkkelord/innhold"
-#: ../../addon/bookmarker/bookmarker.php:38
-#: ../../Zotlabs/Lib/ThreadItem.php:474
-msgid "Save Bookmarks"
-msgstr "Lagre bokmerker"
-
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:22
-msgid "Rainbow Tag App"
+#: ../../include/features.php:144
+msgid "Conversation"
msgstr ""
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:23
-msgid "Add some colour to tag clouds"
+#: ../../include/features.php:156
+msgid "Emoji Reactions"
msgstr ""
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:30
-msgid "Rainbow Tag"
+#: ../../include/features.php:157
+msgid "Add emoji reaction ability to posts"
msgstr ""
-#: ../../addon/photocache/Mod_Photocache.php:27
-msgid "Photo Cache settings saved."
-msgstr ""
+#: ../../include/features.php:164
+msgid "Dislike Posts"
+msgstr "Mislik innlegg"
-#: ../../addon/photocache/Mod_Photocache.php:43
-msgid ""
-"Saves a copy of images from external sites locally to increase your "
-"anonymity in the web."
-msgstr ""
+#: ../../include/features.php:165
+msgid "Ability to dislike posts/comments"
+msgstr "Mulighet til å mislike innlegg/kommentarer"
-#: ../../addon/photocache/Mod_Photocache.php:49
-msgid "Minimal photo size for caching"
-msgstr ""
+#: ../../include/features.php:172
+msgid "Star Posts"
+msgstr "Stjerneinnlegg"
-#: ../../addon/photocache/Mod_Photocache.php:51
-msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
-msgstr ""
+#: ../../include/features.php:173
+msgid "Ability to mark special posts with a star indicator"
+msgstr "Mulighet til å merke spesielle innlegg med en stjerne"
-#: ../../addon/photocache/Mod_Photocache.php:60
-msgid "Photo Cache"
+#: ../../include/features.php:180
+msgid "Reply on comment"
msgstr ""
-#: ../../addon/gallery/gallery.php:43 ../../addon/gallery/Mod_Gallery.php:134
-msgid "Gallery"
+#: ../../include/features.php:181
+msgid "Ability to reply on selected comment"
msgstr ""
-#: ../../addon/gallery/gallery.php:46
-msgid "Photo Gallery"
-msgstr ""
+#: ../../include/features.php:190 ../../Zotlabs/Lib/Apps.php:353
+msgid "Directory"
+msgstr "Katalog"
-#: ../../addon/gallery/Mod_Gallery.php:49 ../../addon/cards/Mod_Cards.php:42
-#: ../../addon/articles/Mod_Articles.php:46 ../../include/channel.php:1427
-#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Editwebpage.php:32
-#: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Webpages.php:39
-#: ../../Zotlabs/Module/Filestorage.php:59 ../../Zotlabs/Module/Connect.php:17
-#: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Blocks.php:33
-#: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Editlayout.php:31
-#: ../../Zotlabs/Module/Menu.php:92 ../../Zotlabs/Module/Layouts.php:31
-msgid "Requested profile is not available."
-msgstr "Forespurt profil er ikke tilgjengelig."
+#: ../../include/features.php:194
+msgid "Advanced Directory Search"
+msgstr "Avansert katalogsøk"
-#: ../../addon/planets/Mod_Planets.php:23
-msgid "Random Planet App"
-msgstr ""
+#: ../../include/features.php:195
+msgid "Allows creation of complex directory search queries"
+msgstr "Gjør det mulig å bruke avanserte kriterier ved søk i katalogen"
-#: ../../addon/planets/Mod_Planets.php:25
-msgid ""
-"Set a random planet from the Star Wars Empire as your location when posting"
+#: ../../include/features.php:204
+msgid "Editor"
msgstr ""
-#: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:64
-#: ../../include/selectors.php:81 ../../include/channel.php:1720
-msgid "Male"
-msgstr "Mannlig"
-
-#: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:64
-#: ../../include/selectors.php:81 ../../include/channel.php:1718
-msgid "Female"
-msgstr "Kvinnelig"
-
-#: ../../addon/openid/Mod_Openid.php:32
-msgid "OpenID protocol error. No ID returned."
-msgstr "OpenID protokollfeil. Ingen ID ble returnert."
+#: ../../include/features.php:208
+msgid "Post Categories"
+msgstr "Innleggskategorier"
-#: ../../addon/openid/Mod_Openid.php:78 ../../addon/openid/Mod_Openid.php:179
-#, php-format
-msgid "Welcome %s. Remote authentication successful."
-msgstr "Velkommen %s. Ekstern autentisering er vellykket."
+#: ../../include/features.php:209
+msgid "Add categories to your posts"
+msgstr "Legg kategorier til dine innlegg"
-#: ../../addon/openid/Mod_Openid.php:189 ../../include/auth.php:334
-msgid "Login failed."
-msgstr "Innlogging mislyktes."
+#: ../../include/features.php:216
+msgid "Large Photos"
+msgstr "Store bilder"
-#: ../../addon/openid/openid.php:49
+#: ../../include/features.php:217
msgid ""
-"We encountered a problem while logging in with the OpenID you provided. "
-"Please check the correct spelling of the ID."
-msgstr ""
-"Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk "
-"at ID-en er stavet riktig."
-
-#: ../../addon/openid/openid.php:49
-msgid "The error message was:"
-msgstr "Feilmeldingen var:"
-
-#: ../../addon/openid/MysqlProvider.php:52
-msgid "First Name"
-msgstr "Fornavn"
-
-#: ../../addon/openid/MysqlProvider.php:53
-msgid "Last Name"
-msgstr "Etternavn"
-
-#: ../../addon/openid/MysqlProvider.php:54 ../../addon/redred/Mod_Redred.php:73
-#: ../../boot.php:1740
-msgid "Nickname"
-msgstr "Kallenavn"
-
-#: ../../addon/openid/MysqlProvider.php:55
-msgid "Full Name"
-msgstr "Fullt navn"
-
-#: ../../addon/openid/MysqlProvider.php:56
-#: ../../addon/openid/MysqlProvider.php:57 ../../addon/redred/Mod_Redred.php:69
-#: ../../addon/rtof/Mod_Rtof.php:55 ../../include/network.php:1773
-#: ../../Zotlabs/Module/Cdav.php:1368
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-#: ../../Zotlabs/Module/Admin/Accounts.php:330
-#: ../../Zotlabs/Module/Connedit.php:736
-msgid "Email"
-msgstr "E-post"
-
-#: ../../addon/openid/MysqlProvider.php:58
-#: ../../addon/openid/MysqlProvider.php:59
-#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:366
-msgid "Profile Photo"
-msgstr "Profilbilde"
-
-#: ../../addon/openid/MysqlProvider.php:61
-msgid "Profile Photo 16px"
-msgstr "Profilbilde 16px"
-
-#: ../../addon/openid/MysqlProvider.php:62
-msgid "Profile Photo 32px"
-msgstr "Profilbilde 32px"
-
-#: ../../addon/openid/MysqlProvider.php:63
-msgid "Profile Photo 48px"
-msgstr "Profilbilde 48px"
-
-#: ../../addon/openid/MysqlProvider.php:64
-msgid "Profile Photo 64px"
-msgstr "Profilbilde 64px"
-
-#: ../../addon/openid/MysqlProvider.php:65
-msgid "Profile Photo 80px"
-msgstr "Profilbilde 80px"
-
-#: ../../addon/openid/MysqlProvider.php:66
-msgid "Profile Photo 128px"
-msgstr "Profilbilde 128px"
-
-#: ../../addon/openid/MysqlProvider.php:67 ../../include/event.php:141
-msgid "Timezone"
-msgstr "Tidssone"
-
-#: ../../addon/openid/MysqlProvider.php:68
-#: ../../Zotlabs/Module/Profiles.php:783
-msgid "Homepage URL"
-msgstr "Hjemmeside URL"
-
-#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:364
-msgid "Language"
-msgstr "Språk"
-
-#: ../../addon/openid/MysqlProvider.php:70
-msgid "Birth Year"
-msgstr "Fødselsår"
-
-#: ../../addon/openid/MysqlProvider.php:71
-msgid "Birth Month"
-msgstr "Fødselsmåne"
-
-#: ../../addon/openid/MysqlProvider.php:72
-msgid "Birth Day"
-msgstr "Fødselsdag"
-
-#: ../../addon/openid/MysqlProvider.php:73
-msgid "Birthdate"
-msgstr "Fødselsdato"
-
-#: ../../addon/openid/MysqlProvider.php:74
-#: ../../Zotlabs/Module/Profiles.php:456
-msgid "Gender"
-msgstr "Kjønn"
-
-#: ../../addon/moremoods/moremoods.php:19
-#, fuzzy
-msgid "lonely"
-msgstr "Ensom"
-
-#: ../../addon/moremoods/moremoods.php:20
-msgid "drunk"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:21
-msgid "horny"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:22
-msgid "stoned"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:23
-msgid "fucked up"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:24
-msgid "clusterfucked"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:25
-msgid "crazy"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:26
-msgid "hurt"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:27
-msgid "sleepy"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:28
-msgid "grumpy"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:29
-msgid "high"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:30
-msgid "semi-conscious"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:31
-msgid "in love"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:32
-msgid "in lust"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:33
-msgid "naked"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:34
-msgid "stinky"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:35
-msgid "sweaty"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:36
-msgid "bleeding out"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:37
-msgid "victorious"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:38
-msgid "defeated"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:39
-msgid "envious"
-msgstr ""
-
-#: ../../addon/moremoods/moremoods.php:40
-msgid "jealous"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:94
-msgid "Hubzilla Directory Stats"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:95
-msgid "Total Hubs"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:97
-msgid "Hubzilla Hubs"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:99
-msgid "Friendica Hubs"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:101
-msgid "Diaspora Pods"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:103
-msgid "Hubzilla Channels"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:105
-msgid "Friendica Channels"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:107
-msgid "Diaspora Channels"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:109
-msgid "Aged 35 and above"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:111
-msgid "Aged 34 and under"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:113
-msgid "Average Age"
-msgstr ""
-
-#: ../../addon/dirstats/dirstats.php:115
-msgid "Known Chatrooms"
+"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
+"(640px) photo thumbnails"
msgstr ""
+"Inkluder store (1024px) småbilder i innlegg. Hvis denne ikke er påskrudd, "
+"bruk små (640px) småbilder"
-#: ../../addon/dirstats/dirstats.php:117
-msgid "Known Tags"
-msgstr ""
+#: ../../include/features.php:224
+msgid "Even More Encryption"
+msgstr "Enda mer kryptering"
-#: ../../addon/dirstats/dirstats.php:119
+#: ../../include/features.php:225
msgid ""
-"Please note Diaspora and Friendica statistics are merely those **this "
-"directory** is aware of, and not all those known in the network. This also "
-"applies to chatrooms,"
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:24
-msgid "Channel is required."
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:333
-#, fuzzy
-msgid "Invalid channel."
-msgstr "Ugyldig kanal"
-
-#: ../../addon/redred/Mod_Redred.php:38
-msgid "Hubzilla Crosspost Connector Settings saved."
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:61
-msgid "Send public postings to Hubzilla channel by default"
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:65
-msgid "Hubzilla API Path"
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:65 ../../addon/rtof/Mod_Rtof.php:51
-msgid "https://{sitename}/api"
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:69
-msgid "Hubzilla login name"
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:73
-msgid "Hubzilla channel name"
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:77
-msgid "Hubzilla password"
-msgstr ""
-
-#: ../../addon/redred/Mod_Redred.php:85
-msgid "Hubzilla Crosspost Connector"
-msgstr ""
-
-#: ../../addon/redred/redred.php:50
-msgid "Post to Hubzilla"
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:106
-msgid "Photos imported"
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:119
-#: ../../addon/redfiles/redfiles.php:109 ../../addon/hzfiles/hzfiles.php:75
-#: ../../include/items.php:447 ../../Zotlabs/Module/Import_items.php:116
-#: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Group.php:108
-#: ../../Zotlabs/Module/Like.php:348 ../../Zotlabs/Module/Share.php:72
-#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Dreport.php:10
-#: ../../Zotlabs/Module/Dreport.php:55 ../../Zotlabs/Web/WebServer.php:118
-msgid "Permission denied"
-msgstr "Tillatelse avvist"
-
-#: ../../addon/redphotos/redphotos.php:129
-msgid "Redmatrix Photo Album Import"
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:130
-msgid "This will import all your Redmatrix photo albums to this channel."
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:131
-#: ../../addon/redfiles/redfiles.php:121
-msgid "Redmatrix Server base URL"
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:132
-#: ../../addon/redfiles/redfiles.php:122
-msgid "Redmatrix Login Username"
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:133
-#: ../../addon/redfiles/redfiles.php:123
-msgid "Redmatrix Login Password"
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:134
-msgid "Import just this album"
-msgstr ""
-
-#: ../../addon/redphotos/redphotos.php:134
-msgid "Leave blank to import all albums"
+"Allow optional encryption of content end-to-end with a shared secret key"
msgstr ""
+"Tillat valgfri kryptering av innhold ende-til-ende via en delt hemmelig "
+"nøkkel"
-#: ../../addon/redphotos/redphotos.php:135
-msgid "Maximum count to import"
-msgstr ""
+#: ../../include/features.php:232
+msgid "Disable Comments"
+msgstr "Slå av kommentarer"
-#: ../../addon/redphotos/redphotos.php:135
-msgid "0 or blank to import all available"
-msgstr ""
+#: ../../include/features.php:233
+msgid "Provide the option to disable comments for a post"
+msgstr "Slår på valg for å ikke tillate kommentarer til innlegget"
-#: ../../addon/redphotos/redphotohelper.php:71 ../../addon/pubcrawl/as.php:1958
-#: ../../addon/diaspora/Receiver.php:1693 ../../include/text.php:2352
-#: ../../include/conversation.php:138 ../../Zotlabs/Module/Like.php:453
-#: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Subthread.php:115
-#: ../../Zotlabs/Lib/Activity.php:3690
-msgid "photo"
-msgstr "foto"
+#: ../../include/features.php:240
+msgid "Delayed Posting"
+msgstr "Tidfest publisering"
-#: ../../addon/statusnet/Mod_Statusnet.php:61
-msgid ""
-"Please contact your site administrator.<br />The provided API URL is not "
-"valid."
-msgstr ""
-"Den oppgitte URLen for APIet er ikke gyldig. Kontakt serverens administrator."
+#: ../../include/features.php:241
+msgid "Allow posts to be published at a later date"
+msgstr "Tillat innlegg å bli publisert på et senere tidspunkt"
-#: ../../addon/statusnet/Mod_Statusnet.php:98
-msgid "We could not contact the GNU social API with the Path you entered."
-msgstr ""
+#: ../../include/features.php:248
+msgid "Content Expiration"
+msgstr "Innholdet utløper"
-#: ../../addon/statusnet/Mod_Statusnet.php:130
-msgid "GNU social settings updated."
+#: ../../include/features.php:249
+msgid "Remove posts/comments and/or private messages at a future time"
msgstr ""
+"Fjern innlegg/kommentarer og/eller private meldinger på et angitt tidspunkt "
+"i fremtiden"
-#: ../../addon/statusnet/Mod_Statusnet.php:179
-msgid "Globally Available GNU social OAuthKeys"
-msgstr ""
+#: ../../include/features.php:256
+msgid "Suppress Duplicate Posts/Comments"
+msgstr "Forhindre duplikat av innlegg/kommentarer"
-#: ../../addon/statusnet/Mod_Statusnet.php:181
+#: ../../include/features.php:257
msgid ""
-"There are preconfigured OAuth key pairs for some GNU social servers "
-"available. If you are using one of them, please use these credentials.<br /"
-">If not feel free to connect to any other GNU social instance (see below)."
+"Prevent posts with identical content to be published with less than two "
+"minutes in between submissions."
msgstr ""
+"Forhindre innlegg med identisk innhold fra å bli publisert hvis det er "
+"mindre enn to minutter mellom innsendingene."
-#: ../../addon/statusnet/Mod_Statusnet.php:196
-msgid "Provide your own OAuth Credentials"
-msgstr ""
+#: ../../include/features.php:264
+msgid "Auto-save drafts of posts and comments"
+msgstr "Automatisk lagring av kladd for innlegg og kommentarer"
-#: ../../addon/statusnet/Mod_Statusnet.php:198
+#: ../../include/features.php:265
msgid ""
-"No consumer key pair for GNU social found. Register your Hubzilla Account as "
-"an desktop client on your GNU social account, copy the consumer key pair "
-"here and enter the API base root.<br />Before you register your own OAuth "
-"key pair ask the administrator if there is already a key pair for this "
-"Hubzilla installation at your favourite GNU social installation."
-msgstr ""
-
-#: ../../addon/statusnet/Mod_Statusnet.php:202
-msgid "OAuth Consumer Key"
+"Automatically saves post and comment drafts in local browser storage to help "
+"prevent accidental loss of compositions"
msgstr ""
+"Lagrer automatisk utkast til innlegg og kommentarer i nettleserens interne "
+"lager for å unngå å tape innholet ved et uhell"
-#: ../../addon/statusnet/Mod_Statusnet.php:206
-msgid "OAuth Consumer Secret"
+#: ../../include/features.php:274
+msgid "Manage"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:210
-msgid "Base API Path"
-msgstr ""
+#: ../../include/features.php:278
+msgid "Navigation Channel Select"
+msgstr "Navigasjon kanalvalg"
-#: ../../addon/statusnet/Mod_Statusnet.php:210
-msgid "Remember the trailing /"
-msgstr ""
+#: ../../include/features.php:279
+msgid "Change channels directly from within the navigation dropdown menu"
+msgstr "Endre kanaler direkte fra navigasjonsmenyen"
-#: ../../addon/statusnet/Mod_Statusnet.php:214
-msgid "GNU social application name"
-msgstr ""
+#: ../../include/features.php:288 ../../Zotlabs/Module/Connections.php:347
+#: ../../Zotlabs/Widget/Notifications.php:23
+msgid "Network"
+msgstr "Nettverk"
-#: ../../addon/statusnet/Mod_Statusnet.php:237
-msgid ""
-"To connect to your GNU social account click the button below to get a "
-"security code from GNU social which you have to copy into the input box "
-"below and submit the form. Only your <strong>public</strong> posts will be "
-"posted to GNU social."
-msgstr ""
+#: ../../include/features.php:292
+msgid "Events Filter"
+msgstr "Arrangementsfilter"
-#: ../../addon/statusnet/Mod_Statusnet.php:239
-msgid "Log in with GNU social"
-msgstr ""
+#: ../../include/features.php:293
+msgid "Ability to display only events"
+msgstr "Mulighet for kun å vise arrangementer"
-#: ../../addon/statusnet/Mod_Statusnet.php:242
-msgid "Copy the security code from GNU social here"
-msgstr ""
+#: ../../include/features.php:300
+msgid "Polls Filter"
+msgstr "Filer for Spørreskjema"
-#: ../../addon/statusnet/Mod_Statusnet.php:252
-msgid "Cancel Connection Process"
-msgstr ""
+#: ../../include/features.php:301
+msgid "Ability to display only polls"
+msgstr "Mulighet for å kun vise spørreskjema"
-#: ../../addon/statusnet/Mod_Statusnet.php:254
-msgid "Current GNU social API is"
-msgstr ""
+#: ../../include/features.php:308 ../../Zotlabs/Widget/Savedsearch.php:89
+msgid "Saved Searches"
+msgstr "Lagrede søk"
-#: ../../addon/statusnet/Mod_Statusnet.php:258
-msgid "Cancel GNU social Connection"
-msgstr ""
+#: ../../include/features.php:309
+msgid "Save search terms for re-use"
+msgstr "Lagre søkeuttrykk for senere bruk"
-#: ../../addon/statusnet/Mod_Statusnet.php:270
-#: ../../addon/twitter/Mod_Twitter.php:145
-msgid "Currently connected to: "
-msgstr ""
+#: ../../include/features.php:316 ../../include/contact_widgets.php:55
+#: ../../Zotlabs/Widget/Filer.php:33
+#: ../../Zotlabs/Widget/Activity_filter.php:196
+msgid "Saved Folders"
+msgstr "Lagrede mapper"
-#: ../../addon/statusnet/Mod_Statusnet.php:275
-msgid ""
-"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to GNU social will lead the visitor to a blank page "
-"informing the visitor that the access to your profile has been restricted."
-msgstr ""
+#: ../../include/features.php:317
+msgid "Ability to file posts under folders"
+msgstr "Mulighet til å sortere innlegg i mapper"
-#: ../../addon/statusnet/Mod_Statusnet.php:280
-msgid "Post to GNU social by default"
-msgstr ""
+#: ../../include/features.php:324
+msgid "Alternate Stream Order"
+msgstr "Alternativer for sortering"
-#: ../../addon/statusnet/Mod_Statusnet.php:280
+#: ../../include/features.php:325
msgid ""
-"If enabled your public postings will be posted to the associated GNU-social "
-"account by default"
-msgstr ""
-
-#: ../../addon/statusnet/Mod_Statusnet.php:289
-#: ../../addon/twitter/Mod_Twitter.php:169
-msgid "Clear OAuth configuration"
-msgstr ""
-
-#: ../../addon/statusnet/Mod_Statusnet.php:301
-msgid "GNU-Social Crosspost Connector"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:145
-msgid "Post to GNU social"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:593
-#: ../../Zotlabs/Module/Admin/Site.php:423
-msgid "Site name"
-msgstr "Nettstedets navn"
-
-#: ../../addon/statusnet/statusnet.php:594
-msgid "API URL"
-msgstr ""
-
-#: ../../addon/statusnet/statusnet.php:595 ../../addon/twitter/twitter.php:505
-#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
-msgid "Consumer Secret"
-msgstr "Consumer Secret"
-
-#: ../../addon/statusnet/statusnet.php:596 ../../addon/twitter/twitter.php:504
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
-msgid "Consumer Key"
-msgstr "Consumer Key"
-
-#: ../../addon/statusnet/statusnet.php:597
-msgid "Application name"
-msgstr ""
-
-#: ../../addon/rtof/Mod_Rtof.php:24
-msgid "Friendica Crosspost Connector Settings saved."
-msgstr ""
-
-#: ../../addon/rtof/Mod_Rtof.php:47
-msgid "Send public postings to Friendica by default"
-msgstr ""
-
-#: ../../addon/rtof/Mod_Rtof.php:51
-msgid "Friendica API Path"
-msgstr ""
-
-#: ../../addon/rtof/Mod_Rtof.php:55
-msgid "Friendica login name"
-msgstr ""
-
-#: ../../addon/rtof/Mod_Rtof.php:59
-msgid "Friendica password"
-msgstr ""
-
-#: ../../addon/rtof/Mod_Rtof.php:67
-msgid "Friendica Crosspost Connector"
-msgstr ""
-
-#: ../../addon/rtof/rtof.php:51
-msgid "Post to Friendica"
-msgstr ""
-
-#: ../../addon/wppost/wppost.php:47
-msgid "Post to WordPress"
-msgstr ""
-
-#: ../../addon/wppost/Mod_Wppost.php:30
-msgid "Wordpress Settings saved."
-msgstr ""
-
-#: ../../addon/wppost/Mod_Wppost.php:67
-msgid "WordPress username"
-msgstr ""
-
-#: ../../addon/wppost/Mod_Wppost.php:71
-msgid "WordPress password"
-msgstr ""
-
-#: ../../addon/wppost/Mod_Wppost.php:75
-msgid "WordPress API URL"
-msgstr ""
-
-#: ../../addon/wppost/Mod_Wppost.php:76
-msgid "Typically https://your-blog.tld/xmlrpc.php"
-msgstr ""
-
-#: ../../addon/wppost/Mod_Wppost.php:79
-msgid "WordPress blogid"
+"Ability to order the stream by last post date, last comment date or "
+"unthreaded activities"
msgstr ""
+"Mulighet for å sortere tidslinjen etter dato for siste innlegg, siste "
+"kommentar eller som separate aktiviteter"
-#: ../../addon/wppost/Mod_Wppost.php:80
-msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
-msgstr ""
+#: ../../include/features.php:332
+msgid "Contact Filter"
+msgstr "Kontaktfilter"
-#: ../../addon/wppost/Mod_Wppost.php:84
-msgid "Post to WordPress by default"
-msgstr ""
+#: ../../include/features.php:333
+msgid "Ability to display only posts of a selected contact"
+msgstr "Mulighet for å kun vise innlegg fra en bestemt kontakt"
-#: ../../addon/wppost/Mod_Wppost.php:88
-msgid "Forward comments (requires hubzilla_wp plugin)"
-msgstr ""
+#: ../../include/features.php:340
+msgid "Forum Filter"
+msgstr "Forumfilter"
-#: ../../addon/wppost/Mod_Wppost.php:92 ../../addon/dwpost/Mod_Dwpost.php:63
-#: ../../addon/ljpost/Mod_Ljpost.php:69
-msgid "Add link to original post"
-msgstr ""
+#: ../../include/features.php:341
+msgid "Ability to display only posts of a specific forum"
+msgstr "Mulighet for å kun vise innlegg i et bestemt forum"
-#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/dwpost/Mod_Dwpost.php:67
-msgid "Link description (default:"
-msgstr ""
+#: ../../include/features.php:348
+msgid "Personal Posts Filter"
+msgstr "Filter for personlige innlegg"
-#: ../../addon/wppost/Mod_Wppost.php:104
-msgid "Wordpress Post"
-msgstr ""
+#: ../../include/features.php:349
+msgid "Ability to display only posts that you've interacted on"
+msgstr "Mulighet til å vise kun innlegg du har deltatt på"
-#: ../../addon/content_import/Mod_content_import.php:27
-msgid "No server specified"
-msgstr ""
+#: ../../include/features.php:366 ../../include/nav.php:470
+#: ../../Zotlabs/Lib/Apps.php:351 ../../Zotlabs/Module/Fbrowser.php:29
+#: ../../Zotlabs/Widget/Channel_activities.php:93
+msgid "Photos"
+msgstr "Bilder"
-#: ../../addon/content_import/Mod_content_import.php:72
-msgid "Posts imported"
-msgstr ""
+#: ../../include/features.php:370
+msgid "Photo Location"
+msgstr "Bildeplassering"
-#: ../../addon/content_import/Mod_content_import.php:112
-msgid "Files imported"
+#: ../../include/features.php:371
+msgid "If location data is available on uploaded photos, link this to a map."
msgstr ""
+"Hvis plasseringsdata er tilgjengelige i opplastede bilder, plasser dette på "
+"et kart."
-#: ../../addon/content_import/Mod_content_import.php:133
-#: ../../Zotlabs/Lib/Apps.php:337
-msgid "Content Import"
+#: ../../include/features.php:378
+msgid "Flag Adult Photos"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:134
+#: ../../include/features.php:379
msgid ""
-"This will import all your conversations and cloud files from a cloned "
-"channel on another server. This may take a while if you have lots of posts "
-"and or files."
-msgstr ""
-
-#: ../../addon/content_import/Mod_content_import.php:135
-msgid "Include posts"
-msgstr ""
-
-#: ../../addon/content_import/Mod_content_import.php:135
-msgid "Conversations, Articles, Cards, and other posted content"
-msgstr ""
-
-#: ../../addon/content_import/Mod_content_import.php:136
-msgid "Include files"
-msgstr ""
-
-#: ../../addon/content_import/Mod_content_import.php:136
-msgid "Files, Photos and other cloud storage"
-msgstr ""
-
-#: ../../addon/content_import/Mod_content_import.php:137
-msgid "Original Server base URL"
-msgstr ""
-
-#: ../../addon/content_import/Mod_content_import.php:138
-#: ../../addon/hzfiles/hzfiles.php:84
-msgid "Since modified date yyyy-mm-dd"
-msgstr ""
-
-#: ../../addon/content_import/Mod_content_import.php:139
-#: ../../addon/hzfiles/hzfiles.php:85
-msgid "Until modified date yyyy-mm-dd"
-msgstr ""
-
-#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1340
-msgid "Set your location"
-msgstr "Angi din plassering"
-
-#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1341
-msgid "Clear browser location"
-msgstr "Fjern nettleserplassering"
-
-#: ../../addon/hsse/hsse.php:95 ../../addon/cards/Mod_Card_edit.php:101
-#: ../../addon/articles/Mod_Article_edit.php:99
-#: ../../include/conversation.php:1353 ../../Zotlabs/Module/Editwebpage.php:143
-#: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Module/Editblock.php:116
-msgid "Insert web link"
-msgstr "Sett inn web-lenke"
-
-#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1357
-msgid "Embed (existing) photo from your photo albums"
-msgstr "Sett inn (eksisterende) bilde fra fotoalbumene dine"
-
-#: ../../addon/hsse/hsse.php:134 ../../include/conversation.php:1390
-#: ../../Zotlabs/Module/Chat.php:217
-msgid "Please enter a link URL:"
-msgstr "Vennligst skriv inn en lenke URL:"
-
-#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1391
-msgid "Tag term:"
-msgstr "Merkelapp:"
-
-#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1392
-msgid "Where are you right now?"
-msgstr "Hvor er du akkurat nå?"
-
-#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1397
-msgid "Choose a different album..."
-msgstr ""
-
-#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1401
-msgid "Comments enabled"
-msgstr ""
-
-#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1402
-msgid "Comments disabled"
+"Provide photo edit option to hide inappropriate photos from default album "
+"view"
msgstr ""
-#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1419
-#: ../../Zotlabs/Module/Webpages.php:257 ../../Zotlabs/Module/Photos.php:1094
-#: ../../Zotlabs/Lib/ThreadItem.php:841
-msgid "Preview"
-msgstr "Forhåndsvisning"
-
-#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1461
-msgid "Page link name"
-msgstr "Sidens lenkenavn"
-
-#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1464
-msgid "Post as"
-msgstr "Lag innlegg som"
-
-#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1466
-#: ../../Zotlabs/Lib/ThreadItem.php:832
-msgid "Bold"
-msgstr "Uthevet"
-
-#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1467
-#: ../../Zotlabs/Lib/ThreadItem.php:833
-msgid "Italic"
-msgstr "Kursiv"
-
-#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1468
-#: ../../Zotlabs/Lib/ThreadItem.php:834
-msgid "Underline"
-msgstr "Understreket"
-
-#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1469
-#: ../../Zotlabs/Lib/ThreadItem.php:835
-msgid "Quote"
-msgstr "Sitat"
-
-#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1470
-#: ../../Zotlabs/Lib/ThreadItem.php:836
-msgid "Code"
-msgstr "Kode"
-
-#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1471
-#: ../../Zotlabs/Lib/ThreadItem.php:838
-msgid "Attach/Upload file"
-msgstr "Last opp fil/vedlegg"
-
-#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1478
-msgid "Toggle voting"
-msgstr "Skru av eller på stemming"
-
-#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1485
-msgid "Disable comments"
-msgstr "Slå av kommentarer"
-
-#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1486
-msgid "Toggle comments"
+#: ../../include/features.php:388 ../../Zotlabs/Lib/Apps.php:367
+#: ../../Zotlabs/Module/Contactedit.php:430
+msgid "Profiles"
msgstr ""
-#: ../../addon/hsse/hsse.php:221 ../../addon/cards/Mod_Card_edit.php:118
-#: ../../addon/articles/Mod_Article_edit.php:116
-#: ../../include/conversation.php:1492 ../../Zotlabs/Module/Editblock.php:129
-#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1039
-msgid "Title (optional)"
-msgstr "Tittel (valgfri)"
-
-#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1496
-msgid "Categories (optional, comma-separated list)"
-msgstr "Kategorier (valgfri, kommaseparert liste)"
-
-#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1497
-msgid "Permission settings"
-msgstr "Tillatelser - innstillinger"
-
-#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1519
-msgid "Other networks and post services"
-msgstr "Andre nettverk og innleggstjenester"
-
-#: ../../addon/hsse/hsse.php:250 ../../include/conversation.php:1522
-msgid "Set expiration date"
-msgstr "Angi utløpsdato"
-
-#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1525
-msgid "Set publish date"
-msgstr "Angi publiseringsdato"
+#: ../../include/features.php:392
+msgid "Advanced Profiles"
+msgstr "Avanserte profiler"
-#: ../../addon/hsse/hsse.php:255 ../../include/conversation.php:1527
-#: ../../Zotlabs/Module/Chat.php:218 ../../Zotlabs/Lib/ThreadItem.php:844
-msgid "Encrypt text"
-msgstr "Krypter tekst"
+#: ../../include/features.php:393
+msgid "Additional profile sections and selections"
+msgstr "Ytterlige seksjoner og utvalg til profilen"
-#: ../../addon/hsse/Mod_Hsse.php:15
-msgid "WYSIWYG status editor"
-msgstr ""
+#: ../../include/features.php:400
+msgid "Profile Import/Export"
+msgstr "Profil-import/-eksport"
-#: ../../addon/hsse/Mod_Hsse.php:24
-msgid "WYSIWYG Status App"
-msgstr ""
+#: ../../include/features.php:401
+msgid "Save and load profile details across sites/channels"
+msgstr "Lagre og åpne profildetaljer på tvers av nettsteder/kanaler"
-#: ../../addon/hsse/Mod_Hsse.php:32
-msgid "WYSIWYG Status"
-msgstr ""
+#: ../../include/features.php:408
+msgid "Multiple Profiles"
+msgstr "Flere profiler"
-#: ../../addon/openstreetmap/openstreetmap.php:133
-msgid "View Larger"
-msgstr ""
+#: ../../include/features.php:409
+msgid "Ability to create multiple profiles"
+msgstr "Mulig å lage flere profiler"
-#: ../../addon/openstreetmap/openstreetmap.php:156
-msgid "Tile Server URL"
-msgstr ""
+#: ../../include/bookmarks.php:34
+#, php-format
+msgid "%1$s's bookmarks"
+msgstr "%1$s sine bokmerker"
-#: ../../addon/openstreetmap/openstreetmap.php:156
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
-"target=\"_blank\">public tile servers</a>"
-msgstr ""
+#: ../../include/feedutils.php:851 ../../include/text.php:1580
+msgid "unknown"
+msgstr "ukjent"
-#: ../../addon/openstreetmap/openstreetmap.php:157
-msgid "Nominatim (reverse geocoding) Server URL"
-msgstr ""
+#: ../../include/attach.php:156 ../../include/attach.php:205
+#: ../../include/attach.php:278 ../../include/attach.php:329
+#: ../../include/attach.php:431 ../../include/attach.php:445
+#: ../../include/attach.php:452 ../../include/attach.php:534
+#: ../../include/attach.php:1106 ../../include/attach.php:1179
+#: ../../include/attach.php:1344 ../../include/photos.php:31
+#: ../../include/items.php:3928 ../../Zotlabs/Lib/Chatroom.php:135
+#: ../../Zotlabs/Web/WebServer.php:119 ../../Zotlabs/Module/Menu.php:130
+#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Editblock.php:67
+#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Channel.php:391
+#: ../../Zotlabs/Module/Channel.php:429
+#: ../../Zotlabs/Module/New_channel.php:106
+#: ../../Zotlabs/Module/New_channel.php:131 ../../Zotlabs/Module/Block.php:24
+#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Setup.php:220
+#: ../../Zotlabs/Module/Bookmarks.php:70 ../../Zotlabs/Module/Api.php:26
+#: ../../Zotlabs/Module/Channel_calendar.php:232
+#: ../../Zotlabs/Module/Editlayout.php:67
+#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Photos.php:71
+#: ../../Zotlabs/Module/Viewconnections.php:28
+#: ../../Zotlabs/Module/Viewconnections.php:33
+#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Common.php:38
+#: ../../Zotlabs/Module/Profiles.php:168 ../../Zotlabs/Module/Profiles.php:611
+#: ../../Zotlabs/Module/Network.php:18 ../../Zotlabs/Module/Authtest.php:13
+#: ../../Zotlabs/Module/Invite.php:65 ../../Zotlabs/Module/Invite.php:316
+#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Suggest.php:32
+#: ../../Zotlabs/Module/Group.php:15 ../../Zotlabs/Module/Group.php:31
+#: ../../Zotlabs/Module/Settings.php:59 ../../Zotlabs/Module/Layouts.php:71
+#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
+#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Cover_photo.php:299
+#: ../../Zotlabs/Module/Cover_photo.php:312 ../../Zotlabs/Module/Chat.php:111
+#: ../../Zotlabs/Module/Chat.php:116 ../../Zotlabs/Module/Achievements.php:34
+#: ../../Zotlabs/Module/Appman.php:163
+#: ../../Zotlabs/Module/Service_limits.php:11
+#: ../../Zotlabs/Module/Connedit.php:299
+#: ../../Zotlabs/Module/Editwebpage.php:68
+#: ../../Zotlabs/Module/Editwebpage.php:89
+#: ../../Zotlabs/Module/Editwebpage.php:107
+#: ../../Zotlabs/Module/Editwebpage.php:121
+#: ../../Zotlabs/Module/Register.php:201 ../../Zotlabs/Module/Thing.php:309
+#: ../../Zotlabs/Module/Thing.php:331 ../../Zotlabs/Module/Thing.php:372
+#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
+#: ../../Zotlabs/Module/Defperms.php:181 ../../Zotlabs/Module/Locs.php:98
+#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133
+#: ../../Zotlabs/Module/Vote.php:19 ../../Zotlabs/Module/Profile_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:421
+#: ../../Zotlabs/Module/Webpages.php:131
+#: ../../Zotlabs/Module/Connections.php:32
+#: ../../Zotlabs/Module/Filestorage.php:20
+#: ../../Zotlabs/Module/Filestorage.php:78
+#: ../../Zotlabs/Module/Filestorage.php:96
+#: ../../Zotlabs/Module/Filestorage.php:119
+#: ../../Zotlabs/Module/Filestorage.php:165 ../../Zotlabs/Module/Pdledit.php:35
+#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Regmod.php:20
+#: ../../Zotlabs/Module/Attach_edit.php:90
+#: ../../Zotlabs/Module/Attach_edit.php:99
+#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Item.php:512
+#: ../../Zotlabs/Module/Item.php:531 ../../Zotlabs/Module/Item.php:541
+#: ../../Zotlabs/Module/Item.php:1463 ../../Zotlabs/Module/Display.php:387
+#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Sharedwithme.php:19
+#: ../../Zotlabs/Module/Like.php:242 ../../Zotlabs/Module/Manage.php:10
+#: ../../Zotlabs/Module/Profile.php:99 ../../Zotlabs/Module/Profile.php:114
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:51
+#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:94
+#: ../../extend/addon/hzaddons/pumpio/pumpio.php:44
+#: ../../extend/addon/hzaddons/keepout/keepout.php:36
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:63
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:288
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:425
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:51
+#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:89
+#: ../../extend/addon/hzaddons/openid/Mod_Id.php:53
+msgid "Permission denied."
+msgstr "Tillatelse avslått."
-#: ../../addon/openstreetmap/openstreetmap.php:157
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
-"target=\"_blank\">Nominatim servers</a>"
-msgstr ""
+#: ../../include/attach.php:273 ../../include/attach.php:324
+#: ../../include/attach.php:426
+msgid "Item was not found."
+msgstr "Elementet ble ikke funnet."
-#: ../../addon/openstreetmap/openstreetmap.php:158
-msgid "Default zoom"
+#: ../../include/attach.php:290
+msgid "Unknown error."
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:158
-msgid ""
-"The default zoom level. (1:world, 18:highest, also depends on tile server)"
-msgstr ""
+#: ../../include/attach.php:621
+msgid "No source file."
+msgstr "Ingen kildefil."
-#: ../../addon/openstreetmap/openstreetmap.php:159
-msgid "Include marker on map"
-msgstr ""
+#: ../../include/attach.php:643
+msgid "Cannot locate file to replace"
+msgstr "Kan ikke finne filen som skal byttes ut"
-#: ../../addon/openstreetmap/openstreetmap.php:159
-msgid "Include a marker on the map."
-msgstr ""
+#: ../../include/attach.php:662
+msgid "Cannot locate file to revise/update"
+msgstr "Finner ikke filen som skal revideres/oppdateres"
-#: ../../addon/openstreetmap/openstreetmap.php:171
-#: ../../addon/rendezvous/rendezvous.php:82 ../../addon/twitter/twitter.php:493
-#: ../../addon/msgfooter/msgfooter.php:54 ../../addon/diaspora/diaspora.php:105
-#: ../../addon/piwik/piwik.php:116 ../../addon/logrot/logrot.php:54
-#: ../../addon/xmpp/xmpp.php:54 ../../Zotlabs/Module/Settings/Channel.php:150
-#: ../../Zotlabs/Module/Defperms.php:111
-msgid "Settings updated."
-msgstr "Innstillinger oppdatert."
+#: ../../include/attach.php:808
+#, php-format
+msgid "File exceeds size limit of %d"
+msgstr "Filens størrelse overgår grensen på %d"
-#: ../../addon/ijpost/Mod_Ijpost.php:23
-msgid "Insane Journal Crosspost Connector Settings saved."
-msgstr ""
+#: ../../include/attach.php:829
+#, php-format
+msgid "You have reached your limit of %1$.0f Mbytes attachment storage."
+msgstr "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes."
-#: ../../addon/ijpost/Mod_Ijpost.php:35
-msgid "Insane Journal Crosspost Connector App"
+#: ../../include/attach.php:1019
+msgid "File upload failed. Possible system limit or action terminated."
msgstr ""
+"Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt."
-#: ../../addon/ijpost/Mod_Ijpost.php:35 ../../addon/xmpp/Mod_Xmpp.php:35
-#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:69
-msgid "Not Installed"
-msgstr ""
+#: ../../include/attach.php:1048
+msgid "Stored file could not be verified. Upload failed."
+msgstr "Lagret fil kunne ikke bekreftes. Opplasting mislyktes."
-#: ../../addon/ijpost/Mod_Ijpost.php:36
-msgid "Relay public postings to Insane Journal"
-msgstr ""
+#: ../../include/attach.php:1120 ../../include/attach.php:1136
+msgid "Path not available."
+msgstr "Stien er ikke tilgjengelig."
-#: ../../addon/ijpost/Mod_Ijpost.php:53
-msgid "InsaneJournal username"
-msgstr ""
+#: ../../include/attach.php:1184 ../../include/attach.php:1349
+msgid "Empty pathname"
+msgstr "Tomt sti-navn"
-#: ../../addon/ijpost/Mod_Ijpost.php:57
-msgid "InsaneJournal password"
-msgstr ""
+#: ../../include/attach.php:1210
+msgid "duplicate filename or path"
+msgstr "duplikat av filnavn eller sti"
-#: ../../addon/ijpost/Mod_Ijpost.php:61
-msgid "Post to InsaneJournal by default"
-msgstr ""
+#: ../../include/attach.php:1238
+msgid "Path not found."
+msgstr "Stien ble ikke funnet."
-#: ../../addon/ijpost/Mod_Ijpost.php:69
-msgid "Insane Journal Crosspost Connector"
-msgstr ""
+#: ../../include/attach.php:1305
+msgid "mkdir failed."
+msgstr "mkdir mislyktes."
-#: ../../addon/ijpost/ijpost.php:44
-msgid "Post to Insane Journal"
-msgstr ""
+#: ../../include/attach.php:1309
+msgid "database storage failed."
+msgstr "databaselagring mislyktes."
-#: ../../addon/totp_bak/Mod_Totp.php:32
-msgid "TOTP Two-Step Verification"
-msgstr ""
+#: ../../include/attach.php:1355
+msgid "Empty path"
+msgstr "Tom sti"
-#: ../../addon/totp_bak/Mod_Totp.php:33
-msgid "Enter the 2-step verification generated by your authenticator app:"
-msgstr ""
+#: ../../include/attach.php:1984
+#, fuzzy, php-format
+#| msgid "Files: shared with me"
+msgid "%s shared an %s with you"
+msgstr "Filer: delt med meg"
-#: ../../addon/totp_bak/Mod_Totp.php:34
-msgid "Success!"
+#: ../../include/attach.php:1984
+#, php-format
+msgid "%s shared a %s with you"
msgstr ""
-#: ../../addon/totp_bak/Mod_Totp.php:35
-msgid "Invalid code, please try again."
-msgstr ""
+#: ../../include/attach.php:1984 ../../Zotlabs/Module/Like.php:447
+#, fuzzy
+#| msgid "Image"
+msgid "image"
+msgstr "Bilde"
-#: ../../addon/totp_bak/Mod_Totp.php:36
-msgid "Too many invalid codes..."
+#: ../../include/attach.php:1984
+#: ../../extend/addon/hzaddons/redfiles/redfilehelper.php:64
+msgid "file"
msgstr ""
-#: ../../addon/totp_bak/Mod_Totp.php:37 ../../Zotlabs/Module/Totp_check.php:81
-msgid "Verify"
+#: ../../include/network.php:413
+msgid "url: "
msgstr ""
-#: ../../addon/totp_bak/Settings/Totp.php:92
-msgid ""
-"You haven't set a TOTP secret yet.\n"
-"Please click the button below to generate one and register this site\n"
-"with your preferred authenticator app."
+#: ../../include/network.php:414
+msgid "error_code: "
msgstr ""
-#: ../../addon/totp_bak/Settings/Totp.php:95
-msgid "Your TOTP secret is"
+#: ../../include/network.php:415
+msgid "error_string: "
msgstr ""
-#: ../../addon/totp_bak/Settings/Totp.php:96
-msgid ""
-"Be sure to save it somewhere in case you lose or replace your mobile "
-"device.\n"
-"Use your mobile device to scan the QR code below to register this site\n"
-"with your preferred authenticator app."
+#: ../../include/network.php:416
+msgid "content-type: "
msgstr ""
-#: ../../addon/totp_bak/Settings/Totp.php:101
-#: ../../Zotlabs/Module/Settings/Multifactor.php:86
-msgid "Test"
-msgstr "Sjekk koden"
+#: ../../include/network.php:1774 ../../include/network.php:1775
+msgid "Friendica"
+msgstr "Friendica"
-#: ../../addon/totp_bak/Settings/Totp.php:102
-msgid "Generate New Secret"
-msgstr ""
+#: ../../include/network.php:1776
+msgid "OStatus"
+msgstr "OStatus"
-#: ../../addon/totp_bak/Settings/Totp.php:103
-msgid "Go"
+#: ../../include/network.php:1777
+msgid "GNU-Social"
msgstr ""
-#: ../../addon/totp_bak/Settings/Totp.php:104
-msgid "Enter your password"
-msgstr ""
+#: ../../include/network.php:1778
+msgid "RSS/Atom"
+msgstr "RSS/Atom"
-#: ../../addon/totp_bak/Settings/Totp.php:105
-msgid "enter TOTP code from your device"
+#: ../../include/network.php:1779
+msgid "ActivityPub"
msgstr ""
-#: ../../addon/totp_bak/Settings/Totp.php:106
-msgid "Pass!"
-msgstr ""
+#: ../../include/network.php:1780 ../../Zotlabs/Module/Connedit.php:736
+#: ../../Zotlabs/Module/Admin/Accounts.php:316
+#: ../../Zotlabs/Module/Admin/Accounts.php:330
+#: ../../Zotlabs/Module/Cdav.php:1372
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:55
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:69
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:56
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:57
+msgid "Email"
+msgstr "E-post"
-#: ../../addon/totp_bak/Settings/Totp.php:107
-msgid "Fail"
-msgstr ""
+#: ../../include/network.php:1781
+msgid "Diaspora"
+msgstr "Diaspora"
-#: ../../addon/totp_bak/Settings/Totp.php:108
-msgid "Incorrect password, try again."
-msgstr ""
+#: ../../include/network.php:1782
+msgid "Facebook"
+msgstr "Facebook"
-#: ../../addon/totp_bak/Settings/Totp.php:109
-msgid "Record your new TOTP secret and rescan the QR code above."
-msgstr ""
+#: ../../include/network.php:1783
+msgid "Zot"
+msgstr "Zot"
-#: ../../addon/totp_bak/Settings/Totp.php:117
-msgid "TOTP Settings"
-msgstr ""
+#: ../../include/network.php:1784
+msgid "LinkedIn"
+msgstr "LinkedIn"
-#: ../../addon/wholikesme/wholikesme.php:29
-msgid "Who likes me?"
-msgstr ""
+#: ../../include/network.php:1785
+msgid "XMPP/IM"
+msgstr "XMPP/IM"
-#: ../../addon/qrator/qrator.php:48
-msgid "QR code"
-msgstr ""
+#: ../../include/network.php:1786
+msgid "MySpace"
+msgstr "MySpace"
-#: ../../addon/qrator/qrator.php:63
-msgid "QR Generator"
+#: ../../include/auth.php:232
+msgid "Delegation session ended."
msgstr ""
-#: ../../addon/qrator/qrator.php:64
-msgid "Enter some text"
-msgstr ""
+#: ../../include/auth.php:236
+msgid "Logged out."
+msgstr "Logget ut."
-#: ../../addon/pubcrawl/as.php:1332 ../../addon/pubcrawl/as.php:2002
-#: ../../include/network.php:1772 ../../Zotlabs/Lib/Activity.php:3732
-msgid "ActivityPub"
+#: ../../include/auth.php:342
+msgid "Email validation is incomplete. Please check your email."
msgstr ""
-#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1693
-#: ../../Zotlabs/Module/Like.php:453 ../../Zotlabs/Module/Subthread.php:115
-msgid "status"
-msgstr "status"
+#: ../../include/auth.php:358
+msgid "Failed authentication"
+msgstr "Mislykket autentisering"
-#: ../../addon/pubcrawl/as.php:1993 ../../addon/diaspora/Receiver.php:1628
-#: ../../include/conversation.php:184 ../../Zotlabs/Module/Like.php:485
-#: ../../Zotlabs/Lib/Activity.php:3723
-#, php-format
-msgid "%1$s likes %2$s's %3$s"
-msgstr "%1$s liker %2$s sin %3$s"
+#: ../../include/auth.php:368
+#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:189
+msgid "Login failed."
+msgstr "Innlogging mislyktes."
-#: ../../addon/pubcrawl/as.php:1995 ../../include/conversation.php:187
-#: ../../Zotlabs/Module/Like.php:487 ../../Zotlabs/Lib/Activity.php:3725
+#: ../../include/opengraph.php:56
#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
-msgstr "%1$s liker ikke %2$s sin %3$s"
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:25
-msgid "ActivityPub Protocol Settings updated."
-msgstr ""
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:41
-msgid ""
-"The activitypub protocol does not support location independence. Connections "
-"you make within that network may be unreachable from alternate channel "
-"locations."
-msgstr ""
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid "Deliver to ActivityPub recipients in privacy groups"
-msgstr ""
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid ""
-"May result in a large number of mentions and expose all the members of your "
-"privacy group"
-msgstr ""
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Send multi-media HTML articles"
-msgstr ""
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Not supported by some microblog services such as Mastodon"
-msgstr ""
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:59
-msgid "Activitypub Protocol"
-msgstr ""
-
-#: ../../addon/fediwordle/fediwordle.php:211
-msgid "ERROR: word length is not correct!"
-msgstr ""
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:22
-msgid "Fediwordle App"
+msgid "This is the home page of %s."
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:23
-msgid "A distributed word game inspired by wordle."
-msgstr ""
+#: ../../include/nav.php:109
+msgid "Remote authentication"
+msgstr "Fjernautentisering"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:24
-msgid ""
-"To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel "
-"post."
-msgstr ""
+#: ../../include/nav.php:109
+msgid "Click to authenticate to your home hub"
+msgstr "Klikk for å godkjennes mot din hjemme-hub"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:25
-msgid "Your contacts can post their guess in the comments."
-msgstr ""
+#: ../../include/nav.php:115 ../../Zotlabs/Module/Admin/Channels.php:168
+#: ../../Zotlabs/Module/Admin.php:118 ../../Zotlabs/Module/Manage.php:162
+#: ../../Zotlabs/Widget/Channel_activities.php:239
+#: ../../Zotlabs/Widget/Admin.php:29
+msgid "Channels"
+msgstr "Kanaler"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:26
-msgid ""
-"Your channel will evaluate the guess and automatically post the response."
-msgstr ""
+#: ../../include/nav.php:115
+msgid "Manage your channels"
+msgstr "Behandle kanalene dine"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:28
-msgid "Correct letters"
-msgstr ""
+#: ../../include/nav.php:118 ../../Zotlabs/Lib/Apps.php:345
+#: ../../Zotlabs/Module/Admin/Addons.php:349
+#: ../../Zotlabs/Module/Admin/Themes.php:141
+#: ../../Zotlabs/Widget/Settings_menu.php:71
+#: ../../Zotlabs/Widget/Newmember.php:60
+msgid "Settings"
+msgstr "Innstillinger"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:29
-msgid "Letters contained in the word but at the wrong spot"
-msgstr ""
+#: ../../include/nav.php:118
+msgid "Account/Channel Settings"
+msgstr "Konto-/kanalinnstillinger"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:30
-msgid "Letters not contained in the word"
-msgstr ""
+#: ../../include/nav.php:124 ../../include/nav.php:154
+#: ../../include/nav.php:175 ../../boot.php:1759
+msgid "Logout"
+msgstr "Logg ut"
-#: ../../addon/ldapauth/ldapauth.php:101
-msgid "An account has been created for you."
-msgstr ""
+#: ../../include/nav.php:124 ../../include/nav.php:154
+msgid "End this session"
+msgstr "Avslutt denne økten"
-#: ../../addon/ldapauth/ldapauth.php:108
-msgid "Authentication successful but rejected: account creation is disabled."
-msgstr ""
+#: ../../include/nav.php:127 ../../include/conversation.php:902
+#: ../../Zotlabs/Lib/Apps.php:350 ../../Zotlabs/Module/Connedit.php:480
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:58
+msgid "View Profile"
+msgstr "Vis profil"
-#: ../../addon/dwpost/Mod_Dwpost.php:26
-msgid "Dreamwidth Crosspost Connector Settings saved."
-msgstr ""
+#: ../../include/nav.php:127
+msgid "Your profile page"
+msgstr "Din profilside"
-#: ../../addon/dwpost/Mod_Dwpost.php:51
-msgid "Dreamwidth username"
-msgstr ""
+#: ../../include/nav.php:130 ../../include/channel.php:1539
+#: ../../Zotlabs/Module/Profiles.php:851
+msgid "Edit Profiles"
+msgstr "Rediger profiler"
-#: ../../addon/dwpost/Mod_Dwpost.php:55
-msgid "Dreamwidth password"
-msgstr ""
+#: ../../include/nav.php:130
+msgid "Manage/Edit profiles"
+msgstr "Håndter/endre profiler"
-#: ../../addon/dwpost/Mod_Dwpost.php:59
-msgid "Post to Dreamwidth by default"
-msgstr ""
+#: ../../include/nav.php:132 ../../include/channel.php:1543
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:59
+msgid "Edit Profile"
+msgstr "Rediger profil"
-#: ../../addon/dwpost/Mod_Dwpost.php:75
-msgid "Dreamwidth Crosspost Connector"
-msgstr ""
+#: ../../include/nav.php:132 ../../Zotlabs/Widget/Newmember.php:42
+msgid "Edit your profile"
+msgstr "Rediger profil"
-#: ../../addon/dwpost/dwpost.php:49
-msgid "Post to Dreamwidth"
-msgstr ""
+#: ../../include/nav.php:139 ../../include/nav.php:143 ../../boot.php:1760
+#: ../../Zotlabs/Lib/Apps.php:342
+msgid "Login"
+msgstr "Logg inn"
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslap"
-msgstr ""
+#: ../../include/nav.php:139 ../../include/nav.php:143
+msgid "Sign in"
+msgstr "Logg på"
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslapped"
+#: ../../include/nav.php:173
+msgid "Take me home"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shag"
+#: ../../include/nav.php:175
+msgid "Log me out of this site"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shagged"
-msgstr ""
+#: ../../include/nav.php:180 ../../boot.php:1737
+#: ../../Zotlabs/Module/Register.php:543
+msgid "Register"
+msgstr "Registrer"
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patent"
-msgstr ""
+#: ../../include/nav.php:180
+msgid "Create an account"
+msgstr "Lag en konto"
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patented"
-msgstr ""
+#: ../../include/nav.php:194 ../../include/nav.php:341
+#: ../../Zotlabs/Lib/Apps.php:354 ../../Zotlabs/Module/Layouts.php:184
+msgid "Help"
+msgstr "Hjelp"
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hug"
-msgstr ""
+#: ../../include/nav.php:194
+msgid "Help and documentation"
+msgstr "Hjelp og dokumentasjon"
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hugged"
-msgstr ""
+#: ../../include/nav.php:208 ../../include/text.php:1190
+#: ../../include/text.php:1202 ../../include/acl_selectors.php:149
+#: ../../Zotlabs/Lib/Apps.php:357 ../../Zotlabs/Module/Connections.php:403
+#: ../../Zotlabs/Module/Search.php:47 ../../Zotlabs/Widget/Sitesearch.php:37
+#: ../../Zotlabs/Widget/Activity_filter.php:210
+msgid "Search"
+msgstr "Søk"
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murder"
-msgstr ""
+#: ../../include/nav.php:208
+msgid "Search site @name, !forum, #tag, ?docs, content"
+msgstr "Søk etter @navn, !forum, #emne, ?dokumentasjon eller innhold"
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murdered"
-msgstr ""
+#: ../../include/nav.php:214 ../../Zotlabs/Widget/Admin.php:61
+msgid "Admin"
+msgstr "Administrator"
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worship"
-msgstr ""
+#: ../../include/nav.php:214
+msgid "Site Setup and Configuration"
+msgstr "Nettstedsoppsett og -konfigurasjon"
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worshipped"
-msgstr ""
+#: ../../include/nav.php:345 ../../Zotlabs/Module/New_channel.php:158
+#: ../../Zotlabs/Module/New_channel.php:165
+#: ../../Zotlabs/Module/Defperms.php:254 ../../Zotlabs/Widget/Messages.php:36
+#: ../../Zotlabs/Widget/Notifications.php:175
+#, fuzzy
+msgid "Loading"
+msgstr "Laster..."
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kiss"
-msgstr ""
+#: ../../include/nav.php:350
+msgid "@name, #tag, ?doc, content"
+msgstr "@navn, #merkelapp, ?dokumentasjon, innhold"
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kissed"
-msgstr ""
+#: ../../include/nav.php:351
+msgid "Please wait..."
+msgstr "Vennligst vent..."
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempt"
-msgstr ""
+#: ../../include/nav.php:357 ../../Zotlabs/Lib/Apps.php:329
+msgid "Apps"
+msgstr "Apper"
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempted"
+#: ../../include/nav.php:358
+msgid "Channel Apps"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raise eyebrows at"
+#: ../../include/nav.php:359
+msgid "System Apps"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raised their eyebrows at"
+#: ../../include/nav.php:360
+msgid "Pinned Apps"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insult"
-msgstr ""
+#: ../../include/nav.php:361
+msgid "Featured Apps"
+msgstr "Fremhevede apper"
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insulted"
-msgstr ""
+#: ../../include/nav.php:447 ../../Zotlabs/Lib/Apps.php:349
+#: ../../Zotlabs/Module/Admin/Channels.php:176
+msgid "Channel"
+msgstr "Kanal"
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praise"
-msgstr ""
+#: ../../include/nav.php:450
+msgid "Status Messages and Posts"
+msgstr "Statusmeldinger og -innlegg"
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praised"
-msgstr ""
+#: ../../include/nav.php:460 ../../Zotlabs/Module/Help.php:239
+msgid "About"
+msgstr "Om"
-#: ../../addon/morepokes/morepokes.php:30
-msgid "be dubious of"
-msgstr ""
+#: ../../include/nav.php:463
+msgid "Profile Details"
+msgstr "Profildetaljer"
-#: ../../addon/morepokes/morepokes.php:30
-msgid "was dubious of"
-msgstr ""
+#: ../../include/nav.php:473 ../../include/photos.php:722
+msgid "Photo Albums"
+msgstr "Fotoalbum"
-#: ../../addon/morepokes/morepokes.php:31
-msgid "eat"
-msgstr ""
+#: ../../include/nav.php:478 ../../Zotlabs/Lib/Apps.php:346
+#: ../../Zotlabs/Storage/Browser.php:351 ../../Zotlabs/Module/Fbrowser.php:85
+#: ../../Zotlabs/Widget/Channel_activities.php:125
+#: ../../Zotlabs/Widget/Notifications.php:108
+msgid "Files"
+msgstr "Filer"
-#: ../../addon/morepokes/morepokes.php:31
-msgid "ate"
-msgstr ""
+#: ../../include/nav.php:481
+msgid "Files and Storage"
+msgstr "Filer og lagring"
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggle and fawn at"
-msgstr ""
+#: ../../include/nav.php:503 ../../include/nav.php:506
+#: ../../Zotlabs/Lib/Apps.php:336 ../../Zotlabs/Widget/Chatroom_list.php:22
+msgid "Chatrooms"
+msgstr "Chatrom"
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggled and fawned at"
-msgstr ""
+#: ../../include/nav.php:516 ../../Zotlabs/Lib/Apps.php:335
+#: ../../Zotlabs/Module/Bookmarks.php:90
+msgid "Bookmarks"
+msgstr "Bokmerker"
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubt"
-msgstr ""
+#: ../../include/nav.php:519
+msgid "Saved Bookmarks"
+msgstr "Lagrede bokmerker"
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubted"
-msgstr ""
+#: ../../include/nav.php:527 ../../Zotlabs/Lib/Apps.php:347
+#: ../../Zotlabs/Module/Webpages.php:247
+#: ../../Zotlabs/Widget/Channel_activities.php:168
+msgid "Webpages"
+msgstr "Websider"
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glare"
+#: ../../include/nav.php:530
+msgid "View Webpages"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glared at"
-msgstr ""
+#: ../../include/event.php:35 ../../include/event.php:133
+msgid "l F d, Y \\@ g:i A"
+msgstr "l F d, Y \\@ g:i A"
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fuck"
-msgstr ""
+#: ../../include/event.php:43
+msgid "Starts:"
+msgstr "Starter:"
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fucked"
-msgstr ""
+#: ../../include/event.php:53
+msgid "Finishes:"
+msgstr "Slutter:"
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonk"
-msgstr ""
+#: ../../include/event.php:67 ../../include/event.php:158
+#: ../../include/channel.php:1640 ../../Zotlabs/Module/Directory.php:354
+msgid "Location:"
+msgstr "Plassering:"
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonked"
+#: ../../include/event.php:133
+msgid "l F d, Y"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declare undying love for"
+#: ../../include/event.php:137
+msgid "Start:"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declared undying love for"
+#: ../../include/event.php:141
+msgid "End:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:57
-msgid "Errors encountered deleting database table "
-msgstr ""
+#: ../../include/event.php:146
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:67
+msgid "Timezone"
+msgstr "Tidssone"
-#: ../../addon/rendezvous/rendezvous.php:95 ../../addon/twitter/twitter.php:502
-msgid "Submit Settings"
-msgstr ""
+#: ../../include/event.php:1246
+msgid "This event has been added to your calendar."
+msgstr "Denne hendelsen er lagt til i din kalender."
-#: ../../addon/rendezvous/rendezvous.php:96
-msgid "Drop tables when uninstalling?"
-msgstr ""
+#: ../../include/event.php:1400 ../../include/conversation.php:153
+#: ../../include/text.php:2361 ../../Zotlabs/Module/Channel_calendar.php:221
+#: ../../Zotlabs/Module/Tagger.php:75 ../../Zotlabs/Module/Like.php:450
+msgid "event"
+msgstr "hendelse"
-#: ../../addon/rendezvous/rendezvous.php:96
-msgid ""
-"If checked, the Rendezvous database tables will be deleted when the plugin "
-"is uninstalled."
-msgstr ""
+#: ../../include/event.php:1479
+msgid "Not specified"
+msgstr "Ikke spesifisert"
-#: ../../addon/rendezvous/rendezvous.php:97
-msgid "Mapbox Access Token"
-msgstr ""
+#: ../../include/event.php:1480
+msgid "Needs Action"
+msgstr "Trenger handling"
-#: ../../addon/rendezvous/rendezvous.php:97
-msgid ""
-"If you enter a Mapbox access token, it will be used to retrieve map tiles "
-"from Mapbox instead of the default OpenStreetMap tile server."
-msgstr ""
+#: ../../include/event.php:1481
+msgid "Completed"
+msgstr "Ferdig"
-#: ../../addon/rendezvous/rendezvous.php:162
-msgid "Rendezvous"
-msgstr ""
+#: ../../include/event.php:1482
+msgid "In Process"
+msgstr "Igang"
-#: ../../addon/rendezvous/rendezvous.php:167
-msgid ""
-"This identity has been deleted by another member due to inactivity. Please "
-"press the \"New identity\" button or refresh the page to register a new "
-"identity. You may use the same name."
-msgstr ""
+#: ../../include/event.php:1483
+msgid "Cancelled"
+msgstr "Avbrutt"
-#: ../../addon/rendezvous/rendezvous.php:168
-msgid "Welcome to Rendezvous!"
-msgstr ""
+#: ../../include/event.php:1564 ../../include/connections.php:790
+#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377
+#, fuzzy
+msgid "Mobile"
+msgstr "mobil"
-#: ../../addon/rendezvous/rendezvous.php:169
-msgid ""
-"Enter your name to join this rendezvous. To begin sharing your location with "
-"the other members, tap the GPS control. When your location is discovered, a "
-"red dot will appear and others will be able to see you on the map."
-msgstr ""
+#: ../../include/event.php:1565 ../../include/connections.php:791
+#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378
+#: ../../Zotlabs/Widget/Notifications.php:43
+msgid "Home"
+msgstr "Hjem"
-#: ../../addon/rendezvous/rendezvous.php:171
-msgid "Let's meet here"
+#: ../../include/event.php:1566 ../../include/connections.php:792
+msgid "Home, Voice"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:173
-#: ../../addon/cart/submodules/hzservices.php:657
-#: ../../addon/cart/submodules/manualcat.php:260
-#: ../../Zotlabs/Module/Cdav.php:1005 ../../Zotlabs/Module/Appman.php:210
-#: ../../Zotlabs/Module/Rbmark.php:100
-msgid "Description"
-msgstr "Beskrivelse"
-
-#: ../../addon/rendezvous/rendezvous.php:174
-msgid "New marker"
+#: ../../include/event.php:1567 ../../include/connections.php:793
+msgid "Home, Fax"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:175
-msgid "Edit marker"
+#: ../../include/event.php:1568 ../../include/connections.php:794
+#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379
+msgid "Work"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:176
-msgid "New identity"
+#: ../../include/event.php:1569 ../../include/connections.php:795
+msgid "Work, Voice"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:177
-msgid "Delete marker"
+#: ../../include/event.php:1570 ../../include/connections.php:796
+msgid "Work, Fax"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:178
-msgid "Delete member"
-msgstr ""
+#: ../../include/event.php:1571 ../../include/event.php:1578
+#: ../../include/connections.php:797 ../../include/connections.php:804
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/selectors.php:119 ../../include/selectors.php:155
+#: ../../Zotlabs/Access/PermissionRoles.php:362
+#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1380
+msgid "Other"
+msgstr "Annen"
-#: ../../addon/rendezvous/rendezvous.php:179
-msgid "Edit proximity alert"
-msgstr ""
+#: ../../include/photos.php:153
+#, php-format
+msgid "Image exceeds website size limit of %lu bytes"
+msgstr "Bilde overstiger nettstedets størrelsesbegrensning på %lu bytes"
-#: ../../addon/rendezvous/rendezvous.php:180
-msgid ""
-"A proximity alert will be issued when this member is within a certain radius "
-"of you.<br><br>Enter a radius in meters (0 to disable):"
-msgstr ""
+#: ../../include/photos.php:164
+msgid "Image file is empty."
+msgstr "Bildefilen er tom."
-#: ../../addon/rendezvous/rendezvous.php:180
-#: ../../addon/rendezvous/rendezvous.php:185
-msgid "distance"
-msgstr ""
+#: ../../include/photos.php:198 ../../Zotlabs/Module/Cover_photo.php:240
+#: ../../Zotlabs/Module/Profile_photo.php:275
+msgid "Unable to process image"
+msgstr "Kan ikke behandle bildet"
-#: ../../addon/rendezvous/rendezvous.php:181
-msgid "Proximity alert distance (meters)"
-msgstr ""
+#: ../../include/photos.php:324
+msgid "Photo storage failed."
+msgstr "Bildelagring mislyktes."
-#: ../../addon/rendezvous/rendezvous.php:182
-#: ../../addon/rendezvous/rendezvous.php:184
-msgid ""
-"A proximity alert will be issued when you are within a certain radius of the "
-"marker location.<br><br>Enter a radius in meters (0 to disable):"
-msgstr ""
+#: ../../include/photos.php:373
+msgid "a new photo"
+msgstr "et nytt bilde"
-#: ../../addon/rendezvous/rendezvous.php:183
-msgid "Marker proximity alert"
-msgstr ""
+#: ../../include/photos.php:377
+#, php-format
+msgctxt "photo_upload"
+msgid "%1$s posted %2$s to %3$s"
+msgstr "%1$s la inn %2$s til %3$s"
-#: ../../addon/rendezvous/rendezvous.php:186
-msgid "Reminder note"
-msgstr ""
+#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1339
+#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1353
+msgid "Recent Photos"
+msgstr "Nye bilder"
-#: ../../addon/rendezvous/rendezvous.php:187
-msgid ""
-"Enter a note to be displayed when you are within the specified proximity..."
-msgstr ""
+#: ../../include/photos.php:727
+msgid "Upload New Photos"
+msgstr "Last opp nye bilder"
-#: ../../addon/rendezvous/rendezvous.php:199
-msgid "Add new rendezvous"
-msgstr ""
+#: ../../include/items.php:456 ../../Zotlabs/Web/WebServer.php:118
+#: ../../Zotlabs/Module/Import_items.php:116 ../../Zotlabs/Module/Group.php:109
+#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:54
+#: ../../Zotlabs/Module/Profperm.php:29 ../../Zotlabs/Module/Subthread.php:89
+#: ../../Zotlabs/Module/Like.php:344
+#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:75
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:119
+#: ../../extend/addon/hzaddons/redfiles/redfiles.php:109
+msgid "Permission denied"
+msgstr "Tillatelse avvist"
-#: ../../addon/rendezvous/rendezvous.php:200
-msgid ""
-"Create a new rendezvous and share the access link with those you wish to "
-"invite to the group. Those who open the link become members of the "
-"rendezvous. They can view other member locations, add markers to the map, or "
-"share their own locations with the group."
-msgstr ""
+#: ../../include/items.php:1241
+msgid "Visible to anybody on the internet."
+msgstr "Synlig for enhver på Internett."
-#: ../../addon/rendezvous/rendezvous.php:232
-msgid "You have no rendezvous. Press the button above to create a rendezvous!"
-msgstr ""
+#: ../../include/items.php:1243
+msgid "Visible to you only."
+msgstr "Synlig bare for deg."
-#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:730
-msgid "Errors encountered creating database tables."
-msgstr "Feil oppstod under opprettelsen av databasetabeller."
+#: ../../include/items.php:1245
+msgid "Visible to anybody in this network."
+msgstr "Synlig for enhver i dette nettverket."
-#: ../../addon/startpage/Mod_Startpage.php:60
-msgid "Page to load after login"
-msgstr ""
+#: ../../include/items.php:1247
+msgid "Visible to anybody authenticated."
+msgstr "Synlig for enhver som er autentisert."
-#: ../../addon/startpage/Mod_Startpage.php:60
-msgid ""
-"Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy "
-"collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave "
-"blank for default network page (grid)."
-msgstr ""
+#: ../../include/items.php:1249
+#, php-format
+msgid "Visible to anybody on %s."
+msgstr "Synlig for alle på %s."
-#: ../../addon/startpage/Mod_Startpage.php:68
-msgid "Startpage"
-msgstr ""
+#: ../../include/items.php:1251
+msgid "Visible to all connections."
+msgstr "Synlig for alle forbindelser."
-#: ../../addon/upgrade_info/upgrade_info.php:48
-msgid "Your channel has been upgraded to $Projectname version"
-msgstr ""
+#: ../../include/items.php:1253
+msgid "Visible to approved connections."
+msgstr "Synlig for godkjente forbindelser."
-#: ../../addon/upgrade_info/upgrade_info.php:50
-msgid "Please have a look at the"
-msgstr ""
+#: ../../include/items.php:1255
+msgid "Visible to specific connections."
+msgstr "Synlig for spesifikke forbindelser."
-#: ../../addon/upgrade_info/upgrade_info.php:52
-msgid "git history"
+#: ../../include/items.php:3345 ../../Zotlabs/Lib/Activity.php:2196
+#: ../../Zotlabs/Module/Share.php:124
+#, php-format
+msgid "&#x1f501; Repeated %1$s's %2$s"
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:54
-msgid "change log"
-msgstr ""
+#: ../../include/items.php:3848 ../../Zotlabs/Module/Viewsrc.php:25
+#: ../../Zotlabs/Module/Thing.php:113 ../../Zotlabs/Module/Filestorage.php:29
+#: ../../Zotlabs/Module/Admin/Addons.php:264
+#: ../../Zotlabs/Module/Admin/Themes.php:73 ../../Zotlabs/Module/Display.php:59
+#: ../../Zotlabs/Module/Display.php:120 ../../Zotlabs/Module/Display.php:391
+#: ../../Zotlabs/Module/Admin.php:63
+#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:291
+#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:292
+msgid "Item not found."
+msgstr "Elementet ble ikke funnet."
-#: ../../addon/upgrade_info/upgrade_info.php:55
-msgid "for further info."
-msgstr ""
+#: ../../include/items.php:4430 ../../Zotlabs/Module/Group.php:63
+#: ../../Zotlabs/Module/Group.php:207
+msgid "Privacy group not found."
+msgstr "Personverngruppen ble ikke funnet."
-#: ../../addon/upgrade_info/upgrade_info.php:60
-msgid "Upgrade Info"
-msgstr ""
+#: ../../include/items.php:4446
+msgid "Privacy group is empty."
+msgstr "Personverngruppen er tom."
-#: ../../addon/upgrade_info/upgrade_info.php:64
-msgid "Do not show this again"
-msgstr ""
+#: ../../include/items.php:4453
+#, php-format
+msgid "Privacy group: %s"
+msgstr "Personverngruppe: %s"
-#: ../../addon/twitter/Mod_Twitter.php:65
-msgid "Twitter settings updated."
-msgstr ""
+#: ../../include/items.php:4463
+#, php-format
+msgid "Connection: %s"
+msgstr "Forbindelse: %s"
-#: ../../addon/twitter/Mod_Twitter.php:101
-msgid ""
-"No consumer key pair for Twitter found. Please contact your site "
-"administrator."
-msgstr ""
+#: ../../include/items.php:4465
+msgid "Connection not found."
+msgstr "Forbindelsen ble ikke funnet."
-#: ../../addon/twitter/Mod_Twitter.php:123
-msgid ""
-"At this Hubzilla instance the Twitter plugin was enabled but you have not "
-"yet connected your account to your Twitter account. To do so click the "
-"button below to get a PIN from Twitter which you have to copy into the input "
-"box below and submit the form. Only your <strong>public</strong> posts will "
-"be posted to Twitter."
+#: ../../include/account.php:39
+msgid "The provided email address is not valid"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:125
-msgid "Log in with Twitter"
+#: ../../include/account.php:42
+msgid "The provided email domain is not among those allowed on this site"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:128
-msgid "Copy the PIN from Twitter here"
+#: ../../include/account.php:49
+msgid "The provided email address is already registered at this site"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:150
+#: ../../include/account.php:56
msgid ""
-"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to Twitter will lead the visitor to a blank page informing "
-"the visitor that the access to your profile has been restricted."
-msgstr ""
-
-#: ../../addon/twitter/Mod_Twitter.php:155
-msgid "Twitter post length"
+"There is a pending registration for this address - click \"Register\" to "
+"continue verification"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:155
-msgid "Maximum tweet length"
-msgstr ""
+#: ../../include/account.php:95
+msgid "An invitation is required."
+msgstr "En invitasjon er påkrevd."
-#: ../../addon/twitter/Mod_Twitter.php:160
-msgid "Send public postings to Twitter by default"
-msgstr ""
+#: ../../include/account.php:104
+msgid "Invitation could not be verified."
+msgstr "Invitasjon kunne ikke bekreftes."
-#: ../../addon/twitter/Mod_Twitter.php:160
-msgid ""
-"If enabled your public postings will be posted to the associated Twitter "
-"account by default"
-msgstr ""
+#: ../../include/account.php:192
+msgid "Please enter the required information."
+msgstr "Vennligst skriv inn nødvendig informasjon."
-#: ../../addon/twitter/Mod_Twitter.php:179
-msgid "Twitter Crosspost Connector"
-msgstr ""
+#: ../../include/account.php:259 ../../include/account.php:367
+msgid "Failed to store account information."
+msgstr "Mislyktes med å lagre kontoinformasjon."
-#: ../../addon/twitter/twitter.php:109
-msgid "Post to Twitter"
-msgstr ""
+#: ../../include/account.php:436 ../../include/account.php:504
+#: ../../Zotlabs/Module/Register.php:329
+#, php-format
+msgid "Registration confirmation for %s"
+msgstr "Registreringsbekreftelse for %s"
-#: ../../addon/pumpio/pumpio.php:152
-msgid "You are now authenticated to pumpio."
-msgstr ""
+#: ../../include/account.php:579
+#, php-format
+msgid "Registration request at %s"
+msgstr "Registreringsforespørsel hos %s"
-#: ../../addon/pumpio/pumpio.php:153
-msgid "return to the featured settings page"
-msgstr "tilbake til funksjonsinnstillinger"
+#: ../../include/account.php:601
+msgid "your registration password"
+msgstr "ditt registreringspassord"
-#: ../../addon/pumpio/pumpio.php:168
-msgid "Post to Pump.io"
-msgstr ""
+#: ../../include/account.php:607 ../../include/account.php:696
+#, php-format
+msgid "Registration details for %s"
+msgstr "Registreringsdetaljer for %s"
-#: ../../addon/pumpio/Mod_Pumpio.php:40
-msgid "Pump.io Settings saved."
-msgstr ""
+#: ../../include/account.php:707
+msgid "Account approved."
+msgstr "Konto godkjent."
-#: ../../addon/pumpio/Mod_Pumpio.php:71
-msgid "Pump.io servername"
-msgstr ""
+#: ../../include/account.php:763
+#, php-format
+msgid "Registration revoked for %s"
+msgstr "Registrering trukket tilbake for %s"
-#: ../../addon/pumpio/Mod_Pumpio.php:71
-msgid "Without \"http://\" or \"https://\""
+#: ../../include/account.php:770
+#, php-format
+msgid "Could not revoke registration for %s"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:75
-msgid "Pump.io username"
-msgstr ""
+#: ../../include/account.php:1187 ../../include/account.php:1189
+msgid "Click here to upgrade."
+msgstr "Klikk her for å oppgradere."
-#: ../../addon/pumpio/Mod_Pumpio.php:75
-msgid "Without the servername"
-msgstr ""
+#: ../../include/account.php:1195
+msgid "This action exceeds the limits set by your subscription plan."
+msgstr "Denne handlingen går utenfor grensene satt i din abonnementsplan."
-#: ../../addon/pumpio/Mod_Pumpio.php:86
-msgid "You are not authenticated to pumpio"
-msgstr ""
+#: ../../include/account.php:1200
+msgid "This action is not available under your subscription plan."
+msgstr "Denne handlingen er ikke tilgjengelig i din abonnementsplan."
-#: ../../addon/pumpio/Mod_Pumpio.php:88
-msgid "(Re-)Authenticate your pump.io connection"
+#: ../../include/account.php:1260
+msgid "open"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:92
-msgid "Post to pump.io by default"
+#: ../../include/account.php:1260
+msgid "closed"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:96
-msgid "Should posts be public"
+#: ../../include/account.php:1267
+msgid "Registration is currently"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:100
-msgid "Mirror all public posts"
+#: ../../include/account.php:1276
+msgid "please come back"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:110
-msgid "Pump.io Crosspost Connector"
-msgstr ""
+#: ../../include/photo/photo_driver.php:458
+#: ../../Zotlabs/Module/Profile_photo.php:168
+#: ../../Zotlabs/Module/Profile_photo.php:337
+msgid "Profile Photos"
+msgstr "Profilbilder"
-#: ../../addon/gravatar/gravatar.php:123
-msgid "generic profile image"
-msgstr ""
+#: ../../include/activities.php:30
+msgid " and "
+msgstr " og "
-#: ../../addon/gravatar/gravatar.php:124
-msgid "random geometric pattern"
-msgstr ""
+#: ../../include/activities.php:32
+#, fuzzy
+#| msgid " "
+msgid ", "
+msgstr " "
-#: ../../addon/gravatar/gravatar.php:125
-msgid "monster face"
-msgstr ""
+#: ../../include/activities.php:36 ../../include/activities.php:38
+#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Module/Profile_photo.php:227
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:58
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:59
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:60
+msgid "Profile Photo"
+msgstr "Profilbilde"
-#: ../../addon/gravatar/gravatar.php:126
-msgid "computer generated face"
-msgstr ""
+#: ../../include/activities.php:36 ../../Zotlabs/Module/Cover_photo.php:230
+#, fuzzy
+#| msgid "Cover Photos"
+msgid "Cover Photo"
+msgstr "Forsidebilder"
-#: ../../addon/gravatar/gravatar.php:127
-msgid "retro arcade style face"
-msgstr ""
+#: ../../include/activities.php:45
+msgid "public profile"
+msgstr "offentlig profil"
-#: ../../addon/gravatar/gravatar.php:128
-msgid "Hub default profile photo"
-msgstr ""
+#: ../../include/activities.php:62
+#, fuzzy, php-format
+#| msgid "%1$s has an updated %2$s, changing %3$s."
+msgid "%1$s %2$s has been updated to %3$s."
+msgstr "%1$s har oppdatert %2$s, endret %3$s."
-#: ../../addon/gravatar/gravatar.php:143
-msgid "Information"
-msgstr ""
+#: ../../include/activities.php:65
+#, fuzzy, php-format
+#| msgid "%1$s has an updated %2$s, changing %3$s."
+msgid "%1$s updated the %2$s. Changed %3$s."
+msgstr "%1$s har oppdatert %2$s, endret %3$s."
-#: ../../addon/gravatar/gravatar.php:143
+#: ../../include/group.php:23
msgid ""
-"Libravatar addon is installed, too. Please disable Libravatar addon or this "
-"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
-"nothing was found at Libravatar."
-msgstr ""
-
-#: ../../addon/gravatar/gravatar.php:150 ../../addon/msgfooter/msgfooter.php:46
-#: ../../addon/xmpp/xmpp.php:43
-msgid "Save Settings"
-msgstr ""
-
-#: ../../addon/gravatar/gravatar.php:151
-msgid "Default avatar image"
-msgstr ""
-
-#: ../../addon/gravatar/gravatar.php:151
-msgid "Select default avatar image if none was found at Gravatar. See README"
-msgstr ""
-
-#: ../../addon/gravatar/gravatar.php:152
-msgid "Rating of images"
-msgstr ""
-
-#: ../../addon/gravatar/gravatar.php:152
-msgid "Select the appropriate avatar rating for your site. See README"
+"A deleted group with this name was revived. Existing item permissions "
+"<strong>may</strong> apply to this group and any future members. If this is "
+"not what you intended, please create another group with a different name."
msgstr ""
+"En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende "
+"tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og "
+"fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe "
+"med et annet navn."
-#: ../../addon/gravatar/gravatar.php:165
-msgid "Gravatar settings updated."
-msgstr ""
+#: ../../include/group.php:271
+msgid "Add new connections to this privacy group"
+msgstr "Legg nye forbindelser i denne personverngruppen"
-#: ../../addon/msgfooter/msgfooter.php:47
-msgid "text to include in all outgoing posts from this site"
-msgstr ""
+#: ../../include/group.php:305
+msgid "edit"
+msgstr "endre"
-#: ../../addon/sendzid/Mod_Sendzid.php:21
-msgid "Send your identity to all websites"
-msgstr ""
+#: ../../include/group.php:327 ../../include/acl_selectors.php:87
+#: ../../Zotlabs/Lib/Apps.php:368 ../../Zotlabs/Module/Group.php:144
+#: ../../Zotlabs/Widget/Activity_filter.php:95
+msgid "Privacy Groups"
+msgstr "Personverngrupper"
-#: ../../addon/sendzid/Mod_Sendzid.php:29
-msgid "Send ZID"
-msgstr ""
+#: ../../include/group.php:328
+msgid "Edit group"
+msgstr "Endre gruppe"
-#: ../../addon/cart/widgets/catalogitem.php:57
-#: ../../addon/cart/submodules/hzservices.php:660
-#: ../../addon/cart/submodules/manualcat.php:263
-msgid "Price"
+#: ../../include/group.php:329
+msgid "Manage privacy groups"
msgstr ""
-#: ../../addon/cart/manual_payments.php:7
-msgid "Error: order mismatch. Please try again."
-msgstr ""
+#: ../../include/group.php:330
+msgid "Channels not in any privacy group"
+msgstr "Kanaler uten personverngruppe"
-#: ../../addon/cart/manual_payments.php:61
-msgid "Manual payments are not enabled."
-msgstr ""
+#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
+msgid "add"
+msgstr "legg til"
-#: ../../addon/cart/manual_payments.php:68
-#: ../../addon/cart/submodules/paypalbutton.php:392
-#: ../../addon/cart/submodules/paypalbuttonV2.php:417
-#: ../../addon/cart/cart.php:1632
-msgid "Order not found."
-msgstr ""
+#: ../../include/language.php:423 ../../include/text.php:2199
+msgid "default"
+msgstr "standard"
-#: ../../addon/cart/manual_payments.php:77
-msgid "Finished"
-msgstr ""
+#: ../../include/language.php:436
+msgid "Select an alternate language"
+msgstr "Velg et annet språk"
-#: ../../addon/cart/submodules/subscriptions.php:151
-msgid "Enable Subscription Management Module"
+#: ../../include/import.php:31
+msgid "Unable to import a removed channel."
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:223
+#: ../../include/import.php:57
msgid ""
-"Cannot include subscription items with different terms in the same order."
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:372
-msgid "Select Subscription to Edit"
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:380
-msgid "Edit Subscriptions"
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:414
-msgid "Subscription SKU"
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:419
-msgid "Catalog Description"
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:423
-msgid "Subscription available for purchase."
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:428
-msgid "Maximum active subscriptions to this item per account."
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:431
-msgid "Subscription price."
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:435
-msgid "Quantity"
-msgstr ""
-
-#: ../../addon/cart/submodules/subscriptions.php:439
-msgid "Term"
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:65
-msgid "Enable Hubzilla Services Module"
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:164
-#: ../../addon/cart/submodules/manualcat.php:172
-msgid "New Sku"
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:199
-#: ../../addon/cart/submodules/manualcat.php:208
-msgid "Cannot save edits to locked item."
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:248
-#: ../../addon/cart/submodules/hzservices.php:335
-msgid "SKU not found."
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:301
-#: ../../addon/cart/submodules/hzservices.php:305
-msgid "Invalid Activation Directive."
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:376
-#: ../../addon/cart/submodules/hzservices.php:380
-msgid "Invalid Deactivation Directive."
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:566
-msgid "Add to this privacy group"
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:582
-msgid "Set user service class"
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:609
-msgid "You must be using a local account to purchase this service."
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:649
-#: ../../addon/cart/submodules/manualcat.php:252
-msgid "Changes Locked"
-msgstr ""
-
-#: ../../addon/cart/submodules/hzservices.php:653
-#: ../../addon/cart/submodules/manualcat.php:256
-msgid "Item available for purchase."
+"Cannot create a duplicate channel identifier on this system. Import failed."
msgstr ""
+"Kan ikke lage en kopi av kanal-identifikatoren på dette systemet. Import "
+"mislyktes."
-#: ../../addon/cart/submodules/hzservices.php:663
-#: ../../addon/cart/submodules/manualcat.php:266
-msgid "Photo URL"
-msgstr ""
+#: ../../include/import.php:78
+#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:43
+msgid "Unable to create a unique channel address. Import failed."
+msgstr "Klarte ikke å lage en unik kanaladresse. Import mislyktes."
-#: ../../addon/cart/submodules/hzservices.php:667
-msgid "Add buyer to privacy group"
-msgstr ""
+#: ../../include/import.php:129
+msgid "Cloned channel not found. Import failed."
+msgstr "Klonet kanal ble ikke funnet. Import mislyktes."
-#: ../../addon/cart/submodules/hzservices.php:672
-msgid "Add buyer as connection"
-msgstr ""
+#: ../../include/datetime.php:58 ../../Zotlabs/Module/Profiles.php:751
+#: ../../Zotlabs/Widget/Newmember.php:58
+msgid "Miscellaneous"
+msgstr "Forskjellig"
-#: ../../addon/cart/submodules/hzservices.php:680
-#: ../../addon/cart/submodules/hzservices.php:722
-msgid "Set Service Class"
-msgstr ""
+#: ../../include/datetime.php:140
+#, fuzzy
+msgid "Birthday"
+msgstr "Fødselsdag:"
-#: ../../addon/cart/submodules/orderoptions.php:70
-msgid "Enable Order/Item Options"
-msgstr ""
+#: ../../include/datetime.php:140
+msgid "Age: "
+msgstr "Alder: "
-#: ../../addon/cart/submodules/orderoptions.php:333
-#: ../../addon/cart/submodules/orderoptions.php:357
-#: ../../addon/cart/submodules/orderoptions.php:433
-#: ../../addon/cart/submodules/orderoptions.php:457
-msgid "Label"
-msgstr ""
+#: ../../include/datetime.php:140
+msgid "YYYY-MM-DD or MM-DD"
+msgstr "YYYY-MM-DD eller MM-DD"
-#: ../../addon/cart/submodules/orderoptions.php:334
-#: ../../addon/cart/submodules/orderoptions.php:358
-#: ../../addon/cart/submodules/orderoptions.php:434
-#: ../../addon/cart/submodules/orderoptions.php:458
-#: ../../include/js_strings.php:124 ../../include/datetime.php:211
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:208
-#: ../../Zotlabs/Module/Appman.php:209 ../../Zotlabs/Module/Profiles.php:761
-#: ../../Zotlabs/Module/Profiles.php:765
+#: ../../include/datetime.php:211 ../../include/js_strings.php:124
+#: ../../Zotlabs/Module/Profiles.php:760 ../../Zotlabs/Module/Profiles.php:764
+#: ../../Zotlabs/Module/Appman.php:218 ../../Zotlabs/Module/Appman.php:219
+#: ../../Zotlabs/Module/Register.php:501
#: ../../Zotlabs/Module/Settings/Multifactor.php:84
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:334
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:358
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:434
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:458
msgid "Required"
msgstr "Påkrevd"
-#: ../../addon/cart/submodules/orderoptions.php:336
-#: ../../addon/cart/submodules/orderoptions.php:360
-#: ../../addon/cart/submodules/orderoptions.php:436
-#: ../../addon/cart/submodules/orderoptions.php:460
-msgid "Instructions"
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:85
-msgid "Enable Paypal Button Module"
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:93
-#: ../../addon/cart/submodules/paypalbuttonV2.php:96
-msgid "Use Production Key"
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:100
-#: ../../addon/cart/submodules/paypalbuttonV2.php:103
-msgid "Paypal Sandbox Client Key"
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:107
-#: ../../addon/cart/submodules/paypalbuttonV2.php:110
-msgid "Paypal Sandbox Secret Key"
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:113
-#: ../../addon/cart/submodules/paypalbuttonV2.php:116
-msgid "Paypal Production Client Key"
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:120
-#: ../../addon/cart/submodules/paypalbuttonV2.php:123
-msgid "Paypal Production Secret Key"
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:252
-#: ../../addon/cart/submodules/paypalbuttonV2.php:271
-msgid "Paypal button payments are not enabled."
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbutton.php:270
-#: ../../addon/cart/submodules/paypalbuttonV2.php:289
-msgid ""
-"Paypal button payments are not properly configured. Please choose another "
-"payment option."
-msgstr ""
-
-#: ../../addon/cart/submodules/paypalbuttonV2.php:86
-msgid "Enable Paypal Button Module (API-v2)"
-msgstr ""
-
-#: ../../addon/cart/submodules/manualcat.php:61
-msgid "Enable Manual Cart Module"
-msgstr ""
-
-#: ../../addon/cart/myshop.php:30
-#, fuzzy
-msgid "Access Denied."
-msgstr "Ingen tilgang"
-
-#: ../../addon/cart/myshop.php:113 ../../addon/cart/cart.php:1495
-msgid "Order Not Found"
-msgstr ""
-
-#: ../../addon/cart/myshop.php:145 ../../addon/cart/myshop.php:181
-#: ../../addon/cart/myshop.php:215 ../../addon/cart/myshop.php:265
-#: ../../addon/cart/myshop.php:300 ../../addon/cart/myshop.php:323
-msgid "Access Denied"
-msgstr "Ingen tilgang"
-
-#: ../../addon/cart/myshop.php:190 ../../addon/cart/myshop.php:224
-#: ../../addon/cart/myshop.php:275 ../../addon/cart/myshop.php:333
-#, fuzzy
-msgid "Invalid Item"
-msgstr "Ugyldig element."
-
-#: ../../addon/cart/Settings/Cart.php:58
-msgid "Enable Test Catalog"
-msgstr ""
-
-#: ../../addon/cart/Settings/Cart.php:70
-msgid "Enable Manual Payments"
-msgstr ""
-
-#: ../../addon/cart/Settings/Cart.php:90
-msgid "Base Merchant Currency"
-msgstr ""
-
-#: ../../addon/cart/Settings/Cart.php:129 ../../addon/cart/cart.php:1424
-msgid "Cart Settings"
-msgstr ""
-
-#: ../../addon/cart/cart.php:259
-msgid "DB Cleanup Failure"
-msgstr ""
-
-#: ../../addon/cart/cart.php:692
-msgid "[cart] Item Added"
-msgstr ""
-
-#: ../../addon/cart/cart.php:1107
-msgid "Order already checked out."
-msgstr ""
-
-#: ../../addon/cart/cart.php:1417
-msgid "Drop database tables when uninstalling."
-msgstr ""
-
-#: ../../addon/cart/cart.php:1436 ../../addon/cart/cart.php:1439
-msgid "Shop"
-msgstr ""
-
-#: ../../addon/cart/cart.php:1599
-msgid "You must be logged into the Grid to shop."
-msgstr ""
-
-#: ../../addon/cart/cart.php:1648
-#, fuzzy
-msgid "Access denied."
-msgstr "Ingen tilgang"
-
-#: ../../addon/cart/cart.php:1700 ../../addon/cart/cart.php:1843
-msgid "No Order Found"
-msgstr ""
-
-#: ../../addon/cart/cart.php:1709
-msgid "An unknown error has occurred Please start again."
-msgstr ""
-
-#: ../../addon/cart/cart.php:1852
-msgid "Requirements not met."
-msgstr ""
-
-#: ../../addon/cart/cart.php:1852
-msgid "Review your order and complete any needed requirements."
-msgstr ""
-
-#: ../../addon/cart/cart.php:1878
-msgid "Invalid Payment Type. Please start again."
-msgstr ""
-
-#: ../../addon/cart/cart.php:1885
-msgid "Order not found"
-msgstr ""
-
-#: ../../addon/nofed/Mod_Nofed.php:21
-msgid "nofed Settings saved."
-msgstr ""
-
-#: ../../addon/nofed/Mod_Nofed.php:40
-msgid "Federate posts by default"
-msgstr ""
-
-#: ../../addon/nofed/Mod_Nofed.php:48
-msgid "No Federation"
-msgstr ""
-
-#: ../../addon/nofed/nofed.php:47
-msgid "Federate"
-msgstr ""
-
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-msgid "Hide the button and show the smilies directly."
-msgstr ""
-
-#: ../../addon/smileybutton/Mod_Smileybutton.php:50
-msgid "Smileybutton Settings"
-msgstr ""
-
-#: ../../addon/redfiles/redfilehelper.php:64 ../../include/attach.php:2147
-msgid "file"
-msgstr ""
-
-#: ../../addon/redfiles/redfiles.php:119
-msgid "Redmatrix File Storage Import"
-msgstr ""
-
-#: ../../addon/redfiles/redfiles.php:120
-msgid "This will import all your Redmatrix cloud files to this channel."
-msgstr ""
-
-#: ../../addon/diaspora/diaspora.php:78
-msgid ""
-"Please install the statistics addon to be able to configure a diaspora relay"
-msgstr ""
-
-#: ../../addon/diaspora/diaspora.php:88
-msgid "Diaspora Relay Handle"
-msgstr ""
-
-#: ../../addon/diaspora/diaspora.php:88
-msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
-msgstr ""
-
-#: ../../addon/diaspora/diaspora.php:108
-msgid "Diaspora relay could not be imported"
-msgstr ""
-
-#: ../../addon/diaspora/diaspora.php:1069
-msgid "No subject"
-msgstr ""
-
-#: ../../addon/diaspora/p.php:48 ../../addon/diaspora/util.php:342
-#: ../../addon/diaspora/util.php:355 ../../Zotlabs/Lib/Enotify.php:61
-msgid "$projectname"
-msgstr "$projectname"
+#: ../../include/datetime.php:238 ../../boot.php:2774
+msgid "never"
+msgstr "aldri"
-#: ../../addon/diaspora/import_diaspora.php:18
-msgid "No username found in import file."
-msgstr "Ingen brukernavn ble funnet i importfilen."
+#: ../../include/datetime.php:244
+msgid "less than a second ago"
+msgstr "for mindre enn ett sekund siden"
-#: ../../addon/diaspora/import_diaspora.php:43 ../../include/import.php:77
-msgid "Unable to create a unique channel address. Import failed."
-msgstr "Klarte ikke å lage en unik kanaladresse. Import mislyktes."
+#: ../../include/datetime.php:262
+#, php-format
+msgctxt "e.g. 22 hours ago, 1 minute ago"
+msgid "%1$d %2$s ago"
+msgstr "%1$d %2$s siden"
-#: ../../addon/diaspora/import_diaspora.php:140
-msgid "Import completed."
-msgstr "Import ferdig."
+#: ../../include/datetime.php:273
+msgctxt "relative_date"
+msgid "year"
+msgid_plural "years"
+msgstr[0] "år"
+msgstr[1] "år"
-#: ../../addon/diaspora/Mod_Diaspora.php:43
-msgid "Diaspora Protocol Settings updated."
-msgstr ""
+#: ../../include/datetime.php:276
+msgctxt "relative_date"
+msgid "month"
+msgid_plural "months"
+msgstr[0] "måned"
+msgstr[1] "måneder"
-#: ../../addon/diaspora/Mod_Diaspora.php:52
-msgid ""
-"The diaspora protocol does not support location independence. Connections "
-"you make within that network may be unreachable from alternate channel "
-"locations."
-msgstr ""
+#: ../../include/datetime.php:279
+msgctxt "relative_date"
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "uke"
+msgstr[1] "uker"
-#: ../../addon/diaspora/Mod_Diaspora.php:80
-msgid "Prevent your hashtags from being redirected to other sites"
-msgstr ""
+#: ../../include/datetime.php:282
+msgctxt "relative_date"
+msgid "day"
+msgid_plural "days"
+msgstr[0] "dag"
+msgstr[1] "dager"
-#: ../../addon/diaspora/Mod_Diaspora.php:84
-msgid "Sign and forward posts and comments with no existing Diaspora signature"
-msgstr ""
+#: ../../include/datetime.php:285
+msgctxt "relative_date"
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "time"
+msgstr[1] "timer"
-#: ../../addon/diaspora/Mod_Diaspora.php:89
-msgid "Followed hashtags (comma separated, do not include the #)"
-msgstr ""
+#: ../../include/datetime.php:288
+msgctxt "relative_date"
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minutt"
+msgstr[1] "minutter"
-#: ../../addon/diaspora/Mod_Diaspora.php:98
-msgid "Diaspora Protocol"
-msgstr ""
+#: ../../include/datetime.php:291
+msgctxt "relative_date"
+msgid "second"
+msgid_plural "seconds"
+msgstr[0] "sekund"
+msgstr[1] "sekunder"
-#: ../../addon/diaspora/Receiver.php:1632
+#: ../../include/datetime.php:520
#, php-format
-msgid "%1$s dislikes %2$s's %3$s"
-msgstr ""
+msgid "%1$s's birthday"
+msgstr "%1$s sin fødselsdag"
-#: ../../addon/diaspora/Receiver.php:2251 ../../Zotlabs/Module/Like.php:495
+#: ../../include/datetime.php:521
#, php-format
-msgid "%1$s is attending %2$s's %3$s"
-msgstr "%1$s deltar på %2$ss %3$s"
+msgid "Happy Birthday %1$s"
+msgstr "Gratulerer med dagen, %1$s"
-#: ../../addon/diaspora/Receiver.php:2253 ../../Zotlabs/Module/Like.php:497
-#, php-format
-msgid "%1$s is not attending %2$s's %3$s"
-msgstr "%1$s deltar ikke på %2$ss %3$s"
+#: ../../include/conversation.php:149 ../../include/text.php:2358
+#: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Subthread.php:112
+#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1693
+#: ../../extend/addon/hzaddons/redphotos/redphotohelper.php:71
+msgid "photo"
+msgstr "foto"
-#: ../../addon/diaspora/Receiver.php:2255 ../../Zotlabs/Module/Like.php:499
-#, php-format
-msgid "%1$s may attend %2$s's %3$s"
-msgstr "%1$s deltar kanskje på %2$ss %3$s"
+#: ../../include/conversation.php:157 ../../Zotlabs/Module/Like.php:183
+msgid "channel"
+msgstr "kanal"
-#: ../../addon/piwik/piwik.php:85
-msgid ""
-"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
-"analytics tool."
-msgstr ""
+#: ../../include/conversation.php:182 ../../include/text.php:2366
+#: ../../Zotlabs/Module/Tagger.php:81
+msgid "comment"
+msgstr "kommentar"
-#: ../../addon/piwik/piwik.php:88
+#: ../../include/conversation.php:196 ../../Zotlabs/Module/Like.php:483
+#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1628
#, php-format
-msgid ""
-"If you do not want that your visits are logged this way you <a href='%s'>can "
-"set a cookie to prevent Piwik from tracking further visits of the site</a> "
-"(opt-out)."
-msgstr ""
-
-#: ../../addon/piwik/piwik.php:96
-msgid "Piwik Base URL"
-msgstr ""
-
-#: ../../addon/piwik/piwik.php:96
-msgid ""
-"Absolute path to your Piwik installation. (without protocol (http/s), with "
-"trailing slash)"
-msgstr ""
-
-#: ../../addon/piwik/piwik.php:97
-msgid "Site ID"
-msgstr ""
-
-#: ../../addon/piwik/piwik.php:98
-msgid "Show opt-out cookie link?"
-msgstr ""
-
-#: ../../addon/piwik/piwik.php:99
-msgid "Asynchronous tracking"
-msgstr ""
-
-#: ../../addon/piwik/piwik.php:100
-msgid "Enable frontend JavaScript error tracking"
-msgstr ""
-
-#: ../../addon/piwik/piwik.php:100
-msgid "This feature requires Piwik >= 2.2.0"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:222
-msgid "Workflow user."
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:273
-msgid "This channel"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:286 ../../Zotlabs/Module/Locs.php:123
-msgid "Primary"
-msgstr "Primær"
-
-#: ../../addon/workflow/workflow.php:328
-msgid "Create New Workflow Item"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:547 ../../addon/workflow/workflow.php:1444
-#: ../../addon/workflow/workflow.php:1463
-msgid "Workflow"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:1432
-msgid "No Workflows Available"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:1462
-msgid "Add item to which workflow"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:1522
-#: ../../addon/workflow/workflow.php:1641
-msgid "Create Workflow Item"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:2603
-msgid "Link"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:2605
-msgid "Web link."
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:2624
-#: ../../addon/workflow/workflow.php:2685 ../../Zotlabs/Module/Cdav.php:1366
-#: ../../Zotlabs/Module/Connedit.php:734
-msgid "Title"
-msgstr "Tittel"
-
-#: ../../addon/workflow/workflow.php:2626
-#: ../../addon/workflow/workflow.php:2687
-msgid "Brief description or title"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:2632 ../../Zotlabs/Widget/Notes.php:38
-#: ../../Zotlabs/Lib/Apps.php:375
-msgid "Notes"
-msgstr "Merknader"
-
-#: ../../addon/workflow/workflow.php:2634
-#: ../../addon/workflow/workflow.php:2695
-msgid "Notes and Info"
-msgstr ""
-
-#: ../../addon/workflow/workflow.php:2693
-msgid "Body"
-msgstr ""
-
-#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:101
-msgid "Workflow Settings"
-msgstr ""
-
-#: ../../addon/donate/donate.php:21
-msgid "Project Servers and Resources"
-msgstr ""
-
-#: ../../addon/donate/donate.php:22
-msgid "Project Creator and Tech Lead"
-msgstr ""
-
-#: ../../addon/donate/donate.php:49
-msgid ""
-"And the hundreds of other people and organisations who helped make the "
-"Hubzilla possible."
-msgstr ""
-
-#: ../../addon/donate/donate.php:52
-msgid ""
-"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving "
-"their time and expertise - and often paying out of pocket for services they "
-"share with others."
-msgstr ""
-
-#: ../../addon/donate/donate.php:53
-msgid ""
-"There is no corporate funding and no ads, and we do not collect and sell "
-"your personal information. (We don't control your personal information - "
-"<strong>you do</strong>.)"
-msgstr ""
-
-#: ../../addon/donate/donate.php:54
-msgid ""
-"Help support our ground-breaking work in decentralisation, web identity, and "
-"privacy."
-msgstr ""
-
-#: ../../addon/donate/donate.php:56
-msgid ""
-"Your donations keep servers and services running and also helps us to "
-"provide innovative new features and continued development."
-msgstr ""
-
-#: ../../addon/donate/donate.php:59
-msgid "Donate"
-msgstr ""
-
-#: ../../addon/donate/donate.php:61
-msgid ""
-"Choose a project, developer, or public hub to support with a one-time "
-"donation"
-msgstr ""
-
-#: ../../addon/donate/donate.php:62
-msgid "Donate Now"
-msgstr ""
-
-#: ../../addon/donate/donate.php:63
-msgid ""
-"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"
-msgstr ""
-
-#: ../../addon/donate/donate.php:64
-msgid ""
-"Please indicate if you would like your first name or full name (or nothing) "
-"to appear in our sponsor listing"
-msgstr ""
-
-#: ../../addon/donate/donate.php:65
-msgid "Sponsor"
-msgstr ""
-
-#: ../../addon/donate/donate.php:68
-msgid "Special thanks to: "
-msgstr ""
-
-#: ../../addon/likebanner/likebanner.php:51
-msgid "Your Webbie:"
-msgstr ""
-
-#: ../../addon/likebanner/likebanner.php:54
-msgid "Fontsize (px):"
-msgstr ""
-
-#: ../../addon/likebanner/likebanner.php:68
-msgid "Link:"
-msgstr ""
-
-#: ../../addon/likebanner/likebanner.php:70
-msgid "Like us on Hubzilla"
-msgstr ""
-
-#: ../../addon/likebanner/likebanner.php:72
-msgid "Embed:"
-msgstr ""
+msgid "%1$s likes %2$s's %3$s"
+msgstr "%1$s liker %2$s sin %3$s"
-#: ../../addon/opensearch/opensearch.php:26
+#: ../../include/conversation.php:198
#, php-format
-msgctxt "opensearch"
-msgid "Search %1$s (%2$s)"
-msgstr "Søk %1$s (%2$s)"
-
-#: ../../addon/opensearch/opensearch.php:28
-msgctxt "opensearch"
-msgid "$Projectname"
-msgstr "$Projectname"
-
-#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Module/Invite.php:238
-#: ../../Zotlabs/Module/Invite.php:507 ../../Zotlabs/Module/Invite.php:521
-#: ../../Zotlabs/Module/Home.php:87 ../../Zotlabs/Module/Home.php:95
-#: ../../Zotlabs/Lib/Enotify.php:66
-msgid "$Projectname"
-msgstr "$Projectname"
-
-#: ../../addon/opensearch/opensearch.php:43
-msgid "Search $Projectname"
-msgstr ""
-
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:22
-msgid "Fuzzloc Settings updated."
-msgstr ""
-
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:38
-msgid "Minimum offset in meters"
-msgstr ""
-
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:42
-msgid "Maximum offset in meters"
-msgstr ""
-
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:51
-msgid "Fuzzy Location"
-msgstr ""
-
-#: ../../addon/hubwall/hubwall.php:19
-msgid "Send email to all members"
+msgid "likes %1$s's %2$s"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:65
+#: ../../include/conversation.php:201 ../../Zotlabs/Module/Like.php:485
#, php-format
-msgid "%s Administrator"
-msgstr "%s administrator"
-
-#: ../../addon/hubwall/hubwall.php:50 ../../addon/mailtest/mailtest.php:50
-msgid "No recipients found."
-msgstr ""
+msgid "%1$s doesn't like %2$s's %3$s"
+msgstr "%1$s liker ikke %2$s sin %3$s"
-#: ../../addon/hubwall/hubwall.php:73
+#: ../../include/conversation.php:202
#, php-format
-msgid "%1$d of %2$d messages sent."
+msgid "doesn't like %1$s's %2$s"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:81
-msgid "Send email to all hub members."
-msgstr ""
+#: ../../include/conversation.php:205
+#, fuzzy, php-format
+#| msgid "%1$s may attend %2$s's %3$s"
+msgid "%1$s repeated %2$s's %3$s"
+msgstr "%1$s deltar kanskje på %2$ss %3$s"
-#: ../../addon/hubwall/hubwall.php:92 ../../addon/mailtest/mailtest.php:96
-msgid "Message subject"
-msgstr ""
+#: ../../include/conversation.php:206
+#, fuzzy, php-format
+#| msgid "Visit %1$s's %2$s"
+msgid "repeated %1$s's %2$s"
+msgstr "Besøk %1$s sitt %2$s"
-#: ../../addon/hubwall/hubwall.php:93
-msgid "Sender Email address"
+#: ../../include/conversation.php:334 ../../Zotlabs/Lib/ThreadItem.php:536
+msgid "This is an unsaved preview"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:94
-msgid "Test mode (only send to hub administrator)"
-msgstr ""
+#: ../../include/conversation.php:471 ../../Zotlabs/Module/Photos.php:1110
+msgctxt "title"
+msgid "Likes"
+msgstr "Liker"
-#: ../../addon/cards/Widget/Cards_categories.php:80
-#: ../../addon/articles/Widget/Articles_categories.php:80
-#: ../../include/contact_widgets.php:115 ../../include/contact_widgets.php:149
-#: ../../include/taxonomy.php:423 ../../include/taxonomy.php:505
-#: ../../include/taxonomy.php:525 ../../include/taxonomy.php:546
-#: ../../Zotlabs/Module/Cdav.php:1062 ../../Zotlabs/Storage/Browser.php:293
-#: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:406
-msgid "Categories"
-msgstr "Kategorier"
+#: ../../include/conversation.php:472 ../../Zotlabs/Module/Photos.php:1110
+msgctxt "title"
+msgid "Dislikes"
+msgstr "Liker ikke"
-#: ../../addon/cards/Widget/Cards_categories.php:83
-#: ../../addon/articles/Widget/Articles_categories.php:83
-#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:118
-#: ../../include/contact_widgets.php:152
-#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
-msgid "Everything"
-msgstr "Alt"
+#: ../../include/conversation.php:473 ../../Zotlabs/Module/Photos.php:1111
+#: ../../Zotlabs/Widget/Pinned.php:73
+msgctxt "title"
+msgid "Attending"
+msgstr "Deltar"
-#: ../../addon/cards/Mod_Card_edit.php:17
-#: ../../addon/cards/Mod_Card_edit.php:33
-#: ../../addon/articles/Mod_Article_edit.php:17
-#: ../../addon/articles/Mod_Article_edit.php:33
-#: ../../Zotlabs/Module/Editwebpage.php:80 ../../Zotlabs/Module/Editpost.php:24
-#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95
-#: ../../Zotlabs/Module/Editlayout.php:79
-msgid "Item not found"
-msgstr "Elementet ble ikke funnet."
+#: ../../include/conversation.php:474 ../../Zotlabs/Module/Photos.php:1111
+#: ../../Zotlabs/Widget/Pinned.php:74
+msgctxt "title"
+msgid "Not attending"
+msgstr "Deltar ikke"
-#: ../../addon/cards/Mod_Card_edit.php:44
-#: ../../addon/articles/Mod_Article_edit.php:44
-#: ../../Zotlabs/Module/Attach_edit.php:52
-#: ../../Zotlabs/Module/Wall_upload.php:30 ../../Zotlabs/Module/Chanview.php:95
-#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Attach.php:22
-#: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Block.php:41
-msgid "Channel not found."
-msgstr "Kanalen ble ikke funnet."
+#: ../../include/conversation.php:475 ../../Zotlabs/Module/Photos.php:1111
+#: ../../Zotlabs/Widget/Pinned.php:75
+msgctxt "title"
+msgid "Might attend"
+msgstr "Deltar kanskje"
-#: ../../addon/cards/Mod_Card_edit.php:129
-msgid "Edit Card"
+#: ../../include/conversation.php:477
+msgctxt "title"
+msgid "Repeats"
msgstr ""
-#: ../../addon/cards/Mod_Card_edit.php:130
-#: ../../addon/articles/Mod_Article_edit.php:128
-#: ../../include/conversation.php:736 ../../include/conversation.php:799
-#: ../../Zotlabs/Module/Tokens.php:295 ../../Zotlabs/Module/Group.php:251
-#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Editwebpage.php:167
-#: ../../Zotlabs/Module/Cdav.php:1047 ../../Zotlabs/Module/Cdav.php:1381
-#: ../../Zotlabs/Module/Webpages.php:252
-#: ../../Zotlabs/Module/Admin/Accounts.php:320
-#: ../../Zotlabs/Module/Admin/Channels.php:149
-#: ../../Zotlabs/Module/Admin/Profs.php:176
-#: ../../Zotlabs/Module/Permcats.php:261
-#: ../../Zotlabs/Module/Contactedit.php:667 ../../Zotlabs/Module/Blocks.php:160
+#: ../../include/conversation.php:546
+msgid "Select"
+msgstr "Velg"
+
+#: ../../include/conversation.php:547 ../../include/conversation.php:608
+#: ../../Zotlabs/Lib/Apps.php:618 ../../Zotlabs/Lib/ThreadItem.php:183
+#: ../../Zotlabs/Lib/ThreadItem.php:544 ../../Zotlabs/Storage/Browser.php:388
#: ../../Zotlabs/Module/Editblock.php:139
-#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Photos.php:1171
-#: ../../Zotlabs/Module/Oauth2.php:193 ../../Zotlabs/Module/Thing.php:269
-#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Connedit.php:749
-#: ../../Zotlabs/Lib/Apps.php:602 ../../Zotlabs/Lib/ThreadItem.php:179
-#: ../../Zotlabs/Lib/ThreadItem.php:509 ../../Zotlabs/Storage/Browser.php:387
+#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Photos.php:1173
+#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Group.php:252
+#: ../../Zotlabs/Module/Oauth2.php:193 ../../Zotlabs/Module/Connedit.php:540
+#: ../../Zotlabs/Module/Connedit.php:749
+#: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Thing.php:295
+#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Webpages.php:252
+#: ../../Zotlabs/Module/Admin/Accounts.php:320
+#: ../../Zotlabs/Module/Admin/Channels.php:171
+#: ../../Zotlabs/Module/Admin/Profs.php:177 ../../Zotlabs/Module/Tokens.php:295
+#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Cdav.php:1047
+#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Contactedit.php:651
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:128
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:130
msgid "Delete"
msgstr "Slett"
-#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160
-#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:331
-msgid "Cards"
-msgstr ""
-
-#: ../../addon/cards/cards.php:51
-msgid "View Cards"
-msgstr ""
-
-#: ../../addon/cards/cards.php:82 ../../addon/articles/articles.php:83
-#: ../../include/conversation.php:852
-msgid "View in context"
-msgstr "Vis i sammenheng"
+#: ../../include/conversation.php:553 ../../Zotlabs/Lib/ThreadItem.php:287
+msgid "Toggle Star Status"
+msgstr "Skru av og på stjernestatus"
-#: ../../addon/cards/Mod_Cards.php:115
-msgid "Add Card"
-msgstr ""
+#: ../../include/conversation.php:559
+msgid "Private Message"
+msgstr "Privat melding"
-#: ../../addon/cards/Mod_Cards.php:116
-#: ../../addon/articles/Mod_Articles.php:120 ../../include/text.php:1171
-#: ../../include/text.php:1183 ../../Zotlabs/Module/Admin/Queueworker.php:114
-#: ../../Zotlabs/Module/Admin/Profs.php:94
-#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Filer.php:54
-#: ../../Zotlabs/Module/Rbmark.php:31 ../../Zotlabs/Module/Rbmark.php:103
-msgid "Save"
-msgstr "Lagre"
+#: ../../include/conversation.php:568 ../../Zotlabs/Lib/ThreadItem.php:297
+#: ../../Zotlabs/Widget/Pinned.php:84
+msgid "Message signature validated"
+msgstr "Innleggets signatur er bekreftet"
-#: ../../addon/notifyadmin/notifyadmin.php:34
-msgid "New registration"
-msgstr ""
+#: ../../include/conversation.php:569 ../../Zotlabs/Lib/ThreadItem.php:298
+#: ../../Zotlabs/Widget/Pinned.php:85
+msgid "Message signature incorrect"
+msgstr "Innleggets signatur er feil"
-#: ../../addon/notifyadmin/notifyadmin.php:40
-#: ../../Zotlabs/Module/Invite.php:265
-#, php-format
-msgid "%s : Message delivery failed."
-msgstr "%s : meldingslevering feilet."
+#: ../../include/conversation.php:607 ../../Zotlabs/Lib/ThreadItem.php:543
+#: ../../Zotlabs/Module/Connections.php:358
+#: ../../Zotlabs/Module/Connections.php:409
+#: ../../Zotlabs/Module/Admin/Accounts.php:318
+msgid "Approve"
+msgstr "Godkjenn"
-#: ../../addon/notifyadmin/notifyadmin.php:42
+#: ../../include/conversation.php:613
#, php-format
-msgid "Message sent to %s. New account registration: %s"
-msgstr ""
-
-#: ../../addon/flashcards/Mod_Flashcards.php:225
-msgid "Not allowed."
-msgstr ""
-
-#: ../../addon/flashcards/Mod_Flashcards.php:261
-#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Chat.php:240
-#: ../../Zotlabs/Module/Filestorage.php:195 ../../Zotlabs/Module/Photos.php:671
-#: ../../Zotlabs/Module/Photos.php:1042 ../../Zotlabs/Module/Thing.php:321
-#: ../../Zotlabs/Module/Thing.php:374
-msgid "Permissions"
-msgstr "Tillatelser"
-
-#: ../../addon/flashcards/Mod_Flashcards.php:268
-#: ../../Zotlabs/Module/Filestorage.php:202
-msgid "Set/edit permissions"
-msgstr "Angi/endre tillatelser"
-
-#: ../../addon/flashcards/Mod_Flashcards.php:291
-#: ../../addon/flashcards/Mod_Flashcards.php:292 ../../include/items.php:3876
-#: ../../Zotlabs/Module/Filestorage.php:29
-#: ../../Zotlabs/Module/Admin/Themes.php:72
-#: ../../Zotlabs/Module/Admin/Addons.php:263
-#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:53
-#: ../../Zotlabs/Module/Display.php:114 ../../Zotlabs/Module/Display.php:392
-#: ../../Zotlabs/Module/Admin.php:61 ../../Zotlabs/Module/Thing.php:96
-msgid "Item not found."
-msgstr "Elementet ble ikke funnet."
-
-#: ../../addon/libertree/libertree.php:43
-msgid "Post to Libertree"
-msgstr ""
-
-#: ../../addon/libertree/Mod_Libertree.php:25
-msgid "Libertree Crosspost Connector Settings saved."
-msgstr ""
-
-#: ../../addon/libertree/Mod_Libertree.php:49
-msgid "Libertree API token"
-msgstr ""
-
-#: ../../addon/libertree/Mod_Libertree.php:53
-msgid "Libertree site URL"
-msgstr ""
-
-#: ../../addon/libertree/Mod_Libertree.php:57
-msgid "Post to Libertree by default"
-msgstr ""
-
-#: ../../addon/libertree/Mod_Libertree.php:65
-msgid "Libertree Crosspost Connector"
-msgstr ""
-
-#: ../../addon/randpost/randpost.php:99
-msgid "You're welcome."
-msgstr ""
-
-#: ../../addon/randpost/randpost.php:100
-msgid "Ah shucks..."
-msgstr ""
-
-#: ../../addon/randpost/randpost.php:101
-msgid "Don't mention it."
-msgstr ""
-
-#: ../../addon/randpost/randpost.php:102
-msgid "&lt;blush&gt;"
-msgstr ""
-
-#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:333
-msgid "Report Bug"
-msgstr ""
-
-#: ../../addon/logrot/logrot.php:36
-msgid "Logfile archive directory"
-msgstr ""
+msgid "View %s's profile @ %s"
+msgstr "Vis %s sin profile @ %s"
-#: ../../addon/logrot/logrot.php:36
-msgid "Directory to store rotated logs"
-msgstr ""
+#: ../../include/conversation.php:635
+msgid "Categories:"
+msgstr "Kategorier:"
-#: ../../addon/logrot/logrot.php:37
-msgid "Logfile size in bytes before rotating"
-msgstr ""
+#: ../../include/conversation.php:636
+msgid "Filed under:"
+msgstr "Sortert under:"
-#: ../../addon/logrot/logrot.php:38
-msgid "Number of logfiles to retain"
-msgstr ""
+#: ../../include/conversation.php:642 ../../Zotlabs/Lib/ThreadItem.php:455
+#: ../../Zotlabs/Widget/Pinned.php:128
+#, php-format
+msgid "from %s"
+msgstr "fra %s"
-#: ../../addon/testdrive/testdrive.php:104
+#: ../../include/conversation.php:645 ../../Zotlabs/Lib/ThreadItem.php:458
+#: ../../Zotlabs/Widget/Pinned.php:131
#, php-format
-msgid "Your account on %s will expire in a few days."
-msgstr ""
+msgid "last edited: %s"
+msgstr "sist endret: %s"
-#: ../../addon/testdrive/testdrive.php:105
-msgid "Your test account is about to expire."
-msgstr ""
+#: ../../include/conversation.php:646 ../../Zotlabs/Lib/ThreadItem.php:459
+#: ../../Zotlabs/Widget/Pinned.php:132
+#, php-format
+msgid "Expires: %s"
+msgstr "Utløper: %s"
-#: ../../addon/hideaside/Mod_Hideaside.php:28
-msgid "Hide Aside App"
-msgstr ""
+#: ../../include/conversation.php:661
+#: ../../extend/addon/hzaddons/articles/articles.php:83
+#: ../../extend/addon/hzaddons/cards/cards.php:82
+msgid "View in context"
+msgstr "Vis i sammenheng"
-#: ../../addon/hideaside/Mod_Hideaside.php:29
-msgid "Fade out aside areas after a while when using endless scroll"
-msgstr ""
+#: ../../include/conversation.php:663 ../../Zotlabs/Lib/ThreadItem.php:537
+#: ../../Zotlabs/Module/Photos.php:1077
+msgid "Please wait"
+msgstr "Vennligst vent"
-#: ../../addon/skeleton/Mod_Skeleton.php:38
-msgid "Some setting"
-msgstr ""
+#: ../../include/conversation.php:764
+msgid "remove"
+msgstr "fjern"
-#: ../../addon/skeleton/Mod_Skeleton.php:38
-msgid "A setting"
-msgstr ""
+#: ../../include/conversation.php:768
+msgid "Loading..."
+msgstr "Laster..."
-#: ../../addon/skeleton/Mod_Skeleton.php:46
-msgid "Skeleton Settings"
-msgstr ""
+#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:314
+msgid "Conversation Features"
+msgstr "Samtaleinnstillinger"
-#: ../../addon/socialauth/Mod_SocialAuth.php:106
-#: ../../addon/socialauth/Mod_SocialAuth.php:179
-msgid "Network error"
-msgstr ""
+#: ../../include/conversation.php:770
+msgid "Delete Selected Items"
+msgstr "Slett valgte elementer"
-#: ../../addon/socialauth/Mod_SocialAuth.php:110
-#: ../../addon/socialauth/Mod_SocialAuth.php:183
-msgid "API error"
-msgstr ""
+#: ../../include/conversation.php:806
+msgid "View Source"
+msgstr "Vis kilde"
-#: ../../addon/socialauth/Mod_SocialAuth.php:114
-#: ../../addon/socialauth/Mod_SocialAuth.php:187
-msgid "Unknown issue"
-msgstr ""
+#: ../../include/conversation.php:816
+msgid "Follow Thread"
+msgstr "Følg tråd"
-#: ../../addon/socialauth/Mod_SocialAuth.php:152
-msgid "Unable to retrieve email address from remote identity provider"
-msgstr ""
+#: ../../include/conversation.php:825
+msgid "Unfollow Thread"
+msgstr "Ikke følg tråd"
-#: ../../addon/socialauth/Mod_SocialAuth.php:171
-msgid "Unable to login using email address "
-msgstr ""
+#: ../../include/conversation.php:914 ../../Zotlabs/Module/Connedit.php:501
+msgid "Recent Activity"
+msgstr "Nylig aktivitet"
-#: ../../addon/socialauth/Mod_SocialAuth.php:211
-msgid "Social Authentication using your social media account"
-msgstr ""
+#: ../../include/conversation.php:926 ../../include/channel.php:1625
+#: ../../include/connections.php:150 ../../Zotlabs/Module/Suggest.php:69
+#: ../../Zotlabs/Module/Directory.php:371
+#: ../../Zotlabs/Module/Connections.php:365
+#: ../../Zotlabs/Widget/Suggestions.php:51 ../../Zotlabs/Widget/Follow.php:37
+msgid "Connect"
+msgstr "Koble"
-#: ../../addon/socialauth/Mod_SocialAuth.php:215
-msgid ""
-"This app enables one or more social provider sign-in buttons on the login "
-"page."
-msgstr ""
+#: ../../include/conversation.php:938
+msgid "Edit Connection"
+msgstr "Endre forbindelse"
-#: ../../addon/socialauth/Mod_SocialAuth.php:233
-msgid "Add an identity provider"
-msgstr ""
+#: ../../include/conversation.php:1006 ../../include/cdav.php:158
+#: ../../include/cdav.php:159 ../../include/cdav.php:167
+#: ../../Zotlabs/Lib/Apps.php:1168 ../../Zotlabs/Lib/Apps.php:1252
+#: ../../Zotlabs/Lib/Activity.php:1684 ../../Zotlabs/Module/Photos.php:788
+#: ../../Zotlabs/Module/Photos.php:1246
+#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Widget/Pinned.php:257
+#: ../../Zotlabs/Widget/Album.php:90 ../../Zotlabs/Widget/Portfolio.php:99
+msgid "Unknown"
+msgstr "Ukjent"
-#: ../../addon/socialauth/Mod_SocialAuth.php:260
+#: ../../include/conversation.php:1008
#, fuzzy
-msgid "Enable "
-msgstr "Skru på"
-
-#: ../../addon/socialauth/Mod_SocialAuth.php:267
-msgid "Key"
-msgstr ""
-
-#: ../../addon/socialauth/Mod_SocialAuth.php:267
-#: ../../addon/socialauth/Mod_SocialAuth.php:272
-#: ../../addon/socialauth/Mod_SocialAuth.php:288
-#: ../../addon/socialauth/Mod_SocialAuth.php:299
-#: ../../addon/socialauth/Mod_SocialAuth.php:308
-msgid "Word"
-msgstr ""
-
-#: ../../addon/socialauth/Mod_SocialAuth.php:272
-msgid "Secret"
-msgstr ""
-
-#: ../../addon/socialauth/Mod_SocialAuth.php:308
-msgid "Add a custom provider"
-msgstr ""
-
-#: ../../addon/socialauth/Mod_SocialAuth.php:328
-msgid "Remove an identity provider"
-msgstr ""
-
-#: ../../addon/socialauth/Mod_SocialAuth.php:338
-msgid "Social authentication"
-msgstr ""
-
-#: ../../addon/socialauth/Mod_SocialAuth.php:380
-msgid "Error while saving provider settings"
-msgstr ""
+#| msgid "Remove this file"
+msgid "Approve this item"
+msgstr "Fjern denne filen"
-#: ../../addon/socialauth/Mod_SocialAuth.php:403
-msgid "Custom provider already exists"
-msgstr ""
+#: ../../include/conversation.php:1008
+#, fuzzy
+#| msgid "Delete this item?"
+msgid "Delete this item"
+msgstr "Slett dette elementet?"
-#: ../../addon/socialauth/Mod_SocialAuth.php:420
-msgid "Social authentication settings saved."
-msgstr ""
+#: ../../include/conversation.php:1062
+#, php-format
+msgid "%s likes this."
+msgstr "%s liker dette."
-#: ../../addon/nsfw/nsfw.php:153
-msgid "Possible adult content"
-msgstr ""
+#: ../../include/conversation.php:1062
+#, php-format
+msgid "%s doesn't like this."
+msgstr "%s liker ikke dette."
-#: ../../addon/nsfw/nsfw.php:168
+#: ../../include/conversation.php:1066
#, php-format
-msgid "%s - view"
-msgstr ""
+msgid "<span %1$s>%2$d people</span> like this."
+msgid_plural "<span %1$s>%2$d people</span> like this."
+msgstr[0] "<span %1$s>%2$d person</span> liker dette."
+msgstr[1] "<span %1$s>%2$d personer</span> liker dette."
-#: ../../addon/nsfw/Mod_Nsfw.php:22
-msgid "NSFW Settings saved."
-msgstr ""
+#: ../../include/conversation.php:1068
+#, php-format
+msgid "<span %1$s>%2$d people</span> don't like this."
+msgid_plural "<span %1$s>%2$d people</span> don't like this."
+msgstr[0] "<span %1$s>%2$d person</span> liker ikke dette."
+msgstr[1] "<span %1$s>%2$d personer</span> liker ikke dette."
-#: ../../addon/nsfw/Mod_Nsfw.php:42
-msgid ""
-"This app looks in posts for the words/text you specify below, and collapses "
-"any content containing those keywords so it is not displayed at "
-"inappropriate times, such as sexual innuendo that may be improper in a work "
-"setting. It is polite and recommended to tag any content containing nudity "
-"with #NSFW. This filter can also match any other word/text you specify, and "
-"can thereby be used as a general purpose content filter."
-msgstr ""
+#: ../../include/conversation.php:1074
+msgid "and"
+msgstr "og"
-#: ../../addon/nsfw/Mod_Nsfw.php:47
-msgid "Comma separated list of keywords to hide"
-msgstr ""
+#: ../../include/conversation.php:1077
+#, php-format
+msgid ", and %d other people"
+msgid_plural ", and %d other people"
+msgstr[0] ", og %d annen person"
+msgstr[1] ", og %d andre personer"
-#: ../../addon/nsfw/Mod_Nsfw.php:47
-msgid "Word, /regular-expression/, lang=xx, lang!=xx"
-msgstr ""
+#: ../../include/conversation.php:1078
+#, php-format
+msgid "%s like this."
+msgstr "%s liker dette."
-#: ../../addon/nsfw/Mod_Nsfw.php:56
-msgid "NSFW"
-msgstr ""
+#: ../../include/conversation.php:1078
+#, php-format
+msgid "%s don't like this."
+msgstr "%s liker ikke dette."
-#: ../../addon/upload_limits/upload_limits.php:25
-msgid "Show Upload Limits"
-msgstr ""
+#: ../../include/conversation.php:1129
+#: ../../extend/addon/hzaddons/hsse/hsse.php:82
+msgid "Set your location"
+msgstr "Angi din plassering"
-#: ../../addon/upload_limits/upload_limits.php:27
-msgid "Hubzilla configured maximum size: "
-msgstr ""
+#: ../../include/conversation.php:1130
+#: ../../extend/addon/hzaddons/hsse/hsse.php:83
+msgid "Clear browser location"
+msgstr "Fjern nettleserplassering"
-#: ../../addon/upload_limits/upload_limits.php:28
-msgid "PHP upload_max_filesize: "
-msgstr ""
+#: ../../include/conversation.php:1142 ../../Zotlabs/Module/Editblock.php:116
+#: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Module/Editwebpage.php:143
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:99
+#: ../../extend/addon/hzaddons/hsse/hsse.php:95
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:101
+msgid "Insert web link"
+msgstr "Sett inn web-lenke"
-#: ../../addon/upload_limits/upload_limits.php:29
-msgid "PHP post_max_size (must be larger than upload_max_filesize): "
-msgstr ""
+#: ../../include/conversation.php:1146
+#: ../../extend/addon/hzaddons/hsse/hsse.php:99
+msgid "Embed (existing) photo from your photo albums"
+msgstr "Sett inn (eksisterende) bilde fra fotoalbumene dine"
-#: ../../addon/tictac/tictac.php:21
-msgid "Three Dimensional Tic-Tac-Toe"
-msgstr ""
+#: ../../include/conversation.php:1179 ../../Zotlabs/Module/Chat.php:217
+#: ../../extend/addon/hzaddons/hsse/hsse.php:134
+msgid "Please enter a link URL:"
+msgstr "Vennligst skriv inn en lenke URL:"
-#: ../../addon/tictac/tictac.php:54
-msgid "3D Tic-Tac-Toe"
-msgstr ""
+#: ../../include/conversation.php:1180
+#: ../../extend/addon/hzaddons/hsse/hsse.php:135
+msgid "Tag term:"
+msgstr "Merkelapp:"
-#: ../../addon/tictac/tictac.php:59
-msgid "New game"
-msgstr ""
+#: ../../include/conversation.php:1181
+#: ../../extend/addon/hzaddons/hsse/hsse.php:136
+msgid "Where are you right now?"
+msgstr "Hvor er du akkurat nå?"
-#: ../../addon/tictac/tictac.php:60
-msgid "New game with handicap"
-msgstr ""
+#: ../../include/conversation.php:1184 ../../Zotlabs/Module/Cover_photo.php:388
+#: ../../Zotlabs/Module/Profile_photo.php:555
+#: ../../extend/addon/hzaddons/hsse/hsse.php:139
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:400
+msgid "Choose images to embed"
+msgstr "Velg bilder"
-#: ../../addon/tictac/tictac.php:61
-msgid ""
-"Three dimensional tic-tac-toe is just like the traditional game except that "
-"it is played on multiple levels simultaneously. "
-msgstr ""
+#: ../../include/conversation.php:1185 ../../Zotlabs/Module/Cover_photo.php:389
+#: ../../Zotlabs/Module/Profile_photo.php:556
+#: ../../extend/addon/hzaddons/hsse/hsse.php:140
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:401
+msgid "Choose an album"
+msgstr "Velg et album"
-#: ../../addon/tictac/tictac.php:62
-msgid ""
-"In this case there are three levels. You win by getting three in a row on "
-"any level, as well as up, down, and diagonally across the different levels."
-msgstr ""
+#: ../../include/conversation.php:1186
+#: ../../extend/addon/hzaddons/hsse/hsse.php:141
+msgid "Choose a different album..."
+msgstr "Velg et annet album..."
-#: ../../addon/tictac/tictac.php:64
-msgid ""
-"The handicap game disables the center position on the middle level because "
-"the player claiming this square often has an unfair advantage."
+#: ../../include/conversation.php:1187 ../../Zotlabs/Module/Cover_photo.php:391
+#: ../../Zotlabs/Module/Profile_photo.php:558
+#: ../../extend/addon/hzaddons/hsse/hsse.php:142
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:403
+msgid "Error getting album list"
msgstr ""
-#: ../../addon/tictac/tictac.php:183
-msgid "You go first..."
+#: ../../include/conversation.php:1188 ../../Zotlabs/Module/Cover_photo.php:392
+#: ../../Zotlabs/Module/Profile_photo.php:559
+#: ../../extend/addon/hzaddons/hsse/hsse.php:143
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:404
+msgid "Error getting photo link"
msgstr ""
-#: ../../addon/tictac/tictac.php:188
-msgid "I'm going first this time..."
+#: ../../include/conversation.php:1189 ../../Zotlabs/Module/Cover_photo.php:393
+#: ../../Zotlabs/Module/Profile_photo.php:560
+#: ../../extend/addon/hzaddons/hsse/hsse.php:144
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:405
+msgid "Error getting album"
msgstr ""
-#: ../../addon/tictac/tictac.php:194
-msgid "You won!"
+#: ../../include/conversation.php:1190
+#: ../../extend/addon/hzaddons/hsse/hsse.php:145
+msgid "Comments enabled"
msgstr ""
-#: ../../addon/tictac/tictac.php:200 ../../addon/tictac/tictac.php:225
-msgid "\"Cat\" game!"
+#: ../../include/conversation.php:1191
+#: ../../extend/addon/hzaddons/hsse/hsse.php:146
+msgid "Comments disabled"
msgstr ""
-#: ../../addon/tictac/tictac.php:223
-msgid "I won!"
-msgstr ""
+#: ../../include/conversation.php:1192
+#, fuzzy
+#| msgid "Profile deleted."
+msgid "Confirm delete"
+msgstr "Profilen er slettet."
-#: ../../addon/mailtest/mailtest.php:19
-msgid "Send test email"
-msgstr ""
+#: ../../include/conversation.php:1209 ../../Zotlabs/Lib/ThreadItem.php:878
+#: ../../Zotlabs/Module/Photos.php:1096 ../../Zotlabs/Module/Webpages.php:257
+#: ../../extend/addon/hzaddons/hsse/hsse.php:153
+msgid "Preview"
+msgstr "Forhåndsvisning"
-#: ../../addon/mailtest/mailtest.php:66
-msgid "Mail sent."
-msgstr ""
+#: ../../include/conversation.php:1242 ../../Zotlabs/Lib/ThreadItem.php:344
+#: ../../Zotlabs/Module/Photos.php:1076 ../../Zotlabs/Module/Layouts.php:192
+#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Webpages.php:251
+#: ../../Zotlabs/Widget/Cdav.php:142
+#: ../../extend/addon/hzaddons/hsse/hsse.php:186
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:304
+msgid "Share"
+msgstr "Del"
-#: ../../addon/mailtest/mailtest.php:68
-msgid "Sending of mail failed."
-msgstr ""
+#: ../../include/conversation.php:1251
+#: ../../extend/addon/hzaddons/hsse/hsse.php:195
+msgid "Page link name"
+msgstr "Sidens lenkenavn"
-#: ../../addon/mailtest/mailtest.php:77
-msgid "Mail Test"
-msgstr ""
+#: ../../include/conversation.php:1254
+#: ../../extend/addon/hzaddons/hsse/hsse.php:198
+msgid "Post as"
+msgstr "Lag innlegg som"
-#: ../../addon/ljpost/Mod_Ljpost.php:53
-msgid "Livejournal username"
-msgstr ""
+#: ../../include/conversation.php:1256 ../../Zotlabs/Lib/ThreadItem.php:869
+#: ../../extend/addon/hzaddons/hsse/hsse.php:200
+msgid "Bold"
+msgstr "Uthevet"
-#: ../../addon/ljpost/Mod_Ljpost.php:57
-msgid "Livejournal password"
-msgstr ""
+#: ../../include/conversation.php:1257 ../../Zotlabs/Lib/ThreadItem.php:870
+#: ../../extend/addon/hzaddons/hsse/hsse.php:201
+msgid "Italic"
+msgstr "Kursiv"
-#: ../../addon/ljpost/Mod_Ljpost.php:61
-msgid "Post to Livejournal by default"
-msgstr ""
+#: ../../include/conversation.php:1258 ../../Zotlabs/Lib/ThreadItem.php:871
+#: ../../extend/addon/hzaddons/hsse/hsse.php:202
+msgid "Underline"
+msgstr "Understreket"
-#: ../../addon/ljpost/Mod_Ljpost.php:65
-msgid "Send wall-to-wall posts to Livejournal"
-msgstr ""
+#: ../../include/conversation.php:1259 ../../Zotlabs/Lib/ThreadItem.php:872
+#: ../../extend/addon/hzaddons/hsse/hsse.php:203
+msgid "Quote"
+msgstr "Sitat"
-#: ../../addon/ljpost/Mod_Ljpost.php:77
-msgid "Livejournal Crosspost Connector"
-msgstr ""
+#: ../../include/conversation.php:1260 ../../Zotlabs/Lib/ThreadItem.php:873
+#: ../../extend/addon/hzaddons/hsse/hsse.php:204
+msgid "Code"
+msgstr "Kode"
-#: ../../addon/ljpost/ljpost.php:49
-msgid "Post to Livejournal"
-msgstr ""
+#: ../../include/conversation.php:1261 ../../Zotlabs/Lib/ThreadItem.php:875
+#: ../../extend/addon/hzaddons/hsse/hsse.php:205
+msgid "Attach/Upload file"
+msgstr "Last opp fil/vedlegg"
-#: ../../addon/ljpost/ljpost.php:127
-msgid "Posted by"
+#: ../../include/conversation.php:1264
+#: ../../extend/addon/hzaddons/hsse/hsse.php:208
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:397
+msgid "Embed an image from your albums"
msgstr ""
-#: ../../addon/mdpost/mdpost.php:42
-msgid "Use markdown for editing posts"
-msgstr ""
+#: ../../include/conversation.php:1265 ../../include/conversation.php:1320
+#: ../../Zotlabs/Storage/Browser.php:387 ../../Zotlabs/Module/Editblock.php:141
+#: ../../Zotlabs/Module/Editlayout.php:140 ../../Zotlabs/Module/Oauth.php:110
+#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Editpost.php:114
+#: ../../Zotlabs/Module/Oauth2.php:115 ../../Zotlabs/Module/Oauth2.php:143
+#: ../../Zotlabs/Module/Cover_photo.php:386 ../../Zotlabs/Module/Tagrm.php:15
+#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Connedit.php:750
+#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Filer.php:56
+#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
+#: ../../Zotlabs/Module/Profile_photo.php:553
+#: ../../Zotlabs/Module/Admin/Addons.php:431 ../../Zotlabs/Module/Cdav.php:1049
+#: ../../Zotlabs/Module/Cdav.php:1386
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:130
+#: ../../extend/addon/hzaddons/hsse/hsse.php:209
+#: ../../extend/addon/hzaddons/hsse/hsse.php:258
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:365
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:398
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:132
+msgid "Cancel"
+msgstr "Avbryt"
-#: ../../addon/articles/Mod_Article_edit.php:127
-msgid "Edit Article"
-msgstr ""
+#: ../../include/conversation.php:1266 ../../include/conversation.php:1319
+#: ../../Zotlabs/Module/Cover_photo.php:387
+#: ../../Zotlabs/Module/Profile_photo.php:554
+#: ../../extend/addon/hzaddons/hsse/hsse.php:210
+#: ../../extend/addon/hzaddons/hsse/hsse.php:257
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:399
+msgid "OK"
+msgstr "OK"
-#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160
-#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:330
-msgid "Articles"
-msgstr ""
+#: ../../include/conversation.php:1268
+#: ../../extend/addon/hzaddons/hsse/hsse.php:212
+msgid "Toggle voting"
+msgstr "Skru av eller på stemming"
-#: ../../addon/articles/articles.php:51
-msgid "View Articles"
-msgstr ""
+#: ../../include/conversation.php:1269
+msgid "Toggle poll"
+msgstr "Spørreskjema (på/av)"
-#: ../../addon/articles/Mod_Articles.php:119
-msgid "Add Article"
-msgstr ""
+#: ../../include/conversation.php:1270
+msgid "Option"
+msgstr "Valg"
-#: ../../addon/hzfiles/hzfiles.php:81
-msgid "Hubzilla File Storage Import"
-msgstr ""
+#: ../../include/conversation.php:1271
+msgid "Add option"
+msgstr "Legg til valg"
-#: ../../addon/hzfiles/hzfiles.php:82
-msgid "This will import all your cloud files from another server."
-msgstr ""
+#: ../../include/conversation.php:1272
+msgid "Minutes"
+msgstr "Minutter"
-#: ../../addon/hzfiles/hzfiles.php:83
-msgid "Hubzilla Server base URL"
-msgstr ""
+#: ../../include/conversation.php:1272
+#, fuzzy
+msgid "Hours"
+msgstr "timer"
-#: ../../addon/authchoose/Mod_Authchoose.php:30
-msgid ""
-"Allow magic authentication only to websites of your immediate connections"
-msgstr ""
+#: ../../include/conversation.php:1272
+#, fuzzy
+msgid "Days"
+msgstr "dager"
-#: ../../addon/authchoose/Mod_Authchoose.php:36
-msgid "Authchoose"
-msgstr ""
+#: ../../include/conversation.php:1273
+msgid "Allow multiple answers"
+msgstr "Tillat flere svar"
-#: ../../addon/pageheader/Mod_Pageheader.php:22
-msgid "pageheader Settings saved."
-msgstr ""
+#: ../../include/conversation.php:1273
+#: ../../view/theme/redbasic/php/config.php:201
+#: ../../view/theme/redbasic/php/config.php:202
+#: ../../view/theme/redbasic/php/config.php:203
+#: ../../view/theme/redbasic/php/config.php:215 ../../boot.php:1765
+#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:167
+#: ../../Zotlabs/Lib/Libzotdir.php:169 ../../Zotlabs/Storage/Browser.php:310
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312
+#: ../../Zotlabs/Storage/Browser.php:393 ../../Zotlabs/Storage/Browser.php:395
+#: ../../Zotlabs/Storage/Browser.php:559 ../../Zotlabs/Module/Menu.php:163
+#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Api.php:101
+#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:674
+#: ../../Zotlabs/Module/Profiles.php:684 ../../Zotlabs/Module/Profiles.php:692
+#: ../../Zotlabs/Module/Profiles.php:696 ../../Zotlabs/Module/Sources.php:122
+#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Import.php:615
+#: ../../Zotlabs/Module/Import.php:616 ../../Zotlabs/Module/Register.php:515
+#: ../../Zotlabs/Module/Defperms.php:195
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Admin/Site.php:306 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
+#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
+#: ../../Zotlabs/Module/Settings/Channel.php:225
+#: ../../Zotlabs/Module/Settings/Multifactor.php:82
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Display.php:87
+#: ../../Zotlabs/Module/Contactedit.php:270
+#: ../../Zotlabs/Module/Contactedit.php:315
+#: ../../extend/addon/hzaddons/cart/cart.php:1418
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:72
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:338
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:362
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:438
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:462
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:153
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:425
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:63
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:254
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:258
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:88
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:98
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:87
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:95
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:67
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:651
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:655
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:61
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:73
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:218
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69
+#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:70
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:45
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92
+msgid "No"
+msgstr "Nei"
-#: ../../addon/pageheader/Mod_Pageheader.php:41
-msgid "Message to display on every page on this server"
-msgstr ""
+#: ../../include/conversation.php:1273
+#: ../../view/theme/redbasic/php/config.php:201
+#: ../../view/theme/redbasic/php/config.php:202
+#: ../../view/theme/redbasic/php/config.php:203
+#: ../../view/theme/redbasic/php/config.php:215 ../../boot.php:1765
+#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:167
+#: ../../Zotlabs/Lib/Libzotdir.php:169 ../../Zotlabs/Storage/Browser.php:310
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312
+#: ../../Zotlabs/Storage/Browser.php:393 ../../Zotlabs/Storage/Browser.php:395
+#: ../../Zotlabs/Storage/Browser.php:559 ../../Zotlabs/Module/Menu.php:163
+#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Api.php:100
+#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:674
+#: ../../Zotlabs/Module/Profiles.php:684 ../../Zotlabs/Module/Profiles.php:692
+#: ../../Zotlabs/Module/Profiles.php:696 ../../Zotlabs/Module/Sources.php:122
+#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Import.php:611
+#: ../../Zotlabs/Module/Import.php:615 ../../Zotlabs/Module/Import.php:616
+#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Defperms.php:195
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Admin/Site.php:308 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
+#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
+#: ../../Zotlabs/Module/Settings/Channel.php:225
+#: ../../Zotlabs/Module/Settings/Multifactor.php:82
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Display.php:87
+#: ../../Zotlabs/Module/Contactedit.php:270
+#: ../../extend/addon/hzaddons/cart/cart.php:1418
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:72
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:337
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:361
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:437
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:461
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:153
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:425
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:63
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:254
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:258
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:88
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:98
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:87
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:95
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:67
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:651
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:655
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:61
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:73
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:218
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69
+#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:70
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:45
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92
+msgid "Yes"
+msgstr "Ja"
-#: ../../addon/pageheader/Mod_Pageheader.php:49
-msgid "Page Header"
-msgstr ""
+#: ../../include/conversation.php:1275
+#: ../../extend/addon/hzaddons/hsse/hsse.php:215
+msgid "Disable comments"
+msgstr "Slå av kommentarer"
-#: ../../addon/irc/Mod_Irc.php:23 ../../addon/irc/irc.php:41
-msgid "Popular Channels"
+#: ../../include/conversation.php:1276
+#: ../../extend/addon/hzaddons/hsse/hsse.php:216
+msgid "Toggle comments"
msgstr ""
-#: ../../addon/irc/irc.php:37
-msgid "Channels to auto connect"
-msgstr ""
+#: ../../include/conversation.php:1282 ../../Zotlabs/Module/Editblock.php:129
+#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1042
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:116
+#: ../../extend/addon/hzaddons/hsse/hsse.php:221
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:118
+msgid "Title (optional)"
+msgstr "Tittel (valgfri)"
-#: ../../addon/irc/irc.php:37 ../../addon/irc/irc.php:41
-msgid "Comma separated list"
-msgstr ""
+#: ../../include/conversation.php:1283
+msgid "Summary (optional)"
+msgstr "Sammendrag (valgfritt)"
-#: ../../addon/irc/irc.php:45
-msgid "IRC Settings"
-msgstr ""
+#: ../../include/conversation.php:1286
+#: ../../extend/addon/hzaddons/hsse/hsse.php:224
+msgid "Categories (optional, comma-separated list)"
+msgstr "Kategorier (valgfri, kommaseparert liste)"
-#: ../../addon/irc/irc.php:54
-msgid "IRC settings saved."
-msgstr ""
+#: ../../include/conversation.php:1287
+#: ../../extend/addon/hzaddons/hsse/hsse.php:225
+msgid "Permission settings"
+msgstr "Tillatelser - innstillinger"
-#: ../../addon/irc/irc.php:58
-msgid "IRC Chatroom"
-msgstr ""
+#: ../../include/conversation.php:1309
+#: ../../extend/addon/hzaddons/hsse/hsse.php:247
+msgid "Other networks and post services"
+msgstr "Andre nettverk og innleggstjenester"
-#: ../../addon/xmpp/xmpp.php:44
-msgid "Jabber BOSH host"
-msgstr ""
+#: ../../include/conversation.php:1312
+#: ../../extend/addon/hzaddons/hsse/hsse.php:250
+msgid "Set expiration date"
+msgstr "Angi utløpsdato"
-#: ../../addon/xmpp/xmpp.php:45
-msgid "Use central userbase"
-msgstr ""
+#: ../../include/conversation.php:1315
+#: ../../extend/addon/hzaddons/hsse/hsse.php:253
+msgid "Set publish date"
+msgstr "Angi publiseringsdato"
-#: ../../addon/xmpp/xmpp.php:45
-msgid ""
-"If enabled, members will automatically login to an ejabberd server that has "
-"to be installed on this machine with synchronized credentials via the "
-"\"auth_ejabberd.php\" script."
-msgstr ""
+#: ../../include/conversation.php:1317 ../../Zotlabs/Lib/ThreadItem.php:881
+#: ../../Zotlabs/Module/Chat.php:218
+#: ../../extend/addon/hzaddons/hsse/hsse.php:255
+msgid "Encrypt text"
+msgstr "Krypter tekst"
-#: ../../addon/xmpp/Mod_Xmpp.php:23
-msgid "XMPP settings updated."
-msgstr ""
+#: ../../include/conversation.php:1560 ../../include/taxonomy.php:677
+#: ../../Zotlabs/Module/Photos.php:1129
+msgctxt "noun"
+msgid "Like"
+msgid_plural "Likes"
+msgstr[0] "Liker"
+msgstr[1] "Liker"
-#: ../../addon/xmpp/Mod_Xmpp.php:35
-msgid "XMPP App"
-msgstr ""
+#: ../../include/conversation.php:1563
+msgctxt "noun"
+msgid "Repeat"
+msgid_plural "Repeats"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/xmpp/Mod_Xmpp.php:36
-msgid "Embedded XMPP (Jabber) client"
-msgstr ""
+#: ../../include/conversation.php:1566 ../../Zotlabs/Module/Photos.php:1134
+msgctxt "noun"
+msgid "Dislike"
+msgid_plural "Dislikes"
+msgstr[0] "Liker ikke"
+msgstr[1] "Liker ikke"
-#: ../../addon/xmpp/Mod_Xmpp.php:52
-msgid "Individual credentials"
-msgstr ""
+#: ../../include/conversation.php:1569
+msgctxt "noun"
+msgid "Attending"
+msgid_plural "Attending"
+msgstr[0] "Deltar"
+msgstr[1] "Deltar"
-#: ../../addon/xmpp/Mod_Xmpp.php:58
-msgid "Jabber BOSH server"
-msgstr ""
+#: ../../include/conversation.php:1572
+msgctxt "noun"
+msgid "Not Attending"
+msgid_plural "Not Attending"
+msgstr[0] "Deltar ikke"
+msgstr[1] "Deltar ikke"
-#: ../../addon/xmpp/Mod_Xmpp.php:67
-msgid "XMPP Settings"
-msgstr ""
+#: ../../include/conversation.php:1575
+msgctxt "noun"
+msgid "Undecided"
+msgid_plural "Undecided"
+msgstr[0] "Ikke bestemt"
+msgstr[1] "Ikke bestemt"
-#: ../../include/text.php:547
+#: ../../include/text.php:562
msgid "prev"
msgstr "forrige"
-#: ../../include/text.php:549
+#: ../../include/text.php:564
msgid "first"
msgstr "første"
-#: ../../include/text.php:578
+#: ../../include/text.php:593
msgid "last"
msgstr "siste"
-#: ../../include/text.php:581
+#: ../../include/text.php:596
msgid "next"
msgstr "neste"
-#: ../../include/text.php:599
+#: ../../include/text.php:614
msgid "older"
msgstr "eldre"
-#: ../../include/text.php:601
+#: ../../include/text.php:616
msgid "newer"
msgstr "nyere"
-#: ../../include/text.php:1058 ../../include/features.php:133
-#: ../../Zotlabs/Module/Connections.php:399 ../../Zotlabs/Lib/Apps.php:338
-msgid "Connections"
-msgstr "Forbindelser"
-
-#: ../../include/text.php:1066 ../../Zotlabs/Module/Viewconnections.php:80
+#: ../../include/text.php:1086 ../../Zotlabs/Module/Viewconnections.php:80
#: ../../Zotlabs/Module/Connections.php:306
msgid "Accepts"
msgstr ""
-#: ../../include/text.php:1069 ../../Zotlabs/Module/Viewconnections.php:83
+#: ../../include/text.php:1089 ../../Zotlabs/Module/Viewconnections.php:83
#: ../../Zotlabs/Module/Connections.php:309
msgid "Comments"
msgstr ""
-#: ../../include/text.php:1074 ../../Zotlabs/Module/Viewconnections.php:88
+#: ../../include/text.php:1094 ../../Zotlabs/Module/Viewconnections.php:88
#: ../../Zotlabs/Module/Connections.php:314
msgid "Stream items"
msgstr ""
-#: ../../include/text.php:1079 ../../Zotlabs/Module/Viewconnections.php:93
+#: ../../include/text.php:1099 ../../Zotlabs/Module/Viewconnections.php:93
#: ../../Zotlabs/Module/Connections.php:319
msgid "Wall posts"
msgstr ""
-#: ../../include/text.php:1083 ../../Zotlabs/Module/Viewconnections.php:97
+#: ../../include/text.php:1103 ../../Zotlabs/Module/Viewconnections.php:97
#: ../../Zotlabs/Module/Connections.php:323
msgid "Nothing"
msgstr ""
-#: ../../include/text.php:1096
+#: ../../include/text.php:1116
#, php-format
msgid "View all %s connections"
msgstr "Vis alle %s forbindelser"
-#: ../../include/text.php:1159
+#: ../../include/text.php:1179
#, php-format
msgid "Network: %s"
msgstr ""
-#: ../../include/text.php:1170 ../../include/text.php:1182
-#: ../../include/nav.php:195 ../../include/acl_selectors.php:149
-#: ../../Zotlabs/Widget/Sitesearch.php:37
-#: ../../Zotlabs/Widget/Activity_filter.php:210
-#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:403
-#: ../../Zotlabs/Lib/Apps.php:358
-msgid "Search"
-msgstr "Søk"
-
-#: ../../include/text.php:1262
-msgid "poke"
-msgstr "prikk"
-
-#: ../../include/text.php:1262 ../../include/conversation.php:277
-msgid "poked"
-msgstr "prikket"
-
-#: ../../include/text.php:1263
-msgid "ping"
-msgstr "varsle"
-
-#: ../../include/text.php:1263
-msgid "pinged"
-msgstr "varslet"
-
-#: ../../include/text.php:1292
-msgid "happy"
-msgstr "glad"
-
-#: ../../include/text.php:1293
-msgid "sad"
-msgstr "trist"
-
-#: ../../include/text.php:1294
-msgid "mellow"
-msgstr "dempet"
-
-#: ../../include/text.php:1295
-msgid "tired"
-msgstr "trøtt"
-
-#: ../../include/text.php:1296
-msgid "perky"
-msgstr "oppkvikket"
-
-#: ../../include/text.php:1297
-msgid "angry"
-msgstr "sint"
-
-#: ../../include/text.php:1298
-msgid "stupefied"
-msgstr "lamslått"
-
-#: ../../include/text.php:1299
-msgid "puzzled"
-msgstr "forundret"
-
-#: ../../include/text.php:1300
-msgid "interested"
-msgstr "interessert"
-
-#: ../../include/text.php:1301
-msgid "bitter"
-msgstr "bitter"
-
-#: ../../include/text.php:1302
-msgid "cheerful"
-msgstr "munter"
-
-#: ../../include/text.php:1303
-msgid "alive"
-msgstr "levende"
-
-#: ../../include/text.php:1304
-msgid "annoyed"
-msgstr "irritert"
-
-#: ../../include/text.php:1305
-msgid "anxious"
-msgstr "nervøs"
-
-#: ../../include/text.php:1306
-msgid "cranky"
-msgstr "gretten"
-
-#: ../../include/text.php:1307
-msgid "disturbed"
-msgstr "foruroliget"
-
-#: ../../include/text.php:1308
-msgid "frustrated"
-msgstr "frustrert"
-
-#: ../../include/text.php:1309
-msgid "depressed"
-msgstr "lei seg"
-
-#: ../../include/text.php:1310
-msgid "motivated"
-msgstr "motivert"
-
-#: ../../include/text.php:1311
-msgid "relaxed"
-msgstr "avslappet"
-
-#: ../../include/text.php:1312
-msgid "surprised"
-msgstr "overrasket"
+#: ../../include/text.php:1191 ../../include/text.php:1203
+#: ../../Zotlabs/Module/Rbmark.php:29 ../../Zotlabs/Module/Rbmark.php:85
+#: ../../Zotlabs/Module/Filer.php:54
+#: ../../Zotlabs/Module/Admin/Queueworker.php:115
+#: ../../Zotlabs/Module/Admin/Profs.php:95
+#: ../../Zotlabs/Module/Admin/Profs.php:115
+#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:120
+#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:116
+msgid "Save"
+msgstr "Lagre"
-#: ../../include/text.php:1500 ../../include/js_strings.php:100
+#: ../../include/text.php:1499 ../../include/js_strings.php:100
msgid "Monday"
msgstr "mandag"
-#: ../../include/text.php:1500 ../../include/js_strings.php:101
+#: ../../include/text.php:1499 ../../include/js_strings.php:101
msgid "Tuesday"
msgstr "tirsdag"
-#: ../../include/text.php:1500 ../../include/js_strings.php:102
+#: ../../include/text.php:1499 ../../include/js_strings.php:102
msgid "Wednesday"
msgstr "onsdag"
-#: ../../include/text.php:1500 ../../include/js_strings.php:103
+#: ../../include/text.php:1499 ../../include/js_strings.php:103
msgid "Thursday"
msgstr "torsdag"
-#: ../../include/text.php:1500 ../../include/js_strings.php:104
+#: ../../include/text.php:1499 ../../include/js_strings.php:104
msgid "Friday"
msgstr "fredag"
-#: ../../include/text.php:1500 ../../include/js_strings.php:105
+#: ../../include/text.php:1499 ../../include/js_strings.php:105
msgid "Saturday"
msgstr "lørdag"
-#: ../../include/text.php:1500 ../../include/js_strings.php:99
+#: ../../include/text.php:1499 ../../include/js_strings.php:99
msgid "Sunday"
msgstr "søndag"
-#: ../../include/text.php:1504 ../../include/js_strings.php:75
+#: ../../include/text.php:1503 ../../include/js_strings.php:75
msgid "January"
msgstr "januar"
-#: ../../include/text.php:1504 ../../include/js_strings.php:76
+#: ../../include/text.php:1503 ../../include/js_strings.php:76
msgid "February"
msgstr "februar"
-#: ../../include/text.php:1504 ../../include/js_strings.php:77
+#: ../../include/text.php:1503 ../../include/js_strings.php:77
msgid "March"
msgstr "mars"
-#: ../../include/text.php:1504 ../../include/js_strings.php:78
+#: ../../include/text.php:1503 ../../include/js_strings.php:78
msgid "April"
msgstr "april"
-#: ../../include/text.php:1504
+#: ../../include/text.php:1503
msgid "May"
msgstr "mai"
-#: ../../include/text.php:1504 ../../include/js_strings.php:80
+#: ../../include/text.php:1503 ../../include/js_strings.php:80
msgid "June"
msgstr "juni"
-#: ../../include/text.php:1504 ../../include/js_strings.php:81
+#: ../../include/text.php:1503 ../../include/js_strings.php:81
msgid "July"
msgstr "juli"
-#: ../../include/text.php:1504 ../../include/js_strings.php:82
+#: ../../include/text.php:1503 ../../include/js_strings.php:82
msgid "August"
msgstr "august"
-#: ../../include/text.php:1504 ../../include/js_strings.php:83
+#: ../../include/text.php:1503 ../../include/js_strings.php:83
msgid "September"
msgstr "september"
-#: ../../include/text.php:1504 ../../include/js_strings.php:84
+#: ../../include/text.php:1503 ../../include/js_strings.php:84
msgid "October"
msgstr "oktober"
-#: ../../include/text.php:1504 ../../include/js_strings.php:85
+#: ../../include/text.php:1503 ../../include/js_strings.php:85
msgid "November"
msgstr "november"
-#: ../../include/text.php:1504 ../../include/js_strings.php:86
+#: ../../include/text.php:1503 ../../include/js_strings.php:86
msgid "December"
msgstr "desember"
-#: ../../include/text.php:1578
+#: ../../include/text.php:1577
#, fuzzy
#| msgid "Unknown Attachment"
msgid "Unknown attachment"
msgstr "Ukjent vedlegg"
-#: ../../include/text.php:1581 ../../Zotlabs/Module/Sharedwithme.php:109
-#: ../../Zotlabs/Storage/Browser.php:382
+#: ../../include/text.php:1580 ../../Zotlabs/Storage/Browser.php:383
+#: ../../Zotlabs/Module/Sharedwithme.php:109
msgid "Size"
msgstr "Størrelse"
-#: ../../include/text.php:1581 ../../include/feedutils.php:871
-msgid "unknown"
-msgstr "ukjent"
-
#: ../../include/text.php:1623
msgid "remove category"
msgstr "fjern kategori"
-#: ../../include/text.php:1700
+#: ../../include/text.php:1701
msgid "remove from file"
msgstr "fjern fra fil"
-#: ../../include/text.php:1887
+#: ../../include/text.php:1888
msgid "Download binary/encrypted content"
msgstr ""
-#: ../../include/text.php:1945 ../../include/text.php:1954
-#: ../../include/text.php:1981 ../../include/text.php:1990
+#: ../../include/text.php:1946 ../../include/text.php:1955
+#: ../../include/text.php:1982 ../../include/text.php:1991
#, php-format
msgctxt "noun"
msgid "%d Vote"
@@ -4333,7 +2435,7 @@ msgid_plural "%d Votes"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/text.php:1997
+#: ../../include/text.php:1998
#, php-format
msgctxt "noun"
msgid "%d Vote in total"
@@ -4341,617 +2443,196 @@ msgid_plural "%d Votes in total"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/text.php:2003
+#: ../../include/text.php:2004
msgid "Poll has ended"
msgstr "Spørreskjema har utløpt"
-#: ../../include/text.php:2006
+#: ../../include/text.php:2007
#, php-format
msgid "Poll ends in %s"
msgstr "Spørreskjema utløper om %s"
-#: ../../include/text.php:2013 ../../Zotlabs/Lib/ThreadItem.php:446
+#: ../../include/text.php:2014 ../../Zotlabs/Lib/ThreadItem.php:471
msgid "Vote"
msgstr ""
-#: ../../include/text.php:2168
+#: ../../include/text.php:2174
msgid "Link to Source"
msgstr "Lenke til kilde"
-#: ../../include/text.php:2193 ../../include/language.php:433
-msgid "default"
-msgstr "standard"
-
-#: ../../include/text.php:2201
+#: ../../include/text.php:2207
msgid "Page layout"
msgstr "Sidens layout"
-#: ../../include/text.php:2201
+#: ../../include/text.php:2207
msgid "You can create your own with the layouts tool"
msgstr "Du kan lage din egen med layout-verktøyet"
-#: ../../include/text.php:2212
+#: ../../include/text.php:2217
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:368
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68
+msgid "BBcode"
+msgstr "BBcode"
+
+#: ../../include/text.php:2218
msgid "HTML"
msgstr ""
-#: ../../include/text.php:2215
+#: ../../include/text.php:2219
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:368
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68
+#: ../../extend/addon/hzaddons/mdpost/mdpost.php:41
+msgid "Markdown"
+msgstr "Markdown"
+
+#: ../../include/text.php:2220
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68
+msgid "Text"
+msgstr "Tekst"
+
+#: ../../include/text.php:2221
msgid "Comanche Layout"
msgstr ""
-#: ../../include/text.php:2220
+#: ../../include/text.php:2226
msgid "PHP"
msgstr ""
-#: ../../include/text.php:2232
+#: ../../include/text.php:2238
msgid "Page content type"
msgstr "Sidens innholdstype"
-#: ../../include/text.php:2355 ../../include/event.php:1356
-#: ../../include/conversation.php:142
-#: ../../Zotlabs/Module/Channel_calendar.php:221
-#: ../../Zotlabs/Module/Like.php:455 ../../Zotlabs/Module/Tagger.php:75
-msgid "event"
-msgstr "hendelse"
-
-#: ../../include/text.php:2358 ../../include/conversation.php:168
-#: ../../include/bbcode.php:566 ../../include/markdown.php:208
-#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3690
-msgid "post"
-msgstr "innlegg"
-
-#: ../../include/text.php:2360 ../../include/conversation.php:170
-#: ../../Zotlabs/Module/Tagger.php:81
-msgid "comment"
-msgstr "kommentar"
-
-#: ../../include/text.php:2365
+#: ../../include/text.php:2371
msgid "activity"
msgstr "aktivitet"
-#: ../../include/text.php:2368
+#: ../../include/text.php:2374
msgid "poll"
msgstr "spørreskjema"
-#: ../../include/text.php:2481
+#: ../../include/text.php:2487
msgid "a-z, 0-9, -, and _ only"
msgstr ""
-#: ../../include/text.php:2786
+#: ../../include/text.php:2795
msgid "Design Tools"
msgstr "Designverktøy"
-#: ../../include/text.php:2789 ../../Zotlabs/Module/Blocks.php:152
+#: ../../include/text.php:2798 ../../Zotlabs/Module/Blocks.php:152
msgid "Blocks"
msgstr "Byggeklosser"
-#: ../../include/text.php:2790 ../../Zotlabs/Module/Menu.php:171
+#: ../../include/text.php:2799 ../../Zotlabs/Module/Menu.php:171
msgid "Menus"
msgstr "Menyer"
-#: ../../include/text.php:2791 ../../Zotlabs/Module/Layouts.php:182
+#: ../../include/text.php:2800 ../../Zotlabs/Module/Layouts.php:182
msgid "Layouts"
msgstr "Layout"
-#: ../../include/text.php:2792
+#: ../../include/text.php:2801
msgid "Pages"
msgstr "Sider"
-#: ../../include/text.php:2804
+#: ../../include/text.php:2813
msgid "Import"
msgstr "Importer"
-#: ../../include/text.php:2805
+#: ../../include/text.php:2814
msgid "Import website..."
msgstr ""
-#: ../../include/text.php:2806
+#: ../../include/text.php:2815
msgid "Select folder to import"
msgstr ""
-#: ../../include/text.php:2807
+#: ../../include/text.php:2816
msgid "Import from a zipped folder:"
msgstr ""
-#: ../../include/text.php:2808
+#: ../../include/text.php:2817
msgid "Import from cloud files:"
msgstr ""
-#: ../../include/text.php:2809
+#: ../../include/text.php:2818
msgid "/cloud/channel/path/to/folder"
msgstr ""
-#: ../../include/text.php:2810
+#: ../../include/text.php:2819
msgid "Enter path to website files"
msgstr ""
-#: ../../include/text.php:2811
+#: ../../include/text.php:2820
msgid "Select folder"
msgstr ""
-#: ../../include/text.php:2812
+#: ../../include/text.php:2821
msgid "Export website..."
msgstr ""
-#: ../../include/text.php:2813
+#: ../../include/text.php:2822
msgid "Export to a zip file"
msgstr ""
-#: ../../include/text.php:2814
+#: ../../include/text.php:2823
msgid "website.zip"
msgstr ""
-#: ../../include/text.php:2815
+#: ../../include/text.php:2824
msgid "Enter a name for the zip file."
msgstr ""
-#: ../../include/text.php:2816
+#: ../../include/text.php:2825
msgid "Export to cloud files"
msgstr ""
-#: ../../include/text.php:2817
+#: ../../include/text.php:2826
msgid "/path/to/export/folder"
msgstr ""
-#: ../../include/text.php:2818
+#: ../../include/text.php:2827
msgid "Enter a path to a cloud files destination."
msgstr ""
-#: ../../include/text.php:2819
+#: ../../include/text.php:2828
msgid "Specify folder"
msgstr ""
-#: ../../include/opengraph.php:56
-#, php-format
-msgid "This is the home page of %s."
-msgstr ""
-
-#: ../../include/event.php:33 ../../include/event.php:128
-msgid "l F d, Y \\@ g:i A"
-msgstr "l F d, Y \\@ g:i A"
-
-#: ../../include/event.php:41
-msgid "Starts:"
-msgstr "Starter:"
-
-#: ../../include/event.php:51
-msgid "Finishes:"
-msgstr "Slutter:"
-
-#: ../../include/event.php:63 ../../include/event.php:153
-#: ../../include/channel.php:1631 ../../Zotlabs/Module/Directory.php:354
-msgid "Location:"
-msgstr "Plassering:"
-
-#: ../../include/event.php:128
-msgid "l F d, Y"
-msgstr ""
-
-#: ../../include/event.php:132
-msgid "Start:"
-msgstr ""
+#: ../../include/text.php:3520 ../../view/theme/redbasic/php/config.php:18
+#: ../../Zotlabs/Module/Admin/Site.php:232
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:335
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:359
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:435
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:459
+msgid "Default"
+msgstr "Standard"
-#: ../../include/event.php:136
-msgid "End:"
+#: ../../include/oembed.php:155
+msgid "View PDF"
msgstr ""
-#: ../../include/event.php:1202
-msgid "This event has been added to your calendar."
-msgstr "Denne hendelsen er lagt til i din kalender."
-
-#: ../../include/event.php:1435
-msgid "Not specified"
-msgstr "Ikke spesifisert"
-
-#: ../../include/event.php:1436
-msgid "Needs Action"
-msgstr "Trenger handling"
-
-#: ../../include/event.php:1437
-msgid "Completed"
-msgstr "Ferdig"
-
-#: ../../include/event.php:1438
-msgid "In Process"
-msgstr "Igang"
-
-#: ../../include/event.php:1439
-msgid "Cancelled"
-msgstr "Avbrutt"
+#: ../../include/oembed.php:390
+msgid " by "
+msgstr " av "
-#: ../../include/event.php:1520 ../../include/connections.php:781
-#: ../../Zotlabs/Module/Cdav.php:1373 ../../Zotlabs/Module/Connedit.php:741
+#: ../../include/oembed.php:391
#, fuzzy
-msgid "Mobile"
-msgstr "mobil"
-
-#: ../../include/event.php:1521 ../../include/connections.php:782
-#: ../../Zotlabs/Widget/Notifications.php:43 ../../Zotlabs/Module/Cdav.php:1374
-#: ../../Zotlabs/Module/Connedit.php:742
-msgid "Home"
-msgstr "Hjem"
-
-#: ../../include/event.php:1522 ../../include/connections.php:783
-msgid "Home, Voice"
-msgstr ""
-
-#: ../../include/event.php:1523 ../../include/connections.php:784
-msgid "Home, Fax"
-msgstr ""
-
-#: ../../include/event.php:1524 ../../include/connections.php:785
-#: ../../Zotlabs/Module/Cdav.php:1375 ../../Zotlabs/Module/Connedit.php:743
-msgid "Work"
-msgstr ""
-
-#: ../../include/event.php:1525 ../../include/connections.php:786
-msgid "Work, Voice"
-msgstr ""
-
-#: ../../include/event.php:1526 ../../include/connections.php:787
-msgid "Work, Fax"
-msgstr ""
-
-#: ../../include/event.php:1527 ../../include/event.php:1534
-#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/selectors.php:119 ../../include/selectors.php:155
-#: ../../include/connections.php:788 ../../include/connections.php:795
-#: ../../Zotlabs/Module/Cdav.php:1376 ../../Zotlabs/Module/Connedit.php:744
-#: ../../Zotlabs/Access/PermissionRoles.php:360
-msgid "Other"
-msgstr "Annen"
-
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#: ../../Zotlabs/Module/Settings/Features.php:38
-msgid "Off"
-msgstr "Av"
-
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#: ../../Zotlabs/Module/Settings/Features.php:38
-msgid "On"
+msgid " on "
msgstr "På"
-#: ../../include/features.php:82 ../../include/nav.php:473
-#: ../../include/nav.php:476 ../../Zotlabs/Lib/Apps.php:351
-msgid "Calendar"
-msgstr "Kalender"
-
-#: ../../include/features.php:86
-msgid "Start calendar week on Monday"
-msgstr ""
-
-#: ../../include/features.php:87
-msgid "Default is Sunday"
-msgstr ""
-
-#: ../../include/features.php:94
-msgid "Event Timezone Selection"
-msgstr ""
-
-#: ../../include/features.php:95
-msgid "Allow event creation in timezones other than your own."
-msgstr ""
-
-#: ../../include/features.php:104
-msgid "Channel Home"
-msgstr "Kanalhjem"
-
-#: ../../include/features.php:108
-msgid "Search by Date"
-msgstr "Søk etter dato"
-
-#: ../../include/features.php:109
-msgid "Ability to select posts by date ranges"
-msgstr "Mulighet for å velge innlegg etter datoområde"
-
-#: ../../include/features.php:116
-msgid "Tag Cloud"
-msgstr "Merkelappsky"
-
-#: ../../include/features.php:117
-msgid "Provide a personal tag cloud on your channel page"
-msgstr "Tilby en personlig merkelappsky på din kanalside"
-
-#: ../../include/features.php:124 ../../include/features.php:358
-msgid "Use blog/list mode"
-msgstr "Bruk blogg/listemodus"
-
-#: ../../include/features.php:125 ../../include/features.php:359
-msgid "Comments will be displayed separately"
-msgstr "Kommentarer blir vist separat fra innlegget"
-
-#: ../../include/features.php:137
-msgid "Connection Filtering"
-msgstr "Filtrer forbindelser"
-
-#: ../../include/features.php:138
-msgid "Filter incoming posts from connections based on keywords/content"
-msgstr ""
-"Filtrer innkommende innlegg fra forbindelser basert på nøkkelord/innhold"
-
-#: ../../include/features.php:146
-msgid "Conversation"
-msgstr ""
-
-#: ../../include/features.php:158
-msgid "Emoji Reactions"
-msgstr ""
-
-#: ../../include/features.php:159
-msgid "Add emoji reaction ability to posts"
-msgstr ""
-
-#: ../../include/features.php:166
-msgid "Dislike Posts"
-msgstr "Mislik innlegg"
-
-#: ../../include/features.php:167
-msgid "Ability to dislike posts/comments"
-msgstr "Mulighet til å mislike innlegg/kommentarer"
-
-#: ../../include/features.php:174
-msgid "Star Posts"
-msgstr "Stjerneinnlegg"
-
-#: ../../include/features.php:175
-msgid "Ability to mark special posts with a star indicator"
-msgstr "Mulighet til å merke spesielle innlegg med en stjerne"
-
-#: ../../include/features.php:182
-msgid "Reply on comment"
-msgstr ""
-
-#: ../../include/features.php:183
-msgid "Ability to reply on selected comment"
-msgstr ""
-
-#: ../../include/features.php:192 ../../Zotlabs/Lib/Apps.php:352
-msgid "Directory"
-msgstr "Katalog"
-
-#: ../../include/features.php:196
-msgid "Advanced Directory Search"
-msgstr "Avansert katalogsøk"
-
-#: ../../include/features.php:197
-msgid "Allows creation of complex directory search queries"
-msgstr "Gjør det mulig å bruke avanserte kriterier ved søk i katalogen"
-
-#: ../../include/features.php:206
-msgid "Editor"
-msgstr ""
-
-#: ../../include/features.php:210
-msgid "Post Categories"
-msgstr "Innleggskategorier"
-
-#: ../../include/features.php:211
-msgid "Add categories to your posts"
-msgstr "Legg kategorier til dine innlegg"
-
-#: ../../include/features.php:218
-msgid "Large Photos"
-msgstr "Store bilder"
-
-#: ../../include/features.php:219
-msgid ""
-"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
-"(640px) photo thumbnails"
-msgstr ""
-"Inkluder store (1024px) småbilder i innlegg. Hvis denne ikke er påskrudd, "
-"bruk små (640px) småbilder"
-
-#: ../../include/features.php:226
-msgid "Even More Encryption"
-msgstr "Enda mer kryptering"
-
-#: ../../include/features.php:227
-msgid ""
-"Allow optional encryption of content end-to-end with a shared secret key"
-msgstr ""
-"Tillat valgfri kryptering av innhold ende-til-ende via en delt hemmelig "
-"nøkkel"
-
-#: ../../include/features.php:234
-msgid "Disable Comments"
-msgstr "Slå av kommentarer"
-
-#: ../../include/features.php:235
-msgid "Provide the option to disable comments for a post"
-msgstr "Slår på valg for å ikke tillate kommentarer til innlegget"
-
-#: ../../include/features.php:242
-msgid "Delayed Posting"
-msgstr "Tidfest publisering"
-
-#: ../../include/features.php:243
-msgid "Allow posts to be published at a later date"
-msgstr "Tillat innlegg å bli publisert på et senere tidspunkt"
-
-#: ../../include/features.php:250
-msgid "Content Expiration"
-msgstr "Innholdet utløper"
-
-#: ../../include/features.php:251
-msgid "Remove posts/comments and/or private messages at a future time"
-msgstr ""
-"Fjern innlegg/kommentarer og/eller private meldinger på et angitt tidspunkt "
-"i fremtiden"
-
-#: ../../include/features.php:258
-msgid "Suppress Duplicate Posts/Comments"
-msgstr "Forhindre duplikat av innlegg/kommentarer"
-
-#: ../../include/features.php:259
-msgid ""
-"Prevent posts with identical content to be published with less than two "
-"minutes in between submissions."
-msgstr ""
-"Forhindre innlegg med identisk innhold fra å bli publisert hvis det er "
-"mindre enn to minutter mellom innsendingene."
-
-#: ../../include/features.php:266
-msgid "Auto-save drafts of posts and comments"
-msgstr "Automatisk lagring av kladd for innlegg og kommentarer"
-
-#: ../../include/features.php:267
-msgid ""
-"Automatically saves post and comment drafts in local browser storage to help "
-"prevent accidental loss of compositions"
-msgstr ""
-"Lagrer automatisk utkast til innlegg og kommentarer i nettleserens interne "
-"lager for å unngå å tape innholet ved et uhell"
-
-#: ../../include/features.php:276
-msgid "Manage"
-msgstr ""
-
-#: ../../include/features.php:280
-msgid "Navigation Channel Select"
-msgstr "Navigasjon kanalvalg"
-
-#: ../../include/features.php:281
-msgid "Change channels directly from within the navigation dropdown menu"
-msgstr "Endre kanaler direkte fra navigasjonsmenyen"
-
-#: ../../include/features.php:290 ../../Zotlabs/Widget/Notifications.php:23
-#: ../../Zotlabs/Module/Connections.php:347
-msgid "Network"
-msgstr "Nettverk"
-
-#: ../../include/features.php:294
-msgid "Events Filter"
-msgstr "Arrangementsfilter"
-
-#: ../../include/features.php:295
-msgid "Ability to display only events"
-msgstr "Mulighet for kun å vise arrangementer"
-
-#: ../../include/features.php:302
-msgid "Polls Filter"
-msgstr "Filer for Spørreskjema"
-
-#: ../../include/features.php:303
-msgid "Ability to display only polls"
-msgstr "Mulighet for å kun vise spørreskjema"
-
-#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89
-msgid "Saved Searches"
-msgstr "Lagrede søk"
-
-#: ../../include/features.php:311
-msgid "Save search terms for re-use"
-msgstr "Lagre søkeuttrykk for senere bruk"
-
-#: ../../include/features.php:318 ../../include/contact_widgets.php:53
-#: ../../Zotlabs/Widget/Activity_filter.php:196
-#: ../../Zotlabs/Widget/Filer.php:33
-msgid "Saved Folders"
-msgstr "Lagrede mapper"
-
-#: ../../include/features.php:319
-msgid "Ability to file posts under folders"
-msgstr "Mulighet til å sortere innlegg i mapper"
-
-#: ../../include/features.php:326
-msgid "Alternate Stream Order"
-msgstr "Alternativer for sortering"
-
-#: ../../include/features.php:327
-msgid ""
-"Ability to order the stream by last post date, last comment date or "
-"unthreaded activities"
-msgstr ""
-"Mulighet for å sortere tidslinjen etter dato for siste innlegg, siste "
-"kommentar eller som separate aktiviteter"
-
-#: ../../include/features.php:334
-msgid "Contact Filter"
-msgstr "Kontaktfilter"
-
-#: ../../include/features.php:335
-msgid "Ability to display only posts of a selected contact"
-msgstr "Mulighet for å kun vise innlegg fra en bestemt kontakt"
-
-#: ../../include/features.php:342
-msgid "Forum Filter"
-msgstr "Forumfilter"
-
-#: ../../include/features.php:343
-msgid "Ability to display only posts of a specific forum"
-msgstr "Mulighet for å kun vise innlegg i et bestemt forum"
-
-#: ../../include/features.php:350
-msgid "Personal Posts Filter"
-msgstr "Filter for personlige innlegg"
-
-#: ../../include/features.php:351
-msgid "Ability to display only posts that you've interacted on"
-msgstr "Mulighet til å vise kun innlegg du har deltatt på"
-
-#: ../../include/features.php:368 ../../include/nav.php:454
-#: ../../Zotlabs/Widget/Channel_activities.php:93
-#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:350
-msgid "Photos"
-msgstr "Bilder"
-
-#: ../../include/features.php:372
-msgid "Photo Location"
-msgstr "Bildeplassering"
-
-#: ../../include/features.php:373
-msgid "If location data is available on uploaded photos, link this to a map."
-msgstr ""
-"Hvis plasseringsdata er tilgjengelige i opplastede bilder, plasser dette på "
-"et kart."
-
-#: ../../include/features.php:380
-msgid "Flag Adult Photos"
-msgstr ""
-
-#: ../../include/features.php:381
-msgid ""
-"Provide photo edit option to hide inappropriate photos from default album "
-"view"
-msgstr ""
-
-#: ../../include/features.php:390 ../../Zotlabs/Module/Contactedit.php:444
-#: ../../Zotlabs/Lib/Apps.php:368
-msgid "Profiles"
-msgstr ""
-
-#: ../../include/features.php:394
-msgid "Advanced Profiles"
-msgstr "Avanserte profiler"
-
-#: ../../include/features.php:395
-msgid "Additional profile sections and selections"
-msgstr "Ytterlige seksjoner og utvalg til profilen"
-
-#: ../../include/features.php:402
-msgid "Profile Import/Export"
-msgstr "Profil-import/-eksport"
-
-#: ../../include/features.php:403
-msgid "Save and load profile details across sites/channels"
-msgstr "Lagre og åpne profildetaljer på tvers av nettsteder/kanaler"
-
-#: ../../include/features.php:410
-msgid "Multiple Profiles"
-msgstr "Flere profiler"
-
-#: ../../include/features.php:411
-msgid "Ability to create multiple profiles"
-msgstr "Mulig å lage flere profiler"
+#: ../../include/oembed.php:424
+msgid "Embedded content"
+msgstr "Innebygget innhold"
-#: ../../include/security.php:633
-msgid ""
-"The form security token was not correct. This probably happened because the "
-"form has been opened for too long (>3 hours) before submitting it."
-msgstr ""
-"Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi "
-"skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn."
+#: ../../include/oembed.php:433
+msgid "Embedding disabled"
+msgstr "Innbygging avskrudd"
#: ../../include/js_strings.php:5
msgid "Delete this item?"
@@ -4961,36 +2642,36 @@ msgstr "Slett dette elementet?"
msgid "Item deleted"
msgstr ""
-#: ../../include/js_strings.php:7 ../../Zotlabs/Module/Photos.php:1092
-#: ../../Zotlabs/Module/Photos.php:1205 ../../Zotlabs/Lib/ThreadItem.php:830
+#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:867
+#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Module/Photos.php:1207
msgid "Comment"
msgstr "Kommentar"
-#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:539
-#, php-format
-msgid "%s show all"
-msgstr ""
+#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:576
+#, fuzzy
+#| msgid "View all"
+msgid "show all"
+msgstr "Vis alle"
#: ../../include/js_strings.php:9
-#, php-format
-msgid "%s show less"
-msgstr ""
+#, fuzzy
+#| msgid "Show Oldest First"
+msgid "show less"
+msgstr "Vis eldste først"
#: ../../include/js_strings.php:10
-#, php-format
-msgid "%s expand"
+msgid "expand"
msgstr ""
#: ../../include/js_strings.php:11
-#, php-format
-msgid "%s collapse"
+msgid "collapse"
msgstr ""
#: ../../include/js_strings.php:12
msgid "Password too short"
msgstr "Passordet er for kort"
-#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:161
+#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:162
msgid "Passwords do not match"
msgstr "Passordene er ikke like"
@@ -5031,6 +2712,113 @@ msgstr "Vurdering"
msgid "Describe (optional)"
msgstr "Beskriv (valgfritt)"
+#: ../../include/js_strings.php:23 ../../view/theme/redbasic/php/config.php:188
+#: ../../Zotlabs/Lib/ThreadItem.php:868 ../../Zotlabs/Storage/Browser.php:386
+#: ../../Zotlabs/Module/Import_items.php:125 ../../Zotlabs/Module/Setup.php:319
+#: ../../Zotlabs/Module/Setup.php:359 ../../Zotlabs/Module/Regate.php:408
+#: ../../Zotlabs/Module/Photos.php:1056 ../../Zotlabs/Module/Photos.php:1095
+#: ../../Zotlabs/Module/Photos.php:1208 ../../Zotlabs/Module/Oauth.php:109
+#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Profiles.php:738
+#: ../../Zotlabs/Module/Invite.php:564 ../../Zotlabs/Module/Sources.php:123
+#: ../../Zotlabs/Module/Sources.php:160 ../../Zotlabs/Module/Group.php:151
+#: ../../Zotlabs/Module/Group.php:160 ../../Zotlabs/Module/Oauth2.php:114
+#: ../../Zotlabs/Module/Chat.php:208 ../../Zotlabs/Module/Chat.php:247
+#: ../../Zotlabs/Module/Appman.php:230 ../../Zotlabs/Module/Connedit.php:714
+#: ../../Zotlabs/Module/Import.php:622 ../../Zotlabs/Module/Pconfig.php:117
+#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Thing.php:357
+#: ../../Zotlabs/Module/Thing.php:409 ../../Zotlabs/Module/Defperms.php:262
+#: ../../Zotlabs/Module/Locs.php:125 ../../Zotlabs/Module/Connect.php:107
+#: ../../Zotlabs/Module/Affinity.php:84
+#: ../../Zotlabs/Module/Filestorage.php:208
+#: ../../Zotlabs/Module/Pdledit.php:137 ../../Zotlabs/Module/Admin/Site.php:402
+#: ../../Zotlabs/Module/Admin/Accounts.php:309
+#: ../../Zotlabs/Module/Admin/Account_edit.php:73
+#: ../../Zotlabs/Module/Admin/Security.php:130
+#: ../../Zotlabs/Module/Admin/Channels.php:169
+#: ../../Zotlabs/Module/Admin/Features.php:66
+#: ../../Zotlabs/Module/Admin/Addons.php:446
+#: ../../Zotlabs/Module/Admin/Profs.php:179
+#: ../../Zotlabs/Module/Admin/Themes.php:174
+#: ../../Zotlabs/Module/Admin/Logs.php:85 ../../Zotlabs/Module/Mitem.php:259
+#: ../../Zotlabs/Module/Email_validation.php:41
+#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Permcats.php:257
+#: ../../Zotlabs/Module/Settings/Channel.php:230
+#: ../../Zotlabs/Module/Settings/Editor.php:42
+#: ../../Zotlabs/Module/Settings/Photos.php:42
+#: ../../Zotlabs/Module/Settings/Profiles.php:52
+#: ../../Zotlabs/Module/Settings/Network.php:62
+#: ../../Zotlabs/Module/Settings/Directory.php:42
+#: ../../Zotlabs/Module/Settings/Channel_home.php:91
+#: ../../Zotlabs/Module/Settings/Calendar.php:42
+#: ../../Zotlabs/Module/Settings/Conversation.php:44
+#: ../../Zotlabs/Module/Settings/Features.php:48
+#: ../../Zotlabs/Module/Settings/Connections.php:42
+#: ../../Zotlabs/Module/Settings/Multifactor.php:85
+#: ../../Zotlabs/Module/Settings/Events.php:42
+#: ../../Zotlabs/Module/Settings/Account.php:109
+#: ../../Zotlabs/Module/Settings/Privacy.php:123
+#: ../../Zotlabs/Module/Settings/Display.php:188
+#: ../../Zotlabs/Module/Settings/Manage.php:43
+#: ../../Zotlabs/Module/Contactedit.php:415
+#: ../../Zotlabs/Module/Contactedit.php:448
+#: ../../extend/addon/hzaddons/cart/cart.php:1424
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:312
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:412
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:410
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:248
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:645
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:132
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:142
+#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:86
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:147
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:341
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:113
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:54
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:191
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:249
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:304
+#: ../../extend/addon/hzaddons/statusnet/statusnet.php:602
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:80
+#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:52
+#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:51
+#: ../../extend/addon/hzaddons/likebanner/likebanner.php:57
+#: ../../extend/addon/hzaddons/piwik/piwik.php:95
+#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:71
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:182
+#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:54
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:101
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:90
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:136
+#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:49
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:78
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:140
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:70
+#: ../../extend/addon/hzaddons/redfiles/redfiles.php:124
+#: ../../extend/addon/hzaddons/mailtest/mailtest.php:100
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:88
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1490
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1549
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1668
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2786
+#: ../../extend/addon/hzaddons/workflow/Settings/Mod_WorkflowSettings.php:94
+#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:59
+#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:63
+#: ../../extend/addon/hzaddons/logrot/logrot.php:35
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:70
+#: ../../extend/addon/hzaddons/faces/Mod_Faces.php:141
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:218
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:907
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:72
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:68
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:96
+#: ../../extend/addon/hzaddons/irc/irc.php:45
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:61
+#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:269
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:72
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:107
+msgid "Submit"
+msgstr "Lagre"
+
#: ../../include/js_strings.php:24
msgid "Please enter a link URL"
msgstr "Vennligst skriv inn en lenke URL"
@@ -5041,9 +2829,9 @@ msgstr ""
"Endringene er ikke lagret. Er du sikker på at du ønsker å forlate denne "
"siden?"
-#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Pubsites.php:54
-#: ../../Zotlabs/Module/Cdav.php:1006 ../../Zotlabs/Module/Profiles.php:479
-#: ../../Zotlabs/Module/Profiles.php:750 ../../Zotlabs/Module/Locs.php:121
+#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Profiles.php:476
+#: ../../Zotlabs/Module/Profiles.php:749 ../../Zotlabs/Module/Pubsites.php:55
+#: ../../Zotlabs/Module/Locs.php:121 ../../Zotlabs/Module/Cdav.php:1006
msgid "Location"
msgstr "Plassering"
@@ -5098,12 +2886,12 @@ msgstr ""
msgid "Pinned"
msgstr ""
-#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:473
+#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:498
msgid "Pin to the top"
msgstr ""
-#: ../../include/js_strings.php:40 ../../Zotlabs/Widget/Pinned.php:160
-#: ../../Zotlabs/Lib/ThreadItem.php:473
+#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:498
+#: ../../Zotlabs/Widget/Pinned.php:151
msgid "Unpin from the top"
msgstr ""
@@ -5305,515 +3093,509 @@ msgstr ""
msgid "Email address not valid"
msgstr ""
-#: ../../include/help.php:81
-msgid "Help:"
-msgstr "Hjelp:"
-
-#: ../../include/help.php:118 ../../include/help.php:126
-#: ../../include/nav.php:181 ../../include/nav.php:325
-#: ../../Zotlabs/Module/Layouts.php:184 ../../Zotlabs/Lib/Apps.php:353
-msgid "Help"
-msgstr "Hjelp"
-
-#: ../../include/help.php:130
-msgid "Not Found"
-msgstr "Ikke funnet"
+#: ../../include/channel.php:50
+msgid "Unable to obtain identity information from database"
+msgstr "Klarer ikke å få tak i identitetsinformasjon fra databasen"
-#: ../../include/photos.php:152
-#, php-format
-msgid "Image exceeds website size limit of %lu bytes"
-msgstr "Bilde overstiger nettstedets størrelsesbegrensning på %lu bytes"
+#: ../../include/channel.php:83
+msgid "Empty name"
+msgstr "Mangler navn"
-#: ../../include/photos.php:163
-msgid "Image file is empty."
-msgstr "Bildefilen er tom."
+#: ../../include/channel.php:86
+msgid "Name too long"
+msgstr "Navnet er for langt"
-#: ../../include/photos.php:197 ../../Zotlabs/Module/Profile_photo.php:275
-#: ../../Zotlabs/Module/Cover_photo.php:241
-msgid "Unable to process image"
-msgstr "Kan ikke behandle bildet"
+#: ../../include/channel.php:203
+msgid "No account identifier"
+msgstr "Ingen kontoidentifikator"
-#: ../../include/photos.php:323
-msgid "Photo storage failed."
-msgstr "Bildelagring mislyktes."
+#: ../../include/channel.php:215 ../../Zotlabs/Module/Register.php:96
+msgid "Nickname is required."
+msgstr "Kallenavn er påkrevd."
-#: ../../include/photos.php:372
-msgid "a new photo"
-msgstr "et nytt bilde"
+#: ../../include/channel.php:229 ../../include/channel.php:668
+#: ../../Zotlabs/Module/Register.php:101 ../../Zotlabs/Module/Changeaddr.php:46
+msgid "Reserved nickname. Please choose another."
+msgstr "Reservert kallenavn. Vennligst velg et annet."
-#: ../../include/photos.php:376
-#, php-format
-msgctxt "photo_upload"
-msgid "%1$s posted %2$s to %3$s"
-msgstr "%1$s la inn %2$s til %3$s"
+#: ../../include/channel.php:234 ../../include/channel.php:673
+#: ../../Zotlabs/Module/Register.php:106 ../../Zotlabs/Module/Changeaddr.php:51
+msgid ""
+"Nickname has unsupported characters or is already being used on this site."
+msgstr ""
+"Kallenavnet inneholder tegn som ikke er støttet eller det er allerede i bruk "
+"på dette nettstedet."
-#: ../../include/photos.php:721 ../../include/nav.php:457
-msgid "Photo Albums"
-msgstr "Fotoalbum"
+#: ../../include/channel.php:300
+msgid "Unable to retrieve created identity"
+msgstr "Klarer ikke å hente den lagede identiteten"
-#: ../../include/photos.php:722 ../../Zotlabs/Module/Photos.php:1338
-#: ../../Zotlabs/Module/Photos.php:1351 ../../Zotlabs/Module/Photos.php:1352
-msgid "Recent Photos"
-msgstr "Nye bilder"
+#: ../../include/channel.php:411
+msgid "Default Profile"
+msgstr "Standardprofil"
-#: ../../include/photos.php:726
-msgid "Upload New Photos"
-msgstr "Last opp nye bilder"
+#: ../../include/channel.php:465 ../../include/channel.php:468
+#: ../../include/selectors.php:138 ../../Zotlabs/Module/Connedit.php:581
+#: ../../Zotlabs/Module/Contactedit.php:283
+#: ../../Zotlabs/Widget/Affinity.php:38
+msgid "Friends"
+msgstr "Venner"
-#: ../../include/network.php:412
-msgid "url: "
+#: ../../include/channel.php:601 ../../include/channel.php:690
+msgid "Unable to retrieve modified identity"
msgstr ""
-#: ../../include/network.php:413
-msgid "error_code: "
+#: ../../include/channel.php:1382
+msgid "Requested channel is not available"
msgstr ""
-#: ../../include/network.php:414
-msgid "error_string: "
-msgstr ""
+#: ../../include/channel.php:1436 ../../Zotlabs/Module/Menu.php:92
+#: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Editlayout.php:31
+#: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Achievements.php:15
+#: ../../Zotlabs/Module/Editwebpage.php:32 ../../Zotlabs/Module/Hcard.php:12
+#: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Webpages.php:39
+#: ../../Zotlabs/Module/Connect.php:17 ../../Zotlabs/Module/Filestorage.php:59
+#: ../../Zotlabs/Module/Profile.php:27
+#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:46
+#: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:49
+#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:42
+msgid "Requested profile is not available."
+msgstr "Forespurt profil er ikke tilgjengelig."
-#: ../../include/network.php:415
-msgid "content-type: "
+#: ../../include/channel.php:1532 ../../Zotlabs/Module/Profiles.php:743
+msgid "Change profile photo"
+msgstr "Endre profilbilde"
+
+#: ../../include/channel.php:1539 ../../include/channel.php:1543
+#: ../../include/menu.php:120 ../../Zotlabs/Lib/Apps.php:617
+#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Module/Menu.php:176
+#: ../../Zotlabs/Module/Editblock.php:114
+#: ../../Zotlabs/Module/Editlayout.php:114 ../../Zotlabs/Module/Oauth.php:171
+#: ../../Zotlabs/Module/Group.php:246 ../../Zotlabs/Module/Layouts.php:191
+#: ../../Zotlabs/Module/Oauth2.php:192 ../../Zotlabs/Module/Editwebpage.php:142
+#: ../../Zotlabs/Module/Thing.php:294 ../../Zotlabs/Module/Blocks.php:158
+#: ../../Zotlabs/Module/Webpages.php:250
+#: ../../Zotlabs/Module/Connections.php:338
+#: ../../Zotlabs/Module/Connections.php:387
+#: ../../Zotlabs/Module/Connections.php:408
+#: ../../Zotlabs/Module/Admin/Profs.php:176 ../../Zotlabs/Widget/Cdav.php:144
+#: ../../Zotlabs/Widget/Cdav.php:181
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:97
+#: ../../extend/addon/hzaddons/articles/articles.php:75
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:214
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:381
+#: ../../extend/addon/hzaddons/cards/cards.php:74
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:99
+msgid "Edit"
+msgstr "Endre"
+
+#: ../../include/channel.php:1540
+msgid "Create New Profile"
+msgstr "Lag ny profil"
+
+#: ../../include/channel.php:1558 ../../Zotlabs/Module/Profiles.php:841
+msgid "Profile Image"
+msgstr "Profilbilde"
+
+#: ../../include/channel.php:1561
+msgid "Visible to everybody"
msgstr ""
-#: ../../include/network.php:1767 ../../include/network.php:1768
-msgid "Friendica"
-msgstr "Friendica"
+#: ../../include/channel.php:1562 ../../Zotlabs/Module/Profiles.php:740
+#: ../../Zotlabs/Module/Profiles.php:845
+msgid "Edit visibility"
+msgstr "Endre synlighet"
-#: ../../include/network.php:1769
-msgid "OStatus"
-msgstr "OStatus"
+#: ../../include/channel.php:1644 ../../include/channel.php:1772
+msgid "Gender:"
+msgstr "Kjønn:"
-#: ../../include/network.php:1770
-msgid "GNU-Social"
+#: ../../include/channel.php:1645 ../../include/channel.php:1818
+msgid "Status:"
+msgstr "Status:"
+
+#: ../../include/channel.php:1646 ../../include/channel.php:1842
+msgid "Homepage:"
+msgstr "Hjemmeside:"
+
+#: ../../include/channel.php:1647 ../../include/channel.php:1844
+#: ../../Zotlabs/Module/Directory.php:368
+msgid "Hometown:"
+msgstr "Hjemby:"
+
+#: ../../include/channel.php:1648
+msgid "Online Now"
+msgstr "Online nå"
+
+#: ../../include/channel.php:1697
+msgid "This channel has not added a profile description yet"
+msgstr "Denne kanalen har ikke lagt til en profilbeskrivelse enda"
+
+#: ../../include/channel.php:1699
+msgid "Change your profile photo"
msgstr ""
-#: ../../include/network.php:1771
-msgid "RSS/Atom"
-msgstr "RSS/Atom"
+#: ../../include/channel.php:1727 ../../include/selectors.php:64
+#: ../../include/selectors.php:81
+#: ../../extend/addon/hzaddons/openid/Mod_Id.php:87
+msgid "Female"
+msgstr "Kvinnelig"
-#: ../../include/network.php:1774
-msgid "Diaspora"
-msgstr "Diaspora"
+#: ../../include/channel.php:1729 ../../include/selectors.php:64
+#: ../../include/selectors.php:81
+#: ../../extend/addon/hzaddons/openid/Mod_Id.php:85
+msgid "Male"
+msgstr "Mannlig"
-#: ../../include/network.php:1775
-msgid "Facebook"
-msgstr "Facebook"
+#: ../../include/channel.php:1731
+msgid "Trans"
+msgstr ""
-#: ../../include/network.php:1776
-msgid "Zot"
-msgstr "Zot"
+#: ../../include/channel.php:1733 ../../include/selectors.php:64
+msgid "Neuter"
+msgstr "Intetkjønn"
-#: ../../include/network.php:1777
-msgid "LinkedIn"
-msgstr "LinkedIn"
+#: ../../include/channel.php:1735 ../../include/selectors.php:64
+msgid "Non-specific"
+msgstr "Ubestemt"
-#: ../../include/network.php:1778
-msgid "XMPP/IM"
-msgstr "XMPP/IM"
+#: ../../include/channel.php:1770
+msgid "Full Name:"
+msgstr "Fullt navn:"
-#: ../../include/network.php:1779
-msgid "MySpace"
-msgstr "MySpace"
+#: ../../include/channel.php:1803
+msgid "j F, Y"
+msgstr "j F, Y"
-#: ../../include/activities.php:42
-msgid " and "
-msgstr " og "
+#: ../../include/channel.php:1804
+msgid "j F"
+msgstr "j F"
-#: ../../include/activities.php:50
-msgid "public profile"
-msgstr "offentlig profil"
+#: ../../include/channel.php:1811
+msgid "Birthday:"
+msgstr "Fødselsdag:"
-#: ../../include/activities.php:59
-#, php-format
-msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
-msgstr "%1$s endret %2$s til &ldquo;%3$s&rdquo;"
+#: ../../include/channel.php:1815 ../../Zotlabs/Module/Directory.php:349
+msgid "Age:"
+msgstr "Alder:"
-#: ../../include/activities.php:60
+#: ../../include/channel.php:1824
#, php-format
-msgid "Visit %1$s's %2$s"
-msgstr "Besøk %1$s sitt %2$s"
+msgid "for %1$d %2$s"
+msgstr "for %1$d %2$s"
+
+#: ../../include/channel.php:1836
+msgid "Tags:"
+msgstr "Merkelapper:"
+
+#: ../../include/channel.php:1840
+msgid "Sexual Preference:"
+msgstr "Seksuell preferanse:"
+
+#: ../../include/channel.php:1846
+msgid "Political Views:"
+msgstr "Politiske synspunkter:"
+
+#: ../../include/channel.php:1848
+msgid "Religion:"
+msgstr "Religion:"
+
+#: ../../include/channel.php:1850 ../../Zotlabs/Module/Directory.php:370
+msgid "About:"
+msgstr "Om:"
+
+#: ../../include/channel.php:1852
+msgid "Hobbies/Interests:"
+msgstr "Hobbyer/interesser:"
+
+#: ../../include/channel.php:1854
+msgid "Likes:"
+msgstr "Liker:"
+
+#: ../../include/channel.php:1856
+msgid "Dislikes:"
+msgstr "Misliker:"
+
+#: ../../include/channel.php:1858
+msgid "Contact information and Social Networks:"
+msgstr "Kontaktinformasjon og sosiale nettverk:"
+
+#: ../../include/channel.php:1860
+msgid "My other channels:"
+msgstr "Mine andre kanaler:"
+
+#: ../../include/channel.php:1862
+msgid "Musical interests:"
+msgstr "Musikkinteresse:"
+
+#: ../../include/channel.php:1864
+msgid "Books, literature:"
+msgstr "Bøker, litteratur:"
+
+#: ../../include/channel.php:1866
+msgid "Television:"
+msgstr "TV:"
+
+#: ../../include/channel.php:1868
+msgid "Film/dance/culture/entertainment:"
+msgstr "Film/dans/kultur/underholdning:"
+
+#: ../../include/channel.php:1870
+msgid "Love/Romance:"
+msgstr "Kjærlighet/romantikk:"
+
+#: ../../include/channel.php:1872
+msgid "Work/employment:"
+msgstr "Arbeid/sysselsetting:"
+
+#: ../../include/channel.php:1874
+msgid "School/education:"
+msgstr "Skole/utdannelse:"
+
+#: ../../include/channel.php:1895 ../../Zotlabs/Lib/Apps.php:366
+#: ../../Zotlabs/Module/Profperm.php:114
+msgid "Profile"
+msgstr "Profil"
-#: ../../include/activities.php:63
+#: ../../include/channel.php:1897
+msgid "Like this thing"
+msgstr "Lik denne tingen"
+
+#: ../../include/channel.php:1898
+msgid "Export"
+msgstr "Eksport"
+
+#: ../../include/channel.php:2351
+msgid "cover photo"
+msgstr "forsidebilde"
+
+#: ../../include/channel.php:2632 ../../boot.php:1761
+#: ../../Zotlabs/Module/Rmagic.php:96
+msgid "Remote Authentication"
+msgstr "Fjernautentisering"
+
+#: ../../include/channel.php:2633 ../../Zotlabs/Module/Rmagic.php:97
+msgid "Enter your channel address (e.g. channel@example.com)"
+msgstr "Skriv din kanaladresse (for eksempel channel@exampel.com)"
+
+#: ../../include/channel.php:2634 ../../Zotlabs/Module/Rmagic.php:98
+msgid "Authenticate"
+msgstr "Autentiser"
+
+#: ../../include/channel.php:2794 ../../Zotlabs/Module/Admin/Accounts.php:184
#, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
-msgstr "%1$s har oppdatert %2$s, endret %3$s."
+msgid "Account '%s' deleted"
+msgstr "Kontoen '%s' slettet"
-#: ../../include/contact_widgets.php:11
+#: ../../include/contact_widgets.php:13
#, php-format
msgid "%d invitation available"
msgid_plural "%d invitations available"
msgstr[0] "%d invitasjon tilgjengelig"
msgstr[1] "%d invitasjoner tilgjengelig"
-#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
-#: ../../Zotlabs/Module/Admin/Site.php:419
+#: ../../include/contact_widgets.php:18 ../../include/acl_selectors.php:145
+#: ../../Zotlabs/Module/Admin/Site.php:406
msgid "Advanced"
msgstr "Avansert"
-#: ../../include/contact_widgets.php:19
+#: ../../include/contact_widgets.php:21
msgid "Find Channels"
msgstr "Finn kanaler"
-#: ../../include/contact_widgets.php:20
+#: ../../include/contact_widgets.php:22
msgid "Enter name or interest"
msgstr "Skriv navn eller interesse"
-#: ../../include/contact_widgets.php:21
+#: ../../include/contact_widgets.php:23
msgid "Connect/Follow"
msgstr "Forbindelse/Følg"
-#: ../../include/contact_widgets.php:22
+#: ../../include/contact_widgets.php:24
msgid "Examples: Robert Morgenstein, Fishing"
msgstr "Eksempler: Ola Nordmann, fisking"
-#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:435
+#: ../../include/contact_widgets.php:25 ../../Zotlabs/Module/Directory.php:435
#: ../../Zotlabs/Module/Directory.php:440
#: ../../Zotlabs/Module/Connections.php:407
msgid "Find"
msgstr "Finn"
-#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Directory.php:439
-#: ../../Zotlabs/Module/Suggest.php:77
+#: ../../include/contact_widgets.php:26 ../../Zotlabs/Module/Suggest.php:77
+#: ../../Zotlabs/Module/Directory.php:439
msgid "Channel Suggestions"
msgstr "Kanalforslag"
-#: ../../include/contact_widgets.php:26
+#: ../../include/contact_widgets.php:28
msgid "Random Profile"
msgstr "Tilfeldig profil"
-#: ../../include/contact_widgets.php:27
+#: ../../include/contact_widgets.php:29
msgid "Invite Friends"
msgstr "Inviter venner"
-#: ../../include/contact_widgets.php:29
+#: ../../include/contact_widgets.php:31
msgid "Advanced example: name=fred and country=iceland"
msgstr "Avansert eksempel: navn=fred og land=island"
-#: ../../include/contact_widgets.php:182
+#: ../../include/contact_widgets.php:58 ../../include/contact_widgets.php:121
+#: ../../include/contact_widgets.php:155 ../../Zotlabs/Widget/Filer.php:36
+#: ../../Zotlabs/Widget/Appcategories.php:52
+#: ../../extend/addon/hzaddons/articles/Widget/Articles_categories.php:83
+#: ../../extend/addon/hzaddons/cards/Widget/Cards_categories.php:83
+msgid "Everything"
+msgstr "Alt"
+
+#: ../../include/contact_widgets.php:118 ../../include/contact_widgets.php:152
+#: ../../include/taxonomy.php:425 ../../include/taxonomy.php:507
+#: ../../include/taxonomy.php:527 ../../include/taxonomy.php:548
+#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:392
+#: ../../Zotlabs/Storage/Browser.php:407 ../../Zotlabs/Module/Cdav.php:1062
+#: ../../extend/addon/hzaddons/articles/Widget/Articles_categories.php:80
+#: ../../extend/addon/hzaddons/cards/Widget/Cards_categories.php:80
+msgid "Categories"
+msgstr "Kategorier"
+
+#: ../../include/contact_widgets.php:185
msgid "Common Connections"
msgstr ""
-#: ../../include/contact_widgets.php:186
+#: ../../include/contact_widgets.php:189
#, php-format
msgid "View all %d common connections"
msgstr ""
-#: ../../include/language.php:446
-msgid "Select an alternate language"
-msgstr "Velg et annet språk"
-
-#: ../../include/import.php:30
-msgid "Unable to import a removed channel."
-msgstr ""
-
-#: ../../include/import.php:56
+#: ../../include/security.php:633
msgid ""
-"Cannot create a duplicate channel identifier on this system. Import failed."
+"The form security token was not correct. This probably happened because the "
+"form has been opened for too long (>3 hours) before submitting it."
msgstr ""
-"Kan ikke lage en kopi av kanal-identifikatoren på dette systemet. Import "
-"mislyktes."
-
-#: ../../include/import.php:122
-msgid "Cloned channel not found. Import failed."
-msgstr "Klonet kanal ble ikke funnet. Import mislyktes."
-
-#: ../../include/nav.php:96
-msgid "Remote authentication"
-msgstr "Fjernautentisering"
-
-#: ../../include/nav.php:96
-msgid "Click to authenticate to your home hub"
-msgstr "Klikk for å godkjennes mot din hjemme-hub"
-
-#: ../../include/nav.php:102 ../../Zotlabs/Widget/Channel_activities.php:239
-#: ../../Zotlabs/Widget/Admin.php:29
-#: ../../Zotlabs/Module/Admin/Channels.php:146
-#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:116
-msgid "Channels"
-msgstr "Kanaler"
-
-#: ../../include/nav.php:102
-msgid "Manage your channels"
-msgstr "Behandle kanalene dine"
-
-#: ../../include/nav.php:105 ../../Zotlabs/Widget/Settings_menu.php:71
-#: ../../Zotlabs/Widget/Newmember.php:58
-#: ../../Zotlabs/Module/Admin/Themes.php:125
-#: ../../Zotlabs/Module/Admin/Addons.php:348 ../../Zotlabs/Lib/Apps.php:344
-msgid "Settings"
-msgstr "Innstillinger"
-
-#: ../../include/nav.php:105
-msgid "Account/Channel Settings"
-msgstr "Konto-/kanalinnstillinger"
-
-#: ../../include/nav.php:111 ../../include/nav.php:141
-#: ../../include/nav.php:162 ../../boot.php:1745
-msgid "Logout"
-msgstr "Logg ut"
-
-#: ../../include/nav.php:111 ../../include/nav.php:141
-msgid "End this session"
-msgstr "Avslutt denne økten"
-
-#: ../../include/nav.php:114
-msgid "Your profile page"
-msgstr "Din profilside"
-
-#: ../../include/nav.php:117 ../../include/channel.php:1530
-#: ../../Zotlabs/Module/Profiles.php:851
-msgid "Edit Profiles"
-msgstr "Endre profiler"
-
-#: ../../include/nav.php:117
-msgid "Manage/Edit profiles"
-msgstr "Håndter/endre profiler"
-
-#: ../../include/nav.php:119 ../../Zotlabs/Widget/Newmember.php:40
-msgid "Edit your profile"
-msgstr "Rediger profil"
-
-#: ../../include/nav.php:126 ../../include/nav.php:130
-#: ../../Zotlabs/Lib/Apps.php:341 ../../boot.php:1746
-msgid "Login"
-msgstr "Logg inn"
-
-#: ../../include/nav.php:126 ../../include/nav.php:130
-msgid "Sign in"
-msgstr "Logg på"
+"Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi "
+"skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn."
-#: ../../include/nav.php:160
-msgid "Take me home"
+#: ../../include/taxonomy.php:326
+msgid "Trending"
msgstr ""
-#: ../../include/nav.php:162
-msgid "Log me out of this site"
-msgstr ""
+#: ../../include/taxonomy.php:326 ../../include/taxonomy.php:465
+#: ../../include/taxonomy.php:486 ../../Zotlabs/Widget/Tagcloud.php:27
+msgid "Tags"
+msgstr "Merkelapper"
-#: ../../include/nav.php:167 ../../Zotlabs/Module/Register.php:542
-#: ../../boot.php:1723
-msgid "Register"
-msgstr "Registrer"
+#: ../../include/taxonomy.php:566
+msgid "Keywords"
+msgstr "Nøkkelord"
-#: ../../include/nav.php:167
-msgid "Create an account"
-msgstr "Lag en konto"
+#: ../../include/taxonomy.php:587
+msgid "have"
+msgstr "har"
-#: ../../include/nav.php:181
-msgid "Help and documentation"
-msgstr "Hjelp og dokumentasjon"
+#: ../../include/taxonomy.php:587
+msgid "has"
+msgstr "har"
-#: ../../include/nav.php:195
-msgid "Search site @name, !forum, #tag, ?docs, content"
-msgstr "Søk etter @navn, !forum, #emne, ?dokumentasjon eller innhold"
+#: ../../include/taxonomy.php:588
+msgid "want"
+msgstr "ønsker"
-#: ../../include/nav.php:201 ../../Zotlabs/Widget/Admin.php:61
-msgid "Admin"
-msgstr "Administrator"
+#: ../../include/taxonomy.php:588
+msgid "wants"
+msgstr "ønsker"
-#: ../../include/nav.php:201
-msgid "Site Setup and Configuration"
-msgstr "Nettstedsoppsett og -konfigurasjon"
+#: ../../include/taxonomy.php:589 ../../Zotlabs/Lib/ThreadItem.php:335
+msgid "like"
+msgstr "liker"
-#: ../../include/nav.php:329 ../../Zotlabs/Widget/Messages.php:36
-#: ../../Zotlabs/Widget/Notifications.php:173
-#: ../../Zotlabs/Module/New_channel.php:157
-#: ../../Zotlabs/Module/New_channel.php:164
-#: ../../Zotlabs/Module/Defperms.php:254
-#, fuzzy
-msgid "Loading"
-msgstr "Laster..."
+#: ../../include/taxonomy.php:589
+msgid "likes"
+msgstr "liker"
-#: ../../include/nav.php:334
-msgid "@name, #tag, ?doc, content"
-msgstr "@navn, #merkelapp, ?dokumentasjon, innhold"
+#: ../../include/taxonomy.php:590 ../../Zotlabs/Lib/ThreadItem.php:336
+msgid "dislike"
+msgstr "misliker"
-#: ../../include/nav.php:335
-msgid "Please wait..."
-msgstr "Vennligst vent..."
+#: ../../include/taxonomy.php:590
+msgid "dislikes"
+msgstr "misliker"
-#: ../../include/nav.php:341 ../../Zotlabs/Lib/Apps.php:328
-msgid "Apps"
-msgstr "Apper"
+#: ../../include/connections.php:174
+msgid "New window"
+msgstr "Nytt vindu"
-#: ../../include/nav.php:342
-msgid "Channel Apps"
-msgstr ""
+#: ../../include/connections.php:175
+msgid "Open the selected location in a different window or browser tab"
+msgstr "Åpne det valgte stedet i et annet vindu eller nettleser-fane"
-#: ../../include/nav.php:343
-msgid "System Apps"
-msgstr ""
+#: ../../include/acl_selectors.php:33
+#: ../../Zotlabs/Lib/PermissionDescription.php:34
+msgid "Visible to your default audience"
+msgstr "Synlig for ditt standard publikum"
-#: ../../include/nav.php:344
-msgid "Pinned Apps"
+#: ../../include/acl_selectors.php:100
+msgid "Profile-Based Privacy Groups"
msgstr ""
-#: ../../include/nav.php:345
-msgid "Featured Apps"
-msgstr "Fremhevede apper"
-
-#: ../../include/nav.php:431 ../../Zotlabs/Module/Admin/Channels.php:154
-#: ../../Zotlabs/Lib/Apps.php:348
-msgid "Channel"
-msgstr "Kanal"
-
-#: ../../include/nav.php:434
-msgid "Status Messages and Posts"
-msgstr "Statusmeldinger og -innlegg"
-
-#: ../../include/nav.php:444 ../../Zotlabs/Module/Help.php:85
-msgid "About"
-msgstr "Om"
-
-#: ../../include/nav.php:447
-msgid "Profile Details"
-msgstr "Profildetaljer"
-
-#: ../../include/nav.php:462 ../../Zotlabs/Widget/Channel_activities.php:125
-#: ../../Zotlabs/Widget/Notifications.php:108
-#: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:345
-#: ../../Zotlabs/Storage/Browser.php:351
-msgid "Files"
-msgstr "Filer"
-
-#: ../../include/nav.php:465
-msgid "Files and Storage"
-msgstr "Filer og lagring"
-
-#: ../../include/nav.php:487 ../../include/nav.php:490
-#: ../../Zotlabs/Widget/Chatroom_list.php:22 ../../Zotlabs/Lib/Apps.php:335
-msgid "Chatrooms"
-msgstr "Chatrom"
+#: ../../include/acl_selectors.php:119
+msgid "Private Forum"
+msgstr ""
-#: ../../include/nav.php:500 ../../Zotlabs/Module/Bookmarks.php:90
-#: ../../Zotlabs/Lib/Apps.php:334
-msgid "Bookmarks"
-msgstr "Bokmerker"
+#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:77
+#: ../../Zotlabs/Widget/Activity_filter.php:130
+#: ../../Zotlabs/Widget/Notifications.php:131
+#: ../../Zotlabs/Widget/Notifications.php:132
+msgid "Forums"
+msgstr "Forum"
-#: ../../include/nav.php:503
-msgid "Saved Bookmarks"
-msgstr "Lagrede bokmerker"
+#: ../../include/acl_selectors.php:136
+#: ../../Zotlabs/Lib/PermissionDescription.php:107
+#: ../../Zotlabs/Module/Settings/Privacy.php:66
+msgid "Only me"
+msgstr "Kun meg"
-#: ../../include/nav.php:511 ../../Zotlabs/Widget/Channel_activities.php:168
-#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/Apps.php:346
-msgid "Webpages"
-msgstr "Websider"
+#: ../../include/acl_selectors.php:143
+msgid "Share with"
+msgstr "Del med"
-#: ../../include/nav.php:514
-msgid "View Webpages"
-msgstr ""
+#: ../../include/acl_selectors.php:144
+msgid "Custom selection"
+msgstr "Tilpasset utvalg"
-#: ../../include/nav.php:525 ../../Zotlabs/Lib/Apps.php:347
-msgid "Wiki"
+#: ../../include/acl_selectors.php:146
+msgid ""
+"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
+"limit the scope of \"Allow\"."
msgstr ""
-#: ../../include/auth.php:197
-msgid "Delegation session ended."
+#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
+msgid "Allow"
msgstr ""
-#: ../../include/auth.php:201
-msgid "Logged out."
-msgstr "Logget ut."
-
-#: ../../include/auth.php:308
-msgid "Email validation is incomplete. Please check your email."
+#: ../../include/acl_selectors.php:148
+msgid "Don't allow"
msgstr ""
-#: ../../include/auth.php:324
-msgid "Failed authentication"
-msgstr "Mislykket autentisering"
-
-#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:56
-#: ../../Zotlabs/Module/Profiles.php:752
-msgid "Miscellaneous"
-msgstr "Forskjellig"
-
-#: ../../include/datetime.php:140
-#, fuzzy
-msgid "Birthday"
-msgstr "Fødselsdag:"
-
-#: ../../include/datetime.php:140
-msgid "Age: "
-msgstr "Alder: "
-
-#: ../../include/datetime.php:140
-msgid "YYYY-MM-DD or MM-DD"
-msgstr "YYYY-MM-DD eller MM-DD"
-
-#: ../../include/datetime.php:238 ../../boot.php:2752
-msgid "never"
-msgstr "aldri"
-
-#: ../../include/datetime.php:244
-msgid "less than a second ago"
-msgstr "for mindre enn ett sekund siden"
-
-#: ../../include/datetime.php:262
-#, php-format
-msgctxt "e.g. 22 hours ago, 1 minute ago"
-msgid "%1$d %2$s ago"
-msgstr "%1$d %2$s siden"
-
-#: ../../include/datetime.php:273
-msgctxt "relative_date"
-msgid "year"
-msgid_plural "years"
-msgstr[0] "år"
-msgstr[1] "år"
-
-#: ../../include/datetime.php:276
-msgctxt "relative_date"
-msgid "month"
-msgid_plural "months"
-msgstr[0] "måned"
-msgstr[1] "måneder"
-
-#: ../../include/datetime.php:279
-msgctxt "relative_date"
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "uke"
-msgstr[1] "uker"
-
-#: ../../include/datetime.php:282
-msgctxt "relative_date"
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dag"
-msgstr[1] "dager"
-
-#: ../../include/datetime.php:285
-msgctxt "relative_date"
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "time"
-msgstr[1] "timer"
-
-#: ../../include/datetime.php:288
-msgctxt "relative_date"
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minutt"
-msgstr[1] "minutter"
-
-#: ../../include/datetime.php:291
-msgctxt "relative_date"
-msgid "second"
-msgid_plural "seconds"
-msgstr[0] "sekund"
-msgstr[1] "sekunder"
+#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Photos.php:671
+#: ../../Zotlabs/Module/Photos.php:1045 ../../Zotlabs/Module/Chat.php:240
+#: ../../Zotlabs/Module/Thing.php:350 ../../Zotlabs/Module/Thing.php:402
+#: ../../Zotlabs/Module/Filestorage.php:195
+#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:261
+msgid "Permissions"
+msgstr "Tillatelser"
-#: ../../include/datetime.php:520
-#, php-format
-msgid "%1$s's birthday"
-msgstr "%1$s sin fødselsdag"
+#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:531
+#: ../../Zotlabs/Storage/Browser.php:415 ../../Zotlabs/Module/Photos.php:1266
+#: ../../Zotlabs/Widget/Pinned.php:154
+msgid "Close"
+msgstr "Lukk"
-#: ../../include/datetime.php:521
+#: ../../include/acl_selectors.php:181
#, php-format
-msgid "Happy Birthday %1$s"
-msgstr "Gratulerer med dagen, %1$s"
+msgid ""
+"Post permissions %s cannot be changed %s after a post is shared.</br />These "
+"permissions set who is allowed to view the post."
+msgstr ""
+"Tillatelsene til innlegget %s kan ikke endres %s etter at innlegget er delt."
+"</br />Disse tillatelsene avgjør hvem som kan se innlegget."
#: ../../include/cdav.php:157
msgid "INVALID EVENT DISMISSED!"
@@ -5824,16 +3606,6 @@ msgstr ""
msgid "Summary: "
msgstr "Sammendrag"
-#: ../../include/cdav.php:158 ../../include/cdav.php:159
-#: ../../include/cdav.php:167 ../../include/conversation.php:1217
-#: ../../Zotlabs/Widget/Album.php:90 ../../Zotlabs/Widget/Pinned.php:275
-#: ../../Zotlabs/Widget/Portfolio.php:99
-#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Module/Photos.php:788
-#: ../../Zotlabs/Module/Photos.php:1245 ../../Zotlabs/Lib/Activity.php:1681
-#: ../../Zotlabs/Lib/Apps.php:1152 ../../Zotlabs/Lib/Apps.php:1236
-msgid "Unknown"
-msgstr "Ukjent"
-
#: ../../include/cdav.php:159
#, fuzzy
msgid "Date: "
@@ -5852,353 +3624,9 @@ msgstr ""
msgid "Name: "
msgstr "Navn"
-#: ../../include/conversation.php:145 ../../Zotlabs/Module/Like.php:184
-msgid "channel"
-msgstr "kanal"
-
-#: ../../include/conversation.php:193
-#, php-format
-msgid "likes %1$s's %2$s"
-msgstr ""
-
-#: ../../include/conversation.php:196
-#, php-format
-msgid "doesn't like %1$s's %2$s"
-msgstr ""
-
-#: ../../include/conversation.php:236 ../../include/conversation.php:238
-#, php-format
-msgid "%1$s is now connected with %2$s"
-msgstr "%1$s er nå forbundet med %2$s"
-
-#: ../../include/conversation.php:273
-#, php-format
-msgid "%1$s poked %2$s"
-msgstr "%1$s prikket %2$s"
-
-#: ../../include/conversation.php:296 ../../Zotlabs/Module/Mood.php:76
-#, php-format
-msgctxt "mood"
-msgid "%1$s is %2$s"
-msgstr "%1$s er %2$s"
-
-#: ../../include/conversation.php:526 ../../Zotlabs/Lib/ThreadItem.php:501
-msgid "This is an unsaved preview"
-msgstr ""
-
-#: ../../include/conversation.php:658 ../../Zotlabs/Module/Photos.php:1108
-msgctxt "title"
-msgid "Likes"
-msgstr "Liker"
-
-#: ../../include/conversation.php:659 ../../Zotlabs/Module/Photos.php:1108
-msgctxt "title"
-msgid "Dislikes"
-msgstr "Liker ikke"
-
-#: ../../include/conversation.php:660 ../../Zotlabs/Widget/Pinned.php:82
-#: ../../Zotlabs/Module/Photos.php:1109
-msgctxt "title"
-msgid "Agree"
-msgstr "Enig"
-
-#: ../../include/conversation.php:661 ../../Zotlabs/Widget/Pinned.php:83
-#: ../../Zotlabs/Module/Photos.php:1109
-msgctxt "title"
-msgid "Disagree"
-msgstr "Uenig"
-
-#: ../../include/conversation.php:662 ../../Zotlabs/Widget/Pinned.php:84
-#: ../../Zotlabs/Module/Photos.php:1109
-msgctxt "title"
-msgid "Abstain"
-msgstr "Avstår"
-
-#: ../../include/conversation.php:663 ../../Zotlabs/Widget/Pinned.php:71
-#: ../../Zotlabs/Module/Photos.php:1110
-msgctxt "title"
-msgid "Attending"
-msgstr "Deltar"
-
-#: ../../include/conversation.php:664 ../../Zotlabs/Widget/Pinned.php:72
-#: ../../Zotlabs/Module/Photos.php:1110
-msgctxt "title"
-msgid "Not attending"
-msgstr "Deltar ikke"
-
-#: ../../include/conversation.php:665 ../../Zotlabs/Widget/Pinned.php:73
-#: ../../Zotlabs/Module/Photos.php:1110
-msgctxt "title"
-msgid "Might attend"
-msgstr "Deltar kanskje"
-
-#: ../../include/conversation.php:735
-msgid "Select"
-msgstr "Velg"
-
-#: ../../include/conversation.php:742 ../../Zotlabs/Lib/ThreadItem.php:263
-msgid "Toggle Star Status"
-msgstr "Skru av og på stjernestatus"
-
-#: ../../include/conversation.php:748
-msgid "Private Message"
-msgstr "Privat melding"
-
-#: ../../include/conversation.php:757 ../../Zotlabs/Widget/Pinned.php:93
-#: ../../Zotlabs/Lib/ThreadItem.php:273
-msgid "Message signature validated"
-msgstr "Innleggets signatur er bekreftet"
-
-#: ../../include/conversation.php:758 ../../Zotlabs/Widget/Pinned.php:94
-#: ../../Zotlabs/Lib/ThreadItem.php:274
-msgid "Message signature incorrect"
-msgstr "Innleggets signatur er feil"
-
-#: ../../include/conversation.php:798
-#: ../../Zotlabs/Module/Admin/Accounts.php:318
-#: ../../Zotlabs/Module/Connections.php:358
-#: ../../Zotlabs/Module/Connections.php:409
-#: ../../Zotlabs/Lib/ThreadItem.php:508
-msgid "Approve"
-msgstr "Godkjenn"
-
-#: ../../include/conversation.php:804
-#, php-format
-msgid "View %s's profile @ %s"
-msgstr "Vis %s sin profile @ %s"
-
-#: ../../include/conversation.php:826
-msgid "Categories:"
-msgstr "Kategorier:"
-
-#: ../../include/conversation.php:827
-msgid "Filed under:"
-msgstr "Sortert under:"
-
-#: ../../include/conversation.php:833 ../../Zotlabs/Widget/Pinned.php:137
-#: ../../Zotlabs/Lib/ThreadItem.php:430
-#, php-format
-msgid "from %s"
-msgstr "fra %s"
-
-#: ../../include/conversation.php:836 ../../Zotlabs/Widget/Pinned.php:140
-#: ../../Zotlabs/Lib/ThreadItem.php:433
-#, php-format
-msgid "last edited: %s"
-msgstr "sist endret: %s"
-
-#: ../../include/conversation.php:837 ../../Zotlabs/Widget/Pinned.php:141
-#: ../../Zotlabs/Lib/ThreadItem.php:434
-#, php-format
-msgid "Expires: %s"
-msgstr "Utløper: %s"
-
-#: ../../include/conversation.php:854 ../../Zotlabs/Module/Photos.php:1074
-#: ../../Zotlabs/Lib/ThreadItem.php:502
-msgid "Please wait"
-msgstr "Vennligst vent"
-
-#: ../../include/conversation.php:955
-msgid "remove"
-msgstr "fjern"
-
-#: ../../include/conversation.php:959
-msgid "Loading..."
-msgstr "Laster..."
-
-#: ../../include/conversation.php:960 ../../Zotlabs/Lib/ThreadItem.php:290
-msgid "Conversation Features"
-msgstr "Samtaleinnstillinger"
-
-#: ../../include/conversation.php:961
-msgid "Delete Selected Items"
-msgstr "Slett valgte elementer"
-
-#: ../../include/conversation.php:997
-msgid "View Source"
-msgstr "Vis kilde"
-
-#: ../../include/conversation.php:1007
-msgid "Follow Thread"
-msgstr "Følg tråd"
-
-#: ../../include/conversation.php:1016
-msgid "Unfollow Thread"
-msgstr "Ikke følg tråd"
-
-#: ../../include/conversation.php:1108 ../../Zotlabs/Module/Connedit.php:501
-msgid "Recent Activity"
-msgstr "Nylig aktivitet"
-
-#: ../../include/conversation.php:1120 ../../include/connections.php:141
-#: ../../include/channel.php:1616 ../../Zotlabs/Widget/Suggestions.php:51
-#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Directory.php:371
-#: ../../Zotlabs/Module/Connections.php:365 ../../Zotlabs/Module/Suggest.php:69
-msgid "Connect"
-msgstr "Koble"
-
-#: ../../include/conversation.php:1132
-msgid "Edit Connection"
-msgstr "Endre forbindelse"
-
-#: ../../include/conversation.php:1144 ../../Zotlabs/Module/Poke.php:181
-#: ../../Zotlabs/Module/Poke.php:185 ../../Zotlabs/Lib/Apps.php:356
-msgid "Poke"
-msgstr "Prikk"
-
-#: ../../include/conversation.php:1219
-#, fuzzy
-#| msgid "Remove this file"
-msgid "Approve this item"
-msgstr "Fjern denne filen"
-
-#: ../../include/conversation.php:1219
-#, fuzzy
-#| msgid "Delete this item?"
-msgid "Delete this item"
-msgstr "Slett dette elementet?"
-
-#: ../../include/conversation.php:1273
-#, php-format
-msgid "%s likes this."
-msgstr "%s liker dette."
-
-#: ../../include/conversation.php:1273
-#, php-format
-msgid "%s doesn't like this."
-msgstr "%s liker ikke dette."
-
-#: ../../include/conversation.php:1277
-#, php-format
-msgid "<span %1$s>%2$d people</span> like this."
-msgid_plural "<span %1$s>%2$d people</span> like this."
-msgstr[0] "<span %1$s>%2$d person</span> liker dette."
-msgstr[1] "<span %1$s>%2$d personer</span> liker dette."
-
-#: ../../include/conversation.php:1279
-#, php-format
-msgid "<span %1$s>%2$d people</span> don't like this."
-msgid_plural "<span %1$s>%2$d people</span> don't like this."
-msgstr[0] "<span %1$s>%2$d person</span> liker ikke dette."
-msgstr[1] "<span %1$s>%2$d personer</span> liker ikke dette."
-
-#: ../../include/conversation.php:1285
-msgid "and"
-msgstr "og"
-
-#: ../../include/conversation.php:1288
-#, php-format
-msgid ", and %d other people"
-msgid_plural ", and %d other people"
-msgstr[0] ", og %d annen person"
-msgstr[1] ", og %d andre personer"
-
-#: ../../include/conversation.php:1289
-#, php-format
-msgid "%s like this."
-msgstr "%s liker dette."
-
-#: ../../include/conversation.php:1289
-#, php-format
-msgid "%s don't like this."
-msgstr "%s liker ikke dette."
-
-#: ../../include/conversation.php:1479
-msgid "Toggle poll"
-msgstr "Spørreskjema (på/av)"
-
-#: ../../include/conversation.php:1480
-msgid "Option"
-msgstr "Valg"
-
-#: ../../include/conversation.php:1481
-msgid "Add option"
-msgstr "Legg til valg"
-
-#: ../../include/conversation.php:1482
-msgid "Minutes"
-msgstr "Minutter"
-
-#: ../../include/conversation.php:1482
-#, fuzzy
-msgid "Hours"
-msgstr "timer"
-
-#: ../../include/conversation.php:1482
-#, fuzzy
-msgid "Days"
-msgstr "dager"
-
-#: ../../include/conversation.php:1483
-msgid "Allow multiple answers"
-msgstr "Tillat flere svar"
-
-#: ../../include/conversation.php:1493
-msgid "Summary (optional)"
-msgstr "Sammendrag (valgfritt)"
-
-#: ../../include/conversation.php:1768 ../../include/taxonomy.php:675
-#: ../../include/channel.php:1779 ../../Zotlabs/Module/Photos.php:1128
-#: ../../Zotlabs/Lib/ThreadItem.php:233
-msgctxt "noun"
-msgid "Like"
-msgid_plural "Likes"
-msgstr[0] "Liker"
-msgstr[1] "Liker"
-
-#: ../../include/conversation.php:1771 ../../Zotlabs/Module/Photos.php:1133
-#: ../../Zotlabs/Lib/ThreadItem.php:239
-msgctxt "noun"
-msgid "Dislike"
-msgid_plural "Dislikes"
-msgstr[0] "Liker ikke"
-msgstr[1] "Liker ikke"
-
-#: ../../include/conversation.php:1774
-msgctxt "noun"
-msgid "Attending"
-msgid_plural "Attending"
-msgstr[0] "Deltar"
-msgstr[1] "Deltar"
-
-#: ../../include/conversation.php:1777
-msgctxt "noun"
-msgid "Not Attending"
-msgid_plural "Not Attending"
-msgstr[0] "Deltar ikke"
-msgstr[1] "Deltar ikke"
-
-#: ../../include/conversation.php:1780
-msgctxt "noun"
-msgid "Undecided"
-msgid_plural "Undecided"
-msgstr[0] "Ikke bestemt"
-msgstr[1] "Ikke bestemt"
-
-#: ../../include/conversation.php:1783
-msgctxt "noun"
-msgid "Agree"
-msgid_plural "Agrees"
-msgstr[0] "Enig"
-msgstr[1] "Enige"
-
-#: ../../include/conversation.php:1786
-msgctxt "noun"
-msgid "Disagree"
-msgid_plural "Disagrees"
-msgstr[0] "Uenig"
-msgstr[1] "Uenige"
-
-#: ../../include/conversation.php:1789
-msgctxt "noun"
-msgid "Abstain"
-msgid_plural "Abstains"
-msgstr[0] "Avstår"
-msgstr[1] "Avstår"
-
#: ../../include/selectors.php:17
msgid "Select a profile to assign to this contact"
-msgstr ""
+msgstr "Velg en profil for denne kontakten"
#: ../../include/selectors.php:45
msgid "Frequently"
@@ -6256,14 +3684,6 @@ msgstr "Transseksuell"
msgid "Hermaphrodite"
msgstr "Hermafroditt"
-#: ../../include/selectors.php:64 ../../include/channel.php:1724
-msgid "Neuter"
-msgstr "Intetkjønn"
-
-#: ../../include/selectors.php:64 ../../include/channel.php:1726
-msgid "Non-specific"
-msgstr "Ubestemt"
-
#: ../../include/selectors.php:64
msgid "Undecided"
msgstr "Ubestemt"
@@ -6356,13 +3776,6 @@ msgstr "Utro"
msgid "Sex Addict"
msgstr "Sexavhengig"
-#: ../../include/selectors.php:138 ../../include/channel.php:456
-#: ../../include/channel.php:459 ../../Zotlabs/Widget/Affinity.php:38
-#: ../../Zotlabs/Module/Contactedit.php:297
-#: ../../Zotlabs/Module/Connedit.php:581
-msgid "Friends"
-msgstr "Venner"
-
#: ../../include/selectors.php:138
msgid "Friends/Benefits"
msgstr "Venner/Frynsegoder"
@@ -6447,1996 +3860,1827 @@ msgstr "Bryr meg ikke"
msgid "Ask me"
msgstr "Spør meg"
-#: ../../include/connections.php:165
-msgid "New window"
-msgstr "Nytt vindu"
+#: ../../include/zid.php:417
+#, php-format
+msgid "OpenWebAuth: %1$s welcomes %2$s"
+msgstr "OpenWebAuth: %1$s ønsker %2$s velkommen"
-#: ../../include/connections.php:166
-msgid "Open the selected location in a different window or browser tab"
-msgstr "Åpne det valgte stedet i et annet vindu eller nettleser-fane"
+#: ../../view/theme/redbasic/php/config.php:19
+#: ../../view/theme/redbasic/php/config.php:22
+msgid "Focus (Hubzilla default)"
+msgstr "Focus (Hubzilla standard)"
-#: ../../include/group.php:23
-msgid ""
-"A deleted group with this name was revived. Existing item permissions "
-"<strong>may</strong> apply to this group and any future members. If this is "
-"not what you intended, please create another group with a different name."
+#: ../../view/theme/redbasic/php/config.php:192
+msgid "Theme settings"
+msgstr "Instillinger for utseende"
+
+#: ../../view/theme/redbasic/php/config.php:193
+msgid "Dark style"
msgstr ""
-"En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende "
-"tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og "
-"fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe "
-"med et annet navn."
-#: ../../include/group.php:271
-msgid "Add new connections to this privacy group"
-msgstr "Legg nye forbindelser i denne personverngruppen"
+#: ../../view/theme/redbasic/php/config.php:194
+msgid "Light style"
+msgstr ""
-#: ../../include/group.php:305
-msgid "edit"
-msgstr "endre"
+#: ../../view/theme/redbasic/php/config.php:195
+msgid "Common settings"
+msgstr ""
-#: ../../include/group.php:327 ../../include/acl_selectors.php:87
-#: ../../Zotlabs/Widget/Activity_filter.php:95
-#: ../../Zotlabs/Module/Group.php:143 ../../Zotlabs/Lib/Apps.php:369
-msgid "Privacy Groups"
-msgstr "Personverngrupper"
+#: ../../view/theme/redbasic/php/config.php:196
+msgid "Primary theme color"
+msgstr ""
-#: ../../include/group.php:328
-msgid "Edit group"
-msgstr "Endre gruppe"
+#: ../../view/theme/redbasic/php/config.php:196
+#: ../../view/theme/redbasic/php/config.php:197
+#: ../../view/theme/redbasic/php/config.php:198
+#: ../../view/theme/redbasic/php/config.php:199
+#: ../../view/theme/redbasic/php/config.php:200
+#, fuzzy
+#| msgid "Leave empty for default width"
+msgid "Current color, leave empty for default"
+msgstr "La feltet stå tomt for å bruke standard bredde"
-#: ../../include/group.php:329
-msgid "Manage privacy groups"
+#: ../../view/theme/redbasic/php/config.php:197
+msgid "Success theme color"
msgstr ""
-#: ../../include/group.php:330
-msgid "Channels not in any privacy group"
-msgstr "Kanaler uten personverngruppe"
-
-#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
-msgid "add"
-msgstr "legg til"
+#: ../../view/theme/redbasic/php/config.php:198
+#, fuzzy
+#| msgid "Link hover color"
+msgid "Info theme color"
+msgstr "Lenkefarge når musepekeren er over"
-#: ../../include/taxonomy.php:324
-msgid "Trending"
-msgstr ""
+#: ../../view/theme/redbasic/php/config.php:199
+#, fuzzy
+#| msgid "Link hover color"
+msgid "Warning theme color"
+msgstr "Lenkefarge når musepekeren er over"
-#: ../../include/taxonomy.php:324 ../../include/taxonomy.php:463
-#: ../../include/taxonomy.php:484 ../../Zotlabs/Widget/Tagcloud.php:27
-msgid "Tags"
-msgstr "Merkelapper"
+#: ../../view/theme/redbasic/php/config.php:200
+#, fuzzy
+#| msgid "Link hover color"
+msgid "Danger theme color"
+msgstr "Lenkefarge når musepekeren er over"
-#: ../../include/taxonomy.php:564
-msgid "Keywords"
-msgstr "Nøkkelord"
+#: ../../view/theme/redbasic/php/config.php:201
+#, fuzzy
+#| msgid "Default photo upload folder"
+msgid "Default to dark mode"
+msgstr "Standard mappe for opplasting av bilder"
-#: ../../include/taxonomy.php:585
-msgid "have"
-msgstr "har"
+#: ../../view/theme/redbasic/php/config.php:202
+msgid "Always use light icons for navbar"
+msgstr ""
-#: ../../include/taxonomy.php:585
-msgid "has"
-msgstr "har"
+#: ../../view/theme/redbasic/php/config.php:202
+msgid "Enable this option if you use a dark navbar color in light mode"
+msgstr ""
-#: ../../include/taxonomy.php:586
-msgid "want"
-msgstr "ønsker"
+#: ../../view/theme/redbasic/php/config.php:203
+msgid "Narrow navbar"
+msgstr "Smal navigasjonslinje"
-#: ../../include/taxonomy.php:586
-msgid "wants"
-msgstr "ønsker"
+#: ../../view/theme/redbasic/php/config.php:204
+msgid "Navigation bar background color"
+msgstr "Navigasjonslinjens bakgrunnsfarge"
-#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:310
-msgid "like"
-msgstr "liker"
+#: ../../view/theme/redbasic/php/config.php:205
+#, fuzzy
+#| msgid "Navigation bar background color"
+msgid "Dark navigation bar background color"
+msgstr "Navigasjonslinjens bakgrunnsfarge"
-#: ../../include/taxonomy.php:587
-msgid "likes"
-msgstr "liker"
+#: ../../view/theme/redbasic/php/config.php:206
+msgid "Set the background color"
+msgstr "Angi bakgrunnsfargen"
-#: ../../include/taxonomy.php:588 ../../Zotlabs/Lib/ThreadItem.php:311
-msgid "dislike"
-msgstr "misliker"
+#: ../../view/theme/redbasic/php/config.php:207
+#, fuzzy
+#| msgid "Set the background color"
+msgid "Set the dark background color"
+msgstr "Angi bakgrunnsfargen"
-#: ../../include/taxonomy.php:588
-msgid "dislikes"
-msgstr "misliker"
+#: ../../view/theme/redbasic/php/config.php:208
+msgid "Set the background image"
+msgstr "Angi bakgrunnsbilde"
-#: ../../include/items.php:1234
-msgid "Visible to anybody on the internet."
-msgstr "Synlig for enhver på Internett."
+#: ../../view/theme/redbasic/php/config.php:209
+#, fuzzy
+#| msgid "Set the background image"
+msgid "Set the dark background image"
+msgstr "Angi bakgrunnsbilde"
-#: ../../include/items.php:1236
-msgid "Visible to you only."
-msgstr "Synlig bare for deg."
+#: ../../view/theme/redbasic/php/config.php:210
+msgid "Set font-size for the entire application"
+msgstr "Angi skriftstørrelsen for hele programmet"
-#: ../../include/items.php:1238
-msgid "Visible to anybody in this network."
-msgstr "Synlig for enhver i dette nettverket."
+#: ../../view/theme/redbasic/php/config.php:210
+msgid "Examples: 1rem, 100%, 16px"
+msgstr "For eksempel: 1rem, 100%, 16px"
-#: ../../include/items.php:1240
-msgid "Visible to anybody authenticated."
-msgstr "Synlig for enhver som er autentisert."
+#: ../../view/theme/redbasic/php/config.php:211
+#, fuzzy
+#| msgid "Set radius of corners"
+msgid "Set radius of corners in rem"
+msgstr "Angi hjørneradius"
-#: ../../include/items.php:1242
-#, php-format
-msgid "Visible to anybody on %s."
-msgstr "Synlig for alle på %s."
+#: ../../view/theme/redbasic/php/config.php:211
+#, fuzzy
+#| msgid "Leave empty for default width"
+msgid "Leave empty for default radius"
+msgstr "La feltet stå tomt for å bruke standard bredde"
-#: ../../include/items.php:1244
-msgid "Visible to all connections."
-msgstr "Synlig for alle forbindelser."
+#: ../../view/theme/redbasic/php/config.php:212
+msgid "Set maximum width of content region in rem"
+msgstr "Set maksbredde for hovedregionen i rem"
-#: ../../include/items.php:1246
-msgid "Visible to approved connections."
-msgstr "Synlig for godkjente forbindelser."
+#: ../../view/theme/redbasic/php/config.php:212
+msgid "Leave empty for default width"
+msgstr "La feltet stå tomt for å bruke standard bredde"
-#: ../../include/items.php:1248
-msgid "Visible to specific connections."
-msgstr "Synlig for spesifikke forbindelser."
+#: ../../view/theme/redbasic/php/config.php:213
+msgid "Set size of conversation author photo"
+msgstr "Angi størrelsen for samtalens forfatterbilde"
-#: ../../include/items.php:3373 ../../Zotlabs/Module/Share.php:104
-#, php-format
-msgid "&#x1f501; Repeated %1$s's %2$s"
-msgstr ""
+#: ../../view/theme/redbasic/php/config.php:213
+#: ../../view/theme/redbasic/php/config.php:214
+#, fuzzy
+#| msgid "Leave empty for default width"
+msgid "Leave empty for default size"
+msgstr "La feltet stå tomt for å bruke standard bredde"
-#: ../../include/items.php:4455 ../../Zotlabs/Module/Group.php:62
-#: ../../Zotlabs/Module/Group.php:206
-msgid "Privacy group not found."
-msgstr "Personverngruppen ble ikke funnet."
+#: ../../view/theme/redbasic/php/config.php:214
+msgid "Set size of followup author photos"
+msgstr "Angi størrelsen på forfatterbilder ved oppfølging"
-#: ../../include/items.php:4471
-msgid "Privacy group is empty."
-msgstr "Personverngruppen er tom."
+#: ../../view/theme/redbasic/php/config.php:215
+msgid "Show advanced settings"
+msgstr "Vis avanserte innstillinger"
-#: ../../include/items.php:4478
-#, php-format
-msgid "Privacy group: %s"
-msgstr "Personverngruppe: %s"
+#: ../../boot.php:1736
+msgid "Create an account to access services and applications"
+msgstr ""
-#: ../../include/items.php:4488
-#, php-format
-msgid "Connection: %s"
-msgstr "Forbindelse: %s"
+#: ../../boot.php:1754
+msgid "Email or nickname"
+msgstr "Epost eller brukernavn"
-#: ../../include/items.php:4490
-msgid "Connection not found."
-msgstr "Forbindelsen ble ikke funnet."
+#: ../../boot.php:1754 ../../extend/addon/hzaddons/redred/Mod_Redred.php:73
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:54
+msgid "Nickname"
+msgstr "Kallenavn"
-#: ../../include/items.php:4837 ../../Zotlabs/Module/Cover_photo.php:297
-msgid "female"
-msgstr "kvinne"
+#: ../../boot.php:1764
+msgid "Password"
+msgstr "Passord"
-#: ../../include/items.php:4838 ../../Zotlabs/Module/Cover_photo.php:298
-#, php-format
-msgid "%1$s updated her %2$s"
-msgstr "%1$s oppdaterte %2$s sitt"
+#: ../../boot.php:1765
+msgid "Remember me"
+msgstr "Husk meg"
-#: ../../include/items.php:4839 ../../Zotlabs/Module/Cover_photo.php:299
-msgid "male"
-msgstr "mann"
+#: ../../boot.php:1768
+msgid "Forgot your password?"
+msgstr "Glemt passordet ditt?"
-#: ../../include/items.php:4840 ../../Zotlabs/Module/Cover_photo.php:300
-#, php-format
-msgid "%1$s updated his %2$s"
-msgstr "%1$s oppdaterte %2$s sitt"
+#: ../../boot.php:1769 ../../Zotlabs/Module/Lostpass.php:91
+msgid "Password Reset"
+msgstr "Tilbakestill passord"
-#: ../../include/items.php:4842 ../../Zotlabs/Module/Cover_photo.php:302
+#: ../../boot.php:2647
#, php-format
-msgid "%1$s updated their %2$s"
-msgstr "%1$s oppdaterte %2$s deres"
+msgid "[$Projectname] Website SSL error for %s"
+msgstr ""
-#: ../../include/items.php:4844
-msgid "profile photo"
-msgstr "profilbilde"
+#: ../../boot.php:2652
+msgid "Website SSL certificate is not valid. Please correct."
+msgstr "Nettstedets SSL-sertifikat er ikke gyldig. Vennligst fiks dette."
-#: ../../include/items.php:5171
+#: ../../boot.php:2768
#, php-format
-msgid "[Edited %s]"
+msgid "[$Projectname] Cron tasks not running on %s"
msgstr ""
-#: ../../include/items.php:5171
-msgctxt "edit_activity"
-msgid "Post"
-msgstr "Innlegg"
-
-#: ../../include/items.php:5171
-msgctxt "edit_activity"
-msgid "Comment"
-msgstr "Kommentar"
+#: ../../boot.php:2773
+msgid "Cron/Scheduled tasks not running."
+msgstr "Cron/planlagte oppgaver kjører ikke."
-#: ../../include/account.php:38
-msgid "The provided email address is not valid"
+#: ../../Zotlabs/Lib/Techlevels.php:10
+msgid "0. Beginner/Basic"
msgstr ""
-#: ../../include/account.php:41
-msgid "The provided email domain is not among those allowed on this site"
+#: ../../Zotlabs/Lib/Techlevels.php:11
+msgid "1. Novice - not skilled but willing to learn"
msgstr ""
-#: ../../include/account.php:48
-msgid "The provided email address is already registered at this site"
+#: ../../Zotlabs/Lib/Techlevels.php:12
+msgid "2. Intermediate - somewhat comfortable"
msgstr ""
-#: ../../include/account.php:55
-msgid ""
-"There is a pending registration for this address - click \"Register\" to "
-"continue verification"
+#: ../../Zotlabs/Lib/Techlevels.php:13
+msgid "3. Advanced - very comfortable"
msgstr ""
-#: ../../include/account.php:94
-msgid "An invitation is required."
-msgstr "En invitasjon er påkrevd."
-
-#: ../../include/account.php:103
-msgid "Invitation could not be verified."
-msgstr "Invitasjon kunne ikke bekreftes."
-
-#: ../../include/account.php:191
-msgid "Please enter the required information."
-msgstr "Vennligst skriv inn nødvendig informasjon."
-
-#: ../../include/account.php:258 ../../include/account.php:366
-msgid "Failed to store account information."
-msgstr "Mislyktes med å lagre kontoinformasjon."
-
-#: ../../include/account.php:435 ../../include/account.php:503
-#: ../../Zotlabs/Module/Register.php:328
-#, php-format
-msgid "Registration confirmation for %s"
-msgstr "Registreringsbekreftelse for %s"
-
-#: ../../include/account.php:578
-#, php-format
-msgid "Registration request at %s"
-msgstr "Registreringsforespørsel hos %s"
-
-#: ../../include/account.php:600
-msgid "your registration password"
-msgstr "ditt registreringspassord"
-
-#: ../../include/account.php:606 ../../include/account.php:695
-#, php-format
-msgid "Registration details for %s"
-msgstr "Registreringsdetaljer for %s"
-
-#: ../../include/account.php:706
-msgid "Account approved."
-msgstr "Konto godkjent."
-
-#: ../../include/account.php:762
-#, php-format
-msgid "Registration revoked for %s"
-msgstr "Registrering trukket tilbake for %s"
-
-#: ../../include/account.php:769
-#, php-format
-msgid "Could not revoke registration for %s"
+#: ../../Zotlabs/Lib/Techlevels.php:14
+msgid "4. Expert - I can write computer code"
msgstr ""
-#: ../../include/account.php:1186 ../../include/account.php:1188
-msgid "Click here to upgrade."
-msgstr "Klikk her for å oppgradere."
-
-#: ../../include/account.php:1194
-msgid "This action exceeds the limits set by your subscription plan."
-msgstr "Denne handlingen går utenfor grensene satt i din abonnementsplan."
-
-#: ../../include/account.php:1199
-msgid "This action is not available under your subscription plan."
-msgstr "Denne handlingen er ikke tilgjengelig i din abonnementsplan."
-
-#: ../../include/account.php:1259
-msgid "open"
+#: ../../Zotlabs/Lib/Techlevels.php:15
+msgid "5. Wizard - I probably know more than you do"
msgstr ""
-#: ../../include/account.php:1259
-msgid "closed"
-msgstr ""
+#: ../../Zotlabs/Lib/Apps.php:330
+msgid "Affinity Tool"
+msgstr "Nærhetsverktøy"
-#: ../../include/account.php:1266
-msgid "Registration is currently"
+#: ../../Zotlabs/Lib/Apps.php:331
+#: ../../extend/addon/hzaddons/articles/articles.php:48
+#: ../../extend/addon/hzaddons/articles/articles.php:160
+#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:228
+msgid "Articles"
msgstr ""
-#: ../../include/account.php:1275
-msgid "please come back"
+#: ../../Zotlabs/Lib/Apps.php:332
+#: ../../extend/addon/hzaddons/cards/cards.php:48
+#: ../../extend/addon/hzaddons/cards/cards.php:160
+#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:209
+msgid "Cards"
msgstr ""
-#: ../../include/photo/photo_driver.php:450
-#: ../../Zotlabs/Module/Profile_photo.php:167
-#: ../../Zotlabs/Module/Profile_photo.php:337
-msgid "Profile Photos"
-msgstr "Profilbilder"
+#: ../../Zotlabs/Lib/Apps.php:333
+msgid "Site Admin"
+msgstr "Nettstedsadministrator"
-#: ../../include/attach.php:273 ../../include/attach.php:324
-#: ../../include/attach.php:426
-msgid "Item was not found."
-msgstr "Elementet ble ikke funnet."
+#: ../../Zotlabs/Lib/Apps.php:334
+#: ../../extend/addon/hzaddons/buglink/buglink.php:16
+msgid "Report Bug"
+msgstr ""
-#: ../../include/attach.php:290
-msgid "Unknown error."
+#: ../../Zotlabs/Lib/Apps.php:337
+msgid "Content Filter"
msgstr ""
-#: ../../include/attach.php:621
-msgid "No source file."
-msgstr "Ingen kildefil."
+#: ../../Zotlabs/Lib/Apps.php:338
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:133
+msgid "Content Import"
+msgstr ""
-#: ../../include/attach.php:643
-msgid "Cannot locate file to replace"
-msgstr "Kan ikke finne filen som skal byttes ut"
+#: ../../Zotlabs/Lib/Apps.php:340
+msgid "Remote Diagnostics"
+msgstr ""
-#: ../../include/attach.php:662
-msgid "Cannot locate file to revise/update"
-msgstr "Finner ikke filen som skal revideres/oppdateres"
+#: ../../Zotlabs/Lib/Apps.php:341
+msgid "Suggest Channels"
+msgstr "Foreslå kanaler"
-#: ../../include/attach.php:808
-#, php-format
-msgid "File exceeds size limit of %d"
-msgstr "Filens størrelse overgår grensen på %d"
+#: ../../Zotlabs/Lib/Apps.php:343
+msgid "Channel Manager"
+msgstr "Kanalstyring"
-#: ../../include/attach.php:829
-#, php-format
-msgid "You have reached your limit of %1$.0f Mbytes attachment storage."
-msgstr "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes."
+#: ../../Zotlabs/Lib/Apps.php:344
+msgid "Stream"
+msgstr "Tidslinje"
-#: ../../include/attach.php:1019
-msgid "File upload failed. Possible system limit or action terminated."
+#: ../../Zotlabs/Lib/Apps.php:348
+msgid "Wiki"
msgstr ""
-"Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt."
-#: ../../include/attach.php:1048
-msgid "Stored file could not be verified. Upload failed."
-msgstr "Lagret fil kunne ikke bekreftes. Opplasting mislyktes."
+#: ../../Zotlabs/Lib/Apps.php:355
+msgid "Mail"
+msgstr "Melding"
-#: ../../include/attach.php:1120 ../../include/attach.php:1136
-msgid "Path not available."
-msgstr "Stien er ikke tilgjengelig."
+#: ../../Zotlabs/Lib/Apps.php:356
+msgid "Chat"
+msgstr "Chat"
-#: ../../include/attach.php:1184 ../../include/attach.php:1349
-msgid "Empty pathname"
-msgstr "Tomt sti-navn"
+#: ../../Zotlabs/Lib/Apps.php:358
+msgid "Probe"
+msgstr "Undersøk"
-#: ../../include/attach.php:1210
-msgid "duplicate filename or path"
-msgstr "duplikat av filnavn eller sti"
+#: ../../Zotlabs/Lib/Apps.php:359
+msgid "Suggest"
+msgstr "Forreslå"
-#: ../../include/attach.php:1238
-msgid "Path not found."
-msgstr "Stien ble ikke funnet."
+#: ../../Zotlabs/Lib/Apps.php:360
+msgid "Random Channel"
+msgstr "Tilfeldig kanal"
-#: ../../include/attach.php:1305
-msgid "mkdir failed."
-msgstr "mkdir mislyktes."
+#: ../../Zotlabs/Lib/Apps.php:361
+msgid "Invite"
+msgstr "Inviter"
-#: ../../include/attach.php:1309
-msgid "database storage failed."
-msgstr "databaselagring mislyktes."
+#: ../../Zotlabs/Lib/Apps.php:362 ../../Zotlabs/Widget/Admin.php:31
+msgid "Features"
+msgstr "Funksjoner"
-#: ../../include/attach.php:1355
-msgid "Empty path"
-msgstr "Tom sti"
+#: ../../Zotlabs/Lib/Apps.php:363
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:69
+msgid "Language"
+msgstr "Språk"
-#: ../../include/attach.php:2147
-#, fuzzy, php-format
-#| msgid "Files: shared with me"
-msgid "%s shared an %s with you"
-msgstr "Filer: delt med meg"
+#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:411
+msgid "Post"
+msgstr "Innlegg"
-#: ../../include/attach.php:2147
-#, php-format
-msgid "%s shared a %s with you"
+#: ../../Zotlabs/Lib/Apps.php:369
+msgid "Notifications"
+msgstr "Varsler"
+
+#: ../../Zotlabs/Lib/Apps.php:370
+msgid "Order Apps"
msgstr ""
-#: ../../include/attach.php:2147
-#, fuzzy
-#| msgid "Image"
-msgid "image"
-msgstr "Bilde"
+#: ../../Zotlabs/Lib/Apps.php:371
+msgid "CardDAV"
+msgstr ""
-#: ../../include/bookmarks.php:34
-#, php-format
-msgid "%1$s's bookmarks"
-msgstr "%1$s sine bokmerker"
+#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Sources.php:105
+msgid "Channel Sources"
+msgstr "Kanalkilder"
-#: ../../include/bbcode.php:233 ../../include/bbcode.php:939
-#: ../../include/bbcode.php:1560 ../../include/bbcode.php:1568
-msgid "Image/photo"
-msgstr "Bilde/fotografi"
+#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Tokens.php:288
+msgid "Guest Access"
+msgstr ""
-#: ../../include/bbcode.php:280 ../../include/bbcode.php:1585
-msgid "Encrypted content"
-msgstr "Kryptert innhold"
+#: ../../Zotlabs/Lib/Apps.php:374 ../../Zotlabs/Widget/Notes.php:38
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2661
+msgid "Notes"
+msgstr "Merknader"
-#: ../../include/bbcode.php:336
-#, php-format
-msgid "Install %1$s element %2$s"
+#: ../../Zotlabs/Lib/Apps.php:375
+msgid "OAuth Apps Manager"
msgstr ""
-#: ../../include/bbcode.php:340
-#, php-format
-msgid ""
-"This post contains an installable %s element, however you lack permissions "
-"to install it on this site."
+#: ../../Zotlabs/Lib/Apps.php:376
+msgid "OAuth2 Apps Manager"
msgstr ""
-"Dette innlegget inneholder det installerbare elementet %s, men du mangler "
-"tillatelse til å installere det på dette nettstedet."
-#: ../../include/bbcode.php:350 ../../Zotlabs/Module/Impel.php:47
-msgid "webpage"
-msgstr "nettside"
-
-#: ../../include/bbcode.php:353 ../../Zotlabs/Module/Impel.php:57
-msgid "layout"
-msgstr "layout"
+#: ../../Zotlabs/Lib/Apps.php:377
+msgid "PDL Editor"
+msgstr ""
-#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:52
-msgid "block"
-msgstr "byggekloss"
+#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Module/Permcats.php:248
+msgid "Contact Roles"
+msgstr ""
-#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:64
-msgid "menu"
-msgstr "meny"
+#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Module/Pubstream.php:109
+#: ../../Zotlabs/Widget/Notifications.php:154
+msgid "Public Stream"
+msgstr ""
-#: ../../include/bbcode.php:562
-msgid "card"
+#: ../../Zotlabs/Lib/Apps.php:380
+msgid "My Chatrooms"
msgstr ""
-#: ../../include/bbcode.php:564
-msgid "article"
+#: ../../Zotlabs/Lib/Apps.php:381
+msgid "Channel Export"
msgstr ""
-#: ../../include/bbcode.php:570 ../../include/markdown.php:206
-#, php-format
-msgid "%1$s wrote the following %2$s %3$s"
-msgstr "%1$s skrev følgende %2$s %3$s"
+#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Oauth.php:53
+#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Oauth2.php:58
+#: ../../Zotlabs/Module/Oauth2.php:142 ../../Zotlabs/Module/Connedit.php:748
+#: ../../Zotlabs/Module/Admin/Addons.php:461 ../../Zotlabs/Module/Cdav.php:1044
+#: ../../Zotlabs/Module/Cdav.php:1384
+msgid "Update"
+msgstr "Oppdater"
-#: ../../include/bbcode.php:647 ../../include/bbcode.php:655
-msgid "Click to open/close"
-msgstr "Klikk for å åpne/lukke"
+#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Admin/Addons.php:430
+msgid "Install"
+msgstr "Installer"
-#: ../../include/bbcode.php:655 ../../include/markdown.php:259
-msgid "spoiler"
-msgstr ""
+#: ../../Zotlabs/Lib/Apps.php:592 ../../Zotlabs/Lib/Apps.php:614
+msgid "Purchase"
+msgstr "Kjøp"
-#: ../../include/bbcode.php:668
-msgid "View article"
+#: ../../Zotlabs/Lib/Apps.php:619
+msgid "Undelete"
msgstr ""
-#: ../../include/bbcode.php:668
-msgid "View summary"
-msgstr ""
+#: ../../Zotlabs/Lib/Apps.php:627
+msgid "Add to app-tray"
+msgstr "Legg til i meny"
-#: ../../include/bbcode.php:1536
-msgid "$1 wrote:"
-msgstr "$1 skrev:"
+#: ../../Zotlabs/Lib/Apps.php:628
+msgid "Remove from app-tray"
+msgstr "Fjern fra meny"
-#: ../../include/channel.php:48
-msgid "Unable to obtain identity information from database"
-msgstr "Klarer ikke å få tak i identitetsinformasjon fra databasen"
+#: ../../Zotlabs/Lib/Apps.php:629
+msgid "Pin to navbar"
+msgstr "Fest til navigasjonslinjen"
-#: ../../include/channel.php:81
-msgid "Empty name"
-msgstr "Mangler navn"
+#: ../../Zotlabs/Lib/Apps.php:630
+msgid "Unpin from navbar"
+msgstr "Fjern fra navigasjonslinjen"
-#: ../../include/channel.php:84
-msgid "Name too long"
-msgstr "Navnet er for langt"
+#: ../../Zotlabs/Lib/Libzotdir.php:164
+msgid "Directory Options"
+msgstr "Kataloginnstillinger"
-#: ../../include/channel.php:201
-msgid "No account identifier"
-msgstr "Ingen kontoidentifikator"
+#: ../../Zotlabs/Lib/Libzotdir.php:166
+msgid "Safe Mode"
+msgstr "Trygg modus"
-#: ../../include/channel.php:213 ../../Zotlabs/Module/Register.php:95
-msgid "Nickname is required."
-msgstr "Kallenavn er påkrevd."
+#: ../../Zotlabs/Lib/Libzotdir.php:167
+msgid "Public Forums Only"
+msgstr "Bare offentlige forum"
-#: ../../include/channel.php:227 ../../include/channel.php:659
-#: ../../Zotlabs/Module/Register.php:100 ../../Zotlabs/Module/Changeaddr.php:46
-msgid "Reserved nickname. Please choose another."
-msgstr "Reservert kallenavn. Vennligst velg et annet."
+#: ../../Zotlabs/Lib/Libzotdir.php:169
+msgid "This Website Only"
+msgstr "Kun dette nettstedet"
-#: ../../include/channel.php:232 ../../include/channel.php:664
-#: ../../Zotlabs/Module/Register.php:105 ../../Zotlabs/Module/Changeaddr.php:51
+#: ../../Zotlabs/Lib/AccessList.php:26
msgid ""
-"Nickname has unsupported characters or is already being used on this site."
+"A deleted privacy group with this name was revived. Existing item "
+"permissions <strong>may</strong> apply to this privacy group and any future "
+"members. If this is not what you intended, please create another privacy "
+"group with a different name."
msgstr ""
-"Kallenavnet inneholder tegn som ikke er støttet eller det er allerede i bruk "
-"på dette nettstedet."
-
-#: ../../include/channel.php:292
-msgid "Unable to retrieve created identity"
-msgstr "Klarer ikke å hente den lagede identiteten"
-#: ../../include/channel.php:402
-msgid "Default Profile"
-msgstr "Standardprofil"
-
-#: ../../include/channel.php:592 ../../include/channel.php:681
-msgid "Unable to retrieve modified identity"
+#: ../../Zotlabs/Lib/AccessList.php:268
+msgid "Select a privacy group"
msgstr ""
-#: ../../include/channel.php:1373
-msgid "Requested channel is not available"
-msgstr ""
+#: ../../Zotlabs/Lib/ThreadItem.php:110
+msgid "Restricted message"
+msgstr "Begrenset melding"
-#: ../../include/channel.php:1523 ../../Zotlabs/Module/Profiles.php:744
-msgid "Change profile photo"
-msgstr "Endre profilbilde"
+#: ../../Zotlabs/Lib/ThreadItem.php:117
+msgid "Direct message"
+msgstr "Direktemelding"
-#: ../../include/channel.php:1531
-msgid "Create New Profile"
-msgstr "Lag ny profil"
+#: ../../Zotlabs/Lib/ThreadItem.php:122
+msgid "Public Policy"
+msgstr ""
-#: ../../include/channel.php:1549 ../../Zotlabs/Module/Profiles.php:841
-msgid "Profile Image"
-msgstr "Profilbilde"
+#: ../../Zotlabs/Lib/ThreadItem.php:156
+msgid "Privacy conflict. Discretion advised."
+msgstr ""
-#: ../../include/channel.php:1552
-msgid "Visible to everybody"
+#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:373
+msgid "Admin Delete"
msgstr ""
-#: ../../include/channel.php:1553 ../../Zotlabs/Module/Profiles.php:741
-#: ../../Zotlabs/Module/Profiles.php:845
-msgid "Edit visibility"
-msgstr "Endre synlighet"
+#: ../../Zotlabs/Lib/ThreadItem.php:190 ../../Zotlabs/Module/Filer.php:55
+msgid "Save to Folder"
+msgstr "Lagre i mappe"
-#: ../../include/channel.php:1635 ../../include/channel.php:1763
-msgid "Gender:"
-msgstr "Kjønn:"
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
+msgid "I will attend"
+msgstr "Jeg vil delta"
-#: ../../include/channel.php:1636 ../../include/channel.php:1807
-msgid "Status:"
-msgstr "Status:"
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
+msgid "I will not attend"
+msgstr "Jeg deltar ikke"
-#: ../../include/channel.php:1637 ../../include/channel.php:1831
-msgid "Homepage:"
-msgstr "Hjemmeside:"
+#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77
+msgid "I might attend"
+msgstr "Jeg vil kanskje delta"
-#: ../../include/channel.php:1638 ../../include/channel.php:1833
-#: ../../Zotlabs/Module/Directory.php:368
-msgid "Hometown:"
-msgstr "Hjemby:"
+#: ../../Zotlabs/Lib/ThreadItem.php:335 ../../Zotlabs/Module/Photos.php:1074
+msgid "I like this (toggle)"
+msgstr "Jeg liker dette (skru av og på)"
-#: ../../include/channel.php:1639
-msgid "Online Now"
-msgstr "Online nå"
+#: ../../Zotlabs/Lib/ThreadItem.php:336 ../../Zotlabs/Module/Photos.php:1075
+msgid "I don't like this (toggle)"
+msgstr "Jeg liker ikke dette (skru av og på)"
-#: ../../include/channel.php:1688
-msgid "This channel has not added a profile description yet"
-msgstr ""
+#: ../../Zotlabs/Lib/ThreadItem.php:337
+#, fuzzy
+#| msgid "Delete this menu"
+msgid "Reply to this comment"
+msgstr "Slett denne menyen"
-#: ../../include/channel.php:1690
-msgid "Change your profile photo"
+#: ../../Zotlabs/Lib/ThreadItem.php:337
+msgid "reply"
msgstr ""
-#: ../../include/channel.php:1722
-msgid "Trans"
+#: ../../Zotlabs/Lib/ThreadItem.php:337
+msgid "Reply to"
msgstr ""
-#: ../../include/channel.php:1761
-msgid "Full Name:"
-msgstr "Fullt navn:"
-
-#: ../../include/channel.php:1768
-msgid "Like this channel"
-msgstr "Lik denne kanalen"
+#: ../../Zotlabs/Lib/ThreadItem.php:344 ../../Zotlabs/Widget/Pinned.php:95
+msgid "share"
+msgstr "del"
-#: ../../include/channel.php:1792
-msgid "j F, Y"
-msgstr "j F, Y"
+#: ../../Zotlabs/Lib/ThreadItem.php:348
+msgid "Repeat"
+msgstr ""
-#: ../../include/channel.php:1793
-msgid "j F"
-msgstr "j F"
+#: ../../Zotlabs/Lib/ThreadItem.php:348
+msgid "repeat"
+msgstr ""
-#: ../../include/channel.php:1800
-msgid "Birthday:"
-msgstr "Fødselsdag:"
+#: ../../Zotlabs/Lib/ThreadItem.php:359
+msgid "Delivery Report"
+msgstr "Leveringsrapport"
-#: ../../include/channel.php:1804 ../../Zotlabs/Module/Directory.php:349
-msgid "Age:"
-msgstr "Alder:"
+#: ../../Zotlabs/Lib/ThreadItem.php:380
+#, fuzzy, php-format
+#| msgid "%d comment"
+#| msgid_plural "%d comments"
+msgid "%d comment"
+msgid_plural "%d comments"
+msgstr[0] "%d kommentar"
+msgstr[1] "%d kommentarer"
-#: ../../include/channel.php:1813
+#: ../../Zotlabs/Lib/ThreadItem.php:381
#, php-format
-msgid "for %1$d %2$s"
-msgstr "for %1$d %2$s"
-
-#: ../../include/channel.php:1825
-msgid "Tags:"
-msgstr "Merkelapper:"
-
-#: ../../include/channel.php:1829
-msgid "Sexual Preference:"
-msgstr "Seksuell preferanse:"
-
-#: ../../include/channel.php:1835
-msgid "Political Views:"
-msgstr "Politiske synspunkter:"
-
-#: ../../include/channel.php:1837
-msgid "Religion:"
-msgstr "Religion:"
-
-#: ../../include/channel.php:1839 ../../Zotlabs/Module/Directory.php:370
-msgid "About:"
-msgstr "Om:"
-
-#: ../../include/channel.php:1841
-msgid "Hobbies/Interests:"
-msgstr "Hobbyer/interesser:"
-
-#: ../../include/channel.php:1843
-msgid "Likes:"
-msgstr "Liker:"
+msgid "%d unseen"
+msgstr "%d uleste"
-#: ../../include/channel.php:1845
-msgid "Dislikes:"
-msgstr "Misliker:"
+#: ../../Zotlabs/Lib/ThreadItem.php:431
+msgid "Forum"
+msgstr ""
-#: ../../include/channel.php:1847
-msgid "Contact information and Social Networks:"
-msgstr "Kontaktinformasjon og sosiale nettverk:"
+#: ../../Zotlabs/Lib/ThreadItem.php:438
+msgid "to"
+msgstr "til"
-#: ../../include/channel.php:1849
-msgid "My other channels:"
-msgstr "Mine andre kanaler:"
+#: ../../Zotlabs/Lib/ThreadItem.php:439 ../../Zotlabs/Widget/Pinned.php:123
+#: ../../Zotlabs/Widget/Messages.php:146 ../../Zotlabs/Widget/Messages.php:149
+msgid "via"
+msgstr "via"
-#: ../../include/channel.php:1851
-msgid "Musical interests:"
-msgstr "Musikkinteresse:"
+#: ../../Zotlabs/Lib/ThreadItem.php:440
+msgid "Wall-to-Wall"
+msgstr "Vegg-til-vegg"
-#: ../../include/channel.php:1853
-msgid "Books, literature:"
-msgstr "Bøker, litteratur:"
+#: ../../Zotlabs/Lib/ThreadItem.php:441
+msgid "via Wall-To-Wall:"
+msgstr "via vegg-til-vegg:"
-#: ../../include/channel.php:1855
-msgid "Television:"
-msgstr "TV:"
+#: ../../Zotlabs/Lib/ThreadItem.php:469
+msgid "Attend"
+msgstr ""
-#: ../../include/channel.php:1857
-msgid "Film/dance/culture/entertainment:"
-msgstr "Film/dans/kultur/underholdning:"
+#: ../../Zotlabs/Lib/ThreadItem.php:470 ../../Zotlabs/Widget/Pinned.php:137
+msgid "Attendance Options"
+msgstr ""
-#: ../../include/channel.php:1859
-msgid "Love/Romance:"
-msgstr "Kjærlighet/romantikk:"
+#: ../../Zotlabs/Lib/ThreadItem.php:472 ../../Zotlabs/Widget/Pinned.php:138
+msgid "Voting Options"
+msgstr ""
-#: ../../include/channel.php:1861
-msgid "Work/employment:"
-msgstr "Arbeid/sysselsetting:"
+#: ../../Zotlabs/Lib/ThreadItem.php:487
+msgid "Go to previous comment"
+msgstr ""
-#: ../../include/channel.php:1863
-msgid "School/education:"
-msgstr "Skole/utdannelse:"
+#: ../../Zotlabs/Lib/ThreadItem.php:496 ../../Zotlabs/Widget/Pinned.php:150
+msgid "Pinned post"
+msgstr ""
-#: ../../include/channel.php:1884 ../../Zotlabs/Module/Profperm.php:113
-#: ../../Zotlabs/Lib/Apps.php:367
-msgid "Profile"
-msgstr "Profil"
+#: ../../Zotlabs/Lib/ThreadItem.php:499
+#: ../../extend/addon/hzaddons/bookmarker/bookmarker.php:38
+msgid "Save Bookmarks"
+msgstr "Lagre bokmerker"
-#: ../../include/channel.php:1886
-msgid "Like this thing"
-msgstr "Lik denne tingen"
+#: ../../Zotlabs/Lib/ThreadItem.php:500
+msgid "Add to Calendar"
+msgstr "Legg til i kalender"
-#: ../../include/channel.php:1887
-msgid "Export"
-msgstr "Eksport"
+#: ../../Zotlabs/Lib/ThreadItem.php:508
+#, fuzzy
+#| msgid "Mark all events seen"
+msgid "Mark all comments seen"
+msgstr "Merk alle hendelser som sett"
-#: ../../include/channel.php:2340 ../../Zotlabs/Module/Cover_photo.php:304
-msgid "cover photo"
-msgstr "forsidebilde"
+#: ../../Zotlabs/Lib/ThreadItem.php:547
+#, fuzzy
+#| msgid "Add Photos"
+msgid "Add yours"
+msgstr "Legg til bilder"
-#: ../../include/channel.php:2615 ../../Zotlabs/Module/Rmagic.php:96
-#: ../../boot.php:1747
-msgid "Remote Authentication"
-msgstr "Fjernautentisering"
+#: ../../Zotlabs/Lib/ThreadItem.php:547
+#, fuzzy
+#| msgid "Remove term"
+msgid "Remove yours"
+msgstr "Fjern begrep"
-#: ../../include/channel.php:2616 ../../Zotlabs/Module/Rmagic.php:97
-msgid "Enter your channel address (e.g. channel@example.com)"
-msgstr "Skriv din kanaladresse (for eksempel channel@exampel.com)"
+#: ../../Zotlabs/Lib/ThreadItem.php:865 ../../Zotlabs/Module/Photos.php:1092
+#: ../../Zotlabs/Module/Photos.php:1205
+msgid "This is you"
+msgstr "Dette er deg"
-#: ../../include/channel.php:2617 ../../Zotlabs/Module/Rmagic.php:98
-msgid "Authenticate"
-msgstr "Autentiser"
+#: ../../Zotlabs/Lib/ThreadItem.php:874
+msgid "Image"
+msgstr "Bilde"
-#: ../../include/channel.php:2775 ../../Zotlabs/Module/Admin/Accounts.php:184
-#, php-format
-msgid "Account '%s' deleted"
-msgstr "Kontoen '%s' slettet"
+#: ../../Zotlabs/Lib/ThreadItem.php:876
+msgid "Insert Link"
+msgstr "Sett inn lenke"
-#: ../../include/acl_selectors.php:33
-#: ../../Zotlabs/Lib/PermissionDescription.php:34
-msgid "Visible to your default audience"
-msgstr "Synlig for ditt standard publikum"
+#: ../../Zotlabs/Lib/ThreadItem.php:877
+msgid "Video"
+msgstr "Video"
-#: ../../include/acl_selectors.php:100
-msgid "Profile-Based Privacy Groups"
+#: ../../Zotlabs/Lib/ThreadItem.php:886
+msgid "Your full name (required)"
msgstr ""
-#: ../../include/acl_selectors.php:119
-msgid "Private Forum"
+#: ../../Zotlabs/Lib/ThreadItem.php:887
+msgid "Your email address (required)"
msgstr ""
-#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:77
-#: ../../Zotlabs/Widget/Activity_filter.php:130
-#: ../../Zotlabs/Widget/Notifications.php:131
-#: ../../Zotlabs/Widget/Notifications.php:132
-msgid "Forums"
-msgstr "Forum"
-
-#: ../../include/acl_selectors.php:136
-#: ../../Zotlabs/Module/Settings/Privacy.php:65
-#: ../../Zotlabs/Lib/PermissionDescription.php:107
-msgid "Only me"
-msgstr "Kun meg"
-
-#: ../../include/acl_selectors.php:143
-msgid "Share with"
-msgstr "Del med"
-
-#: ../../include/acl_selectors.php:144
-msgid "Custom selection"
-msgstr "Tilpasset utvalg"
-
-#: ../../include/acl_selectors.php:146
-msgid ""
-"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
-"limit the scope of \"Allow\"."
+#: ../../Zotlabs/Lib/ThreadItem.php:888
+msgid "Your website URL (optional)"
msgstr ""
-#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
-msgid "Allow"
+#: ../../Zotlabs/Lib/Activity.php:2173
+#, php-format
+msgid "Likes %1$s's %2$s"
msgstr ""
-#: ../../include/acl_selectors.php:148
-msgid "Don't allow"
+#: ../../Zotlabs/Lib/Activity.php:2176
+#, php-format
+msgid "Doesn't like %1$s's %2$s"
msgstr ""
-#: ../../include/acl_selectors.php:156 ../../Zotlabs/Widget/Pinned.php:163
-#: ../../Zotlabs/Module/Photos.php:1265 ../../Zotlabs/Lib/ThreadItem.php:496
-#: ../../Zotlabs/Storage/Browser.php:414
-msgid "Close"
-msgstr "Lukk"
+#: ../../Zotlabs/Lib/Activity.php:2182
+#, php-format
+msgid "Will attend %s's event"
+msgstr ""
-#: ../../include/acl_selectors.php:181
+#: ../../Zotlabs/Lib/Activity.php:2185
#, php-format
-msgid ""
-"Post permissions %s cannot be changed %s after a post is shared.</br />These "
-"permissions set who is allowed to view the post."
+msgid "Will not attend %s's event"
msgstr ""
-"Tillatelsene til innlegget %s kan ikke endres %s etter at innlegget er delt."
-"</br />Disse tillatelsene avgjør hvem som kan se innlegget."
-#: ../../include/oembed.php:155
-msgid "View PDF"
+#: ../../Zotlabs/Lib/Activity.php:2188
+#, php-format
+msgid "May attend %s's event"
msgstr ""
-#: ../../include/oembed.php:391
-msgid " by "
-msgstr " av "
+#: ../../Zotlabs/Lib/Activity.php:2191
+#, php-format
+msgid "May not attend %s's event"
+msgstr ""
-#: ../../include/oembed.php:392
-#, fuzzy
-msgid " on "
-msgstr "På"
+#: ../../Zotlabs/Lib/Chatroom.php:25
+msgid "Missing room name"
+msgstr "Mangler romnavn"
-#: ../../include/oembed.php:421
-msgid "Embedded content"
-msgstr "Innebygget innhold"
+#: ../../Zotlabs/Lib/Chatroom.php:34
+msgid "Duplicate room name"
+msgstr "Duplikat romnavn"
-#: ../../include/oembed.php:430
-msgid "Embedding disabled"
-msgstr "Innbygging avskrudd"
+#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
+msgid "Invalid room specifier."
+msgstr "Ugyldig rom-spesifisering."
-#: ../../include/zid.php:410
-#, php-format
-msgid "OpenWebAuth: %1$s welcomes %2$s"
-msgstr "OpenWebAuth: %1$s ønsker %2$s velkommen"
+#: ../../Zotlabs/Lib/Chatroom.php:124
+msgid "Room not found."
+msgstr "Rommet ble ikke funnet."
-#: ../../Zotlabs/Widget/Activity_order.php:96
-msgid "Commented Date"
-msgstr "Sist kommentert"
+#: ../../Zotlabs/Lib/Chatroom.php:145
+msgid "Room is full"
+msgstr "Rommet er fullt"
-#: ../../Zotlabs/Widget/Activity_order.php:100
-msgid "Order by last commented date"
-msgstr "Sorter etter dato for siste kommentar"
+#: ../../Zotlabs/Lib/Enotify.php:61
+msgid "$Projectname Notification"
+msgstr "$Projectname varsling"
-#: ../../Zotlabs/Widget/Activity_order.php:103
-msgid "Posted Date"
-msgstr "Innleggsdato"
+#: ../../Zotlabs/Lib/Enotify.php:62
+#: ../../extend/addon/hzaddons/diaspora/p.php:48
+#: ../../extend/addon/hzaddons/diaspora/util.php:346
+#: ../../extend/addon/hzaddons/diaspora/util.php:359
+msgid "$projectname"
+msgstr "$projectname"
-#: ../../Zotlabs/Widget/Activity_order.php:107
-msgid "Order by last posted date"
-msgstr "Sorter etter dato innlegg ble postet"
+#: ../../Zotlabs/Lib/Enotify.php:64
+msgid "Thank You,"
+msgstr "Tusen takk,"
-#: ../../Zotlabs/Widget/Activity_order.php:110
-msgid "Date Unthreaded"
-msgstr "Utrådet"
+#: ../../Zotlabs/Lib/Enotify.php:66
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:33
+#, php-format
+msgid "%s Administrator"
+msgstr "%s administrator"
-#: ../../Zotlabs/Widget/Activity_order.php:114
-msgid "Order unthreaded by date"
-msgstr "Sorter innlegg og kommentarer uavhengig av hverandre etter dato"
+#: ../../Zotlabs/Lib/Enotify.php:67
+#, php-format
+msgid "This email was sent by %1$s at %2$s."
+msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:129
-msgid "Stream Order"
-msgstr "Sortering av innlegg"
+#: ../../Zotlabs/Lib/Enotify.php:67 ../../Zotlabs/Module/Invite.php:239
+#: ../../Zotlabs/Module/Invite.php:508 ../../Zotlabs/Module/Invite.php:522
+#: ../../Zotlabs/Module/Home.php:88 ../../Zotlabs/Module/Home.php:96
+#: ../../extend/addon/hzaddons/opensearch/opensearch.php:42
+msgid "$Projectname"
+msgstr "$Projectname"
-#: ../../Zotlabs/Widget/Tokens.php:41
-msgid "Add new guest"
+#: ../../Zotlabs/Lib/Enotify.php:68
+#, php-format
+msgid ""
+"To stop receiving these messages, please adjust your Notification Settings "
+"at %s"
msgstr ""
-#: ../../Zotlabs/Widget/Tokens.php:49 ../../Zotlabs/Module/Lockview.php:236
-msgid "Guest access"
+#: ../../Zotlabs/Lib/Enotify.php:69
+#, php-format
+msgid "To stop receiving these messages, please adjust your %s."
msgstr ""
-#: ../../Zotlabs/Widget/Archive.php:49
-msgid "Archives"
-msgstr "Arkiv"
-
-#: ../../Zotlabs/Widget/Album.php:84 ../../Zotlabs/Widget/Portfolio.php:91
-#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Module/Photos.php:782
-#: ../../Zotlabs/Module/Photos.php:1323
-msgid "View Photo"
-msgstr "Vis foto"
-
-#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112
-#: ../../Zotlabs/Module/Embedphotos.php:187 ../../Zotlabs/Module/Photos.php:813
-msgid "Edit Album"
-msgstr "Endre album"
-
-#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Cdav.php:152
-#: ../../Zotlabs/Widget/Cdav.php:188 ../../Zotlabs/Widget/Portfolio.php:114
-#: ../../Zotlabs/Module/Embedphotos.php:189
-#: ../../Zotlabs/Module/Profile_photo.php:547
-#: ../../Zotlabs/Module/Cover_photo.php:423 ../../Zotlabs/Module/Photos.php:681
-#: ../../Zotlabs/Storage/Browser.php:546
-msgid "Upload"
-msgstr "Last opp"
+#: ../../Zotlabs/Lib/Enotify.php:69
+#: ../../Zotlabs/Module/Settings/Channel.php:242
+msgid "Notification Settings"
+msgstr "Varslingsinnstillinger"
-#: ../../Zotlabs/Widget/Tasklist.php:31
-msgid "Tasks"
-msgstr "Oppgaver"
+#: ../../Zotlabs/Lib/Enotify.php:124
+#, php-format
+msgid "%s <!item_type!>"
+msgstr "%s <!item_type!>"
-#: ../../Zotlabs/Widget/Chatroom_members.php:17
-msgid "Chat Members"
-msgstr ""
+#: ../../Zotlabs/Lib/Enotify.php:132
+#, php-format
+msgid "[$Projectname:Notify] New direct message received at %s"
+msgstr "[$Projectname:Notify] Ny direktemelding mottatt kl. %s"
-#: ../../Zotlabs/Widget/Channel_activities.php:29
-#: ../../Zotlabs/Module/Go.php:27
-msgid "Welcome"
-msgstr "Velkommen"
+#: ../../Zotlabs/Lib/Enotify.php:134
+#, php-format
+msgid "%1$s sent you a new direct message at %2$s"
+msgstr "%1$s sendte deg en ny direktemelding kl. %2$s"
-#: ../../Zotlabs/Widget/Channel_activities.php:46
-#, fuzzy
-#| msgid "Recent activity"
-msgid "No recent activities"
-msgstr "Nylig aktivitet"
+#: ../../Zotlabs/Lib/Enotify.php:135
+#, php-format
+msgid "%1$s sent you %2$s."
+msgstr "%1$s sendte deg %2$s."
-#: ../../Zotlabs/Widget/Channel_activities.php:214
-msgctxt "noun"
-msgid "new connection"
-msgid_plural "new connections"
-msgstr[0] "ny forbindelse"
-msgstr[1] "nye forbindelser"
+#: ../../Zotlabs/Lib/Enotify.php:135
+msgid "a direct message"
+msgstr "en direktemelding"
-#: ../../Zotlabs/Widget/Channel_activities.php:220
-msgctxt "noun"
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "varsel"
-msgstr[1] "varsel"
+#: ../../Zotlabs/Lib/Enotify.php:136
+#, php-format
+msgid "Please visit %s to view and/or reply to your direct messages."
+msgstr "Gå til %s for å vise og/eller svare på dine direktemeldinger."
-#: ../../Zotlabs/Widget/Pinned.php:75 ../../Zotlabs/Lib/ThreadItem.php:206
-msgid "I will attend"
-msgstr "Jeg vil delta"
+#: ../../Zotlabs/Lib/Enotify.php:149
+msgid "requested to comment on"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:75 ../../Zotlabs/Lib/ThreadItem.php:206
-msgid "I will not attend"
-msgstr "Jeg deltar ikke"
+#: ../../Zotlabs/Lib/Enotify.php:149
+msgid "commented on"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:75 ../../Zotlabs/Lib/ThreadItem.php:206
-msgid "I might attend"
-msgstr "Jeg vil kanskje delta"
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
+#, fuzzy
+#| msgid "Request date"
+msgid "requested to like"
+msgstr "Dato for forespørsel"
-#: ../../Zotlabs/Widget/Pinned.php:86
-msgid "I agree"
-msgstr "Jeg er enig"
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
+msgid "liked"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:86
-msgid "I disagree"
-msgstr "Jeg er uenig"
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
+msgid "requested to dislike"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:86
-msgid "I abstain"
-msgstr "Jeg avstår"
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
+msgid "disliked"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:104 ../../Zotlabs/Lib/ThreadItem.php:324
-msgid "Share This"
-msgstr "Del dette"
+#: ../../Zotlabs/Lib/Enotify.php:168
+#, fuzzy
+#| msgid "Created"
+msgid "repeated"
+msgstr "Laget"
-#: ../../Zotlabs/Widget/Pinned.php:104 ../../Zotlabs/Lib/ThreadItem.php:324
-msgid "share"
-msgstr "del"
+#: ../../Zotlabs/Lib/Enotify.php:173
+msgid "voted on"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:127 ../../Zotlabs/Widget/Pinned.php:128
+#: ../../Zotlabs/Lib/Enotify.php:216
#, php-format
-msgid "View %s's profile - %s"
-msgstr "Vis %s sin profil - %s"
+msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:132 ../../Zotlabs/Widget/Messages.php:146
-#: ../../Zotlabs/Lib/ThreadItem.php:414
-msgid "via"
-msgstr "via"
+#: ../../Zotlabs/Lib/Enotify.php:224
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
+msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:146 ../../Zotlabs/Lib/ThreadItem.php:445
-msgid "Attendance Options"
+#: ../../Zotlabs/Lib/Enotify.php:233 ../../Zotlabs/Lib/Enotify.php:325
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:147 ../../Zotlabs/Lib/ThreadItem.php:447
-msgid "Voting Options"
+#: ../../Zotlabs/Lib/Enotify.php:245
+#, php-format
+msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:159 ../../Zotlabs/Lib/ThreadItem.php:471
-msgid "Pinned post"
+#: ../../Zotlabs/Lib/Enotify.php:247
+#, php-format
+msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:161
-msgid "Don't show"
-msgstr "Ikke vis"
+#: ../../Zotlabs/Lib/Enotify.php:248
+#, php-format
+msgid "%1$s commented on an item/conversation you have been following"
+msgstr ""
-#: ../../Zotlabs/Widget/Activity.php:55
-#, fuzzy
-msgctxt "widget"
-msgid "Activity"
-msgstr "aktivitet"
+#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:345
+#: ../../Zotlabs/Lib/Enotify.php:361 ../../Zotlabs/Lib/Enotify.php:385
+#: ../../Zotlabs/Lib/Enotify.php:402 ../../Zotlabs/Lib/Enotify.php:415
+#, php-format
+msgid "Please visit %s to view and/or reply to the conversation."
+msgstr "Vennligst besøk %s for å se og/eller svare i samtalen."
-#: ../../Zotlabs/Widget/Cdav.php:41
-msgid "Select Channel"
+#: ../../Zotlabs/Lib/Enotify.php:255 ../../Zotlabs/Lib/Enotify.php:256
+#, php-format
+msgid "Please visit %s to approve or reject this comment."
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:46
-msgid "Read-write"
+#: ../../Zotlabs/Lib/Enotify.php:341
+#, php-format
+msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:47
-msgid "Read-only"
+#: ../../Zotlabs/Lib/Enotify.php:342
+#, php-format
+msgid "%1$s liked an item/conversation you created"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:133
-msgid "Channel Calendar"
+#: ../../Zotlabs/Lib/Enotify.php:353
+#, php-format
+msgid "[$Projectname:Notify] %s posted to your profile wall"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:135 ../../Zotlabs/Widget/Cdav.php:149
-#: ../../Zotlabs/Module/Cdav.php:1046
-msgid "CalDAV Calendars"
+#: ../../Zotlabs/Lib/Enotify.php:355
+#, php-format
+msgid "%1$s posted to your profile wall at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:137
-msgid "Shared CalDAV Calendars"
+#: ../../Zotlabs/Lib/Enotify.php:357
+#, php-format
+msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:141
-msgid "Share this calendar"
+#: ../../Zotlabs/Lib/Enotify.php:379
+#, php-format
+msgid "[$Projectname:Notify] %s tagged you"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:143
-msgid "Calendar name and color"
+#: ../../Zotlabs/Lib/Enotify.php:380
+#, php-format
+msgid "%1$s tagged you at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:145
-msgid "Create new CalDAV calendar"
+#: ../../Zotlabs/Lib/Enotify.php:381
+#, php-format
+msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184
-#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1379
-#: ../../Zotlabs/Module/Webpages.php:249
-#: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Module/Blocks.php:157
-#: ../../Zotlabs/Module/Menu.php:182 ../../Zotlabs/Module/Connedit.php:747
-#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Storage/Browser.php:368
-#: ../../Zotlabs/Storage/Browser.php:544
-msgid "Create"
-msgstr "Lag"
-
-#: ../../Zotlabs/Widget/Cdav.php:147
-msgid "Calendar Name"
+#: ../../Zotlabs/Lib/Enotify.php:392
+#, php-format
+msgid "[$Projectname:Notify] %1$s poked you"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:148
-msgid "Calendar Tools"
+#: ../../Zotlabs/Lib/Enotify.php:393
+#, php-format
+msgid "%1$s poked you at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:149 ../../Zotlabs/Module/Cdav.php:1046
-msgid "Channel Calendars"
+#: ../../Zotlabs/Lib/Enotify.php:394
+#, php-format
+msgid "%1$s [zrl=%2$s]poked you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:150
-msgid "Import calendar"
+#: ../../Zotlabs/Lib/Enotify.php:409
+#, php-format
+msgid "[$Projectname:Notify] %s tagged your post"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:151
-msgid "Select a calendar to import to"
+#: ../../Zotlabs/Lib/Enotify.php:410
+#, php-format
+msgid "%1$s tagged your post at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:178
-msgid "Addressbooks"
+#: ../../Zotlabs/Lib/Enotify.php:411
+#, php-format
+msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:180
-msgid "Addressbook name"
+#: ../../Zotlabs/Lib/Enotify.php:422
+msgid "[$Projectname:Notify] Introduction received"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:182
-msgid "Create new addressbook"
+#: ../../Zotlabs/Lib/Enotify.php:423
+#, php-format
+msgid "You've received an new connection request from '%1$s' at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:183
-msgid "Addressbook Name"
+#: ../../Zotlabs/Lib/Enotify.php:424
+#, php-format
+msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:185
-msgid "Addressbook Tools"
-msgstr ""
+#: ../../Zotlabs/Lib/Enotify.php:427 ../../Zotlabs/Lib/Enotify.php:445
+#, php-format
+msgid "You may visit their profile at %s"
+msgstr "Du kan besøke profilen deres på %s"
-#: ../../Zotlabs/Widget/Cdav.php:186
-msgid "Import addressbook"
+#: ../../Zotlabs/Lib/Enotify.php:429
+#, php-format
+msgid "Please visit %s to approve or reject the connection request."
msgstr ""
+"Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse."
-#: ../../Zotlabs/Widget/Cdav.php:187
-msgid "Select an addressbook to import to"
+#: ../../Zotlabs/Lib/Enotify.php:436
+msgid "[$Projectname:Notify] Friend suggestion received"
msgstr ""
-#: ../../Zotlabs/Widget/Savedsearch.php:81
-msgid "Remove term"
-msgstr "Fjern begrep"
-
-#: ../../Zotlabs/Widget/Suggestedchats.php:36
-msgid "Suggested Chatrooms"
-msgstr "Foreslåtte chatrom"
-
-#: ../../Zotlabs/Widget/Settings_menu.php:37
-msgid "Account settings"
-msgstr "Kontoinnstillinger"
+#: ../../Zotlabs/Lib/Enotify.php:437
+#, php-format
+msgid "You've received a friend suggestion from '%1$s' at %2$s"
+msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:43
-msgid "Channel settings"
-msgstr "Kanalinnstillinger"
+#: ../../Zotlabs/Lib/Enotify.php:438
+#, php-format
+msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
+msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:49
-msgid "Privacy settings"
-msgstr "Personverninnstillinger"
+#: ../../Zotlabs/Lib/Enotify.php:443
+msgid "Name:"
+msgstr "Navn:"
-#: ../../Zotlabs/Widget/Settings_menu.php:56
-msgid "Display settings"
-msgstr "Visningsinnstillinger"
+#: ../../Zotlabs/Lib/Enotify.php:444
+msgid "Photo:"
+msgstr "Bilde:"
-#: ../../Zotlabs/Widget/Settings_menu.php:63
-msgid "Manage locations"
-msgstr ""
+#: ../../Zotlabs/Lib/Enotify.php:447
+#, php-format
+msgid "Please visit %s to approve or reject the suggestion."
+msgstr "Vennligst besøk %s for å godkjenne eller avslå dette forslaget."
-#: ../../Zotlabs/Widget/Chatroom_list.php:26
-msgid "Overview"
+#: ../../Zotlabs/Lib/Enotify.php:677
+msgid "[$Projectname:Notify]"
msgstr ""
-#: ../../Zotlabs/Widget/Suggestions.php:53 ../../Zotlabs/Module/Suggest.php:71
-msgid "Ignore/Hide"
-msgstr "Ignorer/Skjul"
-
-#: ../../Zotlabs/Widget/Suggestions.php:58
-msgid "Suggestions"
-msgstr "Forslag"
-
-#: ../../Zotlabs/Widget/Suggestions.php:59
-msgid "See more..."
-msgstr "Se mer..."
+#: ../../Zotlabs/Lib/Enotify.php:843
+msgid "created a new poll"
+msgstr "opprettet spørreskjema"
-#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
-msgid "Bookmarked Chatrooms"
-msgstr "Bokmerkede chatrom"
+#: ../../Zotlabs/Lib/Enotify.php:843
+msgid "created a new post"
+msgstr "laget et nytt innlegg"
-#: ../../Zotlabs/Widget/Appcategories.php:49
-msgid "App Categories"
-msgstr "Appkategorier"
+#: ../../Zotlabs/Lib/Enotify.php:844
+#, php-format
+msgid "voted on %s's poll"
+msgstr "stemte på %s sitt spørreskjema"
-#: ../../Zotlabs/Widget/Hq_controls.php:23
-msgid "Toggle post editor"
-msgstr "Vis redigering av innlegg"
+#: ../../Zotlabs/Lib/Enotify.php:844
+#, php-format
+msgid "commented on %s's post"
+msgstr "kommenterte på %s sitt innlegg"
-#: ../../Zotlabs/Widget/Hq_controls.php:33
-msgid "Toggle personal notes"
+#: ../../Zotlabs/Lib/Enotify.php:848 ../../Zotlabs/Lib/Enotify.php:948
+msgid "shared a file with you"
msgstr ""
-#: ../../Zotlabs/Widget/Hq_controls.php:43
-msgid "Channel activities"
+#: ../../Zotlabs/Lib/Enotify.php:857
+#, php-format
+msgid "edited a post dated %s"
msgstr ""
-#: ../../Zotlabs/Widget/Permcats.php:43
-msgid "Add new role"
+#: ../../Zotlabs/Lib/Enotify.php:860
+#, php-format
+msgid "edited a comment dated %s"
msgstr ""
-#: ../../Zotlabs/Widget/Permcats.php:92
-#: ../../Zotlabs/Module/Contactedit.php:409
-msgid "Contact roles"
-msgstr ""
+#: ../../Zotlabs/Lib/Enotify.php:933
+msgid "added your channel"
+msgstr "la til din kanal"
-#: ../../Zotlabs/Widget/Permcats.php:93
-msgid "Role members"
-msgstr ""
+#: ../../Zotlabs/Lib/Enotify.php:963
+msgid "sent you a direct message"
+msgstr "sendte deg en direktemelding"
-#: ../../Zotlabs/Widget/Photo.php:54 ../../Zotlabs/Widget/Photo_rand.php:63
-msgid "photo/image"
-msgstr "foto/bilde"
+#: ../../Zotlabs/Lib/Enotify.php:970
+msgid "g A l F d"
+msgstr "g A l F d"
-#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:414
-msgid "Site"
-msgstr "Nettsted"
+#: ../../Zotlabs/Lib/Enotify.php:973
+msgid "[today]"
+msgstr "[idag]"
-#: ../../Zotlabs/Widget/Admin.php:28
-#: ../../Zotlabs/Module/Admin/Accounts.php:308
-#: ../../Zotlabs/Module/Admin/Accounts.php:327
-#: ../../Zotlabs/Module/Admin.php:95
-msgid "Accounts"
-msgstr "Kontoer"
+#: ../../Zotlabs/Lib/Enotify.php:983
+msgid "created an event"
+msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66
-msgid "Member registrations waiting for confirmation"
+#: ../../Zotlabs/Lib/Enotify.php:998
+msgid "status verified"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:30
-#: ../../Zotlabs/Module/Admin/Security.php:106
-msgid "Security"
-msgstr "Sikkerhet"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:68
+msgid "Source code of failed update: "
+msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:31 ../../Zotlabs/Lib/Apps.php:363
-msgid "Features"
-msgstr "Funksjoner"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:89
+#, php-format
+msgid "Update Error at %s"
+msgstr "Oppdateringsfeil ved %s"
-#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:346
-#: ../../Zotlabs/Module/Admin/Addons.php:444
-msgid "Addons"
-msgstr "Tillegg"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:95
+#, php-format
+msgid "Update %s failed. See error logs."
+msgstr "Oppdatering %s mislyktes. Se feilloggen."
-#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:123
-#: ../../Zotlabs/Module/Admin/Themes.php:157
-msgid "Themes"
-msgstr "Utseende"
+#: ../../Zotlabs/Lib/Connect.php:45 ../../Zotlabs/Lib/Connect.php:146
+msgid "Channel is blocked on this site."
+msgstr "Kanalen er blokkert på dette nettstedet."
-#: ../../Zotlabs/Widget/Admin.php:34
-msgid "Inspect queue"
-msgstr "Inspiser kø"
+#: ../../Zotlabs/Lib/Connect.php:50
+msgid "Channel location missing."
+msgstr "Kanalplassering mangler."
-#: ../../Zotlabs/Widget/Admin.php:35
-msgid "Queueworker"
+#: ../../Zotlabs/Lib/Connect.php:104
+msgid "Remote channel or protocol unavailable."
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:168
-msgid "Profile Fields"
-msgstr "Profilfelter"
+#: ../../Zotlabs/Lib/Connect.php:140
+msgid "Channel discovery failed."
+msgstr "Kanaloppdagelse mislyktes."
-#: ../../Zotlabs/Widget/Admin.php:37
-msgid "DB updates"
-msgstr "Databaseoppdateringer"
+#: ../../Zotlabs/Lib/Connect.php:158
+msgid "Protocol disabled."
+msgstr "Protokollen er avskrudd."
-#: ../../Zotlabs/Widget/Admin.php:54 ../../Zotlabs/Widget/Admin.php:64
-#: ../../Zotlabs/Module/Admin/Logs.php:83
-msgid "Logs"
-msgstr "Logger"
+#: ../../Zotlabs/Lib/Connect.php:170
+msgid "Cannot connect to yourself."
+msgstr "Kan ikke lage forbindelse med deg selv."
-#: ../../Zotlabs/Widget/Admin.php:62
-msgid "Addon Features"
+#: ../../Zotlabs/Lib/Connect.php:275
+msgid "error saving data"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:44
-#: ../../Zotlabs/Widget/Notifications.php:62
-msgid "Direct Messages"
-msgstr "Direktemeldinger"
-
-#: ../../Zotlabs/Widget/Activity_filter.php:48
-msgid "Show direct (private) messages"
-msgstr "Vis direktemeldinger (private meldinger)"
+#: ../../Zotlabs/Lib/Libzot.php:688
+msgid "Unable to verify channel signature"
+msgstr "Ikke i stand til å sjekke kanalsignaturen"
-#: ../../Zotlabs/Widget/Activity_filter.php:53
-#: ../../Zotlabs/Widget/Notifications.php:81
-msgid "Events"
-msgstr "Hendelser"
+#: ../../Zotlabs/Lib/PermissionDescription.php:108
+#: ../../Zotlabs/Access/PermissionRoles.php:386
+msgid "Public"
+msgstr "Offentlig"
-#: ../../Zotlabs/Widget/Activity_filter.php:57
-msgid "Show posts that include events"
+#: ../../Zotlabs/Lib/PermissionDescription.php:109
+msgid "Anybody in the $Projectname network"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:63
-msgid "Polls"
-msgstr "Spørreskjema"
-
-#: ../../Zotlabs/Widget/Activity_filter.php:67
-msgid "Show posts that include polls"
-msgstr "Vis innlegg som inneholder spørreskjema"
-
-#: ../../Zotlabs/Widget/Activity_filter.php:90
+#: ../../Zotlabs/Lib/PermissionDescription.php:110
#, php-format
-msgid "Show posts related to the %s privacy group"
+msgid "Any account on %s"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:99
-msgid "Show my privacy groups"
+#: ../../Zotlabs/Lib/PermissionDescription.php:111
+msgid "Any of my connections"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:123
-msgid "Show posts to this forum"
+#: ../../Zotlabs/Lib/PermissionDescription.php:112
+msgid "Only connections I specifically allow"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:134
-msgid "Show forums"
+#: ../../Zotlabs/Lib/PermissionDescription.php:113
+msgid "Anybody authenticated (could include visitors from other networks)"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:148
-msgid "Starred Posts"
+#: ../../Zotlabs/Lib/PermissionDescription.php:114
+msgid "Any connections including those who haven't yet been approved"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:152
-msgid "Show posts that I have starred"
+#: ../../Zotlabs/Lib/PermissionDescription.php:150
+msgid ""
+"This is your default setting for the audience of your normal stream, and "
+"posts."
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:163
-msgid "Personal Posts"
+#: ../../Zotlabs/Lib/PermissionDescription.php:151
+msgid ""
+"This is your default setting for who can view your default channel profile"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:167
-msgid "Show posts that mention or involve me"
+#: ../../Zotlabs/Lib/PermissionDescription.php:152
+msgid "This is your default setting for who can view your connections"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:190
-#, php-format
-msgid "Show posts that I have filed to %s"
+#: ../../Zotlabs/Lib/PermissionDescription.php:153
+msgid ""
+"This is your default setting for who can view your file storage and photos"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:200
-msgid "Show filed post categories"
+#: ../../Zotlabs/Lib/PermissionDescription.php:154
+msgid "This is your default setting for the audience of your webpages"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:214
-msgid "Panel search"
-msgstr ""
+#: ../../Zotlabs/Lib/Libsync.php:824
+#, php-format
+msgid "Unable to verify site signature for %s"
+msgstr "Ikke i stand til å bekrefte signaturen til %s"
-#: ../../Zotlabs/Widget/Activity_filter.php:224
-msgid "Filter by name"
-msgstr "Filtrer etter navn"
+#: ../../Zotlabs/Lib/Permcat.php:83
+msgctxt "permcat"
+msgid "Default"
+msgstr "Standard"
-#: ../../Zotlabs/Widget/Activity_filter.php:239
-msgid "Remove active filter"
+#: ../../Zotlabs/Access/PermissionRoles.php:339
+msgid "Social Networking"
+msgstr "Sosialt nettverk"
+
+#: ../../Zotlabs/Access/PermissionRoles.php:340
+msgid "Social - Federation"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:255
-msgid "Stream Filters"
-msgstr "Filtere for tidslinjen"
+#: ../../Zotlabs/Access/PermissionRoles.php:341
+msgid "Social - Mostly Public"
+msgstr "Sosial - ganske offentlig"
-#: ../../Zotlabs/Widget/Appstore.php:16
-msgid "App Collections"
-msgstr "Appsamlinger"
+#: ../../Zotlabs/Access/PermissionRoles.php:342
+msgid "Social - Restricted"
+msgstr "Sosial - begrenset"
-#: ../../Zotlabs/Widget/Appstore.php:18
-msgid "Installed apps"
-msgstr "Installerte apper"
+#: ../../Zotlabs/Access/PermissionRoles.php:343
+msgid "Social - Private"
+msgstr "Sosial - privat"
-#: ../../Zotlabs/Widget/Appstore.php:19 ../../Zotlabs/Module/Apps.php:51
-msgid "Available Apps"
-msgstr "Tilgjengelige apper"
+#: ../../Zotlabs/Access/PermissionRoles.php:346
+msgid "Community Forum"
+msgstr "Forum for fellesskap"
-#: ../../Zotlabs/Widget/Privacygroups.php:45
-msgid "Add new group"
-msgstr ""
+#: ../../Zotlabs/Access/PermissionRoles.php:347
+msgid "Forum - Mostly Public"
+msgstr "Forum - ganske offentlig"
-#: ../../Zotlabs/Widget/Privacygroups.php:54
-#: ../../Zotlabs/Module/Contactedit.php:443
-#, fuzzy
-msgid "Privacy groups"
-msgstr "Personverngrupper"
+#: ../../Zotlabs/Access/PermissionRoles.php:348
+msgid "Forum - Restricted"
+msgstr "Forum - begrenset"
-#: ../../Zotlabs/Widget/Rating.php:57
-msgid "Rating Tools"
-msgstr "Vurderingsverktøy"
+#: ../../Zotlabs/Access/PermissionRoles.php:349
+msgid "Forum - Private"
+msgstr "Forum - privat"
-#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63
-msgid "Rate Me"
-msgstr "Vurder meg"
+#: ../../Zotlabs/Access/PermissionRoles.php:352
+msgid "Feed Republish"
+msgstr "Republisering av strømmet innhold"
-#: ../../Zotlabs/Widget/Rating.php:66
-msgid "View Ratings"
-msgstr "Vis vurderinger"
+#: ../../Zotlabs/Access/PermissionRoles.php:353
+msgid "Feed - Mostly Public"
+msgstr "Strøm - ganske offentlig"
-#: ../../Zotlabs/Widget/Cover_photo.php:74
-msgid "Click to show more"
-msgstr ""
+#: ../../Zotlabs/Access/PermissionRoles.php:354
+msgid "Feed - Restricted"
+msgstr "Strøm - begrenset"
-#: ../../Zotlabs/Widget/Follow.php:27 ../../Zotlabs/Module/Connections.php:377
-#, php-format
-msgid "You have %1$.0f of %2$.0f allowed connections."
-msgstr "Du har %1$.0f av %2$.0f tillate forbindelser."
+#: ../../Zotlabs/Access/PermissionRoles.php:357
+msgid "Special Purpose"
+msgstr "Spesiell bruk"
-#: ../../Zotlabs/Widget/Follow.php:34
-msgid "Add New Connection"
-msgstr "Legg til ny forbindelse"
+#: ../../Zotlabs/Access/PermissionRoles.php:358
+msgid "Special - Celebrity/Soapbox"
+msgstr "Spesiell - kjendis/talerstol"
-#: ../../Zotlabs/Widget/Follow.php:35
-msgid "Enter channel address"
-msgstr "Skriv kanaladressen"
+#: ../../Zotlabs/Access/PermissionRoles.php:359
+msgid "Special - Group Repository"
+msgstr "Spesiell - gruppelager"
-#: ../../Zotlabs/Widget/Follow.php:36
-msgid "Examples: bob@example.com, https://example.com/barbara"
-msgstr "Eksempel: ola@eksempel.no, https://eksempel.no/kari"
+#: ../../Zotlabs/Access/PermissionRoles.php:363
+msgid "Custom/Expert Mode"
+msgstr "Tilpasset/Ekspertmodus"
-#: ../../Zotlabs/Widget/Messages.php:32
-msgid "Public and restricted messages"
-msgstr ""
+#: ../../Zotlabs/Access/PermissionRoles.php:387
+msgid "Personal"
+msgstr "Personlig"
-#: ../../Zotlabs/Widget/Messages.php:33
-msgid "Direct messages"
-msgstr "Direktemeldinger"
+#: ../../Zotlabs/Access/PermissionRoles.php:388
+#, fuzzy
+msgid "Community forum"
+msgstr "Forum for fellesskap"
-#: ../../Zotlabs/Widget/Messages.php:34
-msgid "Starred messages"
+#: ../../Zotlabs/Access/PermissionRoles.php:389
+msgid "Custom"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:35
-#: ../../Zotlabs/Widget/Notifications.php:116
-#: ../../Zotlabs/Widget/Notifications.php:117
-msgid "Notices"
-msgstr "Varsel"
-
-#: ../../Zotlabs/Widget/Messages.php:37
-msgid "No messages"
-msgstr "Ingen meldinger"
-
-#: ../../Zotlabs/Widget/Messages.php:38
-msgid "Unseen"
+#: ../../Zotlabs/Access/Permissions.php:56
+msgid "Can view my channel stream and posts"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:39
-#: ../../Zotlabs/Widget/Notifications.php:34
-#: ../../Zotlabs/Widget/Notifications.php:54
-#: ../../Zotlabs/Widget/Notifications.php:73
-#: ../../Zotlabs/Widget/Notifications.php:134
-#: ../../Zotlabs/Widget/Notifications.php:165
-msgid "Filter by name or address"
-msgstr "Filtrer etter navn eller adresse"
-
-#: ../../Zotlabs/Widget/Newmember.php:36
-msgid "Profile Creation"
-msgstr "Oppretting av profil"
-
-#: ../../Zotlabs/Widget/Newmember.php:38
-msgid "Upload profile photo"
-msgstr "Last opp profilbilde"
-
-#: ../../Zotlabs/Widget/Newmember.php:39
-msgid "Upload cover photo"
-msgstr "Last opp bannerbilde"
-
-#: ../../Zotlabs/Widget/Newmember.php:43
-msgid "Find and Connect with others"
-msgstr "Finn andre"
-
-#: ../../Zotlabs/Widget/Newmember.php:45
-msgid "View the directory"
-msgstr "Se i katalogen"
-
-#: ../../Zotlabs/Widget/Newmember.php:46 ../../Zotlabs/Module/Go.php:38
-msgid "View friend suggestions"
-msgstr "Vis venneforslag"
-
-#: ../../Zotlabs/Widget/Newmember.php:47
-msgid "Manage your connections"
-msgstr "Behandle forbindelser"
-
-#: ../../Zotlabs/Widget/Newmember.php:50
-msgid "Communicate"
-msgstr "Kommuniser"
-
-#: ../../Zotlabs/Widget/Newmember.php:52
-msgid "View your channel homepage"
-msgstr "Vis kanalens hjemmeside"
-
-#: ../../Zotlabs/Widget/Newmember.php:53
-msgid "View your network stream"
-msgstr "Vis nettverksstrømmen"
-
-#: ../../Zotlabs/Widget/Newmember.php:59
-msgid "Documentation"
-msgstr "Dokumentasjon"
+#: ../../Zotlabs/Access/Permissions.php:57
+msgid "Can send me their channel stream and posts"
+msgstr "Kan sende meg deres kanalstrøm og innlegg"
-#: ../../Zotlabs/Widget/Newmember.php:62
-msgid "Missing Features?"
-msgstr "Noe som mangler?"
+#: ../../Zotlabs/Access/Permissions.php:58
+msgid "Can view my default channel profile"
+msgstr "Kan se min standard kanalprofil"
-#: ../../Zotlabs/Widget/Newmember.php:64
-msgid "Pin apps to navigation bar"
-msgstr "Fest apper til navigasjonslinjen"
+#: ../../Zotlabs/Access/Permissions.php:59
+msgid "Can view my connections"
+msgstr "Kan se mine forbindelser"
-#: ../../Zotlabs/Widget/Newmember.php:65
-msgid "Install more apps"
-msgstr "Legg til flere apper"
+#: ../../Zotlabs/Access/Permissions.php:60
+msgid "Can view my file storage and photos"
+msgstr "Kan se mine filer og bilder"
-#: ../../Zotlabs/Widget/Newmember.php:76
-msgid "View public stream"
+#: ../../Zotlabs/Access/Permissions.php:61
+msgid "Can upload/modify my file storage and photos"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:80
-#: ../../Zotlabs/Module/Settings/Display.php:200
-msgid "New Member Links"
-msgstr "Lenker for nye medlemmer"
-
-#: ../../Zotlabs/Widget/Notes.php:39
-msgid "Read mode"
+#: ../../Zotlabs/Access/Permissions.php:62
+msgid "Can view my channel webpages"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:40
-msgid "Edit mode"
+#: ../../Zotlabs/Access/Permissions.php:63
+msgid "Can view my wiki pages"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:41
-msgid "Editing"
+#: ../../Zotlabs/Access/Permissions.php:64
+msgid "Can create/edit my channel webpages"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:42
-msgid "Saving"
+#: ../../Zotlabs/Access/Permissions.php:65
+msgid "Can write to my wiki pages"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:43
-msgid "Saved"
+#: ../../Zotlabs/Access/Permissions.php:66
+msgid "Can post on my channel (wall) page"
msgstr ""
-#: ../../Zotlabs/Widget/Affinity.php:36
-#: ../../Zotlabs/Module/Contactedit.php:295
-#: ../../Zotlabs/Module/Connedit.php:579
-msgid "Me"
-msgstr "Meg"
-
-#: ../../Zotlabs/Widget/Affinity.php:37
-#: ../../Zotlabs/Module/Contactedit.php:296
-#: ../../Zotlabs/Module/Connedit.php:580
-msgid "Family"
-msgstr "Familie"
-
-#: ../../Zotlabs/Widget/Affinity.php:39
-#: ../../Zotlabs/Module/Contactedit.php:298
-#: ../../Zotlabs/Module/Connedit.php:582
-msgid "Acquaintances"
-msgstr "Bekjente"
-
-#: ../../Zotlabs/Widget/Affinity.php:40
-#: ../../Zotlabs/Module/Contactedit.php:299
-#: ../../Zotlabs/Module/Connections.php:97
-#: ../../Zotlabs/Module/Connections.php:111
-#: ../../Zotlabs/Module/Connedit.php:583
-msgid "All"
-msgstr "Alle"
+#: ../../Zotlabs/Access/Permissions.php:67
+msgid "Can comment on or like my posts"
+msgstr "Kan kommentere på eller like mine innlegg"
-#: ../../Zotlabs/Widget/Affinity.php:60
-msgid "Refresh"
-msgstr "Forny"
+#: ../../Zotlabs/Access/Permissions.php:68
+msgid "Can send me direct messages"
+msgstr "Kan sende meg direktemeldinger"
-#: ../../Zotlabs/Widget/Notifications.php:24
-msgid "New network activity notifications"
+#: ../../Zotlabs/Access/Permissions.php:69
+msgid "Can like/dislike profiles and profile things"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:27
-msgid "Network stream"
+#: ../../Zotlabs/Access/Permissions.php:70
+msgid "Can chat with me"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:30
-#: ../../Zotlabs/Widget/Notifications.php:69
-msgid "Mark all notifications read"
+#: ../../Zotlabs/Access/Permissions.php:71
+msgid "Can source/mirror my public posts in derived channels"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:33
-#: ../../Zotlabs/Widget/Notifications.php:53
-#: ../../Zotlabs/Widget/Notifications.php:72
-#: ../../Zotlabs/Widget/Notifications.php:164
-msgid "Show new posts only"
+#: ../../Zotlabs/Access/Permissions.php:73
+msgid "Can administer my channel"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:44
-msgid "New home activity notifications"
+#: ../../Zotlabs/Web/Router.php:188 ../../Zotlabs/Module/Help.php:172
+#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Page.php:136
+#: ../../Zotlabs/Module/Display.php:155
+#: ../../extend/addon/hzaddons/articles/articles.php:105
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:545
+#: ../../extend/addon/hzaddons/cards/cards.php:104
+msgid "Page not found."
+msgstr "Siden ikke funnet."
+
+#: ../../Zotlabs/Storage/Browser.php:292
+msgid "Change filename to"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:47
-msgid "Home stream"
+#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394
+msgid "Select a target location"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:50
-#: ../../Zotlabs/Widget/Notifications.php:161
-msgid "Mark all notifications seen"
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:395
+msgid "Copy to target location"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:63
-msgid "New direct messages notifications"
-msgstr "Varsel om nye direktemeldinger"
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:393
+msgid "Set permissions for all files and sub folders"
+msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:66
-msgid "Direct messages stream"
-msgstr "Strøm for direktemeldinger"
+#: ../../Zotlabs/Storage/Browser.php:312
+msgid "Notify your contacts about this file"
+msgstr "Varsle dine kontakter om denne filen"
-#: ../../Zotlabs/Widget/Notifications.php:82
-msgid "New events notifications"
+#: ../../Zotlabs/Storage/Browser.php:351
+msgid "File category"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:85
-msgid "View events"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:365
+msgid "Total"
+msgstr "Totalt"
-#: ../../Zotlabs/Widget/Notifications.php:88
-msgid "Mark all events seen"
-msgstr "Merk alle hendelser som sett"
+#: ../../Zotlabs/Storage/Browser.php:367
+msgid "Shared"
+msgstr "Delt"
-#: ../../Zotlabs/Widget/Notifications.php:96
-#: ../../Zotlabs/Module/Connections.php:168
-msgid "New Connections"
-msgstr "Nye forbindelser"
+#: ../../Zotlabs/Storage/Browser.php:368 ../../Zotlabs/Storage/Browser.php:545
+#: ../../Zotlabs/Module/Menu.php:182 ../../Zotlabs/Module/New_channel.php:190
+#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Connedit.php:747
+#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/Webpages.php:249
+#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1383
+#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184
+msgid "Create"
+msgstr "Lag"
-#: ../../Zotlabs/Widget/Notifications.php:97
-msgid "New connections notifications"
+#: ../../Zotlabs/Storage/Browser.php:369
+msgid "Add Files"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:100
-msgid "View all connections"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:381 ../../Zotlabs/Module/Oauth.php:111
+#: ../../Zotlabs/Module/Oauth.php:137 ../../Zotlabs/Module/Oauth2.php:116
+#: ../../Zotlabs/Module/Oauth2.php:144 ../../Zotlabs/Module/Chat.php:256
+#: ../../Zotlabs/Module/Connedit.php:732
+#: ../../Zotlabs/Module/Admin/Channels.php:181
+#: ../../Zotlabs/Module/Sharedwithme.php:107 ../../Zotlabs/Module/Cdav.php:1368
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:172
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:588
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:221
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:28
+msgid "Name"
+msgstr "Navn"
-#: ../../Zotlabs/Widget/Notifications.php:109
-msgid "New files notifications"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:382
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:222
+msgid "Type"
+msgstr "Type"
-#: ../../Zotlabs/Widget/Notifications.php:120
-msgid "View all notices"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:384
+#: ../../Zotlabs/Module/Sharedwithme.php:110
+msgid "Last Modified"
+msgstr "Sist endret"
-#: ../../Zotlabs/Widget/Notifications.php:123
-msgid "Mark all notices seen"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:385
+msgid "parent"
+msgstr "opp et nivå"
-#: ../../Zotlabs/Widget/Notifications.php:144
-msgid "Registrations"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:390
+#: ../../Zotlabs/Module/Filestorage.php:206
+msgid "Copy/paste this code to attach file to a post"
+msgstr "Kopier og lim inn denne koden for å legge til filen i et innlegg"
-#: ../../Zotlabs/Widget/Notifications.php:145
-msgid "New registrations notifications"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:391
+#: ../../Zotlabs/Module/Filestorage.php:207
+msgid "Copy/paste this URL to link file from a web page"
+msgstr "Kopier og lim inn denne URL-en for å lenke til filen fra en webside"
-#: ../../Zotlabs/Widget/Notifications.php:154
-#: ../../Zotlabs/Module/Pubstream.php:100 ../../Zotlabs/Lib/Apps.php:380
-msgid "Public Stream"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:403
+#, fuzzy
+msgid "Select All"
+msgstr "velg alle"
-#: ../../Zotlabs/Widget/Notifications.php:155
-msgid "New public stream notifications"
+#: ../../Zotlabs/Storage/Browser.php:404
+msgid "Bulk Actions"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:158
-msgid "Public stream"
+#: ../../Zotlabs/Storage/Browser.php:405
+msgid "Adjust Permissions"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:172
-msgid "Sorry, you have got no notifications at the moment"
+#: ../../Zotlabs/Storage/Browser.php:406
+msgid "Move or Copy"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:94
-#, php-format
-msgid "This channel is limited to %d tokens"
+#: ../../Zotlabs/Storage/Browser.php:408
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:215
+msgid "Download"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:100
-msgid "Name and Password are required."
+#: ../../Zotlabs/Storage/Browser.php:409
+msgid "Info"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:215
-msgid "Token saved."
+#: ../../Zotlabs/Storage/Browser.php:410
+msgid "Rename"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:261
-msgid ""
-"Use this form to create temporary access identifiers to share things with "
-"non-members. These identities may be used in privacy groups and visitors may "
-"login using these credentials to access private content."
+#: ../../Zotlabs/Storage/Browser.php:412
+msgid "Attachment BBcode"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:274
-msgid "Please select a role for this guest!"
+#: ../../Zotlabs/Storage/Browser.php:413
+msgid "Embed BBcode"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:287
-msgid "Select a role for this guest"
+#: ../../Zotlabs/Storage/Browser.php:414
+msgid "Link BBcode"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:288 ../../Zotlabs/Lib/Apps.php:374
-msgid "Guest Access"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:487
+#, php-format
+msgid "You are using %1$s of your available file storage."
+msgstr "Du bruker %1$s av din tilgjengelige lagringsplass."
-#: ../../Zotlabs/Module/Tokens.php:291
-msgid "Login Name"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:492
+#, php-format
+msgid "You are using %1$s of %2$s available file storage. (%3$s&#37;)"
+msgstr "Du bruker %1$s av %2$s tilgjengelig lagringsplass (%3$s&#37;)"
-#: ../../Zotlabs/Module/Tokens.php:292
-msgid "Login Password"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:503
+msgid "WARNING:"
+msgstr "ADVARSEL:"
-#: ../../Zotlabs/Module/Tokens.php:293
-msgid "Expires (yyyy-mm-dd)"
-msgstr ""
+#: ../../Zotlabs/Storage/Browser.php:544
+msgid "Create new folder"
+msgstr "Lag ny mappe"
-#: ../../Zotlabs/Module/Attach_edit.php:69
-#: ../../Zotlabs/Module/Filestorage.php:109
-msgid "File not found."
-msgstr "Filen ble ikke funnet."
+#: ../../Zotlabs/Storage/Browser.php:546
+msgid "Upload file"
+msgstr "Last opp fil"
-#: ../../Zotlabs/Module/Attach_edit.php:118
-msgid "Can not copy folder into itself."
+#: ../../Zotlabs/Storage/Browser.php:547 ../../Zotlabs/Module/Photos.php:681
+#: ../../Zotlabs/Module/Cover_photo.php:381
+#: ../../Zotlabs/Module/Profile_photo.php:547
+#: ../../Zotlabs/Module/Embedphotos.php:189 ../../Zotlabs/Widget/Album.php:103
+#: ../../Zotlabs/Widget/Portfolio.php:114 ../../Zotlabs/Widget/Cdav.php:152
+#: ../../Zotlabs/Widget/Cdav.php:188
+msgid "Upload"
+msgstr "Last opp"
+
+#: ../../Zotlabs/Storage/Browser.php:558
+msgid "Drop files here to immediately upload"
msgstr ""
-#: ../../Zotlabs/Module/Attach_edit.php:131
-#, php-format
-msgid "Can not move folder \"%s\" into itself."
+#: ../../Zotlabs/Storage/Browser.php:559
+#: ../../Zotlabs/Module/Filestorage.php:211
+msgid "Show in your contacts shared folder"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:108
-msgid "No such group"
-msgstr "Gruppen finnes ikke"
+#: ../../Zotlabs/Storage/Browser.php:561
+msgid ""
+"You can select files via the upload button or drop them right here or into "
+"an existing folder."
+msgstr ""
-#: ../../Zotlabs/Module/Network.php:160
-msgid "No such channel"
-msgstr "Ingen slik kanal"
+#: ../../Zotlabs/Module/Menu.php:68
+msgid "Unable to update menu."
+msgstr "Ikke i stand til å oppdatere meny."
-#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:234
-msgid "Search Results For:"
-msgstr "Søkeresultat for:"
+#: ../../Zotlabs/Module/Menu.php:79
+msgid "Unable to create menu."
+msgstr "Ikke i stand til å lage meny."
-#: ../../Zotlabs/Module/Network.php:213 ../../Zotlabs/Module/Channel.php:267
-#: ../../Zotlabs/Module/Hq.php:103 ../../Zotlabs/Module/Pubstream.php:89
-#: ../../Zotlabs/Module/Display.php:89
-msgid "Reset form"
-msgstr "Nullstill skjema"
+#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
+msgid "Menu Name"
+msgstr "Menynavn"
-#: ../../Zotlabs/Module/Network.php:248
-msgid "Privacy group is empty"
-msgstr "Personverngruppen er tom"
+#: ../../Zotlabs/Module/Menu.php:161
+msgid "Unique name (not visible on webpage) - required"
+msgstr "Unikt navn (ikke synlig på websiden) - påkrevet"
-#: ../../Zotlabs/Module/Network.php:258
-msgid "Privacy group: "
-msgstr "Personverngruppe: "
+#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
+msgid "Menu Title"
+msgstr "Menytittel"
-#: ../../Zotlabs/Module/Import_items.php:50
-msgid "Not a zip file or zip file corrupted."
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:162
+msgid "Visible on webpage - leave empty for no title"
+msgstr "Synlig på websiden - la stå tomt for ingen tittel"
-#: ../../Zotlabs/Module/Import_items.php:121
-msgid "Import Items"
-msgstr "Importer elementer"
+#: ../../Zotlabs/Module/Menu.php:163
+msgid "Allow Bookmarks"
+msgstr "Tillat bokmerker"
-#: ../../Zotlabs/Module/Import_items.php:122
-msgid "Use this form to import existing posts and content from an export file."
-msgstr ""
-"Bruk dette skjemaet for å importere eksisterende innlegg og innhold fra en "
-"eksportfil."
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+msgid "Menu may be used to store saved bookmarks"
+msgstr "Menyen kan brukes til å lagre lagrede bokmerker"
-#: ../../Zotlabs/Module/Import_items.php:123
-#: ../../Zotlabs/Module/Import.php:594
-msgid "File to Upload"
-msgstr "Fil som skal lastes opp"
+#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
+msgid "Submit and proceed"
+msgstr "Send inn og fortsett"
-#: ../../Zotlabs/Module/Import_items.php:136
-#: ../../Zotlabs/Module/Import.php:107
-msgid "Imported file is empty."
-msgstr "Importert fil er tom."
+#: ../../Zotlabs/Module/Menu.php:177 ../../Zotlabs/Module/Locs.php:124
+msgid "Drop"
+msgstr "Slett"
-#: ../../Zotlabs/Module/Import_items.php:159
-msgid "Content import completed"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Layouts.php:189
+#: ../../Zotlabs/Module/Blocks.php:155 ../../Zotlabs/Module/Webpages.php:261
+msgid "Created"
+msgstr "Laget"
-#: ../../Zotlabs/Module/Import_items.php:164
-msgid "Chatroom import completed"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Layouts.php:190
+#: ../../Zotlabs/Module/Blocks.php:156 ../../Zotlabs/Module/Webpages.php:262
+msgid "Edited"
+msgstr "Endret"
-#: ../../Zotlabs/Module/Import_items.php:170
-msgid "Channel calendar import 1/2 completed"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:180 ../../Zotlabs/Module/Connections.php:83
+#: ../../Zotlabs/Module/Connections.php:92
+#: ../../Zotlabs/Module/Notifications.php:101
+msgid "New"
+msgstr "Nye"
-#: ../../Zotlabs/Module/Import_items.php:176
-msgid "Channel calendar import 2/2 completed"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:181
+msgid "Bookmarks allowed"
+msgstr "Bokmerker tillatt"
-#: ../../Zotlabs/Module/Import_items.php:181
-msgid "Menu import completed"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:183
+msgid "Delete this menu"
+msgstr "Slett denne menyen"
-#: ../../Zotlabs/Module/Import_items.php:186
-msgid "Wiki import completed"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
+msgid "Edit menu contents"
+msgstr "Endre menyinnholdet"
-#: ../../Zotlabs/Module/Import_items.php:191
-msgid "Webpages import completed"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:185
+msgid "Edit this menu"
+msgstr "Endre denne menyen"
-#: ../../Zotlabs/Module/Import.php:70
-msgid "Nothing to import."
-msgstr "Ingenting å importere."
+#: ../../Zotlabs/Module/Menu.php:201
+msgid "Menu could not be deleted."
+msgstr "Menyen kunne ikke bli slettet."
-#: ../../Zotlabs/Module/Import.php:86 ../../Zotlabs/Module/Import.php:100
-msgid "Unable to download data from old server"
-msgstr "Ikke i stand til å laste ned data fra gammel tjener"
+#: ../../Zotlabs/Module/Menu.php:209 ../../Zotlabs/Module/Mitem.php:31
+msgid "Menu not found."
+msgstr "Menyen ble ikke funnet."
-#: ../../Zotlabs/Module/Import.php:163
-#, php-format
-msgid "Your service plan only allows %d channels."
-msgstr "Din tjenesteplan tillater bare %d kanaler."
+#: ../../Zotlabs/Module/Menu.php:214
+msgid "Edit Menu"
+msgstr "Endre meny"
-#: ../../Zotlabs/Module/Import.php:190
-msgid "No channel. Import failed."
-msgstr "Ingen kanal. Import mislyktes."
+#: ../../Zotlabs/Module/Menu.php:218
+msgid "Add or remove entries to this menu"
+msgstr "Legg til eller fjern punkter i denne menyen"
-#: ../../Zotlabs/Module/Import.php:557
-msgid ""
-"Automatic content and files import was not possible due to API version "
-"incompatiblity. Please import content and files manually!"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Menu name"
+msgstr "Menynavn"
-#: ../../Zotlabs/Module/Import.php:585
-msgid "You must be logged in to use this feature."
-msgstr "Du må være innlogget for å bruke denne funksjonen."
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Must be unique, only seen by you"
+msgstr "Må være unik, ses bare av deg"
-#: ../../Zotlabs/Module/Import.php:592
-msgid "Channel Import"
-msgstr ""
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title"
+msgstr "Menytittel"
-#: ../../Zotlabs/Module/Import.php:593
-msgid ""
-"Use this form to import an existing channel from a different server/hub. You "
-"may retrieve the channel identity from the old server/hub via the network or "
-"provide an export file."
-msgstr ""
-"Bruk dette skjemaet for å importere en eksisterende kanal fra en annen "
-"tjener/hub. Du kan hente inn kanalidentiteten fra den gamle tjeneren/huben "
-"via nettverket eller ved å bruke en eksportfil."
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title as seen by others"
+msgstr "Menytittelen andre ser"
-#: ../../Zotlabs/Module/Import.php:595
-msgid "Or provide the old server/hub details"
-msgstr "Eller oppgi detaljene fra den gamle tjeneren/hub-en"
+#: ../../Zotlabs/Module/Menu.php:222
+msgid "Allow bookmarks"
+msgstr "Tillat bokmerker"
-#: ../../Zotlabs/Module/Import.php:597
-msgid "Your old identity address (xyz@example.com)"
-msgstr "Din gamle identitetsadresse (xyz@example.com)"
+#: ../../Zotlabs/Module/Menu.php:232 ../../Zotlabs/Module/Xchan.php:41
+#: ../../Zotlabs/Module/Mitem.php:134
+msgid "Not found."
+msgstr "Ikke funnet."
-#: ../../Zotlabs/Module/Import.php:598
-msgid "Your old login email address"
-msgstr "Din gamle innloggings e-postadresse"
+#: ../../Zotlabs/Module/Help.php:61
+msgid "Documentation Search"
+msgstr "Søk i dokumentasjon"
-#: ../../Zotlabs/Module/Import.php:599
-msgid "Your old login password"
-msgstr "Ditt gamle innloggingspassord"
+#: ../../Zotlabs/Module/Help.php:169
+msgid "Not Found"
+msgstr "Ikke funnet"
-#: ../../Zotlabs/Module/Import.php:600
-msgid "Import your items and files (limited by available memory)"
-msgstr ""
+#: ../../Zotlabs/Module/Help.php:222
+msgid "$Projectname Documentation"
+msgstr "$Projectname dokumentasjon"
-#: ../../Zotlabs/Module/Import.php:602
-msgid ""
-"For either option, please choose whether to make this hub your new primary "
-"address, or whether your old location should continue this role. You will be "
-"able to post from either location, but only one can be marked as the primary "
-"location for files, photos, and media."
+#: ../../Zotlabs/Module/Help.php:233
+msgid "Contents"
msgstr ""
-"Enten du tar det ene eller det andre valget, vennligst angi om du vil at "
-"denne hubben skal være din nye primære adresse, eller om din gamle "
-"plassering skal fortsette å ha denne rollen. Du kan lage innlegg fra den ene "
-"eller den andre plasseringen, men bare en av dem kan markeres som den "
-"primære plasseringen for filer, bilder og media."
-#: ../../Zotlabs/Module/Import.php:604
-msgid "Make this hub my primary location"
-msgstr "Gjør dette nettstedet til min primære plassering"
+#: ../../Zotlabs/Module/Help.php:240
+msgid "Members"
+msgstr "Medlemmer"
-#: ../../Zotlabs/Module/Import.php:605
-msgid "Move this channel (disable all previous locations)"
+#: ../../Zotlabs/Module/Help.php:241
+msgid "Administrators"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:606
-msgid "Use this channel nickname instead of the one provided"
+#: ../../Zotlabs/Module/Help.php:242
+msgid "Developers"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:606
-msgid ""
-"Leave blank to keep your existing channel nickname. You will be randomly "
-"assigned a similar nickname if either name is already allocated on this site."
+#: ../../Zotlabs/Module/Help.php:243
+msgid "Tutorials"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:608
-msgid ""
-"This process may take several minutes to complete. Please submit the form "
-"only once and leave this page open until finished."
-msgstr ""
-"Denne prosessen kan ta flere minutter å fullføre. Vennligst send inn dette "
-"skjemaet bare en gang og la siden være åpen inntil den er ferdig."
+#: ../../Zotlabs/Module/Help.php:261
+msgid "Help:"
+msgstr "Hjelp:"
-#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:29
-msgid "You must be logged in to see this page."
-msgstr "Du må være innloegget for å se denne siden."
+#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95
+#: ../../Zotlabs/Module/Editlayout.php:79 ../../Zotlabs/Module/Editpost.php:24
+#: ../../Zotlabs/Module/Editwebpage.php:80
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:17
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:33
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:17
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:33
+msgid "Item not found"
+msgstr "Elementet ble ikke funnet."
-#: ../../Zotlabs/Module/Z6trans.php:19
-msgid "Update to Hubzilla 5.0 step 2"
-msgstr ""
+#: ../../Zotlabs/Module/Editblock.php:113 ../../Zotlabs/Module/Blocks.php:97
+#: ../../Zotlabs/Module/Blocks.php:153
+msgid "Block Name"
+msgstr "Byggeklossens navn"
-#: ../../Zotlabs/Module/Z6trans.php:21
-msgid "To complete the update please run"
-msgstr ""
+#: ../../Zotlabs/Module/Editblock.php:138
+msgid "Edit Block"
+msgstr "Endre byggekloss"
-#: ../../Zotlabs/Module/Z6trans.php:23
-msgid "php util/z6convert.php"
-msgstr ""
+#: ../../Zotlabs/Module/Channel.php:150 ../../Zotlabs/Module/Hcard.php:37
+#: ../../Zotlabs/Module/Profile.php:62
+msgid "Posts and comments"
+msgstr "Innlegg og kommentarer"
-#: ../../Zotlabs/Module/Z6trans.php:25
-msgid "from the terminal."
-msgstr ""
+#: ../../Zotlabs/Module/Channel.php:157 ../../Zotlabs/Module/Hcard.php:44
+#: ../../Zotlabs/Module/Profile.php:69
+msgid "Only posts"
+msgstr "Kun innlegg"
-#: ../../Zotlabs/Module/Register.php:112
-msgid "Email address required"
+#: ../../Zotlabs/Module/Channel.php:195 ../../Zotlabs/Module/Oep.php:82
+#: ../../Zotlabs/Module/Pubstream.php:55 ../../Zotlabs/Module/Display.php:53
+msgid "Malformed message id."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:156
-msgid "No password provided"
-msgstr ""
+#: ../../Zotlabs/Module/Channel.php:231
+msgid "Insufficient permissions. Request redirected to profile page."
+msgstr "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden."
-#: ../../Zotlabs/Module/Register.php:179
-msgid "Terms of Service not accepted"
-msgstr ""
+#: ../../Zotlabs/Module/Channel.php:246 ../../Zotlabs/Module/Network.php:172
+msgid "Search Results For:"
+msgstr "Søkeresultat for:"
-#: ../../Zotlabs/Module/Register.php:241
-msgid "Invitation code succesfully applied"
-msgstr ""
+#: ../../Zotlabs/Module/Channel.php:279 ../../Zotlabs/Module/Rpost.php:111
+#: ../../Zotlabs/Module/Network.php:213 ../../Zotlabs/Module/Hq.php:99
+#: ../../Zotlabs/Module/Pubstream.php:98 ../../Zotlabs/Module/Display.php:95
+msgid "Reset form"
+msgstr "Nullstill skjema"
-#: ../../Zotlabs/Module/Register.php:261
-msgid "Invitation not in time or too late"
+#: ../../Zotlabs/Module/Channel.php:501 ../../Zotlabs/Module/Display.php:320
+msgid ""
+"You must enable javascript for your browser to be able to view this content."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:267
-msgid "Invitation email failed"
-msgstr ""
+#: ../../Zotlabs/Module/New_channel.php:148 ../../Zotlabs/Module/Manage.php:130
+#, php-format
+msgid "You have created %1$.0f of %2$.0f allowed channels."
+msgstr "Du har laget %1$.0f av %2$.0f tillatte kanaler."
-#: ../../Zotlabs/Module/Register.php:275
-msgid "Invitation code failed"
+#: ../../Zotlabs/Module/New_channel.php:160
+msgid "Your real name is recommended."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:282
-msgid "Invitations are not available"
+#: ../../Zotlabs/Module/New_channel.php:161
+msgid ""
+"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation "
+"Group\""
msgstr ""
+"Eksempel: \"Ola Nordmann\", \"Lisa og hestene hennes\", \"Fotball\", "
+"\"Sykkelgruppa\""
-#: ../../Zotlabs/Module/Register.php:292
-msgid "Registration on this hub is by invitation only"
+#: ../../Zotlabs/Module/New_channel.php:166
+msgid ""
+"This will be used to create a unique network address (like an email address)."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:399
-msgid "New register request"
+#: ../../Zotlabs/Module/New_channel.php:168
+msgid "Allowed characters are a-z 0-9, - and _"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:417
-msgid "Error creating dId A"
-msgstr ""
+#: ../../Zotlabs/Module/New_channel.php:176
+#, fuzzy
+msgid "Channel name"
+msgstr "Kanalnavn"
-#: ../../Zotlabs/Module/Register.php:435
-msgid "Registration on this hub is disabled."
-msgstr "Registrering ved dette nettstedet er skrudd av."
+#: ../../Zotlabs/Module/New_channel.php:178
+#: ../../Zotlabs/Module/Register.php:513
+msgid "Choose a short nickname"
+msgstr "Velg et kort kallenavn"
-#: ../../Zotlabs/Module/Register.php:444
-msgid "Registration on this hub is by approval only."
-msgstr "Registrering ved dette nettstedet skjer på godkjenning."
+#: ../../Zotlabs/Module/New_channel.php:179
+#: ../../Zotlabs/Module/Settings/Channel.php:234
+msgid "Channel role"
+msgstr "Kanalrolle"
-#: ../../Zotlabs/Module/Register.php:445
-msgid "Register at another affiliated hub in case when prefered"
+#: ../../Zotlabs/Module/New_channel.php:182
+msgid "Create a Channel"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:458
-msgid "Registration on this hub is by invitation only."
+#: ../../Zotlabs/Module/New_channel.php:183
+msgid ""
+"A channel is a unique network identity. It can represent a person (social "
+"network profile), a forum (group), a business or celebrity page, a newsfeed, "
+"and many other things."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:459
-msgid "Register at another affiliated hub"
+#: ../../Zotlabs/Module/New_channel.php:184
+msgid ""
+"or <a href=\"import\">import an existing channel</a> from another location."
msgstr ""
+"eller <a href=\"import\">importer en eksisterende kanal</a> fra et annet "
+"sted."
-#: ../../Zotlabs/Module/Register.php:473 ../../Zotlabs/Module/Siteinfo.php:28
-msgid "Terms of Service"
-msgstr "Tjenesteavtale"
+#: ../../Zotlabs/Module/New_channel.php:189
+msgid "Validate"
+msgstr ""
-#: ../../Zotlabs/Module/Register.php:479
-#, php-format
-msgid "I accept the %s for this website"
-msgstr "Jeg godtar %s for dette nettstedet"
+#: ../../Zotlabs/Module/Oexchange.php:27
+msgid "Unable to find your hub."
+msgstr "Ikke i stand til å finne hubben din."
-#: ../../Zotlabs/Module/Register.php:486
-#, php-format
-msgid "I am over %s years of age and accept the %s for this website"
+#: ../../Zotlabs/Module/Oexchange.php:41
+msgid "Post successful."
+msgstr "Innlegg vellykket."
+
+#: ../../Zotlabs/Module/Import_items.php:50
+msgid "Not a zip file or zip file corrupted."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:496
-msgid "Your email address"
-msgstr "Din e-postadresse"
+#: ../../Zotlabs/Module/Import_items.php:121
+msgid "Import Items"
+msgstr "Importer elementer"
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Oauth.php:115
-#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
-msgid "Optional"
-msgstr "Valgfritt"
+#: ../../Zotlabs/Module/Import_items.php:122
+msgid "Use this form to import existing posts and content from an export file."
+msgstr ""
+"Bruk dette skjemaet for å importere eksisterende innlegg og innhold fra en "
+"eksportfil."
-#: ../../Zotlabs/Module/Register.php:503
-msgid "Choose a password"
-msgstr "Velg et passord"
+#: ../../Zotlabs/Module/Import_items.php:123
+#: ../../Zotlabs/Module/Import.php:605
+msgid "File to Upload"
+msgstr "Fil som skal lastes opp"
-#: ../../Zotlabs/Module/Register.php:504
-msgid "Please re-enter your password"
-msgstr "Vennligst skriv ditt passord en gang til"
+#: ../../Zotlabs/Module/Import_items.php:136
+#: ../../Zotlabs/Module/Import.php:108
+msgid "Imported file is empty."
+msgstr "Importert fil er tom."
-#: ../../Zotlabs/Module/Register.php:506
-msgid "Please enter your invitation code"
-msgstr "Vennligst skriv din invitasjonskode"
+#: ../../Zotlabs/Module/Import_items.php:159
+msgid "Content import completed"
+msgstr ""
-#: ../../Zotlabs/Module/Register.php:508
-msgid "Your name"
+#: ../../Zotlabs/Module/Import_items.php:164
+msgid "Chatroom import completed"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:508
-msgid "Real name is preferred"
+#: ../../Zotlabs/Module/Import_items.php:170
+msgid "Channel calendar import 1/2 completed"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:510
-#: ../../Zotlabs/Module/New_channel.php:177
-msgid "Choose a short nickname"
-msgstr "Velg et kort kallenavn"
+#: ../../Zotlabs/Module/Import_items.php:176
+msgid "Channel calendar import 2/2 completed"
+msgstr ""
-#: ../../Zotlabs/Module/Register.php:510
-msgid ""
-"Your nickname will be used to create an easy to remember channel address"
+#: ../../Zotlabs/Module/Import_items.php:181
+msgid "Menu import completed"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:514
-msgid "Why do you want to join this hub?"
+#: ../../Zotlabs/Module/Import_items.php:186
+msgid "Wiki import completed"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:514
-msgid "This will help to review your registration"
+#: ../../Zotlabs/Module/Import_items.php:191
+msgid "Webpages import completed"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:520
-#: ../../Zotlabs/Module/Admin/Site.php:416
-msgid "Registration"
-msgstr "Registrering"
+#: ../../Zotlabs/Module/Rpost.php:117 ../../Zotlabs/Module/Editpost.php:113
+msgid "Edit post"
+msgstr "Endre innlegg"
-#: ../../Zotlabs/Module/Register.php:528
-msgid "I have an invite code"
+#: ../../Zotlabs/Module/Block.php:29 ../../Zotlabs/Module/Page.php:39
+msgid "Invalid item."
+msgstr "Ugyldig element."
+
+#: ../../Zotlabs/Module/Block.php:41 ../../Zotlabs/Module/Chanview.php:95
+#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Page.php:75
+#: ../../Zotlabs/Module/Wall_upload.php:30
+#: ../../Zotlabs/Module/Attach_edit.php:52 ../../Zotlabs/Module/Attach.php:22
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:44
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:44
+msgid "Channel not found."
+msgstr "Kanalen ble ikke funnet."
+
+#: ../../Zotlabs/Module/Lang.php:20
+msgid "Language App"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:575
-msgid ""
-"This site has exceeded the number of allowed daily account registrations."
+#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:70
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:35
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:35
+msgid "Not Installed"
msgstr ""
-#: ../../Zotlabs/Module/Search.php:23
-#: ../../Zotlabs/Module/Viewconnections.php:23
-#: ../../Zotlabs/Module/Display.php:28 ../../Zotlabs/Module/Directory.php:72
-#: ../../Zotlabs/Module/Directory.php:77 ../../Zotlabs/Module/Photos.php:511
-msgid "Public access denied."
-msgstr "Offentlig tilgang avvist."
+#: ../../Zotlabs/Module/Email_resend.php:12
+#: ../../Zotlabs/Module/Email_validation.php:25
+msgid "Token verification failed."
+msgstr ""
-#: ../../Zotlabs/Module/Search.php:250
-#, php-format
-msgid "Items tagged with: %s"
-msgstr "Elementer merket med: %s"
+#: ../../Zotlabs/Module/Email_resend.php:30
+msgid "Email verification resent"
+msgstr ""
-#: ../../Zotlabs/Module/Search.php:252
-#, php-format
-msgid "Search results for: %s"
-msgstr "Søkeresultater for: %s"
+#: ../../Zotlabs/Module/Email_resend.php:33
+msgid "Unable to resend email verification message."
+msgstr ""
-#: ../../Zotlabs/Module/Setup.php:179
+#: ../../Zotlabs/Module/Setup.php:180
msgid "$Projectname Server - Setup"
msgstr "$Projectname-tjener - oppsett"
-#: ../../Zotlabs/Module/Setup.php:183
+#: ../../Zotlabs/Module/Setup.php:184
msgid "Could not connect to database."
msgstr "Fikk ikke kontakt med databasen."
-#: ../../Zotlabs/Module/Setup.php:187
+#: ../../Zotlabs/Module/Setup.php:188
msgid ""
"Could not connect to specified site URL. Possible SSL certificate or DNS "
"issue."
@@ -8444,15 +5688,15 @@ msgstr ""
"Fikk ikke kontakt med det angitte nettstedets URL. Problemet kan muligens "
"skyldes SSL-sertifikatet eller DNS."
-#: ../../Zotlabs/Module/Setup.php:194
+#: ../../Zotlabs/Module/Setup.php:195
msgid "Could not create table."
msgstr "Kunne ikke lage tabellen."
-#: ../../Zotlabs/Module/Setup.php:200
+#: ../../Zotlabs/Module/Setup.php:201
msgid "Your site database has been installed."
msgstr "Databasen til ditt nettsted har blitt installert."
-#: ../../Zotlabs/Module/Setup.php:206
+#: ../../Zotlabs/Module/Setup.php:207
msgid ""
"You may need to import the file \"install/schema_xxx.sql\" manually using a "
"database client."
@@ -8460,36 +5704,36 @@ msgstr ""
"Du må kanskje importere filen \"install/schmea_xxx.sql\" manuelt ved å bruke "
"en databaseklient."
-#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
-#: ../../Zotlabs/Module/Setup.php:778
+#: ../../Zotlabs/Module/Setup.php:208 ../../Zotlabs/Module/Setup.php:274
+#: ../../Zotlabs/Module/Setup.php:799
msgid "Please see the file \"install/INSTALL.txt\"."
msgstr "Vennligst les filen \"install/INSTALL.txt\"."
-#: ../../Zotlabs/Module/Setup.php:268
+#: ../../Zotlabs/Module/Setup.php:271
msgid "System check"
msgstr "Systemsjekk"
-#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Cdav.php:1027
-#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Photos.php:951
+#: ../../Zotlabs/Module/Setup.php:275 ../../Zotlabs/Module/Photos.php:955
+#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Cdav.php:1027
msgid "Next"
msgstr "Neste"
-#: ../../Zotlabs/Module/Setup.php:273
+#: ../../Zotlabs/Module/Setup.php:276
msgid "Check again"
msgstr "Sjekk igjen"
-#: ../../Zotlabs/Module/Setup.php:294
+#: ../../Zotlabs/Module/Setup.php:297
msgid "Database connection"
msgstr "Databaseforbindelse"
-#: ../../Zotlabs/Module/Setup.php:295
+#: ../../Zotlabs/Module/Setup.php:298
msgid ""
"In order to install $Projectname we need to know how to connect to your "
"database."
msgstr ""
"For å installere $Projectname må du oppgi hvordan din database kan kontaktes."
-#: ../../Zotlabs/Module/Setup.php:296
+#: ../../Zotlabs/Module/Setup.php:299
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
@@ -8497,7 +5741,7 @@ msgstr ""
"Vennligst kontakt din nettstedstilbyder eller nettstedsadministrator hvis du "
"har spørsmål om disse innstillingene."
-#: ../../Zotlabs/Module/Setup.php:297
+#: ../../Zotlabs/Module/Setup.php:300
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
@@ -8505,43 +5749,43 @@ msgstr ""
"Databasen du oppgir nedenfor må finnes på forhånd. Hvis den ikke finnes, "
"vennligst lag den før du fortsetter."
-#: ../../Zotlabs/Module/Setup.php:301
+#: ../../Zotlabs/Module/Setup.php:304
msgid "Database Server Name"
msgstr "Navn på databasetjener"
-#: ../../Zotlabs/Module/Setup.php:301
+#: ../../Zotlabs/Module/Setup.php:304
msgid "Default is 127.0.0.1"
msgstr "Standard er 127.0.0.1"
-#: ../../Zotlabs/Module/Setup.php:302
+#: ../../Zotlabs/Module/Setup.php:305
msgid "Database Port"
msgstr "Databaseport"
-#: ../../Zotlabs/Module/Setup.php:302
+#: ../../Zotlabs/Module/Setup.php:305
msgid "Communication port number - use 0 for default"
msgstr "Kommunikasjonsportnummer - bruk 0 for standard"
-#: ../../Zotlabs/Module/Setup.php:303
+#: ../../Zotlabs/Module/Setup.php:306
msgid "Database Login Name"
msgstr "Database innloggingsnavn"
-#: ../../Zotlabs/Module/Setup.php:304
+#: ../../Zotlabs/Module/Setup.php:307
msgid "Database Login Password"
msgstr "Database innloggingspassord"
-#: ../../Zotlabs/Module/Setup.php:305
+#: ../../Zotlabs/Module/Setup.php:308
msgid "Database Name"
msgstr "Databasenavn"
-#: ../../Zotlabs/Module/Setup.php:306
+#: ../../Zotlabs/Module/Setup.php:309
msgid "Database Type"
msgstr "Databasetype"
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351
msgid "Site administrator email address"
msgstr "E-postadressen til administrator ved nettstedet"
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
@@ -8549,35 +5793,35 @@ msgstr ""
"Din konto sin e-postadresse må være lik denne for å kunne bruke web-"
"administrasjonspanelet."
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353
msgid "Website URL"
msgstr "Nettstedets URL"
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353
msgid "Please use SSL (https) URL if available."
msgstr "Vennligst bruk SSL (https) URL hvis tilgjengelig."
-#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352
+#: ../../Zotlabs/Module/Setup.php:313 ../../Zotlabs/Module/Setup.php:355
msgid "Please select a default timezone for your website"
msgstr "Vennligst velg en standard tidssone for ditt nettsted"
-#: ../../Zotlabs/Module/Setup.php:337
+#: ../../Zotlabs/Module/Setup.php:340
msgid "Site settings"
msgstr "Nettstedets innstillinger"
-#: ../../Zotlabs/Module/Setup.php:391
+#: ../../Zotlabs/Module/Setup.php:394
msgid "PHP version 8.0 or greater is required."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:392
+#: ../../Zotlabs/Module/Setup.php:395
msgid "PHP version"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:408
+#: ../../Zotlabs/Module/Setup.php:411
msgid "Could not find a command line version of PHP in the web server PATH."
msgstr "Fant ikke en kommandolinjeversjon av PHP i webtjenerens sti (PATH)."
-#: ../../Zotlabs/Module/Setup.php:409
+#: ../../Zotlabs/Module/Setup.php:412
msgid ""
"If you don't have a command line version of PHP installed on server, you "
"will not be able to run background polling via cron."
@@ -8585,11 +5829,11 @@ msgstr ""
"Hvis du ikke har en kommandolinjeversjon av PHP installert på tjeneren, så "
"vil du ikke kunne kjøre bakgrunnshenting via cron."
-#: ../../Zotlabs/Module/Setup.php:413
+#: ../../Zotlabs/Module/Setup.php:416
msgid "PHP executable path"
msgstr "PHP-kjørefilens sti"
-#: ../../Zotlabs/Module/Setup.php:413
+#: ../../Zotlabs/Module/Setup.php:416
msgid ""
"Enter full path to php executable. You can leave this blank to continue the "
"installation."
@@ -8597,17 +5841,17 @@ msgstr ""
"Skriv full sti til kjørefilen for PHP. Du kan la denne stå blank for å "
"fortsette installasjonen."
-#: ../../Zotlabs/Module/Setup.php:418
+#: ../../Zotlabs/Module/Setup.php:421
msgid "Command line PHP"
msgstr "Kommandolinje PHP"
-#: ../../Zotlabs/Module/Setup.php:428
+#: ../../Zotlabs/Module/Setup.php:431
msgid ""
"Unable to check command line PHP, as shell_exec() is disabled. This is "
"required."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:432
+#: ../../Zotlabs/Module/Setup.php:435
msgid ""
"The command line version of PHP on your system does not have "
"\"register_argc_argv\" enabled."
@@ -8615,21 +5859,21 @@ msgstr ""
"Kommandolinjeversjonen av PHP på ditt system har ikke \"register_argc_argv\" "
"påskrudd."
-#: ../../Zotlabs/Module/Setup.php:433
+#: ../../Zotlabs/Module/Setup.php:436
msgid "This is required for message delivery to work."
msgstr "Dette er påkrevd for at meldingslevering skal virke."
-#: ../../Zotlabs/Module/Setup.php:436
+#: ../../Zotlabs/Module/Setup.php:439
msgid "PHP register_argc_argv"
msgstr "PHP register_argc_argv"
-#: ../../Zotlabs/Module/Setup.php:456
+#: ../../Zotlabs/Module/Setup.php:459
msgid ""
"This is not sufficient to upload larger images or files. You should be able "
"to upload at least 4 MB at once."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:458
+#: ../../Zotlabs/Module/Setup.php:461
#, php-format
msgid ""
"Your max allowed total upload size is set to %s. Maximum size of one file to "
@@ -8639,15 +5883,15 @@ msgstr ""
"Filstørrelsen på en enkelt fil er satt til å maksimalt være %s. Du har lov "
"til å laste opp inntil %d filer samtidig."
-#: ../../Zotlabs/Module/Setup.php:464
+#: ../../Zotlabs/Module/Setup.php:467
msgid "You can adjust these settings in the server php.ini file."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:466
+#: ../../Zotlabs/Module/Setup.php:469
msgid "PHP upload limits"
msgstr "PHP opplastingsgrenser"
-#: ../../Zotlabs/Module/Setup.php:489
+#: ../../Zotlabs/Module/Setup.php:492
msgid ""
"Error: the \"openssl_pkey_new\" function on this system is not able to "
"generate encryption keys"
@@ -8655,7 +5899,7 @@ msgstr ""
"Feil: \"openssl_pkey_new\"-funksjonen på dette systemet er ikke i stand til "
"å lage krypteringsnøkler"
-#: ../../Zotlabs/Module/Setup.php:490
+#: ../../Zotlabs/Module/Setup.php:493
msgid ""
"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
"installation.php\"."
@@ -8663,108 +5907,140 @@ msgstr ""
"Ved kjøring på Windows, vennligst se \"http://www.php.net/manual/en/openssl."
"installation.php\"."
-#: ../../Zotlabs/Module/Setup.php:493
+#: ../../Zotlabs/Module/Setup.php:496
msgid "Generate encryption keys"
msgstr "Lag krypteringsnøkler"
-#: ../../Zotlabs/Module/Setup.php:510
+#: ../../Zotlabs/Module/Setup.php:500
+msgid "Error: the sodium encryption library is not installed."
+msgstr ""
+
+#: ../../Zotlabs/Module/Setup.php:502
+#, fuzzy
+#| msgid "Generate encryption keys"
+msgid "Generate ed25519 encryption keys"
+msgstr "Lag krypteringsnøkler"
+
+#: ../../Zotlabs/Module/Setup.php:507
+msgid ""
+"Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are "
+"required."
+msgstr ""
+
+#: ../../Zotlabs/Module/Setup.php:509
+msgid "Bigmath library (either bcmath or gmp)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Setup.php:526
msgid "libCurl PHP module"
msgstr "libCurl PHP-modul"
-#: ../../Zotlabs/Module/Setup.php:511
+#: ../../Zotlabs/Module/Setup.php:527
msgid "GD graphics PHP module"
msgstr "GD graphics PHP-modul"
-#: ../../Zotlabs/Module/Setup.php:512
+#: ../../Zotlabs/Module/Setup.php:528
msgid "OpenSSL PHP module"
msgstr "OpenSSL PHP-modul"
-#: ../../Zotlabs/Module/Setup.php:513
+#: ../../Zotlabs/Module/Setup.php:529
msgid "PDO database PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:514
+#: ../../Zotlabs/Module/Setup.php:530
msgid "mb_string PHP module"
msgstr "mb_string PHP-modul"
-#: ../../Zotlabs/Module/Setup.php:515
+#: ../../Zotlabs/Module/Setup.php:531
msgid "xml PHP module"
msgstr "xml PHP modul"
-#: ../../Zotlabs/Module/Setup.php:516
+#: ../../Zotlabs/Module/Setup.php:532
msgid "zip PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:522
+#: ../../Zotlabs/Module/Setup.php:533
+#, fuzzy
+#| msgid "xml PHP module"
+msgid "intl PHP module"
+msgstr "xml PHP modul"
+
+#: ../../Zotlabs/Module/Setup.php:537 ../../Zotlabs/Module/Setup.php:539
msgid "Apache mod_rewrite module"
msgstr "Apache mod_rewrite-modul"
-#: ../../Zotlabs/Module/Setup.php:520
+#: ../../Zotlabs/Module/Setup.php:537
msgid ""
"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr ""
"Feil: Apache web-tjenerens mod-rewrite-modul er påkrevd, men ikke installert."
-#: ../../Zotlabs/Module/Setup.php:526 ../../Zotlabs/Module/Setup.php:529
+#: ../../Zotlabs/Module/Setup.php:543 ../../Zotlabs/Module/Setup.php:546
msgid "exec"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:526
+#: ../../Zotlabs/Module/Setup.php:543
msgid ""
"Error: exec is required but is either not installed or has been disabled in "
"php.ini"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:532 ../../Zotlabs/Module/Setup.php:535
+#: ../../Zotlabs/Module/Setup.php:549 ../../Zotlabs/Module/Setup.php:552
msgid "shell_exec"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:532
+#: ../../Zotlabs/Module/Setup.php:549
msgid ""
"Error: shell_exec is required but is either not installed or has been "
"disabled in php.ini"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:540
+#: ../../Zotlabs/Module/Setup.php:557
msgid "Error: libCURL PHP module required but not installed."
msgstr "Feil: libCURL PHP-modul er påkrevd, men er ikke installert."
-#: ../../Zotlabs/Module/Setup.php:544
+#: ../../Zotlabs/Module/Setup.php:561
msgid ""
"Error: GD PHP module with JPEG support or ImageMagick graphics library "
"required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:548
+#: ../../Zotlabs/Module/Setup.php:565
msgid "Error: openssl PHP module required but not installed."
msgstr "Feil: openssl PHP-modul er påkrevd, men er ikke installert."
-#: ../../Zotlabs/Module/Setup.php:554
+#: ../../Zotlabs/Module/Setup.php:571
msgid ""
"Error: PDO database PHP module missing a driver for either mysql or pgsql."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:559
+#: ../../Zotlabs/Module/Setup.php:576
msgid "Error: PDO database PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:563
+#: ../../Zotlabs/Module/Setup.php:580
msgid "Error: mb_string PHP module required but not installed."
msgstr "Feil: mb_string PHP-modul er påkrevd, men er ikke installert."
-#: ../../Zotlabs/Module/Setup.php:567
+#: ../../Zotlabs/Module/Setup.php:584
msgid "Error: xml PHP module required for DAV but not installed."
msgstr "Feil: XML PHP modul er påkrevet for DAV, men den er ikke installert."
-#: ../../Zotlabs/Module/Setup.php:571
+#: ../../Zotlabs/Module/Setup.php:588
msgid "Error: zip PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:590 ../../Zotlabs/Module/Setup.php:599
+#: ../../Zotlabs/Module/Setup.php:592
+#, fuzzy
+#| msgid "Error: openssl PHP module required but not installed."
+msgid "Error: intl PHP module required but not installed."
+msgstr "Feil: openssl PHP-modul er påkrevd, men er ikke installert."
+
+#: ../../Zotlabs/Module/Setup.php:611 ../../Zotlabs/Module/Setup.php:620
msgid ".htconfig.php is writable"
msgstr ".htconfig.php kan skrives til"
-#: ../../Zotlabs/Module/Setup.php:595
+#: ../../Zotlabs/Module/Setup.php:616
msgid ""
"The web installer needs to be able to create a file called \".htconfig.php\" "
"in the top folder of your web server and it is unable to do so."
@@ -8772,7 +6048,7 @@ msgstr ""
"Web-installasjonen må kunne lage en fil kalt \".htconfig.php\" i "
"toppkatalogen til web-tjeneren din, men dette får den ikke til."
-#: ../../Zotlabs/Module/Setup.php:596
+#: ../../Zotlabs/Module/Setup.php:617
msgid ""
"This is most often a permission setting, as the web server may not be able "
"to write files in your folder - even if you can."
@@ -8780,24 +6056,24 @@ msgstr ""
"Dette er oftest tillatelsesinnstilling, ettersom webtjeneren kanskje kan "
"skrive til filer i din mappe - selv om du kan."
-#: ../../Zotlabs/Module/Setup.php:597
+#: ../../Zotlabs/Module/Setup.php:618
msgid "Please see install/INSTALL.txt for additional information."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:613
+#: ../../Zotlabs/Module/Setup.php:634
msgid ""
"This software uses the Smarty3 template engine to render its web views. "
"Smarty3 compiles templates to PHP to speed up rendering."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:614
+#: ../../Zotlabs/Module/Setup.php:635
#, php-format
msgid ""
"In order to store these compiled templates, the web server needs to have "
"write access to the directory %s under the top level web folder."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:615 ../../Zotlabs/Module/Setup.php:636
+#: ../../Zotlabs/Module/Setup.php:636 ../../Zotlabs/Module/Setup.php:657
msgid ""
"Please ensure that the user that your web server runs as (e.g. www-data) has "
"write access to this folder."
@@ -8805,7 +6081,7 @@ msgstr ""
"Vennligst sikre at brukeren som din web-tjeneste kjører som (for eksempel "
"www-data) har skrivetilgang til denne katalogen."
-#: ../../Zotlabs/Module/Setup.php:616
+#: ../../Zotlabs/Module/Setup.php:637
#, php-format
msgid ""
"Note: as a security measure, you should give the web server write access to "
@@ -8814,23 +6090,23 @@ msgstr ""
"Merknad: som et sikkerhetstiltak bør du bare gi webtjerenn skrivetilgang til "
"%s - ikke til malfilene (.tpl) som den inneholder."
-#: ../../Zotlabs/Module/Setup.php:619
+#: ../../Zotlabs/Module/Setup.php:640
#, php-format
msgid "%s is writable"
msgstr "%s kan skrives til"
-#: ../../Zotlabs/Module/Setup.php:635
+#: ../../Zotlabs/Module/Setup.php:656
msgid ""
"This software uses the store directory to save uploaded files. The web "
"server needs to have write access to the store directory under the top level "
"web folder"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:639
+#: ../../Zotlabs/Module/Setup.php:660
msgid "store is writable"
msgstr "lageret kan skrives til"
-#: ../../Zotlabs/Module/Setup.php:671
+#: ../../Zotlabs/Module/Setup.php:692
msgid ""
"SSL certificate cannot be validated. Fix certificate or disable https access "
"to this site."
@@ -8838,7 +6114,7 @@ msgstr ""
"SSL-sertifikatet kan ikke kontrolleres. Fiks sertifikatet eller skru av "
"https tilgang til dette nettstedet."
-#: ../../Zotlabs/Module/Setup.php:672
+#: ../../Zotlabs/Module/Setup.php:693
msgid ""
"If you have https access to your website or allow connections to TCP port "
"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
@@ -8848,7 +6124,7 @@ msgstr ""
"TCP port 443 (HTTPS-porten), så MÅ du bruke nettlesergodkjent sertifkater. "
"Du MÅ IKKE bruke egensignert sertifikater!"
-#: ../../Zotlabs/Module/Setup.php:673
+#: ../../Zotlabs/Module/Setup.php:694
msgid ""
"This restriction is incorporated because public posts from you may for "
"example contain references to images on your own hub."
@@ -8856,7 +6132,7 @@ msgstr ""
"Denne begrensningen er tatt inn fordi offentlige innlegg fra deg kan for "
"eksempel inneholde referanser til bilder på din egen hub."
-#: ../../Zotlabs/Module/Setup.php:674
+#: ../../Zotlabs/Module/Setup.php:695
msgid ""
"If your certificate is not recognized, members of other sites (who may "
"themselves have valid certificates) will get a warning message on their own "
@@ -8866,7 +6142,7 @@ msgstr ""
"nettsteder (som selv kan ha godkjente sertifikater) få en beskjed med en "
"advarsel på deres eget nettsted som klager over sikkerhetsproblemer."
-#: ../../Zotlabs/Module/Setup.php:675
+#: ../../Zotlabs/Module/Setup.php:696
msgid ""
"This can cause usability issues elsewhere (not just on your own site) so we "
"must insist on this requirement."
@@ -8874,14 +6150,14 @@ msgstr ""
"Dette kan gi problemer med brukervennlighet (ikke bare på ditt eget "
"nettsted), så vi må insistere på dette kravet."
-#: ../../Zotlabs/Module/Setup.php:676
+#: ../../Zotlabs/Module/Setup.php:697
msgid ""
"Providers are available that issue free certificates which are browser-valid."
msgstr ""
"Det finnes tilbydere som utsteder gratis sertifikater som er gyldige i "
"nettlesere."
-#: ../../Zotlabs/Module/Setup.php:677
+#: ../../Zotlabs/Module/Setup.php:698
msgid ""
"If you are confident that the certificate is valid and signed by a trusted "
"authority, check to see if you have failed to install an intermediate cert. "
@@ -8889,11 +6165,11 @@ msgid ""
"server communications."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:679
+#: ../../Zotlabs/Module/Setup.php:700
msgid "SSL certificate validation"
msgstr "SSL sertifikat-kontroll"
-#: ../../Zotlabs/Module/Setup.php:685
+#: ../../Zotlabs/Module/Setup.php:706
msgid ""
"Url rewrite in .htaccess is not working. Check your server configuration."
"Test: "
@@ -8901,11 +6177,11 @@ msgstr ""
"URL omskriving (rewrite) i .htaccess virker ikke. Sjekk konfigurasjonen til "
"tjeneren din. Test: "
-#: ../../Zotlabs/Module/Setup.php:688
+#: ../../Zotlabs/Module/Setup.php:709
msgid "Url rewrite is working"
msgstr "URL rewrite virker"
-#: ../../Zotlabs/Module/Setup.php:701
+#: ../../Zotlabs/Module/Setup.php:722
msgid ""
"The database configuration file \".htconfig.php\" could not be written. "
"Please use the enclosed text to create a configuration file in your web "
@@ -8915,235 +6191,464 @@ msgstr ""
"bruk den medfølgende teksten for å lage en konfigurasjonsfil i toppkatalogen "
"av din web-tjener."
-#: ../../Zotlabs/Module/Setup.php:776
+#: ../../Zotlabs/Module/Setup.php:751
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:401
+msgid "Errors encountered creating database tables."
+msgstr "Feil oppstod under opprettelsen av databasetabeller."
+
+#: ../../Zotlabs/Module/Setup.php:797
msgid "<h1>What next?</h1>"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:777
+#: ../../Zotlabs/Module/Setup.php:798
msgid ""
"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
msgstr ""
"VIKTIG: Du må [manuelt] sette opp en automatisert tidfestet oppgave til "
"bakgrunnshenteren."
-#: ../../Zotlabs/Module/Viewconnections.php:65
-msgid "No connections."
-msgstr "Ingen forbindelser."
+#: ../../Zotlabs/Module/Bookmarks.php:62
+msgid "Bookmark added"
+msgstr "Bokmerke lagt til"
-#: ../../Zotlabs/Module/Viewconnections.php:105
-#, php-format
-msgid "Visit %s's profile [%s]"
-msgstr "Besøk %s sin profil [%s]"
+#: ../../Zotlabs/Module/Bookmarks.php:101
+msgid "My Connections Bookmarks"
+msgstr "Mine forbindelsers bokmerker"
-#: ../../Zotlabs/Module/Viewconnections.php:135
-msgid "View Connections"
-msgstr "Vis forbindelser"
+#: ../../Zotlabs/Module/Z6trans.php:19
+msgid "Update to Hubzilla 5.0 step 2"
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:26
-msgid "Public Hubs"
-msgstr "Offentlige huber"
+#: ../../Zotlabs/Module/Z6trans.php:21
+msgid "To complete the update please run"
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:29
-msgid ""
-"The listed hubs allow public registration for the $Projectname network. All "
-"hubs in the network are interlinked so membership on any of them conveys "
-"membership in the network as a whole. Some hubs may require subscription or "
-"provide tiered service plans. The hub itself <strong>may</strong> provide "
-"additional details."
+#: ../../Zotlabs/Module/Z6trans.php:23
+msgid "php util/z6convert.php"
msgstr ""
-"Nettstedene på listen tillater offentlig registrering i $Projectname-"
-"nettverket. Alle nettsteder i nettverket er forbundet så medlemskap på "
-"enhver av dem formidler medlemskap i nettverket som helhet. Noen nettsteder "
-"kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Nettstedene selv "
-"<strong>kan</strong> gi tilleggsopplysninger."
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Hub URL"
-msgstr "Nettstedets URL"
+#: ../../Zotlabs/Module/Z6trans.php:25
+msgid "from the terminal."
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Access Type"
-msgstr "Tilgangstype"
+#: ../../Zotlabs/Module/Regate.php:85
+msgid "Email resent"
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Registration Policy"
-msgstr "Retningslinjer for registrering"
+#: ../../Zotlabs/Module/Regate.php:85
+msgid "Email resend failed"
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Stats"
-msgstr "Statistikk"
+#: ../../Zotlabs/Module/Regate.php:110
+msgid "Verification successful"
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Software"
-msgstr "Programvare"
+#: ../../Zotlabs/Module/Regate.php:154
+msgid "Account successfull created"
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:37
-msgid "Ratings"
-msgstr "Vurderinger"
+#: ../../Zotlabs/Module/Regate.php:212
+msgid "Channel successfull created"
+msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:51
-msgid "Rate"
-msgstr "Vurder"
+#: ../../Zotlabs/Module/Regate.php:218
+msgid "Automatic channel creation failed. Please create a channel."
+msgstr ""
-#: ../../Zotlabs/Module/Channel.php:141 ../../Zotlabs/Module/Hcard.php:37
-#: ../../Zotlabs/Module/Profile.php:62
-msgid "Posts and comments"
-msgstr "Innlegg og kommentarer"
+#: ../../Zotlabs/Module/Regate.php:230
+msgid "Account creation error"
+msgstr ""
-#: ../../Zotlabs/Module/Channel.php:148 ../../Zotlabs/Module/Hcard.php:44
-#: ../../Zotlabs/Module/Profile.php:69
-msgid "Only posts"
-msgstr "Kun innlegg"
+#: ../../Zotlabs/Module/Regate.php:242
+msgid "Verify failed"
+msgstr ""
-#: ../../Zotlabs/Module/Channel.php:161 ../../Zotlabs/Module/Channel.php:183
-#: ../../Zotlabs/Module/Hq.php:41 ../../Zotlabs/Module/Pubstream.php:46
-#: ../../Zotlabs/Module/Display.php:47 ../../Zotlabs/Module/Oep.php:82
-msgid "Malformed message id."
+#: ../../Zotlabs/Module/Regate.php:247
+msgid "Token verification failed"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:219
-msgid "Insufficient permissions. Request redirected to profile page."
-msgstr "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden."
+#: ../../Zotlabs/Module/Regate.php:252
+msgid "Request not inside time frame"
+msgstr ""
-#: ../../Zotlabs/Module/Channel.php:494 ../../Zotlabs/Module/Display.php:321
-msgid ""
-"You must enable javascript for your browser to be able to view this content."
+#: ../../Zotlabs/Module/Regate.php:258 ../../Zotlabs/Module/Regate.php:288
+msgid "Identity unknown"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63
-msgid "Invalid profile identifier."
-msgstr "Ugyldig profil-identifikator."
+#: ../../Zotlabs/Module/Regate.php:264
+msgid "dId2 mistaken"
+msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:111
-msgid "Profile Visibility Editor"
-msgstr "Endre profilsynlighet"
+#: ../../Zotlabs/Module/Regate.php:292
+msgid "Your Registration ID"
+msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:115
-msgid "Click on a contact to add or remove."
-msgstr "Klikk på en kontakt for å legge til eller fjerne."
+#: ../../Zotlabs/Module/Regate.php:305 ../../Zotlabs/Module/Regate.php:397
+#: ../../Zotlabs/Module/Regate.php:429
+msgid "Registration verification"
+msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:124
-msgid "Visible To"
-msgstr "Synlig for"
+#: ../../Zotlabs/Module/Regate.php:312 ../../Zotlabs/Module/Regate.php:434
+msgid "Hold on, you can start verification in"
+msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:140
-#: ../../Zotlabs/Module/Connections.php:221
-msgid "All Connections"
-msgstr "Alle forbindelser"
+#: ../../Zotlabs/Module/Regate.php:313
+msgid "Please remember your verification token for ID"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:47
-msgid "Privacy group created."
-msgstr "Personverngruppen er opprettet."
+#: ../../Zotlabs/Module/Regate.php:315
+msgid "Token validity"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:50
-msgid "Could not create privacy group."
-msgstr "Kunne ikke opprette personverngruppen."
+#: ../../Zotlabs/Module/Regate.php:351
+msgid "Resend email"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:82
-msgid "Privacy group updated."
-msgstr "Personverngruppen er oppdatert."
+#: ../../Zotlabs/Module/Regate.php:356
+msgid "Registration status"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:301
-msgid "Post to this group by default"
+#: ../../Zotlabs/Module/Regate.php:359
+msgid "Verification successful!"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
-msgid "Add new contacts to this group by default"
+#: ../../Zotlabs/Module/Regate.php:360
+msgid "Your login ID is"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:146
-#, fuzzy
-msgid "Privacy group name"
-msgstr "Personverngruppens navn:"
+#: ../../Zotlabs/Module/Regate.php:361
+msgid ""
+"After your account has been approved by our administrator you will be able "
+"to login with your login ID and your provided password."
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
-msgid "Members are visible to other channels"
-msgstr "Medlemmer er synlig for andre kanaler"
+#: ../../Zotlabs/Module/Regate.php:373
+msgid "Registration request revoked"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:175
-msgid "Privacy group removed."
-msgstr "Personverngruppen er fjernet."
+#: ../../Zotlabs/Module/Regate.php:374
+msgid "Sorry for any inconvience. Thank you for your response."
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:178
-msgid "Unable to remove privacy group."
-msgstr "Ikke i stand til å fjerne personverngruppen."
+#: ../../Zotlabs/Module/Regate.php:398
+msgid "Please enter your verification token for ID"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:244
-#, fuzzy, php-format
-msgid "Privacy Group: %s"
-msgstr "Personverngruppe: %s"
+#: ../../Zotlabs/Module/Regate.php:399 ../../Zotlabs/Module/Regate.php:426
+msgid "Please check your email!"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:246
-msgid "Privacy group name: "
-msgstr "Personverngruppens navn: "
+#: ../../Zotlabs/Module/Regate.php:409
+msgid "Verification token"
+msgstr ""
-#: ../../Zotlabs/Module/Group.php:262
-msgid "Group members"
+#: ../../Zotlabs/Module/Regate.php:420
+msgid "ID expired"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:264
-msgid "Not in this group"
+#: ../../Zotlabs/Module/Regate.php:435
+msgid "You will require the verification token for ID"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:296
-msgid "Click a channel to toggle membership"
+#: ../../Zotlabs/Module/Regate.php:444
+msgid "Unknown or expired ID"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:21
-msgid "This page is available only to site members"
+#: ../../Zotlabs/Module/Regate.php:455
+msgid "dId2 malformed"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:29
-msgid "What would you like to do?"
+#: ../../Zotlabs/Module/Api.php:76 ../../Zotlabs/Module/Api.php:97
+msgid "Authorize application connection"
+msgstr "Tillat programforbindelse"
+
+#: ../../Zotlabs/Module/Api.php:77
+msgid "Return to your app and insert this Security Code:"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:31
+#: ../../Zotlabs/Module/Api.php:87
+msgid "Please login to continue."
+msgstr "Vennligst logg inn for å fortsette."
+
+#: ../../Zotlabs/Module/Api.php:99
msgid ""
-"Please bookmark this page if you would like to return to it in the future"
+"Do you want to authorize this application to access your posts and contacts, "
+"and/or create new posts for you?"
msgstr ""
+"Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, "
+"og/eller lage nye innlegg for deg?"
-#: ../../Zotlabs/Module/Go.php:35
-msgid "Upload a profile photo"
-msgstr ""
+#: ../../Zotlabs/Module/Channel_calendar.php:62
+msgid "Event can not end before it has started."
+msgstr "Hendelsen kan ikke slutte før den starter."
-#: ../../Zotlabs/Module/Go.php:36
-msgid "Upload a cover photo"
-msgstr ""
+#: ../../Zotlabs/Module/Channel_calendar.php:64
+#: ../../Zotlabs/Module/Channel_calendar.php:72
+#: ../../Zotlabs/Module/Channel_calendar.php:87
+msgid "Unable to generate preview."
+msgstr "Klarer ikke å lage forhåndsvisning."
-#: ../../Zotlabs/Module/Go.php:37
-msgid "Edit your default profile"
-msgstr ""
+#: ../../Zotlabs/Module/Channel_calendar.php:70
+msgid "Event title and start time are required."
+msgstr "Hendelsestittel og starttidspunkt er påkrevd."
-#: ../../Zotlabs/Module/Go.php:39
-msgid "View the channel directory"
+#: ../../Zotlabs/Module/Channel_calendar.php:85
+#: ../../Zotlabs/Module/Channel_calendar.php:226
+msgid "Event not found."
+msgstr "Hendelsen ble ikke funnet."
+
+#: ../../Zotlabs/Module/Channel_calendar.php:370
+msgid "Edit event"
+msgstr "Endre hendelse"
+
+#: ../../Zotlabs/Module/Channel_calendar.php:372
+msgid "Delete event"
+msgstr "Slett hendelse"
+
+#: ../../Zotlabs/Module/Channel_calendar.php:392
+#: ../../Zotlabs/Module/Cal.php:161 ../../Zotlabs/Module/Cdav.php:935
+#, fuzzy
+msgid "Link to source"
+msgstr "Lenke til kilde"
+
+#: ../../Zotlabs/Module/Channel_calendar.php:406
+msgid "calendar"
+msgstr "kalender"
+
+#: ../../Zotlabs/Module/Channel_calendar.php:493
+msgid "Failed to remove event"
+msgstr "Mislyktes med å slette hendelse"
+
+#: ../../Zotlabs/Module/Lockview.php:101
+msgid "Remote privacy information not available"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:40
-msgid "View/edit your channel settings"
+#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203
+#: ../../Zotlabs/Module/Acl.php:124
+msgctxt "acl"
+msgid "Profile"
+msgstr "Profil"
+
+#: ../../Zotlabs/Module/Lockview.php:155 ../../Zotlabs/Module/Lockview.php:212
+#, fuzzy
+msgid "Privacy group"
+msgstr "Personverngruppe:"
+
+#: ../../Zotlabs/Module/Lockview.php:183
+msgid "Item"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:41
-msgid "View the site or project documentation"
+#: ../../Zotlabs/Module/Lockview.php:230
+#, php-format
+msgid "Click to copy link to this ressource for guest %s to clipboard"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:42
-msgid "Visit your channel homepage"
+#: ../../Zotlabs/Module/Lockview.php:230
+msgid "Link copied"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:43
-msgid ""
-"View your connections and/or add somebody whose address you already know"
+#: ../../Zotlabs/Module/Lockview.php:235
+msgid "Access"
+msgstr "Tilgang"
+
+#: ../../Zotlabs/Module/Lockview.php:236 ../../Zotlabs/Widget/Tokens.php:49
+msgid "Guest access"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:44
-msgid ""
-"View your personal stream (this may be empty until you add some connections)"
+#: ../../Zotlabs/Module/Lockview.php:237
+msgid "OCAP access"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:52
-msgid "View the public stream. Warning: this content is not moderated"
+#: ../../Zotlabs/Module/Editlayout.php:128 ../../Zotlabs/Module/Layouts.php:129
+#: ../../Zotlabs/Module/Layouts.php:187
+msgid "Layout Name"
+msgstr "Layout-navn"
+
+#: ../../Zotlabs/Module/Editlayout.php:129 ../../Zotlabs/Module/Layouts.php:132
+msgid "Layout Description (Optional)"
+msgstr "Layoutens beskrivelse (valgfritt)"
+
+#: ../../Zotlabs/Module/Editlayout.php:137
+msgid "Edit Layout"
+msgstr "Endre layout"
+
+#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103
+msgid "Album not found."
+msgstr "Albumet ble ikke funnet."
+
+#: ../../Zotlabs/Module/Photos.php:93
+msgid "Delete Album"
+msgstr "Slett album"
+
+#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1057
+msgid "Delete Photo"
+msgstr "Slett bilde"
+
+#: ../../Zotlabs/Module/Photos.php:511
+#: ../../Zotlabs/Module/Viewconnections.php:23
+#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Directory.php:77
+#: ../../Zotlabs/Module/Display.php:27 ../../Zotlabs/Module/Search.php:24
+msgid "Public access denied."
+msgstr "Offentlig tilgang avvist."
+
+#: ../../Zotlabs/Module/Photos.php:522
+msgid "No photos selected"
+msgstr "Ingen bilder valgt"
+
+#: ../../Zotlabs/Module/Photos.php:571
+msgid "Access to this item is restricted."
+msgstr "Tilgang til dette elementet er begrenset."
+
+#: ../../Zotlabs/Module/Photos.php:614
+#, php-format
+msgid "%1$.2f MB photo storage used."
+msgstr "%1$.2f MB lagringsplass til bilder er brukt."
+
+#: ../../Zotlabs/Module/Photos.php:618
+#, php-format
+msgid "%1$.2f MB of %2$.2f MB photo storage used."
+msgstr "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt."
+
+#: ../../Zotlabs/Module/Photos.php:660
+msgid "Upload Photos"
+msgstr "Last opp bilder"
+
+#: ../../Zotlabs/Module/Photos.php:664
+msgid "Enter an album name"
+msgstr "Skriv et albumnavn"
+
+#: ../../Zotlabs/Module/Photos.php:665
+msgid "or select an existing album (doubleclick)"
+msgstr "eller velg et eksisterende album (dobbeltklikk)"
+
+#: ../../Zotlabs/Module/Photos.php:666
+msgid "Create a status post for this upload"
+msgstr "Lag et statusinnlegg for denne opplastingen"
+
+#: ../../Zotlabs/Module/Photos.php:668
+msgid "Description (optional)"
+msgstr "Beskrivelse (valgritt)"
+
+#: ../../Zotlabs/Module/Photos.php:756
+msgid "Show Newest First"
+msgstr "Vis nyeste først"
+
+#: ../../Zotlabs/Module/Photos.php:758
+msgid "Show Oldest First"
+msgstr "Vis eldste først"
+
+#: ../../Zotlabs/Module/Photos.php:782 ../../Zotlabs/Module/Photos.php:1324
+#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Widget/Album.php:84
+#: ../../Zotlabs/Widget/Portfolio.php:91
+msgid "View Photo"
+msgstr "Vis foto"
+
+#: ../../Zotlabs/Module/Photos.php:813 ../../Zotlabs/Module/Embedphotos.php:187
+#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112
+msgid "Edit Album"
+msgstr "Endre album"
+
+#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1355
+msgid "Add Photos"
+msgstr "Legg til bilder"
+
+#: ../../Zotlabs/Module/Photos.php:867
+msgid "Permission denied. Access to this item may be restricted."
+msgstr "Tillatelse avvist. Tilgang til dette elementet kan være begrenset."
+
+#: ../../Zotlabs/Module/Photos.php:869
+msgid "Photo not available"
+msgstr "Bilde er utilgjengelig"
+
+#: ../../Zotlabs/Module/Photos.php:927
+msgid "Use as profile photo"
+msgstr "Bruk som profilbilde"
+
+#: ../../Zotlabs/Module/Photos.php:928
+msgid "Use as cover photo"
+msgstr "Bruk som omslagsbilde"
+
+#: ../../Zotlabs/Module/Photos.php:935
+msgid "Private Photo"
+msgstr "Privat bilde"
+
+#: ../../Zotlabs/Module/Photos.php:946 ../../Zotlabs/Module/Cal.php:199
+#: ../../Zotlabs/Module/Cdav.php:1026
+msgid "Previous"
+msgstr "Forrige"
+
+#: ../../Zotlabs/Module/Photos.php:950
+msgid "View Full Size"
+msgstr "Vis i full størrelse"
+
+#: ../../Zotlabs/Module/Photos.php:994 ../../Zotlabs/Module/Cover_photo.php:382
+#: ../../Zotlabs/Module/Tagrm.php:137 ../../Zotlabs/Module/Admin/Addons.php:463
+#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:90
+msgid "Remove"
+msgstr "Fjern"
+
+#: ../../Zotlabs/Module/Photos.php:1031
+msgid "Edit photo"
+msgstr "Endre bilde"
+
+#: ../../Zotlabs/Module/Photos.php:1033
+msgid "Rotate CW (right)"
+msgstr "Roter med klokka (mot høyre)"
+
+#: ../../Zotlabs/Module/Photos.php:1034
+msgid "Rotate CCW (left)"
+msgstr "Roter mot klokka (venstre)"
+
+#: ../../Zotlabs/Module/Photos.php:1037
+msgid "Move photo to album"
msgstr ""
+#: ../../Zotlabs/Module/Photos.php:1038
+msgid "Enter a new album name"
+msgstr "Skriv et nytt albumnavn"
+
+#: ../../Zotlabs/Module/Photos.php:1039
+msgid "or select an existing one (doubleclick)"
+msgstr "eller velg et eksisterende album (dobbeltklikk)"
+
+#: ../../Zotlabs/Module/Photos.php:1044
+msgid "Add a Tag"
+msgstr "Legg til merkelapp"
+
+#: ../../Zotlabs/Module/Photos.php:1052
+msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
+msgstr "Eksempel: @bob, @Barbara_Jensen, @jim@example.com"
+
+#: ../../Zotlabs/Module/Photos.php:1055
+msgid "Flag as adult in album view"
+msgstr "Flag som voksent i albumvisning"
+
+#: ../../Zotlabs/Module/Photos.php:1125 ../../Zotlabs/Module/Photos.php:1137
+msgid "View all"
+msgstr "Vis alle"
+
+#: ../../Zotlabs/Module/Photos.php:1238
+msgid "Photo Tools"
+msgstr "Fotoverktøy"
+
+#: ../../Zotlabs/Module/Photos.php:1247
+msgid "In This Photo:"
+msgstr "I dette bildet:"
+
+#: ../../Zotlabs/Module/Photos.php:1252
+msgid "Map"
+msgstr "Kart"
+
+#: ../../Zotlabs/Module/Photos.php:1260
+msgctxt "noun"
+msgid "Likes"
+msgstr "Liker"
+
+#: ../../Zotlabs/Module/Photos.php:1261
+msgctxt "noun"
+msgid "Dislikes"
+msgstr "Liker ikke"
+
#: ../../Zotlabs/Module/Oauth.php:45
msgid "Name is required"
msgstr "Navn er påkrevd"
@@ -9152,14 +6657,6 @@ msgstr "Navn er påkrevd"
msgid "Key and Secret are required"
msgstr "Nøkkel og hemmelighet er påkrevd"
-#: ../../Zotlabs/Module/Oauth.php:53 ../../Zotlabs/Module/Oauth.php:135
-#: ../../Zotlabs/Module/Cdav.php:1044 ../../Zotlabs/Module/Cdav.php:1380
-#: ../../Zotlabs/Module/Admin/Addons.php:460 ../../Zotlabs/Module/Oauth2.php:58
-#: ../../Zotlabs/Module/Oauth2.php:142 ../../Zotlabs/Module/Connedit.php:748
-#: ../../Zotlabs/Lib/Apps.php:546
-msgid "Update"
-msgstr "Oppdater"
-
#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134
#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141
#: ../../Zotlabs/Module/Oauth2.php:191
@@ -9171,11 +6668,24 @@ msgstr "Legg til program"
msgid "Name of application"
msgstr "Navn på program"
+#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
+#: ../../extend/addon/hzaddons/statusnet/statusnet.php:596
+#: ../../extend/addon/hzaddons/twitter/twitter.php:504
+msgid "Consumer Key"
+msgstr "Consumer Key"
+
#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113
#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
msgid "Automatically generated - change if desired. Max length 20"
msgstr "Automatisk laget - kan endres om du vil. Største lengde 20"
+#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
+#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
+#: ../../extend/addon/hzaddons/statusnet/statusnet.php:595
+#: ../../extend/addon/hzaddons/twitter/twitter.php:505
+msgid "Consumer Secret"
+msgstr "Consumer Secret"
+
#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140
#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
msgid "Redirect"
@@ -9192,6 +6702,11 @@ msgstr ""
msgid "Icon url"
msgstr "Ikon-URL"
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Sources.php:121
+#: ../../Zotlabs/Module/Sources.php:156 ../../Zotlabs/Module/Register.php:501
+msgid "Optional"
+msgstr "Valgfritt"
+
#: ../../Zotlabs/Module/Oauth.php:126
msgid "Application not found."
msgstr "Programmet ble ikke funnet."
@@ -9212,25 +6727,808 @@ msgstr "Ikke noe navn"
msgid "Remove authorization"
msgstr "Fjern tillatelse"
-#: ../../Zotlabs/Module/Editwebpage.php:139
-msgid "Page link"
-msgstr "Sidelenke"
+#: ../../Zotlabs/Module/Apps.php:51 ../../Zotlabs/Widget/Appstore.php:19
+msgid "Available Apps"
+msgstr "Tilgjengelige apper"
-#: ../../Zotlabs/Module/Editwebpage.php:166
-msgid "Edit Webpage"
-msgstr "Endre webside"
+#: ../../Zotlabs/Module/Apps.php:51
+msgid "Installed Apps"
+msgstr "Installerte apper"
-#: ../../Zotlabs/Module/Dirsearch.php:23 ../../Zotlabs/Module/Regdir.php:52
-msgid "This site is not a directory server"
-msgstr "Dette nettstedet er ikke en katalogtjener"
+#: ../../Zotlabs/Module/Apps.php:54
+msgid "Manage Apps"
+msgstr "Behandle apper"
-#: ../../Zotlabs/Module/Dirsearch.php:31
-msgid "This directory server requires an access token"
-msgstr "Denne katalogtjeneren krever en tilgangsnøkkel (access token)"
+#: ../../Zotlabs/Module/Apps.php:55
+msgid "Create Custom App"
+msgstr ""
-#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:478
-msgid "Unable to locate original post."
-msgstr "Ikke i stand til å finne opprinnelig innlegg."
+#: ../../Zotlabs/Module/Viewconnections.php:65
+msgid "No connections."
+msgstr "Ingen forbindelser."
+
+#: ../../Zotlabs/Module/Viewconnections.php:105
+#, php-format
+msgid "Visit %s's profile [%s]"
+msgstr "Besøk %s sin profil [%s]"
+
+#: ../../Zotlabs/Module/Viewconnections.php:135
+msgid "View Connections"
+msgstr "Vis forbindelser"
+
+#: ../../Zotlabs/Module/Chanview.php:132
+msgid "toggle full screen mode"
+msgstr ""
+
+#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
+msgid "Item is not editable"
+msgstr "Elementet kan ikke endres"
+
+#: ../../Zotlabs/Module/Tagger.php:50
+msgid "Post not found."
+msgstr ""
+
+#: ../../Zotlabs/Module/Tagger.php:121
+#, php-format
+msgid "%1$s tagged %2$s's %3$s with %4$s"
+msgstr "%1$s merket %3$s til %2$s med %4$s"
+
+#: ../../Zotlabs/Module/Common.php:14
+msgid "No channel."
+msgstr "Ingen kanal."
+
+#: ../../Zotlabs/Module/Common.php:45
+msgid "No connections in common."
+msgstr "Ingen forbindelser felles."
+
+#: ../../Zotlabs/Module/Common.php:65
+msgid "View Common Connections"
+msgstr ""
+
+#: ../../Zotlabs/Module/Profiles.php:23 ../../Zotlabs/Module/Profiles.php:211
+#: ../../Zotlabs/Module/Profiles.php:641
+msgid "Profile not found."
+msgstr "Profilen ble ikke funnet."
+
+#: ../../Zotlabs/Module/Profiles.php:43
+msgid "Profile deleted."
+msgstr "Profilen er slettet."
+
+#: ../../Zotlabs/Module/Profiles.php:67 ../../Zotlabs/Module/Profiles.php:104
+msgid "Profile-"
+msgstr "Profil-"
+
+#: ../../Zotlabs/Module/Profiles.php:89 ../../Zotlabs/Module/Profiles.php:126
+msgid "New profile created."
+msgstr "Ny profil opprettet."
+
+#: ../../Zotlabs/Module/Profiles.php:110
+msgid "Profile unavailable to clone."
+msgstr "Profilen er utilgjengelig for klonen."
+
+#: ../../Zotlabs/Module/Profiles.php:145
+msgid "Profile unavailable to export."
+msgstr "Profilen er utilgjengelig for eksport."
+
+#: ../../Zotlabs/Module/Profiles.php:221
+msgid "Profile Name is required."
+msgstr "Profilnavn er påkrevd."
+
+#: ../../Zotlabs/Module/Profiles.php:426
+msgid "Marital Status"
+msgstr "Sivilstand"
+
+#: ../../Zotlabs/Module/Profiles.php:430
+msgid "Romantic Partner"
+msgstr "Romantisk partner"
+
+#: ../../Zotlabs/Module/Profiles.php:434 ../../Zotlabs/Module/Profiles.php:787
+msgid "Likes"
+msgstr "Liker"
+
+#: ../../Zotlabs/Module/Profiles.php:438 ../../Zotlabs/Module/Profiles.php:788
+msgid "Dislikes"
+msgstr "Liker ikke"
+
+#: ../../Zotlabs/Module/Profiles.php:442 ../../Zotlabs/Module/Profiles.php:795
+msgid "Work/Employment"
+msgstr "Arbeid/sysselsetting"
+
+#: ../../Zotlabs/Module/Profiles.php:445
+msgid "Religion"
+msgstr "Religion"
+
+#: ../../Zotlabs/Module/Profiles.php:449
+msgid "Political Views"
+msgstr "Politiske synspunkter"
+
+#: ../../Zotlabs/Module/Profiles.php:453
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:74
+msgid "Gender"
+msgstr "Kjønn"
+
+#: ../../Zotlabs/Module/Profiles.php:457
+msgid "Sexual Preference"
+msgstr "Seksuelle preferanser"
+
+#: ../../Zotlabs/Module/Profiles.php:461
+msgid "Homepage"
+msgstr "Hjemmeside"
+
+#: ../../Zotlabs/Module/Profiles.php:465
+msgid "Interests"
+msgstr "Interesser"
+
+#: ../../Zotlabs/Module/Profiles.php:469 ../../Zotlabs/Module/Connedit.php:739
+#: ../../Zotlabs/Module/Locs.php:122
+#: ../../Zotlabs/Module/Admin/Channels.php:182
+#: ../../Zotlabs/Module/Cdav.php:1375
+msgid "Address"
+msgstr "Adresse"
+
+#: ../../Zotlabs/Module/Profiles.php:573
+msgid "Profile updated."
+msgstr "Profilen er oppdatert."
+
+#: ../../Zotlabs/Module/Profiles.php:671
+msgid "Hide my connections from viewers of this profile"
+msgstr "Skjul mine forbindelser fra besøkende som ser denne profilen"
+
+#: ../../Zotlabs/Module/Profiles.php:684
+msgid "Publish my default profile in the network directory"
+msgstr "La standardprofilen min vises i nettverkskatalonen"
+
+#: ../../Zotlabs/Module/Profiles.php:692
+msgid "Suggest me as a potential contact to new members"
+msgstr "Foreslå meg som mulig kontakt til nye medlemmer"
+
+#: ../../Zotlabs/Module/Profiles.php:696
+msgid "Reveal my online status"
+msgstr "La andre se om jeg er pålogget eller ikke"
+
+#: ../../Zotlabs/Module/Profiles.php:737
+msgid "Edit Profile Details"
+msgstr "Endre profildetaljer"
+
+#: ../../Zotlabs/Module/Profiles.php:739
+msgid "View this profile"
+msgstr "Vis denne profilen"
+
+#: ../../Zotlabs/Module/Profiles.php:741
+msgid "Profile Tools"
+msgstr "Profilverktøy"
+
+#: ../../Zotlabs/Module/Profiles.php:742
+msgid "Change cover photo"
+msgstr "Endre omslagsbilde"
+
+#: ../../Zotlabs/Module/Profiles.php:744
+msgid "Create a new profile using these settings"
+msgstr "Lag en ny profil ved å bruke disse innstillingene"
+
+#: ../../Zotlabs/Module/Profiles.php:745
+msgid "Clone this profile"
+msgstr "Klon denne profilen"
+
+#: ../../Zotlabs/Module/Profiles.php:746
+msgid "Delete this profile"
+msgstr "Slett denne profilen"
+
+#: ../../Zotlabs/Module/Profiles.php:747
+msgid "Add profile things"
+msgstr "Legg til profilting"
+
+#: ../../Zotlabs/Module/Profiles.php:748
+msgid "Basic"
+msgstr "Grunnleggende"
+
+#: ../../Zotlabs/Module/Profiles.php:750
+msgid "Relationship"
+msgstr "Forhold"
+
+#: ../../Zotlabs/Module/Profiles.php:753
+msgid "Import profile from file"
+msgstr "Importer profil fra fil"
+
+#: ../../Zotlabs/Module/Profiles.php:754
+msgid "Export profile to file"
+msgstr "Eksporter profil til fil"
+
+#: ../../Zotlabs/Module/Profiles.php:755
+msgid "Your gender"
+msgstr "Kjønn"
+
+#: ../../Zotlabs/Module/Profiles.php:756
+msgid "Marital status"
+msgstr "Sivilstatus"
+
+#: ../../Zotlabs/Module/Profiles.php:757
+msgid "Sexual preference"
+msgstr "Legning"
+
+#: ../../Zotlabs/Module/Profiles.php:760
+msgid "Profile name"
+msgstr "Profilnavn"
+
+#: ../../Zotlabs/Module/Profiles.php:762
+msgid "This is your default profile."
+msgstr "Dette er din standardprofil."
+
+#: ../../Zotlabs/Module/Profiles.php:764
+msgid "Your full name"
+msgstr "Fullt navn"
+
+#: ../../Zotlabs/Module/Profiles.php:765
+msgid "Short title/description"
+msgstr "Kort tittel/beskrivelse"
+
+#: ../../Zotlabs/Module/Profiles.php:765
+msgid "Maximal 190 characters"
+msgstr "Maksimum 190 tegn"
+
+#: ../../Zotlabs/Module/Profiles.php:768
+msgid "Street address"
+msgstr "Gateadresse"
+
+#: ../../Zotlabs/Module/Profiles.php:769
+msgid "Locality/City"
+msgstr "Sted/by"
+
+#: ../../Zotlabs/Module/Profiles.php:770
+msgid "Region/State"
+msgstr "Region"
+
+#: ../../Zotlabs/Module/Profiles.php:771
+msgid "Postal/Zip code"
+msgstr "Postnummer"
+
+#: ../../Zotlabs/Module/Profiles.php:772 ../../Zotlabs/Module/Connedit.php:757
+#: ../../Zotlabs/Module/Cdav.php:1393
+msgid "Country"
+msgstr "Land"
+
+#: ../../Zotlabs/Module/Profiles.php:777
+msgid "Who (if applicable)"
+msgstr "Hvem (om relevant)"
+
+#: ../../Zotlabs/Module/Profiles.php:777
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+msgstr "Eksempler: kari123, Kari Villiamsen, kari@example.com"
+
+#: ../../Zotlabs/Module/Profiles.php:778
+msgid "Since (date)"
+msgstr "Fra (dato)"
+
+#: ../../Zotlabs/Module/Profiles.php:781
+msgid "Tell us about yourself"
+msgstr "Fortell oss om deg selv"
+
+#: ../../Zotlabs/Module/Profiles.php:782
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:68
+msgid "Homepage URL"
+msgstr "Hjemmeside URL"
+
+#: ../../Zotlabs/Module/Profiles.php:783
+msgid "Hometown"
+msgstr "Hjemsted"
+
+#: ../../Zotlabs/Module/Profiles.php:784
+msgid "Political views"
+msgstr "Politiske holdninger"
+
+#: ../../Zotlabs/Module/Profiles.php:785
+msgid "Religious views"
+msgstr "Religiøse holdninger"
+
+#: ../../Zotlabs/Module/Profiles.php:786
+msgid "Keywords used in directory listings"
+msgstr "Nøkkelord for bruk i katalogoppføringen"
+
+#: ../../Zotlabs/Module/Profiles.php:786
+msgid "Example: fishing photography software"
+msgstr "Eksempel: fisking fotografering programvare"
+
+#: ../../Zotlabs/Module/Profiles.php:789
+msgid "Musical interests"
+msgstr "Musikkinteresser"
+
+#: ../../Zotlabs/Module/Profiles.php:790
+msgid "Books, literature"
+msgstr "Bøker, litteratur"
+
+#: ../../Zotlabs/Module/Profiles.php:791
+msgid "Television"
+msgstr "TV/fjernsyn"
+
+#: ../../Zotlabs/Module/Profiles.php:792
+msgid "Film/Dance/Culture/Entertainment"
+msgstr "Film/dans/kultur/underholdning"
+
+#: ../../Zotlabs/Module/Profiles.php:793
+msgid "Hobbies/Interests"
+msgstr "Hobbier/Interesser"
+
+#: ../../Zotlabs/Module/Profiles.php:794
+msgid "Love/Romance"
+msgstr "Kjærlighet/romantikk"
+
+#: ../../Zotlabs/Module/Profiles.php:796
+msgid "School/Education"
+msgstr "Skolle/utdanning"
+
+#: ../../Zotlabs/Module/Profiles.php:797
+msgid "Contact information and social networks"
+msgstr "Kontaktinformasjon og andre sosiale nettverk"
+
+#: ../../Zotlabs/Module/Profiles.php:798
+msgid "My other channels"
+msgstr "Mine andre kanaler"
+
+#: ../../Zotlabs/Module/Profiles.php:852 ../../Zotlabs/Module/Manage.php:137
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:217
+msgid "Create New"
+msgstr "Lag ny profil"
+
+#: ../../Zotlabs/Module/Network.php:108
+msgid "No such group"
+msgstr "Gruppen finnes ikke"
+
+#: ../../Zotlabs/Module/Network.php:160
+msgid "No such channel"
+msgstr "Ingen slik kanal"
+
+#: ../../Zotlabs/Module/Network.php:248
+msgid "Privacy group is empty"
+msgstr "Personverngruppen er tom"
+
+#: ../../Zotlabs/Module/Network.php:258
+msgid "Privacy group: "
+msgstr "Personverngruppe: "
+
+#: ../../Zotlabs/Module/Network.php:333
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:29
+#, fuzzy
+msgid "Invalid channel."
+msgstr "Ugyldig kanal"
+
+#: ../../Zotlabs/Module/Invite.php:70
+msgid "Invite App"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:82
+msgid "Register is closed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:116 ../../Zotlabs/Module/Invite.php:563
+msgid "Note, the invitation code is valid up to"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:129
+#, php-format
+msgid "Too many recipients for one invitation (max %d)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:133
+msgid "No recipients for this invitation"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:152
+#, php-format
+msgid "(%s) : Not a real email address"
+msgstr "(%s): Ikke en virkelig epostadresse"
+
+#: ../../Zotlabs/Module/Invite.php:159
+#, php-format
+msgid "(%s) : Not allowed email address"
+msgstr "(%s): Ikke en tillatt epostadresse"
+
+#: ../../Zotlabs/Module/Invite.php:172
+#, php-format
+msgid "(%s) : email address already in use"
+msgstr "(%s): epostadressen er allerede i bruk"
+
+#: ../../Zotlabs/Module/Invite.php:179
+#, php-format
+msgid "(%s) : Accepted email address"
+msgstr "(%s): Godkjent epostadresse"
+
+#: ../../Zotlabs/Module/Invite.php:266
+#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:40
+#, php-format
+msgid "%s : Message delivery failed."
+msgstr "%s : meldingslevering feilet."
+
+#: ../../Zotlabs/Module/Invite.php:271
+#, php-format
+msgid "To %s : Message delivery success."
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:303
+#, php-format
+msgid "%1$d mail(s) sent, %2$d mail error(s)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:328
+msgid "Invites not proposed by configuration"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:329
+msgid "Contact the site admin"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:345
+msgid "Invites by users not enabled"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:350
+msgid "You have no more invitations available"
+msgstr "Du har ikke flere invitasjoner tilgjengelig"
+
+#: ../../Zotlabs/Module/Invite.php:366
+msgid "Not on xchan"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:399
+msgid "All users invitation limit exceeded."
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:411 ../../Zotlabs/Module/Admin/Site.php:343
+msgid "Minute(s)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:412 ../../Zotlabs/Module/Admin/Site.php:344
+msgid "Hour(s)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:413 ../../Zotlabs/Module/Admin/Site.php:345
+msgid "Day(s)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:417
+msgid "Invitation expires after"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:422 ../../Zotlabs/Module/Admin/Site.php:362
+#: ../../Zotlabs/Module/Admin/Site.php:384
+msgid "duration up from now"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:518 ../../Zotlabs/Module/Invite.php:557
+msgid "Invitation"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:548
+msgid "Send invitations"
+msgstr "Send invitasjoner"
+
+#: ../../Zotlabs/Module/Invite.php:549
+msgid "Invitations I am using"
+msgstr "Invitasjoner jeg bruker"
+
+#: ../../Zotlabs/Module/Invite.php:550
+msgid "Invitations we are using"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:551
+msgid "§ Note, the email(s) sent will be recorded in the system logs"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:552
+msgid "Enter email addresses, one per line:"
+msgstr "Skriv e-postadresser, en per linje:"
+
+#: ../../Zotlabs/Module/Invite.php:553
+msgid "Your message:"
+msgstr "Din melding:"
+
+#: ../../Zotlabs/Module/Invite.php:554
+msgid "Invite template"
+msgstr ""
+
+#: ../../Zotlabs/Module/Invite.php:556
+msgid "Subject:"
+msgstr "Emne:"
+
+#: ../../Zotlabs/Module/Invite.php:562
+msgid "Here you may enter personal notes to the recipient(s)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:41
+msgid "Failed to create source. No channel selected."
+msgstr "Mislyktes med å lage kilde. Ingen kanal er valgt."
+
+#: ../../Zotlabs/Module/Sources.php:57
+msgid "Source created."
+msgstr "Kilden er laget."
+
+#: ../../Zotlabs/Module/Sources.php:70
+msgid "Source updated."
+msgstr "Kilden er oppdatert."
+
+#: ../../Zotlabs/Module/Sources.php:99
+msgid "*"
+msgstr "*"
+
+#: ../../Zotlabs/Module/Sources.php:106
+msgid "Manage remote sources of content for your channel."
+msgstr "Håndtere eksterne innholdskilder til din kanal."
+
+#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
+msgid "New Source"
+msgstr "Ny kilde"
+
+#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
+msgid ""
+"Import all or selected content from the following channel into this channel "
+"and distribute it according to your channel settings."
+msgstr ""
+"Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne "
+"kanalen og distribuer det i henhold til dine egne kanalinnstillinger."
+
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Only import content with these words (one per line)"
+msgstr "Bare importer innhold med disse ordene (ett ord per linje)"
+
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Leave blank to import all public content"
+msgstr "La stå tomt for å importere alt offentlig innhold"
+
+#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
+msgid "Channel Name"
+msgstr "Kanalnavn"
+
+#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
+msgid ""
+"Add the following categories to posts imported from this source (comma "
+"separated)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Resend posts with this channel as author"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Copyrights may apply"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
+msgid "Source not found."
+msgstr "Kilden ble ikke funnet."
+
+#: ../../Zotlabs/Module/Sources.php:149
+msgid "Edit Source"
+msgstr "Endre kilde"
+
+#: ../../Zotlabs/Module/Sources.php:150
+msgid "Delete Source"
+msgstr "Slett kilde"
+
+#: ../../Zotlabs/Module/Sources.php:180
+msgid "Source removed"
+msgstr "Kilden er fjernet"
+
+#: ../../Zotlabs/Module/Sources.php:182
+msgid "Unable to remove source."
+msgstr "Ikke i stand til å fjerne kilde."
+
+#: ../../Zotlabs/Module/Suggest.php:52
+msgid ""
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
+msgstr ""
+"Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv "
+"igjen om 24 timer."
+
+#: ../../Zotlabs/Module/Suggest.php:71 ../../Zotlabs/Widget/Suggestions.php:53
+msgid "Ignore/Hide"
+msgstr "Ignorer/Skjul"
+
+#: ../../Zotlabs/Module/Impel.php:188
+#, php-format
+msgid "%s element installed"
+msgstr "%s element installert"
+
+#: ../../Zotlabs/Module/Impel.php:191
+#, php-format
+msgid "%s element installation failed"
+msgstr "Installasjon av %s-element mislyktes"
+
+#: ../../Zotlabs/Module/Group.php:48
+msgid "Privacy group created."
+msgstr "Personverngruppen er opprettet."
+
+#: ../../Zotlabs/Module/Group.php:51
+msgid "Could not create privacy group."
+msgstr "Kunne ikke opprette personverngruppen."
+
+#: ../../Zotlabs/Module/Group.php:83
+msgid "Privacy group updated."
+msgstr "Personverngruppen er oppdatert."
+
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
+msgid "Post to this group by default"
+msgstr ""
+
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:303
+msgid "Add new contacts to this group by default"
+msgstr ""
+
+#: ../../Zotlabs/Module/Group.php:147
+#, fuzzy
+msgid "Privacy group name"
+msgstr "Personverngruppens navn:"
+
+#: ../../Zotlabs/Module/Group.php:148 ../../Zotlabs/Module/Group.php:250
+msgid "Members are visible to other channels"
+msgstr "Medlemmer er synlig for andre kanaler"
+
+#: ../../Zotlabs/Module/Group.php:176
+msgid "Privacy group removed."
+msgstr "Personverngruppen er fjernet."
+
+#: ../../Zotlabs/Module/Group.php:179
+msgid "Unable to remove privacy group."
+msgstr "Ikke i stand til å fjerne personverngruppen."
+
+#: ../../Zotlabs/Module/Group.php:245
+#, fuzzy, php-format
+msgid "Privacy Group: %s"
+msgstr "Personverngruppe: %s"
+
+#: ../../Zotlabs/Module/Group.php:247
+msgid "Privacy group name: "
+msgstr "Personverngruppens navn: "
+
+#: ../../Zotlabs/Module/Group.php:263
+msgid "Group members"
+msgstr ""
+
+#: ../../Zotlabs/Module/Group.php:265
+msgid "Not in this group"
+msgstr ""
+
+#: ../../Zotlabs/Module/Group.php:297
+msgid "Click a channel to toggle membership"
+msgstr ""
+
+#: ../../Zotlabs/Module/Layouts.php:184
+msgid "Comanche page description language help"
+msgstr "Hjelp med Comanche sidebeskrivelsesspråk"
+
+#: ../../Zotlabs/Module/Layouts.php:188
+msgid "Layout Description"
+msgstr "Layout-beskrivelse"
+
+#: ../../Zotlabs/Module/Layouts.php:193
+msgid "Download PDL file"
+msgstr "Last ned PDL-fil"
+
+#: ../../Zotlabs/Module/Layouts.php:196 ../../Zotlabs/Module/Pubsites.php:63
+#: ../../Zotlabs/Module/Blocks.php:164 ../../Zotlabs/Module/Webpages.php:256
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:216
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:406
+msgid "View"
+msgstr "Vis"
+
+#: ../../Zotlabs/Module/Oauth2.php:54
+msgid "Name and Secret are required"
+msgstr ""
+
+#: ../../Zotlabs/Module/Oauth2.php:113
+msgid "Add OAuth2 application"
+msgstr ""
+
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
+msgid "Grant Types"
+msgstr ""
+
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
+msgid "leave blank unless your application sepcifically requires this"
+msgstr ""
+
+#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
+msgid "Authorization scope"
+msgstr ""
+
+#: ../../Zotlabs/Module/Oauth2.php:132
+msgid "OAuth2 Application not found."
+msgstr ""
+
+#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
+msgid "leave blank unless your application specifically requires this"
+msgstr ""
+
+#: ../../Zotlabs/Module/Oauth2.php:190
+msgid "Connected OAuth2 Apps"
+msgstr ""
+
+#: ../../Zotlabs/Module/Viewsrc.php:43
+msgid "item"
+msgstr ""
+
+#: ../../Zotlabs/Module/Cover_photo.php:86
+#: ../../Zotlabs/Module/Profile_photo.php:129
+msgid "Image uploaded but image cropping failed."
+msgstr "Bildet ble lastet opp, men beskjæring av bildet mislyktes."
+
+#: ../../Zotlabs/Module/Cover_photo.php:195
+#: ../../Zotlabs/Module/Cover_photo.php:252
+msgid "Cover Photos"
+msgstr "Forsidebilder"
+
+#: ../../Zotlabs/Module/Cover_photo.php:211
+#: ../../Zotlabs/Module/Profile_photo.php:185
+msgid "Image resize failed."
+msgstr "Endring av bildestørrelse mislyktes."
+
+#: ../../Zotlabs/Module/Cover_photo.php:263
+#: ../../Zotlabs/Module/Profile_photo.php:350
+msgid "Image upload failed."
+msgstr "Opplasting av bildet mislyktes."
+
+#: ../../Zotlabs/Module/Cover_photo.php:280
+#: ../../Zotlabs/Module/Profile_photo.php:370
+msgid "Unable to process image."
+msgstr "Kan ikke behandle bildet."
+
+#: ../../Zotlabs/Module/Cover_photo.php:325
+#: ../../Zotlabs/Module/Cover_photo.php:340
+#: ../../Zotlabs/Module/Profile_photo.php:432
+#: ../../Zotlabs/Module/Profile_photo.php:497
+msgid "Photo not available."
+msgstr "Bildet er ikke tilgjengelig."
+
+#: ../../Zotlabs/Module/Cover_photo.php:376
+msgid "Your cover photo may be visible to anybody on the internet"
+msgstr "Omslagsbildet ditt vil være synlig for enhver på internett"
+
+#: ../../Zotlabs/Module/Cover_photo.php:378
+msgid "Upload File:"
+msgstr "Last opp fil:"
+
+#: ../../Zotlabs/Module/Cover_photo.php:379
+msgid "Select a profile:"
+msgstr "Velg en profil:"
+
+#: ../../Zotlabs/Module/Cover_photo.php:380
+#, fuzzy
+msgid "Change Cover Photo"
+msgstr "Endre omslagsbilde"
+
+#: ../../Zotlabs/Module/Cover_photo.php:384
+#: ../../Zotlabs/Module/Cover_photo.php:385
+#: ../../Zotlabs/Module/Profile_photo.php:551
+#: ../../Zotlabs/Module/Profile_photo.php:552
+msgid "Use a photo from your albums"
+msgstr ""
+
+#: ../../Zotlabs/Module/Cover_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:557
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:402
+msgid "Choose a different album"
+msgstr "Velg et annet album"
+
+#: ../../Zotlabs/Module/Cover_photo.php:396
+msgid "Select existing photo"
+msgstr "Velg eksisterende bilde"
+
+#: ../../Zotlabs/Module/Cover_photo.php:413
+#: ../../Zotlabs/Module/Profile_photo.php:581
+msgid "Crop Image"
+msgstr "Beskjær bildet"
+
+#: ../../Zotlabs/Module/Cover_photo.php:414
+#: ../../Zotlabs/Module/Profile_photo.php:582
+msgid "Please adjust the image cropping for optimum viewing."
+msgstr "Vennligst juster bildebeskjæringen for optimal visning."
+
+#: ../../Zotlabs/Module/Cover_photo.php:416
+msgid "Done Editing"
+msgstr "Lagre endringer"
+
+#: ../../Zotlabs/Module/Chat.php:29 ../../Zotlabs/Module/Ochannel.php:32
+msgid "You must be logged in to see this page."
+msgstr "Du må være innloegget for å se denne siden."
#: ../../Zotlabs/Module/Chat.php:193
msgid "Room not found"
@@ -9250,7 +7548,7 @@ msgstr "Jeg er borte akkurat nå"
#: ../../Zotlabs/Module/Chat.php:212
msgid "I am online"
-msgstr "Jeg er online"
+msgstr "Jeg er pålogget"
#: ../../Zotlabs/Module/Chat.php:214
msgid "Bookmark this room"
@@ -9289,544 +7587,1402 @@ msgstr "Utløp"
msgid "min"
msgstr "min"
-#: ../../Zotlabs/Module/Channel_calendar.php:62
-msgid "Event can not end before it has started."
-msgstr "Hendelsen kan ikke slutte før den starter."
+#: ../../Zotlabs/Module/Dreport.php:37
+msgid "Invalid message"
+msgstr "Ugyldig melding"
-#: ../../Zotlabs/Module/Channel_calendar.php:64
-#: ../../Zotlabs/Module/Channel_calendar.php:72
-#: ../../Zotlabs/Module/Channel_calendar.php:87
-msgid "Unable to generate preview."
-msgstr "Klarer ikke å lage forhåndsvisning."
+#: ../../Zotlabs/Module/Dreport.php:67
+msgid "no results"
+msgstr "ingen resultater"
-#: ../../Zotlabs/Module/Channel_calendar.php:70
-msgid "Event title and start time are required."
-msgstr "Hendelsestittel og starttidspunkt er påkrevd."
+#: ../../Zotlabs/Module/Dreport.php:81
+msgid "channel sync processed"
+msgstr "kanalsynkronisering er behandlet"
-#: ../../Zotlabs/Module/Channel_calendar.php:85
-#: ../../Zotlabs/Module/Channel_calendar.php:226
-msgid "Event not found."
-msgstr "Hendelsen ble ikke funnet."
+#: ../../Zotlabs/Module/Dreport.php:85
+msgid "queued"
+msgstr "lagt i kø"
-#: ../../Zotlabs/Module/Channel_calendar.php:370
-msgid "Edit event"
-msgstr "Endre hendelse"
+#: ../../Zotlabs/Module/Dreport.php:89
+msgid "posted"
+msgstr "lagt inn"
-#: ../../Zotlabs/Module/Channel_calendar.php:372
-msgid "Delete event"
-msgstr "Slett hendelse"
+#: ../../Zotlabs/Module/Dreport.php:93
+msgid "accepted for delivery"
+msgstr "akseptert for levering"
-#: ../../Zotlabs/Module/Channel_calendar.php:392
-#: ../../Zotlabs/Module/Cdav.php:935 ../../Zotlabs/Module/Cal.php:161
+#: ../../Zotlabs/Module/Dreport.php:97
+msgid "updated"
+msgstr "oppdatert"
+
+#: ../../Zotlabs/Module/Dreport.php:101
+msgid "update ignored"
+msgstr "oppdatering ignorert"
+
+#: ../../Zotlabs/Module/Dreport.php:104
+msgid "permission denied"
+msgstr "tillatelse avvist"
+
+#: ../../Zotlabs/Module/Dreport.php:108
+msgid "recipient not found"
+msgstr "mottaker ble ikke funnet"
+
+#: ../../Zotlabs/Module/Dreport.php:128
+#, php-format
+msgid "Delivery report for %1$s"
+msgstr "Leveringsrapport for %1$s"
+
+#: ../../Zotlabs/Module/Dreport.php:132
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:906
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:71
+msgid "Options"
+msgstr "Valg"
+
+#: ../../Zotlabs/Module/Dreport.php:133
+msgid "Redeliver"
+msgstr ""
+
+#: ../../Zotlabs/Module/Rbmark.php:72
+msgid "Select a bookmark folder"
+msgstr "Velg en bokmerkemappe"
+
+#: ../../Zotlabs/Module/Rbmark.php:80
+msgid "Save Bookmark"
+msgstr "Lagre bokmerke"
+
+#: ../../Zotlabs/Module/Rbmark.php:81
+msgid "URL of bookmark"
+msgstr "URL-en til bokmerket"
+
+#: ../../Zotlabs/Module/Rbmark.php:82 ../../Zotlabs/Module/Appman.php:220
+#: ../../Zotlabs/Module/Cdav.php:1005
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:260
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:657
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:173
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: ../../Zotlabs/Module/Rbmark.php:86
+msgid "Or enter new bookmark folder name"
+msgstr "Eller skriv nytt navn på bokmerkemappe"
+
+#: ../../Zotlabs/Module/Achievements.php:38
+msgid "Some blurb about what to do when you're new here"
+msgstr "En standardtekst om hva du bør gjøre som ny her"
+
+#: ../../Zotlabs/Module/Sse_bs.php:631
+msgid "Private forum"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sse_bs.php:631
#, fuzzy
-msgid "Link to source"
-msgstr "Lenke til kilde"
+msgid "Public forum"
+msgstr "Offentlig forum:"
-#: ../../Zotlabs/Module/Channel_calendar.php:406
-msgid "calendar"
-msgstr "kalender"
+#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
+msgid "App installed."
+msgstr "App installert."
-#: ../../Zotlabs/Module/Channel_calendar.php:493
-msgid "Failed to remove event"
-msgstr "Mislyktes med å slette hendelse"
+#: ../../Zotlabs/Module/Appman.php:49
+msgid "Malformed app."
+msgstr "Feil oppsett for app-en."
-#: ../../Zotlabs/Module/Totp_check.php:71
-#: ../../Zotlabs/Module/Admin/Account_edit.php:61
+#: ../../Zotlabs/Module/Appman.php:208
+msgid "Embed code"
+msgstr "Innbyggingskode"
+
+#: ../../Zotlabs/Module/Appman.php:213
+msgid "Edit App"
+msgstr "Endre app"
+
+#: ../../Zotlabs/Module/Appman.php:213
+msgid "Create App"
+msgstr "Lag app"
+
+#: ../../Zotlabs/Module/Appman.php:218
+msgid "Name of app"
+msgstr "Navn på app"
+
+#: ../../Zotlabs/Module/Appman.php:219
+msgid "Location (URL) of app"
+msgstr "Plassering (URL) til app"
+
+#: ../../Zotlabs/Module/Appman.php:221
+msgid "Photo icon URL"
+msgstr "Bildeikon URL"
+
+#: ../../Zotlabs/Module/Appman.php:221
+msgid "80 x 80 pixels - optional"
+msgstr "80 x80 pixler - valgfritt"
+
+#: ../../Zotlabs/Module/Appman.php:222
#, fuzzy
-msgid "Account not found."
-msgstr "Kontoen ble ikke funnet"
+msgid "Categories (optional, comma separated list)"
+msgstr "Kategorier (valgfri, kommaseparert liste)"
-#: ../../Zotlabs/Module/Totp_check.php:78
-msgid "Multifactor Verification"
+#: ../../Zotlabs/Module/Appman.php:223
+msgid "Version ID"
+msgstr "Versjons-ID"
+
+#: ../../Zotlabs/Module/Appman.php:224
+msgid "Price of app"
+msgstr "Pris på app"
+
+#: ../../Zotlabs/Module/Appman.php:225
+msgid "Location (URL) to purchase app"
+msgstr "Plassering (URL) for å kjøpe app"
+
+#: ../../Zotlabs/Module/Directory.php:124
+msgid "No default suggestions were found."
msgstr ""
-#: ../../Zotlabs/Module/Totp_check.php:80
-msgid "Please enter the verification key from your authenticator app"
+#: ../../Zotlabs/Module/Directory.php:292
+msgid "Gender: "
+msgstr "Kjønn: "
+
+#: ../../Zotlabs/Module/Directory.php:294
+msgid "Status: "
+msgstr "Status: "
+
+#: ../../Zotlabs/Module/Directory.php:296
+msgid "Homepage: "
+msgstr "Hjemmeside: "
+
+#: ../../Zotlabs/Module/Directory.php:357
+msgid "Description:"
+msgstr "Beskrivelse:"
+
+#: ../../Zotlabs/Module/Directory.php:359
+msgid "Unsafe"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:112
-msgid "Like/Dislike"
-msgstr "Liker/Liker ikke"
+#: ../../Zotlabs/Module/Directory.php:362
+msgid "Spam"
+msgstr ""
-#: ../../Zotlabs/Module/Like.php:118
-msgid "This action is restricted to members."
-msgstr "Denne handlingen er begrenset til medlemmer."
+#: ../../Zotlabs/Module/Directory.php:372
+msgid "Public Forum:"
+msgstr "Offentlig forum:"
-#: ../../Zotlabs/Module/Like.php:119
-msgid ""
-"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
-"href=\"register\">register as a new $Projectname member</a> to continue."
+#: ../../Zotlabs/Module/Directory.php:375
+msgid "Keywords: "
+msgstr "Nøkkelord: "
+
+#: ../../Zotlabs/Module/Directory.php:378
+msgid "Don't suggest"
+msgstr "Ikke foreslå"
+
+#: ../../Zotlabs/Module/Directory.php:380
+msgid "Common connections (estimated):"
msgstr ""
-"Vennligst <a href=\"rmagic\">logg inn med din $Projectname ID</a> eller <a "
-"href=\"register\">registrer deg som et nytt $Projectname-medlem</a> for å "
-"fortsette."
-#: ../../Zotlabs/Module/Like.php:172 ../../Zotlabs/Module/Like.php:198
-#: ../../Zotlabs/Module/Like.php:236
-msgid "Invalid request."
-msgstr "Ugyldig forespørsel."
+#: ../../Zotlabs/Module/Directory.php:430
+msgid "Global Directory"
+msgstr "Global katalog"
-#: ../../Zotlabs/Module/Like.php:213
-msgid "thing"
-msgstr "ting"
+#: ../../Zotlabs/Module/Directory.php:430
+msgid "Local Directory"
+msgstr "Lokal katalog"
-#: ../../Zotlabs/Module/Like.php:259
-msgid "Channel unavailable."
-msgstr "Kanalen er utilgjengelig."
+#: ../../Zotlabs/Module/Directory.php:436
+msgid "Finding:"
+msgstr "Finner:"
-#: ../../Zotlabs/Module/Like.php:295
-msgid "Previous action reversed."
-msgstr "Forrige handling er omgjort."
+#: ../../Zotlabs/Module/Directory.php:441
+msgid "next page"
+msgstr "neste side"
-#: ../../Zotlabs/Module/Like.php:489
-#, php-format
-msgid "%1$s agrees with %2$s's %3$s"
-msgstr "%1$s er enig med %2$s sin %3$s"
+#: ../../Zotlabs/Module/Directory.php:441
+msgid "previous page"
+msgstr "forrige side"
-#: ../../Zotlabs/Module/Like.php:491
-#, php-format
-msgid "%1$s doesn't agree with %2$s's %3$s"
-msgstr "%1$s er ikke enig med %2$s sin %3$s"
+#: ../../Zotlabs/Module/Directory.php:442
+msgid "Sort options"
+msgstr "Sorteringsvalg"
+
+#: ../../Zotlabs/Module/Directory.php:443
+msgid "Alphabetic"
+msgstr "Alfabetisk"
+
+#: ../../Zotlabs/Module/Directory.php:444
+msgid "Reverse Alphabetic"
+msgstr "Omvendt alfabetisk"
+
+#: ../../Zotlabs/Module/Directory.php:445
+msgid "Newest to Oldest"
+msgstr "Nyest til eldst"
+
+#: ../../Zotlabs/Module/Directory.php:446
+msgid "Oldest to Newest"
+msgstr "Eldst til nyest"
+
+#: ../../Zotlabs/Module/Directory.php:464
+msgid "No entries (some entries may be hidden)."
+msgstr "Ingen oppføringer (noen oppføringer kan være skjult)."
+
+#: ../../Zotlabs/Module/Service_limits.php:23
+msgid "No service class restrictions found."
+msgstr "Ingen restriksjoner er funnet i tjenesteklasse."
+
+#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
+msgid "Tag removed"
+msgstr "Merkelapp fjernet"
+
+#: ../../Zotlabs/Module/Tagrm.php:123
+msgid "Remove Item Tag"
+msgstr "Fjern merkelapp fra element"
+
+#: ../../Zotlabs/Module/Tagrm.php:125
+msgid "Select a tag to remove: "
+msgstr "Velg merkelapp å fjerne: "
+
+#: ../../Zotlabs/Module/Connedit.php:80 ../../Zotlabs/Module/Defperms.php:67
+#: ../../Zotlabs/Module/Contactedit.php:78
+msgid "Could not access contact record."
+msgstr "Fikk ikke tilgang til kontaktinformasjonen."
+
+#: ../../Zotlabs/Module/Connedit.php:101
+#: ../../Zotlabs/Module/Contactedit.php:107
+msgid "Could not locate selected profile."
+msgstr "Fant ikke valgt profil."
+
+#: ../../Zotlabs/Module/Connedit.php:171
+msgid "Connection updated."
+msgstr "Forbindelsen er oppdatert."
-#: ../../Zotlabs/Module/Like.php:493
+#: ../../Zotlabs/Module/Connedit.php:173
+msgid "Failed to update connection record."
+msgstr "Mislyktes med å oppdatere forbindelsesinformasjonen."
+
+#: ../../Zotlabs/Module/Connedit.php:215
+#: ../../Zotlabs/Module/Contactedit.php:180
+msgid "is now connected to"
+msgstr "er nå forbundet til"
+
+#: ../../Zotlabs/Module/Connedit.php:320
+msgid "Could not access address book record."
+msgstr "Fikk ikke tilgang til informasjonen i adresseboken."
+
+#: ../../Zotlabs/Module/Connedit.php:368
+msgid "Refresh failed - channel is currently unavailable."
+msgstr "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig."
+
+#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
+#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
+#: ../../Zotlabs/Module/Connedit.php:422
+msgid "Unable to set address book parameters."
+msgstr "Ikke i stand til å angi parametre for adresseboken."
+
+#: ../../Zotlabs/Module/Connedit.php:441
+msgid "Connection has been removed."
+msgstr "Forbindelsen har blitt fjernet."
+
+#: ../../Zotlabs/Module/Connedit.php:483
#, php-format
-msgid "%1$s abstains from a decision on %2$s's %3$s"
-msgstr "%1$s avstår fra å mene noe om %2$s sin %3$s"
+msgid "View %s's profile"
+msgstr "Vis %s sin profil"
-#: ../../Zotlabs/Module/Like.php:610
-msgid "Action completed."
-msgstr "Handling ferdig."
+#: ../../Zotlabs/Module/Connedit.php:487
+msgid "Refresh Permissions"
+msgstr "Oppfrisk tillatelser"
-#: ../../Zotlabs/Module/Like.php:611
-msgid "Thank you."
-msgstr "Tusen takk."
+#: ../../Zotlabs/Module/Connedit.php:490
+msgid "Fetch updated permissions"
+msgstr "Hent oppdaterte tillatelser"
-#: ../../Zotlabs/Module/Poke.php:182
-msgid "Poke somebody"
-msgstr "Dult noen"
+#: ../../Zotlabs/Module/Connedit.php:494
+msgid "Refresh Photo"
+msgstr ""
-#: ../../Zotlabs/Module/Poke.php:186
-#, fuzzy
-#| msgid "Poke somebody"
-msgid "Poke or ping somebody"
-msgstr "Dult noen"
+#: ../../Zotlabs/Module/Connedit.php:497
+msgid "Fetch updated photo"
+msgstr ""
-#: ../../Zotlabs/Module/Poke.php:193
-msgid "Recipient"
-msgstr "Mottaker"
+#: ../../Zotlabs/Module/Connedit.php:504
+msgid "View recent posts and comments"
+msgstr "Vis nylige innlegg og kommentarer"
-#: ../../Zotlabs/Module/Poke.php:194
-#, fuzzy
-#| msgid "Connections"
-msgid "Choose action"
-msgstr "Forbindelser"
+#: ../../Zotlabs/Module/Connedit.php:508
+#: ../../Zotlabs/Module/Admin/Accounts.php:322
+#: ../../Zotlabs/Module/Contactedit.php:623
+msgid "Unblock"
+msgstr "Ikke blokker lenger"
-#: ../../Zotlabs/Module/Poke.php:197 ../../Zotlabs/Module/Poke.php:198
-msgid "Make this post private"
-msgstr "Gjør dette innlegget privat"
+#: ../../Zotlabs/Module/Connedit.php:508
+#: ../../Zotlabs/Module/Admin/Accounts.php:321
+#: ../../Zotlabs/Module/Contactedit.php:623
+msgid "Block"
+msgstr "Blokker"
-#: ../../Zotlabs/Module/Cdav.php:819
-msgid "Calendar entries imported."
-msgstr "Kalenderhendelsene er importert."
+#: ../../Zotlabs/Module/Connedit.php:511
+#: ../../Zotlabs/Module/Contactedit.php:625
+msgid "Block (or Unblock) all communications with this connection"
+msgstr ""
+"Blokker eller fjern blokkering av all kommunikasjon med denne forbindelsen"
-#: ../../Zotlabs/Module/Cdav.php:821
-msgid "No calendar entries found."
-msgstr "Ingen kalenderhendelser funnet."
+#: ../../Zotlabs/Module/Connedit.php:512
+#: ../../Zotlabs/Module/Contactedit.php:626
+msgid "This connection is blocked!"
+msgstr "Denne forbindelsen er blokkert!"
-#: ../../Zotlabs/Module/Cdav.php:1000
-msgid "Event title"
-msgstr "Tittel på hendelse"
+#: ../../Zotlabs/Module/Connedit.php:516
+#: ../../Zotlabs/Module/Contactedit.php:630
+msgid "Unignore"
+msgstr "Ikke ignorer lenger"
-#: ../../Zotlabs/Module/Cdav.php:1001
-msgid "Start date and time"
-msgstr "Startdato og tidspunkt"
+#: ../../Zotlabs/Module/Connedit.php:516
+#: ../../Zotlabs/Module/Connections.php:360
+#: ../../Zotlabs/Module/Contactedit.php:630
+msgid "Ignore"
+msgstr "Ignorer"
-#: ../../Zotlabs/Module/Cdav.php:1002
-msgid "End date and time"
+#: ../../Zotlabs/Module/Connedit.php:519
+#: ../../Zotlabs/Module/Contactedit.php:632
+msgid "Ignore (or Unignore) all inbound communications from this connection"
msgstr ""
+"Ignorer eller fjern ignorering av all inngående kommunikasjon fra denne "
+"forbindelsen"
-#: ../../Zotlabs/Module/Cdav.php:1003
-#, fuzzy
-msgid "Timezone:"
-msgstr "Tidssone"
+#: ../../Zotlabs/Module/Connedit.php:520
+#: ../../Zotlabs/Module/Contactedit.php:633
+msgid "This connection is ignored!"
+msgstr "Denne forbindelsen er ignorert!"
-#: ../../Zotlabs/Module/Cdav.php:1026 ../../Zotlabs/Module/Cal.php:199
-#: ../../Zotlabs/Module/Photos.php:942
-msgid "Previous"
-msgstr "Forrige"
+#: ../../Zotlabs/Module/Connedit.php:524
+#: ../../Zotlabs/Module/Contactedit.php:637
+msgid "Unarchive"
+msgstr "Ikke arkiver lenger"
-#: ../../Zotlabs/Module/Cdav.php:1028 ../../Zotlabs/Module/Cal.php:201
-msgid "Today"
-msgstr "Idag"
+#: ../../Zotlabs/Module/Connedit.php:524
+#: ../../Zotlabs/Module/Contactedit.php:637
+msgid "Archive"
+msgstr "Arkiver"
-#: ../../Zotlabs/Module/Cdav.php:1029
-#, fuzzy
-msgid "Month"
-msgstr "måned"
+#: ../../Zotlabs/Module/Connedit.php:527
+#: ../../Zotlabs/Module/Contactedit.php:639
+msgid ""
+"Archive (or Unarchive) this connection - mark channel dead but keep content"
+msgstr ""
+"Arkiver eller fjern arkivering av denne forbindelsen - marker kanal som død, "
+"men behold innhold"
-#: ../../Zotlabs/Module/Cdav.php:1030
-#, fuzzy
-msgid "Week"
-msgstr "uke"
+#: ../../Zotlabs/Module/Connedit.php:528
+#: ../../Zotlabs/Module/Contactedit.php:640
+msgid "This connection is archived!"
+msgstr "Denne forbindelsen er arkivert!"
-#: ../../Zotlabs/Module/Cdav.php:1031
-#, fuzzy
-msgid "Day"
-msgstr "dag"
+#: ../../Zotlabs/Module/Connedit.php:532
+#: ../../Zotlabs/Module/Contactedit.php:644
+msgid "Unhide"
+msgstr "Ikke skjul lenger"
-#: ../../Zotlabs/Module/Cdav.php:1032
-msgid "List month"
+#: ../../Zotlabs/Module/Connedit.php:532
+#: ../../Zotlabs/Module/Contactedit.php:644
+msgid "Hide"
+msgstr "Skjul"
+
+#: ../../Zotlabs/Module/Connedit.php:535
+#: ../../Zotlabs/Module/Contactedit.php:646
+msgid "Hide or Unhide this connection from your other connections"
msgstr ""
+"Skjul eller fjern skjuling av denne forbindelsen fra dine andre forbindelser"
-#: ../../Zotlabs/Module/Cdav.php:1033
-msgid "List week"
+#: ../../Zotlabs/Module/Connedit.php:536
+#: ../../Zotlabs/Module/Contactedit.php:647
+msgid "This connection is hidden!"
+msgstr "Denne forbindelsen er skjult!"
+
+#: ../../Zotlabs/Module/Connedit.php:543
+#: ../../Zotlabs/Module/Contactedit.php:653
+msgid "Delete this connection"
+msgstr "Slett denne forbindelsen"
+
+#: ../../Zotlabs/Module/Connedit.php:550
+msgid "Fetch Vcard"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1034
-msgid "List day"
+#: ../../Zotlabs/Module/Connedit.php:553
+msgid "Fetch electronic calling card for this connection"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1042
-msgid "More"
+#: ../../Zotlabs/Module/Connedit.php:572
+#: ../../Zotlabs/Module/Contactedit.php:431
+msgid "Affinity"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1043
-msgid "Less"
+#: ../../Zotlabs/Module/Connedit.php:575
+msgid "Open Set Affinity section by default"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1045
-msgid "Select calendar"
+#: ../../Zotlabs/Module/Connedit.php:579
+#: ../../Zotlabs/Module/Contactedit.php:281
+#: ../../Zotlabs/Widget/Affinity.php:36
+msgid "Me"
+msgstr "Meg"
+
+#: ../../Zotlabs/Module/Connedit.php:580
+#: ../../Zotlabs/Module/Contactedit.php:282
+#: ../../Zotlabs/Widget/Affinity.php:37
+msgid "Family"
+msgstr "Familie"
+
+#: ../../Zotlabs/Module/Connedit.php:582
+#: ../../Zotlabs/Module/Contactedit.php:284
+#: ../../Zotlabs/Widget/Affinity.php:39
+msgid "Acquaintances"
+msgstr "Bekjente"
+
+#: ../../Zotlabs/Module/Connedit.php:583
+#: ../../Zotlabs/Module/Connections.php:97
+#: ../../Zotlabs/Module/Connections.php:111
+#: ../../Zotlabs/Module/Contactedit.php:285
+#: ../../Zotlabs/Widget/Affinity.php:40
+msgid "All"
+msgstr "Alle"
+
+#: ../../Zotlabs/Module/Connedit.php:612
+msgid "Filter"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1048
-msgid "Delete all"
+#: ../../Zotlabs/Module/Connedit.php:615
+msgid "Open Custom Filter section by default"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1051
-msgid "Sorry! Editing of recurrent events is not yet implemented."
+#: ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Contactedit.php:315
+msgid "Approve this contact"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1052
+#: ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Contactedit.php:315
+msgid "Accept contact to allow communication"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:626
+msgid "Set Affinity"
+msgstr "Angi nærhet"
+
+#: ../../Zotlabs/Module/Connedit.php:629
+msgid "Set Profile"
+msgstr "Angi profil"
+
+#: ../../Zotlabs/Module/Connedit.php:632
+msgid "Set Affinity & Profile"
+msgstr "Angi nærhet og profil"
+
+#: ../../Zotlabs/Module/Connedit.php:658
+#: ../../Zotlabs/Module/Contactedit.php:348
+msgid "Please select a role for this contact!"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:678
+#: ../../Zotlabs/Module/Contactedit.php:368
+msgid "This contact is unreachable from this location."
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:679
+#: ../../Zotlabs/Module/Contactedit.php:369
+msgid "This contact may be unreachable from other channel locations."
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:681
+#: ../../Zotlabs/Module/Contactedit.php:371
+msgid "Location independence is not supported by their network."
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:685
+#, php-format
+msgid "Contact: %s"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:686
+#: ../../Zotlabs/Module/Connections.php:404
+msgid "Contact role"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:687
+msgid "Manage contact roles"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:694
+msgid "This contacts's primary address is"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:695
+msgid "Available locations:"
+msgstr "Tilgjengelige plasseringer:"
+
+#: ../../Zotlabs/Module/Connedit.php:700 ../../Zotlabs/Module/Defperms.php:259
msgid ""
-"Could not fetch calendar resource. The selected calendar might be disabled."
+"The permissions indicated on this page will be applied to all new "
+"connections."
+msgstr ""
+"Tillatelsene angitt på denne siden gjøres gjeldende for alle nye "
+"forbindelser."
+
+#: ../../Zotlabs/Module/Connedit.php:701
+#: ../../Zotlabs/Module/Contactedit.php:238
+#: ../../Zotlabs/Module/Contactedit.php:387
+msgid "Contact Tools"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:703
+#: ../../Zotlabs/Module/Contactedit.php:406
+msgid "Slide to adjust your degree of friendship"
+msgstr "Flytt for å justere din grad av vennskap"
+
+#: ../../Zotlabs/Module/Connedit.php:705
+#: ../../Zotlabs/Module/Contactedit.php:408
+msgid "Custom Filter"
+msgstr "Tilpasset filter"
+
+#: ../../Zotlabs/Module/Connedit.php:706
+#: ../../Zotlabs/Module/Settings/Channel.php:287
+#: ../../Zotlabs/Module/Contactedit.php:409
+msgid "Only import posts with this text"
+msgstr "Bare importer innlegg med disse ordene"
+
+#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
+#: ../../Zotlabs/Module/Admin/Site.php:501
+#: ../../Zotlabs/Module/Admin/Site.php:502
+#: ../../Zotlabs/Module/Contactedit.php:409
+#: ../../Zotlabs/Module/Contactedit.php:410
+msgid ""
+"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
+"all posts"
+msgstr ""
+"ord per linje eller #merkelapper eller /mønster/ eller språk lang=xx, la stå "
+"blankt for å importere alle innlegg"
+
+#: ../../Zotlabs/Module/Connedit.php:707
+#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Contactedit.php:410
+msgid "Do not import posts with this text"
+msgstr "Ikke importer innlegg med denne teksten"
+
+#: ../../Zotlabs/Module/Connedit.php:710
+msgid "Contact Pending Approval"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:713 ../../Zotlabs/Module/Defperms.php:261
+#: ../../Zotlabs/Module/Permcats.php:253
+msgid "inherited"
+msgstr "arvet"
+
+#: ../../Zotlabs/Module/Connedit.php:714
+#: ../../Zotlabs/Module/Contactedit.php:415
+msgid "Approve contact"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:715
+#, php-format
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
+msgstr ""
+"Vennligst velg profilen du ønsker å vise %s når profilen din ses på en "
+"sikret måte."
+
+#: ../../Zotlabs/Module/Connedit.php:717
+#: ../../Zotlabs/Module/Contactedit.php:417
+msgid "Their"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1365 ../../Zotlabs/Module/Connedit.php:733
+#: ../../Zotlabs/Module/Connedit.php:718
+#: ../../Zotlabs/Module/Contactedit.php:418
+msgid "My"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Defperms.php:266
+msgid "Individual Permissions"
+msgstr "Individuelle tillatelser"
+
+#: ../../Zotlabs/Module/Connedit.php:721
+msgid ""
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can <strong>not</strong> change those "
+"settings here."
+msgstr ""
+"Noen tillatelser kan være arvet fra din kanals <a "
+"ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har "
+"høyere prioritet enn individuelle innstillinger. Du kan <strong>ikke</"
+"strong> endre arvede innstillingene her."
+
+#: ../../Zotlabs/Module/Connedit.php:722
+msgid ""
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can change those settings here but "
+"they wont have any impact unless the inherited setting changes."
+msgstr ""
+"Noen tillatelser kan være arvet fra din kanals <a "
+"ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har "
+"høyere prioritet enn individuelle innstillinger. Du kan endre disse "
+"innstillingene her, men de vil ikke få noen effekt før de arvede "
+"innstillingene endres."
+
+#: ../../Zotlabs/Module/Connedit.php:723
+msgid "Last update:"
+msgstr "Siste oppdatering:"
+
+#: ../../Zotlabs/Module/Connedit.php:731
+msgid "Details"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:733 ../../Zotlabs/Module/Cdav.php:1369
msgid "Organisation"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1367 ../../Zotlabs/Module/Connedit.php:735
+#: ../../Zotlabs/Module/Connedit.php:734 ../../Zotlabs/Module/Cdav.php:1370
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2653
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2722
+msgid "Title"
+msgstr "Tittel"
+
+#: ../../Zotlabs/Module/Connedit.php:735 ../../Zotlabs/Module/Cdav.php:1371
msgid "Phone"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1369 ../../Zotlabs/Module/Connedit.php:737
+#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Cdav.php:1373
msgid "Instant messenger"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1370 ../../Zotlabs/Module/Connedit.php:738
+#: ../../Zotlabs/Module/Connedit.php:738 ../../Zotlabs/Module/Cdav.php:1374
msgid "Website"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1371
-#: ../../Zotlabs/Module/Admin/Channels.php:160
-#: ../../Zotlabs/Module/Profiles.php:472 ../../Zotlabs/Module/Connedit.php:739
-#: ../../Zotlabs/Module/Locs.php:122
-msgid "Address"
-msgstr "Adresse"
-
-#: ../../Zotlabs/Module/Cdav.php:1372 ../../Zotlabs/Module/Connedit.php:740
+#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Cdav.php:1376
msgid "Note"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1377 ../../Zotlabs/Module/Connedit.php:745
+#: ../../Zotlabs/Module/Connedit.php:745 ../../Zotlabs/Module/Cdav.php:1381
msgid "Add Contact"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Connedit.php:746
+#: ../../Zotlabs/Module/Connedit.php:746 ../../Zotlabs/Module/Cdav.php:1382
msgid "Add Field"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Connedit.php:751
+#: ../../Zotlabs/Module/Connedit.php:751 ../../Zotlabs/Module/Cdav.php:1387
msgid "P.O. Box"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Connedit.php:752
+#: ../../Zotlabs/Module/Connedit.php:752 ../../Zotlabs/Module/Cdav.php:1388
msgid "Additional"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Connedit.php:753
+#: ../../Zotlabs/Module/Connedit.php:753 ../../Zotlabs/Module/Cdav.php:1389
msgid "Street"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Connedit.php:754
+#: ../../Zotlabs/Module/Connedit.php:754 ../../Zotlabs/Module/Cdav.php:1390
msgid "Locality"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1387 ../../Zotlabs/Module/Connedit.php:755
+#: ../../Zotlabs/Module/Connedit.php:755 ../../Zotlabs/Module/Cdav.php:1391
msgid "Region"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1388 ../../Zotlabs/Module/Connedit.php:756
+#: ../../Zotlabs/Module/Connedit.php:756 ../../Zotlabs/Module/Cdav.php:1392
msgid "ZIP Code"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1389 ../../Zotlabs/Module/Profiles.php:773
-#: ../../Zotlabs/Module/Connedit.php:757
-msgid "Country"
-msgstr "Land"
+#: ../../Zotlabs/Module/Import.php:71
+msgid "Nothing to import."
+msgstr "Ingenting å importere."
-#: ../../Zotlabs/Module/Cdav.php:1448
-msgid "Default Calendar"
+#: ../../Zotlabs/Module/Import.php:87 ../../Zotlabs/Module/Import.php:101
+msgid "Unable to download data from old server"
+msgstr "Ikke i stand til å laste ned data fra gammel tjener"
+
+#: ../../Zotlabs/Module/Import.php:164
+#, php-format
+msgid "Your service plan only allows %d channels."
+msgstr "Din tjenesteplan tillater bare %d kanaler."
+
+#: ../../Zotlabs/Module/Import.php:191
+msgid "No channel. Import failed."
+msgstr "Ingen kanal. Import mislyktes."
+
+#: ../../Zotlabs/Module/Import.php:197
+msgid "Channel exists but has been marked removed on this hub. Import failed."
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1459
-msgid "Default Addressbook"
+#: ../../Zotlabs/Module/Import.php:568
+msgid ""
+"Automatic content and files import was not possible due to API version "
+"incompatiblity. Please import content and files manually!"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:101
-msgid "Remote privacy information not available"
+#: ../../Zotlabs/Module/Import.php:596
+msgid "You must be logged in to use this feature."
+msgstr "Du må være innlogget for å bruke denne funksjonen."
+
+#: ../../Zotlabs/Module/Import.php:603
+msgid "Channel Import"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203
-#: ../../Zotlabs/Module/Acl.php:123
-msgctxt "acl"
-msgid "Profile"
-msgstr "Profil"
+#: ../../Zotlabs/Module/Import.php:604
+msgid ""
+"Use this form to import an existing channel from a different server/hub. You "
+"may retrieve the channel identity from the old server/hub via the network or "
+"provide an export file."
+msgstr ""
+"Bruk dette skjemaet for å importere en eksisterende kanal fra en annen "
+"tjener/hub. Du kan hente inn kanalidentiteten fra den gamle tjeneren/huben "
+"via nettverket eller ved å bruke en eksportfil."
-#: ../../Zotlabs/Module/Lockview.php:155 ../../Zotlabs/Module/Lockview.php:212
-#, fuzzy
-msgid "Privacy group"
-msgstr "Personverngruppe:"
+#: ../../Zotlabs/Module/Import.php:606
+msgid "Or provide the old server/hub details"
+msgstr "Eller oppgi detaljene fra den gamle tjeneren/hub-en"
-#: ../../Zotlabs/Module/Lockview.php:183
-msgid "Item"
+#: ../../Zotlabs/Module/Import.php:608
+msgid "Your old identity address (xyz@example.com)"
+msgstr "Din gamle identitetsadresse (xyz@example.com)"
+
+#: ../../Zotlabs/Module/Import.php:609
+msgid "Your old login email address"
+msgstr "Din gamle innloggings e-postadresse"
+
+#: ../../Zotlabs/Module/Import.php:610
+msgid "Your old login password"
+msgstr "Ditt gamle innloggingspassord"
+
+#: ../../Zotlabs/Module/Import.php:611
+msgid "Import your items and files (limited by available memory)"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:230
-#, php-format
-msgid "Click to copy link to this ressource for guest %s to clipboard"
+#: ../../Zotlabs/Module/Import.php:613
+msgid ""
+"For either option, please choose whether to make this hub your new primary "
+"address, or whether your old location should continue this role. You will be "
+"able to post from either location, but only one can be marked as the primary "
+"location for files, photos, and media."
msgstr ""
+"Enten du tar det ene eller det andre valget, vennligst angi om du vil at "
+"denne hubben skal være din nye primære adresse, eller om din gamle "
+"plassering skal fortsette å ha denne rollen. Du kan lage innlegg fra den ene "
+"eller den andre plasseringen, men bare en av dem kan markeres som den "
+"primære plasseringen for filer, bilder og media."
-#: ../../Zotlabs/Module/Lockview.php:230
-msgid "Link copied"
+#: ../../Zotlabs/Module/Import.php:615
+msgid "Make this hub my primary location"
+msgstr "Gjør dette nettstedet til min primære plassering"
+
+#: ../../Zotlabs/Module/Import.php:616
+msgid "Move this channel (disable all previous locations)"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:235
-msgid "Access"
-msgstr "Tilgang"
+#: ../../Zotlabs/Module/Import.php:617
+msgid "Use this channel nickname instead of the one provided"
+msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:237
-msgid "OCAP access"
+#: ../../Zotlabs/Module/Import.php:617
+msgid ""
+"Leave blank to keep your existing channel nickname. You will be randomly "
+"assigned a similar nickname if either name is already allocated on this site."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:764
-msgid "Empty post discarded."
-msgstr "Tomt innlegg forkastet."
+#: ../../Zotlabs/Module/Import.php:619
+msgid ""
+"This process may take several minutes to complete. Please submit the form "
+"only once and leave this page open until finished."
+msgstr ""
+"Denne prosessen kan ta flere minutter å fullføre. Vennligst send inn dette "
+"skjemaet bare en gang og la siden være åpen inntil den er ferdig."
-#: ../../Zotlabs/Module/Item.php:1179
-msgid "Duplicate post suppressed."
-msgstr "Duplikat av innlegg forhindret."
+#: ../../Zotlabs/Module/Editwebpage.php:139
+msgid "Page link"
+msgstr "Sidelenke"
-#: ../../Zotlabs/Module/Item.php:1329
-msgid "System error. Post not saved."
-msgstr "Systemfeil. Innlegg ble ikke lagret."
+#: ../../Zotlabs/Module/Editwebpage.php:166
+msgid "Edit Webpage"
+msgstr "Endre webside"
-#: ../../Zotlabs/Module/Item.php:1363
-msgid "Your comment is awaiting approval."
+#: ../../Zotlabs/Module/Filer.php:53
+msgid "Enter a folder name"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1500
-msgid "Unable to obtain post information from database."
-msgstr "Ikke i stand til å få tak i informasjon om innlegg fra databasen."
+#: ../../Zotlabs/Module/Filer.php:53
+msgid "or select an existing folder (doubleclick)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Profperm.php:35 ../../Zotlabs/Module/Profperm.php:64
+msgid "Invalid profile identifier."
+msgstr "Ugyldig profil-identifikator."
+
+#: ../../Zotlabs/Module/Profperm.php:112
+msgid "Profile Visibility Editor"
+msgstr "Endre profilsynlighet"
+
+#: ../../Zotlabs/Module/Profperm.php:116
+msgid "Click on a contact to add or remove."
+msgstr "Klikk på en kontakt for å legge til eller fjerne."
+
+#: ../../Zotlabs/Module/Profperm.php:125
+msgid "Visible To"
+msgstr "Synlig for"
+
+#: ../../Zotlabs/Module/Profperm.php:141
+#: ../../Zotlabs/Module/Connections.php:221
+msgid "All Connections"
+msgstr "Alle forbindelser"
+
+#: ../../Zotlabs/Module/Cal.php:62
+msgid "Permissions denied."
+msgstr "Tillatelse avvist."
+
+#: ../../Zotlabs/Module/Cal.php:201 ../../Zotlabs/Module/Cdav.php:1028
+msgid "Today"
+msgstr "Idag"
+
+#: ../../Zotlabs/Module/Dircensor.php:61
+msgid "Entry censored"
+msgstr ""
+
+#: ../../Zotlabs/Module/Dircensor.php:64
+msgid "Entry OK"
+msgstr ""
+
+#: ../../Zotlabs/Module/Acl.php:371
+msgid "network"
+msgstr "nettverk"
+
+#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69
+msgid "This setting requires special processing and editing has been blocked."
+msgstr ""
+"Denne innstillingen krever spesiell behandling og redigering har blitt "
+"blokkert."
+
+#: ../../Zotlabs/Module/Pconfig.php:58
+msgid "Configuration Editor"
+msgstr "Konfigurasjonsbehandler"
+
+#: ../../Zotlabs/Module/Pconfig.php:59
+msgid ""
+"Warning: Changing some settings could render your channel inoperable. Please "
+"leave this page unless you are comfortable with and knowledgeable about how "
+"to correctly use this feature."
+msgstr ""
+"Advarsel: kanalen din kan slutte å virke ved endring av enkelte "
+"innstillinger. Vennligst forlat denne siden med mindre du er komfortabel med "
+"dette og vet hvordan du bruker denne funksjonen riktig."
+
+#: ../../Zotlabs/Module/Xchan.php:10
+msgid "Xchan Lookup"
+msgstr "Xchan oppslag"
+
+#: ../../Zotlabs/Module/Xchan.php:13
+msgid "Lookup xchan beginning with (or webbie): "
+msgstr "Slå opp xchan som begynner med (eller webbie): "
+
+#: ../../Zotlabs/Module/Register.php:113
+msgid "Email address required"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:157
+msgid "No password provided"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:180
+msgid "Terms of Service not accepted"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:242
+msgid "Invitation code succesfully applied"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:262
+msgid "Invitation not in time or too late"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:268
+msgid "Invitation email failed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:276
+msgid "Invitation code failed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:283
+msgid "Invitations are not available"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:293
+msgid "Registration on this hub is by invitation only"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:400
+msgid "New register request"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:418
+msgid "Error creating dId A"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:437
+msgid "Registration on this hub is disabled."
+msgstr "Registrering ved dette nettstedet er skrudd av."
+
+#: ../../Zotlabs/Module/Register.php:446
+msgid "Why do you want to join this hub?"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:446
+msgid "This will help to review your registration"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:447
+msgid "Registration on this hub is by approval only."
+msgstr "Registrering ved dette nettstedet skjer på godkjenning."
+
+#: ../../Zotlabs/Module/Register.php:448
+msgid "Register at another affiliated hub in case when prefered"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:461
+msgid "Registration on this hub is by invitation only."
+msgstr ""
-#: ../../Zotlabs/Module/Item.php:1507
+#: ../../Zotlabs/Module/Register.php:462
+msgid "Register at another affiliated hub"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:476 ../../Zotlabs/Module/Siteinfo.php:29
+msgid "Terms of Service"
+msgstr "Tjenesteavtale"
+
+#: ../../Zotlabs/Module/Register.php:482
#, php-format
-msgid "You have reached your limit of %1$.0f top level posts."
-msgstr "Du har nådd din grense på %1$.0f startinnlegg."
+msgid "I accept the %s for this website"
+msgstr "Jeg godtar %s for dette nettstedet"
-#: ../../Zotlabs/Module/Item.php:1514
+#: ../../Zotlabs/Module/Register.php:489
#, php-format
-msgid "You have reached your limit of %1$.0f webpages."
-msgstr "Du har nådd din grense på %1$.0f websider."
+msgid "I am over %s years of age and accept the %s for this website"
+msgstr "Jeg er mer enn %s år gammel, og godtar %s for dette nettstedet"
-#: ../../Zotlabs/Module/Mitem.php:31 ../../Zotlabs/Module/Menu.php:209
-msgid "Menu not found."
-msgstr "Menyen ble ikke funnet."
+#: ../../Zotlabs/Module/Register.php:499
+msgid "Your email address"
+msgstr "Din e-postadresse"
-#: ../../Zotlabs/Module/Mitem.php:63
-msgid "Unable to create element."
-msgstr "Klarer ikke å lage element."
+#: ../../Zotlabs/Module/Register.php:506
+msgid "Choose a password"
+msgstr "Velg et passord"
-#: ../../Zotlabs/Module/Mitem.php:87
-msgid "Unable to update menu element."
-msgstr "Ikke i stand til å oppdatere menyelement."
+#: ../../Zotlabs/Module/Register.php:507
+msgid "Please re-enter your password"
+msgstr "Vennligst skriv ditt passord en gang til"
-#: ../../Zotlabs/Module/Mitem.php:103
-msgid "Unable to add menu element."
-msgstr "Ikke i stand til å legge til menyelement."
+#: ../../Zotlabs/Module/Register.php:509
+msgid "Please enter your invitation code"
+msgstr "Vennligst skriv din invitasjonskode"
-#: ../../Zotlabs/Module/Mitem.php:134 ../../Zotlabs/Module/Xchan.php:41
-#: ../../Zotlabs/Module/Menu.php:232
-msgid "Not found."
-msgstr "Ikke funnet."
+#: ../../Zotlabs/Module/Register.php:511
+msgid "Your name"
+msgstr "Navn"
-#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
-msgid "Menu Item Permissions"
-msgstr "Menyelement Tillatelser"
+#: ../../Zotlabs/Module/Register.php:511
+msgid "Real name is preferred"
+msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
-msgid "(click to open/close)"
-msgstr "(klikk for å åpne/lukke)"
+#: ../../Zotlabs/Module/Register.php:513
+msgid ""
+"Your nickname will be used to create an easy to remember channel address"
+msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
-msgid "Link Name"
-msgstr "Lenkenavn"
+#: ../../Zotlabs/Module/Register.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:403
+msgid "Registration"
+msgstr "Registrering"
-#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
-msgid "Link or Submenu Target"
-msgstr "Lenke- eller undermeny-mål"
+#: ../../Zotlabs/Module/Register.php:529
+msgid "I have an invite code"
+msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:175
-msgid "Enter URL of the link or select a menu name to create a submenu"
-msgstr "Skriv URL-en til lenken eller velg et menynavn for å lage en undermeny"
+#: ../../Zotlabs/Module/Register.php:576
+msgid ""
+"This site has exceeded the number of allowed daily account registrations."
+msgstr ""
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
-msgid "Use magic-auth if available"
-msgstr "Bruk magic-autent hvis mulig"
+#: ../../Zotlabs/Module/Pubsites.php:27
+msgid "Public Hubs"
+msgstr "Offentlige huber"
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
-msgid "Open link in new window"
-msgstr "Åpne lenke i nytt vindu"
+#: ../../Zotlabs/Module/Pubsites.php:30
+msgid ""
+"The listed hubs allow public registration for the $Projectname network. All "
+"hubs in the network are interlinked so membership on any of them conveys "
+"membership in the network as a whole. Some hubs may require subscription or "
+"provide tiered service plans. The hub itself <strong>may</strong> provide "
+"additional details."
+msgstr ""
+"Nettstedene på listen tillater offentlig registrering i $Projectname-"
+"nettverket. Alle nettsteder i nettverket er forbundet så medlemskap på "
+"enhver av dem formidler medlemskap i nettverket som helhet. Noen nettsteder "
+"kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Nettstedene selv "
+"<strong>kan</strong> gi tilleggsopplysninger."
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Order in list"
-msgstr "Ordne i liste"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Hub URL"
+msgstr "Nettstedets URL"
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Higher numbers will sink to bottom of listing"
-msgstr "Høyere tall vil synke mot bunnen av listen"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Access Type"
+msgstr "Tilgangstype"
-#: ../../Zotlabs/Module/Mitem.php:179
-msgid "Submit and finish"
-msgstr "Send inn og avslutt"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Registration Policy"
+msgstr "Retningslinjer for registrering"
-#: ../../Zotlabs/Module/Mitem.php:180
-msgid "Submit and continue"
-msgstr "Send inn og fortsett"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Stats"
+msgstr "Statistikk"
-#: ../../Zotlabs/Module/Mitem.php:189
-msgid "Menu:"
-msgstr "Meny:"
+#: ../../Zotlabs/Module/Pubsites.php:36
+msgid "Software"
+msgstr "Programvare"
-#: ../../Zotlabs/Module/Mitem.php:192
-msgid "Link Target"
-msgstr "Lenkemål"
+#: ../../Zotlabs/Module/Pubsites.php:38
+msgid "Ratings"
+msgstr "Vurderinger"
-#: ../../Zotlabs/Module/Mitem.php:195
-msgid "Edit menu"
-msgstr "Endre meny"
+#: ../../Zotlabs/Module/Pubsites.php:52
+msgid "Rate"
+msgstr "Vurder"
-#: ../../Zotlabs/Module/Mitem.php:198
-msgid "Edit element"
-msgstr "Endre element"
+#: ../../Zotlabs/Module/Thing.php:139
+msgid "Thing updated"
+msgstr "Tingen er oppdatert"
-#: ../../Zotlabs/Module/Mitem.php:199
-msgid "Drop element"
-msgstr "Slett element"
+#: ../../Zotlabs/Module/Thing.php:191
+msgid "Object store: failed"
+msgstr "Objektlagring: mislyktes"
-#: ../../Zotlabs/Module/Mitem.php:200
-msgid "New element"
-msgstr "Nytt element"
+#: ../../Zotlabs/Module/Thing.php:195
+msgid "Thing added"
+msgstr "Ting lagt til"
-#: ../../Zotlabs/Module/Mitem.php:201
-msgid "Edit this menu container"
-msgstr "Endre denne menybeholderen"
+#: ../../Zotlabs/Module/Thing.php:210
+#, php-format
+msgid "OBJ: %1$s %2$s %3$s"
+msgstr "OBJ: %1$s %2$s %3$s"
-#: ../../Zotlabs/Module/Mitem.php:202
-msgid "Add menu element"
-msgstr "Legg til menyelement"
+#: ../../Zotlabs/Module/Thing.php:277 ../../Zotlabs/Module/Thing.php:301
+msgid "item not found."
+msgstr "element ble ikke funnet."
-#: ../../Zotlabs/Module/Mitem.php:203
-msgid "Delete this menu item"
-msgstr "Slett dette menyelementet"
+#: ../../Zotlabs/Module/Thing.php:336
+msgid "Edit Thing"
+msgstr "Endre ting"
-#: ../../Zotlabs/Module/Mitem.php:204
-msgid "Edit this menu item"
-msgstr "Endre dette menyelementet"
+#: ../../Zotlabs/Module/Thing.php:338 ../../Zotlabs/Module/Thing.php:394
+msgid "Select a profile"
+msgstr "Velg en profil"
-#: ../../Zotlabs/Module/Mitem.php:222
-msgid "Menu item not found."
-msgstr "Menyelement ble ikke funnet."
+#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
+msgid "Post an activity"
+msgstr "Legg inn en aktivitet"
-#: ../../Zotlabs/Module/Mitem.php:235
-msgid "Menu item deleted."
-msgstr "Menyelement slettet."
+#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
+msgid "Only sends to viewers of the applicable profile"
+msgstr "Sender bare til seere av den aktuelle profilen"
-#: ../../Zotlabs/Module/Mitem.php:237
-msgid "Menu item could not be deleted."
-msgstr "Menyelement kunne ikke bli slettet."
+#: ../../Zotlabs/Module/Thing.php:344 ../../Zotlabs/Module/Thing.php:399
+msgid "Name of thing e.g. something"
+msgstr "Navn på ting for eksempel noe"
-#: ../../Zotlabs/Module/Mitem.php:244
-msgid "Edit Menu Element"
-msgstr "Endre menyelement"
+#: ../../Zotlabs/Module/Thing.php:346 ../../Zotlabs/Module/Thing.php:400
+msgid "URL of thing (optional)"
+msgstr "URL til ting (valgfritt)"
-#: ../../Zotlabs/Module/Mitem.php:254
-msgid "Link text"
-msgstr "Lenketekst"
+#: ../../Zotlabs/Module/Thing.php:348 ../../Zotlabs/Module/Thing.php:401
+msgid "URL for photo of thing (optional)"
+msgstr "URL til bilde av ting (valgfritt)"
-#: ../../Zotlabs/Module/Profile.php:106
-msgid "vcard"
+#: ../../Zotlabs/Module/Thing.php:392
+msgid "Add Thing to your Profile"
+msgstr "Legg til ting i din profil"
+
+#: ../../Zotlabs/Module/Home.php:105
+#, php-format
+msgid "Welcome to %s"
+msgstr "Velkommen til %s"
+
+#: ../../Zotlabs/Module/Blocks.php:154
+msgid "Block Title"
+msgstr "Byggeklossens tittel"
+
+#: ../../Zotlabs/Module/Defperms.php:111
+#: ../../Zotlabs/Module/Settings/Channel.php:151
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:163
+#: ../../extend/addon/hzaddons/piwik/piwik.php:116
+#: ../../extend/addon/hzaddons/twitter/twitter.php:493
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:108
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:82
+#: ../../extend/addon/hzaddons/logrot/logrot.php:54
+#: ../../extend/addon/hzaddons/xmpp/xmpp.php:54
+#: ../../extend/addon/hzaddons/faces/faces.php:291
+#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:54
+msgid "Settings updated."
+msgstr "Innstillinger oppdatert."
+
+#: ../../Zotlabs/Module/Defperms.php:252
+msgid "Connection Default Permissions"
+msgstr "Forbindelsens standard tillatelser"
+
+#: ../../Zotlabs/Module/Defperms.php:253
+msgid "Apply these permissions automatically"
+msgstr "Bruk disse tillatelsene automatisk"
+
+#: ../../Zotlabs/Module/Defperms.php:253
+msgid ""
+"If enabled, connection requests will be approved without your interaction"
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:106
-msgid "Files: shared with me"
-msgstr "Filer: delt med meg"
+#: ../../Zotlabs/Module/Defperms.php:254
+msgid "Permission role"
+msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:108
-msgid "NEW"
-msgstr "NY"
+#: ../../Zotlabs/Module/Defperms.php:255
+msgid "Add permission role"
+msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:110
-#: ../../Zotlabs/Storage/Browser.php:383
-msgid "Last Modified"
-msgstr "Sist endret"
+#: ../../Zotlabs/Module/Defperms.php:260
+msgid "Automatic approval settings"
+msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:111
-msgid "Remove all files"
-msgstr "Fjern alle filer"
+#: ../../Zotlabs/Module/Defperms.php:263
+msgid "My Settings"
+msgstr "Mine innstillinger"
-#: ../../Zotlabs/Module/Sharedwithme.php:112
-msgid "Remove this file"
-msgstr "Fjern denne filen"
+#: ../../Zotlabs/Module/Defperms.php:267
+msgid ""
+"Some individual permissions may have been preset or locked based on your "
+"channel type and privacy settings."
+msgstr ""
-#: ../../Zotlabs/Module/Help.php:25
-msgid "Documentation Search"
-msgstr "Søk i dokumentasjon"
+#: ../../Zotlabs/Module/Lostpass.php:19
+msgid "No valid account found."
+msgstr "Ingen gyldig konto funnet."
-#: ../../Zotlabs/Module/Help.php:86
-msgid "Members"
-msgstr "Medlemmer"
+#: ../../Zotlabs/Module/Lostpass.php:33
+msgid "Password reset request issued. Check your email."
+msgstr "Forespørsel om å tilbakestille passord er mottatt. Sjekk e-posten din."
-#: ../../Zotlabs/Module/Help.php:87
-msgid "Administrators"
+#: ../../Zotlabs/Module/Lostpass.php:39 ../../Zotlabs/Module/Lostpass.php:108
+#, php-format
+msgid "Site Member (%s)"
+msgstr "Nettstedsmedlem (%s)"
+
+#: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49
+#, php-format
+msgid "Password reset requested at %s"
+msgstr "Forespurt om å tilbakestille passord hos %s"
+
+#: ../../Zotlabs/Module/Lostpass.php:68
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
msgstr ""
+"Forespørsel kunne ikke bekreftes. (Du kan ha sendt den inn tidligere.) "
+"Tilbakestilling av passord mislyktes."
-#: ../../Zotlabs/Module/Help.php:88
-msgid "Developers"
+#: ../../Zotlabs/Module/Lostpass.php:92
+msgid "Your password has been reset as requested."
+msgstr "Ditt passord har blitt tilbakestilt som forespurt."
+
+#: ../../Zotlabs/Module/Lostpass.php:93
+msgid "Your new password is"
+msgstr "Ditt nye passord er"
+
+#: ../../Zotlabs/Module/Lostpass.php:94
+msgid "Save or copy your new password - and then"
+msgstr "Lagre eller kopier ditt nye passord, og deretter kan du"
+
+#: ../../Zotlabs/Module/Lostpass.php:95
+msgid "click here to login"
+msgstr "klikke her for å logge inn"
+
+#: ../../Zotlabs/Module/Lostpass.php:96
+msgid ""
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
msgstr ""
+"Ditt passord kan endres på siden <em>Innstillinger</em> etter vellykket "
+"innlogging."
-#: ../../Zotlabs/Module/Help.php:89
-msgid "Tutorials"
+#: ../../Zotlabs/Module/Lostpass.php:117
+#, php-format
+msgid "Your password has changed at %s"
+msgstr "Ditt passord er endret hos %s"
+
+#: ../../Zotlabs/Module/Lostpass.php:130
+msgid "Forgot your Password?"
+msgstr "Glemt passord ditt?"
+
+#: ../../Zotlabs/Module/Lostpass.php:131
+msgid ""
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
msgstr ""
+"Skriv e-postadressen din og send inn for å tilbakestille passordet ditt. "
+"Sjekk deretter din e-post for videre instruksjoner."
-#: ../../Zotlabs/Module/Help.php:101
-msgid "$Projectname Documentation"
-msgstr "$Projectname dokumentasjon"
+#: ../../Zotlabs/Module/Lostpass.php:132
+msgid "Email Address"
+msgstr "E-postadresse"
-#: ../../Zotlabs/Module/Help.php:102
-msgid "Contents"
+#: ../../Zotlabs/Module/Lostpass.php:133 ../../Zotlabs/Module/Pdledit.php:76
+#: ../../Zotlabs/Module/Pdledit.php:93
+msgid "Reset"
+msgstr "Tilbakestill"
+
+#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
+msgid "Location not found."
+msgstr "Plassering er ikke funnet."
+
+#: ../../Zotlabs/Module/Locs.php:74
+msgid "Location lookup failed."
+msgstr "Oppslag på plassering mislyktes."
+
+#: ../../Zotlabs/Module/Locs.php:78
+msgid ""
+"Please select another location to become primary before removing the primary "
+"location."
+msgstr ""
+"Vennligst velg en annen plassering som primær før du sletter gjeldende "
+"primære plassering."
+
+#: ../../Zotlabs/Module/Locs.php:106
+msgid "Syncing locations"
+msgstr "Synkroniserer plasseringer"
+
+#: ../../Zotlabs/Module/Locs.php:115
+msgid "No locations found."
+msgstr "Ingen plasseringer ble funnet."
+
+#: ../../Zotlabs/Module/Locs.php:120
+msgid "Manage Channel Locations"
+msgstr "Håndter kanalplasseringer"
+
+#: ../../Zotlabs/Module/Locs.php:123
+#: ../../extend/addon/hzaddons/workflow/workflow.php:288
+msgid "Primary"
+msgstr "Primær"
+
+#: ../../Zotlabs/Module/Locs.php:126
+msgid "Sync Now"
+msgstr "Synkroniser nå"
+
+#: ../../Zotlabs/Module/Locs.php:127
+msgid "Please wait several minutes between consecutive operations."
+msgstr "Vennligst vent flere minutter mellom hver etterfølgende operasjon."
+
+#: ../../Zotlabs/Module/Locs.php:128
+msgid ""
+"When possible, drop a location by logging into that website/hub and removing "
+"your channel."
+msgstr ""
+"Når mulig, fjern en plassering ved å logge inn på det nettstedet eller den "
+"hub-en og fjern din kanal."
+
+#: ../../Zotlabs/Module/Locs.php:129
+msgid "Use this form to drop the location if the hub is no longer operating."
+msgstr ""
+"Bruk dette skjemaet for å fjerne plasseringen hvis huben ikke er i drift "
+"lenger."
+
+#: ../../Zotlabs/Module/Totp_check.php:71
+#: ../../Zotlabs/Module/Admin/Account_edit.php:61
+#, fuzzy
+msgid "Account not found."
+msgstr "Kontoen ble ikke funnet"
+
+#: ../../Zotlabs/Module/Totp_check.php:78
+msgid "Multifactor Verification"
+msgstr ""
+
+#: ../../Zotlabs/Module/Totp_check.php:80
+msgid "Please enter the verification key from your authenticator app"
+msgstr ""
+
+#: ../../Zotlabs/Module/Totp_check.php:81
+msgid "Verify"
+msgstr ""
+
+#: ../../Zotlabs/Module/Page.php:174
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr ""
+"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+
+#: ../../Zotlabs/Module/Vote.php:40
+msgid "Poll not found."
+msgstr "Fant ikke spørreskjema."
+
+#: ../../Zotlabs/Module/Vote.php:69
+msgid "Invalid response."
+msgstr ""
+
+#: ../../Zotlabs/Module/Vote.php:125
+msgid "Response submitted. Updates may not appear instantly."
+msgstr ""
+
+#: ../../Zotlabs/Module/Profile_photo.php:269
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:299
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
+msgstr ""
+"Hold nede Shift-knappen og last siden på nytt eller tøm nettleserens "
+"mellomlager hvis det nye bildet ikke vises umiddelbart."
+
+#: ../../Zotlabs/Module/Profile_photo.php:544
+msgid ""
+"This profile photo will be visible to anybody on the internet and may be "
+"distributed to other websites."
+msgstr ""
+"Dette profilbildet vil være synlig for enhver besøkende, og kan bli gjort tilg"
+"jengelig på andre nettsteder."
+
+#: ../../Zotlabs/Module/Profile_photo.php:544
+msgid ""
+"This profile photo will be visible only to channels with permission to view "
+"this profile."
msgstr ""
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Use Photo for Profile"
+msgstr ""
+
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Change Profile Photo"
+msgstr "Endre profilbilde"
+
+#: ../../Zotlabs/Module/Profile_photo.php:548
+msgid "Reset to default"
+msgstr "Sett tilbake til standard"
+
+#: ../../Zotlabs/Module/Profile_photo.php:562
+msgid "Select existing"
+msgstr "Velg eksisterende bilde"
+
+#: ../../Zotlabs/Module/Profile_photo.php:584
+msgid "Done editing"
+msgstr "Lagre endringer"
+
#: ../../Zotlabs/Module/Webpages.php:67
msgid "Import Webpage Elements"
msgstr ""
@@ -9855,16 +9011,6 @@ msgstr "Sidelenke"
msgid "Page Title"
msgstr "Sidetittel"
-#: ../../Zotlabs/Module/Webpages.php:261 ../../Zotlabs/Module/Blocks.php:155
-#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Layouts.php:189
-msgid "Created"
-msgstr "Laget"
-
-#: ../../Zotlabs/Module/Webpages.php:262 ../../Zotlabs/Module/Blocks.php:156
-#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Layouts.php:190
-msgid "Edited"
-msgstr "Endret"
-
#: ../../Zotlabs/Module/Webpages.php:290
msgid "Invalid file type."
msgstr ""
@@ -9885,61 +9031,146 @@ msgstr ""
msgid "Import complete."
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:14
-#: ../../Zotlabs/Module/Filestorage.php:53
-msgid "Deprecated!"
+#: ../../Zotlabs/Module/Connections.php:58
+#: ../../Zotlabs/Module/Connections.php:116
+msgid "Active"
+msgstr "Aktiv"
+
+#: ../../Zotlabs/Module/Connections.php:63
+#: ../../Zotlabs/Module/Connections.php:185
+#: ../../Zotlabs/Module/Connections.php:296
+msgid "Blocked"
+msgstr "Blokkert"
+
+#: ../../Zotlabs/Module/Connections.php:68
+#: ../../Zotlabs/Module/Connections.php:192
+#: ../../Zotlabs/Module/Connections.php:295
+msgid "Ignored"
+msgstr "Ignorert"
+
+#: ../../Zotlabs/Module/Connections.php:73
+#: ../../Zotlabs/Module/Connections.php:206
+#: ../../Zotlabs/Module/Connections.php:294
+msgid "Hidden"
+msgstr "Skjult"
+
+#: ../../Zotlabs/Module/Connections.php:78
+#: ../../Zotlabs/Module/Connections.php:199
+msgid "Archived/Unreachable"
+msgstr "Arkivert/utilgjengelig"
+
+#: ../../Zotlabs/Module/Connections.php:161
+msgid "Active Connections"
+msgstr "Aktive forbindelser"
+
+#: ../../Zotlabs/Module/Connections.php:164
+msgid "Show active connections"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:157
-msgid "Permission Denied."
-msgstr "Tillatelse avvist."
+#: ../../Zotlabs/Module/Connections.php:168
+#: ../../Zotlabs/Widget/Notifications.php:96
+msgid "New Connections"
+msgstr "Nye forbindelser"
-#: ../../Zotlabs/Module/Filestorage.php:190
-msgid "Edit file permissions"
-msgstr "Endre filtillatelser"
+#: ../../Zotlabs/Module/Connections.php:171
+msgid "Show pending (new) connections"
+msgstr "Vis ventende (nye) forbindelser"
-#: ../../Zotlabs/Module/Filestorage.php:203
-msgid "Include all files and sub folders"
-msgstr "Inkluder alle filer og undermapper"
+#: ../../Zotlabs/Module/Connections.php:188
+msgid "Only show blocked connections"
+msgstr "Vis bare forbindelser som er blokkert"
-#: ../../Zotlabs/Module/Filestorage.php:204
-msgid "Return to file list"
-msgstr "Gå tilbake til filoversikten"
+#: ../../Zotlabs/Module/Connections.php:195
+msgid "Only show ignored connections"
+msgstr "Vis bare ignorerte forbindelser"
-#: ../../Zotlabs/Module/Filestorage.php:206
-#: ../../Zotlabs/Storage/Browser.php:389
-msgid "Copy/paste this code to attach file to a post"
-msgstr "Kopier og lim inn denne koden for å legge til filen i et innlegg"
+#: ../../Zotlabs/Module/Connections.php:202
+msgid "Only show archived/unreachable connections"
+msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:207
-#: ../../Zotlabs/Storage/Browser.php:390
-msgid "Copy/paste this URL to link file from a web page"
-msgstr "Kopier og lim inn denne URL-en for å lenke til filen fra en webside"
+#: ../../Zotlabs/Module/Connections.php:209
+msgid "Only show hidden connections"
+msgstr "Vis bare skjulte forbindelser"
-#: ../../Zotlabs/Module/Filestorage.php:209
-msgid "Share this file"
-msgstr "Del denne filen"
+#: ../../Zotlabs/Module/Connections.php:224
+msgid "Show all connections"
+msgstr "Vis alle forbindelser"
-#: ../../Zotlabs/Module/Filestorage.php:210
-msgid "Show URL to this file"
-msgstr "Vis URLen til denne filen"
+#: ../../Zotlabs/Module/Connections.php:292
+msgid "Pending approval"
+msgstr "Venter på godkjenning"
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Storage/Browser.php:558
-msgid "Show in your contacts shared folder"
+#: ../../Zotlabs/Module/Connections.php:293
+msgid "Archived"
+msgstr "Arkivert"
+
+#: ../../Zotlabs/Module/Connections.php:297
+msgid "Not connected at this location"
msgstr ""
-#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
-msgid "Tag removed"
-msgstr "Merkelapp fjernet"
+#: ../../Zotlabs/Module/Connections.php:336
+#, php-format
+msgid "%1$s [%2$s]"
+msgstr "%1$s [%2$s]"
-#: ../../Zotlabs/Module/Tagrm.php:123
-msgid "Remove Item Tag"
-msgstr "Fjern merkelapp fra element"
+#: ../../Zotlabs/Module/Connections.php:337
+msgid "Edit connection"
+msgstr "Endre forbindelse"
-#: ../../Zotlabs/Module/Tagrm.php:125
-msgid "Select a tag to remove: "
-msgstr "Velg merkelapp å fjerne: "
+#: ../../Zotlabs/Module/Connections.php:339
+msgid "Delete connection"
+msgstr "Slett forbindelse"
+
+#: ../../Zotlabs/Module/Connections.php:345
+msgid "Channel address"
+msgstr "Kanaladresse"
+
+#: ../../Zotlabs/Module/Connections.php:350
+msgid "Call"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connections.php:352
+msgid "Status"
+msgstr "Status"
+
+#: ../../Zotlabs/Module/Connections.php:355
+msgid "Connected"
+msgstr "Forbundet"
+
+#: ../../Zotlabs/Module/Connections.php:357
+#: ../../Zotlabs/Module/Contactedit.php:448
+msgid "Approve connection"
+msgstr "Godkjenn forbindelse"
+
+#: ../../Zotlabs/Module/Connections.php:359
+msgid "Ignore connection"
+msgstr "Ignorer forbindelse"
+
+#: ../../Zotlabs/Module/Connections.php:361
+msgid "Recent activity"
+msgstr "Nylig aktivitet"
+
+#: ../../Zotlabs/Module/Connections.php:367
+msgid "Connect at this location"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connections.php:377 ../../Zotlabs/Widget/Follow.php:27
+#, php-format
+msgid "You have %1$.0f of %2$.0f allowed connections."
+msgstr "Du har %1$.0f av %2$.0f tillate forbindelser."
+
+#: ../../Zotlabs/Module/Connections.php:405
+msgid "Search your connections"
+msgstr "Søk blant dine forbindelser"
+
+#: ../../Zotlabs/Module/Connections.php:406
+msgid "Contact search"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connections.php:413
+#: ../../Zotlabs/Module/Contactedit.php:383
+msgid "This is a group/forum channel"
+msgstr ""
#: ../../Zotlabs/Module/Connect.php:65 ../../Zotlabs/Module/Connect.php:118
msgid "Continue"
@@ -9990,617 +9221,429 @@ msgstr "(Ingen spesifikke instruksjoner er gitt av kanaleieren.)"
msgid "Restricted or Premium Channel"
msgstr "Begrenset kanal eller premiumkanal"
-#: ../../Zotlabs/Module/Share.php:120
-msgid "Post repeated"
-msgstr ""
-
-#: ../../Zotlabs/Module/Acl.php:370
-msgid "network"
-msgstr "nettverk"
-
-#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
-msgid "Item is not editable"
-msgstr "Elementet kan ikke endres"
-
-#: ../../Zotlabs/Module/Editpost.php:113 ../../Zotlabs/Module/Rpost.php:211
-msgid "Edit post"
-msgstr "Endre innlegg"
-
-#: ../../Zotlabs/Module/Tagger.php:50
-msgid "Post not found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Tagger.php:121
-#, php-format
-msgid "%1$s tagged %2$s's %3$s with %4$s"
-msgstr "%1$s merket %3$s til %2$s med %4$s"
-
-#: ../../Zotlabs/Module/Authorize.php:17
-msgid "Unknown App"
-msgstr ""
-
-#: ../../Zotlabs/Module/Authorize.php:29
-msgid "Authorize"
-msgstr ""
-
-#: ../../Zotlabs/Module/Authorize.php:30
-#, php-format
-msgid "Do you authorize the app %s to access your channel data?"
-msgstr ""
-
-#: ../../Zotlabs/Module/Authorize.php:33
-#: ../../Zotlabs/Module/Admin/Accounts.php:319
-msgid "Deny"
-msgstr "Avslå"
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:65
-msgid "Max queueworker threads"
+#: ../../Zotlabs/Module/Affinity.php:35
+msgid "Affinity Tool settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:67
-msgid "Minimum 4, default 4"
+#: ../../Zotlabs/Module/Affinity.php:54
+msgid ""
+"The numbers below represent the minimum and maximum slider default positions "
+"for your network/stream page as a percentage."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:77
-msgid "Assume workers dead after"
+#: ../../Zotlabs/Module/Affinity.php:61
+msgid "Default maximum affinity level"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:79
-msgid "Minimum 120, default 300 seconds"
-msgstr ""
+#: ../../Zotlabs/Module/Affinity.php:61
+#, fuzzy
+msgid "0-99 default 99"
+msgstr "Standard"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:91
-msgid "Pause before starting next task"
+#: ../../Zotlabs/Module/Affinity.php:67
+msgid "Default minimum affinity level"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:93
-msgid "Minimum 100, default 100 microseconds"
-msgstr ""
+#: ../../Zotlabs/Module/Affinity.php:67
+#, fuzzy
+msgid "0-99 - default 0"
+msgstr "Standard"
-#: ../../Zotlabs/Module/Admin/Queueworker.php:102
-msgid "Automatically adjust pause before starting next task"
+#: ../../Zotlabs/Module/Affinity.php:73
+msgid "Persistent affinity levels"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:111
-msgid "Queueworker Settings"
+#: ../../Zotlabs/Module/Affinity.php:73
+msgid ""
+"If disabled the max and min levels will be reset to default after page reload"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:45
-msgid "Queue Statistics"
-msgstr "Køstatistikk"
-
-#: ../../Zotlabs/Module/Admin/Queue.php:46
-msgid "Total Entries"
-msgstr "Totalt antall oppføringer"
-
-#: ../../Zotlabs/Module/Admin/Queue.php:47
-msgid "Priority"
-msgstr "Prioritet"
-
-#: ../../Zotlabs/Module/Admin/Queue.php:48
-msgid "Destination URL"
-msgstr "Mål-URL"
-
-#: ../../Zotlabs/Module/Admin/Queue.php:49
-msgid "Mark hub permanently offline"
-msgstr "Merk hub som permanent offline"
-
-#: ../../Zotlabs/Module/Admin/Queue.php:50
-msgid "Retry delivery to this hub"
+#: ../../Zotlabs/Module/Affinity.php:81
+msgid "Affinity Tool Settings"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:51
-msgid "Empty queue for this hub"
-msgstr "Tøm køen for denne hubben"
-
-#: ../../Zotlabs/Module/Admin/Queue.php:52
-msgid "Last known contact"
-msgstr "Siste kjente kontakt"
-
-#: ../../Zotlabs/Module/Admin/Themes.php:26
-msgid "Theme settings updated."
-msgstr "Temainnstillinger er oppdatert."
+#: ../../Zotlabs/Module/Siteinfo.php:22
+msgid "About this site"
+msgstr "Om dette nettstedet "
-#: ../../Zotlabs/Module/Admin/Themes.php:61
-msgid "No themes found."
-msgstr "Ingen temaer er funnet."
+#: ../../Zotlabs/Module/Siteinfo.php:23
+#, fuzzy
+msgid "Site Name"
+msgstr "Nettstedets navn"
-#: ../../Zotlabs/Module/Admin/Themes.php:95
-#: ../../Zotlabs/Module/Admin/Addons.php:314
-msgid "Disable"
-msgstr "Skru av"
+#: ../../Zotlabs/Module/Siteinfo.php:25 ../../Zotlabs/Module/Admin/Site.php:414
+msgid "Site Information"
+msgstr "Nettstedsinformasjon"
-#: ../../Zotlabs/Module/Admin/Themes.php:97
-#: ../../Zotlabs/Module/Admin/Addons.php:317
-msgid "Enable"
-msgstr "Skru på"
+#: ../../Zotlabs/Module/Siteinfo.php:27
+msgid "Administrator"
+msgstr "Administrator"
-#: ../../Zotlabs/Module/Admin/Themes.php:116
-msgid "Screenshot"
-msgstr "Skjermbilde"
+#: ../../Zotlabs/Module/Siteinfo.php:30
+msgid "Software and Project information"
+msgstr "Program- og prosjektinformasjon"
-#: ../../Zotlabs/Module/Admin/Themes.php:122
-#: ../../Zotlabs/Module/Admin/Themes.php:156
-#: ../../Zotlabs/Module/Admin/Security.php:105
-#: ../../Zotlabs/Module/Admin/Accounts.php:307
-#: ../../Zotlabs/Module/Admin/Site.php:411
-#: ../../Zotlabs/Module/Admin/Logs.php:82
-#: ../../Zotlabs/Module/Admin/Channels.php:145
-#: ../../Zotlabs/Module/Admin/Addons.php:345
-#: ../../Zotlabs/Module/Admin/Addons.php:443 ../../Zotlabs/Module/Admin.php:140
-msgid "Administration"
-msgstr "Administrasjon"
+#: ../../Zotlabs/Module/Siteinfo.php:31
+msgid "This site is powered by $Projectname"
+msgstr "Dette nettstedet drives av $Projectname"
-#: ../../Zotlabs/Module/Admin/Themes.php:124
-#: ../../Zotlabs/Module/Admin/Addons.php:347
-msgid "Toggle"
-msgstr "Skru av og på"
+#: ../../Zotlabs/Module/Siteinfo.php:32
+#, fuzzy
+#| msgid ""
+#| "Federated and decentralised networking and identity services provided by "
+#| "Zot"
+msgid ""
+"Federated and decentralised networking and identity services provided by"
+msgstr "Fødererte og desentraliserte nettverks- og identitetstjenester via Zot"
-#: ../../Zotlabs/Module/Admin/Themes.php:134
-#: ../../Zotlabs/Module/Admin/Addons.php:355
-msgid "Author: "
-msgstr "Forfatter: "
+#: ../../Zotlabs/Module/Siteinfo.php:35
+msgid "Additional federated transport protocols:"
+msgstr "Øvrige fødererte transportprotokoller:"
-#: ../../Zotlabs/Module/Admin/Themes.php:135
-#: ../../Zotlabs/Module/Admin/Addons.php:356
-msgid "Maintainer: "
-msgstr "Vedlikeholder: "
+#: ../../Zotlabs/Module/Siteinfo.php:37
+#, php-format
+msgid "Version %s"
+msgstr "Versjon %s"
-#: ../../Zotlabs/Module/Admin/Themes.php:162
-msgid "[Experimental]"
-msgstr "[Eksperimentelt]"
+#: ../../Zotlabs/Module/Siteinfo.php:38
+msgid "Project homepage"
+msgstr "Prosjektets hjemmeside"
-#: ../../Zotlabs/Module/Admin/Themes.php:163
-msgid "[Unsupported]"
-msgstr "[Ingen støtte]"
+#: ../../Zotlabs/Module/Siteinfo.php:39
+msgid "Developer homepage"
+msgstr "Utviklers hjemmeside"
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#, php-format
-msgid "Lock feature %s"
-msgstr "Lås funksjon %s"
+#: ../../Zotlabs/Module/Siteinfo.php:42 ../../Zotlabs/Module/Admin.php:149
+msgid "Active addons"
+msgstr "Aktive tillegg"
-#: ../../Zotlabs/Module/Admin/Features.php:64
-msgid "Manage Additional Features"
-msgstr "Håndter tilleggsfunksjoner"
+#: ../../Zotlabs/Module/Siteinfo.php:43
+#, fuzzy
+#| msgid "Block Title"
+msgid "Blocked sites"
+msgstr "Byggeklossens tittel"
-#: ../../Zotlabs/Module/Admin/Security.php:96
-msgid ""
-"By default, unfiltered HTML is allowed in embedded media. This is inherently "
-"insecure."
+#: ../../Zotlabs/Module/Import_progress.php:40
+msgid "Item sync completed!"
msgstr ""
-"Ufiltrert HTML er i utgangspunktet tillatt i innebygde media. Dette er en "
-"sikkerhetsrisiko."
-#: ../../Zotlabs/Module/Admin/Security.php:99
-msgid ""
-"The recommended setting is to only allow unfiltered HTML from the following "
-"sites:"
+#: ../../Zotlabs/Module/Import_progress.php:62
+#: ../../Zotlabs/Module/Import_progress.php:111
+msgid "Import host does not seem to be online or compatible"
msgstr ""
-"Det anbefales at man kun tillater ufiltrert HTML fra følgende nettsteder:"
-#: ../../Zotlabs/Module/Admin/Security.php:100
-msgid ""
-"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
-"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
+#: ../../Zotlabs/Module/Import_progress.php:73
+msgid "Item sync completed but no items were found!"
msgstr ""
-"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
-"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
-#: ../../Zotlabs/Module/Admin/Security.php:101
-msgid ""
-"All other embedded content will be filtered, <strong>unless</strong> "
-"embedded content from that site is explicitly blocked."
+#: ../../Zotlabs/Module/Import_progress.php:90
+msgid "File sync completed!"
msgstr ""
-"Alt annet innebygget innhold vil bli filtrert, <strong>med mindre</strong> "
-"innebygget innhold fra den aktuelle siden eksplisitt er blokkert."
-#: ../../Zotlabs/Module/Admin/Security.php:108
-msgid "Block public"
-msgstr "Blokker offentlig tilgang"
-
-#: ../../Zotlabs/Module/Admin/Security.php:108
-msgid ""
-"Check to block public access to all otherwise public personal pages on this "
-"site unless you are currently authenticated."
+#: ../../Zotlabs/Module/Import_progress.php:122
+msgid "File sync completed but no files were found!"
msgstr ""
-"Kryss av for å blokkere tilgang til alle personlige sider som ellers ville "
-"vært offentlig tilgjengelige på dette nettstedet med mindre du er logget inn."
-#: ../../Zotlabs/Module/Admin/Security.php:109
-msgid "Provide a cloud root directory"
+#: ../../Zotlabs/Module/Import_progress.php:137
+msgid "Channel clone status"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:109
-msgid ""
-"The cloud root directory lists all channel names which provide public files"
+#: ../../Zotlabs/Module/Import_progress.php:138
+msgid "Item sync status"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:110
-msgid "Show total disk space available to cloud uploads"
+#: ../../Zotlabs/Module/Import_progress.php:139
+msgid "File sync status"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:111
-msgid "Set \"Transport Security\" HTTP header"
-msgstr "Slå på \"Transport Security\" i HTTP meldingshodet"
-
-#: ../../Zotlabs/Module/Admin/Security.php:112
-msgid "Set \"Content Security Policy\" HTTP header"
-msgstr "Sett \"Content Security Policy\" i HTTP meldingshodet"
-
-#: ../../Zotlabs/Module/Admin/Security.php:113
-msgid "Allowed email domains"
-msgstr "Tillate e-postdomener"
-
-#: ../../Zotlabs/Module/Admin/Security.php:113
-msgid ""
-"Comma separated list of domains which are allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains"
+#: ../../Zotlabs/Module/Import_progress.php:146
+msgid "Channel cloning completed!"
msgstr ""
-"Kommaseparert liste med domener som er tillatt i e-postadresser ved "
-"registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle "
-"domener er tillatt"
-
-#: ../../Zotlabs/Module/Admin/Security.php:114
-msgid "Not allowed email domains"
-msgstr "Ikke tillatte e-postdomener"
-#: ../../Zotlabs/Module/Admin/Security.php:114
-msgid ""
-"Comma separated list of domains which are not allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains, unless allowed domains have been defined."
+#: ../../Zotlabs/Module/Import_progress.php:147
+msgid "Resume"
msgstr ""
-"Kommaseparert liste med domener som ikke er tillatt i e-postadresser ved "
-"registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle "
-"domener er tillatt, med mindre tillate domener er blitt definert."
-#: ../../Zotlabs/Module/Admin/Security.php:115
-msgid "Allow communications only from these sites"
-msgstr "Tillat kommunikasjon med bare disse nettstedene"
-
-#: ../../Zotlabs/Module/Admin/Security.php:115
-msgid ""
-"One site per line. Leave empty to allow communication from anywhere by "
-"default"
+#: ../../Zotlabs/Module/Import_progress.php:148
+msgid "Only resume if sync stalled!"
msgstr ""
-"Et nettsted per linje. La det stå tomt for å tillate kommunikasjon med "
-"ethvert nettsted som standard"
-#: ../../Zotlabs/Module/Admin/Security.php:116
-msgid "Block communications from these sites"
-msgstr "Blokker kommunikasjon fra disse nettstedene"
+#: ../../Zotlabs/Module/Dirsearch.php:24 ../../Zotlabs/Module/Regdir.php:53
+msgid "This site is not a directory server"
+msgstr "Dette nettstedet er ikke en katalogtjener"
-#: ../../Zotlabs/Module/Admin/Security.php:117
-msgid "Allow communications only from these channels"
-msgstr "Tillat kommunikasjon med bare disse kanalene"
+#: ../../Zotlabs/Module/Dirsearch.php:32
+msgid "This directory server requires an access token"
+msgstr "Denne katalogtjeneren krever en tilgangsnøkkel (access token)"
-#: ../../Zotlabs/Module/Admin/Security.php:117
-msgid ""
-"One channel (hash) per line. Leave empty to allow from any channel by default"
+#: ../../Zotlabs/Module/Filestorage.php:14
+#: ../../Zotlabs/Module/Filestorage.php:53
+msgid "Deprecated!"
msgstr ""
-"En kanal (hash) per linje. La det stå tomt for å tillate enhver kanal som "
-"standard"
-#: ../../Zotlabs/Module/Admin/Security.php:118
-msgid "Block communications from these channels"
-msgstr "Blokker kommunikasjon fra disse kanalene"
+#: ../../Zotlabs/Module/Filestorage.php:109
+#: ../../Zotlabs/Module/Attach_edit.php:69
+msgid "File not found."
+msgstr "Filen ble ikke funnet."
-#: ../../Zotlabs/Module/Admin/Security.php:119
-msgid "Only allow embeds from secure (SSL) websites and links."
-msgstr "Kun tillat innebygget innhold fra sikre (HTTPS) nettsteder og lenker."
+#: ../../Zotlabs/Module/Filestorage.php:157
+msgid "Permission Denied."
+msgstr "Tillatelse avvist."
-#: ../../Zotlabs/Module/Admin/Security.php:120
-msgid "Allow unfiltered embedded HTML content only from these domains"
-msgstr "Kun tillat ufiltrert innebygget innhold fra disse domenene"
+#: ../../Zotlabs/Module/Filestorage.php:190
+msgid "Edit file permissions"
+msgstr "Endre filtillatelser"
-#: ../../Zotlabs/Module/Admin/Security.php:120
-msgid "One site per line. By default embedded content is filtered."
-msgstr ""
-"Ett nettsted pr. linje. Innebygget innhold er filtrert i utgangsounktet."
+#: ../../Zotlabs/Module/Filestorage.php:202
+#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:268
+msgid "Set/edit permissions"
+msgstr "Angi/endre tillatelser"
-#: ../../Zotlabs/Module/Admin/Security.php:121
-msgid "Block embedded HTML from these domains"
-msgstr "Blokker innbygget HTML fra disse domenene"
+#: ../../Zotlabs/Module/Filestorage.php:203
+msgid "Include all files and sub folders"
+msgstr "Inkluder alle filer og undermapper"
-#: ../../Zotlabs/Module/Admin/Security.php:122
-msgid "Allow SVG thumbnails in file browser"
-msgstr ""
+#: ../../Zotlabs/Module/Filestorage.php:204
+msgid "Return to file list"
+msgstr "Gå tilbake til filoversikten"
-#: ../../Zotlabs/Module/Admin/Security.php:122
-msgid "WARNING: SVG images may contain malicious code."
-msgstr ""
+#: ../../Zotlabs/Module/Filestorage.php:209
+msgid "Share this file"
+msgstr "Del denne filen"
-#: ../../Zotlabs/Module/Admin/Security.php:123
-msgid "Allow embedded (inline) PDF files"
-msgstr ""
+#: ../../Zotlabs/Module/Filestorage.php:210
+msgid "Show URL to this file"
+msgstr "Vis URLen til denne filen"
-#: ../../Zotlabs/Module/Admin/Security.php:125
+#: ../../Zotlabs/Module/Pdledit_gui.php:119
#, fuzzy
-#| msgid "Default directory server"
-msgid "Additional trusted directory server URLs"
-msgstr "Standard katalogtjener"
-
-#: ../../Zotlabs/Module/Admin/Security.php:125
-msgid ""
-"Accept directory flags (spam, nsfw) from those servers. One per line like "
-"https://example.tld"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:128
-#, php-format
-msgid "%s account blocked/unblocked"
-msgid_plural "%s account blocked/unblocked"
-msgstr[0] "%s konto blokkert/ikke blokkert lenger"
-msgstr[1] "%s kontoer blokkert/ikke blokkert lenger"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:135
-#, php-format
-msgid "%s account deleted"
-msgid_plural "%s accounts deleted"
-msgstr[0] "%s konto slettet"
-msgstr[1] "%s kontoer slettet"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:171
-msgid "Account not found"
-msgstr "Kontoen ble ikke funnet"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:192
-#, php-format
-msgid "Account '%s' blocked"
-msgstr "Kontoen '%s' blokkert"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:200
-#, php-format
-msgid "Account '%s' unblocked"
-msgstr "Kontoen '%s' er ikke blokkert lenger"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:240
-msgid "Unverified"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:243
-msgid "Expired"
-msgstr ""
+msgid "Layout not found"
+msgstr "Layouten ble ikke funnet."
-#: ../../Zotlabs/Module/Admin/Accounts.php:310
-msgid "Show verified registrations"
+#: ../../Zotlabs/Module/Pdledit_gui.php:127
+msgid "This template does not support pdledi_gui (no content regions defined)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:310
-msgid "Show all registrations"
+#: ../../Zotlabs/Module/Pdledit_gui.php:404
+msgid "Main page content"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:312
-msgid "Select toggle"
+#: ../../Zotlabs/Module/Pdledit_gui.php:405
+msgid "The main page content can not be edited!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:313
-msgid "Deny selected"
-msgstr ""
+#: ../../Zotlabs/Module/Pdledit.php:27
+msgid "Layout updated."
+msgstr "Layout er oppdatert."
-#: ../../Zotlabs/Module/Admin/Accounts.php:314
-msgid "Approve selected"
-msgstr ""
+#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129
+msgid "Edit System Page Description"
+msgstr "Endre beskrivelsen av systemsiden"
-#: ../../Zotlabs/Module/Admin/Accounts.php:315
-msgid "All registrations"
-msgstr ""
+#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93
+msgid "(modified)"
+msgstr "(endret)"
-#: ../../Zotlabs/Module/Admin/Accounts.php:315
-msgid "Verified registrations waiting for approval"
-msgstr ""
+#: ../../Zotlabs/Module/Pdledit.php:124
+msgid "Layout not found."
+msgstr "Layouten ble ikke funnet."
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-msgid "Request date"
-msgstr "Dato for forespørsel"
+#: ../../Zotlabs/Module/Pdledit.php:130
+msgid "Module Name:"
+msgstr "Modulnavn:"
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-msgid "Requests"
-msgstr ""
+#: ../../Zotlabs/Module/Pdledit.php:131
+msgid "Layout Help"
+msgstr "Layout-hjelp"
-#: ../../Zotlabs/Module/Admin/Accounts.php:317
-msgid "No registrations available"
+#: ../../Zotlabs/Module/Pdledit.php:132
+msgid "Edit another layout"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:317
-msgid "No verified registrations available"
+#: ../../Zotlabs/Module/Pdledit.php:133
+msgid "System layout"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:321
-#: ../../Zotlabs/Module/Contactedit.php:639
-#: ../../Zotlabs/Module/Connedit.php:508
-msgid "Block"
-msgstr "Blokker"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:322
-#: ../../Zotlabs/Module/Contactedit.php:639
-#: ../../Zotlabs/Module/Connedit.php:508
-msgid "Unblock"
-msgstr "Ikke blokker lenger"
+#: ../../Zotlabs/Module/Moderate.php:70
+#, fuzzy
+#| msgid "Account approved."
+msgid "Item approved"
+msgstr "Konto godkjent."
-#: ../../Zotlabs/Module/Admin/Accounts.php:323
-msgid "Verified"
+#: ../../Zotlabs/Module/Removeaccount.php:35
+msgid ""
+"Account removals are not allowed within 48 hours of changing the account "
+"password."
msgstr ""
+"Sletting av kontoer er ikke tillatt innen 48 timer etter endring av "
+"kontopassordet."
-#: ../../Zotlabs/Module/Admin/Accounts.php:324
-msgid "Not yet verified"
-msgstr ""
+#: ../../Zotlabs/Module/Removeaccount.php:57
+msgid "Remove This Account"
+msgstr "Slett denne kontoen"
-#: ../../Zotlabs/Module/Admin/Accounts.php:329
-msgid "ID"
-msgstr "ID"
+#: ../../Zotlabs/Module/Removeaccount.php:58
+#: ../../Zotlabs/Module/Removeme.php:61 ../../Zotlabs/Module/Changeaddr.php:78
+msgid "WARNING: "
+msgstr "ADVARSEL: "
-#: ../../Zotlabs/Module/Admin/Accounts.php:331
-msgid "All channels"
+#: ../../Zotlabs/Module/Removeaccount.php:58
+msgid ""
+"This account and all its channels will be completely removed from the "
+"network. "
msgstr ""
+"Denne kontoen og alle dens kanaler vil bli fullstendig fjernet fra "
+"nettverket. "
-#: ../../Zotlabs/Module/Admin/Accounts.php:332
-msgid "Register date"
-msgstr "Registreringsdato"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:333
-msgid "Last login"
-msgstr "Siste innlogging"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:334
-msgid "Expires"
-msgstr "Utløper"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:335
-#: ../../Zotlabs/Module/Admin/Account_edit.php:72
-msgid "Service class"
-msgstr ""
+#: ../../Zotlabs/Module/Removeaccount.php:58
+msgid "This action is permanent and can not be undone!"
+msgstr "Denne handlingen er permanent og kan ikke angres!"
-#: ../../Zotlabs/Module/Admin/Accounts.php:337
-msgid ""
-"Selected accounts will be deleted!\\n\\nEverything these accounts had posted "
-"on this site will be permanently deleted!\\n\\nAre you sure?"
-msgstr ""
-"Valgte kontoer vil bli slettet!\\n\\nAlt disse kontoene har lagt inn på "
-"dette nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil "
-"slette disse valgte kontoene?"
+#: ../../Zotlabs/Module/Removeaccount.php:59
+#: ../../Zotlabs/Module/Removeme.php:62 ../../Zotlabs/Module/Changeaddr.php:79
+msgid "Please enter your password for verification:"
+msgstr "Vennligst skriv ditt passord for å få bekreftelse:"
-#: ../../Zotlabs/Module/Admin/Accounts.php:338
-msgid ""
-"The account {0} will be deleted!\\n\\nEverything this account has posted on "
-"this site will be permanently deleted!\\n\\nAre you sure?"
-msgstr ""
-"Kontoen {0} vl bli slettet!\\n\\nAlt denne kontoen har lagt inn på dette "
-"nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil slette "
-"denne kontoen?"
+#: ../../Zotlabs/Module/Removeaccount.php:61
+#: ../../Zotlabs/Module/Settings/Account.php:113
+msgid "Remove Account"
+msgstr "Slett konto"
-#: ../../Zotlabs/Module/Admin/Accounts.php:347
-msgid "Message"
-msgstr "Melding"
+#: ../../Zotlabs/Module/Regmod.php:15
+msgid "Please login."
+msgstr "Vennligst logg inn."
-#: ../../Zotlabs/Module/Admin/Site.php:111
+#: ../../Zotlabs/Module/Admin/Site.php:112
msgid "Invalid input"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:131
+#: ../../Zotlabs/Module/Admin/Site.php:132
msgid "Errors"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:219
+#: ../../Zotlabs/Module/Admin/Site.php:220
msgid "Site settings updated."
msgstr "Nettstedsinnstillinger er oppdatert."
-#: ../../Zotlabs/Module/Admin/Site.php:256
-#: ../../Zotlabs/Module/Settings/Display.php:116
+#: ../../Zotlabs/Module/Admin/Site.php:243
+#: ../../Zotlabs/Module/Settings/Display.php:117
#, php-format
msgid "%s - (Incompatible)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:263
+#: ../../Zotlabs/Module/Admin/Site.php:250
msgid "mobile"
msgstr "mobil"
-#: ../../Zotlabs/Module/Admin/Site.php:265
+#: ../../Zotlabs/Module/Admin/Site.php:252
msgid "experimental"
msgstr "eksperimentell"
-#: ../../Zotlabs/Module/Admin/Site.php:267
+#: ../../Zotlabs/Module/Admin/Site.php:254
msgid "unsupported"
msgstr "ikke støttet"
-#: ../../Zotlabs/Module/Admin/Site.php:320
+#: ../../Zotlabs/Module/Admin/Site.php:307
msgid "Yes - with approval"
msgstr "Ja - med godkjenning"
-#: ../../Zotlabs/Module/Admin/Site.php:328
+#: ../../Zotlabs/Module/Admin/Site.php:315
msgid "My site is not a public server"
msgstr "Mitt nettsted er ikke en offentlig tjeneste"
-#: ../../Zotlabs/Module/Admin/Site.php:329
+#: ../../Zotlabs/Module/Admin/Site.php:316
msgid "My site has paid access only"
msgstr "Mitt nettsted gir kun tilgang mot betaling"
-#: ../../Zotlabs/Module/Admin/Site.php:330
+#: ../../Zotlabs/Module/Admin/Site.php:317
msgid "My site has free access only"
msgstr "Mitt nettsted har kun gratis tilgang"
-#: ../../Zotlabs/Module/Admin/Site.php:331
+#: ../../Zotlabs/Module/Admin/Site.php:318
msgid "My site offers free accounts with optional paid upgrades"
msgstr ""
"Mitt nettsted tilbyr gratis konto med valgfri oppgradering til betalt "
"tjeneste"
-#: ../../Zotlabs/Module/Admin/Site.php:349
+#: ../../Zotlabs/Module/Admin/Site.php:336
msgid "Default permission role for new accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:349
+#: ../../Zotlabs/Module/Admin/Site.php:336
msgid ""
"This role will be used for the first channel created after registration."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:356 ../../Zotlabs/Module/Invite.php:410
-msgid "Minute(s)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:357 ../../Zotlabs/Module/Invite.php:411
-msgid "Hour(s)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:358 ../../Zotlabs/Module/Invite.php:412
-msgid "Day(s)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:359
+#: ../../Zotlabs/Module/Admin/Site.php:346
msgid "Week(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:360
+#: ../../Zotlabs/Module/Admin/Site.php:347
msgid "Month(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:361
+#: ../../Zotlabs/Module/Admin/Site.php:348
msgid "Year(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:369
+#: ../../Zotlabs/Module/Admin/Site.php:356
msgid "Register verification delay"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:372
+#: ../../Zotlabs/Module/Admin/Site.php:359
msgid "Time to wait before a registration can be verified"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:375
-#: ../../Zotlabs/Module/Admin/Site.php:397 ../../Zotlabs/Module/Invite.php:421
-msgid "duration up from now"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Site.php:391
+#: ../../Zotlabs/Module/Admin/Site.php:378
msgid "Register verification expiration time"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:394
+#: ../../Zotlabs/Module/Admin/Site.php:381
msgid "Time before an unverified registration will expire"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:417
+#: ../../Zotlabs/Module/Admin/Site.php:398
+#: ../../Zotlabs/Module/Admin/Accounts.php:307
+#: ../../Zotlabs/Module/Admin/Security.php:106
+#: ../../Zotlabs/Module/Admin/Channels.php:167
+#: ../../Zotlabs/Module/Admin/Addons.php:346
+#: ../../Zotlabs/Module/Admin/Addons.php:444
+#: ../../Zotlabs/Module/Admin/Themes.php:138
+#: ../../Zotlabs/Module/Admin/Themes.php:172
+#: ../../Zotlabs/Module/Admin/Logs.php:83 ../../Zotlabs/Module/Admin.php:142
+msgid "Administration"
+msgstr "Administrasjon"
+
+#: ../../Zotlabs/Module/Admin/Site.php:401 ../../Zotlabs/Widget/Admin.php:27
+msgid "Site"
+msgstr "Nettsted"
+
+#: ../../Zotlabs/Module/Admin/Site.php:404
msgid "File upload"
msgstr "Last opp fil"
-#: ../../Zotlabs/Module/Admin/Site.php:418
+#: ../../Zotlabs/Module/Admin/Site.php:405
msgid "Policies"
msgstr "Retningslinjer"
-#: ../../Zotlabs/Module/Admin/Site.php:425
+#: ../../Zotlabs/Module/Admin/Site.php:410
+#: ../../extend/addon/hzaddons/statusnet/statusnet.php:593
+msgid "Site name"
+msgstr "Nettstedets navn"
+
+#: ../../Zotlabs/Module/Admin/Site.php:412
msgid "Banner/Logo"
msgstr "Banner/Logo"
-#: ../../Zotlabs/Module/Admin/Site.php:425
+#: ../../Zotlabs/Module/Admin/Site.php:412
msgid "Unfiltered HTML/CSS/JS is allowed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:426
+#: ../../Zotlabs/Module/Admin/Site.php:413
msgid "Administrator Information"
msgstr "Administratorinformasjon"
-#: ../../Zotlabs/Module/Admin/Site.php:426
+#: ../../Zotlabs/Module/Admin/Site.php:413
msgid ""
"Contact information for site administrators. Displayed on siteinfo page. "
"BBCode can be used here"
@@ -10608,21 +9651,17 @@ msgstr ""
"Kontaktinformasjon til nettstedsadministratorer. Vises på siteinfo-siden. "
"BBCode kan brukes her"
-#: ../../Zotlabs/Module/Admin/Site.php:427 ../../Zotlabs/Module/Siteinfo.php:24
-msgid "Site Information"
-msgstr "Nettstedsinformasjon"
-
-#: ../../Zotlabs/Module/Admin/Site.php:427
+#: ../../Zotlabs/Module/Admin/Site.php:414
msgid ""
"Publicly visible description of this site. Displayed on siteinfo page. "
"BBCode can be used here"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:429
+#: ../../Zotlabs/Module/Admin/Site.php:415
msgid "System theme"
msgstr "Systemtema"
-#: ../../Zotlabs/Module/Admin/Site.php:429
+#: ../../Zotlabs/Module/Admin/Site.php:415
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
@@ -10630,19 +9669,19 @@ msgstr ""
"Standard systemtema - kan overstyres av brukerprofiler - <a href='#' "
"id='cnftheme'>endre temainnstillinger</a>"
-#: ../../Zotlabs/Module/Admin/Site.php:432
+#: ../../Zotlabs/Module/Admin/Site.php:418
msgid "Allow Feeds as Connections"
msgstr "Tillat strømmer som forbindelser"
-#: ../../Zotlabs/Module/Admin/Site.php:432
+#: ../../Zotlabs/Module/Admin/Site.php:418
msgid "(Heavy system resource usage)"
msgstr "(Tung bruk av systemressurser)"
-#: ../../Zotlabs/Module/Admin/Site.php:433
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid "Maximum image size"
msgstr "Største bildestørrelse"
-#: ../../Zotlabs/Module/Admin/Site.php:433
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
@@ -10650,122 +9689,122 @@ msgstr ""
"Største størrelse i bytes for opplastede bilder. Standard er 0, som betyr "
"ubegrenset."
-#: ../../Zotlabs/Module/Admin/Site.php:434
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid "Minimum age"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:434
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid "Minimum age (in years) for who may register on this site."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:435
+#: ../../Zotlabs/Module/Admin/Site.php:421
msgid "Which best describes the types of account offered by this hub?"
msgstr ""
"Hvilket alternativ beskriver best hva slags kontotype som tilbys av dette "
"nettstedet/denne hubben?"
-#: ../../Zotlabs/Module/Admin/Site.php:435
+#: ../../Zotlabs/Module/Admin/Site.php:421
msgid "This is displayed on the public server site list."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:441
+#: ../../Zotlabs/Module/Admin/Site.php:427
msgid "Register text"
msgstr "Registreringstekst"
-#: ../../Zotlabs/Module/Admin/Site.php:443
+#: ../../Zotlabs/Module/Admin/Site.php:429
msgid "This text will be displayed prominently at the registration page"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:447
+#: ../../Zotlabs/Module/Admin/Site.php:433
msgid "Does this site allow new member registration?"
msgstr "Tillater dette nettstedet registrering av nye medlemmer?"
-#: ../../Zotlabs/Module/Admin/Site.php:454
+#: ../../Zotlabs/Module/Admin/Site.php:440
msgid "Configure the registration open days/hours"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:456
+#: ../../Zotlabs/Module/Admin/Site.php:442
msgid "Empty or '-:-' value will keep registration open 24/7 (default)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:457
+#: ../../Zotlabs/Module/Admin/Site.php:443
msgid ""
"Weekdays and hours must be separated by colon ':', From-To ranges with a "
"dash `-` example: 1:800-1200"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:458
+#: ../../Zotlabs/Module/Admin/Site.php:444
msgid ""
"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 "
"2:900-1700"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:459
+#: ../../Zotlabs/Module/Admin/Site.php:445
msgid ""
"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 "
"or 1-2,4-5:900-1700"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:460
+#: ../../Zotlabs/Module/Admin/Site.php:446
msgid "Advanced examples:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:460
-#: ../../Zotlabs/Module/Settings/Channel.php:183
+#: ../../Zotlabs/Module/Admin/Site.php:446
+#: ../../Zotlabs/Module/Settings/Channel.php:184
msgid "or"
msgstr "eller"
-#: ../../Zotlabs/Module/Admin/Site.php:461
+#: ../../Zotlabs/Module/Admin/Site.php:447
msgid "Check your configuration"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:465
+#: ../../Zotlabs/Module/Admin/Site.php:451
msgid "Max account registrations per day"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:467
+#: ../../Zotlabs/Module/Admin/Site.php:453
msgid "Unlimited if zero or no value - default 50"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:471
+#: ../../Zotlabs/Module/Admin/Site.php:457
msgid "Max account registrations from same IP"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:473
+#: ../../Zotlabs/Module/Admin/Site.php:459
msgid "Unlimited if zero or no value - default 3"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:479
+#: ../../Zotlabs/Module/Admin/Site.php:465
msgid "Auto channel create"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:481
+#: ../../Zotlabs/Module/Admin/Site.php:467
msgid ""
"If disabled the channel will be created in a separate step during the "
"registration process"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:485
+#: ../../Zotlabs/Module/Admin/Site.php:471
msgid "Require invite code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:490
+#: ../../Zotlabs/Module/Admin/Site.php:476
msgid "Allow invite code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:495
+#: ../../Zotlabs/Module/Admin/Site.php:481
msgid "Require email address"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:497
+#: ../../Zotlabs/Module/Admin/Site.php:483
msgid "The provided email address will be verified (recommended)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:501
+#: ../../Zotlabs/Module/Admin/Site.php:487
msgid "Abandon account after x days"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:503
+#: ../../Zotlabs/Module/Admin/Site.php:489
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
@@ -10773,22 +9812,22 @@ msgstr ""
"Vil ikke kaste bort systemressurser på å spørre eksterne nettsteder etter "
"forlatte kontoer. Skriv 0 for å ikke sette noen tidsgrense."
-#: ../../Zotlabs/Module/Admin/Site.php:508
+#: ../../Zotlabs/Module/Admin/Site.php:494
msgid "Site homepage to show visitors (default: login box)"
msgstr ""
"Nettstedets hjemmeside som vises til besøkende (standard: innloggingsboks)"
-#: ../../Zotlabs/Module/Admin/Site.php:508
+#: ../../Zotlabs/Module/Admin/Site.php:494
msgid ""
"example: 'pubstream' to show public stream, 'page/sys/home' to show a system "
"webpage called 'home' or 'include:home.html' to include a file."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:509
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid "Preserve site homepage URL"
msgstr "Bevar URL-en til nettstedets hjemmeside"
-#: ../../Zotlabs/Module/Admin/Site.php:509
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid ""
"Present the site homepage in a frame at the original location instead of "
"redirecting"
@@ -10796,11 +9835,11 @@ msgstr ""
"Presenter hjemmesiden til nettstedet i en ramme fra den opprinnelige "
"plasseringen i stedet for å omdirigere"
-#: ../../Zotlabs/Module/Admin/Site.php:510
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid "Allowed friend domains"
msgstr "Tillatte vennedomener"
-#: ../../Zotlabs/Module/Admin/Site.php:510
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
@@ -10808,11 +9847,11 @@ msgstr ""
"Kommaseparert liste over domener som har lov til å etablere vennskap med "
"dette nettstedet. Jokertegn er akseptert. Tøm for å tillate alle domener"
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:497
msgid "Force publish"
msgstr "Tving publisering"
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:497
#, fuzzy
#| msgid ""
#| "Check to force all profiles on this site to be listed in the site "
@@ -10823,11 +9862,11 @@ msgstr ""
"Kryss av for å tvinge alle profiler på dette nettstedet til å bli oppført i "
"nettstedet sin katalog."
-#: ../../Zotlabs/Module/Admin/Site.php:512
+#: ../../Zotlabs/Module/Admin/Site.php:498
msgid "Enable public stream"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:512
+#: ../../Zotlabs/Module/Admin/Site.php:498
#, fuzzy
#| msgid ""
#| "Import and allow access to public content pulled from other sites. "
@@ -10837,49 +9876,37 @@ msgstr ""
"Importer og gi tilgang til offentlig innhold trukket inn fra andre "
"nettsteder. Advarsel: dette innholdet er ikke moderert."
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:499
#, fuzzy
#| msgid "My site is not a public server"
msgid "Site only public stream"
msgstr "Mitt nettsted er ikke en offentlig tjeneste"
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:499
msgid "Restrict the public stream to content originating at this site"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:514
+#: ../../Zotlabs/Module/Admin/Site.php:500
msgid "Allow anybody on the internet to access the public streams"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:514
+#: ../../Zotlabs/Module/Admin/Site.php:500
msgid "Disable to require authentication before viewing"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:515
+#: ../../Zotlabs/Module/Admin/Site.php:501
msgid "Only import Public stream posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:515
-#: ../../Zotlabs/Module/Admin/Site.php:516
-#: ../../Zotlabs/Module/Contactedit.php:423
-#: ../../Zotlabs/Module/Contactedit.php:424
-#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
-msgid ""
-"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
-"all posts"
-msgstr ""
-"ord per linje eller #merkelapper eller /mønster/ eller språk lang=xx, la stå "
-"blankt for å importere alle innlegg"
-
-#: ../../Zotlabs/Module/Admin/Site.php:516
+#: ../../Zotlabs/Module/Admin/Site.php:502
msgid "Do not import Public stream posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:505
msgid "Login on Homepage"
msgstr "Logg inn på hjemmesiden"
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:505
msgid ""
"Present a login box to visitors on the home page if no other content has "
"been configured."
@@ -10887,68 +9914,68 @@ msgstr ""
"Presenter en innloggingsboks til besøkende på hjemmesiden hvis ikke noe "
"annet innhold har blitt konfigurert."
-#: ../../Zotlabs/Module/Admin/Site.php:520
+#: ../../Zotlabs/Module/Admin/Site.php:506
msgid "Enable context help"
msgstr "Slå på kontekstuell hjelp"
-#: ../../Zotlabs/Module/Admin/Site.php:520
+#: ../../Zotlabs/Module/Admin/Site.php:506
msgid ""
"Display contextual help for the current page when the help button is pressed."
msgstr ""
"Vis kontekstuell hjelp for den gjeldende siden når du klikker på "
"hjelpeknappen."
-#: ../../Zotlabs/Module/Admin/Site.php:522
+#: ../../Zotlabs/Module/Admin/Site.php:508
msgid "Reply-to email address for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:523
+#: ../../Zotlabs/Module/Admin/Site.php:509
msgid "Sender (From) email address for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:524
+#: ../../Zotlabs/Module/Admin/Site.php:510
msgid "Name of email sender for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:512
msgid "Directory Server URL"
msgstr "Katalogtjener URL"
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:512
msgid "Default directory server"
msgstr "Standard katalogtjener"
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:514
msgid "Enable SSE Notifications"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:514
msgid ""
"If disabled, traditional polling will be used. Warning: this setting might "
"not be suited for shared hosting"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:530
+#: ../../Zotlabs/Module/Admin/Site.php:516
msgid "Proxy user"
msgstr "Brukernavn mellomtjener"
-#: ../../Zotlabs/Module/Admin/Site.php:531
+#: ../../Zotlabs/Module/Admin/Site.php:517
msgid "Proxy URL"
msgstr "Mellomtjener URL"
-#: ../../Zotlabs/Module/Admin/Site.php:532
+#: ../../Zotlabs/Module/Admin/Site.php:518
msgid "Network timeout"
msgstr "Nettverk tidsavbrudd"
-#: ../../Zotlabs/Module/Admin/Site.php:532
+#: ../../Zotlabs/Module/Admin/Site.php:518
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr "Verdien i sekunder. Skriv 0 for ubegrenset (ikke anbefalt)."
-#: ../../Zotlabs/Module/Admin/Site.php:533
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid "Delivery interval"
msgstr "Leveringsinterval"
-#: ../../Zotlabs/Module/Admin/Site.php:533
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid ""
"Delay background delivery processes by this many seconds to reduce system "
"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
@@ -10958,11 +9985,11 @@ msgstr ""
"redusere systembelastningen. Anbefaling: 4-5 for delte tjenere, 2-3 for "
"virtuelle tjenere, 0-1 for større dedikerte tjenere."
-#: ../../Zotlabs/Module/Admin/Site.php:534
+#: ../../Zotlabs/Module/Admin/Site.php:520
msgid "Deliveries per process"
msgstr "Leveranser per prosess"
-#: ../../Zotlabs/Module/Admin/Site.php:534
+#: ../../Zotlabs/Module/Admin/Site.php:520
msgid ""
"Number of deliveries to attempt in a single operating system process. Adjust "
"if necessary to tune system performance. Recommend: 1-5."
@@ -10970,11 +9997,11 @@ msgstr ""
"Antall leveranser som forsøkes i en enkelt operativsystemprosess. Juster om "
"nødvendig for å fininnstille systemets yteevne. Anbefaling: 1-5."
-#: ../../Zotlabs/Module/Admin/Site.php:536
+#: ../../Zotlabs/Module/Admin/Site.php:522
msgid "Poll interval"
msgstr "Spørreintervall"
-#: ../../Zotlabs/Module/Admin/Site.php:536
+#: ../../Zotlabs/Module/Admin/Site.php:522
msgid ""
"Delay background polling processes by this many seconds to reduce system "
"load. If 0, use delivery interval."
@@ -10982,22 +10009,22 @@ msgstr ""
"Forsink spørreprosessene i bakgrunnen med dette antall sekunder for å "
"redusere systembelastningen. Hvis 0, bruk dette leveringsintervallet."
-#: ../../Zotlabs/Module/Admin/Site.php:537
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid "Path to ImageMagick convert program"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:537
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid ""
"If set, use this program to generate photo thumbnails for huge images ( > "
"4000 pixels in either dimension), otherwise memory exhaustion may occur. "
"Example: /usr/bin/convert"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:538
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid "Maximum Load Average"
msgstr "Største belastningsgjennomsnitt"
-#: ../../Zotlabs/Module/Admin/Site.php:538
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default 50."
@@ -11005,151 +10032,561 @@ msgstr ""
"Største systembelastning før leverings- og spørreprosesser blir utsatt - "
"standard 50."
-#: ../../Zotlabs/Module/Admin/Site.php:539
+#: ../../Zotlabs/Module/Admin/Site.php:525
msgid "Expiration period in days for imported (grid/network) content"
msgstr "Antall dager før importert innhold (nettet/nettverk) utgår"
-#: ../../Zotlabs/Module/Admin/Site.php:539
+#: ../../Zotlabs/Module/Admin/Site.php:525
msgid "0 for no expiration of imported content"
msgstr "0 dersom importert innhold ikke skal utgå"
-#: ../../Zotlabs/Module/Admin/Site.php:540
+#: ../../Zotlabs/Module/Admin/Site.php:526
msgid ""
"Do not expire any posts which have comments less than this many days ago"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:541
+#: ../../Zotlabs/Module/Admin/Site.php:527
msgid ""
"Public servers: Optional landing (marketing) webpage for new registrants"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:541
+#: ../../Zotlabs/Module/Admin/Site.php:527
#, php-format
msgid "Create this page first. Default is %s/register"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:542
+#: ../../Zotlabs/Module/Admin/Site.php:528
msgid "Page to display after creating a new channel"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:542
+#: ../../Zotlabs/Module/Admin/Site.php:528
msgid "Default: profiles"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:543
+#: ../../Zotlabs/Module/Admin/Site.php:529
msgid "Optional: site location"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:543
+#: ../../Zotlabs/Module/Admin/Site.php:529
msgid "Region or country"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:628
-#: ../../Zotlabs/Module/Admin/Site.php:629
+#: ../../Zotlabs/Module/Admin/Site.php:614
+#: ../../Zotlabs/Module/Admin/Site.php:615
msgid "Invalid 24h time value (hhmm/hmm)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:28
-msgid "Log settings updated."
-msgstr "Logginnstillinger er oppdatert."
+#: ../../Zotlabs/Module/Admin/Dbsync.php:19
+msgid "Update has been marked successful"
+msgstr "Oppdateringen har blitt merket som en suksess"
-#: ../../Zotlabs/Module/Admin/Logs.php:85
-msgid "Clear"
-msgstr "Tøm"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:32
+#, php-format
+msgid "Verification of update %s failed. Check system logs."
+msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:91
-msgid "Debugging"
-msgstr "Feilsøking"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:35
+#: ../../Zotlabs/Module/Admin/Dbsync.php:62
+#, php-format
+msgid "Update %s was successfully applied."
+msgstr "Oppdatering %s ble gjennomført med suksess."
-#: ../../Zotlabs/Module/Admin/Logs.php:92
-msgid "Log file"
-msgstr "Loggfil"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:39
+#, php-format
+msgid "Verifying update %s did not return a status. Unknown if it succeeded."
+msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:92
+#: ../../Zotlabs/Module/Admin/Dbsync.php:42
+#, php-format
+msgid "Update %s does not contain a verification function."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:46
+#: ../../Zotlabs/Module/Admin/Dbsync.php:69
+#, php-format
+msgid "Update function %s could not be found."
+msgstr "Oppdatering av funksjon %s kunne ikke finnes."
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:59
+#, php-format
+msgid "Executing update procedure %s failed. Check system logs."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:66
+#, php-format
msgid ""
-"Must be writable by web server. Relative to your top-level webserver "
-"directory."
+"Update %s did not return a status. It cannot be determined if it was "
+"successful."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:93
-msgid "Log level"
-msgstr "Loggnivå"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:87
+msgid "Failed Updates"
+msgstr "Mislykkede oppdateringer"
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:89
+msgid "Mark success (if update was manually applied)"
+msgstr "Marker suksess (hvis oppdateringen ble gjennomført manuelt)"
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:90
+msgid "Attempt to verify this update if a verification procedure exists"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:91
+msgid "Attempt to execute this update step automatically"
+msgstr "Prøv å gjennomføre dette oppdateringstrinnet automatisk"
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:96
+msgid "No failed updates."
+msgstr "Ingen mislykkede oppdateringer."
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:128
+#, php-format
+msgid "%s account blocked/unblocked"
+msgid_plural "%s account blocked/unblocked"
+msgstr[0] "%s konto blokkert/ikke blokkert lenger"
+msgstr[1] "%s kontoer blokkert/ikke blokkert lenger"
-#: ../../Zotlabs/Module/Admin/Channels.php:31
+#: ../../Zotlabs/Module/Admin/Accounts.php:135
+#, php-format
+msgid "%s account deleted"
+msgid_plural "%s accounts deleted"
+msgstr[0] "%s konto slettet"
+msgstr[1] "%s kontoer slettet"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:171
+msgid "Account not found"
+msgstr "Kontoen ble ikke funnet"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:192
+#, php-format
+msgid "Account '%s' blocked"
+msgstr "Kontoen '%s' blokkert"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:200
+#, php-format
+msgid "Account '%s' unblocked"
+msgstr "Kontoen '%s' er ikke blokkert lenger"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:240
+msgid "Unverified"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:243
+msgid "Expired"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:308
+#: ../../Zotlabs/Module/Admin/Accounts.php:327
+#: ../../Zotlabs/Module/Admin.php:97 ../../Zotlabs/Widget/Admin.php:28
+msgid "Accounts"
+msgstr "Kontoer"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:310
+msgid "Show verified registrations"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:310
+msgid "Show all registrations"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:312
+msgid "Select toggle"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:313
+msgid "Deny selected"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:314
+msgid "Approve selected"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:315
+msgid "All registrations"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:315
+msgid "Verified registrations waiting for approval"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:316
+msgid "Request date"
+msgstr "Dato for forespørsel"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:316
+msgid "Requests"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:317
+msgid "No registrations available"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:317
+msgid "No verified registrations available"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:319
+#: ../../Zotlabs/Module/Authorize.php:33
+msgid "Deny"
+msgstr "Avslå"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:323
+msgid "Verified"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:324
+msgid "Not yet verified"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:329
+msgid "ID"
+msgstr "ID"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:331
+msgid "All channels"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:332
+msgid "Register date"
+msgstr "Registreringsdato"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:333
+msgid "Last login"
+msgstr "Siste innlogging"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:334
+msgid "Expires"
+msgstr "Utløper"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:335
+#: ../../Zotlabs/Module/Admin/Account_edit.php:72
+msgid "Service class"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:337
+msgid ""
+"Selected accounts will be deleted!\\n\\nEverything these accounts had posted "
+"on this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+"Valgte kontoer vil bli slettet!\\n\\nAlt disse kontoene har lagt inn på "
+"dette nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil "
+"slette disse valgte kontoene?"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:338
+msgid ""
+"The account {0} will be deleted!\\n\\nEverything this account has posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+"Kontoen {0} vl bli slettet!\\n\\nAlt denne kontoen har lagt inn på dette "
+"nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil slette "
+"denne kontoen?"
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:347
+msgid "Message"
+msgstr "Melding"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:66
+msgid "Max queueworker threads"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:68
+msgid "Minimum 4, default 4"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:78
+msgid "Assume workers dead after"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:80
+msgid "Minimum 120, default 300 seconds"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:92
+msgid "Pause before starting next task"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:94
+msgid "Minimum 100, default 100 microseconds"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:103
+msgid "Automatically adjust pause before starting next task"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:112
+msgid "Queueworker Settings"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:29
+#, php-format
+msgid "Password changed for account %d."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:46
+msgid "Account settings updated."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:68
+msgid "Account Edit"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:69
+msgid "New Password"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:70
+msgid "New Password again"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:71
+msgid "Account language (for emails)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Security.php:97
+msgid ""
+"By default, unfiltered HTML is allowed in embedded media. This is inherently "
+"insecure."
+msgstr ""
+"Ufiltrert HTML er i utgangspunktet tillatt i innebygde media. Dette er en "
+"sikkerhetsrisiko."
+
+#: ../../Zotlabs/Module/Admin/Security.php:100
+msgid ""
+"The recommended setting is to only allow unfiltered HTML from the following "
+"sites:"
+msgstr ""
+"Det anbefales at man kun tillater ufiltrert HTML fra følgende nettsteder:"
+
+#: ../../Zotlabs/Module/Admin/Security.php:101
+msgid ""
+"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
+"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
+msgstr ""
+"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
+"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
+
+#: ../../Zotlabs/Module/Admin/Security.php:102
+msgid ""
+"All other embedded content will be filtered, <strong>unless</strong> "
+"embedded content from that site is explicitly blocked."
+msgstr ""
+"Alt annet innebygget innhold vil bli filtrert, <strong>med mindre</strong> "
+"innebygget innhold fra den aktuelle siden eksplisitt er blokkert."
+
+#: ../../Zotlabs/Module/Admin/Security.php:107
+#: ../../Zotlabs/Widget/Admin.php:30
+msgid "Security"
+msgstr "Sikkerhet"
+
+#: ../../Zotlabs/Module/Admin/Security.php:109
+msgid "Block public"
+msgstr "Blokker offentlig tilgang"
+
+#: ../../Zotlabs/Module/Admin/Security.php:109
+msgid ""
+"Check to block public access to all otherwise public personal pages on this "
+"site unless you are currently authenticated."
+msgstr ""
+"Kryss av for å blokkere tilgang til alle personlige sider som ellers ville "
+"vært offentlig tilgjengelige på dette nettstedet med mindre du er logget inn."
+
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid "Provide a cloud root directory"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid ""
+"The cloud root directory lists all channel names which provide public files"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Security.php:111
+msgid "Show total disk space available to cloud uploads"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Security.php:112
+msgid "Set \"Transport Security\" HTTP header"
+msgstr "Slå på \"Transport Security\" i HTTP meldingshodet"
+
+#: ../../Zotlabs/Module/Admin/Security.php:113
+msgid "Set \"Content Security Policy\" HTTP header"
+msgstr "Sett \"Content Security Policy\" i HTTP meldingshodet"
+
+#: ../../Zotlabs/Module/Admin/Security.php:114
+msgid "Allowed email domains"
+msgstr "Tillate e-postdomener"
+
+#: ../../Zotlabs/Module/Admin/Security.php:114
+msgid ""
+"Comma separated list of domains which are allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains"
+msgstr ""
+"Kommaseparert liste med domener som er tillatt i e-postadresser ved "
+"registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle "
+"domener er tillatt"
+
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid "Not allowed email domains"
+msgstr "Ikke tillatte e-postdomener"
+
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid ""
+"Comma separated list of domains which are not allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains, unless allowed domains have been defined."
+msgstr ""
+"Kommaseparert liste med domener som ikke er tillatt i e-postadresser ved "
+"registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle "
+"domener er tillatt, med mindre tillate domener er blitt definert."
+
+#: ../../Zotlabs/Module/Admin/Security.php:116
+msgid "Allow communications only from these sites"
+msgstr "Tillat kommunikasjon med bare disse nettstedene"
+
+#: ../../Zotlabs/Module/Admin/Security.php:116
+msgid ""
+"One site per line. Leave empty to allow communication from anywhere by "
+"default"
+msgstr ""
+"Et nettsted per linje. La det stå tomt for å tillate kommunikasjon med "
+"ethvert nettsted som standard"
+
+#: ../../Zotlabs/Module/Admin/Security.php:117
+msgid "Block communications from these sites"
+msgstr "Blokker kommunikasjon fra disse nettstedene"
+
+#: ../../Zotlabs/Module/Admin/Security.php:118
+msgid "Allow communications only from these channels"
+msgstr "Tillat kommunikasjon med bare disse kanalene"
+
+#: ../../Zotlabs/Module/Admin/Security.php:118
+msgid ""
+"One channel (hash) per line. Leave empty to allow from any channel by default"
+msgstr ""
+"En kanal (hash) per linje. La det stå tomt for å tillate enhver kanal som "
+"standard"
+
+#: ../../Zotlabs/Module/Admin/Security.php:119
+msgid "Block communications from these channels"
+msgstr "Blokker kommunikasjon fra disse kanalene"
+
+#: ../../Zotlabs/Module/Admin/Security.php:120
+msgid "Only allow embeds from secure (SSL) websites and links."
+msgstr "Kun tillat innebygget innhold fra sikre (HTTPS) nettsteder og lenker."
+
+#: ../../Zotlabs/Module/Admin/Security.php:121
+msgid "Allow unfiltered embedded HTML content only from these domains"
+msgstr "Kun tillat ufiltrert innebygget innhold fra disse domenene"
+
+#: ../../Zotlabs/Module/Admin/Security.php:121
+msgid "One site per line. By default embedded content is filtered."
+msgstr ""
+"Ett nettsted pr. linje. Innebygget innhold er filtrert i utgangsounktet."
+
+#: ../../Zotlabs/Module/Admin/Security.php:122
+msgid "Block embedded HTML from these domains"
+msgstr "Blokker innbygget HTML fra disse domenene"
+
+#: ../../Zotlabs/Module/Admin/Security.php:123
+msgid "Allow SVG thumbnails in file browser"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Security.php:123
+msgid "WARNING: SVG images may contain malicious code."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Security.php:124
+msgid "Allow embedded (inline) PDF files"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Security.php:126
+#, fuzzy
+#| msgid "Default directory server"
+msgid "Additional trusted directory server URLs"
+msgstr "Standard katalogtjener"
+
+#: ../../Zotlabs/Module/Admin/Security.php:126
+msgid ""
+"Accept directory flags (spam, nsfw) from those servers. One per line like "
+"https://example.tld"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:28
+#: ../../Zotlabs/Module/Admin/Channels.php:80
+msgid "Channel not found"
+msgstr "Kanalen ble ikke funnet"
+
+#: ../../Zotlabs/Module/Admin/Channels.php:48
#, php-format
msgid "%s channel censored/uncensored"
msgid_plural "%s channels censored/uncensored"
msgstr[0] "%s kanal er sensurert/ikke sensurert lenger"
msgstr[1] "%s kanaler er sensurert/ikke sensurert lenger"
-#: ../../Zotlabs/Module/Admin/Channels.php:40
+#: ../../Zotlabs/Module/Admin/Channels.php:57
#, php-format
msgid "%s channel code allowed/disallowed"
msgid_plural "%s channels code allowed/disallowed"
msgstr[0] "%s kanal med kode tillatt/ikke tillatt"
msgstr[1] "%s kanaler med kode tillatt/ikke tillatt"
-#: ../../Zotlabs/Module/Admin/Channels.php:46
+#: ../../Zotlabs/Module/Admin/Channels.php:63
#, php-format
msgid "%s channel deleted"
msgid_plural "%s channels deleted"
msgstr[0] "%s kanal slettet"
msgstr[1] "%s kanaler slettet"
-#: ../../Zotlabs/Module/Admin/Channels.php:65
-msgid "Channel not found"
-msgstr "Kanalen ble ikke funnet"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:75
+#: ../../Zotlabs/Module/Admin/Channels.php:90
#, php-format
msgid "Channel '%s' deleted"
msgstr "Kanalen '%s' er slettet"
-#: ../../Zotlabs/Module/Admin/Channels.php:87
+#: ../../Zotlabs/Module/Admin/Channels.php:109
#, php-format
msgid "Channel '%s' censored"
msgstr "Kanalen '%s' er sensurert"
-#: ../../Zotlabs/Module/Admin/Channels.php:87
+#: ../../Zotlabs/Module/Admin/Channels.php:109
#, php-format
msgid "Channel '%s' uncensored"
msgstr "Kanalen '%s' er ikke sensurert lenger"
-#: ../../Zotlabs/Module/Admin/Channels.php:98
+#: ../../Zotlabs/Module/Admin/Channels.php:120
#, php-format
msgid "Channel '%s' code allowed"
msgstr "Kanal '%s' kode tillatt"
-#: ../../Zotlabs/Module/Admin/Channels.php:98
+#: ../../Zotlabs/Module/Admin/Channels.php:120
#, php-format
msgid "Channel '%s' code disallowed"
msgstr "Kanal '%s' kode ikke tillatt"
-#: ../../Zotlabs/Module/Admin/Channels.php:148
+#: ../../Zotlabs/Module/Admin/Channels.php:170
msgid "select all"
msgstr "velg alle"
-#: ../../Zotlabs/Module/Admin/Channels.php:150
+#: ../../Zotlabs/Module/Admin/Channels.php:172
msgid "Censor"
msgstr "Sensurer"
-#: ../../Zotlabs/Module/Admin/Channels.php:151
+#: ../../Zotlabs/Module/Admin/Channels.php:173
msgid "Uncensor"
msgstr "Ikke sensurer lenger"
-#: ../../Zotlabs/Module/Admin/Channels.php:152
+#: ../../Zotlabs/Module/Admin/Channels.php:174
msgid "Allow Code"
msgstr "Tillat kode"
-#: ../../Zotlabs/Module/Admin/Channels.php:153
+#: ../../Zotlabs/Module/Admin/Channels.php:175
msgid "Disallow Code"
msgstr "Ikke tillat kode"
-#: ../../Zotlabs/Module/Admin/Channels.php:158
+#: ../../Zotlabs/Module/Admin/Channels.php:180
msgid "UID"
msgstr "UID"
-#: ../../Zotlabs/Module/Admin/Channels.php:162
+#: ../../Zotlabs/Module/Admin/Channels.php:184
msgid ""
"Selected channels will be deleted!\\n\\nEverything that was posted in these "
"channels on this site will be permanently deleted!\\n\\nAre you sure?"
@@ -11158,7 +10595,7 @@ msgstr ""
"kanalene på dette nettstedet vil bli slettet for alltid!\\n\\nEr du sikker "
"på at du vil slette disse kanalene med alt innhold?"
-#: ../../Zotlabs/Module/Admin/Channels.php:163
+#: ../../Zotlabs/Module/Admin/Channels.php:185
msgid ""
"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
"channel on this site will be permanently deleted!\\n\\nAre you sure?"
@@ -11167,483 +10604,661 @@ msgstr ""
"kanalen på dettet nettstedet vil bli slettet for alltid!\\n\\nEr du sikker "
"på at du vil slette denne kanalen med alt innhold?"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:29
+#: ../../Zotlabs/Module/Admin/Features.php:56
#, php-format
-msgid "Password changed for account %d."
+msgid "Lock feature %s"
+msgstr "Lås funksjon %s"
+
+#: ../../Zotlabs/Module/Admin/Features.php:64
+msgid "Manage Additional Features"
+msgstr "Håndter tilleggsfunksjoner"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:294
+#, php-format
+msgid "Plugin %s disabled."
+msgstr "Tilleggsfunksjonen %s er avskrudd."
+
+#: ../../Zotlabs/Module/Admin/Addons.php:299
+#, php-format
+msgid "Plugin %s enabled."
+msgstr "Tilleggsfunksjonen %s er påskrudd."
+
+#: ../../Zotlabs/Module/Admin/Addons.php:315
+#: ../../Zotlabs/Module/Admin/Themes.php:111
+msgid "Disable"
+msgstr "Skru av"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:318
+#: ../../Zotlabs/Module/Admin/Themes.php:113
+msgid "Enable"
+msgstr "Skru på"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:347
+#: ../../Zotlabs/Module/Admin/Addons.php:445 ../../Zotlabs/Widget/Admin.php:32
+msgid "Addons"
+msgstr "Tillegg"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:348
+#: ../../Zotlabs/Module/Admin/Themes.php:140
+msgid "Toggle"
+msgstr "Skru av og på"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:356
+#: ../../Zotlabs/Module/Admin/Themes.php:150
+msgid "Author: "
+msgstr "Forfatter: "
+
+#: ../../Zotlabs/Module/Admin/Addons.php:357
+#: ../../Zotlabs/Module/Admin/Themes.php:151
+msgid "Maintainer: "
+msgstr "Vedlikeholder: "
+
+#: ../../Zotlabs/Module/Admin/Addons.php:358
+msgid "Minimum project version: "
+msgstr "Minimum prosjektversjon: "
+
+#: ../../Zotlabs/Module/Admin/Addons.php:359
+msgid "Maximum project version: "
+msgstr "Maksimum prosjektversjon: "
+
+#: ../../Zotlabs/Module/Admin/Addons.php:360
+msgid "Minimum PHP version: "
+msgstr "Minimum PHP-versjon: "
+
+#: ../../Zotlabs/Module/Admin/Addons.php:361
+msgid "Compatible Server Roles: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:46
-msgid "Account settings updated."
+#: ../../Zotlabs/Module/Admin/Addons.php:362
+msgid "Requires: "
+msgstr "Krever: "
+
+#: ../../Zotlabs/Module/Admin/Addons.php:363
+#: ../../Zotlabs/Module/Admin/Addons.php:450
+msgid "Disabled - version incompatibility"
+msgstr "Skrudd av - versjonsinkompatibilitet"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:419
+msgid "Enter the public git repository URL of the addon repo."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:68
-msgid "Account Edit"
+#: ../../Zotlabs/Module/Admin/Addons.php:420
+msgid "Addon repo git URL"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:69
-msgid "New Password"
+#: ../../Zotlabs/Module/Admin/Addons.php:421
+msgid "Custom repo name"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:70
-msgid "New Password again"
+#: ../../Zotlabs/Module/Admin/Addons.php:421
+#, fuzzy
+msgid "(optional)"
+msgstr "Valgfritt"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:422
+msgid "Download Addon Repo"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:71
-msgid "Account language (for emails)"
+#: ../../Zotlabs/Module/Admin/Addons.php:429
+msgid "Install new repo"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Addons.php:453
+msgid "Manage Repos"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Addons.php:454
+msgid "Installed Addon Repositories"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Addons.php:455
+msgid "Install a New Addon Repository"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Addons.php:462
+msgid "Switch branch"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Queue.php:45
+msgid "Queue Statistics"
+msgstr "Køstatistikk"
+
+#: ../../Zotlabs/Module/Admin/Queue.php:46
+msgid "Total Entries"
+msgstr "Totalt antall oppføringer"
+
+#: ../../Zotlabs/Module/Admin/Queue.php:47
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2668
+msgid "Priority"
+msgstr "Prioritet"
+
+#: ../../Zotlabs/Module/Admin/Queue.php:48
+msgid "Destination URL"
+msgstr "Mål-URL"
+
+#: ../../Zotlabs/Module/Admin/Queue.php:49
+msgid "Mark hub permanently offline"
+msgstr "Merk hub som permanent offline"
+
+#: ../../Zotlabs/Module/Admin/Queue.php:50
+msgid "Retry delivery to this hub"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:89
+#: ../../Zotlabs/Module/Admin/Queue.php:51
+msgid "Empty queue for this hub"
+msgstr "Tøm køen for denne hubben"
+
+#: ../../Zotlabs/Module/Admin/Queue.php:52
+msgid "Last known contact"
+msgstr "Siste kjente kontakt"
+
+#: ../../Zotlabs/Module/Admin/Profs.php:90
msgid "New Profile Field"
msgstr "Nytt profilfelt"
-#: ../../Zotlabs/Module/Admin/Profs.php:90
-#: ../../Zotlabs/Module/Admin/Profs.php:110
+#: ../../Zotlabs/Module/Admin/Profs.php:91
+#: ../../Zotlabs/Module/Admin/Profs.php:111
msgid "Field nickname"
msgstr "Feltets kallenavn"
-#: ../../Zotlabs/Module/Admin/Profs.php:90
-#: ../../Zotlabs/Module/Admin/Profs.php:110
+#: ../../Zotlabs/Module/Admin/Profs.php:91
+#: ../../Zotlabs/Module/Admin/Profs.php:111
msgid "System name of field"
msgstr "Systemnavnet til feltet"
-#: ../../Zotlabs/Module/Admin/Profs.php:91
-#: ../../Zotlabs/Module/Admin/Profs.php:111
+#: ../../Zotlabs/Module/Admin/Profs.php:92
+#: ../../Zotlabs/Module/Admin/Profs.php:112
msgid "Input type"
msgstr "Inndata-type"
-#: ../../Zotlabs/Module/Admin/Profs.php:92
-#: ../../Zotlabs/Module/Admin/Profs.php:112
+#: ../../Zotlabs/Module/Admin/Profs.php:93
+#: ../../Zotlabs/Module/Admin/Profs.php:113
msgid "Field Name"
msgstr "Feltnavn"
-#: ../../Zotlabs/Module/Admin/Profs.php:92
-#: ../../Zotlabs/Module/Admin/Profs.php:112
+#: ../../Zotlabs/Module/Admin/Profs.php:93
+#: ../../Zotlabs/Module/Admin/Profs.php:113
msgid "Label on profile pages"
msgstr "Merkelapp på profilsider"
-#: ../../Zotlabs/Module/Admin/Profs.php:93
-#: ../../Zotlabs/Module/Admin/Profs.php:113
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
msgid "Help text"
msgstr "Hjelpetekst"
-#: ../../Zotlabs/Module/Admin/Profs.php:93
-#: ../../Zotlabs/Module/Admin/Profs.php:113
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
msgid "Additional info (optional)"
msgstr "Tilleggsinformasjon (valgfritt)"
-#: ../../Zotlabs/Module/Admin/Profs.php:103
+#: ../../Zotlabs/Module/Admin/Profs.php:104
msgid "Field definition not found"
msgstr "Feltdefinisjonen ble ikke funnet"
-#: ../../Zotlabs/Module/Admin/Profs.php:109
+#: ../../Zotlabs/Module/Admin/Profs.php:110
msgid "Edit Profile Field"
msgstr "Endre profilfelt"
-#: ../../Zotlabs/Module/Admin/Profs.php:169
+#: ../../Zotlabs/Module/Admin/Profs.php:169 ../../Zotlabs/Widget/Admin.php:36
+msgid "Profile Fields"
+msgstr "Profilfelter"
+
+#: ../../Zotlabs/Module/Admin/Profs.php:170
msgid "Basic Profile Fields"
msgstr "Grunnleggende profilfelter"
-#: ../../Zotlabs/Module/Admin/Profs.php:170
+#: ../../Zotlabs/Module/Admin/Profs.php:171
msgid "Advanced Profile Fields"
msgstr "Utvidede profilfelter"
-#: ../../Zotlabs/Module/Admin/Profs.php:170
+#: ../../Zotlabs/Module/Admin/Profs.php:171
msgid "(In addition to basic fields)"
msgstr "(I tillegg til grunnleggende felt)"
-#: ../../Zotlabs/Module/Admin/Profs.php:172
+#: ../../Zotlabs/Module/Admin/Profs.php:173
msgid "All available fields"
msgstr "Alle tilgjengelige felt"
-#: ../../Zotlabs/Module/Admin/Profs.php:173
+#: ../../Zotlabs/Module/Admin/Profs.php:174
msgid "Custom Fields"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:177
+#: ../../Zotlabs/Module/Admin/Profs.php:178
msgid "Create Custom Field"
msgstr "Legg til egendefinert felt"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:19
-msgid "Update has been marked successful"
-msgstr "Oppdateringen har blitt merket som en suksess"
+#: ../../Zotlabs/Module/Admin/Themes.php:27
+msgid "Theme settings updated."
+msgstr "Temainnstillinger er oppdatert."
-#: ../../Zotlabs/Module/Admin/Dbsync.php:32
-#, php-format
-msgid "Verification of update %s failed. Check system logs."
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Themes.php:62
+msgid "No themes found."
+msgstr "Ingen temaer er funnet."
-#: ../../Zotlabs/Module/Admin/Dbsync.php:35
-#: ../../Zotlabs/Module/Admin/Dbsync.php:62
-#, php-format
-msgid "Update %s was successfully applied."
-msgstr "Oppdatering %s ble gjennomført med suksess."
+#: ../../Zotlabs/Module/Admin/Themes.php:132
+msgid "Screenshot"
+msgstr "Skjermbilde"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:39
-#, php-format
-msgid "Verifying update %s did not return a status. Unknown if it succeeded."
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Themes.php:139
+#: ../../Zotlabs/Module/Admin/Themes.php:173 ../../Zotlabs/Widget/Admin.php:33
+msgid "Themes"
+msgstr "Utseende"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:42
-#, php-format
-msgid "Update %s does not contain a verification function."
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Themes.php:178
+msgid "[Experimental]"
+msgstr "[Eksperimentelt]"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:46
-#: ../../Zotlabs/Module/Admin/Dbsync.php:69
-#, php-format
-msgid "Update function %s could not be found."
-msgstr "Oppdatering av funksjon %s kunne ikke finnes."
+#: ../../Zotlabs/Module/Admin/Themes.php:179
+msgid "[Unsupported]"
+msgstr "[Ingen støtte]"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:59
-#, php-format
-msgid "Executing update procedure %s failed. Check system logs."
-msgstr ""
+#: ../../Zotlabs/Module/Admin/Logs.php:29
+msgid "Log settings updated."
+msgstr "Logginnstillinger er oppdatert."
-#: ../../Zotlabs/Module/Admin/Dbsync.php:66
-#, php-format
+#: ../../Zotlabs/Module/Admin/Logs.php:84 ../../Zotlabs/Widget/Admin.php:54
+#: ../../Zotlabs/Widget/Admin.php:64
+msgid "Logs"
+msgstr "Logger"
+
+#: ../../Zotlabs/Module/Admin/Logs.php:86
+msgid "Clear"
+msgstr "Tøm"
+
+#: ../../Zotlabs/Module/Admin/Logs.php:92
+msgid "Debugging"
+msgstr "Feilsøking"
+
+#: ../../Zotlabs/Module/Admin/Logs.php:93
+msgid "Log file"
+msgstr "Loggfil"
+
+#: ../../Zotlabs/Module/Admin/Logs.php:93
msgid ""
-"Update %s did not return a status. It cannot be determined if it was "
-"successful."
+"Must be writable by web server. Relative to your top-level webserver "
+"directory."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:87
-msgid "Failed Updates"
-msgstr "Mislykkede oppdateringer"
+#: ../../Zotlabs/Module/Admin/Logs.php:94
+msgid "Log level"
+msgstr "Loggnivå"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:89
-msgid "Mark success (if update was manually applied)"
-msgstr "Marker suksess (hvis oppdateringen ble gjennomført manuelt)"
+#: ../../Zotlabs/Module/Attach_edit.php:118
+msgid "Can not copy folder into itself."
+msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:90
-msgid "Attempt to verify this update if a verification procedure exists"
+#: ../../Zotlabs/Module/Attach_edit.php:131
+#, php-format
+msgid "Can not move folder \"%s\" into itself."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:91
-msgid "Attempt to execute this update step automatically"
-msgstr "Prøv å gjennomføre dette oppdateringstrinnet automatisk"
+#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:477
+msgid "Unable to locate original post."
+msgstr "Ikke i stand til å finne opprinnelig innlegg."
-#: ../../Zotlabs/Module/Admin/Dbsync.php:96
-msgid "No failed updates."
-msgstr "Ingen mislykkede oppdateringer."
+#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:456
+#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1693
+msgid "status"
+msgstr "status"
-#: ../../Zotlabs/Module/Admin/Addons.php:293
+#: ../../Zotlabs/Module/Subthread.php:125
#, php-format
-msgid "Plugin %s disabled."
-msgstr "Tilleggsfunksjonen %s er avskrudd."
+msgid "%1$s is following %2$s's %3$s"
+msgstr "%1$s følger %2$s sin %3$s"
-#: ../../Zotlabs/Module/Admin/Addons.php:298
+#: ../../Zotlabs/Module/Subthread.php:127
#, php-format
-msgid "Plugin %s enabled."
-msgstr "Tilleggsfunksjonen %s er påskrudd."
+msgid "%1$s stopped following %2$s's %3$s"
+msgstr "%1$s stopped å følge %2$s sin %3$s"
-#: ../../Zotlabs/Module/Admin/Addons.php:357
-msgid "Minimum project version: "
-msgstr "Minimum prosjektversjon: "
+#: ../../Zotlabs/Module/Attach.php:68
+msgid "Item not available."
+msgstr "Elementet er ikke tilgjengelig."
-#: ../../Zotlabs/Module/Admin/Addons.php:358
-msgid "Maximum project version: "
-msgstr "Maksimum prosjektversjon: "
+#: ../../Zotlabs/Module/Removeme.php:35
+msgid ""
+"Channel removals are not allowed within 48 hours of changing the account "
+"password."
+msgstr ""
+"Fjerning av kanaler er ikke tillatt innen 48 timer etter endring av "
+"kontopassordet."
-#: ../../Zotlabs/Module/Admin/Addons.php:359
-msgid "Minimum PHP version: "
-msgstr "Minimum PHP-versjon: "
+#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
+#: ../../Zotlabs/Module/Settings/Channel.php:283
+msgid "Remove Channel"
+msgstr "Fjern kanal"
-#: ../../Zotlabs/Module/Admin/Addons.php:360
-msgid "Compatible Server Roles: "
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This channel will be permanently removed. "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:361
-msgid "Requires: "
-msgstr "Krever: "
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This action can not be undone!"
+msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:362
-#: ../../Zotlabs/Module/Admin/Addons.php:449
-msgid "Disabled - version incompatibility"
-msgstr "Skrudd av - versjonsinkompatibilitet"
+#: ../../Zotlabs/Module/Rmagic.php:46
+msgid "Authentication failed."
+msgstr "Autentisering mislyktes."
-#: ../../Zotlabs/Module/Admin/Addons.php:418
-msgid "Enter the public git repository URL of the addon repo."
-msgstr ""
+#: ../../Zotlabs/Module/Item.php:763
+msgid "Empty post discarded."
+msgstr "Tomt innlegg forkastet."
-#: ../../Zotlabs/Module/Admin/Addons.php:419
-msgid "Addon repo git URL"
-msgstr ""
+#: ../../Zotlabs/Module/Item.php:1207
+msgid "Duplicate post suppressed."
+msgstr "Duplikat av innlegg forhindret."
-#: ../../Zotlabs/Module/Admin/Addons.php:420
-msgid "Custom repo name"
+#: ../../Zotlabs/Module/Item.php:1350
+msgid "System error. Post not saved."
+msgstr "Systemfeil. Innlegg ble ikke lagret."
+
+#: ../../Zotlabs/Module/Item.php:1384
+msgid "Your comment is awaiting approval."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:420
-#, fuzzy
-msgid "(optional)"
-msgstr "Valgfritt"
+#: ../../Zotlabs/Module/Item.php:1520
+msgid "Unable to obtain post information from database."
+msgstr "Ikke i stand til å få tak i informasjon om innlegg fra databasen."
-#: ../../Zotlabs/Module/Admin/Addons.php:421
-msgid "Download Addon Repo"
+#: ../../Zotlabs/Module/Item.php:1527
+#, php-format
+msgid "You have reached your limit of %1$.0f top level posts."
+msgstr "Du har nådd din grense på %1$.0f startinnlegg."
+
+#: ../../Zotlabs/Module/Item.php:1534
+#, php-format
+msgid "You have reached your limit of %1$.0f webpages."
+msgstr "Du har nådd din grense på %1$.0f websider."
+
+#: ../../Zotlabs/Module/Display.php:340
+msgid "Article"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:428
-msgid "Install new repo"
+#: ../../Zotlabs/Module/Display.php:384
+msgid "Item has been removed."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:429 ../../Zotlabs/Lib/Apps.php:546
-msgid "Install"
-msgstr "Installer"
+#: ../../Zotlabs/Module/Mitem.php:63
+msgid "Unable to create element."
+msgstr "Klarer ikke å lage element."
-#: ../../Zotlabs/Module/Admin/Addons.php:452
-msgid "Manage Repos"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:87
+msgid "Unable to update menu element."
+msgstr "Ikke i stand til å oppdatere menyelement."
-#: ../../Zotlabs/Module/Admin/Addons.php:453
-msgid "Installed Addon Repositories"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:103
+msgid "Unable to add menu element."
+msgstr "Ikke i stand til å legge til menyelement."
-#: ../../Zotlabs/Module/Admin/Addons.php:454
-msgid "Install a New Addon Repository"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
+msgid "Menu Item Permissions"
+msgstr "Menyelement Tillatelser"
-#: ../../Zotlabs/Module/Admin/Addons.php:461
-msgid "Switch branch"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
+msgid "(click to open/close)"
+msgstr "(klikk for å åpne/lukke)"
-#: ../../Zotlabs/Module/Apps.php:51
-msgid "Installed Apps"
-msgstr "Installerte apper"
+#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
+msgid "Link Name"
+msgstr "Lenkenavn"
-#: ../../Zotlabs/Module/Apps.php:54
-msgid "Manage Apps"
-msgstr "Behandle apper"
+#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
+msgid "Link or Submenu Target"
+msgstr "Lenke- eller undermeny-mål"
-#: ../../Zotlabs/Module/Apps.php:55
-msgid "Create Custom App"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:175
+msgid "Enter URL of the link or select a menu name to create a submenu"
+msgstr "Skriv URL-en til lenken eller velg et menynavn for å lage en undermeny"
-#: ../../Zotlabs/Module/Achievements.php:38
-msgid "Some blurb about what to do when you're new here"
-msgstr "En standardtekst om hva du bør gjøre som ny her"
+#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
+msgid "Use magic-auth if available"
+msgstr "Bruk magic-autent hvis mulig"
-#: ../../Zotlabs/Module/Removeme.php:35
-msgid ""
-"Channel removals are not allowed within 48 hours of changing the account "
-"password."
-msgstr ""
-"Fjerning av kanaler er ikke tillatt innen 48 timer etter endring av "
-"kontopassordet."
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
+msgid "Open link in new window"
+msgstr "Åpne lenke i nytt vindu"
-#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
-#: ../../Zotlabs/Module/Settings/Channel.php:282
-msgid "Remove Channel"
-msgstr "Fjern kanal"
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+msgid "Order in list"
+msgstr "Ordne i liste"
-#: ../../Zotlabs/Module/Removeme.php:61
-#: ../../Zotlabs/Module/Removeaccount.php:58
-#: ../../Zotlabs/Module/Changeaddr.php:78
-msgid "WARNING: "
-msgstr "ADVARSEL: "
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+msgid "Higher numbers will sink to bottom of listing"
+msgstr "Høyere tall vil synke mot bunnen av listen"
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This channel will be permanently removed. "
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:179
+msgid "Submit and finish"
+msgstr "Send inn og avslutt"
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This action can not be undone!"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:180
+msgid "Submit and continue"
+msgstr "Send inn og fortsett"
-#: ../../Zotlabs/Module/Removeme.php:62
-#: ../../Zotlabs/Module/Removeaccount.php:59
-#: ../../Zotlabs/Module/Changeaddr.php:79
-msgid "Please enter your password for verification:"
-msgstr "Vennligst skriv ditt passord for å få bekreftelse:"
+#: ../../Zotlabs/Module/Mitem.php:189
+msgid "Menu:"
+msgstr "Meny:"
-#: ../../Zotlabs/Module/Regate.php:84
-msgid "Email resent"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:192
+msgid "Link Target"
+msgstr "Lenkemål"
-#: ../../Zotlabs/Module/Regate.php:84
-msgid "Email resend failed"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:195
+msgid "Edit menu"
+msgstr "Endre meny"
-#: ../../Zotlabs/Module/Regate.php:109
-msgid "Verification successful"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:198
+msgid "Edit element"
+msgstr "Endre element"
-#: ../../Zotlabs/Module/Regate.php:153
-msgid "Account successfull created"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:199
+msgid "Drop element"
+msgstr "Slett element"
-#: ../../Zotlabs/Module/Regate.php:211
-msgid "Channel successfull created"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:200
+msgid "New element"
+msgstr "Nytt element"
-#: ../../Zotlabs/Module/Regate.php:217
-msgid "Automatic channel creation failed. Please create a channel."
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:201
+msgid "Edit this menu container"
+msgstr "Endre denne menybeholderen"
-#: ../../Zotlabs/Module/Regate.php:229
-msgid "Account creation error"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:202
+msgid "Add menu element"
+msgstr "Legg til menyelement"
-#: ../../Zotlabs/Module/Regate.php:241
-msgid "Verify failed"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:203
+msgid "Delete this menu item"
+msgstr "Slett dette menyelementet"
-#: ../../Zotlabs/Module/Regate.php:246
-msgid "Token verification failed"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:204
+msgid "Edit this menu item"
+msgstr "Endre dette menyelementet"
-#: ../../Zotlabs/Module/Regate.php:251
-msgid "Request not inside time frame"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:222
+msgid "Menu item not found."
+msgstr "Menyelement ble ikke funnet."
-#: ../../Zotlabs/Module/Regate.php:257 ../../Zotlabs/Module/Regate.php:287
-msgid "Identity unknown"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:235
+msgid "Menu item deleted."
+msgstr "Menyelement slettet."
-#: ../../Zotlabs/Module/Regate.php:263
-msgid "dId2 mistaken"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:237
+msgid "Menu item could not be deleted."
+msgstr "Menyelement kunne ikke bli slettet."
-#: ../../Zotlabs/Module/Regate.php:291
-msgid "Your Registration ID"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:244
+msgid "Edit Menu Element"
+msgstr "Endre menyelement"
-#: ../../Zotlabs/Module/Regate.php:304 ../../Zotlabs/Module/Regate.php:396
-#: ../../Zotlabs/Module/Regate.php:428
-msgid "Registration verification"
-msgstr ""
+#: ../../Zotlabs/Module/Mitem.php:254
+msgid "Link text"
+msgstr "Lenketekst"
-#: ../../Zotlabs/Module/Regate.php:311 ../../Zotlabs/Module/Regate.php:433
-msgid "Hold on, you can start verification in"
+#: ../../Zotlabs/Module/Email_validation.php:37
+msgid "Email Verification Required"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:312
-msgid "Please remember your verification token for ID"
+#: ../../Zotlabs/Module/Email_validation.php:38
+#, php-format
+msgid ""
+"A verification token was sent to your email address [%s]. Enter that token "
+"here to complete the account verification step. Please allow a few minutes "
+"for delivery, and check your spam folder if you do not see the message."
msgstr ""
+"En verifikasjonskode ble sendt til epostadressen din [%s]. Skriv inn koden "
+"du mottok her for å fullføre kontoverifikasjonen. Det kan ta noen minutter "
+"før du mottar koden. Sjekk også at eposten ikke har havnet i mappen for "
+"søppelpost om du ikke ser den etter en stund."
-#: ../../Zotlabs/Module/Regate.php:314
-msgid "Token validity"
+#: ../../Zotlabs/Module/Email_validation.php:39
+msgid "Resend Email"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:350
-msgid "Resend email"
+#: ../../Zotlabs/Module/Email_validation.php:42
+msgid "Validation token"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:355
-msgid "Registration status"
+#: ../../Zotlabs/Module/Uexport.php:108
+msgid "No content available for year"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:358
-msgid "Verification successful!"
+#: ../../Zotlabs/Module/Uexport.php:171
+msgid "Export Channel"
+msgstr "Eksporter kanal"
+
+#: ../../Zotlabs/Module/Uexport.php:173
+msgid "Export channel"
+msgstr "Eksporter kanal"
+
+#: ../../Zotlabs/Module/Uexport.php:174
+msgid ""
+"This will export your identity and social graph into a file which can be "
+"used to import your channel to a new hub."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:359
-msgid "Your login ID is"
+#: ../../Zotlabs/Module/Uexport.php:177
+msgid "Export content"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:360
+#: ../../Zotlabs/Module/Uexport.php:178
msgid ""
-"After your account has been approved by our administrator you will be able "
-"to login with your login ID and your provided password."
+"This will export your posts, direct messages, articles and cards per month "
+"stored into a zip file per year. Months with no posts will be dismissed."
msgstr ""
+"Dette vil eksportere dine innlegg, direktemeldinger, artikler og kort, en "
+"fil for hver måned, pakket i en zip fil for hvert år. Måneder uten innhold "
+"blir ignorert."
-#: ../../Zotlabs/Module/Regate.php:372
-msgid "Registration request revoked"
+#: ../../Zotlabs/Module/Uexport.php:180
+msgid "Export wikis"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:373
-msgid "Sorry for any inconvience. Thank you for your response."
+#: ../../Zotlabs/Module/Uexport.php:181
+msgid "This will export your wikis and wiki pages."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:397
-msgid "Please enter your verification token for ID"
+#: ../../Zotlabs/Module/Uexport.php:183
+msgid "Export webpages"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:398 ../../Zotlabs/Module/Regate.php:425
-msgid "Please check your email!"
+#: ../../Zotlabs/Module/Uexport.php:184
+msgid "This will export your webpages and menus."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:408
-msgid "Verification token"
+#: ../../Zotlabs/Module/Uexport.php:186
+msgid "Export channel calendar"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:419
-msgid "ID expired"
+#: ../../Zotlabs/Module/Uexport.php:187
+msgid ""
+"This will export your channel calendar events and associated items. CalDAV "
+"calendars are not included."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:434
-msgid "You will require the verification token for ID"
+#: ../../Zotlabs/Module/Uexport.php:189
+msgid "Export chatrooms"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:443
-msgid "Unknown or expired ID"
+#: ../../Zotlabs/Module/Uexport.php:190
+msgid "This will export your chatrooms. Chat history is dismissed."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:454
-msgid "dId2 malformed"
+#: ../../Zotlabs/Module/Uexport.php:192
+#, php-format
+msgid ""
+"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</"
+"a> on any site containing your channel."
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:130 ../../Zotlabs/Module/New_channel.php:147
-#, php-format
-msgid "You have created %1$.0f of %2$.0f allowed channels."
-msgstr "Du har laget %1$.0f av %2$.0f tillatte kanaler."
+#: ../../Zotlabs/Module/Notifications.php:106
+#: ../../Zotlabs/Module/Notify.php:85
+msgid "No more system notifications."
+msgstr "Ingen flere systemvarsler."
-#: ../../Zotlabs/Module/Manage.php:137
-msgid "Create a new channel"
-msgstr "Lag en ny kanal"
+#: ../../Zotlabs/Module/Notifications.php:110
+#: ../../Zotlabs/Module/Notify.php:89
+msgid "System Notifications"
+msgstr "Systemvarsler"
-#: ../../Zotlabs/Module/Manage.php:163
-msgid "Current Channel"
-msgstr "Gjeldende kanal"
+#: ../../Zotlabs/Module/Notifications.php:111
+msgid "Mark all seen"
+msgstr "Merk alle som sett"
-#: ../../Zotlabs/Module/Manage.php:165
-msgid "Switch to one of your channels by selecting it."
-msgstr "Bytt til en av dine kanaler ved å velge den."
+#: ../../Zotlabs/Module/Sharedwithme.php:106
+msgid "Files: shared with me"
+msgstr "Filer: delt med meg"
-#: ../../Zotlabs/Module/Manage.php:166
-msgid "Default Channel"
-msgstr "Standardkanal"
+#: ../../Zotlabs/Module/Sharedwithme.php:108
+msgid "NEW"
+msgstr "NY"
-#: ../../Zotlabs/Module/Manage.php:167
-msgid "Make Default"
-msgstr "Gjør til standard"
+#: ../../Zotlabs/Module/Sharedwithme.php:111
+msgid "Remove all files"
+msgstr "Fjern alle filer"
-#: ../../Zotlabs/Module/Manage.php:170
+#: ../../Zotlabs/Module/Sharedwithme.php:112
+msgid "Remove this file"
+msgstr "Fjern denne filen"
+
+#: ../../Zotlabs/Module/Tokens.php:94
#, php-format
-msgid "%d new introductions"
-msgstr "%d nye introduksjoner"
+msgid "This channel is limited to %d tokens"
+msgstr ""
-#: ../../Zotlabs/Module/Manage.php:172
-msgid "Delegated Channel"
-msgstr "Delegert kanal"
+#: ../../Zotlabs/Module/Tokens.php:100
+msgid "Name and Password are required."
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:119
-#, fuzzy
-msgid "Layout not found"
-msgstr "Layouten ble ikke funnet."
+#: ../../Zotlabs/Module/Tokens.php:215
+msgid "Token saved."
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:127
-msgid "This template does not support pdledi_gui (no content regions defined)"
+#: ../../Zotlabs/Module/Tokens.php:261
+msgid ""
+"Use this form to create temporary access identifiers to share things with "
+"non-members. These identities may be used in privacy groups and visitors may "
+"login using these credentials to access private content."
msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:403
-msgid "Main page content"
+#: ../../Zotlabs/Module/Tokens.php:274
+msgid "Please select a role for this guest!"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:404
-msgid "The main page content can not be edited!"
+#: ../../Zotlabs/Module/Tokens.php:287
+msgid "Select a role for this guest"
msgstr ""
-#: ../../Zotlabs/Module/Chanview.php:132
-msgid "toggle full screen mode"
+#: ../../Zotlabs/Module/Tokens.php:291
+msgid "Login Name"
msgstr ""
-#: ../../Zotlabs/Module/Chatsvc.php:131
-msgid "Away"
-msgstr "Borte"
+#: ../../Zotlabs/Module/Tokens.php:292
+msgid "Login Password"
+msgstr ""
-#: ../../Zotlabs/Module/Chatsvc.php:136
-msgid "Online"
-msgstr "Online"
+#: ../../Zotlabs/Module/Tokens.php:293
+msgid "Expires (yyyy-mm-dd)"
+msgstr ""
#: ../../Zotlabs/Module/Permcats.php:59
msgid "Contact role deleted."
@@ -11677,10 +11292,6 @@ msgstr ""
msgid "Automatically assign this role to new contacts"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:248 ../../Zotlabs/Lib/Apps.php:379
-msgid "Contact Roles"
-msgstr ""
-
#: ../../Zotlabs/Module/Permcats.php:249
msgid "Role name"
msgstr ""
@@ -11693,11 +11304,6 @@ msgstr ""
msgid "Deleting"
msgstr ""
-#: ../../Zotlabs/Module/Permcats.php:253 ../../Zotlabs/Module/Defperms.php:261
-#: ../../Zotlabs/Module/Connedit.php:713
-msgid "inherited"
-msgstr "arvet"
-
#: ../../Zotlabs/Module/Permcats.php:255
msgid "Role Permissions"
msgstr ""
@@ -11708,4261 +11314,4557 @@ msgid ""
"role</a>, which have higher priority than contact role settings."
msgstr ""
-#: ../../Zotlabs/Module/Email_resend.php:12
-#: ../../Zotlabs/Module/Email_validation.php:24
-msgid "Token verification failed."
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Channel.php:106
+#: ../../Zotlabs/Module/Settings/Channel.php:218
+msgid "Please select a channel role"
+msgstr "Velg en kanalrolle"
-#: ../../Zotlabs/Module/Email_resend.php:30
-msgid "Email verification resent"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Channel.php:195
+msgid "Your channel address is"
+msgstr "Din kanaladresse er"
-#: ../../Zotlabs/Module/Email_resend.php:33
-msgid "Unable to resend email verification message."
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Channel.php:198
+msgid "Your files/photos are accessible via WebDAV at"
+msgstr "Dine filer og foto er tilgjengelig via WebDAV på"
-#: ../../Zotlabs/Module/Cal.php:62
-msgid "Permissions denied."
-msgstr "Tillatelse avvist."
+#: ../../Zotlabs/Module/Settings/Channel.php:229
+msgid "Channel Settings"
+msgstr "Kanalinnstillinger"
-#: ../../Zotlabs/Module/Viewsrc.php:43
-msgid "item"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Channel.php:236
+msgid "Basic Settings"
+msgstr "Grunninnstillinger"
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of Pinned Navbar Apps"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Channel.php:237
+msgid "Channel timezone:"
+msgstr "Tidssone for kanalen:"
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of App Tray Apps"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Channel.php:238
+msgid "Default post location:"
+msgstr "Standard plassering for innlegg:"
-#: ../../Zotlabs/Module/Apporder.php:48
-msgid ""
-"Use arrows to move the corresponding app left (top) or right (bottom) in the "
-"navbar"
+#: ../../Zotlabs/Module/Settings/Channel.php:238
+msgid "Geographical location to display on your posts"
+msgstr "Geografisk plassering som vises på dine innlegg"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:239
+msgid "Use browser location"
+msgstr "Bruk nettleserplassering"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "Adult content"
+msgstr "Voksent innhold"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "This channel frequently or regularly publishes adult content"
msgstr ""
+"Denne kanalen vil ofte, eller regelmessig poste innlegg med voksent innhold"
-#: ../../Zotlabs/Module/Apporder.php:48
-msgid "Use arrows to move the corresponding app up or down in the app tray"
+#: ../../Zotlabs/Module/Settings/Channel.php:241
+msgid "Maximum Friend Requests/Day:"
+msgstr "Maksimalt antall venneforespørsler per dag:"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:241
+msgid "May reduce spam activity"
+msgstr "Kan redusere søppelpostaktivitet"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:243
+msgid "By default post a status message when:"
+msgstr "Legg inn en statusmelding når du:"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:244
+msgid "accepting a friend request"
+msgstr "aksepterer en venneforespørsel"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:245
+msgid "joining a forum/community"
+msgstr "blir med i et forum/miljø"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:246
+msgid "making an <em>interesting</em> profile change"
+msgstr "gjør en <em>interessant</em> profilendring"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:247
+msgid "Send a notification email when:"
+msgstr "Send en varsel-e-post når:"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:248
+msgid "You receive a connection request"
+msgstr "Du har mottatt en forespørsel om forbindelse"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:249
+msgid "Your connections are confirmed"
+msgstr "Dine forbindelser er bekreftet"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:250
+msgid "Someone writes on your profile wall"
+msgstr "Noen skriver på din profilvegg"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:251
+msgid "Someone writes a followup comment"
+msgstr "Noen skriver en oppfølgende kommentar"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:252
+msgid "You receive a private message"
+msgstr "Du mottar en privat melding"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:253
+msgid "You receive a friend suggestion"
+msgstr "Du mottok et venneforslag"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:254
+msgid "You are tagged in a post"
+msgstr "Du merkes i et innlegg"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:255
+msgid "You are poked/prodded/etc. in a post"
+msgstr "Du ble prikket/oppildnet/og så vider i et innlegg"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:256
+msgid "Someone likes your post/comment"
msgstr ""
-#: ../../Zotlabs/Module/Oexchange.php:27
-msgid "Unable to find your hub."
-msgstr "Ikke i stand til å finne hubben din."
+#: ../../Zotlabs/Module/Settings/Channel.php:257
+msgid "Show visual notifications including:"
+msgstr "Vis visuelle varslinger om:"
-#: ../../Zotlabs/Module/Oexchange.php:41
-msgid "Post successful."
-msgstr "Innlegg vellykket."
+#: ../../Zotlabs/Module/Settings/Channel.php:258
+msgid "Unseen stream activity"
+msgstr "Ny aktivitet i nettverksstrømmen"
-#: ../../Zotlabs/Module/Moderate.php:70
-#, fuzzy
-#| msgid "Account approved."
-msgid "Item approved"
-msgstr "Konto godkjent."
+#: ../../Zotlabs/Module/Settings/Channel.php:259
+msgid "Unseen channel activity"
+msgstr "Ny kanalaktivitet"
-#: ../../Zotlabs/Module/Removeaccount.php:35
+#: ../../Zotlabs/Module/Settings/Channel.php:260
+msgid "Unseen private messages"
+msgstr "Nye private meldinger"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:260
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+#: ../../Zotlabs/Module/Settings/Channel.php:267
+msgid "Recommended"
+msgstr "Anbefalt"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:261
+msgid "Upcoming events"
+msgstr "Kommende hendelser"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:262
+msgid "Events today"
+msgstr "Hendelser idag"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:263
+msgid "Upcoming birthdays"
+msgstr "Kommende fødselsdager"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:263
+msgid "Not available in all themes"
+msgstr "Ikke tilgjengelig i alle temaer"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:264
+msgid "System (personal) notifications"
+msgstr "System (personlige) varslinger"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+msgid "System info messages"
+msgstr "System infomeldinger"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+msgid "System critical alerts"
+msgstr "System kritiske varsel"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:267
+msgid "New connections"
+msgstr "Nye forbindelser"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:268
+msgid "System Registrations"
+msgstr "Systemregistreringer"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:269
+msgid "Unseen shared files"
+msgstr "Nye delte filer"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:270
+msgid "Unseen public stream activity"
+msgstr "Ny aktivitet i den offentlige strømmen"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:271
+msgid "Unseen likes and dislikes"
+msgstr "Nye liker/ikke liker"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:272
+msgid "Unseen forum posts"
+msgstr "Ny forumpost"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:273
+msgid "Email notification hub (hostname)"
+msgstr "Hub for epostvarsler (tjenernavn)"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:273
+#, php-format
msgid ""
-"Account removals are not allowed within 48 hours of changing the account "
-"password."
+"If your channel is mirrored to multiple hubs, set this to your preferred "
+"location. This will prevent duplicate email notifications. Example: %s"
msgstr ""
-"Sletting av kontoer er ikke tillatt innen 48 timer etter endring av "
-"kontopassordet."
+"Hvis kanalen din er klonet til flere tjenere kan du sette dette til den du vil"
+" skal sende deg epostvarsler. Dette vil forhindre duplikate epostvarsler. Ekse"
+"mpel: %s"
-#: ../../Zotlabs/Module/Removeaccount.php:57
-msgid "Remove This Account"
-msgstr "Slett denne kontoen"
+#: ../../Zotlabs/Module/Settings/Channel.php:274
+msgid "Show new wall posts, private messages and connections under Notices"
+msgstr "Vis nye veggposter, private meldinger og forbindelser under varsler"
-#: ../../Zotlabs/Module/Removeaccount.php:58
+#: ../../Zotlabs/Module/Settings/Channel.php:275
+msgid "Mark all notices of the thread read if a notice is clicked"
+msgstr "Merk alle varsler for en tråd som lest når du klikker på ett varsel"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:275
+msgid "If no, only the clicked notice will be marked read"
+msgstr ""
+"Om du velger \"Nei\", blir kun det varslet du klikker på merket som lest"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:276
msgid ""
-"This account and all its channels will be completely removed from the "
-"network. "
+"Desktop notifications are unavailable because the required browser "
+"permission has not been granted"
msgstr ""
-"Denne kontoen og alle dens kanaler vil bli fullstendig fjernet fra "
-"nettverket. "
+"Skriverbordsvarsler er ikke tilgjengelig fordi nettstedet ikke har de nødvendi"
+"ge nettlesertillatelsene"
-#: ../../Zotlabs/Module/Removeaccount.php:58
-msgid "This action is permanent and can not be undone!"
-msgstr "Denne handlingen er permanent og kan ikke angres!"
+#: ../../Zotlabs/Module/Settings/Channel.php:277
+msgid "Grant permission"
+msgstr "Gi tilgang"
-#: ../../Zotlabs/Module/Removeaccount.php:61
-#: ../../Zotlabs/Module/Settings/Account.php:111
-msgid "Remove Account"
-msgstr "Slett konto"
+#: ../../Zotlabs/Module/Settings/Channel.php:278
+msgid "Notify me of events this many days in advance"
+msgstr "Varsle meg om hendelser dette antall dager på forhånd"
-#: ../../Zotlabs/Module/Lang.php:20
-msgid "Language App"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Channel.php:278
+msgid "Must be greater than 0"
+msgstr "Må være større enn 0"
-#: ../../Zotlabs/Module/Uexport.php:108
-msgid "No content available for year"
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+msgid "Default photo upload folder"
+msgstr "Standard mappe for opplasting av bilder"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+#: ../../Zotlabs/Module/Settings/Channel.php:282
+msgid "%Y - current year, %m - current month"
+msgstr "%Y - nåværende år, %m - nåværende måned"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:282
+msgid "Default file upload folder"
+msgstr "Standard mappe for opplasting av filer"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "Remove this channel."
+msgstr "Fjern denne kanalen."
+
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "Expire other channel content after this many days"
+msgstr "Annet kanal innhold utløper etter så mange dager"
+
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "0 or blank to use the website limit."
+msgstr "0 eller la være tomt for å bruke grensen til nettstedet."
+
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+#, php-format
+msgid "This website expires after %d days."
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:171
-msgid "Export Channel"
-msgstr "Eksporter kanal"
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "This website does not expire imported content."
+msgstr "Dette nettstedet sletter ikke importert innhold."
-#: ../../Zotlabs/Module/Uexport.php:173
-msgid "Export channel"
-msgstr "Eksporter kanal"
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "The website limit takes precedence if lower than your limit."
+msgstr "Nettstedets grense vil gjelde dersom den er lavere enn din grense."
-#: ../../Zotlabs/Module/Uexport.php:174
+#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Settings/Channel.php:287
msgid ""
-"This will export your identity and social graph into a file which can be "
-"used to import your channel to a new hub."
+"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
+"leave blank to import all posts"
msgstr ""
+"Ett ord per linje eller #emneknagger, $kategorier, /mønster/, lang=xx, lang!"
+"=xx - la være tomt for å importere alle innlegg"
-#: ../../Zotlabs/Module/Uexport.php:177
-msgid "Export content"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Featured.php:25
+msgid "No feature settings configured"
+msgstr "Ingen funksjonsinnstillinger er konfigurert"
-#: ../../Zotlabs/Module/Uexport.php:178
-msgid ""
-"This will export your posts, direct messages, articles and cards per month "
-"stored into a zip file per year. Months with no posts will be dismissed."
+#: ../../Zotlabs/Module/Settings/Featured.php:34
+msgid "Addon Settings"
+msgstr "Instillinger for tillegg"
+
+#: ../../Zotlabs/Module/Settings/Featured.php:35
+msgid "Please save/submit changes to any panel before opening another."
+msgstr "Husk å lagre endringene i ett panel før du åpner andre."
+
+#: ../../Zotlabs/Module/Settings/Editor.php:40
+msgid "Editor Settings"
+msgstr "Instillinger for redigering"
+
+#: ../../Zotlabs/Module/Settings/Photos.php:40
+msgid "Photos Settings"
msgstr ""
-"Dette vil eksportere dine innlegg, direktemeldinger, artikler og kort, en "
-"fil for hver måned, pakket i en zip fil for hvert år. Måneder uten innhold "
-"blir ignorert."
-#: ../../Zotlabs/Module/Uexport.php:180
-msgid "Export wikis"
+#: ../../Zotlabs/Module/Settings/Profiles.php:41
+msgid "Default profile for new contacts"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:181
-msgid "This will export your wikis and wiki pages."
+#: ../../Zotlabs/Module/Settings/Profiles.php:49
+msgid "Profiles Settings"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:183
-msgid "Export webpages"
+#: ../../Zotlabs/Module/Settings/Network.php:42
+#: ../../Zotlabs/Module/Settings/Channel_home.php:46
+msgid "Max height of content (in pixels)"
+msgstr "Maks høyde for innhold (i piksler)"
+
+#: ../../Zotlabs/Module/Settings/Network.php:44
+#: ../../Zotlabs/Module/Settings/Channel_home.php:48
+msgid "Click to expand content exceeding this height"
+msgstr "Klikk for å vise hele innlegg som overskrider denne grensen"
+
+#: ../../Zotlabs/Module/Settings/Network.php:59
+msgid "Stream Settings"
+msgstr "Instillinger for tidslinjen"
+
+#: ../../Zotlabs/Module/Settings/Directory.php:40
+msgid "Directory Settings"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:184
-msgid "This will export your webpages and menus."
+#: ../../Zotlabs/Module/Settings/Channel_home.php:61
+msgid "Personal menu to display in your channel pages"
+msgstr "Personlig meny som kan vises på dine kanalsider"
+
+#: ../../Zotlabs/Module/Settings/Channel_home.php:88
+msgid "Channel Home Settings"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:186
-msgid "Export channel calendar"
+#: ../../Zotlabs/Module/Settings/Calendar.php:40
+msgid "Calendar Settings"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:187
-msgid ""
-"This will export your channel calendar events and associated items. CalDAV "
-"calendars are not included."
+#: ../../Zotlabs/Module/Settings/Conversation.php:42
+msgid "Conversation Settings"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:189
-msgid "Export chatrooms"
+#: ../../Zotlabs/Module/Settings/Features.php:45
+msgid "Additional Features"
+msgstr "Ekstra funksjoner"
+
+#: ../../Zotlabs/Module/Settings/Connections.php:40
+msgid "Connections Settings"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:190
-msgid "This will export your chatrooms. Chat history is dismissed."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:23
+#, fuzzy
+#| msgid "Name is required"
+msgid "Password is required"
+msgstr "Navn er påkrevd"
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:29
+msgid "The provided password is not correct"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:192
-#, php-format
+#: ../../Zotlabs/Module/Settings/Multifactor.php:68
+msgid "Account Multi-Factor Authentication"
+msgstr "Tofaktorautentisering"
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:69
msgid ""
-"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</"
-"a> on any site containing your channel."
+"This is your generated secret. It may be used in some cases if the QR image "
+"cannot be read. Please store it in a safe place."
msgstr ""
+"Dette er en generert sikkerhetskode. Den kan være nyttig i enkelte tilfeller "
+"hvor QR koden ikke kan leses. Lagre den et sikkert sted."
-#: ../../Zotlabs/Module/Display.php:341
-msgid "Article"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:70
+msgid "Please enter the code from your authenticator app"
+msgstr "Skriv inn koden fra din autentiseringsapp"
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:71
+msgid "You will only be able to enable MFA if the test passes"
msgstr ""
+"Flerfaktorautentisering vil kun bli slått på dersom denne testen lykkes"
-#: ../../Zotlabs/Module/Display.php:385
-msgid "Item has been removed."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:75
+msgid "Congratulations, the provided code was correct"
msgstr ""
-#: ../../Zotlabs/Module/Common.php:14
-msgid "No channel."
-msgstr "Ingen kanal."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:76
+msgid "Incorrect code"
+msgstr ""
-#: ../../Zotlabs/Module/Common.php:45
-msgid "No connections in common."
-msgstr "Ingen forbindelser felles."
+#: ../../Zotlabs/Module/Settings/Multifactor.php:79
+#, fuzzy
+#| msgid "Failed authentication"
+msgid "Enable Multi-Factor Authentication"
+msgstr "Mislykket autentisering"
-#: ../../Zotlabs/Module/Common.php:65
-msgid "View Common Connections"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:81
+msgid "Logging in will require you to be in possession of your smartphone"
msgstr ""
-#: ../../Zotlabs/Module/Impel.php:188
-#, php-format
-msgid "%s element installed"
-msgstr "%s element installert"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:84
+#, fuzzy
+#| msgid "Your new password is"
+msgid "Your account password"
+msgstr "Ditt nye passord er"
-#: ../../Zotlabs/Module/Impel.php:191
-#, php-format
-msgid "%s element installation failed"
-msgstr "Installasjon av %s-element mislyktes"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:86
+msgid "Test"
+msgstr "Sjekk koden"
-#: ../../Zotlabs/Module/New_channel.php:159
-msgid "Your real name is recommended."
+#: ../../Zotlabs/Module/Settings/Events.php:40
+msgid "Events Settings"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:160
+#: ../../Zotlabs/Module/Settings/Account.php:23
+msgid "Not valid email."
+msgstr "Ikke gyldig e-post."
+
+#: ../../Zotlabs/Module/Settings/Account.php:26
+msgid "Protected email address. Cannot change to that email."
+msgstr "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen."
+
+#: ../../Zotlabs/Module/Settings/Account.php:35
+msgid "System failure storing new email. Please try again."
+msgstr "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen."
+
+#: ../../Zotlabs/Module/Settings/Account.php:53
+msgid "Password verification failed."
+msgstr "Passordbekreftelsen mislyktes."
+
+#: ../../Zotlabs/Module/Settings/Account.php:60
+msgid "Passwords do not match. Password unchanged."
+msgstr "Passordene stemmer ikke overens. Passord uforandret."
+
+#: ../../Zotlabs/Module/Settings/Account.php:64
+msgid "Empty passwords are not allowed. Password unchanged."
+msgstr "Tomme passord er ikke tillatt. Passord uforandret."
+
+#: ../../Zotlabs/Module/Settings/Account.php:78
+msgid "Password changed."
+msgstr "Passord endret."
+
+#: ../../Zotlabs/Module/Settings/Account.php:80
+msgid "Password update failed. Please try again."
+msgstr "Passord oppdatering mislyktes. Vennligst prøv igjen."
+
+#: ../../Zotlabs/Module/Settings/Account.php:105
+msgid "Account Settings"
+msgstr "Kontoinnstillinger"
+
+#: ../../Zotlabs/Module/Settings/Account.php:106
+msgid "Current Password"
+msgstr "Nåværende passord"
+
+#: ../../Zotlabs/Module/Settings/Account.php:107
+msgid "Enter New Password"
+msgstr "Skriv nytt passord"
+
+#: ../../Zotlabs/Module/Settings/Account.php:108
+msgid "Confirm New Password"
+msgstr "Bekreft nytt passord"
+
+#: ../../Zotlabs/Module/Settings/Account.php:108
+msgid "Leave password fields blank unless changing"
+msgstr "La passordfeltene stå blanke om det ikke skal endres"
+
+#: ../../Zotlabs/Module/Settings/Account.php:110
+msgid "Multi-Factor Authentication"
+msgstr "Flerfaktorautentisering"
+
+#: ../../Zotlabs/Module/Settings/Account.php:111
+msgid "DId2 or Email Address:"
+msgstr "DId2 eller epostadresse:"
+
+#: ../../Zotlabs/Module/Settings/Account.php:114
+msgid "Remove this account including all its channels"
+msgstr "Slett denne kontoen inkludert alle dens kanaler"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:49
+msgid "Privacy settings updated."
+msgstr "Personverninnstillingene ble oppdatert."
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:67
+msgid "Only those you specifically allow"
+msgstr "Bare de du spesifikt tillater"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:68
+msgid "Approved connections"
+msgstr "Godkjente forbindelser"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:69
+msgid "Any connections"
+msgstr "Enhver forbindelse"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:70
+msgid "Anybody on this website"
+msgstr "Enhver ved dette nettstedet"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:71
+msgid "Anybody in this network"
+msgstr "Enhver i dette nettverket"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:72
+msgid "Anybody authenticated"
+msgstr "Enhver som er autentisert"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:73
+msgid "Anybody on the internet"
+msgstr "Enhver på Internett"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:83
msgid ""
-"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation "
-"Group\""
+"Advise: set to \"Anybody on the internet\" and use privacy groups to "
+"restrict access"
msgstr ""
-"Eksempel: \"Ola Nordmann\", \"Lisa og hestene hennes\", \"Fotball\", "
-"\"Sykkelgruppa\""
-#: ../../Zotlabs/Module/New_channel.php:165
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
+msgid "Privacy Settings"
+msgstr "Personverninnstillinger"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:127
+msgid "Advanced configuration"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:129
+msgid "Proceed with caution"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:130
msgid ""
-"This will be used to create a unique network address (like an email address)."
+"Changing advanced configuration settings can impact your, and your contacts "
+"channels functionality and security."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:167
-msgid "Allowed characters are a-z 0-9, - and _"
+#: ../../Zotlabs/Module/Settings/Privacy.php:131
+msgid "Accept the risk and continue"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:175
-#, fuzzy
-msgid "Channel name"
-msgstr "Kanalnavn"
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
+msgid "Automatically approve new contacts"
+msgstr "Automatisk godkjenn nye kontakter"
-#: ../../Zotlabs/Module/New_channel.php:178
-#: ../../Zotlabs/Module/Settings/Channel.php:233
-msgid "Channel role"
-msgstr "Kanalrolle"
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
+msgid "Opt-out of search engine indexing"
+msgstr "Ikke la søkemotorer indeksere denne kanalen"
-#: ../../Zotlabs/Module/New_channel.php:181
-msgid "Create a Channel"
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+msgid "Group actor"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:182
-msgid ""
-"A channel is a unique network identity. It can represent a person (social "
-"network profile), a forum (group), a business or celebrity page, a newsfeed, "
-"and many other things."
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
+msgid "Allow this channel to act as a forum"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:183
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+msgid "Accept all messages which mention you"
+msgstr "Godta alle meldinger som nevner deg"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
+msgid "This setting bypasses normal permissions"
+msgstr "Denne instillingen overstyrer vanlig tilgangskontroll"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+msgid "Accept unsolicited comments for moderation"
+msgstr "Godta kommentarer fra fremmede for moderering"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
+msgid "Otherwise they will be silently dropped"
+msgstr "Ellers vil de avvises uten varsel"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+msgid "Enable OCAP access"
+msgstr "Slå på OCAP tilgangskontroll"
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+msgid "Grant limited posts the right to access linked private media"
+msgstr "Gi begrensede innlegg tilgang til private media som er lenket fra dem"
+
+#: ../../Zotlabs/Module/Settings/Display.php:126
+#, php-format
+msgid "%s - (Experimental)"
+msgstr "%s - (Eksperimentelt)"
+
+#: ../../Zotlabs/Module/Settings/Display.php:183
+msgid "Display Settings"
+msgstr "Visningsinnstillinger"
+
+#: ../../Zotlabs/Module/Settings/Display.php:184
+msgid "Theme Settings"
+msgstr "Temainnstillinger"
+
+#: ../../Zotlabs/Module/Settings/Display.php:185
+msgid "Custom Theme Settings"
+msgstr "Tilpassede temainnstillinger"
+
+#: ../../Zotlabs/Module/Settings/Display.php:186
+msgid "Content Settings"
+msgstr "Innholdsinnstillinger"
+
+#: ../../Zotlabs/Module/Settings/Display.php:192
+msgid "Display Theme:"
+msgstr "Visningstema:"
+
+#: ../../Zotlabs/Module/Settings/Display.php:193
+msgid "Select scheme"
+msgstr "Velg skjema"
+
+#: ../../Zotlabs/Module/Settings/Display.php:195
+msgid "Preload images before rendering the page"
+msgstr "Last inn bildene før gjengivelsen av siden"
+
+#: ../../Zotlabs/Module/Settings/Display.php:195
msgid ""
-"or <a href=\"import\">import an existing channel</a> from another location."
+"The subjective page load time will be longer but the page will be ready when "
+"displayed"
msgstr ""
-"eller <a href=\"import\">importer en eksisterende kanal</a> fra et annet "
-"sted."
+"Den personlige opplevelsen av lastetiden vil være lenger, men siden vil være "
+"klar når den vises"
-#: ../../Zotlabs/Module/New_channel.php:188
-msgid "Validate"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Display.php:196
+msgid "Enable user zoom on mobile devices"
+msgstr "Skru på brukerstyrt zoom på mobile enheter"
-#: ../../Zotlabs/Module/Dircensor.php:61
-msgid "Entry censored"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Display.php:197
+msgid "Update browser every xx seconds"
+msgstr "Oppdater nettleser hvert xx sekunder"
-#: ../../Zotlabs/Module/Dircensor.php:64
-msgid "Entry OK"
-msgstr ""
+#: ../../Zotlabs/Module/Settings/Display.php:197
+msgid "Minimum of 10 seconds, no maximum"
+msgstr "Minimum 10 sekunder, ikke noe maksimum"
-#: ../../Zotlabs/Module/Service_limits.php:23
-msgid "No service class restrictions found."
-msgstr "Ingen restriksjoner er funnet i tjenesteklasse."
+#: ../../Zotlabs/Module/Settings/Display.php:198
+msgid "Maximum number of conversations to load at any time:"
+msgstr "Maksimalt antall samtaler å laste samtidig:"
-#: ../../Zotlabs/Module/Mood.php:152 ../../Zotlabs/Lib/Apps.php:355
-msgid "Mood"
-msgstr "Stemning"
+#: ../../Zotlabs/Module/Settings/Display.php:198
+msgid "Maximum of 30 items"
+msgstr ""
-#: ../../Zotlabs/Module/Mood.php:153
-msgid "Set your current mood and tell your friends"
-msgstr "Angi ditt nåværende humør og fortell dine venner"
+#: ../../Zotlabs/Module/Settings/Display.php:199
+msgid "Show emoticons (smilies) as images"
+msgstr "Vis emoticons (smilefjes) som bilder"
-#: ../../Zotlabs/Module/Siteinfo.php:21
-msgid "About this site"
-msgstr "Om dette nettstedet "
+#: ../../Zotlabs/Module/Settings/Display.php:200
+msgid "Link post titles to source"
+msgstr "Lenk innleggets tittel til kilden"
-#: ../../Zotlabs/Module/Siteinfo.php:22
-#, fuzzy
-msgid "Site Name"
-msgstr "Nettstedets navn"
+#: ../../Zotlabs/Module/Settings/Display.php:202
+#: ../../Zotlabs/Widget/Newmember.php:82
+msgid "New Member Links"
+msgstr "Lenker for nye medlemmer"
-#: ../../Zotlabs/Module/Siteinfo.php:26
-msgid "Administrator"
-msgstr "Administrator"
+#: ../../Zotlabs/Module/Settings/Display.php:202
+msgid "Display new member quick links menu"
+msgstr "Vis hurtiglenker for nye medlemmer"
-#: ../../Zotlabs/Module/Siteinfo.php:29
-msgid "Software and Project information"
-msgstr "Program- og prosjektinformasjon"
+#: ../../Zotlabs/Module/Settings/Manage.php:41
+msgid "Channel Manager Settings"
+msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:30
-msgid "This site is powered by $Projectname"
-msgstr "Dette nettstedet drives av $Projectname"
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of Pinned Navbar Apps"
+msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:31
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of App Tray Apps"
+msgstr ""
+
+#: ../../Zotlabs/Module/Apporder.php:48
msgid ""
-"Federated and decentralised networking and identity services provided by Zot"
-msgstr "Fødererte og desentraliserte nettverks- og identitetstjenester via Zot"
+"Use arrows to move the corresponding app left (top) or right (bottom) in the "
+"navbar"
+msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:34
-msgid "Additional federated transport protocols:"
-msgstr "Øvrige fødererte transportprotokoller:"
+#: ../../Zotlabs/Module/Apporder.php:48
+msgid "Use arrows to move the corresponding app up or down in the app tray"
+msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:36
-#, php-format
-msgid "Version %s"
-msgstr "Versjon %s"
+#: ../../Zotlabs/Module/Like.php:111
+msgid "Like/Dislike"
+msgstr "Liker/Liker ikke"
-#: ../../Zotlabs/Module/Siteinfo.php:37
-msgid "Project homepage"
-msgstr "Prosjektets hjemmeside"
+#: ../../Zotlabs/Module/Like.php:117
+msgid "This action is restricted to members."
+msgstr "Denne handlingen er begrenset til medlemmer."
-#: ../../Zotlabs/Module/Siteinfo.php:38
-msgid "Developer homepage"
-msgstr "Utviklers hjemmeside"
+#: ../../Zotlabs/Module/Like.php:118
+msgid ""
+"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
+"href=\"register\">register as a new $Projectname member</a> to continue."
+msgstr ""
+"Vennligst <a href=\"rmagic\">logg inn med din $Projectname ID</a> eller <a "
+"href=\"register\">registrer deg som et nytt $Projectname-medlem</a> for å "
+"fortsette."
-#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
-msgid "App installed."
-msgstr "App installert."
+#: ../../Zotlabs/Module/Like.php:171 ../../Zotlabs/Module/Like.php:197
+#: ../../Zotlabs/Module/Like.php:230
+msgid "Invalid request."
+msgstr "Ugyldig forespørsel."
-#: ../../Zotlabs/Module/Appman.php:49
-msgid "Malformed app."
-msgstr "Feil oppsett for app-en."
+#: ../../Zotlabs/Module/Like.php:212
+msgid "thing"
+msgstr "ting"
-#: ../../Zotlabs/Module/Appman.php:198
-msgid "Embed code"
-msgstr "Innbyggingskode"
+#: ../../Zotlabs/Module/Like.php:253
+msgid "Channel unavailable."
+msgstr "Kanalen er utilgjengelig."
-#: ../../Zotlabs/Module/Appman.php:203
-msgid "Edit App"
-msgstr "Endre app"
+#: ../../Zotlabs/Module/Like.php:289
+msgid "Previous action reversed."
+msgstr "Forrige handling er omgjort."
-#: ../../Zotlabs/Module/Appman.php:203
-msgid "Create App"
-msgstr "Lag app"
+#: ../../Zotlabs/Module/Like.php:453
+#, fuzzy
+#| msgid "Profile"
+msgid "profile"
+msgstr "Profil"
-#: ../../Zotlabs/Module/Appman.php:208
-msgid "Name of app"
-msgstr "Navn på app"
+#: ../../Zotlabs/Module/Like.php:487
+#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2248
+#, php-format
+msgid "%1$s is attending %2$s's %3$s"
+msgstr "%1$s deltar på %2$ss %3$s"
-#: ../../Zotlabs/Module/Appman.php:209
-msgid "Location (URL) of app"
-msgstr "Plassering (URL) til app"
+#: ../../Zotlabs/Module/Like.php:489
+#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2250
+#, php-format
+msgid "%1$s is not attending %2$s's %3$s"
+msgstr "%1$s deltar ikke på %2$ss %3$s"
-#: ../../Zotlabs/Module/Appman.php:211
-msgid "Photo icon URL"
-msgstr "Bildeikon URL"
+#: ../../Zotlabs/Module/Like.php:491
+#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2252
+#, php-format
+msgid "%1$s may attend %2$s's %3$s"
+msgstr "%1$s deltar kanskje på %2$ss %3$s"
-#: ../../Zotlabs/Module/Appman.php:211
-msgid "80 x 80 pixels - optional"
-msgstr "80 x80 pixler - valgfritt"
+#: ../../Zotlabs/Module/Like.php:615
+msgid "Action completed."
+msgstr "Handling ferdig."
-#: ../../Zotlabs/Module/Appman.php:212
-#, fuzzy
-msgid "Categories (optional, comma separated list)"
-msgstr "Kategorier (valgfri, kommaseparert liste)"
+#: ../../Zotlabs/Module/Like.php:616
+msgid "Thank you."
+msgstr "Tusen takk."
-#: ../../Zotlabs/Module/Appman.php:213
-msgid "Version ID"
-msgstr "Versjons-ID"
+#: ../../Zotlabs/Module/Follow.php:75
+msgid "Connection added."
+msgstr ""
-#: ../../Zotlabs/Module/Appman.php:214
-msgid "Price of app"
-msgstr "Pris på app"
+#: ../../Zotlabs/Module/Chatsvc.php:131
+msgid "Away"
+msgstr "Borte"
-#: ../../Zotlabs/Module/Appman.php:215
-msgid "Location (URL) to purchase app"
-msgstr "Plassering (URL) for å kjøpe app"
+#: ../../Zotlabs/Module/Chatsvc.php:136
+msgid "Online"
+msgstr "Online"
-#: ../../Zotlabs/Module/Admin.php:96
+#: ../../Zotlabs/Module/Admin.php:98
msgid "Blocked accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:97
+#: ../../Zotlabs/Module/Admin.php:99
msgid "Expired accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:98
+#: ../../Zotlabs/Module/Admin.php:100
msgid "Expiring accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:122
+#: ../../Zotlabs/Module/Admin.php:124
msgid "Message queues"
msgstr "Meldingskøer"
-#: ../../Zotlabs/Module/Admin.php:136
+#: ../../Zotlabs/Module/Admin.php:138
msgid "Your software should be updated"
msgstr "Programvaren bør oppdateres"
-#: ../../Zotlabs/Module/Admin.php:141
+#: ../../Zotlabs/Module/Admin.php:143
msgid "Summary"
msgstr "Sammendrag"
-#: ../../Zotlabs/Module/Admin.php:144
+#: ../../Zotlabs/Module/Admin.php:146
msgid "Registered accounts"
msgstr "Registrerte kontoer"
-#: ../../Zotlabs/Module/Admin.php:145
+#: ../../Zotlabs/Module/Admin.php:147
msgid "Pending registrations"
msgstr "Ventende registreringer"
-#: ../../Zotlabs/Module/Admin.php:146
+#: ../../Zotlabs/Module/Admin.php:148
msgid "Registered channels"
msgstr "Registrerte kanaler"
-#: ../../Zotlabs/Module/Admin.php:147
-msgid "Active addons"
-msgstr "Aktive tillegg"
-
-#: ../../Zotlabs/Module/Admin.php:148
+#: ../../Zotlabs/Module/Admin.php:150
msgid "Version"
msgstr "Versjon"
-#: ../../Zotlabs/Module/Admin.php:149
+#: ../../Zotlabs/Module/Admin.php:151
msgid "Repository version (master)"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:150
+#: ../../Zotlabs/Module/Admin.php:152
msgid "Repository version (dev)"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:50
-msgid "Invalid abook_id"
+#: ../../Zotlabs/Module/Authorize.php:17
+msgid "Unknown App"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:78 ../../Zotlabs/Module/Defperms.php:67
-#: ../../Zotlabs/Module/Connedit.php:80
-msgid "Could not access contact record."
-msgstr "Fikk ikke tilgang til kontaktinformasjonen."
+#: ../../Zotlabs/Module/Authorize.php:29
+msgid "Authorize"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:107
-#: ../../Zotlabs/Module/Connedit.php:101
-msgid "Could not locate selected profile."
-msgstr "Fant ikke valgt profil."
+#: ../../Zotlabs/Module/Authorize.php:30
+#, php-format
+msgid "Do you authorize the app %s to access your channel data?"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:192
-#: ../../Zotlabs/Module/Connedit.php:215
-msgid "is now connected to"
-msgstr "er nå forbundet til"
+#: ../../Zotlabs/Module/Go.php:22
+msgid "This page is available only to site members"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:252
-#: ../../Zotlabs/Module/Contactedit.php:401
-#: ../../Zotlabs/Module/Connedit.php:701
-msgid "Contact Tools"
+#: ../../Zotlabs/Module/Go.php:28
+#: ../../Zotlabs/Widget/Channel_activities.php:29
+msgid "Welcome"
+msgstr "Velkommen"
+
+#: ../../Zotlabs/Module/Go.php:30
+msgid "What would you like to do?"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:329
-#: ../../Zotlabs/Module/Connedit.php:622
-msgid "Approve this contact"
+#: ../../Zotlabs/Module/Go.php:32
+msgid ""
+"Please bookmark this page if you would like to return to it in the future"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:329
-#: ../../Zotlabs/Module/Connedit.php:622
-msgid "Accept contact to allow communication"
+#: ../../Zotlabs/Module/Go.php:36
+msgid "Upload a profile photo"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:362
-#: ../../Zotlabs/Module/Connedit.php:658
-msgid "Please select a role for this contact!"
+#: ../../Zotlabs/Module/Go.php:37
+msgid "Upload a cover photo"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:382
-#: ../../Zotlabs/Module/Connedit.php:678
-msgid "This contact is unreachable from this location."
+#: ../../Zotlabs/Module/Go.php:38
+msgid "Edit your default profile"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:383
-#: ../../Zotlabs/Module/Connedit.php:679
-msgid "This contact may be unreachable from other channel locations."
+#: ../../Zotlabs/Module/Go.php:39 ../../Zotlabs/Widget/Newmember.php:48
+msgid "View friend suggestions"
+msgstr "Vis venneforslag"
+
+#: ../../Zotlabs/Module/Go.php:40
+msgid "View the channel directory"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:385
-#: ../../Zotlabs/Module/Connedit.php:681
-msgid "Location independence is not supported by their network."
+#: ../../Zotlabs/Module/Go.php:41
+msgid "View/edit your channel settings"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:395
+#: ../../Zotlabs/Module/Go.php:42
+msgid "View the site or project documentation"
+msgstr ""
+
+#: ../../Zotlabs/Module/Go.php:43
+msgid "Visit your channel homepage"
+msgstr ""
+
+#: ../../Zotlabs/Module/Go.php:44
+msgid ""
+"View your connections and/or add somebody whose address you already know"
+msgstr ""
+
+#: ../../Zotlabs/Module/Go.php:45
+msgid ""
+"View your personal stream (this may be empty until you add some connections)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Go.php:53
+msgid "View the public stream. Warning: this content is not moderated"
+msgstr ""
+
+#: ../../Zotlabs/Module/Manage.php:137
+msgid "Create a new channel"
+msgstr "Lag en ny kanal"
+
+#: ../../Zotlabs/Module/Manage.php:163
+msgid "Current Channel"
+msgstr "Gjeldende kanal"
+
+#: ../../Zotlabs/Module/Manage.php:165
+msgid "Switch to one of your channels by selecting it."
+msgstr "Bytt til en av dine kanaler ved å velge den."
+
+#: ../../Zotlabs/Module/Manage.php:166
+msgid "Default Channel"
+msgstr "Standardkanal"
+
+#: ../../Zotlabs/Module/Manage.php:167
+msgid "Make Default"
+msgstr "Gjør til standard"
+
+#: ../../Zotlabs/Module/Manage.php:170
+#, php-format
+msgid "%d new introductions"
+msgstr "%d nye introduksjoner"
+
+#: ../../Zotlabs/Module/Manage.php:172
+msgid "Delegated Channel"
+msgstr "Delegert kanal"
+
+#: ../../Zotlabs/Module/Search.php:251
+#, php-format
+msgid "Items tagged with: %s"
+msgstr "Elementer merket med: %s"
+
+#: ../../Zotlabs/Module/Search.php:253
+#, php-format
+msgid "Search results for: %s"
+msgstr "Søkeresultater for: %s"
+
+#: ../../Zotlabs/Module/Changeaddr.php:35
+msgid ""
+"Channel name changes are not allowed within 48 hours of changing the account "
+"password."
+msgstr ""
+
+#: ../../Zotlabs/Module/Changeaddr.php:77
+msgid "Change channel nickname/address"
+msgstr ""
+
+#: ../../Zotlabs/Module/Changeaddr.php:78
+msgid "Any/all connections on other networks will be lost!"
+msgstr ""
+
+#: ../../Zotlabs/Module/Changeaddr.php:80
+msgid "New channel address"
+msgstr ""
+
+#: ../../Zotlabs/Module/Changeaddr.php:81
+msgid "Rename Channel"
+msgstr ""
+
+#: ../../Zotlabs/Module/Cdav.php:819
+msgid "Calendar entries imported."
+msgstr "Kalenderhendelsene er importert."
+
+#: ../../Zotlabs/Module/Cdav.php:821
+msgid "No calendar entries found."
+msgstr "Ingen kalenderhendelser funnet."
+
+#: ../../Zotlabs/Module/Cdav.php:1000
+msgid "Event title"
+msgstr "Tittel på hendelse"
+
+#: ../../Zotlabs/Module/Cdav.php:1001
+msgid "Start date and time"
+msgstr "Startdato og tidspunkt"
+
+#: ../../Zotlabs/Module/Cdav.php:1002
+msgid "End date and time"
+msgstr ""
+
+#: ../../Zotlabs/Module/Cdav.php:1003
#, fuzzy
-msgid "View profile"
-msgstr "Vis profil"
+msgid "Timezone:"
+msgstr "Tidssone"
-#: ../../Zotlabs/Module/Contactedit.php:397
-#: ../../Zotlabs/Module/Connections.php:414
-msgid "This is a group/forum channel"
+#: ../../Zotlabs/Module/Cdav.php:1029
+#, fuzzy
+msgid "Month"
+msgstr "måned"
+
+#: ../../Zotlabs/Module/Cdav.php:1030
+#, fuzzy
+msgid "Week"
+msgstr "uke"
+
+#: ../../Zotlabs/Module/Cdav.php:1031
+#, fuzzy
+msgid "Day"
+msgstr "dag"
+
+#: ../../Zotlabs/Module/Cdav.php:1032
+msgid "List month"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:408
-msgid "Select a role for this contact"
+#: ../../Zotlabs/Module/Cdav.php:1033
+msgid "List week"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:420
-#: ../../Zotlabs/Module/Connedit.php:703
-msgid "Slide to adjust your degree of friendship"
-msgstr "Flytt for å justere din grad av vennskap"
+#: ../../Zotlabs/Module/Cdav.php:1034
+msgid "List day"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:422
-#: ../../Zotlabs/Module/Connedit.php:705
-msgid "Custom Filter"
-msgstr "Tilpasset filter"
+#: ../../Zotlabs/Module/Cdav.php:1042
+msgid "More"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:423
-#: ../../Zotlabs/Module/Settings/Channel.php:286
-#: ../../Zotlabs/Module/Connedit.php:706
-msgid "Only import posts with this text"
-msgstr "Bare importer innlegg med disse ordene"
+#: ../../Zotlabs/Module/Cdav.php:1043
+msgid "Less"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:424
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-#: ../../Zotlabs/Module/Connedit.php:707
-msgid "Do not import posts with this text"
-msgstr "Ikke importer innlegg med denne teksten"
+#: ../../Zotlabs/Module/Cdav.php:1045
+msgid "Select calendar"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:429
-#: ../../Zotlabs/Module/Connedit.php:714
-msgid "Approve contact"
+#: ../../Zotlabs/Module/Cdav.php:1046 ../../Zotlabs/Widget/Cdav.php:149
+msgid "Channel Calendars"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:431
-#: ../../Zotlabs/Module/Connedit.php:717
-msgid "Their"
+#: ../../Zotlabs/Module/Cdav.php:1046 ../../Zotlabs/Widget/Cdav.php:135
+#: ../../Zotlabs/Widget/Cdav.php:149
+msgid "CalDAV Calendars"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:432
-#: ../../Zotlabs/Module/Connedit.php:718
-msgid "My"
+#: ../../Zotlabs/Module/Cdav.php:1048
+msgid "Delete all"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:440
+#: ../../Zotlabs/Module/Cdav.php:1051
+msgid "Sorry! Editing of recurrent events is not yet implemented."
+msgstr ""
+
+#: ../../Zotlabs/Module/Cdav.php:1052
+msgid ""
+"Could not fetch calendar resource. The selected calendar might be disabled."
+msgstr ""
+
+#: ../../Zotlabs/Module/Cdav.php:1452
+msgid "Default Calendar"
+msgstr ""
+
+#: ../../Zotlabs/Module/Cdav.php:1463
+msgid "Default Addressbook"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:50
+msgid "Invalid abook_id"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:381
+#, fuzzy
+msgid "View profile"
+msgstr "Vis profil"
+
+#: ../../Zotlabs/Module/Contactedit.php:394
+msgid "Select a role for this contact"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:395
+#: ../../Zotlabs/Widget/Permcats.php:92
+msgid "Contact roles"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:426
msgid "Roles"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:441
+#: ../../Zotlabs/Module/Contactedit.php:427
msgid "Compare permissions"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:442
+#: ../../Zotlabs/Module/Contactedit.php:428
msgid "Permission"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:445
-#: ../../Zotlabs/Module/Connedit.php:572
-msgid "Affinity"
-msgstr ""
+#: ../../Zotlabs/Module/Contactedit.php:429
+#: ../../Zotlabs/Widget/Privacygroups.php:54
+#, fuzzy
+msgid "Privacy groups"
+msgstr "Personverngrupper"
-#: ../../Zotlabs/Module/Contactedit.php:446
+#: ../../Zotlabs/Module/Contactedit.php:432
msgid "Content filter"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:456
+#: ../../Zotlabs/Module/Contactedit.php:442
msgid "Contact updated"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:456
+#: ../../Zotlabs/Module/Contactedit.php:442
msgid "Contact update failed"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:462
-#: ../../Zotlabs/Module/Connections.php:357
-msgid "Approve connection"
-msgstr "Godkjenn forbindelse"
-
-#: ../../Zotlabs/Module/Contactedit.php:508
-#: ../../Zotlabs/Module/Contactedit.php:518
+#: ../../Zotlabs/Module/Contactedit.php:491
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:417
+#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1085
msgid "Refresh succeeded"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:511
+#: ../../Zotlabs/Module/Contactedit.php:494
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:412
+#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1078
#, fuzzy
-msgid "Refresh failed - channel is currently unavailable"
-msgstr "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig."
+#| msgid "Refresh"
+msgid "Refresh failed"
+msgstr "Forny"
-#: ../../Zotlabs/Module/Contactedit.php:530
+#: ../../Zotlabs/Module/Contactedit.php:520
msgid "Block status updated"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:534
+#: ../../Zotlabs/Module/Contactedit.php:524
msgid "Block failed"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:545
+#: ../../Zotlabs/Module/Contactedit.php:535
msgid "Ignore status updated"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:549
+#: ../../Zotlabs/Module/Contactedit.php:539
msgid "Ignore failed"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:560
+#: ../../Zotlabs/Module/Contactedit.php:550
msgid "Archive status updated"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:564
+#: ../../Zotlabs/Module/Contactedit.php:554
msgid "Archive failed"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:575
+#: ../../Zotlabs/Module/Contactedit.php:565
msgid "Hide status updated"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:579
+#: ../../Zotlabs/Module/Contactedit.php:569
msgid "Hide failed"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:614
+#: ../../Zotlabs/Module/Contactedit.php:604
msgid "Contact removed"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:618
+#: ../../Zotlabs/Module/Contactedit.php:608
msgid "Delete failed"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:628
-#: ../../Zotlabs/Module/Connedit.php:487
-msgid "Refresh Permissions"
-msgstr "Oppfrisk tillatelser"
-
-#: ../../Zotlabs/Module/Contactedit.php:629
-#: ../../Zotlabs/Module/Connedit.php:490
-msgid "Fetch updated permissions"
-msgstr "Hent oppdaterte tillatelser"
+#: ../../Zotlabs/Module/Contactedit.php:618
+#: ../../Zotlabs/Widget/Affinity.php:60
+msgid "Refresh"
+msgstr "Forny"
-#: ../../Zotlabs/Module/Contactedit.php:633
-#: ../../Zotlabs/Module/Connedit.php:494
-msgid "Refresh Photo"
+#: ../../Zotlabs/Module/Contactedit.php:619
+msgid "Refetch contact info"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:634
-#: ../../Zotlabs/Module/Connedit.php:497
-msgid "Fetch updated photo"
-msgstr ""
-
-#: ../../Zotlabs/Module/Contactedit.php:641
-#: ../../Zotlabs/Module/Connedit.php:511
-msgid "Block (or Unblock) all communications with this connection"
+#: ../../Zotlabs/Module/Profile.php:106
+msgid "vcard"
msgstr ""
-"Blokker eller fjern blokkering av all kommunikasjon med denne forbindelsen"
-
-#: ../../Zotlabs/Module/Contactedit.php:642
-#: ../../Zotlabs/Module/Connedit.php:512
-msgid "This connection is blocked!"
-msgstr "Denne forbindelsen er blokkert!"
-
-#: ../../Zotlabs/Module/Contactedit.php:646
-#: ../../Zotlabs/Module/Connedit.php:516
-msgid "Unignore"
-msgstr "Ikke ignorer lenger"
-#: ../../Zotlabs/Module/Contactedit.php:646
-#: ../../Zotlabs/Module/Connections.php:360
-#: ../../Zotlabs/Module/Connedit.php:516
-msgid "Ignore"
-msgstr "Ignorer"
+#: ../../Zotlabs/Widget/Suggestions.php:58
+msgid "Suggestions"
+msgstr "Forslag"
-#: ../../Zotlabs/Module/Contactedit.php:648
-#: ../../Zotlabs/Module/Connedit.php:519
-msgid "Ignore (or Unignore) all inbound communications from this connection"
-msgstr ""
-"Ignorer eller fjern ignorering av all inngående kommunikasjon fra denne "
-"forbindelsen"
+#: ../../Zotlabs/Widget/Suggestions.php:59
+msgid "See more..."
+msgstr "Se mer..."
-#: ../../Zotlabs/Module/Contactedit.php:649
-#: ../../Zotlabs/Module/Connedit.php:520
-msgid "This connection is ignored!"
-msgstr "Denne forbindelsen er ignorert!"
+#: ../../Zotlabs/Widget/Pinned.php:95
+msgid "Share This"
+msgstr "Del dette"
-#: ../../Zotlabs/Module/Contactedit.php:653
-#: ../../Zotlabs/Module/Connedit.php:524
-msgid "Unarchive"
-msgstr "Ikke arkiver lenger"
+#: ../../Zotlabs/Widget/Pinned.php:118 ../../Zotlabs/Widget/Pinned.php:119
+#, php-format
+msgid "View %s's profile - %s"
+msgstr "Vis %s sin profil - %s"
-#: ../../Zotlabs/Module/Contactedit.php:653
-#: ../../Zotlabs/Module/Connedit.php:524
-msgid "Archive"
-msgstr "Arkiver"
+#: ../../Zotlabs/Widget/Pinned.php:152
+msgid "Don't show"
+msgstr "Ikke vis"
-#: ../../Zotlabs/Module/Contactedit.php:655
-#: ../../Zotlabs/Module/Connedit.php:527
-msgid ""
-"Archive (or Unarchive) this connection - mark channel dead but keep content"
+#: ../../Zotlabs/Widget/Privacygroups.php:45
+msgid "Add new group"
msgstr ""
-"Arkiver eller fjern arkivering av denne forbindelsen - marker kanal som død, "
-"men behold innhold"
-
-#: ../../Zotlabs/Module/Contactedit.php:656
-#: ../../Zotlabs/Module/Connedit.php:528
-msgid "This connection is archived!"
-msgstr "Denne forbindelsen er arkivert!"
-#: ../../Zotlabs/Module/Contactedit.php:660
-#: ../../Zotlabs/Module/Connedit.php:532
-msgid "Unhide"
-msgstr "Ikke skjul lenger"
+#: ../../Zotlabs/Widget/Savedsearch.php:81
+msgid "Remove term"
+msgstr "Fjern begrep"
-#: ../../Zotlabs/Module/Contactedit.php:660
-#: ../../Zotlabs/Module/Connedit.php:532
-msgid "Hide"
-msgstr "Skjul"
+#: ../../Zotlabs/Widget/Photo_rand.php:63 ../../Zotlabs/Widget/Photo.php:54
+msgid "photo/image"
+msgstr "foto/bilde"
-#: ../../Zotlabs/Module/Contactedit.php:662
-#: ../../Zotlabs/Module/Connedit.php:535
-msgid "Hide or Unhide this connection from your other connections"
+#: ../../Zotlabs/Widget/Notes.php:39
+msgid "Read mode"
msgstr ""
-"Skjul eller fjern skjuling av denne forbindelsen fra dine andre forbindelser"
-#: ../../Zotlabs/Module/Contactedit.php:663
-#: ../../Zotlabs/Module/Connedit.php:536
-msgid "This connection is hidden!"
-msgstr "Denne forbindelsen er skjult!"
+#: ../../Zotlabs/Widget/Notes.php:40
+msgid "Edit mode"
+msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:669
-#: ../../Zotlabs/Module/Connedit.php:543
-msgid "Delete this connection"
-msgstr "Slett denne forbindelsen"
+#: ../../Zotlabs/Widget/Notes.php:41
+msgid "Editing"
+msgstr ""
-#: ../../Zotlabs/Module/Directory.php:124
-msgid "No default suggestions were found."
+#: ../../Zotlabs/Widget/Notes.php:42
+msgid "Saving"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:292
-msgid "Gender: "
-msgstr "Kjønn: "
+#: ../../Zotlabs/Widget/Notes.php:43
+msgid "Saved"
+msgstr ""
-#: ../../Zotlabs/Module/Directory.php:294
-msgid "Status: "
-msgstr "Status: "
+#: ../../Zotlabs/Widget/Suggestedchats.php:36
+msgid "Suggested Chatrooms"
+msgstr "Foreslåtte chatrom"
-#: ../../Zotlabs/Module/Directory.php:296
-msgid "Homepage: "
-msgstr "Hjemmeside: "
+#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
+msgid "Bookmarked Chatrooms"
+msgstr "Bokmerkede chatrom"
-#: ../../Zotlabs/Module/Directory.php:357
-msgid "Description:"
-msgstr "Beskrivelse:"
+#: ../../Zotlabs/Widget/Tasklist.php:31
+msgid "Tasks"
+msgstr "Oppgaver"
-#: ../../Zotlabs/Module/Directory.php:359
-msgid "Unsafe"
+#: ../../Zotlabs/Widget/Messages.php:32
+msgid "Public and restricted messages"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:362
-msgid "Spam"
+#: ../../Zotlabs/Widget/Messages.php:33
+msgid "Direct messages"
+msgstr "Direktemeldinger"
+
+#: ../../Zotlabs/Widget/Messages.php:34
+msgid "Starred messages"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:372
-msgid "Public Forum:"
-msgstr "Offentlig forum:"
+#: ../../Zotlabs/Widget/Messages.php:35
+#: ../../Zotlabs/Widget/Notifications.php:116
+#: ../../Zotlabs/Widget/Notifications.php:117
+msgid "Notices"
+msgstr "Varsel"
-#: ../../Zotlabs/Module/Directory.php:375
-msgid "Keywords: "
-msgstr "Nøkkelord: "
+#: ../../Zotlabs/Widget/Messages.php:37
+msgid "No messages"
+msgstr "Ingen meldinger"
-#: ../../Zotlabs/Module/Directory.php:378
-msgid "Don't suggest"
-msgstr "Ikke foreslå"
+#: ../../Zotlabs/Widget/Messages.php:38
+msgid "Unseen"
+msgstr "Ulest"
-#: ../../Zotlabs/Module/Directory.php:380
-msgid "Common connections (estimated):"
+#: ../../Zotlabs/Widget/Messages.php:39
+#: ../../Zotlabs/Widget/Notifications.php:34
+#: ../../Zotlabs/Widget/Notifications.php:54
+#: ../../Zotlabs/Widget/Notifications.php:73
+#: ../../Zotlabs/Widget/Notifications.php:134
+#: ../../Zotlabs/Widget/Notifications.php:167
+msgid "Filter by name or address"
+msgstr "Filtrer etter navn eller adresse"
+
+#: ../../Zotlabs/Widget/Cover_photo.php:74
+msgid "Click to show more"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:430
-msgid "Global Directory"
-msgstr "Global katalog"
+#: ../../Zotlabs/Widget/Activity.php:55
+#, fuzzy
+msgctxt "widget"
+msgid "Activity"
+msgstr "aktivitet"
-#: ../../Zotlabs/Module/Directory.php:430
-msgid "Local Directory"
-msgstr "Lokal katalog"
+#: ../../Zotlabs/Widget/Appstore.php:16
+msgid "App Collections"
+msgstr "Appsamlinger"
-#: ../../Zotlabs/Module/Directory.php:436
-msgid "Finding:"
-msgstr "Finner:"
+#: ../../Zotlabs/Widget/Appstore.php:18
+msgid "Installed apps"
+msgstr "Installerte apper"
-#: ../../Zotlabs/Module/Directory.php:441
-msgid "next page"
-msgstr "neste side"
+#: ../../Zotlabs/Widget/Hq_controls.php:23
+msgid "Toggle post editor"
+msgstr "Vis redigering av innlegg"
-#: ../../Zotlabs/Module/Directory.php:441
-msgid "previous page"
-msgstr "forrige side"
+#: ../../Zotlabs/Widget/Hq_controls.php:33
+msgid "Toggle personal notes"
+msgstr ""
-#: ../../Zotlabs/Module/Directory.php:442
-msgid "Sort options"
-msgstr "Sorteringsvalg"
+#: ../../Zotlabs/Widget/Hq_controls.php:43
+msgid "Channel activities"
+msgstr ""
-#: ../../Zotlabs/Module/Directory.php:443
-msgid "Alphabetic"
-msgstr "Alfabetisk"
+#: ../../Zotlabs/Widget/Archive.php:49
+msgid "Archives"
+msgstr "Arkiv"
-#: ../../Zotlabs/Module/Directory.php:444
-msgid "Reverse Alphabetic"
-msgstr "Omvendt alfabetisk"
+#: ../../Zotlabs/Widget/Channel_activities.php:46
+#, fuzzy
+#| msgid "Recent activity"
+msgid "No recent activities"
+msgstr "Nylig aktivitet"
-#: ../../Zotlabs/Module/Directory.php:445
-msgid "Newest to Oldest"
-msgstr "Nyest til eldst"
+#: ../../Zotlabs/Widget/Channel_activities.php:214
+msgctxt "noun"
+msgid "new connection"
+msgid_plural "new connections"
+msgstr[0] "ny forbindelse"
+msgstr[1] "nye forbindelser"
-#: ../../Zotlabs/Module/Directory.php:446
-msgid "Oldest to Newest"
-msgstr "Eldst til nyest"
+#: ../../Zotlabs/Widget/Channel_activities.php:220
+msgctxt "noun"
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "varsel"
+msgstr[1] "varsel"
-#: ../../Zotlabs/Module/Directory.php:464
-msgid "No entries (some entries may be hidden)."
-msgstr "Ingen oppføringer (noen oppføringer kan være skjult)."
+#: ../../Zotlabs/Widget/Settings_menu.php:37
+msgid "Account settings"
+msgstr "Kontoinnstillinger"
-#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95
-msgid "Authorize application connection"
-msgstr "Tillat programforbindelse"
+#: ../../Zotlabs/Widget/Settings_menu.php:43
+msgid "Channel settings"
+msgstr "Kanalinnstillinger"
-#: ../../Zotlabs/Module/Api.php:75
-msgid "Return to your app and insert this Security Code:"
-msgstr ""
+#: ../../Zotlabs/Widget/Settings_menu.php:49
+msgid "Privacy settings"
+msgstr "Personverninnstillinger"
-#: ../../Zotlabs/Module/Api.php:85
-msgid "Please login to continue."
-msgstr "Vennligst logg inn for å fortsette."
+#: ../../Zotlabs/Widget/Settings_menu.php:56
+msgid "Display settings"
+msgstr "Visningsinnstillinger"
-#: ../../Zotlabs/Module/Api.php:97
-msgid ""
-"Do you want to authorize this application to access your posts and contacts, "
-"and/or create new posts for you?"
+#: ../../Zotlabs/Widget/Settings_menu.php:63
+msgid "Manage locations"
msgstr ""
-"Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, "
-"og/eller lage nye innlegg for deg?"
-#: ../../Zotlabs/Module/Regmod.php:15
-msgid "Please login."
-msgstr "Vennligst logg inn."
+#: ../../Zotlabs/Widget/Rating.php:59
+msgid "Rating Tools"
+msgstr "Vurderingsverktøy"
-#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:153
-#: ../../Zotlabs/Module/Editblock.php:113
-msgid "Block Name"
-msgstr "Byggeklossens navn"
+#: ../../Zotlabs/Widget/Rating.php:63 ../../Zotlabs/Widget/Rating.php:65
+msgid "Rate Me"
+msgstr "Vurder meg"
-#: ../../Zotlabs/Module/Blocks.php:154
-msgid "Block Title"
-msgstr "Byggeklossens tittel"
+#: ../../Zotlabs/Widget/Rating.php:68
+msgid "View Ratings"
+msgstr "Vis vurderinger"
-#: ../../Zotlabs/Module/Email_validation.php:36
-msgid "Email Verification Required"
-msgstr ""
+#: ../../Zotlabs/Widget/Appcategories.php:49
+msgid "App Categories"
+msgstr "Appkategorier"
-#: ../../Zotlabs/Module/Email_validation.php:37
-#, php-format
-msgid ""
-"A verification token was sent to your email address [%s]. Enter that token "
-"here to complete the account verification step. Please allow a few minutes "
-"for delivery, and check your spam folder if you do not see the message."
-msgstr ""
-"En verifikasjonskode ble sendt til epostadressen din [%s]. Skriv inn koden "
-"du mottok her for å fullføre kontoverifikasjonen. Det kan ta noen minutter "
-"før du mottar koden. Sjekk også at eposten ikke har havnet i mappen for "
-"søppelpost om du ikke ser den etter en stund."
+#: ../../Zotlabs/Widget/Activity_filter.php:44
+#: ../../Zotlabs/Widget/Notifications.php:62
+msgid "Direct Messages"
+msgstr "Direktemeldinger"
-#: ../../Zotlabs/Module/Email_validation.php:38
-msgid "Resend Email"
-msgstr ""
+#: ../../Zotlabs/Widget/Activity_filter.php:48
+msgid "Show direct (private) messages"
+msgstr "Vis direktemeldinger (private meldinger)"
-#: ../../Zotlabs/Module/Email_validation.php:41
-msgid "Validation token"
+#: ../../Zotlabs/Widget/Activity_filter.php:53
+#: ../../Zotlabs/Widget/Notifications.php:81
+msgid "Events"
+msgstr "Hendelser"
+
+#: ../../Zotlabs/Widget/Activity_filter.php:57
+msgid "Show posts that include events"
msgstr ""
-#: ../../Zotlabs/Module/Attach.php:68
-msgid "Item not available."
-msgstr "Elementet er ikke tilgjengelig."
+#: ../../Zotlabs/Widget/Activity_filter.php:63
+msgid "Polls"
+msgstr "Spørreskjema"
-#: ../../Zotlabs/Module/Vote.php:40
-msgid "Poll not found."
-msgstr "Fant ikke spørreskjema."
+#: ../../Zotlabs/Widget/Activity_filter.php:67
+msgid "Show posts that include polls"
+msgstr "Vis innlegg som inneholder spørreskjema"
-#: ../../Zotlabs/Module/Vote.php:69
-msgid "Invalid response."
+#: ../../Zotlabs/Widget/Activity_filter.php:90
+#, php-format
+msgid "Show posts related to the %s privacy group"
msgstr ""
-#: ../../Zotlabs/Module/Vote.php:125
-msgid "Response submitted. Updates may not appear instantly."
+#: ../../Zotlabs/Widget/Activity_filter.php:99
+msgid "Show my privacy groups"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:128
-#: ../../Zotlabs/Module/Cover_photo.php:85
-msgid "Image uploaded but image cropping failed."
-msgstr "Bildet ble lastet opp, men beskjæring av bildet mislyktes."
-
-#: ../../Zotlabs/Module/Profile_photo.php:184
-#: ../../Zotlabs/Module/Cover_photo.php:212
-msgid "Image resize failed."
-msgstr "Endring av bildestørrelse mislyktes."
-
-#: ../../Zotlabs/Module/Profile_photo.php:350
-#: ../../Zotlabs/Module/Cover_photo.php:265
-msgid "Image upload failed."
-msgstr "Opplasting av bildet mislyktes."
-
-#: ../../Zotlabs/Module/Profile_photo.php:370
-#: ../../Zotlabs/Module/Cover_photo.php:282
-msgid "Unable to process image."
-msgstr "Kan ikke behandle bildet."
-
-#: ../../Zotlabs/Module/Profile_photo.php:432
-#: ../../Zotlabs/Module/Profile_photo.php:497
-#: ../../Zotlabs/Module/Cover_photo.php:367
-#: ../../Zotlabs/Module/Cover_photo.php:382
-msgid "Photo not available."
-msgstr "Bildet er ikke tilgjengelig."
+#: ../../Zotlabs/Widget/Activity_filter.php:123
+msgid "Show posts to this forum"
+msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:544
-msgid ""
-"This profile photo will be visible to anybody on the internet and may be "
-"distributed to other websites."
+#: ../../Zotlabs/Widget/Activity_filter.php:134
+msgid "Show forums"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:544
-msgid ""
-"This profile photo will be visible only to channels with permission to view "
-"this profile."
+#: ../../Zotlabs/Widget/Activity_filter.php:148
+msgid "Starred Posts"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:546
-msgid "Use Photo for Profile"
+#: ../../Zotlabs/Widget/Activity_filter.php:152
+msgid "Show posts that I have starred"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:546
-#, fuzzy
-msgid "Change Profile Photo"
-msgstr "Endre profilbilde"
+#: ../../Zotlabs/Widget/Activity_filter.php:163
+msgid "Personal Posts"
+msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:548
-msgid "Reset to default"
+#: ../../Zotlabs/Widget/Activity_filter.php:167
+msgid "Show posts that mention or involve me"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:551
-#: ../../Zotlabs/Module/Profile_photo.php:552
-#: ../../Zotlabs/Module/Cover_photo.php:426
-#: ../../Zotlabs/Module/Cover_photo.php:427
-msgid "Use a photo from your albums"
+#: ../../Zotlabs/Widget/Activity_filter.php:190
+#, php-format
+msgid "Show posts that I have filed to %s"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:562
-msgid "Select existing"
+#: ../../Zotlabs/Widget/Activity_filter.php:200
+msgid "Show filed post categories"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:581
-#: ../../Zotlabs/Module/Cover_photo.php:455
-msgid "Crop Image"
-msgstr "Beskjær bildet"
+#: ../../Zotlabs/Widget/Activity_filter.php:214
+msgid "Panel search"
+msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:582
-#: ../../Zotlabs/Module/Cover_photo.php:456
-msgid "Please adjust the image cropping for optimum viewing."
-msgstr "Vennligst juster bildebeskjæringen for optimal visning."
+#: ../../Zotlabs/Widget/Activity_filter.php:224
+msgid "Filter by name"
+msgstr "Filtrer etter navn"
-#: ../../Zotlabs/Module/Profile_photo.php:584
-#, fuzzy
-msgid "Done editing"
-msgstr "Avslutt redigering"
+#: ../../Zotlabs/Widget/Activity_filter.php:239
+msgid "Remove active filter"
+msgstr ""
-#: ../../Zotlabs/Module/Editblock.php:138
-msgid "Edit Block"
-msgstr "Endre byggekloss"
+#: ../../Zotlabs/Widget/Activity_filter.php:255
+msgid "Stream Filters"
+msgstr "Filtere for tidslinjen"
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "Enter a folder name"
+#: ../../Zotlabs/Widget/Notifications.php:24
+msgid "New network activity notifications"
msgstr ""
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "or select an existing folder (doubleclick)"
+#: ../../Zotlabs/Widget/Notifications.php:27
+msgid "Network stream"
msgstr ""
-#: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Lib/ThreadItem.php:186
-msgid "Save to Folder"
-msgstr "Lagre i mappe"
+#: ../../Zotlabs/Widget/Notifications.php:30
+#: ../../Zotlabs/Widget/Notifications.php:69
+msgid "Mark all notifications read"
+msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:128 ../../Zotlabs/Module/Layouts.php:129
-#: ../../Zotlabs/Module/Layouts.php:187
-msgid "Layout Name"
-msgstr "Layout-navn"
+#: ../../Zotlabs/Widget/Notifications.php:33
+#: ../../Zotlabs/Widget/Notifications.php:53
+#: ../../Zotlabs/Widget/Notifications.php:72
+#: ../../Zotlabs/Widget/Notifications.php:166
+msgid "Show new posts only"
+msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:129 ../../Zotlabs/Module/Layouts.php:132
-msgid "Layout Description (Optional)"
-msgstr "Layoutens beskrivelse (valgfritt)"
+#: ../../Zotlabs/Widget/Notifications.php:44
+msgid "New home activity notifications"
+msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:137
-msgid "Edit Layout"
-msgstr "Endre layout"
+#: ../../Zotlabs/Widget/Notifications.php:47
+msgid "Home stream"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:58
-#: ../../Zotlabs/Module/Connections.php:116
-msgid "Active"
+#: ../../Zotlabs/Widget/Notifications.php:50
+msgid "Mark all notifications seen"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:63
-#: ../../Zotlabs/Module/Connections.php:185
-#: ../../Zotlabs/Module/Connections.php:296
-msgid "Blocked"
-msgstr "Blokkert"
+#: ../../Zotlabs/Widget/Notifications.php:63
+msgid "New direct messages notifications"
+msgstr "Varsel om nye direktemeldinger"
-#: ../../Zotlabs/Module/Connections.php:68
-#: ../../Zotlabs/Module/Connections.php:192
-#: ../../Zotlabs/Module/Connections.php:295
-msgid "Ignored"
-msgstr "Ignorert"
+#: ../../Zotlabs/Widget/Notifications.php:66
+msgid "Direct messages stream"
+msgstr "Strøm for direktemeldinger"
-#: ../../Zotlabs/Module/Connections.php:73
-#: ../../Zotlabs/Module/Connections.php:206
-#: ../../Zotlabs/Module/Connections.php:294
-msgid "Hidden"
-msgstr "Skjult"
+#: ../../Zotlabs/Widget/Notifications.php:82
+msgid "New events notifications"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:78
-#: ../../Zotlabs/Module/Connections.php:199
-msgid "Archived/Unreachable"
+#: ../../Zotlabs/Widget/Notifications.php:85
+msgid "View events"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:83
-#: ../../Zotlabs/Module/Connections.php:92 ../../Zotlabs/Module/Menu.php:180
-#: ../../Zotlabs/Module/Notifications.php:101
-msgid "New"
-msgstr "Nye"
+#: ../../Zotlabs/Widget/Notifications.php:88
+msgid "Mark all events seen"
+msgstr "Merk alle hendelser som sett"
-#: ../../Zotlabs/Module/Connections.php:161
-msgid "Active Connections"
+#: ../../Zotlabs/Widget/Notifications.php:97
+msgid "New connections notifications"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:164
-msgid "Show active connections"
+#: ../../Zotlabs/Widget/Notifications.php:100
+msgid "View all connections"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:171
-msgid "Show pending (new) connections"
-msgstr "Vis ventende (nye) forbindelser"
-
-#: ../../Zotlabs/Module/Connections.php:188
-msgid "Only show blocked connections"
-msgstr "Vis bare forbindelser som er blokkert"
-
-#: ../../Zotlabs/Module/Connections.php:195
-msgid "Only show ignored connections"
-msgstr "Vis bare ignorerte forbindelser"
-
-#: ../../Zotlabs/Module/Connections.php:202
-msgid "Only show archived/unreachable connections"
+#: ../../Zotlabs/Widget/Notifications.php:109
+msgid "New files notifications"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:209
-msgid "Only show hidden connections"
-msgstr "Vis bare skjulte forbindelser"
+#: ../../Zotlabs/Widget/Notifications.php:120
+msgid "View all notices"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:224
-msgid "Show all connections"
-msgstr "Vis alle forbindelser"
+#: ../../Zotlabs/Widget/Notifications.php:123
+msgid "Mark all notices seen"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:292
-msgid "Pending approval"
-msgstr "Venter på godkjenning"
+#: ../../Zotlabs/Widget/Notifications.php:144
+msgid "Registrations"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:293
-msgid "Archived"
-msgstr "Arkivert"
+#: ../../Zotlabs/Widget/Notifications.php:145
+msgid "New registrations notifications"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:297
-msgid "Not connected at this location"
+#: ../../Zotlabs/Widget/Notifications.php:155
+msgid "New public stream notifications"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:336
-#, php-format
-msgid "%1$s [%2$s]"
-msgstr "%1$s [%2$s]"
+#: ../../Zotlabs/Widget/Notifications.php:158
+msgid "Public stream"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:337
-msgid "Edit connection"
-msgstr "Endre forbindelse"
+#: ../../Zotlabs/Widget/Notifications.php:174
+msgid "Sorry, you have got no notifications at the moment"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:339
-msgid "Delete connection"
-msgstr "Slett forbindelse"
+#: ../../Zotlabs/Widget/Tokens.php:41
+msgid "Add new guest"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:345
-msgid "Channel address"
-msgstr "Kanaladresse"
+#: ../../Zotlabs/Widget/Permcats.php:43
+msgid "Add new role"
+msgstr ""
-#: ../../Zotlabs/Module/Connections.php:350
-msgid "Call"
+#: ../../Zotlabs/Widget/Permcats.php:93
+msgid "Role members"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:352
-msgid "Status"
-msgstr "Status"
+#: ../../Zotlabs/Widget/Newmember.php:38
+msgid "Profile Creation"
+msgstr "Oppretting av profil"
-#: ../../Zotlabs/Module/Connections.php:355
-msgid "Connected"
-msgstr "Forbundet"
+#: ../../Zotlabs/Widget/Newmember.php:40
+msgid "Upload profile photo"
+msgstr "Last opp profilbilde"
-#: ../../Zotlabs/Module/Connections.php:359
-msgid "Ignore connection"
-msgstr "Ignorer forbindelse"
+#: ../../Zotlabs/Widget/Newmember.php:41
+msgid "Upload cover photo"
+msgstr "Last opp omslagsbilde"
-#: ../../Zotlabs/Module/Connections.php:361
-msgid "Recent activity"
-msgstr "Nylig aktivitet"
+#: ../../Zotlabs/Widget/Newmember.php:45
+msgid "Find and Connect with others"
+msgstr "Finn andre"
-#: ../../Zotlabs/Module/Connections.php:367
-msgid "Connect at this location"
-msgstr ""
+#: ../../Zotlabs/Widget/Newmember.php:47
+msgid "View the directory"
+msgstr "Se i katalogen"
-#: ../../Zotlabs/Module/Connections.php:404
-#: ../../Zotlabs/Module/Connedit.php:686
-msgid "Contact role"
-msgstr ""
+#: ../../Zotlabs/Widget/Newmember.php:49
+msgid "Manage your connections"
+msgstr "Behandle forbindelser"
-#: ../../Zotlabs/Module/Connections.php:405
-msgid "Search your connections"
-msgstr "Søk blant dine forbindelser"
+#: ../../Zotlabs/Widget/Newmember.php:52
+msgid "Communicate"
+msgstr "Kommuniser"
-#: ../../Zotlabs/Module/Connections.php:406
-msgid "Contact search"
-msgstr ""
+#: ../../Zotlabs/Widget/Newmember.php:54
+msgid "View your channel homepage"
+msgstr "Vis kanalens hjemmeside"
-#: ../../Zotlabs/Module/Cover_photo.php:196
-#: ../../Zotlabs/Module/Cover_photo.php:254
-msgid "Cover Photos"
-msgstr "Forsidebilder"
+#: ../../Zotlabs/Widget/Newmember.php:55
+msgid "View your network stream"
+msgstr "Vis nettverksstrømmen"
-#: ../../Zotlabs/Module/Cover_photo.php:418
-msgid "Your cover photo may be visible to anybody on the internet"
-msgstr ""
+#: ../../Zotlabs/Widget/Newmember.php:61
+msgid "Documentation"
+msgstr "Dokumentasjon"
-#: ../../Zotlabs/Module/Cover_photo.php:420
-msgid "Upload File:"
-msgstr "Last opp fil:"
+#: ../../Zotlabs/Widget/Newmember.php:64
+msgid "Missing Features?"
+msgstr "Noe som mangler?"
-#: ../../Zotlabs/Module/Cover_photo.php:421
-msgid "Select a profile:"
-msgstr "Velg en profil:"
+#: ../../Zotlabs/Widget/Newmember.php:66
+msgid "Pin apps to navigation bar"
+msgstr "Fest apper til navigasjonslinjen"
-#: ../../Zotlabs/Module/Cover_photo.php:422
-#, fuzzy
-msgid "Change Cover Photo"
-msgstr "Endre omslagsbilde"
+#: ../../Zotlabs/Widget/Newmember.php:67
+msgid "Install more apps"
+msgstr "Legg til flere apper"
-#: ../../Zotlabs/Module/Cover_photo.php:438
-msgid "Select existing photo"
+#: ../../Zotlabs/Widget/Newmember.php:78
+msgid "View public stream"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:458
-msgid "Done Editing"
-msgstr "Avslutt redigering"
+#: ../../Zotlabs/Widget/Follow.php:34
+msgid "Add New Connection"
+msgstr "Legg til ny forbindelse"
-#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103
-msgid "Album not found."
-msgstr "Albumet ble ikke funnet."
+#: ../../Zotlabs/Widget/Follow.php:35
+msgid "Enter channel address"
+msgstr "Skriv kanaladressen"
-#: ../../Zotlabs/Module/Photos.php:93
-msgid "Delete Album"
-msgstr "Slett album"
+#: ../../Zotlabs/Widget/Follow.php:36
+msgid "Examples: bob@example.com, https://example.com/barbara"
+msgstr "Eksempel: ola@eksempel.no, https://eksempel.no/kari"
-#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1054
-msgid "Delete Photo"
-msgstr "Slett bilde"
+#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66
+msgid "Member registrations waiting for confirmation"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:522
-msgid "No photos selected"
-msgstr "Ingen bilder valgt"
+#: ../../Zotlabs/Widget/Admin.php:34
+msgid "Inspect queue"
+msgstr "Inspiser kø"
-#: ../../Zotlabs/Module/Photos.php:571
-msgid "Access to this item is restricted."
-msgstr "Tilgang til dette elementet er begrenset."
+#: ../../Zotlabs/Widget/Admin.php:35
+msgid "Queueworker"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:614
-#, php-format
-msgid "%1$.2f MB photo storage used."
-msgstr "%1$.2f MB lagringsplass til bilder er brukt."
+#: ../../Zotlabs/Widget/Admin.php:37
+msgid "DB updates"
+msgstr "Databaseoppdateringer"
-#: ../../Zotlabs/Module/Photos.php:618
-#, php-format
-msgid "%1$.2f MB of %2$.2f MB photo storage used."
-msgstr "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt."
+#: ../../Zotlabs/Widget/Admin.php:62
+msgid "Addon Features"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:660
-msgid "Upload Photos"
-msgstr "Last opp bilder"
+#: ../../Zotlabs/Widget/Chatroom_list.php:26
+msgid "Overview"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:664
-msgid "Enter an album name"
-msgstr "Skriv et albumnavn"
+#: ../../Zotlabs/Widget/Cdav.php:41
+msgid "Select Channel"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:665
-msgid "or select an existing album (doubleclick)"
-msgstr "eller velg et eksisterende album (dobbeltklikk)"
+#: ../../Zotlabs/Widget/Cdav.php:46
+msgid "Read-write"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:666
-msgid "Create a status post for this upload"
-msgstr "Lag et statusinnlegg for denne opplastingen"
+#: ../../Zotlabs/Widget/Cdav.php:47
+msgid "Read-only"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:668
-msgid "Description (optional)"
+#: ../../Zotlabs/Widget/Cdav.php:133
+msgid "Channel Calendar"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:756
-msgid "Show Newest First"
-msgstr "Vis nyeste først"
+#: ../../Zotlabs/Widget/Cdav.php:137
+msgid "Shared CalDAV Calendars"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:758
-msgid "Show Oldest First"
-msgstr "Vis eldste først"
+#: ../../Zotlabs/Widget/Cdav.php:141
+msgid "Share this calendar"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1354
-msgid "Add Photos"
+#: ../../Zotlabs/Widget/Cdav.php:143
+msgid "Calendar name and color"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:863
-msgid "Permission denied. Access to this item may be restricted."
-msgstr "Tillatelse avvist. Tilgang til dette elementet kan være begrenset."
+#: ../../Zotlabs/Widget/Cdav.php:145
+msgid "Create new CalDAV calendar"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:865
-msgid "Photo not available"
-msgstr "Bilde er utilgjengelig"
+#: ../../Zotlabs/Widget/Cdav.php:147
+msgid "Calendar Name"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:923
-msgid "Use as profile photo"
-msgstr "Bruk som profilbilde"
+#: ../../Zotlabs/Widget/Cdav.php:148
+msgid "Calendar Tools"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:924
-msgid "Use as cover photo"
-msgstr "Bruk som omslagsbilde"
+#: ../../Zotlabs/Widget/Cdav.php:150
+msgid "Import calendar"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:931
-msgid "Private Photo"
-msgstr "Privat bilde"
+#: ../../Zotlabs/Widget/Cdav.php:151
+msgid "Select a calendar to import to"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:946
-msgid "View Full Size"
-msgstr "Vis i full størrelse"
+#: ../../Zotlabs/Widget/Cdav.php:178
+msgid "Addressbooks"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1028
-msgid "Edit photo"
-msgstr "Endre bilde"
+#: ../../Zotlabs/Widget/Cdav.php:180
+msgid "Addressbook name"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1030
-msgid "Rotate CW (right)"
-msgstr "Roter med klokka (mot høyre)"
+#: ../../Zotlabs/Widget/Cdav.php:182
+msgid "Create new addressbook"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1031
-msgid "Rotate CCW (left)"
-msgstr "Roter mot klokka (venstre)"
+#: ../../Zotlabs/Widget/Cdav.php:183
+msgid "Addressbook Name"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1034
-msgid "Move photo to album"
+#: ../../Zotlabs/Widget/Cdav.php:185
+msgid "Addressbook Tools"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1035
-msgid "Enter a new album name"
-msgstr "Skriv et nytt albumnavn"
+#: ../../Zotlabs/Widget/Cdav.php:186
+msgid "Import addressbook"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1036
-msgid "or select an existing one (doubleclick)"
-msgstr "eller velg et eksisterende album (dobbeltklikk)"
+#: ../../Zotlabs/Widget/Cdav.php:187
+msgid "Select an addressbook to import to"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1041
-msgid "Add a Tag"
-msgstr "Legg til merkelapp"
+#: ../../Zotlabs/Widget/Activity_order.php:96
+msgid "Commented Date"
+msgstr "Sist kommentert"
-#: ../../Zotlabs/Module/Photos.php:1049
-msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
-msgstr "Eksempel: @bob, @Barbara_Jensen, @jim@example.com"
+#: ../../Zotlabs/Widget/Activity_order.php:100
+msgid "Order by last commented date"
+msgstr "Sorter etter dato for siste kommentar"
-#: ../../Zotlabs/Module/Photos.php:1052
-msgid "Flag as adult in album view"
-msgstr "Flag som voksent i albumvisning"
+#: ../../Zotlabs/Widget/Activity_order.php:103
+msgid "Posted Date"
+msgstr "Innleggsdato"
-#: ../../Zotlabs/Module/Photos.php:1071 ../../Zotlabs/Lib/ThreadItem.php:310
-msgid "I like this (toggle)"
-msgstr "Jeg liker dette (skru av og på)"
+#: ../../Zotlabs/Widget/Activity_order.php:107
+msgid "Order by last posted date"
+msgstr "Sorter etter dato innlegg ble postet"
-#: ../../Zotlabs/Module/Photos.php:1072 ../../Zotlabs/Lib/ThreadItem.php:311
-msgid "I don't like this (toggle)"
-msgstr "Jeg liker ikke dette (skru av og på)"
+#: ../../Zotlabs/Widget/Activity_order.php:110
+msgid "Date Unthreaded"
+msgstr "Utrådet"
-#: ../../Zotlabs/Module/Photos.php:1090 ../../Zotlabs/Module/Photos.php:1203
-#: ../../Zotlabs/Lib/ThreadItem.php:828
-msgid "This is you"
-msgstr "Dette er deg"
+#: ../../Zotlabs/Widget/Activity_order.php:114
+msgid "Order unthreaded by date"
+msgstr "Sorter innlegg og kommentarer uavhengig av hverandre etter dato"
-#: ../../Zotlabs/Module/Photos.php:1124 ../../Zotlabs/Module/Photos.php:1136
-#: ../../Zotlabs/Lib/ThreadItem.php:229 ../../Zotlabs/Lib/ThreadItem.php:242
-msgid "View all"
-msgstr "Vis alle"
+#: ../../Zotlabs/Widget/Activity_order.php:129
+msgid "Stream Order"
+msgstr "Sortering av innlegg"
-#: ../../Zotlabs/Module/Photos.php:1237
-msgid "Photo Tools"
-msgstr "Fotoverktøy"
+#: ../../Zotlabs/Widget/Chatroom_members.php:17
+msgid "Chat Members"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1246
-msgid "In This Photo:"
-msgstr "I dette bildet:"
+#: ../../util/nconfig.php:34
+msgid "Source channel not found."
+msgstr "Fant ikke kildekanalen."
-#: ../../Zotlabs/Module/Photos.php:1251
-msgid "Map"
-msgstr "Kart"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:123
+msgid "generic profile image"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1259 ../../Zotlabs/Lib/ThreadItem.php:490
-msgctxt "noun"
-msgid "Likes"
-msgstr "Liker"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:124
+msgid "random geometric pattern"
+msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1260 ../../Zotlabs/Lib/ThreadItem.php:491
-msgctxt "noun"
-msgid "Dislikes"
-msgstr "Liker ikke"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:125
+msgid "monster face"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:19
-msgid "No valid account found."
-msgstr "Ingen gyldig konto funnet."
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:126
+msgid "computer generated face"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:33
-msgid "Password reset request issued. Check your email."
-msgstr "Forespørsel om å tilbakestille passord er mottatt. Sjekk e-posten din."
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:127
+msgid "retro arcade style face"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:39 ../../Zotlabs/Module/Lostpass.php:108
-#, php-format
-msgid "Site Member (%s)"
-msgstr "Nettstedsmedlem (%s)"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:128
+msgid "Hub default profile photo"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49
-#, php-format
-msgid "Password reset requested at %s"
-msgstr "Forespurt om å tilbakestille passord hos %s"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143
+msgid "Information"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:68
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143
msgid ""
-"Request could not be verified. (You may have previously submitted it.) "
-"Password reset failed."
+"Libravatar addon is installed, too. Please disable Libravatar addon or this "
+"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
+"nothing was found at Libravatar."
msgstr ""
-"Forespørsel kunne ikke bekreftes. (Du kan ha sendt den inn tidligere.) "
-"Tilbakestilling av passord mislyktes."
-#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1755
-msgid "Password Reset"
-msgstr "Tilbakestill passord"
-
-#: ../../Zotlabs/Module/Lostpass.php:92
-msgid "Your password has been reset as requested."
-msgstr "Ditt passord har blitt tilbakestilt som forespurt."
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:150
+#: ../../extend/addon/hzaddons/xmpp/xmpp.php:43
+#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:46
+msgid "Save Settings"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:93
-msgid "Your new password is"
-msgstr "Ditt nye passord er"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151
+msgid "Default avatar image"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:94
-msgid "Save or copy your new password - and then"
-msgstr "Lagre eller kopier ditt nye passord, og deretter kan du"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151
+msgid "Select default avatar image if none was found at Gravatar. See README"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:95
-msgid "click here to login"
-msgstr "klikke her for å logge inn"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152
+msgid "Rating of images"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:96
-msgid ""
-"Your password may be changed from the <em>Settings</em> page after "
-"successful login."
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152
+msgid "Select the appropriate avatar rating for your site. See README"
msgstr ""
-"Ditt passord kan endres på siden <em>Innstillinger</em> etter vellykket "
-"innlogging."
-#: ../../Zotlabs/Module/Lostpass.php:117
-#, php-format
-msgid "Your password has changed at %s"
-msgstr "Ditt passord er endret hos %s"
+#: ../../extend/addon/hzaddons/gravatar/gravatar.php:165
+msgid "Gravatar settings updated."
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:130
-msgid "Forgot your Password?"
-msgstr "Glemt passord ditt?"
+#: ../../extend/addon/hzaddons/sendzid/Mod_Sendzid.php:21
+msgid "Send your identity to all websites"
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:131
-msgid ""
-"Enter your email address and submit to have your password reset. Then check "
-"your email for further instructions."
+#: ../../extend/addon/hzaddons/sendzid/Mod_Sendzid.php:29
+msgid "Send ZID"
msgstr ""
-"Skriv e-postadressen din og send inn for å tilbakestille passordet ditt. "
-"Sjekk deretter din e-post for videre instruksjoner."
-#: ../../Zotlabs/Module/Lostpass.php:132
-msgid "Email Address"
-msgstr "E-postadresse"
+#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:101
+msgid "An account has been created for you."
+msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:133 ../../Zotlabs/Module/Pdledit.php:76
-#: ../../Zotlabs/Module/Pdledit.php:93
-msgid "Reset"
-msgstr "Tilbakestill"
+#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:108
+msgid "Authentication successful but rejected: account creation is disabled."
+msgstr ""
-#: ../../Zotlabs/Module/Follow.php:92
-msgid "Connection added."
+#: ../../extend/addon/hzaddons/cart/cart.php:259
+msgid "DB Cleanup Failure"
msgstr ""
-#: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29
-msgid "Invalid item."
-msgstr "Ugyldig element."
+#: ../../extend/addon/hzaddons/cart/cart.php:692
+msgid "[cart] Item Added"
+msgstr ""
-#: ../../Zotlabs/Module/Page.php:174
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
-"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
-"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
-"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
-"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+#: ../../extend/addon/hzaddons/cart/cart.php:1107
+msgid "Order already checked out."
msgstr ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
-"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
-"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
-"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
-"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
-#: ../../Zotlabs/Module/Profiles.php:26 ../../Zotlabs/Module/Profiles.php:214
-#: ../../Zotlabs/Module/Profiles.php:642
-msgid "Profile not found."
-msgstr "Profilen ble ikke funnet."
+#: ../../extend/addon/hzaddons/cart/cart.php:1416
+msgid "Drop database tables when uninstalling."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:46
-msgid "Profile deleted."
-msgstr "Profilen er slettet."
+#: ../../extend/addon/hzaddons/cart/cart.php:1423
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:129
+msgid "Cart Settings"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:70 ../../Zotlabs/Module/Profiles.php:107
-msgid "Profile-"
-msgstr "Profil-"
+#: ../../extend/addon/hzaddons/cart/cart.php:1435
+#: ../../extend/addon/hzaddons/cart/cart.php:1438
+msgid "Shop"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:92 ../../Zotlabs/Module/Profiles.php:129
-msgid "New profile created."
-msgstr "Ny profil opprettet."
+#: ../../extend/addon/hzaddons/cart/cart.php:1458
+#: ../../extend/addon/hzaddons/faces/Mod_Faces.php:64
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:36
+#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:52
+msgid "Profile Unavailable."
+msgstr "Profilen er ikke tilgjengelig."
-#: ../../Zotlabs/Module/Profiles.php:113
-msgid "Profile unavailable to clone."
-msgstr "Profilen er utilgjengelig for klonen."
+#: ../../extend/addon/hzaddons/cart/cart.php:1494
+#: ../../extend/addon/hzaddons/cart/myshop.php:113
+msgid "Order Not Found"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:148
-msgid "Profile unavailable to export."
-msgstr "Profilen er utilgjengelig for eksport."
+#: ../../extend/addon/hzaddons/cart/cart.php:1598
+msgid "You must be logged into the Grid to shop."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:224
-msgid "Profile Name is required."
-msgstr "Profilnavn er påkrevd."
+#: ../../extend/addon/hzaddons/cart/cart.php:1609
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:486
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:456
+#: ../../extend/addon/hzaddons/cart/myshop.php:37
+#: ../../extend/addon/hzaddons/cart/manual_payments.php:93
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:81
+msgid "Invalid channel"
+msgstr "Ugyldig kanal"
-#: ../../Zotlabs/Module/Profiles.php:429
-msgid "Marital Status"
-msgstr "Sivilstand"
+#: ../../extend/addon/hzaddons/cart/cart.php:1631
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:417
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:392
+#: ../../extend/addon/hzaddons/cart/manual_payments.php:68
+msgid "Order not found."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:433
-msgid "Romantic Partner"
-msgstr "Romantisk partner"
+#: ../../extend/addon/hzaddons/cart/cart.php:1647
+#, fuzzy
+msgid "Access denied."
+msgstr "Ingen tilgang"
-#: ../../Zotlabs/Module/Profiles.php:437 ../../Zotlabs/Module/Profiles.php:788
-msgid "Likes"
-msgstr "Liker"
+#: ../../extend/addon/hzaddons/cart/cart.php:1699
+#: ../../extend/addon/hzaddons/cart/cart.php:1842
+msgid "No Order Found"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:441 ../../Zotlabs/Module/Profiles.php:789
-msgid "Dislikes"
-msgstr "Liker ikke"
+#: ../../extend/addon/hzaddons/cart/cart.php:1708
+msgid "An unknown error has occurred Please start again."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:445 ../../Zotlabs/Module/Profiles.php:796
-msgid "Work/Employment"
-msgstr "Arbeid/sysselsetting"
+#: ../../extend/addon/hzaddons/cart/cart.php:1851
+msgid "Requirements not met."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:448
-msgid "Religion"
-msgstr "Religion"
+#: ../../extend/addon/hzaddons/cart/cart.php:1851
+msgid "Review your order and complete any needed requirements."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:452
-msgid "Political Views"
-msgstr "Politiske synspunkter"
+#: ../../extend/addon/hzaddons/cart/cart.php:1877
+msgid "Invalid Payment Type. Please start again."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:460
-msgid "Sexual Preference"
-msgstr "Seksuelle preferanser"
+#: ../../extend/addon/hzaddons/cart/cart.php:1884
+msgid "Order not found"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:464
-msgid "Homepage"
-msgstr "Hjemmeside"
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:70
+msgid "Enable Order/Item Options"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:468
-msgid "Interests"
-msgstr "Interesser"
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:333
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:357
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:433
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:457
+msgid "Label"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:576
-msgid "Profile updated."
-msgstr "Profilen er oppdatert."
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:336
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:360
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:436
+#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:460
+msgid "Instructions"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:672
-msgid "Hide my connections from viewers of this profile"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:151
+msgid "Enable Subscription Management Module"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:685
-msgid "Publish my default profile in the network directory"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:223
+msgid ""
+"Cannot include subscription items with different terms in the same order."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:693
-msgid "Suggest me as a potential contact to new members"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:372
+msgid "Select Subscription to Edit"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:697
-msgid "Reveal my online status"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:380
+msgid "Edit Subscriptions"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:738
-msgid "Edit Profile Details"
-msgstr "Endre profildetaljer"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:414
+msgid "Subscription SKU"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:740
-msgid "View this profile"
-msgstr "Vis denne profilen"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:419
+msgid "Catalog Description"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:742
-msgid "Profile Tools"
-msgstr "Profilverktøy"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:423
+msgid "Subscription available for purchase."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:743
-msgid "Change cover photo"
-msgstr "Endre omslagsbilde"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:428
+msgid "Maximum active subscriptions to this item per account."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:745
-msgid "Create a new profile using these settings"
-msgstr "Lag en ny profil ved å bruke disse innstillingene"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:431
+msgid "Subscription price."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:746
-msgid "Clone this profile"
-msgstr "Klon denne profilen"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:435
+msgid "Quantity"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:747
-msgid "Delete this profile"
-msgstr "Slett denne profilen"
+#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:439
+msgid "Term"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:748
-msgid "Add profile things"
-msgstr "Legg til profilting"
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:61
+msgid "Enable Manual Cart Module"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:749
-msgid "Basic"
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:172
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:164
+msgid "New Sku"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:751
-msgid "Relationship"
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:208
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:199
+msgid "Cannot save edits to locked item."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:754
-msgid "Import profile from file"
-msgstr "Importer profil fra fil"
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:252
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:649
+msgid "Changes Locked"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:755
-msgid "Export profile to file"
-msgstr "Eksporter profil til fil"
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:256
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:653
+msgid "Item available for purchase."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:756
-msgid "Your gender"
-msgstr "Kjønn"
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:263
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:660
+#: ../../extend/addon/hzaddons/cart/widgets/catalogitem.php:57
+msgid "Price"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:757
-msgid "Marital status"
-msgstr "Sivilstatus"
+#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:266
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:663
+msgid "Photo URL"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:758
-msgid "Sexual preference"
-msgstr "Legning"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:86
+msgid "Enable Paypal Button Module (API-v2)"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:761
-msgid "Profile name"
-msgstr "Profilnavn"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:96
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:93
+msgid "Use Production Key"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:763
-msgid "This is your default profile."
-msgstr "Dette er din standardprofil."
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:103
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:100
+msgid "Paypal Sandbox Client Key"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:765
-msgid "Your full name"
-msgstr "Fullt navn"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:110
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:107
+msgid "Paypal Sandbox Secret Key"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:766
-msgid "Short title/description"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:116
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:113
+msgid "Paypal Production Client Key"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:766
-msgid "Maximal 190 characters"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:123
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:120
+msgid "Paypal Production Secret Key"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:769
-msgid "Street address"
-msgstr "Gateadresse"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:271
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:252
+msgid "Paypal button payments are not enabled."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:770
-msgid "Locality/City"
-msgstr "Sted/by"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:289
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:270
+msgid ""
+"Paypal button payments are not properly configured. Please choose another "
+"payment option."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:771
-msgid "Region/State"
-msgstr "Region"
+#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:85
+msgid "Enable Paypal Button Module"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:772
-msgid "Postal/Zip code"
-msgstr "Postnummer"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:65
+msgid "Enable Hubzilla Services Module"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:778
-msgid "Who (if applicable)"
-msgstr "Hvem (om relevant)"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:248
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:335
+msgid "SKU not found."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:778
-msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
-msgstr "Eksempler: kari123, Kari Villiamsen, kari@example.com"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:301
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:305
+msgid "Invalid Activation Directive."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:779
-msgid "Since (date)"
-msgstr "Fra (dato)"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:376
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:380
+msgid "Invalid Deactivation Directive."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:782
-msgid "Tell us about yourself"
-msgstr "Fortell oss om deg selv"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:566
+msgid "Add to this privacy group"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:784
-msgid "Hometown"
-msgstr "Hjemsted"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:582
+msgid "Set user service class"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:785
-msgid "Political views"
-msgstr "Politiske holdninger"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:609
+msgid "You must be using a local account to purchase this service."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:786
-msgid "Religious views"
-msgstr "Religiøse holdninger"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:667
+msgid "Add buyer to privacy group"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:787
-msgid "Keywords used in directory listings"
-msgstr "Nøkkelord for bruk i katalogoppføringen"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:672
+msgid "Add buyer as connection"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:787
-msgid "Example: fishing photography software"
-msgstr "Eksempel: fisking fotografering programvare"
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:680
+#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:722
+msgid "Set Service Class"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:790
-msgid "Musical interests"
-msgstr "Musikkinteresser"
+#: ../../extend/addon/hzaddons/cart/myshop.php:30
+#, fuzzy
+msgid "Access Denied."
+msgstr "Ingen tilgang"
-#: ../../Zotlabs/Module/Profiles.php:791
-msgid "Books, literature"
-msgstr "Bøker, litteratur"
+#: ../../extend/addon/hzaddons/cart/myshop.php:145
+#: ../../extend/addon/hzaddons/cart/myshop.php:181
+#: ../../extend/addon/hzaddons/cart/myshop.php:215
+#: ../../extend/addon/hzaddons/cart/myshop.php:265
+#: ../../extend/addon/hzaddons/cart/myshop.php:300
+#: ../../extend/addon/hzaddons/cart/myshop.php:323
+msgid "Access Denied"
+msgstr "Ingen tilgang"
-#: ../../Zotlabs/Module/Profiles.php:792
-msgid "Television"
-msgstr "TV/fjernsyn"
+#: ../../extend/addon/hzaddons/cart/myshop.php:190
+#: ../../extend/addon/hzaddons/cart/myshop.php:224
+#: ../../extend/addon/hzaddons/cart/myshop.php:275
+#: ../../extend/addon/hzaddons/cart/myshop.php:333
+#, fuzzy
+msgid "Invalid Item"
+msgstr "Ugyldig element."
-#: ../../Zotlabs/Module/Profiles.php:793
-msgid "Film/Dance/Culture/Entertainment"
-msgstr "Film/dans/kultur/underholdning"
+#: ../../extend/addon/hzaddons/cart/manual_payments.php:7
+msgid "Error: order mismatch. Please try again."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:794
-msgid "Hobbies/Interests"
-msgstr "Hobbier/Interesser"
+#: ../../extend/addon/hzaddons/cart/manual_payments.php:61
+msgid "Manual payments are not enabled."
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:795
-msgid "Love/Romance"
-msgstr "Kjærlighet/romantikk"
+#: ../../extend/addon/hzaddons/cart/manual_payments.php:77
+msgid "Finished"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:797
-msgid "School/Education"
-msgstr "Skolle/utdanning"
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:58
+msgid "Enable Test Catalog"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:798
-msgid "Contact information and social networks"
-msgstr "Kontaktinformasjon og andre sosiale nettverk"
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:70
+msgid "Enable Manual Payments"
+msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:799
-msgid "My other channels"
-msgstr "Mine andre kanaler"
+#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:90
+msgid "Base Merchant Currency"
+msgstr ""
-#: ../../Zotlabs/Module/Subthread.php:128
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
-msgstr "%1$s følger %2$s sin %3$s"
+#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:127
+msgid "Edit Article"
+msgstr ""
-#: ../../Zotlabs/Module/Subthread.php:130
-#, php-format
-msgid "%1$s stopped following %2$s's %3$s"
-msgstr "%1$s stopped å følge %2$s sin %3$s"
+#: ../../extend/addon/hzaddons/articles/articles.php:51
+msgid "View Articles"
+msgstr ""
-#: ../../Zotlabs/Module/Bookmarks.php:62
-msgid "Bookmark added"
-msgstr "Bokmerke lagt til"
+#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:119
+msgid "Add Article"
+msgstr ""
-#: ../../Zotlabs/Module/Bookmarks.php:101
-msgid "My Connections Bookmarks"
-msgstr "Mine forbindelsers bokmerker"
+#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:81
+msgid "Hubzilla File Storage Import"
+msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:35
-msgid ""
-"Channel name changes are not allowed within 48 hours of changing the account "
-"password."
+#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:82
+msgid "This will import all your cloud files from another server."
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:77
-msgid "Change channel nickname/address"
+#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:83
+msgid "Hubzilla Server base URL"
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:78
-msgid "Any/all connections on other networks will be lost!"
+#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:84
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:138
+msgid "Since modified date yyyy-mm-dd"
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:80
-msgid "New channel address"
+#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:85
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:139
+msgid "Until modified date yyyy-mm-dd"
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:81
-msgid "Rename Channel"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:125
+msgid "View Larger"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:69
-msgid "Invite App"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:148
+msgid "Tile Server URL"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:81
-msgid "Register is closed"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:148
+msgid ""
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
+"target=\"_blank\">public tile servers</a>"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:115 ../../Zotlabs/Module/Invite.php:562
-msgid "Note, the invitation code is valid up to"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:149
+msgid "Nominatim (reverse geocoding) Server URL"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:128
-#, php-format
-msgid "Too many recipients for one invitation (max %d)"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:149
+msgid ""
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
+"target=\"_blank\">Nominatim servers</a>"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:132
-msgid "No recipients for this invitation"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:150
+msgid "Default zoom"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:151
-#, php-format
-msgid "(%s) : Not a real email address"
-msgstr "(%s): Ikke en virkelig epostadresse"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:150
+msgid ""
+"The default zoom level. (1:world, 18:highest, also depends on tile server)"
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:158
-#, php-format
-msgid "(%s) : Not allowed email address"
-msgstr "(%s): Ikke en tillatt epostadresse"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:151
+msgid "Include marker on map"
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:171
-#, php-format
-msgid "(%s) : email address already in use"
-msgstr "(%s): epostadressen er allerede i bruk"
+#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:151
+msgid "Include a marker on the map."
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:178
-#, php-format
-msgid "(%s) : Accepted email address"
-msgstr "(%s): Godkjent epostadresse"
+#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:15
+msgid "WYSIWYG status editor"
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:270
-#, php-format
-msgid "To %s : Message delivery success."
+#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:24
+msgid "WYSIWYG Status App"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:302
-#, php-format
-msgid "%1$d mail(s) sent, %2$d mail error(s)"
+#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:32
+msgid "WYSIWYG Status"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:327
-msgid "Invites not proposed by configuration"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:106
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:179
+msgid "Network error"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:328
-msgid "Contact the site admin"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:110
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:183
+msgid "API error"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:344
-msgid "Invites by users not enabled"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:114
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:187
+msgid "Unknown issue"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:349
-msgid "You have no more invitations available"
-msgstr "Du har ikke flere invitasjoner tilgjengelig"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:152
+msgid "Unable to retrieve email address from remote identity provider"
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:365
-msgid "Not on xchan"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:171
+msgid "Unable to login using email address "
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:398
-msgid "All users invitation limit exceeded."
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:211
+msgid "Social Authentication using your social media account"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:416
-msgid "Invitation expires after"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:215
+msgid ""
+"This app enables one or more social provider sign-in buttons on the login "
+"page."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:517 ../../Zotlabs/Module/Invite.php:556
-msgid "Invitation"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:233
+msgid "Add an identity provider"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:547
-msgid "Send invitations"
-msgstr "Send invitasjoner"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:260
+#, fuzzy
+msgid "Enable "
+msgstr "Skru på"
-#: ../../Zotlabs/Module/Invite.php:548
-msgid "Invitations I am using"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:267
+msgid "Key"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:549
-msgid "Invitations we are using"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:267
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:272
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:288
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:299
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:308
+msgid "Word"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:550
-msgid "§ Note, the email(s) sent will be recorded in the system logs"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:272
+msgid "Secret"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:551
-msgid "Enter email addresses, one per line:"
-msgstr "Skriv e-postadresser, en per linje:"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:308
+msgid "Add a custom provider"
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:552
-msgid "Your message:"
-msgstr "Din melding:"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:328
+msgid "Remove an identity provider"
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:553
-msgid "Invite template"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:338
+msgid "Social authentication"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:555
-msgid "Subject:"
-msgstr "Emne:"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:380
+msgid "Error while saving provider settings"
+msgstr ""
-#: ../../Zotlabs/Module/Invite.php:561
-msgid "Here you may enter personal notes to the recipient(s)"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:403
+msgid "Custom provider already exists"
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:605
-msgid "Private forum"
+#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:420
+msgid "Social authentication settings saved."
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:605
-#, fuzzy
-msgid "Public forum"
-msgstr "Offentlig forum:"
+#: ../../extend/addon/hzaddons/pumpio/pumpio.php:152
+msgid "You are now authenticated to pumpio."
+msgstr ""
-#: ../../Zotlabs/Module/Xchan.php:10
-msgid "Xchan Lookup"
-msgstr "Xchan oppslag"
+#: ../../extend/addon/hzaddons/pumpio/pumpio.php:153
+msgid "return to the featured settings page"
+msgstr "tilbake til funksjonsinnstillinger"
-#: ../../Zotlabs/Module/Xchan.php:13
-msgid "Lookup xchan beginning with (or webbie): "
-msgstr "Slå opp xchan som begynner med (eller webbie): "
+#: ../../extend/addon/hzaddons/pumpio/pumpio.php:168
+msgid "Post to Pump.io"
+msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:35
-msgid "Affinity Tool settings updated."
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:40
+msgid "Pump.io Settings saved."
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:54
-msgid ""
-"The numbers below represent the minimum and maximum slider default positions "
-"for your network/stream page as a percentage."
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:71
+msgid "Pump.io servername"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:61
-msgid "Default maximum affinity level"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:71
+msgid "Without \"http://\" or \"https://\""
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:61
-#, fuzzy
-msgid "0-99 default 99"
-msgstr "Standard"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:75
+msgid "Pump.io username"
+msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:67
-msgid "Default minimum affinity level"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:75
+msgid "Without the servername"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:67
-#, fuzzy
-msgid "0-99 - default 0"
-msgstr "Standard"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:86
+msgid "You are not authenticated to pumpio"
+msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:73
-msgid "Persistent affinity levels"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:88
+msgid "(Re-)Authenticate your pump.io connection"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:73
-msgid ""
-"If disabled the max and min levels will be reset to default after page reload"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92
+msgid "Post to pump.io by default"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:81
-msgid "Affinity Tool Settings"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96
+msgid "Should posts be public"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Network.php:42
-#: ../../Zotlabs/Module/Settings/Channel_home.php:46
-msgid "Max height of content (in pixels)"
-msgstr "Maks høyde for innhold (i piksler)"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100
+msgid "Mirror all public posts"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Network.php:44
-#: ../../Zotlabs/Module/Settings/Channel_home.php:48
-msgid "Click to expand content exceeding this height"
-msgstr "Klikk for å vise hele innlegg som overskrider denne grensen"
+#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:110
+msgid "Pump.io Crosspost Connector"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Network.php:59
-msgid "Stream Settings"
-msgstr "Instillinger for tidslinjen"
+#: ../../extend/addon/hzaddons/superblock/superblock.php:355
+msgid "Block Completely"
+msgstr "Blokker helt"
-#: ../../Zotlabs/Module/Settings/Features.php:45
-msgid "Additional Features"
-msgstr "Ekstra funksjoner"
+#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:62
+msgid "superblock settings updated"
+msgstr "innstillingene til superblokk ble oppdatert"
-#: ../../Zotlabs/Module/Settings/Channel.php:105
-#: ../../Zotlabs/Module/Settings/Channel.php:217
-msgid "Please select a channel role"
-msgstr "Velg en kanalrolle"
+#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:86
+msgid "Currently blocked"
+msgstr "Blokkert for øyeblikket"
-#: ../../Zotlabs/Module/Settings/Channel.php:194
-msgid "Your channel address is"
-msgstr "Din kanaladresse er"
+#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:88
+msgid "No channels currently blocked"
+msgstr "Ingen kanaler er blokkert i øyeblikket"
-#: ../../Zotlabs/Module/Settings/Channel.php:197
-msgid "Your files/photos are accessible via WebDAV at"
-msgstr "Dine filer og foto er tilgjengelig via WebDAV på"
+#: ../../extend/addon/hzaddons/gallery/gallery.php:43
+#: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:135
+msgid "Gallery"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:228
-msgid "Channel Settings"
-msgstr "Kanalinnstillinger"
+#: ../../extend/addon/hzaddons/gallery/gallery.php:46
+msgid "Photo Gallery"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:235
-msgid "Basic Settings"
-msgstr "Grunninnstillinger"
+#: ../../extend/addon/hzaddons/randpost/randpost.php:99
+msgid "You're welcome."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:236
-msgid "Channel timezone:"
-msgstr "Tidssone for kanalen:"
+#: ../../extend/addon/hzaddons/randpost/randpost.php:100
+msgid "Ah shucks..."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:237
-msgid "Default post location:"
-msgstr "Standard plassering for innlegg:"
+#: ../../extend/addon/hzaddons/randpost/randpost.php:101
+msgid "Don't mention it."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:237
-msgid "Geographical location to display on your posts"
-msgstr "Geografisk plassering som vises på dine innlegg"
+#: ../../extend/addon/hzaddons/randpost/randpost.php:102
+msgid "&lt;blush&gt;"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:238
-msgid "Use browser location"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:51
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:129
+msgid "System defaults:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:239
-msgid "Adult content"
-msgstr "Voksent innhold"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55
+msgid "Preferred Clipart IDs"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:239
-msgid "This channel frequently or regularly publishes adult content"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55
+msgid "List of preferred clipart ids. These will be shown first."
msgstr ""
-"Denne kanalen vil ofte, eller regelmessig poste innlegg med voksent innhold"
-#: ../../Zotlabs/Module/Settings/Channel.php:240
-msgid "Maximum Friend Requests/Day:"
-msgstr "Maksimalt antall venneforespørsler per dag:"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56
+msgid "Default Search Term"
+msgstr "Standard søkeord"
-#: ../../Zotlabs/Module/Settings/Channel.php:240
-msgid "May reduce spam activity"
-msgstr "Kan redusere søppelpostaktivitet"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56
+msgid "The default search term. These will be shown second."
+msgstr "Standard søkeord. Disse vil vises som nummer to."
-#: ../../Zotlabs/Module/Settings/Channel.php:241
-#: ../../Zotlabs/Lib/Enotify.php:68
-msgid "Notification Settings"
-msgstr "Varslingsinnstillinger"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57
+msgid "Return After"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:242
-msgid "By default post a status message when:"
-msgstr "Legg inn en statusmelding når du:"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57
+msgid "Page to load after image selection."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:243
-msgid "accepting a friend request"
-msgstr "aksepterer en venneforespørsel"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:60
+msgid "Profile List"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:244
-msgid "joining a forum/community"
-msgstr "blir med i et forum/miljø"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:62
+msgid "Order of Preferred"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:245
-msgid "making an <em>interesting</em> profile change"
-msgstr "gjør en <em>interessant</em> profilendring"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:62
+msgid "Sort order of preferred clipart ids."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:246
-msgid "Send a notification email when:"
-msgstr "Send en varsel-e-post når:"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:63
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:69
+msgid "Newest first"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:247
-msgid "You receive a connection request"
-msgstr "Du har mottatt en forespørsel om forbindelse"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:66
+msgid "As entered"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:248
-msgid "Your connections are confirmed"
-msgstr "Dine forbindelser er bekreftet"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:68
+msgid "Order of other"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:249
-msgid "Someone writes on your profile wall"
-msgstr "Noen skriver på din profilvegg"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:68
+msgid "Sort order of other clipart ids."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:250
-msgid "Someone writes a followup comment"
-msgstr "Noen skriver en oppfølgende kommentar"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:70
+msgid "Most downloaded first"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:251
-msgid "You receive a private message"
-msgstr "Du mottar en privat melding"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:71
+msgid "Most liked first"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:252
-msgid "You receive a friend suggestion"
-msgstr "Du mottok et venneforslag"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:73
+msgid "Preferred IDs Message"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:253
-msgid "You are tagged in a post"
-msgstr "Du merkes i et innlegg"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:73
+msgid "Message to display above preferred results."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:254
-msgid "You are poked/prodded/etc. in a post"
-msgstr "Du ble prikket/oppildnet/og så vider i et innlegg"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:79
+msgid "Uploaded by: "
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:255
-msgid "Someone likes your post/comment"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:79
+msgid "Drawn by: "
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:256
-msgid "Show visual notifications including:"
-msgstr "Vis visuelle varslinger om:"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:183
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:195
+msgid "Use this image"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:257
-msgid "Unseen stream activity"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:193
+msgid "Or select from a free OpenClipart.org image:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:258
-msgid "Unseen channel activity"
-msgstr "Usett kanalaktivitet"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:196
+msgid "Search Term"
+msgstr "Søkeord"
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-msgid "Unseen private messages"
-msgstr "Usette private meldinger"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:233
+msgid "Unknown error. Please try again later."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-#: ../../Zotlabs/Module/Settings/Channel.php:264
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-#: ../../Zotlabs/Module/Settings/Channel.php:266
-msgid "Recommended"
-msgstr "Anbefalt"
+#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:309
+msgid "Profile photo updated successfully."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:260
-msgid "Upcoming events"
-msgstr "Kommende hendelser"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:94
+msgid "Hubzilla Directory Stats"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:261
-msgid "Events today"
-msgstr "Hendelser idag"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:95
+msgid "Total Hubs"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:262
-msgid "Upcoming birthdays"
-msgstr "Kommende fødselsdager"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:97
+msgid "Hubzilla Hubs"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:262
-msgid "Not available in all themes"
-msgstr "Ikke tilgjengelig i alle temaer"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:99
+msgid "Friendica Hubs"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:263
-msgid "System (personal) notifications"
-msgstr "System (personlige) varslinger"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:101
+msgid "Diaspora Pods"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:264
-msgid "System info messages"
-msgstr "System infomeldinger"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:103
+msgid "Hubzilla Channels"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-msgid "System critical alerts"
-msgstr "System kritiske varsel"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:105
+msgid "Friendica Channels"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:266
-msgid "New connections"
-msgstr "Nye forbindelser"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:107
+msgid "Diaspora Channels"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:267
-msgid "System Registrations"
-msgstr "Systemregistreringer"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:109
+msgid "Aged 35 and above"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:268
-msgid "Unseen shared files"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:111
+msgid "Aged 34 and under"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:269
-msgid "Unseen public stream activity"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:113
+msgid "Average Age"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:270
-msgid "Unseen likes and dislikes"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:115
+msgid "Known Chatrooms"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:271
-msgid "Unseen forum posts"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:117
+msgid "Known Tags"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:272
-msgid "Email notification hub (hostname)"
+#: ../../extend/addon/hzaddons/dirstats/dirstats.php:119
+msgid ""
+"Please note Diaspora and Friendica statistics are merely those **this "
+"directory** is aware of, and not all those known in the network. This also "
+"applies to chatrooms,"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:272
-#, php-format
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:61
msgid ""
-"If your channel is mirrored to multiple hubs, set this to your preferred "
-"location. This will prevent duplicate email notifications. Example: %s"
+"Please contact your site administrator.<br />The provided API URL is not "
+"valid."
msgstr ""
+"Den oppgitte URLen for APIet er ikke gyldig. Kontakt serverens administrator."
-#: ../../Zotlabs/Module/Settings/Channel.php:273
-msgid "Show new wall posts, private messages and connections under Notices"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:98
+msgid "We could not contact the GNU social API with the Path you entered."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:274
-msgid "Mark all notices of the thread read if a notice is clicked"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:130
+msgid "GNU social settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:274
-msgid "If no, only the clicked notice will be marked read"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:179
+msgid "Globally Available GNU social OAuthKeys"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:275
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:181
msgid ""
-"Desktop notifications are unavailable because the required browser "
-"permission has not been granted"
+"There are preconfigured OAuth key pairs for some GNU social servers "
+"available. If you are using one of them, please use these credentials.<br /"
+">If not feel free to connect to any other GNU social instance (see below)."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:276
-msgid "Grant permission"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:196
+msgid "Provide your own OAuth Credentials"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:277
-msgid "Notify me of events this many days in advance"
-msgstr "Varsle meg om hendelser dette antall dager på forhånd"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:277
-msgid "Must be greater than 0"
-msgstr "Må være større enn 0"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:280
-msgid "Default photo upload folder"
-msgstr "Standard mappe for opplasting av bilder"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:280
-#: ../../Zotlabs/Module/Settings/Channel.php:281
-msgid "%Y - current year, %m - current month"
-msgstr "%Y - nåværende år, %m - nåværende måned"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:281
-msgid "Default file upload folder"
-msgstr "Standard mappe for opplasting av filer"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-msgid "Remove this channel."
-msgstr "Fjern denne kanalen."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:198
+msgid ""
+"No consumer key pair for GNU social found. Register your Hubzilla Account as "
+"an desktop client on your GNU social account, copy the consumer key pair "
+"here and enter the API base root.<br />Before you register your own OAuth "
+"key pair ask the administrator if there is already a key pair for this "
+"Hubzilla installation at your favourite GNU social installation."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "Expire other channel content after this many days"
-msgstr "Annet kanal innhold utløper etter så mange dager"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:202
+msgid "OAuth Consumer Key"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "0 or blank to use the website limit."
-msgstr "0 eller la være tomt for å bruke grensen til nettstedet."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:206
+msgid "OAuth Consumer Secret"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-#, php-format
-msgid "This website expires after %d days."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:210
+msgid "Base API Path"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "This website does not expire imported content."
-msgstr "Dette nettstedet sletter ikke importert innhold."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:210
+msgid "Remember the trailing /"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "The website limit takes precedence if lower than your limit."
-msgstr "Nettstedets grense vil gjelde dersom den er lavere enn din grense."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:214
+msgid "GNU social application name"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:237
msgid ""
-"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
-"leave blank to import all posts"
+"To connect to your GNU social account click the button below to get a "
+"security code from GNU social which you have to copy into the input box "
+"below and submit the form. Only your <strong>public</strong> posts will be "
+"posted to GNU social."
msgstr ""
-"Ett ord per linje eller #emneknagger, $kategorier, /mønster/, lang=xx,"
-" lang!=xx - la være tomt for å importere alle innlegg"
-
-#: ../../Zotlabs/Module/Settings/Account.php:21
-msgid "Not valid email."
-msgstr "Ikke gyldig e-post."
-
-#: ../../Zotlabs/Module/Settings/Account.php:24
-msgid "Protected email address. Cannot change to that email."
-msgstr "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen."
-
-#: ../../Zotlabs/Module/Settings/Account.php:33
-msgid "System failure storing new email. Please try again."
-msgstr "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen."
-
-#: ../../Zotlabs/Module/Settings/Account.php:51
-msgid "Password verification failed."
-msgstr "Passordbekreftelsen mislyktes."
-#: ../../Zotlabs/Module/Settings/Account.php:58
-msgid "Passwords do not match. Password unchanged."
-msgstr "Passordene stemmer ikke overens. Passord uforandret."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:239
+msgid "Log in with GNU social"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:62
-msgid "Empty passwords are not allowed. Password unchanged."
-msgstr "Tomme passord er ikke tillatt. Passord uforandret."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:242
+msgid "Copy the security code from GNU social here"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:76
-msgid "Password changed."
-msgstr "Passord endret."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:252
+msgid "Cancel Connection Process"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:78
-msgid "Password update failed. Please try again."
-msgstr "Passord oppdatering mislyktes. Vennligst prøv igjen."
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:254
+msgid "Current GNU social API is"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:103
-msgid "Account Settings"
-msgstr "Kontoinnstillinger"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258
+msgid "Cancel GNU social Connection"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:104
-msgid "Current Password"
-msgstr "Nåværende passord"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:270
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:145
+msgid "Currently connected to: "
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:105
-msgid "Enter New Password"
-msgstr "Skriv nytt passord"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:275
+msgid ""
+"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to GNU social will lead the visitor to a blank page "
+"informing the visitor that the access to your profile has been restricted."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:106
-msgid "Confirm New Password"
-msgstr "Bekreft nytt passord"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
+msgid "Post to GNU social by default"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:106
-msgid "Leave password fields blank unless changing"
-msgstr "La passordfeltene stå blanke om det ikke skal endres"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280
+msgid ""
+"If enabled your public postings will be posted to the associated GNU-social "
+"account by default"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:108
-msgid "Multi-Factor Authentication"
-msgstr "Flerfaktorautentisering"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169
+msgid "Clear OAuth configuration"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:109
-msgid "DId2 or Email Address:"
-msgstr "DId2 eller epostadresse:"
+#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:301
+msgid "GNU-Social Crosspost Connector"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:112
-msgid "Remove this account including all its channels"
-msgstr "Slett denne kontoen inkludert alle dens kanaler"
+#: ../../extend/addon/hzaddons/statusnet/statusnet.php:145
+msgid "Post to GNU social"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Featured.php:25
-msgid "No feature settings configured"
-msgstr "Ingen funksjonsinnstillinger er konfigurert"
+#: ../../extend/addon/hzaddons/statusnet/statusnet.php:594
+msgid "API URL"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Featured.php:34
-msgid "Addon Settings"
-msgstr "Instillinger for tillegg"
+#: ../../extend/addon/hzaddons/statusnet/statusnet.php:597
+msgid "Application name"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Featured.php:35
-msgid "Please save/submit changes to any panel before opening another."
-msgstr "Husk å lagre endringene i ett panel før du åpner andre."
+#: ../../extend/addon/hzaddons/ljpost/ljpost.php:49
+msgid "Post to Livejournal"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Events.php:40
-msgid "Events Settings"
+#: ../../extend/addon/hzaddons/ljpost/ljpost.php:127
+msgid "Posted by"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Manage.php:41
-msgid "Channel Manager Settings"
+#: ../../extend/addon/hzaddons/ljpost/ljpost.php:134
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:67
+#: ../../extend/addon/hzaddons/dwpost/dwpost.php:134
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:381
+#: ../../extend/addon/hzaddons/wppost/wppost.php:175
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:96
+msgid "Source"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:61
-msgid "Personal menu to display in your channel pages"
-msgstr "Personlig meny som kan vises på dine kanalsider"
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:53
+msgid "Livejournal username"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:88
-msgid "Channel Home Settings"
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:57
+msgid "Livejournal password"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Calendar.php:40
-msgid "Calendar Settings"
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61
+msgid "Post to Livejournal by default"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:23
-#, fuzzy
-#| msgid "Name is required"
-msgid "Password is required"
-msgstr "Navn er påkrevd"
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65
+msgid "Send wall-to-wall posts to Livejournal"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:29
-msgid "The provided password is not correct"
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92
+msgid "Add link to original post"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:68
-msgid "Account Multi-Factor Authentication"
-msgstr "Tofaktorautentisering"
+#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:77
+msgid "Livejournal Crosspost Connector"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:69
-msgid ""
-"This is your generated secret. It may be used in some cases if the QR image "
-"cannot be read. Please store it in a safe place."
+#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:22
+msgid "pageheader Settings saved."
msgstr ""
-"Dette er en generert sikkerhetskode. Den kan være nyttig i enkelte tilfeller "
-"hvor QR koden ikke kan leses. Lagre den et sikkert sted."
-#: ../../Zotlabs/Module/Settings/Multifactor.php:70
-msgid "Please enter the code from your authenticator app"
-msgstr "Skriv inn koden fra din autentiseringsapp"
+#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:41
+msgid "Message to display on every page on this server"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:71
-msgid "You will only be able to enable MFA if the test passes"
+#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:49
+msgid "Page Header"
msgstr ""
-"Flerfaktorautentisering vil kun bli slått på dersom denne testen lykkes"
-#: ../../Zotlabs/Module/Settings/Multifactor.php:75
-msgid "Congratulations, the provided code was correct"
+#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:22
+msgid "Rainbow Tag App"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:76
-msgid "Incorrect code"
+#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:23
+msgid "Add some colour to tag clouds"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:79
-#, fuzzy
-#| msgid "Failed authentication"
-msgid "Enable Multi-Factor Authentication"
-msgstr "Mislykket autentisering"
+#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:30
+msgid "Rainbow Tag"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:81
-msgid "Logging in will require you to be in possession of your smartphone"
+#: ../../extend/addon/hzaddons/visage/Mod_Visage.php:23
+msgid "Recent Channel/Profile Viewers"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Multifactor.php:84
-#, fuzzy
-#| msgid "Your new password is"
-msgid "Your account password"
-msgstr "Ditt nye passord er"
+#: ../../extend/addon/hzaddons/visage/Mod_Visage.php:34
+msgid "No entries."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:125
+#: ../../extend/addon/hzaddons/testdrive/testdrive.php:104
#, php-format
-msgid "%s - (Experimental)"
-msgstr "%s - (Eksperimentelt)"
-
-#: ../../Zotlabs/Module/Settings/Display.php:181
-msgid "Display Settings"
-msgstr "Visningsinnstillinger"
-
-#: ../../Zotlabs/Module/Settings/Display.php:182
-msgid "Theme Settings"
-msgstr "Temainnstillinger"
-
-#: ../../Zotlabs/Module/Settings/Display.php:183
-msgid "Custom Theme Settings"
-msgstr "Tilpassede temainnstillinger"
+msgid "Your account on %s will expire in a few days."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:184
-msgid "Content Settings"
-msgstr "Innholdsinnstillinger"
+#: ../../extend/addon/hzaddons/testdrive/testdrive.php:105
+msgid "Your test account is about to expire."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:190
-msgid "Display Theme:"
-msgstr "Visningstema:"
+#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:21
+msgid "nofed Settings saved."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:191
-msgid "Select scheme"
-msgstr "Velg skjema"
+#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40
+msgid "Federate posts by default"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:193
-msgid "Preload images before rendering the page"
-msgstr "Last inn bildene før gjengivelsen av siden"
+#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:48
+msgid "No Federation"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:193
-msgid ""
-"The subjective page load time will be longer but the page will be ready when "
-"displayed"
+#: ../../extend/addon/hzaddons/nofed/nofed.php:47
+msgid "Federate"
msgstr ""
-"Den personlige opplevelsen av lastetiden vil være lenger, men siden vil være "
-"klar når den vises"
-#: ../../Zotlabs/Module/Settings/Display.php:194
-msgid "Enable user zoom on mobile devices"
-msgstr "Skru på brukerstyrt zoom på mobile enheter"
+#: ../../extend/addon/hzaddons/likebanner/likebanner.php:51
+msgid "Your Webbie:"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid "Update browser every xx seconds"
-msgstr "Oppdater nettleser hvert xx sekunder"
+#: ../../extend/addon/hzaddons/likebanner/likebanner.php:54
+msgid "Fontsize (px):"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid "Minimum of 10 seconds, no maximum"
-msgstr "Minimum 10 sekunder, ikke noe maksimum"
+#: ../../extend/addon/hzaddons/likebanner/likebanner.php:68
+msgid "Link:"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:196
-msgid "Maximum number of conversations to load at any time:"
-msgstr "Maksimalt antall samtaler å laste samtidig:"
+#: ../../extend/addon/hzaddons/likebanner/likebanner.php:70
+msgid "Like us on Hubzilla"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:196
-msgid "Maximum of 30 items"
+#: ../../extend/addon/hzaddons/likebanner/likebanner.php:72
+msgid "Embed:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:197
-msgid "Show emoticons (smilies) as images"
-msgstr "Vis emoticons (smilefjes) som bilder"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:85
+msgid ""
+"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
+"analytics tool."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:198
-msgid "Link post titles to source"
-msgstr "Lenk innleggets tittel til kilden"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:88
+#, php-format
+msgid ""
+"If you do not want that your visits are logged this way you <a href='%s'>can "
+"set a cookie to prevent Piwik from tracking further visits of the site</a> "
+"(opt-out)."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:200
-msgid "Display new member quick links menu"
-msgstr "Vis hurtiglenker for nye medlemmer"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:96
+msgid "Piwik Base URL"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Directory.php:40
-msgid "Directory Settings"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:96
+msgid ""
+"Absolute path to your Piwik installation. (without protocol (http/s), with "
+"trailing slash)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Editor.php:40
-msgid "Editor Settings"
-msgstr "Instillinger for redigering"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:97
+msgid "Site ID"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Connections.php:40
-msgid "Connections Settings"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:98
+msgid "Show opt-out cookie link?"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Photos.php:40
-msgid "Photos Settings"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:99
+msgid "Asynchronous tracking"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Profiles.php:41
-msgid "Default profile for new contacts"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:100
+msgid "Enable frontend JavaScript error tracking"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Profiles.php:49
-msgid "Profiles Settings"
+#: ../../extend/addon/hzaddons/piwik/piwik.php:100
+msgid "This feature requires Piwik >= 2.2.0"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:48
-msgid "Privacy settings updated."
-msgstr "Personverninnstillingene ble oppdatert."
+#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:60
+msgid "Page to load after login"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:66
-msgid "Only those you specifically allow"
-msgstr "Bare de du spesifikt tillater"
+#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:60
+msgid ""
+"Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy "
+"collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave "
+"blank for default network page (grid)."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:67
-msgid "Approved connections"
-msgstr "Godkjente forbindelser"
+#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:68
+msgid "Startpage"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:68
-msgid "Any connections"
-msgstr "Enhver forbindelse"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:65
+msgid "Twitter settings updated."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:69
-msgid "Anybody on this website"
-msgstr "Enhver ved dette nettstedet"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:101
+msgid ""
+"No consumer key pair for Twitter found. Please contact your site "
+"administrator."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:70
-msgid "Anybody in this network"
-msgstr "Enhver i dette nettverket"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:123
+msgid ""
+"At this Hubzilla instance the Twitter plugin was enabled but you have not "
+"yet connected your account to your Twitter account. To do so click the "
+"button below to get a PIN from Twitter which you have to copy into the input "
+"box below and submit the form. Only your <strong>public</strong> posts will "
+"be posted to Twitter."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:71
-msgid "Anybody authenticated"
-msgstr "Enhver som er autentisert"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:125
+msgid "Log in with Twitter"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:72
-msgid "Anybody on the internet"
-msgstr "Enhver på Internett"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:128
+msgid "Copy the PIN from Twitter here"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:82
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:150
msgid ""
-"Advise: set to \"Anybody on the internet\" and use privacy groups to "
-"restrict access"
+"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to Twitter will lead the visitor to a blank page informing "
+"the visitor that the access to your profile has been restricted."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:121
-msgid "Privacy Settings"
-msgstr "Personverninnstillinger"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:155
+msgid "Twitter post length"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:126
-msgid "Advanced configuration"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:155
+msgid "Maximum tweet length"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:128
-msgid "Proceed with caution"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
+msgid "Send public postings to Twitter by default"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:129
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160
msgid ""
-"Changing advanced configuration settings can impact your, and your contacts "
-"channels functionality and security."
+"If enabled your public postings will be posted to the associated Twitter "
+"account by default"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:130
-msgid "Accept the risk and continue"
+#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:179
+msgid "Twitter Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
-msgid "Automatically approve new contacts"
-msgstr "Automatisk godkjenn nye kontakter"
-
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
-msgid "Opt-out of search engine indexing"
-msgstr "Ikke la søkemotorer indeksere denne kanalen"
-
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
-msgid "Group actor"
+#: ../../extend/addon/hzaddons/twitter/twitter.php:109
+msgid "Post to Twitter"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
-msgid "Allow this channel to act as a forum"
+#: ../../extend/addon/hzaddons/twitter/twitter.php:502
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:95
+msgid "Submit Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-msgid "Accept all messages which mention you"
-msgstr "Godta alle meldinger som nevner deg"
+#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:22
+msgid "Fuzzloc Settings updated."
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
-msgid "This setting bypasses normal permissions"
-msgstr "Denne instillingen overstyrer vanlig tilgangskontroll"
+#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:38
+msgid "Minimum offset in meters"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-msgid "Accept unsolicited comments for moderation"
-msgstr "Godta kommentarer fra fremmede for moderering"
+#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:42
+msgid "Maximum offset in meters"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
-msgid "Otherwise they will be silently dropped"
-msgstr "Ellers vil de avvises uten varsel"
+#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:51
+msgid "Fuzzy Location"
+msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-msgid "Enable OCAP access"
-msgstr "Slå på OCAP tilgangskontroll"
+#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:18
+msgid "No username found in import file."
+msgstr "Ingen brukernavn ble funnet i importfilen."
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
-msgid "Grant limited posts the right to access linked private media"
-msgstr "Gi begrensede innlegg tilgang til private media som er lenket fra dem"
+#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:140
+msgid "Import completed."
+msgstr "Import ferdig."
-#: ../../Zotlabs/Module/Settings/Conversation.php:23
-msgid "Settings saved."
+#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1632
+#, php-format
+msgid "%1$s dislikes %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Conversation.php:25
-msgid "Settings saved. Reload page please."
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:43
+msgid "Diaspora Protocol Settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Conversation.php:47
-msgid "Conversation Settings"
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:52
+msgid ""
+"The diaspora protocol does not support location independence. Connections "
+"you make within that network may be unreachable from alternate channel "
+"locations."
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:68
-msgid "Unable to update menu."
-msgstr "Ikke i stand til å oppdatere meny."
-
-#: ../../Zotlabs/Module/Menu.php:79
-msgid "Unable to create menu."
-msgstr "Ikke i stand til å lage meny."
-
-#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
-msgid "Menu Name"
-msgstr "Menynavn"
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:80
+msgid "Prevent your hashtags from being redirected to other sites"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:161
-msgid "Unique name (not visible on webpage) - required"
-msgstr "Unikt navn (ikke synlig på websiden) - påkrevet"
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:84
+msgid "Sign and forward posts and comments with no existing Diaspora signature"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
-msgid "Menu Title"
-msgstr "Menytittel"
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:89
+msgid "Followed hashtags (comma separated, do not include the #)"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:162
-msgid "Visible on webpage - leave empty for no title"
-msgstr "Synlig på websiden - la stå tomt for ingen tittel"
+#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:98
+msgid "Diaspora Protocol"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:163
-msgid "Allow Bookmarks"
-msgstr "Tillat bokmerker"
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:81
+msgid ""
+"Please install the statistics addon to be able to configure a diaspora relay"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-msgid "Menu may be used to store saved bookmarks"
-msgstr "Menyen kan brukes til å lagre lagrede bokmerker"
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:91
+msgid "Diaspora Relay Handle"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
-msgid "Submit and proceed"
-msgstr "Send inn og fortsett"
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:91
+msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:177 ../../Zotlabs/Module/Locs.php:124
-msgid "Drop"
-msgstr "Slett"
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:111
+msgid "Diaspora relay could not be imported"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:181
-msgid "Bookmarks allowed"
-msgstr "Bokmerker tillatt"
+#: ../../extend/addon/hzaddons/diaspora/diaspora.php:1103
+msgid "No subject"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:183
-msgid "Delete this menu"
-msgstr "Slett denne menyen"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:106
+msgid "Photos imported"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
-msgid "Edit menu contents"
-msgstr "Endre menyinnholdet"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:129
+msgid "Redmatrix Photo Album Import"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:185
-msgid "Edit this menu"
-msgstr "Endre denne menyen"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:130
+msgid "This will import all your Redmatrix photo albums to this channel."
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:201
-msgid "Menu could not be deleted."
-msgstr "Menyen kunne ikke bli slettet."
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:131
+#: ../../extend/addon/hzaddons/redfiles/redfiles.php:121
+msgid "Redmatrix Server base URL"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:214
-msgid "Edit Menu"
-msgstr "Endre meny"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:132
+#: ../../extend/addon/hzaddons/redfiles/redfiles.php:122
+msgid "Redmatrix Login Username"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:218
-msgid "Add or remove entries to this menu"
-msgstr "Legg til eller fjern punkter i denne menyen"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:133
+#: ../../extend/addon/hzaddons/redfiles/redfiles.php:123
+msgid "Redmatrix Login Password"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Menu name"
-msgstr "Menynavn"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134
+msgid "Import just this album"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Must be unique, only seen by you"
-msgstr "Må være unik, ses bare av deg"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134
+msgid "Leave blank to import all albums"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title"
-msgstr "Menytittel"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135
+msgid "Maximum count to import"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title as seen by others"
-msgstr "Menytittelen andre ser"
+#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135
+msgid "0 or blank to import all available"
+msgstr ""
-#: ../../Zotlabs/Module/Menu.php:222
-msgid "Allow bookmarks"
-msgstr "Tillat bokmerker"
+#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:38
+msgid "Some setting"
+msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:252
-msgid "Connection Default Permissions"
-msgstr "Forbindelsens standard tillatelser"
+#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:38
+msgid "A setting"
+msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:253
-msgid "Apply these permissions automatically"
-msgstr "Bruk disse tillatelsene automatisk"
+#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:46
+msgid "Skeleton Settings"
+msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:253
-msgid ""
-"If enabled, connection requests will be approved without your interaction"
+#: ../../extend/addon/hzaddons/qrator/qrator.php:48
+msgid "QR code"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:254
-msgid "Permission role"
+#: ../../extend/addon/hzaddons/qrator/qrator.php:63
+msgid "QR Generator"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:255
-msgid "Add permission role"
+#: ../../extend/addon/hzaddons/qrator/qrator.php:64
+msgid "Enter some text"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:259 ../../Zotlabs/Module/Connedit.php:700
-msgid ""
-"The permissions indicated on this page will be applied to all new "
-"connections."
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:26
+msgid "Dreamwidth Crosspost Connector Settings saved."
msgstr ""
-"Tillatelsene angitt på denne siden gjøres gjeldende for alle nye "
-"forbindelser."
-#: ../../Zotlabs/Module/Defperms.php:260
-msgid "Automatic approval settings"
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:51
+msgid "Dreamwidth username"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:263
-msgid "My Settings"
-msgstr "Mine innstillinger"
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:55
+msgid "Dreamwidth password"
+msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:266 ../../Zotlabs/Module/Connedit.php:720
-msgid "Individual Permissions"
-msgstr "Individuelle tillatelser"
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59
+msgid "Post to Dreamwidth by default"
+msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:267
-msgid ""
-"Some individual permissions may have been preset or locked based on your "
-"channel type and privacy settings."
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:67
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:96
+msgid "Link description (default:"
msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69
-msgid "This setting requires special processing and editing has been blocked."
+#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:75
+msgid "Dreamwidth Crosspost Connector"
msgstr ""
-"Denne innstillingen krever spesiell behandling og redigering har blitt "
-"blokkert."
-#: ../../Zotlabs/Module/Pconfig.php:58
-msgid "Configuration Editor"
-msgstr "Konfigurasjonsbehandler"
+#: ../../extend/addon/hzaddons/dwpost/dwpost.php:49
+msgid "Post to Dreamwidth"
+msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:59
-msgid ""
-"Warning: Changing some settings could render your channel inoperable. Please "
-"leave this page unless you are comfortable with and knowledgeable about how "
-"to correctly use this feature."
+#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:25
+msgid "Show Upload Limits"
msgstr ""
-"Advarsel: kanalen din kan slutte å virke ved endring av enkelte "
-"innstillinger. Vennligst forlat denne siden med mindre du er komfortabel med "
-"dette og vet hvordan du bruker denne funksjonen riktig."
-#: ../../Zotlabs/Module/Oauth2.php:54
-msgid "Name and Secret are required"
+#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:27
+msgid "Hubzilla configured maximum size: "
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:113
-msgid "Add OAuth2 application"
+#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:28
+msgid "PHP upload_max_filesize: "
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
-msgid "Grant Types"
+#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:29
+msgid "PHP post_max_size (must be larger than upload_max_filesize): "
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
-msgid "leave blank unless your application sepcifically requires this"
+#: ../../extend/addon/hzaddons/nsabait/Mod_Nsabait.php:23
+msgid "NSA Bait App"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
-msgid "Authorization scope"
+#: ../../extend/addon/hzaddons/nsabait/Mod_Nsabait.php:25
+msgid "Make yourself a political target."
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:132
-msgid "OAuth2 Application not found."
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:27
+msgid "No server specified"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
-msgid "leave blank unless your application specifically requires this"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:72
+msgid "Posts imported"
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:190
-msgid "Connected OAuth2 Apps"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:112
+msgid "Files imported"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:38
-msgid "Invalid message"
-msgstr "Ugyldig melding"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:134
+msgid ""
+"This will import all your conversations and cloud files from a cloned "
+"channel on another server. This may take a while if you have lots of posts "
+"and or files."
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:68
-msgid "no results"
-msgstr "ingen resultater"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
+msgid "Include posts"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:82
-msgid "channel sync processed"
-msgstr "kanalsynkronisering er behandlet"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135
+msgid "Conversations, Articles, Cards, and other posted content"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:86
-msgid "queued"
-msgstr "lagt i kø"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
+msgid "Include files"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:90
-msgid "posted"
-msgstr "lagt inn"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136
+msgid "Files, Photos and other cloud storage"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:94
-msgid "accepted for delivery"
-msgstr "akseptert for levering"
+#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:137
+msgid "Original Server base URL"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:98
-msgid "updated"
-msgstr "oppdatert"
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:24
+msgid "Friendica Crosspost Connector Settings saved."
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:102
-msgid "update ignored"
-msgstr "oppdatering ignorert"
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47
+msgid "Send public postings to Friendica by default"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:105
-msgid "permission denied"
-msgstr "tillatelse avvist"
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:51
+msgid "Friendica API Path"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:109
-msgid "recipient not found"
-msgstr "mottaker ble ikke funnet"
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:51
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:65
+msgid "https://{sitename}/api"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:129
-#, php-format
-msgid "Delivery report for %1$s"
-msgstr "Leveringsrapport for %1$s"
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:55
+msgid "Friendica login name"
+msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:134
-msgid "Redeliver"
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:59
+msgid "Friendica password"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:122
-msgid "Thing updated"
-msgstr "Tingen er oppdatert"
+#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:67
+msgid "Friendica Crosspost Connector"
+msgstr ""
-#: ../../Zotlabs/Module/Thing.php:174
-msgid "Object store: failed"
-msgstr "Objektlagring: mislyktes"
+#: ../../extend/addon/hzaddons/rtof/rtof.php:51
+msgid "Post to Friendica"
+msgstr ""
-#: ../../Zotlabs/Module/Thing.php:178
-msgid "Thing added"
-msgstr "Ting lagt til"
+#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:34
+msgid "New registration"
+msgstr ""
-#: ../../Zotlabs/Module/Thing.php:204
+#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:42
#, php-format
-msgid "OBJ: %1$s %2$s %3$s"
-msgstr "OBJ: %1$s %2$s %3$s"
-
-#: ../../Zotlabs/Module/Thing.php:267
-msgid "Show Thing"
-msgstr "Vis ting"
-
-#: ../../Zotlabs/Module/Thing.php:274
-msgid "item not found."
-msgstr "element ble ikke funnet."
-
-#: ../../Zotlabs/Module/Thing.php:307
-msgid "Edit Thing"
-msgstr "Endre ting"
-
-#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:366
-msgid "Select a profile"
-msgstr "Velg en profil"
-
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
-msgid "Post an activity"
-msgstr "Legg inn en aktivitet"
-
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
-msgid "Only sends to viewers of the applicable profile"
-msgstr "Sender bare til seere av den aktuelle profilen"
+msgid "Message sent to %s. New account registration: %s"
+msgstr ""
-#: ../../Zotlabs/Module/Thing.php:315 ../../Zotlabs/Module/Thing.php:371
-msgid "Name of thing e.g. something"
-msgstr "Navn på ting for eksempel noe"
+#: ../../extend/addon/hzaddons/redfiles/redfiles.php:119
+msgid "Redmatrix File Storage Import"
+msgstr ""
-#: ../../Zotlabs/Module/Thing.php:317 ../../Zotlabs/Module/Thing.php:372
-msgid "URL of thing (optional)"
-msgstr "URL til ting (valgfritt)"
+#: ../../extend/addon/hzaddons/redfiles/redfiles.php:120
+msgid "This will import all your Redmatrix cloud files to this channel."
+msgstr ""
-#: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:373
-msgid "URL for photo of thing (optional)"
-msgstr "URL til bilde av ting (valgfritt)"
+#: ../../extend/addon/hzaddons/mailtest/mailtest.php:19
+msgid "Send test email"
+msgstr ""
-#: ../../Zotlabs/Module/Thing.php:364
-msgid "Add Thing to your Profile"
-msgstr "Legg til ting i din profil"
+#: ../../extend/addon/hzaddons/mailtest/mailtest.php:50
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:50
+msgid "No recipients found."
+msgstr ""
-#: ../../Zotlabs/Module/Rmagic.php:46
-msgid "Authentication failed."
-msgstr "Autentisering mislyktes."
+#: ../../extend/addon/hzaddons/mailtest/mailtest.php:66
+msgid "Mail sent."
+msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:36
-msgid "Item sync completed!"
+#: ../../extend/addon/hzaddons/mailtest/mailtest.php:68
+msgid "Sending of mail failed."
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:51
-msgid "Item sync completed but no items were found!"
+#: ../../extend/addon/hzaddons/mailtest/mailtest.php:77
+msgid "Mail Test"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:68
-msgid "File sync completed!"
+#: ../../extend/addon/hzaddons/mailtest/mailtest.php:96
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:93
+msgid "Message subject"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:83
-msgid "File sync completed but no files were found!"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:57
+msgid "Errors encountered deleting database table "
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:98
-msgid "Channel clone status"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96
+msgid "Drop tables when uninstalling?"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:99
-msgid "Item sync status"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96
+msgid ""
+"If checked, the Rendezvous database tables will be deleted when the plugin "
+"is uninstalled."
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:100
-msgid "File sync status"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97
+msgid "Mapbox Access Token"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:107
-msgid "Channel cloning completed!"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97
+msgid ""
+"If you enter a Mapbox access token, it will be used to retrieve map tiles "
+"from Mapbox instead of the default OpenStreetMap tile server."
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:108
-msgid "Resume"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:162
+msgid "Rendezvous"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:109
-msgid "Only resume if sync stalled!"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:167
+msgid ""
+"This identity has been deleted by another member due to inactivity. Please "
+"press the \"New identity\" button or refresh the page to register a new "
+"identity. You may use the same name."
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:27
-msgid "Layout updated."
-msgstr "Layout er oppdatert."
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:168
+msgid "Welcome to Rendezvous!"
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129
-msgid "Edit System Page Description"
-msgstr "Endre beskrivelsen av systemsiden"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:169
+msgid ""
+"Enter your name to join this rendezvous. To begin sharing your location with "
+"the other members, tap the GPS control. When your location is discovered, a "
+"red dot will appear and others will be able to see you on the map."
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93
-msgid "(modified)"
-msgstr "(endret)"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:171
+msgid "Let's meet here"
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:124
-msgid "Layout not found."
-msgstr "Layouten ble ikke funnet."
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:174
+msgid "New marker"
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:130
-msgid "Module Name:"
-msgstr "Modulnavn:"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:175
+msgid "Edit marker"
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:131
-msgid "Layout Help"
-msgstr "Layout-hjelp"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:176
+msgid "New identity"
+msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:132
-msgid "Edit another layout"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:177
+msgid "Delete marker"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:133
-msgid "System layout"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:178
+msgid "Delete member"
msgstr ""
-#: ../../Zotlabs/Module/Home.php:104
-#, php-format
-msgid "Welcome to %s"
-msgstr "Velkommen til %s"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:179
+msgid "Edit proximity alert"
+msgstr ""
-#: ../../Zotlabs/Module/Suggest.php:52
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180
msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
+"A proximity alert will be issued when this member is within a certain radius "
+"of you.<br><br>Enter a radius in meters (0 to disable):"
msgstr ""
-"Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv "
-"igjen om 24 timer."
-
-#: ../../Zotlabs/Module/Connedit.php:171
-msgid "Connection updated."
-msgstr "Forbindelsen er oppdatert."
-#: ../../Zotlabs/Module/Connedit.php:173
-msgid "Failed to update connection record."
-msgstr "Mislyktes med å oppdatere forbindelsesinformasjonen."
-
-#: ../../Zotlabs/Module/Connedit.php:320
-msgid "Could not access address book record."
-msgstr "Fikk ikke tilgang til informasjonen i adresseboken."
-
-#: ../../Zotlabs/Module/Connedit.php:368
-msgid "Refresh failed - channel is currently unavailable."
-msgstr "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig."
-
-#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
-#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
-#: ../../Zotlabs/Module/Connedit.php:422
-msgid "Unable to set address book parameters."
-msgstr "Ikke i stand til å angi parametre for adresseboken."
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:185
+msgid "distance"
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:441
-msgid "Connection has been removed."
-msgstr "Forbindelsen har blitt fjernet."
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:181
+msgid "Proximity alert distance (meters)"
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:483
-#, php-format
-msgid "View %s's profile"
-msgstr "Vis %s sin profil"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:182
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:184
+msgid ""
+"A proximity alert will be issued when you are within a certain radius of the "
+"marker location.<br><br>Enter a radius in meters (0 to disable):"
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:504
-msgid "View recent posts and comments"
-msgstr "Vis nylige innlegg og kommentarer"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:183
+msgid "Marker proximity alert"
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:550
-msgid "Fetch Vcard"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:186
+msgid "Reminder note"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:553
-msgid "Fetch electronic calling card for this connection"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:187
+msgid ""
+"Enter a note to be displayed when you are within the specified proximity..."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:575
-msgid "Open Set Affinity section by default"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:199
+msgid "Add new rendezvous"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:612
-msgid "Filter"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:200
+msgid ""
+"Create a new rendezvous and share the access link with those you wish to "
+"invite to the group. Those who open the link become members of the "
+"rendezvous. They can view other member locations, add markers to the map, or "
+"share their own locations with the group."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:615
-msgid "Open Custom Filter section by default"
+#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:232
+msgid "You have no rendezvous. Press the button above to create a rendezvous!"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:626
-msgid "Set Affinity"
-msgstr "Angi nærhet"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:24
+msgid "Channel is required."
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:629
-msgid "Set Profile"
-msgstr "Angi profil"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:38
+msgid "Hubzilla Crosspost Connector Settings saved."
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:632
-msgid "Set Affinity & Profile"
-msgstr "Angi nærhet og profil"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61
+msgid "Send public postings to Hubzilla channel by default"
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:685
-#, php-format
-msgid "Contact: %s"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:65
+msgid "Hubzilla API Path"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:687
-msgid "Manage contact roles"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:69
+msgid "Hubzilla login name"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:694
-msgid "This contacts's primary address is"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:73
+msgid "Hubzilla channel name"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:695
-msgid "Available locations:"
-msgstr "Tilgjengelige plasseringer:"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:77
+msgid "Hubzilla password"
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:710
-msgid "Contact Pending Approval"
+#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:85
+msgid "Hubzilla Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:715
-#, php-format
-msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
+#: ../../extend/addon/hzaddons/redred/redred.php:50
+msgid "Post to Hubzilla"
msgstr ""
-"Vennligst velg profilen du ønsker å vise %s når profilen din ses på en "
-"sikret måte."
-#: ../../Zotlabs/Module/Connedit.php:721
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can <strong>not</strong> change those "
-"settings here."
+#: ../../extend/addon/hzaddons/workflow/workflow.php:224
+msgid "Workflow user."
msgstr ""
-"Noen tillatelser kan være arvet fra din kanals <a "
-"ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har "
-"høyere prioritet enn individuelle innstillinger. Du kan <strong>ikke</"
-"strong> endre arvede innstillingene her."
-#: ../../Zotlabs/Module/Connedit.php:722
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can change those settings here but "
-"they wont have any impact unless the inherited setting changes."
+#: ../../extend/addon/hzaddons/workflow/workflow.php:275
+msgid "This channel"
msgstr ""
-"Noen tillatelser kan være arvet fra din kanals <a "
-"ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har "
-"høyere prioritet enn individuelle innstillinger. Du kan endre disse "
-"innstillingene her, men de vil ikke få noen effekt før de arvede "
-"innstillingene endres."
-#: ../../Zotlabs/Module/Connedit.php:723
-msgid "Last update:"
-msgstr "Siste oppdatering:"
+#: ../../extend/addon/hzaddons/workflow/workflow.php:330
+msgid "Create New Workflow Item"
+msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:731
-msgid "Details"
+#: ../../extend/addon/hzaddons/workflow/workflow.php:564
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1466
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1485
+msgid "Workflow"
msgstr ""
-#: ../../Zotlabs/Module/Notifications.php:106
-#: ../../Zotlabs/Module/Notify.php:85
-msgid "No more system notifications."
-msgstr "Ingen flere systemvarsler."
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1454
+msgid "No Workflows Available"
+msgstr ""
-#: ../../Zotlabs/Module/Notifications.php:110
-#: ../../Zotlabs/Module/Notify.php:89
-msgid "System Notifications"
-msgstr "Systemvarsler"
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1484
+msgid "Add item to which workflow"
+msgstr ""
-#: ../../Zotlabs/Module/Notifications.php:111
-#: ../../Zotlabs/Lib/ThreadItem.php:483
-msgid "Mark all seen"
-msgstr "Merk alle som sett"
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1544
+#: ../../extend/addon/hzaddons/workflow/workflow.php:1663
+msgid "Create Workflow Item"
+msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:184
-msgid "Comanche page description language help"
-msgstr "Hjelp med Comanche sidebeskrivelsesspråk"
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2632
+msgid "Link"
+msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:188
-msgid "Layout Description"
-msgstr "Layout-beskrivelse"
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2634
+msgid "Web link."
+msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:193
-msgid "Download PDL file"
-msgstr "Last ned PDL-fil"
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2655
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2724
+msgid "Brief description or title"
+msgstr ""
-#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
-msgid "Location not found."
-msgstr "Plassering er ikke funnet."
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2663
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2732
+msgid "Notes and Info"
+msgstr ""
-#: ../../Zotlabs/Module/Locs.php:74
-msgid "Location lookup failed."
-msgstr "Oppslag på plassering mislyktes."
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2670
+msgid "Used to order links"
+msgstr ""
-#: ../../Zotlabs/Module/Locs.php:78
-msgid ""
-"Please select another location to become primary before removing the primary "
-"location."
+#: ../../extend/addon/hzaddons/workflow/workflow.php:2730
+msgid "Body"
msgstr ""
-"Vennligst velg en annen plassering som primær før du sletter gjeldende "
-"primære plassering."
-#: ../../Zotlabs/Module/Locs.php:106
-msgid "Syncing locations"
-msgstr "Synkroniserer plasseringer"
+#: ../../extend/addon/hzaddons/workflow/Settings/Mod_WorkflowSettings.php:101
+msgid "Workflow Settings"
+msgstr ""
-#: ../../Zotlabs/Module/Locs.php:115
-msgid "No locations found."
-msgstr "Ingen plasseringer ble funnet."
+#: ../../extend/addon/hzaddons/workflow/Settings/WorkflowSettingsUtil.php:145
+#, fuzzy
+#| msgid "Editor Settings"
+msgid "Workflow settings"
+msgstr "Instillinger for redigering"
-#: ../../Zotlabs/Module/Locs.php:120
-msgid "Manage Channel Locations"
-msgstr "Håndter kanalplasseringer"
+#: ../../extend/addon/hzaddons/nsfw/nsfw.php:153
+msgid "Possible adult content"
+msgstr ""
-#: ../../Zotlabs/Module/Locs.php:126
-msgid "Sync Now"
-msgstr "Synkroniser nå"
+#: ../../extend/addon/hzaddons/nsfw/nsfw.php:168
+#, php-format
+msgid "%s - view"
+msgstr ""
-#: ../../Zotlabs/Module/Locs.php:127
-msgid "Please wait several minutes between consecutive operations."
-msgstr "Vennligst vent flere minutter mellom hver etterfølgende operasjon."
+#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:22
+msgid "NSFW Settings saved."
+msgstr ""
-#: ../../Zotlabs/Module/Locs.php:128
+#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:42
msgid ""
-"When possible, drop a location by logging into that website/hub and removing "
-"your channel."
+"This app looks in posts for the words/text you specify below, and collapses "
+"any content containing those keywords so it is not displayed at "
+"inappropriate times, such as sexual innuendo that may be improper in a work "
+"setting. It is polite and recommended to tag any content containing nudity "
+"with #NSFW. This filter can also match any other word/text you specify, and "
+"can thereby be used as a general purpose content filter."
msgstr ""
-"Når mulig, fjern en plassering ved å logge inn på det nettstedet eller den "
-"hub-en og fjern din kanal."
-#: ../../Zotlabs/Module/Locs.php:129
-msgid "Use this form to drop the location if the hub is no longer operating."
+#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:47
+msgid "Comma separated list of keywords to hide"
msgstr ""
-"Bruk dette skjemaet for å fjerne plasseringen hvis huben ikke er i drift "
-"lenger."
-#: ../../Zotlabs/Module/Sources.php:41
-msgid "Failed to create source. No channel selected."
-msgstr "Mislyktes med å lage kilde. Ingen kanal er valgt."
-
-#: ../../Zotlabs/Module/Sources.php:57
-msgid "Source created."
-msgstr "Kilden er laget."
+#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:47
+msgid "Word, /regular-expression/, lang=xx, lang!=xx"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:70
-msgid "Source updated."
-msgstr "Kilden er oppdatert."
+#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:56
+msgid "NSFW"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:99
-msgid "*"
-msgstr "*"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:21
+msgid "Three Dimensional Tic-Tac-Toe"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:105 ../../Zotlabs/Lib/Apps.php:373
-msgid "Channel Sources"
-msgstr "Kanalkilder"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:54
+msgid "3D Tic-Tac-Toe"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:106
-msgid "Manage remote sources of content for your channel."
-msgstr "Håndtere eksterne innholdskilder til din kanal."
+#: ../../extend/addon/hzaddons/tictac/tictac.php:59
+msgid "New game"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
-msgid "New Source"
-msgstr "Ny kilde"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:60
+msgid "New game with handicap"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
+#: ../../extend/addon/hzaddons/tictac/tictac.php:61
msgid ""
-"Import all or selected content from the following channel into this channel "
-"and distribute it according to your channel settings."
+"Three dimensional tic-tac-toe is just like the traditional game except that "
+"it is played on multiple levels simultaneously. "
msgstr ""
-"Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne "
-"kanalen og distribuer det i henhold til dine egne kanalinnstillinger."
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Only import content with these words (one per line)"
-msgstr "Bare importer innhold med disse ordene (ett ord per linje)"
-
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Leave blank to import all public content"
-msgstr "La stå tomt for å importere alt offentlig innhold"
-
-#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
-msgid "Channel Name"
-msgstr "Kanalnavn"
-
-#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
+#: ../../extend/addon/hzaddons/tictac/tictac.php:62
msgid ""
-"Add the following categories to posts imported from this source (comma "
-"separated)"
+"In this case there are three levels. You win by getting three in a row on "
+"any level, as well as up, down, and diagonally across the different levels."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Resend posts with this channel as author"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:64
+msgid ""
+"The handicap game disables the center position on the middle level because "
+"the player claiming this square often has an unfair advantage."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Copyrights may apply"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:183
+msgid "You go first..."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
-msgid "Source not found."
-msgstr "Kilden ble ikke funnet."
+#: ../../extend/addon/hzaddons/tictac/tictac.php:188
+msgid "I'm going first this time..."
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:149
-msgid "Edit Source"
-msgstr "Endre kilde"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:194
+msgid "You won!"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:150
-msgid "Delete Source"
-msgstr "Slett kilde"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:200
+#: ../../extend/addon/hzaddons/tictac/tictac.php:225
+msgid "\"Cat\" game!"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:180
-msgid "Source removed"
-msgstr "Kilden er fjernet"
+#: ../../extend/addon/hzaddons/tictac/tictac.php:223
+msgid "I won!"
+msgstr ""
-#: ../../Zotlabs/Module/Sources.php:182
-msgid "Unable to remove source."
-msgstr "Ikke i stand til å fjerne kilde."
+#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:27
+msgid "Photo Cache settings saved."
+msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:93
-msgid "Select a bookmark folder"
-msgstr "Velg en bokmerkemappe"
+#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:43
+msgid ""
+"Saves a copy of images from external sites locally to increase your "
+"anonymity in the web."
+msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:98
-msgid "Save Bookmark"
-msgstr "Lagre bokmerke"
+#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:49
+msgid "Minimal photo size for caching"
+msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:99
-msgid "URL of bookmark"
-msgstr "URL-en til bokmerket"
+#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:51
+msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
+msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:104
-msgid "Or enter new bookmark folder name"
-msgstr "Eller skriv nytt navn på bokmerkemappe"
+#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:60
+msgid "Photo Cache"
+msgstr ""
-#: ../../Zotlabs/Lib/AccessList.php:26
-msgid ""
-"A deleted privacy group with this name was revived. Existing item "
-"permissions <strong>may</strong> apply to this privacy group and any future "
-"members. If this is not what you intended, please create another privacy "
-"group with a different name."
+#: ../../extend/addon/hzaddons/logrot/logrot.php:36
+msgid "Logfile archive directory"
msgstr ""
-#: ../../Zotlabs/Lib/AccessList.php:268
-msgid "Select a privacy group"
+#: ../../extend/addon/hzaddons/logrot/logrot.php:36
+msgid "Directory to store rotated logs"
msgstr ""
-#: ../../Zotlabs/Lib/Permcat.php:83
-msgctxt "permcat"
-msgid "Default"
-msgstr "Standard"
+#: ../../extend/addon/hzaddons/logrot/logrot.php:37
+msgid "Logfile size in bytes before rotating"
+msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2398
-#, php-format
-msgid "Likes %1$s's %2$s"
+#: ../../extend/addon/hzaddons/logrot/logrot.php:38
+msgid "Number of logfiles to retain"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2401
-#, php-format
-msgid "Doesn't like %1$s's %2$s"
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:23
+msgid "XMPP settings updated."
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2407
-#, php-format
-msgid "Will attend %s's event"
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:35
+msgid "XMPP App"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2410
-#, php-format
-msgid "Will not attend %s's event"
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:36
+msgid "Embedded XMPP (Jabber) client"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2413
-#, php-format
-msgid "May attend %s's event"
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:52
+msgid "Individual credentials"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2416
-#, php-format
-msgid "May not attend %s's event"
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:58
+msgid "Jabber BOSH server"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:60
-msgid "$Projectname Notification"
-msgstr "$Projectname varsling"
+#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:67
+msgid "XMPP Settings"
+msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:63
-msgid "Thank You,"
-msgstr "Tusen takk,"
+#: ../../extend/addon/hzaddons/xmpp/xmpp.php:44
+msgid "Jabber BOSH host"
+msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:66
-#, php-format
-msgid "This email was sent by %1$s at %2$s."
+#: ../../extend/addon/hzaddons/xmpp/xmpp.php:45
+msgid "Use central userbase"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:67
-#, php-format
+#: ../../extend/addon/hzaddons/xmpp/xmpp.php:45
msgid ""
-"To stop receiving these messages, please adjust your Notification Settings "
-"at %s"
+"If enabled, members will automatically login to an ejabberd server that has "
+"to be installed on this machine with synchronized credentials via the "
+"\"auth_ejabberd.php\" script."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:68
-#, php-format
-msgid "To stop receiving these messages, please adjust your %s."
-msgstr ""
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:41
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:109
+msgid "(No Title)"
+msgstr "(Ingen tittel)"
-#: ../../Zotlabs/Lib/Enotify.php:123
-#, php-format
-msgid "%s <!item_type!>"
-msgstr "%s <!item_type!>"
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:123
+msgid "Wiki page create failed."
+msgstr "Kunne ikke opprette wikiside."
-#: ../../Zotlabs/Lib/Enotify.php:131
-#, php-format
-msgid "[$Projectname:Notify] New direct message received at %s"
-msgstr "[$Projectname:Notify] Ny direktemelding mottatt kl. %s"
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:137
+msgid "Wiki not found."
+msgstr "Fant ikke wikien."
-#: ../../Zotlabs/Lib/Enotify.php:133
-#, php-format
-msgid "%1$s sent you a new direct message at %2$s"
-msgstr "%1$s sendte deg en ny direktemelding kl. %2$s"
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:148
+msgid "Destination name already exists"
+msgstr "Navnet finnes allerede"
-#: ../../Zotlabs/Lib/Enotify.php:134
-#, php-format
-msgid "%1$s sent you %2$s."
-msgstr "%1$s sendte deg %2$s."
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:181
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:376
+msgid "Page not found"
+msgstr "Fant ikke siden"
-#: ../../Zotlabs/Lib/Enotify.php:134
-msgid "a direct message"
-msgstr "en direktemelding"
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:211
+msgid "Error reading page content"
+msgstr "Det oppstod en feil under lesing av innholder på siden"
-#: ../../Zotlabs/Lib/Enotify.php:135
-#, php-format
-msgid "Please visit %s to view and/or reply to your direct messages."
-msgstr "Gå til %s for å vise og/eller svare på dine direktemeldinger."
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:367
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:425
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:493
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:534
+msgid "Error reading wiki"
+msgstr "Det oppstod en feil ved lesing av wikien"
-#: ../../Zotlabs/Lib/Enotify.php:148
-msgid "requested to comment on"
-msgstr ""
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:411
+msgid "Page update failed."
+msgstr "Oppdatering av siden mislyktes."
-#: ../../Zotlabs/Lib/Enotify.php:148
-msgid "commented on"
-msgstr ""
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:447
+msgid "Nothing deleted"
+msgstr "Ingenting ble slettet"
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:314
-#, fuzzy
-#| msgid "Request date"
-msgid "requested to like"
-msgstr "Dato for forespørsel"
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:514
+msgid "Compare: object not found."
+msgstr "Sammanlign: fant ikke objektet."
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:314
-msgid "liked"
-msgstr ""
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:521
+msgid "Page updated"
+msgstr "Siden ble oppdatert"
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:317
-msgid "requested to dislike"
-msgstr ""
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:529
+msgid "Wiki resource_id required for git commit"
+msgstr "Wiki ressurs_id er nødvendig for å lagre i git"
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:317
-msgid "disliked"
-msgstr ""
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:589
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:29
+msgctxt "wiki_history"
+msgid "Message"
+msgstr "Melding"
-#: ../../Zotlabs/Lib/Enotify.php:169
-msgid "voted on"
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:590
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:30
+msgid "Date"
+msgstr "Dato"
+
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:591
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:364
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:31
+msgid "Revert"
+msgstr "Tilbakestill"
+
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:592
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:32
+msgid "Compare"
+msgstr "Sammenlign"
+
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWiki.php:144
+msgid "Wiki updated successfully"
+msgstr "Wikien ble oppdatert"
+
+#: ../../extend/addon/hzaddons/wiki/Lib/NativeWiki.php:204
+msgid "Wiki files deleted successfully"
+msgstr "Wikifiler ble slettet"
+
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:136
+msgid "Error retrieving wiki"
+msgstr "Det oppstod en feil ved henting av wikien"
+
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:143
+msgid "Error creating zip file export folder"
+msgstr "Det oppstod en feil ved eksport av mappe til zip fil"
+
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:194
+msgid "Error downloading wiki: "
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:212
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:209
+#: ../../extend/addon/hzaddons/wiki/wiki.php:45
+#: ../../extend/addon/hzaddons/wiki/wiki.php:98
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_list.php:23
+msgid "Wikis"
+msgstr "Wikier"
+
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:219
+msgid "Wiki name"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:220
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220
+msgid "Content type"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:229 ../../Zotlabs/Lib/Enotify.php:321
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:223
+msgid "Any&nbsp;type"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:241
-#, php-format
-msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230
+msgid "Lock content type"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:243
-#, php-format
-msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231
+msgid "Create a status post for this wiki"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:244
-#, php-format
-msgid "%1$s commented on an item/conversation you have been following"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:232
+msgid "Edit Wiki Name"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:247 ../../Zotlabs/Lib/Enotify.php:341
-#: ../../Zotlabs/Lib/Enotify.php:357 ../../Zotlabs/Lib/Enotify.php:381
-#: ../../Zotlabs/Lib/Enotify.php:398 ../../Zotlabs/Lib/Enotify.php:411
-#, php-format
-msgid "Please visit %s to view and/or reply to the conversation."
-msgstr "Vennligst besøk %s for å se og/eller svare i samtalen."
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:277
+#, fuzzy
+msgid "Wiki not found"
+msgstr "Fant ikke wikien."
-#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:252
-#, php-format
-msgid "Please visit %s to approve or reject this comment."
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:303
+msgid "Rename page"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:337
-#, php-format
-msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:318
+msgid "Error retrieving page content"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:338
-#, php-format
-msgid "%1$s liked an item/conversation you created"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:326
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:328
+msgid "New page"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:349
-#, php-format
-msgid "[$Projectname:Notify] %s posted to your profile wall"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:363
+msgid "Revision Comparison"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:351
-#, php-format
-msgid "%1$s posted to your profile wall at %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:371
+msgid "Short description of your changes (optional)"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:353
-#, php-format
-msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:391
+msgid "New page name"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:375
-#, php-format
-msgid "[$Projectname:Notify] %s tagged you"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:396
+msgid "Embed image from photo albums"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:376
-#, php-format
-msgid "%1$s tagged you at %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:407
+msgid "History"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:377
-#, php-format
-msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:485
+msgid "Error creating wiki. Invalid name."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:388
-#, php-format
-msgid "[$Projectname:Notify] %1$s poked you"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:492
+msgid "A wiki with this name already exists."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:389
-#, php-format
-msgid "%1$s poked you at %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:505
+msgid "Wiki created, but error creating Home page."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:390
-#, php-format
-msgid "%1$s [zrl=%2$s]poked you[/zrl]."
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:512
+msgid "Error creating wiki"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:405
-#, php-format
-msgid "[$Projectname:Notify] %s tagged your post"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:536
+msgid "Error updating wiki. Invalid name."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:406
-#, php-format
-msgid "%1$s tagged your post at %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:555
+msgid "Error updating wiki"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:407
-#, php-format
-msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:570
+msgid "Wiki delete permission denied."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:418
-msgid "[$Projectname:Notify] Introduction received"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:580
+msgid "Error deleting wiki"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:419
-#, php-format
-msgid "You've received an new connection request from '%1$s' at %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:613
+msgid "New page created"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:420
-#, php-format
-msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:739
+msgid "Cannot delete Home"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:423 ../../Zotlabs/Lib/Enotify.php:441
-#, php-format
-msgid "You may visit their profile at %s"
-msgstr "Du kan besøke profilen deres på %s"
-
-#: ../../Zotlabs/Lib/Enotify.php:425
-#, php-format
-msgid "Please visit %s to approve or reject the connection request."
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:815
+msgid "Current Revision"
msgstr ""
-"Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse."
-#: ../../Zotlabs/Lib/Enotify.php:432
-msgid "[$Projectname:Notify] Friend suggestion received"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:815
+msgid "Selected Revision"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:433
-#, php-format
-msgid "You've received a friend suggestion from '%1$s' at %2$s"
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:870
+msgid "You must be authenticated."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:434
-#, php-format
-msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
-msgstr ""
+#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:899
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:64
+msgid "Add new page"
+msgstr "Legg til ny side"
-#: ../../Zotlabs/Lib/Enotify.php:439
-msgid "Name:"
-msgstr "Navn:"
+#: ../../extend/addon/hzaddons/wiki/wiki.php:48
+#: ../../extend/addon/hzaddons/cards/cards.php:51
+msgid "View Cards"
+msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:440
-msgid "Photo:"
-msgstr "Bilde:"
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:58
+msgid "Wiki Pages"
+msgstr "Wikisider"
-#: ../../Zotlabs/Lib/Enotify.php:443
-#, php-format
-msgid "Please visit %s to approve or reject the suggestion."
-msgstr "Vennligst besøk %s for å godkjenne eller avslå dette forslaget."
+#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:69
+msgid "Page name"
+msgstr "Sidenavn"
-#: ../../Zotlabs/Lib/Enotify.php:668
-msgid "[$Projectname:Notify]"
+#: ../../extend/addon/hzaddons/wholikesme/wholikesme.php:30
+msgid "Who likes me?"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:834
-msgid "created a new poll"
-msgstr "opprettet spørreskjema"
+#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:129
+msgid "Edit Card"
+msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:834
-msgid "created a new post"
-msgstr "laget et nytt innlegg"
+#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:115
+msgid "Add Card"
+msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:835
-#, php-format
-msgid "voted on %s's poll"
-msgstr "stemte på %s sitt spørreskjema"
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:25
+msgid "Libertree Crosspost Connector Settings saved."
+msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:835
-#, php-format
-msgid "commented on %s's post"
-msgstr "kommenterte på %s sitt innlegg"
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:49
+msgid "Libertree API token"
+msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:839
-#, php-format
-msgid "repeated %s's post"
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:53
+msgid "Libertree site URL"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:843
-#, php-format
-msgid "liked %s's post"
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57
+msgid "Post to Libertree by default"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:847
-#, php-format
-msgid "disliked %s's post"
+#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:65
+msgid "Libertree Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:851 ../../Zotlabs/Lib/Enotify.php:954
-msgid "shared a file with you"
+#: ../../extend/addon/hzaddons/libertree/libertree.php:43
+msgid "Post to Libertree"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:860
-#, php-format
-msgid "edited a post dated %s"
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:19
+msgid "Send email to all members"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:863
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:74
#, php-format
-msgid "edited a comment dated %s"
+msgid "%1$d of %2$d messages sent."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:939
-msgid "added your channel"
-msgstr "la til din kanal"
-
-#: ../../Zotlabs/Lib/Enotify.php:969
-msgid "sent you a direct message"
-msgstr "sendte deg en direktemelding"
-
-#: ../../Zotlabs/Lib/Enotify.php:976
-msgid "g A l F d"
-msgstr "g A l F d"
-
-#: ../../Zotlabs/Lib/Enotify.php:979
-msgid "[today]"
-msgstr "[idag]"
-
-#: ../../Zotlabs/Lib/Enotify.php:989
-msgid "created an event"
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:82
+msgid "Send email to all hub members."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:1004
-msgid "status verified"
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:94
+msgid "Sender Email address"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:46 ../../Zotlabs/Lib/Connect.php:147
-msgid "Channel is blocked on this site."
-msgstr "Kanalen er blokkert på dette nettstedet."
+#: ../../extend/addon/hzaddons/hubwall/hubwall.php:95
+msgid "Test mode (only send to hub administrator)"
+msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:51
-msgid "Channel location missing."
-msgstr "Kanalplassering mangler."
+#: ../../extend/addon/hzaddons/mdpost/mdpost.php:42
+msgid "Use markdown for editing posts"
+msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:105
-msgid "Remote channel or protocol unavailable."
+#: ../../extend/addon/hzaddons/openid/openid.php:49
+msgid ""
+"We encountered a problem while logging in with the OpenID you provided. "
+"Please check the correct spelling of the ID."
msgstr ""
+"Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk "
+"at ID-en er stavet riktig."
-#: ../../Zotlabs/Lib/Connect.php:141
-msgid "Channel discovery failed."
-msgstr "Kanaloppdagelse mislyktes."
+#: ../../extend/addon/hzaddons/openid/openid.php:49
+msgid "The error message was:"
+msgstr "Feilmeldingen var:"
-#: ../../Zotlabs/Lib/Connect.php:159
-msgid "Protocol disabled."
-msgstr "Protokollen er avskrudd."
+#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:32
+msgid "OpenID protocol error. No ID returned."
+msgstr "OpenID protokollfeil. Ingen ID ble returnert."
-#: ../../Zotlabs/Lib/Connect.php:171
-msgid "Cannot connect to yourself."
-msgstr "Kan ikke lage forbindelse med deg selv."
+#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:78
+#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:179
+#, php-format
+msgid "Welcome %s. Remote authentication successful."
+msgstr "Velkommen %s. Ekstern autentisering er vellykket."
-#: ../../Zotlabs/Lib/Connect.php:276
-msgid "error saving data"
-msgstr ""
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:52
+msgid "First Name"
+msgstr "Fornavn"
-#: ../../Zotlabs/Lib/Chatroom.php:25
-msgid "Missing room name"
-msgstr "Mangler romnavn"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:53
+msgid "Last Name"
+msgstr "Etternavn"
-#: ../../Zotlabs/Lib/Chatroom.php:34
-msgid "Duplicate room name"
-msgstr "Duplikat romnavn"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:55
+msgid "Full Name"
+msgstr "Fullt navn"
-#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
-msgid "Invalid room specifier."
-msgstr "Ugyldig rom-spesifisering."
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:61
+msgid "Profile Photo 16px"
+msgstr "Profilbilde 16px"
-#: ../../Zotlabs/Lib/Chatroom.php:124
-msgid "Room not found."
-msgstr "Rommet ble ikke funnet."
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:62
+msgid "Profile Photo 32px"
+msgstr "Profilbilde 32px"
-#: ../../Zotlabs/Lib/Chatroom.php:145
-msgid "Room is full"
-msgstr "Rommet er fullt"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:63
+msgid "Profile Photo 48px"
+msgstr "Profilbilde 48px"
-#: ../../Zotlabs/Lib/Apps.php:329
-msgid "Affinity Tool"
-msgstr "Nærhetsverktøy"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:64
+msgid "Profile Photo 64px"
+msgstr "Profilbilde 64px"
-#: ../../Zotlabs/Lib/Apps.php:332
-msgid "Site Admin"
-msgstr "Nettstedsadministrator"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:65
+msgid "Profile Photo 80px"
+msgstr "Profilbilde 80px"
-#: ../../Zotlabs/Lib/Apps.php:336
-msgid "Content Filter"
-msgstr ""
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:66
+msgid "Profile Photo 128px"
+msgstr "Profilbilde 128px"
-#: ../../Zotlabs/Lib/Apps.php:339
-msgid "Remote Diagnostics"
-msgstr ""
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:70
+msgid "Birth Year"
+msgstr "Fødselsår"
-#: ../../Zotlabs/Lib/Apps.php:340
-msgid "Suggest Channels"
-msgstr "Foreslå kanaler"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:71
+msgid "Birth Month"
+msgstr "Fødselsmåne"
-#: ../../Zotlabs/Lib/Apps.php:342
-msgid "Channel Manager"
-msgstr "Kanalstyring"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:72
+msgid "Birth Day"
+msgstr "Fødselsdag"
-#: ../../Zotlabs/Lib/Apps.php:343
-msgid "Stream"
-msgstr "Tidslinje"
+#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:73
+msgid "Birthdate"
+msgstr "Fødselsdato"
-#: ../../Zotlabs/Lib/Apps.php:354
-msgid "Mail"
-msgstr "Melding"
+#: ../../extend/addon/hzaddons/irc/Mod_Irc.php:23
+#: ../../extend/addon/hzaddons/irc/irc.php:41
+msgid "Popular Channels"
+msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:357
-msgid "Chat"
-msgstr "Chat"
+#: ../../extend/addon/hzaddons/irc/irc.php:37
+msgid "Channels to auto connect"
+msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:359
-msgid "Probe"
-msgstr "Undersøk"
+#: ../../extend/addon/hzaddons/irc/irc.php:37
+#: ../../extend/addon/hzaddons/irc/irc.php:41
+msgid "Comma separated list"
+msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:360
-msgid "Suggest"
-msgstr "Forreslå"
+#: ../../extend/addon/hzaddons/irc/irc.php:45
+msgid "IRC Settings"
+msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:361
-msgid "Random Channel"
-msgstr "Tilfeldig kanal"
+#: ../../extend/addon/hzaddons/irc/irc.php:54
+msgid "IRC settings saved."
+msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:362
-msgid "Invite"
-msgstr "Inviter"
+#: ../../extend/addon/hzaddons/irc/irc.php:58
+msgid "IRC Chatroom"
+msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Storage/Browser.php:410
-msgid "Post"
-msgstr "Innlegg"
+#: ../../extend/addon/hzaddons/opensearch/opensearch.php:26
+#, php-format
+msgctxt "opensearch"
+msgid "Search %1$s (%2$s)"
+msgstr "Søk %1$s (%2$s)"
-#: ../../Zotlabs/Lib/Apps.php:370
-msgid "Notifications"
-msgstr "Varsler"
+#: ../../extend/addon/hzaddons/opensearch/opensearch.php:28
+msgctxt "opensearch"
+msgid "$Projectname"
+msgstr "$Projectname"
-#: ../../Zotlabs/Lib/Apps.php:371
-msgid "Order Apps"
+#: ../../extend/addon/hzaddons/opensearch/opensearch.php:43
+msgid "Search $Projectname"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:372
-msgid "CardDAV"
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:28
+msgid "ActivityPub Protocol Settings updated."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:376
-msgid "OAuth Apps Manager"
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:44
+msgid ""
+"The activitypub protocol does not support location independence. Connections "
+"you make within that network may be unreachable from alternate channel "
+"locations."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:377
-msgid "OAuth2 Apps Manager"
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:50
+msgid "Send activities of type note instead of article"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:378
-msgid "PDL Editor"
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:50
+msgid "Microblog services such as Mastodon do not properly support articles"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:381
-msgid "My Chatrooms"
+#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:58
+msgid "Activitypub Protocol"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:382
-msgid "Channel Export"
+#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:225
+msgid "Not allowed."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:576 ../../Zotlabs/Lib/Apps.php:598
-msgid "Purchase"
-msgstr "Kjøp"
-
-#: ../../Zotlabs/Lib/Apps.php:603
-msgid "Undelete"
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:23
+msgid "Insane Journal Crosspost Connector Settings saved."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:611
-msgid "Add to app-tray"
-msgstr "Legg til i meny"
-
-#: ../../Zotlabs/Lib/Apps.php:612
-msgid "Remove from app-tray"
-msgstr "Fjern fra meny"
-
-#: ../../Zotlabs/Lib/Apps.php:613
-msgid "Pin to navbar"
-msgstr "Fest til navigasjonslinjen"
-
-#: ../../Zotlabs/Lib/Apps.php:614
-msgid "Unpin from navbar"
-msgstr "Fjern fra navigasjonslinjen"
-
-#: ../../Zotlabs/Lib/Techlevels.php:10
-msgid "0. Beginner/Basic"
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:35
+msgid "Insane Journal Crosspost Connector App"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:11
-msgid "1. Novice - not skilled but willing to learn"
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:36
+msgid "Relay public postings to Insane Journal"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:12
-msgid "2. Intermediate - somewhat comfortable"
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:53
+msgid "InsaneJournal username"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:13
-msgid "3. Advanced - very comfortable"
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:57
+msgid "InsaneJournal password"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:14
-msgid "4. Expert - I can write computer code"
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61
+msgid "Post to InsaneJournal by default"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:15
-msgid "5. Wizard - I probably know more than you do"
+#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:69
+msgid "Insane Journal Crosspost Connector"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:163
-msgid "Directory Options"
-msgstr "Kataloginnstillinger"
-
-#: ../../Zotlabs/Lib/Libzotdir.php:165
-msgid "Safe Mode"
-msgstr "Trygt modus"
-
-#: ../../Zotlabs/Lib/Libzotdir.php:166
-msgid "Public Forums Only"
-msgstr "Bare offentlige forum"
+#: ../../extend/addon/hzaddons/ijpost/ijpost.php:44
+msgid "Post to Insane Journal"
+msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:168
-msgid "This Website Only"
-msgstr "Kun dette nettstedet"
+#: ../../extend/addon/hzaddons/planets/Mod_Planets.php:23
+msgid "Random Planet App"
+msgstr ""
-#: ../../Zotlabs/Lib/Libzot.php:686
-msgid "Unable to verify channel signature"
-msgstr "Ikke i stand til å sjekke kanalsignaturen"
+#: ../../extend/addon/hzaddons/planets/Mod_Planets.php:25
+msgid ""
+"Set a random planet from the Star Wars Empire as your location when posting"
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:108
-msgid "Restricted message"
-msgstr "Begrenset melding"
+#: ../../extend/addon/hzaddons/donate/donate.php:21
+msgid "Project Servers and Resources"
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:115
-msgid "Direct message"
-msgstr "Direktemelding"
+#: ../../extend/addon/hzaddons/donate/donate.php:22
+msgid "Project Creator and Tech Lead"
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:120
-msgid "Public Policy"
+#: ../../extend/addon/hzaddons/donate/donate.php:49
+msgid ""
+"And the hundreds of other people and organisations who helped make the "
+"Hubzilla possible."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:152
-msgid "Privacy conflict. Discretion advised."
+#: ../../extend/addon/hzaddons/donate/donate.php:52
+msgid ""
+"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving "
+"their time and expertise - and often paying out of pocket for services they "
+"share with others."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Storage/Browser.php:372
-msgid "Admin Delete"
+#: ../../extend/addon/hzaddons/donate/donate.php:53
+msgid ""
+"There is no corporate funding and no ads, and we do not collect and sell "
+"your personal information. (We don't control your personal information - "
+"<strong>you do</strong>.)"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:312
-msgid "Reply on this comment"
+#: ../../extend/addon/hzaddons/donate/donate.php:54
+msgid ""
+"Help support our ground-breaking work in decentralisation, web identity, and "
+"privacy."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:312
-msgid "reply"
+#: ../../extend/addon/hzaddons/donate/donate.php:56
+msgid ""
+"Your donations keep servers and services running and also helps us to "
+"provide innovative new features and continued development."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:312
-msgid "Reply to"
+#: ../../extend/addon/hzaddons/donate/donate.php:59
+msgid "Donate"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:335
-msgid "Delivery Report"
-msgstr "Leveringsrapport"
+#: ../../extend/addon/hzaddons/donate/donate.php:61
+msgid ""
+"Choose a project, developer, or public hub to support with a one-time "
+"donation"
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:355
-#, fuzzy, php-format
-#| msgid "%d comment"
-#| msgid_plural "%d comments"
-msgid "%d Comment"
-msgid_plural "%d Comments"
-msgstr[0] "%d kommentar"
-msgstr[1] "%d kommentarer"
+#: ../../extend/addon/hzaddons/donate/donate.php:62
+msgid "Donate Now"
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:356
-#, php-format
-msgid "%d unseen"
+#: ../../extend/addon/hzaddons/donate/donate.php:63
+msgid ""
+"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:406
-msgid "Forum"
+#: ../../extend/addon/hzaddons/donate/donate.php:64
+msgid ""
+"Please indicate if you would like your first name or full name (or nothing) "
+"to appear in our sponsor listing"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:413
-msgid "to"
-msgstr "til"
+#: ../../extend/addon/hzaddons/donate/donate.php:65
+msgid "Sponsor"
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:415
-msgid "Wall-to-Wall"
-msgstr "Vegg-til-vegg"
+#: ../../extend/addon/hzaddons/donate/donate.php:68
+msgid "Special thanks to: "
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:416
-msgid "via Wall-To-Wall:"
-msgstr "via vegg-til-vegg:"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:22
+#, fuzzy
+#| msgid "Edit App"
+msgid "Fediquest App"
+msgstr "Endre app"
-#: ../../Zotlabs/Lib/ThreadItem.php:444
-msgid "Attend"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:23
+msgid "A distributed quest for a given word (game)."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:462
-msgid "Go to previous comment"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:24
+msgid ""
+"To start a game, enter [fediquest]your_word[/fediquest] somewhere in a "
+"toplevel post."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:475
-msgid "Add to Calendar"
-msgstr "Legg til i kalender"
-
-#: ../../Zotlabs/Lib/ThreadItem.php:837
-msgid "Image"
-msgstr "Bilde"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:25
+msgid "Your contacts can post their guess in the comments."
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:839
-msgid "Insert Link"
-msgstr "Sett inn lenke"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:26
+msgid ""
+"Your channel will evaluate the guess and automatically post the response."
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:840
-msgid "Video"
-msgstr "Video"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:28
+msgid "Correct letters"
+msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:849
-msgid "Your full name (required)"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:29
+msgid "Letters contained in the word but at the wrong spot"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:850
-msgid "Your email address (required)"
+#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:30
+msgid "Letters not contained in the word"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:851
-msgid "Your website URL (optional)"
+#: ../../extend/addon/hzaddons/fediquest/fediquest.php:211
+msgid "ERROR: word length is not correct!"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:67
-msgid "Source code of failed update: "
+#: ../../extend/addon/hzaddons/wppost/wppost.php:47
+msgid "Post to WordPress"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:88
-#, php-format
-msgid "Update Error at %s"
-msgstr "Oppdateringsfeil ved %s"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:30
+msgid "Wordpress Settings saved."
+msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:94
-#, php-format
-msgid "Update %s failed. See error logs."
-msgstr "Oppdatering %s mislyktes. Se feilloggen."
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:67
+msgid "WordPress username"
+msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:108
-#: ../../Zotlabs/Access/PermissionRoles.php:384
-msgid "Public"
-msgstr "Offentlig"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:71
+msgid "WordPress password"
+msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:109
-msgid "Anybody in the $Projectname network"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:75
+msgid "WordPress API URL"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:110
-#, php-format
-msgid "Any account on %s"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:76
+msgid "Typically https://your-blog.tld/xmlrpc.php"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:111
-msgid "Any of my connections"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:79
+msgid "WordPress blogid"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:112
-msgid "Only connections I specifically allow"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:80
+msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:113
-msgid "Anybody authenticated (could include visitors from other networks)"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84
+msgid "Post to WordPress by default"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:114
-msgid "Any connections including those who haven't yet been approved"
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88
+msgid "Forward comments (requires hubzilla_wp plugin)"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:150
-msgid ""
-"This is your default setting for the audience of your normal stream, and "
-"posts."
+#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:104
+msgid "Wordpress Post"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:151
+#: ../../extend/addon/hzaddons/authchoose/Mod_Authchoose.php:30
msgid ""
-"This is your default setting for who can view your default channel profile"
+"Allow magic authentication only to websites of your immediate connections"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:152
-msgid "This is your default setting for who can view your connections"
+#: ../../extend/addon/hzaddons/authchoose/Mod_Authchoose.php:36
+msgid "Authchoose"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:153
-msgid ""
-"This is your default setting for who can view your file storage and photos"
+#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:48
+msgid "Your channel has been upgraded to $Projectname version"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:154
-msgid "This is your default setting for the audience of your webpages"
+#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:50
+msgid "Please have a look at the"
msgstr ""
-#: ../../Zotlabs/Lib/Libsync.php:819
-#, php-format
-msgid "Unable to verify site signature for %s"
-msgstr "Ikke i stand til å bekrefte signaturen til %s"
+#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:52
+msgid "git history"
+msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:337
-msgid "Social Networking"
-msgstr "Sosialt nettverk"
+#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:54
+msgid "change log"
+msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:338
-msgid "Social - Federation"
+#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:55
+msgid "for further info."
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:339
-msgid "Social - Mostly Public"
-msgstr "Sosial - ganske offentlig"
+#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:60
+#, fuzzy
+#| msgid "$Projectname"
+msgid "$Projectname Upgrade Info"
+msgstr "$Projectname"
-#: ../../Zotlabs/Access/PermissionRoles.php:340
-msgid "Social - Restricted"
-msgstr "Sosial - begrenset"
+#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:64
+msgid "Do not show this again"
+msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:341
-msgid "Social - Private"
-msgstr "Sosial - privat"
+#: ../../extend/addon/hzaddons/hideaside/Mod_Hideaside.php:28
+msgid "Hide Aside App"
+msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:344
-msgid "Community Forum"
-msgstr "Forum for fellesskap"
+#: ../../extend/addon/hzaddons/hideaside/Mod_Hideaside.php:29
+msgid "Fade out aside areas after a while when using endless scroll"
+msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:345
-msgid "Forum - Mostly Public"
-msgstr "Forum - ganske offentlig"
+#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:47
+msgid "text to include in all outgoing posts from this site"
+msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:346
-msgid "Forum - Restricted"
-msgstr "Forum - begrenset"
+#~ msgid "Link color"
+#~ msgstr "Lenkefarge"
-#: ../../Zotlabs/Access/PermissionRoles.php:347
-msgid "Forum - Private"
-msgstr "Forum - privat"
+#, fuzzy
+#~| msgid "Link color"
+#~ msgid "Dark link color"
+#~ msgstr "Lenkefarge"
-#: ../../Zotlabs/Access/PermissionRoles.php:350
-msgid "Feed Republish"
-msgstr "Republisering av strømmet innhold"
+#~ msgid "Example: 4px"
+#~ msgstr "For eksempel: 4px"
-#: ../../Zotlabs/Access/PermissionRoles.php:351
-msgid "Feed - Mostly Public"
-msgstr "Strøm - ganske offentlig"
+#, fuzzy
+#~ msgid "lonely"
+#~ msgstr "Ensom"
-#: ../../Zotlabs/Access/PermissionRoles.php:352
-msgid "Feed - Restricted"
-msgstr "Strøm - begrenset"
+#~ msgid "poke"
+#~ msgstr "prikk"
-#: ../../Zotlabs/Access/PermissionRoles.php:355
-msgid "Special Purpose"
-msgstr "Spesiell bruk"
+#~ msgid "poked"
+#~ msgstr "prikket"
-#: ../../Zotlabs/Access/PermissionRoles.php:356
-msgid "Special - Celebrity/Soapbox"
-msgstr "Spesiell - kjendis/talerstol"
+#~ msgid "ping"
+#~ msgstr "varsle"
-#: ../../Zotlabs/Access/PermissionRoles.php:357
-msgid "Special - Group Repository"
-msgstr "Spesiell - gruppelager"
+#~ msgid "pinged"
+#~ msgstr "varslet"
-#: ../../Zotlabs/Access/PermissionRoles.php:361
-msgid "Custom/Expert Mode"
-msgstr "Tilpasset/Ekspertmodus"
+#~ msgid "happy"
+#~ msgstr "glad"
-#: ../../Zotlabs/Access/PermissionRoles.php:385
-msgid "Personal"
-msgstr "Personlig"
+#~ msgid "sad"
+#~ msgstr "trist"
-#: ../../Zotlabs/Access/PermissionRoles.php:386
-#, fuzzy
-msgid "Community forum"
-msgstr "Forum for fellesskap"
+#~ msgid "mellow"
+#~ msgstr "dempet"
-#: ../../Zotlabs/Access/PermissionRoles.php:387
-msgid "Custom"
-msgstr ""
+#~ msgid "tired"
+#~ msgstr "trøtt"
-#: ../../Zotlabs/Access/Permissions.php:56
-msgid "Can view my channel stream and posts"
-msgstr ""
+#~ msgid "perky"
+#~ msgstr "oppkvikket"
-#: ../../Zotlabs/Access/Permissions.php:57
-msgid "Can send me their channel stream and posts"
-msgstr "Kan sende meg deres kanalstrøm og innlegg"
+#~ msgid "angry"
+#~ msgstr "sint"
-#: ../../Zotlabs/Access/Permissions.php:58
-msgid "Can view my default channel profile"
-msgstr "Kan se min standard kanalprofil"
+#~ msgid "stupefied"
+#~ msgstr "lamslått"
-#: ../../Zotlabs/Access/Permissions.php:59
-msgid "Can view my connections"
-msgstr "Kan se mine forbindelser"
+#~ msgid "puzzled"
+#~ msgstr "forundret"
-#: ../../Zotlabs/Access/Permissions.php:60
-msgid "Can view my file storage and photos"
-msgstr "Kan se mine filer og bilder"
+#~ msgid "interested"
+#~ msgstr "interessert"
-#: ../../Zotlabs/Access/Permissions.php:61
-msgid "Can upload/modify my file storage and photos"
-msgstr ""
+#~ msgid "bitter"
+#~ msgstr "bitter"
-#: ../../Zotlabs/Access/Permissions.php:62
-msgid "Can view my channel webpages"
-msgstr ""
+#~ msgid "cheerful"
+#~ msgstr "munter"
-#: ../../Zotlabs/Access/Permissions.php:63
-msgid "Can view my wiki pages"
-msgstr ""
+#~ msgid "alive"
+#~ msgstr "levende"
-#: ../../Zotlabs/Access/Permissions.php:64
-msgid "Can create/edit my channel webpages"
-msgstr ""
+#~ msgid "annoyed"
+#~ msgstr "irritert"
-#: ../../Zotlabs/Access/Permissions.php:65
-msgid "Can write to my wiki pages"
-msgstr ""
+#~ msgid "anxious"
+#~ msgstr "nervøs"
-#: ../../Zotlabs/Access/Permissions.php:66
-msgid "Can post on my channel (wall) page"
-msgstr ""
+#~ msgid "cranky"
+#~ msgstr "gretten"
-#: ../../Zotlabs/Access/Permissions.php:67
-msgid "Can comment on or like my posts"
-msgstr "Kan kommentere på eller like mine innlegg"
+#~ msgid "disturbed"
+#~ msgstr "foruroliget"
-#: ../../Zotlabs/Access/Permissions.php:68
-msgid "Can send me direct messages"
-msgstr "Kan sende meg direktemeldinger"
+#~ msgid "frustrated"
+#~ msgstr "frustrert"
-#: ../../Zotlabs/Access/Permissions.php:69
-msgid "Can like/dislike profiles and profile things"
-msgstr ""
+#~ msgid "depressed"
+#~ msgstr "lei seg"
-#: ../../Zotlabs/Access/Permissions.php:70
-msgid "Can chat with me"
-msgstr ""
+#~ msgid "motivated"
+#~ msgstr "motivert"
-#: ../../Zotlabs/Access/Permissions.php:71
-msgid "Can source/mirror my public posts in derived channels"
-msgstr ""
+#~ msgid "relaxed"
+#~ msgstr "avslappet"
-#: ../../Zotlabs/Access/Permissions.php:73
-msgid "Can administer my channel"
-msgstr ""
+#~ msgid "surprised"
+#~ msgstr "overrasket"
-#: ../../Zotlabs/Storage/Browser.php:292
-msgid "Change filename to"
-msgstr ""
+#, php-format
+#~ msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
+#~ msgstr "%1$s endret %2$s til &ldquo;%3$s&rdquo;"
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:393
-msgid "Select a target location"
-msgstr ""
+#, php-format
+#~ msgid "%1$s is now connected with %2$s"
+#~ msgstr "%1$s er nå forbundet med %2$s"
-#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:394
-msgid "Copy to target location"
-msgstr ""
+#, php-format
+#~ msgid "%1$s poked %2$s"
+#~ msgstr "%1$s prikket %2$s"
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
-msgid "Set permissions for all files and sub folders"
-msgstr ""
+#, php-format
+#~ msgctxt "mood"
+#~ msgid "%1$s is %2$s"
+#~ msgstr "%1$s er %2$s"
-#: ../../Zotlabs/Storage/Browser.php:312
-msgid "Notify your contacts about this file"
-msgstr "Varsle dine kontakter om denne filen"
+#~ msgctxt "title"
+#~ msgid "Agree"
+#~ msgstr "Enig"
-#: ../../Zotlabs/Storage/Browser.php:351
-msgid "File category"
-msgstr ""
+#~ msgctxt "title"
+#~ msgid "Disagree"
+#~ msgstr "Uenig"
-#: ../../Zotlabs/Storage/Browser.php:365
-msgid "Total"
-msgstr "Totalt"
+#~ msgctxt "title"
+#~ msgid "Abstain"
+#~ msgstr "Avstår"
-#: ../../Zotlabs/Storage/Browser.php:367
-msgid "Shared"
-msgstr "Delt"
+#~ msgid "Poke"
+#~ msgstr "Prikk"
-#: ../../Zotlabs/Storage/Browser.php:369
-msgid "Add Files"
-msgstr ""
+#~ msgctxt "noun"
+#~ msgid "Agree"
+#~ msgid_plural "Agrees"
+#~ msgstr[0] "Enig"
+#~ msgstr[1] "Enige"
-#: ../../Zotlabs/Storage/Browser.php:384
-msgid "parent"
-msgstr "opp et nivå"
+#~ msgctxt "noun"
+#~ msgid "Disagree"
+#~ msgid_plural "Disagrees"
+#~ msgstr[0] "Uenig"
+#~ msgstr[1] "Uenige"
-#: ../../Zotlabs/Storage/Browser.php:402
-#, fuzzy
-msgid "Select All"
-msgstr "velg alle"
+#~ msgctxt "noun"
+#~ msgid "Abstain"
+#~ msgid_plural "Abstains"
+#~ msgstr[0] "Avstår"
+#~ msgstr[1] "Avstår"
-#: ../../Zotlabs/Storage/Browser.php:403
-msgid "Bulk Actions"
-msgstr ""
+#~ msgid "female"
+#~ msgstr "kvinne"
-#: ../../Zotlabs/Storage/Browser.php:404
-msgid "Adjust Permissions"
-msgstr ""
+#, php-format
+#~ msgid "%1$s updated her %2$s"
+#~ msgstr "%1$s oppdaterte %2$s sitt"
-#: ../../Zotlabs/Storage/Browser.php:405
-msgid "Move or Copy"
-msgstr ""
+#~ msgid "male"
+#~ msgstr "mann"
-#: ../../Zotlabs/Storage/Browser.php:408
-msgid "Info"
-msgstr ""
+#, php-format
+#~ msgid "%1$s updated his %2$s"
+#~ msgstr "%1$s oppdaterte %2$s sitt"
-#: ../../Zotlabs/Storage/Browser.php:409
-msgid "Rename"
-msgstr ""
+#, php-format
+#~ msgid "%1$s updated their %2$s"
+#~ msgstr "%1$s oppdaterte %2$s deres"
-#: ../../Zotlabs/Storage/Browser.php:411
-msgid "Attachment BBcode"
-msgstr ""
+#~ msgid "profile photo"
+#~ msgstr "profilbilde"
-#: ../../Zotlabs/Storage/Browser.php:412
-msgid "Embed BBcode"
-msgstr ""
+#~ msgctxt "edit_activity"
+#~ msgid "Post"
+#~ msgstr "Innlegg"
-#: ../../Zotlabs/Storage/Browser.php:413
-msgid "Link BBcode"
-msgstr ""
+#~ msgctxt "edit_activity"
+#~ msgid "Comment"
+#~ msgstr "Kommentar"
-#: ../../Zotlabs/Storage/Browser.php:486
-#, php-format
-msgid "You are using %1$s of your available file storage."
-msgstr "Du bruker %1$s av din tilgjengelige lagringsplass."
+#~ msgid "Like this channel"
+#~ msgstr "Lik denne kanalen"
-#: ../../Zotlabs/Storage/Browser.php:491
-#, php-format
-msgid "You are using %1$s of %2$s available file storage. (%3$s&#37;)"
-msgstr "Du bruker %1$s av %2$s tilgjengelig lagringsplass (%3$s&#37;)"
+#~ msgid "I agree"
+#~ msgstr "Jeg er enig"
-#: ../../Zotlabs/Storage/Browser.php:502
-msgid "WARNING:"
-msgstr "ADVARSEL:"
+#~ msgid "I disagree"
+#~ msgstr "Jeg er uenig"
-#: ../../Zotlabs/Storage/Browser.php:543
-msgid "Create new folder"
-msgstr "Lag ny mappe"
+#~ msgid "I abstain"
+#~ msgstr "Jeg avstår"
-#: ../../Zotlabs/Storage/Browser.php:545
-msgid "Upload file"
-msgstr "Last opp fil"
+#, php-format
+#~ msgid "%1$s agrees with %2$s's %3$s"
+#~ msgstr "%1$s er enig med %2$s sin %3$s"
-#: ../../Zotlabs/Storage/Browser.php:557
-msgid "Drop files here to immediately upload"
-msgstr ""
+#, php-format
+#~ msgid "%1$s doesn't agree with %2$s's %3$s"
+#~ msgstr "%1$s er ikke enig med %2$s sin %3$s"
-#: ../../Zotlabs/Storage/Browser.php:560
-msgid ""
-"You can select files via the upload button or drop them right here or into "
-"an existing folder."
-msgstr ""
+#, php-format
+#~ msgid "%1$s abstains from a decision on %2$s's %3$s"
+#~ msgstr "%1$s avstår fra å mene noe om %2$s sin %3$s"
-#: ../../boot.php:1722
-msgid "Create an account to access services and applications"
-msgstr ""
+#~ msgid "Poke somebody"
+#~ msgstr "Dult noen"
-#: ../../boot.php:1740
-msgid "Email or nickname"
-msgstr ""
+#, fuzzy
+#~| msgid "Poke somebody"
+#~ msgid "Poke or ping somebody"
+#~ msgstr "Dult noen"
-#: ../../boot.php:1750
-msgid "Password"
-msgstr "Passord"
+#~ msgid "Recipient"
+#~ msgstr "Mottaker"
-#: ../../boot.php:1751
-msgid "Remember me"
-msgstr "Husk meg"
+#, fuzzy
+#~| msgid "Connections"
+#~ msgid "Choose action"
+#~ msgstr "Forbindelser"
-#: ../../boot.php:1754
-msgid "Forgot your password?"
-msgstr "Glemt passordet ditt?"
+#~ msgid "Make this post private"
+#~ msgstr "Gjør dette innlegget privat"
-#: ../../boot.php:2625
-#, php-format
-msgid "[$Projectname] Website SSL error for %s"
-msgstr ""
+#~ msgid "Mood"
+#~ msgstr "Stemning"
-#: ../../boot.php:2630
-msgid "Website SSL certificate is not valid. Please correct."
-msgstr "Nettstedets SSL-sertifikat er ikke gyldig. Vennligst fiks dette."
+#~ msgid "Set your current mood and tell your friends"
+#~ msgstr "Angi ditt nåværende humør og fortell dine venner"
-#: ../../boot.php:2746
-#, php-format
-msgid "[$Projectname] Cron tasks not running on %s"
-msgstr ""
+#, fuzzy
+#~ msgid "Refresh failed - channel is currently unavailable"
+#~ msgstr "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig."
-#: ../../boot.php:2751
-msgid "Cron/Scheduled tasks not running."
-msgstr "Cron/planlagte oppgaver kjører ikke."
+#~ msgid "Show Thing"
+#~ msgstr "Vis ting"
#~ msgid "Navigation bar icon color "
#~ msgstr "Navigasjonslinjens ikonfarge"
@@ -16051,4 +15953,3 @@ msgstr "Cron/planlagte oppgaver kjører ikke."
#~ msgid "Page owner information could not be retrieved."
#~ msgstr "Informasjon om sideeier kunne ikke hentes."
-
diff --git a/view/nb-no/hstrings.php b/view/nb/hstrings.php
index 7b1bf396d..e1ab75bef 100644
--- a/view/nb-no/hstrings.php
+++ b/view/nb/hstrings.php
@@ -1,951 +1,29 @@
<?php
-if(! function_exists("string_plural_select_nb_no")) {
-function string_plural_select_nb_no($n){
+if(! function_exists("string_plural_select_nb")) {
+function string_plural_select_nb($n){
return ($n != 1 ? 1 : 0);
}}
App::$rtl = 0;
App::$strings["plural_function_code"] = "(n != 1 ? 1 : 0)";
-App::$strings["Default"] = "Standard";
-App::$strings["Focus (Hubzilla default)"] = "Focus (Hubzilla standard)";
-App::$strings["Submit"] = "Lagre";
-App::$strings["Theme settings"] = "Instillinger for utseende";
-App::$strings["Dark style"] = "";
-App::$strings["Light style"] = "";
-App::$strings["Common settings"] = "";
-App::$strings["Default to dark mode"] = "Standard mappe for opplasting av bilder";
-App::$strings["No"] = "Nei";
-App::$strings["Yes"] = "Ja";
-App::$strings["Always use light icons for navbar"] = "";
-App::$strings["Enable this option if you use a dark navbar color in light mode"] = "";
-App::$strings["Narrow navbar"] = "Smal navigasjonslinje";
-App::$strings["Navigation bar background color"] = "Navigasjonslinjens bakgrunnsfarge";
-App::$strings["Dark navigation bar background color"] = "Navigasjonslinjens bakgrunnsfarge";
-App::$strings["Link color"] = "Lenkefarge";
-App::$strings["Dark link color"] = "Lenkefarge";
-App::$strings["Link hover color"] = "Lenkefarge når musepekeren er over";
-App::$strings["Dark link hover color"] = "Lenkefarge når musepekeren er over";
-App::$strings["Set the background color"] = "Angi bakgrunnsfargen";
-App::$strings["Set the dark background color"] = "Angi bakgrunnsfargen";
-App::$strings["Set the background image"] = "Angi bakgrunnsbilde";
-App::$strings["Set the dark background image"] = "Angi bakgrunnsbilde";
-App::$strings["Set font-size for the entire application"] = "Angi skriftstørrelsen for hele programmet";
-App::$strings["Examples: 1rem, 100%, 16px"] = "For eksempel: 1rem, 100%, 16px";
-App::$strings["Set radius of corners"] = "Angi hjørneradius";
-App::$strings["Example: 4px"] = "For eksempel: 4px";
-App::$strings["Set maximum width of content region in rem"] = "Set maksbredde for hovedregionen i rem";
-App::$strings["Leave empty for default width"] = "La feltet stå tomt for å bruke standard bredde";
-App::$strings["Set size of conversation author photo"] = "Angi størrelsen for samtalens forfatterbilde";
-App::$strings["Set size of followup author photos"] = "Angi størrelsen på forfatterbilder ved oppfølging";
-App::$strings["Show advanced settings"] = "Vis avanserte innstillinger";
-App::$strings["Source channel not found."] = "Fant ikke kildekanalen.";
-App::$strings["Block Completely"] = "Blokker helt";
-App::$strings["superblock settings updated"] = "innstillingene til superblokk ble oppdatert";
-App::$strings["Currently blocked"] = "Blokkert for øyeblikket";
-App::$strings["No channels currently blocked"] = "Ingen kanaler er blokkert i øyeblikket";
-App::$strings["Remove"] = "Fjern";
-App::$strings["NSA Bait App"] = "";
-App::$strings["Make yourself a political target."] = "";
-App::$strings["Recent Channel/Profile Viewers"] = "";
-App::$strings["No entries."] = "";
-App::$strings["Wiki Pages"] = "Wikisider";
-App::$strings["Add new page"] = "Legg til ny side";
-App::$strings["Markdown"] = "Markdown";
-App::$strings["BBcode"] = "BBcode";
-App::$strings["Text"] = "Tekst";
-App::$strings["Page name"] = "Sidenavn";
-App::$strings["Options"] = "Valg";
-App::$strings["Wikis"] = "Wikier";
-App::$strings["Name"] = "Navn";
-App::$strings["__ctx:wiki_history__ Message"] = "Melding";
-App::$strings["Date"] = "Dato";
-App::$strings["Revert"] = "Tilbakestill";
-App::$strings["Compare"] = "Sammenlign";
-App::$strings["Wiki updated successfully"] = "Wikien ble oppdatert";
-App::$strings["Wiki files deleted successfully"] = "Wikifiler ble slettet";
-App::$strings["(No Title)"] = "(Ingen tittel)";
-App::$strings["Wiki page create failed."] = "Kunne ikke opprette wikiside.";
-App::$strings["Wiki not found."] = "Fant ikke wikien.";
-App::$strings["Destination name already exists"] = "Navnet finnes allerede";
-App::$strings["Page not found"] = "Fant ikke siden";
-App::$strings["Error reading page content"] = "Det oppstod en feil under lesing av innholder på siden";
-App::$strings["Error reading wiki"] = "Det oppstod en feil ved lesing av wikien";
-App::$strings["Page update failed."] = "Oppdatering av siden mislyktes.";
-App::$strings["Nothing deleted"] = "Ingenting ble slettet";
-App::$strings["Compare: object not found."] = "Sammanlign: fant ikke objektet.";
-App::$strings["Page updated"] = "Siden ble oppdatert";
-App::$strings["Wiki resource_id required for git commit"] = "Wiki ressurs_id er nødvendig for å lagre i git";
-App::$strings["Page not found."] = "Siden ikke funnet.";
-App::$strings["Different viewers will see this text differently"] = "Denne teksten vil se forskjellig ut for ulike besøkende";
-App::$strings["Profile Unavailable."] = "Profilen er ikke tilgjengelig.";
-App::$strings["Permission denied."] = "Tillatelse avslått.";
-App::$strings["Invalid channel"] = "Ugyldig kanal";
-App::$strings["Error retrieving wiki"] = "Det oppstod en feil ved henting av wikien";
-App::$strings["Error creating zip file export folder"] = "Det oppstod en feil ved eksport av mappe til zip fil";
-App::$strings["Error downloading wiki: "] = "";
-App::$strings["Edit"] = "Endre";
-App::$strings["Download"] = "";
-App::$strings["View"] = "Vis";
-App::$strings["Create New"] = "Opprett nytt";
-App::$strings["Wiki name"] = "";
-App::$strings["Content type"] = "";
-App::$strings["Type"] = "Type";
-App::$strings["Any&nbsp;type"] = "";
-App::$strings["Lock content type"] = "";
-App::$strings["Create a status post for this wiki"] = "";
-App::$strings["Edit Wiki Name"] = "";
-App::$strings["Wiki not found"] = "Fant ikke wikien.";
-App::$strings["Rename page"] = "";
-App::$strings["Share"] = "Del";
-App::$strings["Error retrieving page content"] = "";
-App::$strings["New page"] = "";
-App::$strings["Revision Comparison"] = "";
-App::$strings["Cancel"] = "Avbryt";
-App::$strings["Short description of your changes (optional)"] = "";
-App::$strings["Source"] = "";
-App::$strings["New page name"] = "";
-App::$strings["Embed image from photo albums"] = "";
-App::$strings["Embed an image from your albums"] = "";
-App::$strings["OK"] = "OK";
-App::$strings["Choose images to embed"] = "";
-App::$strings["Choose an album"] = "";
-App::$strings["Choose a different album"] = "";
-App::$strings["Error getting album list"] = "";
-App::$strings["Error getting photo link"] = "";
-App::$strings["Error getting album"] = "";
-App::$strings["History"] = "";
-App::$strings["Error creating wiki. Invalid name."] = "";
-App::$strings["A wiki with this name already exists."] = "";
-App::$strings["Wiki created, but error creating Home page."] = "";
-App::$strings["Error creating wiki"] = "";
-App::$strings["Error updating wiki. Invalid name."] = "";
-App::$strings["Error updating wiki"] = "";
-App::$strings["Wiki delete permission denied."] = "";
-App::$strings["Error deleting wiki"] = "";
-App::$strings["New page created"] = "";
-App::$strings["Cannot delete Home"] = "";
-App::$strings["Current Revision"] = "";
-App::$strings["Selected Revision"] = "";
-App::$strings["You must be authenticated."] = "";
-App::$strings["System defaults:"] = "";
-App::$strings["Preferred Clipart IDs"] = "";
-App::$strings["List of preferred clipart ids. These will be shown first."] = "";
-App::$strings["Default Search Term"] = "Standard søkeord";
-App::$strings["The default search term. These will be shown second."] = "Standard søkeord. Disse vil vises som nummer to.";
-App::$strings["Return After"] = "";
-App::$strings["Page to load after image selection."] = "";
-App::$strings["View Profile"] = "Vis profil";
-App::$strings["Edit Profile"] = "Endre profil";
-App::$strings["Profile List"] = "";
-App::$strings["Order of Preferred"] = "";
-App::$strings["Sort order of preferred clipart ids."] = "";
-App::$strings["Newest first"] = "";
-App::$strings["As entered"] = "";
-App::$strings["Order of other"] = "";
-App::$strings["Sort order of other clipart ids."] = "";
-App::$strings["Most downloaded first"] = "";
-App::$strings["Most liked first"] = "";
-App::$strings["Preferred IDs Message"] = "";
-App::$strings["Message to display above preferred results."] = "";
-App::$strings["Uploaded by: "] = "";
-App::$strings["Drawn by: "] = "";
-App::$strings["Use this image"] = "";
-App::$strings["Or select from a free OpenClipart.org image:"] = "";
-App::$strings["Search Term"] = "Søkeord";
-App::$strings["Unknown error. Please try again later."] = "";
-App::$strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Hold nede Shift-knappen og last siden på nytt eller tøm nettleserens mellomlager hvis det nye bildet ikke vises umiddelbart.";
-App::$strings["Profile photo updated successfully."] = "";
-App::$strings["Save Bookmarks"] = "Lagre bokmerker";
-App::$strings["Rainbow Tag App"] = "";
-App::$strings["Add some colour to tag clouds"] = "";
-App::$strings["Rainbow Tag"] = "";
-App::$strings["Photo Cache settings saved."] = "";
-App::$strings["Saves a copy of images from external sites locally to increase your anonymity in the web."] = "";
-App::$strings["Minimal photo size for caching"] = "";
-App::$strings["In pixels. From 1 up to 1024, 0 will be replaced with system default."] = "";
-App::$strings["Photo Cache"] = "";
-App::$strings["Gallery"] = "";
-App::$strings["Photo Gallery"] = "";
-App::$strings["Requested profile is not available."] = "Forespurt profil er ikke tilgjengelig.";
-App::$strings["Random Planet App"] = "";
-App::$strings["Set a random planet from the Star Wars Empire as your location when posting"] = "";
-App::$strings["Male"] = "Mannlig";
-App::$strings["Female"] = "Kvinnelig";
-App::$strings["OpenID protocol error. No ID returned."] = "OpenID protokollfeil. Ingen ID ble returnert.";
-App::$strings["Welcome %s. Remote authentication successful."] = "Velkommen %s. Ekstern autentisering er vellykket.";
-App::$strings["Login failed."] = "Innlogging mislyktes.";
-App::$strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk at ID-en er stavet riktig.";
-App::$strings["The error message was:"] = "Feilmeldingen var:";
-App::$strings["First Name"] = "Fornavn";
-App::$strings["Last Name"] = "Etternavn";
-App::$strings["Nickname"] = "Kallenavn";
-App::$strings["Full Name"] = "Fullt navn";
-App::$strings["Email"] = "E-post";
-App::$strings["Profile Photo"] = "Profilbilde";
-App::$strings["Profile Photo 16px"] = "Profilbilde 16px";
-App::$strings["Profile Photo 32px"] = "Profilbilde 32px";
-App::$strings["Profile Photo 48px"] = "Profilbilde 48px";
-App::$strings["Profile Photo 64px"] = "Profilbilde 64px";
-App::$strings["Profile Photo 80px"] = "Profilbilde 80px";
-App::$strings["Profile Photo 128px"] = "Profilbilde 128px";
-App::$strings["Timezone"] = "Tidssone";
-App::$strings["Homepage URL"] = "Hjemmeside URL";
-App::$strings["Language"] = "Språk";
-App::$strings["Birth Year"] = "Fødselsår";
-App::$strings["Birth Month"] = "Fødselsmåne";
-App::$strings["Birth Day"] = "Fødselsdag";
-App::$strings["Birthdate"] = "Fødselsdato";
-App::$strings["Gender"] = "Kjønn";
-App::$strings["lonely"] = "Ensom";
-App::$strings["drunk"] = "";
-App::$strings["horny"] = "";
-App::$strings["stoned"] = "";
-App::$strings["fucked up"] = "";
-App::$strings["clusterfucked"] = "";
-App::$strings["crazy"] = "";
-App::$strings["hurt"] = "";
-App::$strings["sleepy"] = "";
-App::$strings["grumpy"] = "";
-App::$strings["high"] = "";
-App::$strings["semi-conscious"] = "";
-App::$strings["in love"] = "";
-App::$strings["in lust"] = "";
-App::$strings["naked"] = "";
-App::$strings["stinky"] = "";
-App::$strings["sweaty"] = "";
-App::$strings["bleeding out"] = "";
-App::$strings["victorious"] = "";
-App::$strings["defeated"] = "";
-App::$strings["envious"] = "";
-App::$strings["jealous"] = "";
-App::$strings["Hubzilla Directory Stats"] = "";
-App::$strings["Total Hubs"] = "";
-App::$strings["Hubzilla Hubs"] = "";
-App::$strings["Friendica Hubs"] = "";
-App::$strings["Diaspora Pods"] = "";
-App::$strings["Hubzilla Channels"] = "";
-App::$strings["Friendica Channels"] = "";
-App::$strings["Diaspora Channels"] = "";
-App::$strings["Aged 35 and above"] = "";
-App::$strings["Aged 34 and under"] = "";
-App::$strings["Average Age"] = "";
-App::$strings["Known Chatrooms"] = "";
-App::$strings["Known Tags"] = "";
-App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "";
-App::$strings["Channel is required."] = "";
-App::$strings["Invalid channel."] = "Ugyldig kanal";
-App::$strings["Hubzilla Crosspost Connector Settings saved."] = "";
-App::$strings["Send public postings to Hubzilla channel by default"] = "";
-App::$strings["Hubzilla API Path"] = "";
-App::$strings["https://{sitename}/api"] = "";
-App::$strings["Hubzilla login name"] = "";
-App::$strings["Hubzilla channel name"] = "";
-App::$strings["Hubzilla password"] = "";
-App::$strings["Hubzilla Crosspost Connector"] = "";
-App::$strings["Post to Hubzilla"] = "";
-App::$strings["Photos imported"] = "";
-App::$strings["Permission denied"] = "Tillatelse avvist";
-App::$strings["Redmatrix Photo Album Import"] = "";
-App::$strings["This will import all your Redmatrix photo albums to this channel."] = "";
-App::$strings["Redmatrix Server base URL"] = "";
-App::$strings["Redmatrix Login Username"] = "";
-App::$strings["Redmatrix Login Password"] = "";
-App::$strings["Import just this album"] = "";
-App::$strings["Leave blank to import all albums"] = "";
-App::$strings["Maximum count to import"] = "";
-App::$strings["0 or blank to import all available"] = "";
-App::$strings["photo"] = "foto";
-App::$strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Den oppgitte URLen for APIet er ikke gyldig. Kontakt serverens administrator.";
-App::$strings["We could not contact the GNU social API with the Path you entered."] = "";
-App::$strings["GNU social settings updated."] = "";
-App::$strings["Globally Available GNU social OAuthKeys"] = "";
-App::$strings["There are preconfigured OAuth key pairs for some GNU social servers available. If you are using one of them, please use these credentials.<br />If not feel free to connect to any other GNU social instance (see below)."] = "";
-App::$strings["Provide your own OAuth Credentials"] = "";
-App::$strings["No consumer key pair for GNU social found. Register your Hubzilla Account as an desktop client on your GNU social account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Hubzilla installation at your favourite GNU social installation."] = "";
-App::$strings["OAuth Consumer Key"] = "";
-App::$strings["OAuth Consumer Secret"] = "";
-App::$strings["Base API Path"] = "";
-App::$strings["Remember the trailing /"] = "";
-App::$strings["GNU social application name"] = "";
-App::$strings["To connect to your GNU social account click the button below to get a security code from GNU social which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to GNU social."] = "";
-App::$strings["Log in with GNU social"] = "";
-App::$strings["Copy the security code from GNU social here"] = "";
-App::$strings["Cancel Connection Process"] = "";
-App::$strings["Current GNU social API is"] = "";
-App::$strings["Cancel GNU social Connection"] = "";
-App::$strings["Currently connected to: "] = "";
-App::$strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to GNU social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "";
-App::$strings["Post to GNU social by default"] = "";
-App::$strings["If enabled your public postings will be posted to the associated GNU-social account by default"] = "";
-App::$strings["Clear OAuth configuration"] = "";
-App::$strings["GNU-Social Crosspost Connector"] = "";
-App::$strings["Post to GNU social"] = "";
-App::$strings["Site name"] = "Nettstedets navn";
-App::$strings["API URL"] = "";
-App::$strings["Consumer Secret"] = "Consumer Secret";
-App::$strings["Consumer Key"] = "Consumer Key";
-App::$strings["Application name"] = "";
-App::$strings["Friendica Crosspost Connector Settings saved."] = "";
-App::$strings["Send public postings to Friendica by default"] = "";
-App::$strings["Friendica API Path"] = "";
-App::$strings["Friendica login name"] = "";
-App::$strings["Friendica password"] = "";
-App::$strings["Friendica Crosspost Connector"] = "";
-App::$strings["Post to Friendica"] = "";
-App::$strings["Post to WordPress"] = "";
-App::$strings["Wordpress Settings saved."] = "";
-App::$strings["WordPress username"] = "";
-App::$strings["WordPress password"] = "";
-App::$strings["WordPress API URL"] = "";
-App::$strings["Typically https://your-blog.tld/xmlrpc.php"] = "";
-App::$strings["WordPress blogid"] = "";
-App::$strings["For multi-user sites such as wordpress.com, otherwise leave blank"] = "";
-App::$strings["Post to WordPress by default"] = "";
-App::$strings["Forward comments (requires hubzilla_wp plugin)"] = "";
-App::$strings["Add link to original post"] = "";
-App::$strings["Link description (default:"] = "";
-App::$strings["Wordpress Post"] = "";
-App::$strings["No server specified"] = "";
-App::$strings["Posts imported"] = "";
-App::$strings["Files imported"] = "";
-App::$strings["Content Import"] = "";
-App::$strings["This will import all your conversations and cloud files from a cloned channel on another server. This may take a while if you have lots of posts and or files."] = "";
-App::$strings["Include posts"] = "";
-App::$strings["Conversations, Articles, Cards, and other posted content"] = "";
-App::$strings["Include files"] = "";
-App::$strings["Files, Photos and other cloud storage"] = "";
-App::$strings["Original Server base URL"] = "";
-App::$strings["Since modified date yyyy-mm-dd"] = "";
-App::$strings["Until modified date yyyy-mm-dd"] = "";
-App::$strings["Set your location"] = "Angi din plassering";
-App::$strings["Clear browser location"] = "Fjern nettleserplassering";
-App::$strings["Insert web link"] = "Sett inn web-lenke";
-App::$strings["Embed (existing) photo from your photo albums"] = "Sett inn (eksisterende) bilde fra fotoalbumene dine";
-App::$strings["Please enter a link URL:"] = "Vennligst skriv inn en lenke URL:";
-App::$strings["Tag term:"] = "Merkelapp:";
-App::$strings["Where are you right now?"] = "Hvor er du akkurat nå?";
-App::$strings["Choose a different album..."] = "";
-App::$strings["Comments enabled"] = "";
-App::$strings["Comments disabled"] = "";
-App::$strings["Preview"] = "Forhåndsvisning";
-App::$strings["Page link name"] = "Sidens lenkenavn";
-App::$strings["Post as"] = "Lag innlegg som";
-App::$strings["Bold"] = "Uthevet";
-App::$strings["Italic"] = "Kursiv";
-App::$strings["Underline"] = "Understreket";
-App::$strings["Quote"] = "Sitat";
-App::$strings["Code"] = "Kode";
-App::$strings["Attach/Upload file"] = "Last opp fil/vedlegg";
-App::$strings["Toggle voting"] = "Skru av eller på stemming";
-App::$strings["Disable comments"] = "Slå av kommentarer";
-App::$strings["Toggle comments"] = "";
-App::$strings["Title (optional)"] = "Tittel (valgfri)";
-App::$strings["Categories (optional, comma-separated list)"] = "Kategorier (valgfri, kommaseparert liste)";
-App::$strings["Permission settings"] = "Tillatelser - innstillinger";
-App::$strings["Other networks and post services"] = "Andre nettverk og innleggstjenester";
-App::$strings["Set expiration date"] = "Angi utløpsdato";
-App::$strings["Set publish date"] = "Angi publiseringsdato";
-App::$strings["Encrypt text"] = "Krypter tekst";
-App::$strings["WYSIWYG status editor"] = "";
-App::$strings["WYSIWYG Status App"] = "";
-App::$strings["WYSIWYG Status"] = "";
-App::$strings["View Larger"] = "";
-App::$strings["Tile Server URL"] = "";
-App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">public tile servers</a>"] = "";
-App::$strings["Nominatim (reverse geocoding) Server URL"] = "";
-App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">Nominatim servers</a>"] = "";
-App::$strings["Default zoom"] = "";
-App::$strings["The default zoom level. (1:world, 18:highest, also depends on tile server)"] = "";
-App::$strings["Include marker on map"] = "";
-App::$strings["Include a marker on the map."] = "";
-App::$strings["Settings updated."] = "Innstillinger oppdatert.";
-App::$strings["Insane Journal Crosspost Connector Settings saved."] = "";
-App::$strings["Insane Journal Crosspost Connector App"] = "";
-App::$strings["Not Installed"] = "";
-App::$strings["Relay public postings to Insane Journal"] = "";
-App::$strings["InsaneJournal username"] = "";
-App::$strings["InsaneJournal password"] = "";
-App::$strings["Post to InsaneJournal by default"] = "";
-App::$strings["Insane Journal Crosspost Connector"] = "";
-App::$strings["Post to Insane Journal"] = "";
-App::$strings["TOTP Two-Step Verification"] = "";
-App::$strings["Enter the 2-step verification generated by your authenticator app:"] = "";
-App::$strings["Success!"] = "";
-App::$strings["Invalid code, please try again."] = "";
-App::$strings["Too many invalid codes..."] = "";
-App::$strings["Verify"] = "";
-App::$strings["You haven't set a TOTP secret yet.\nPlease click the button below to generate one and register this site\nwith your preferred authenticator app."] = "";
-App::$strings["Your TOTP secret is"] = "";
-App::$strings["Be sure to save it somewhere in case you lose or replace your mobile device.\nUse your mobile device to scan the QR code below to register this site\nwith your preferred authenticator app."] = "";
-App::$strings["Test"] = "Sjekk koden";
-App::$strings["Generate New Secret"] = "";
-App::$strings["Go"] = "";
-App::$strings["Enter your password"] = "";
-App::$strings["enter TOTP code from your device"] = "";
-App::$strings["Pass!"] = "";
-App::$strings["Fail"] = "";
-App::$strings["Incorrect password, try again."] = "";
-App::$strings["Record your new TOTP secret and rescan the QR code above."] = "";
-App::$strings["TOTP Settings"] = "";
-App::$strings["Who likes me?"] = "";
-App::$strings["QR code"] = "";
-App::$strings["QR Generator"] = "";
-App::$strings["Enter some text"] = "";
-App::$strings["ActivityPub"] = "";
-App::$strings["status"] = "status";
-App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s liker %2\$s sin %3\$s";
-App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s liker ikke %2\$s sin %3\$s";
-App::$strings["ActivityPub Protocol Settings updated."] = "";
-App::$strings["The activitypub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "";
-App::$strings["Deliver to ActivityPub recipients in privacy groups"] = "";
-App::$strings["May result in a large number of mentions and expose all the members of your privacy group"] = "";
-App::$strings["Send multi-media HTML articles"] = "";
-App::$strings["Not supported by some microblog services such as Mastodon"] = "";
-App::$strings["Activitypub Protocol"] = "";
-App::$strings["ERROR: word length is not correct!"] = "";
-App::$strings["Fediwordle App"] = "";
-App::$strings["A distributed word game inspired by wordle."] = "";
-App::$strings["To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel post."] = "";
-App::$strings["Your contacts can post their guess in the comments."] = "";
-App::$strings["Your channel will evaluate the guess and automatically post the response."] = "";
-App::$strings["Correct letters"] = "";
-App::$strings["Letters contained in the word but at the wrong spot"] = "";
-App::$strings["Letters not contained in the word"] = "";
-App::$strings["An account has been created for you."] = "";
-App::$strings["Authentication successful but rejected: account creation is disabled."] = "";
-App::$strings["Dreamwidth Crosspost Connector Settings saved."] = "";
-App::$strings["Dreamwidth username"] = "";
-App::$strings["Dreamwidth password"] = "";
-App::$strings["Post to Dreamwidth by default"] = "";
-App::$strings["Dreamwidth Crosspost Connector"] = "";
-App::$strings["Post to Dreamwidth"] = "";
-App::$strings["bitchslap"] = "";
-App::$strings["bitchslapped"] = "";
-App::$strings["shag"] = "";
-App::$strings["shagged"] = "";
-App::$strings["patent"] = "";
-App::$strings["patented"] = "";
-App::$strings["hug"] = "";
-App::$strings["hugged"] = "";
-App::$strings["murder"] = "";
-App::$strings["murdered"] = "";
-App::$strings["worship"] = "";
-App::$strings["worshipped"] = "";
-App::$strings["kiss"] = "";
-App::$strings["kissed"] = "";
-App::$strings["tempt"] = "";
-App::$strings["tempted"] = "";
-App::$strings["raise eyebrows at"] = "";
-App::$strings["raised their eyebrows at"] = "";
-App::$strings["insult"] = "";
-App::$strings["insulted"] = "";
-App::$strings["praise"] = "";
-App::$strings["praised"] = "";
-App::$strings["be dubious of"] = "";
-App::$strings["was dubious of"] = "";
-App::$strings["eat"] = "";
-App::$strings["ate"] = "";
-App::$strings["giggle and fawn at"] = "";
-App::$strings["giggled and fawned at"] = "";
-App::$strings["doubt"] = "";
-App::$strings["doubted"] = "";
-App::$strings["glare"] = "";
-App::$strings["glared at"] = "";
-App::$strings["fuck"] = "";
-App::$strings["fucked"] = "";
-App::$strings["bonk"] = "";
-App::$strings["bonked"] = "";
-App::$strings["declare undying love for"] = "";
-App::$strings["declared undying love for"] = "";
-App::$strings["Errors encountered deleting database table "] = "";
-App::$strings["Submit Settings"] = "";
-App::$strings["Drop tables when uninstalling?"] = "";
-App::$strings["If checked, the Rendezvous database tables will be deleted when the plugin is uninstalled."] = "";
-App::$strings["Mapbox Access Token"] = "";
-App::$strings["If you enter a Mapbox access token, it will be used to retrieve map tiles from Mapbox instead of the default OpenStreetMap tile server."] = "";
-App::$strings["Rendezvous"] = "";
-App::$strings["This identity has been deleted by another member due to inactivity. Please press the \"New identity\" button or refresh the page to register a new identity. You may use the same name."] = "";
-App::$strings["Welcome to Rendezvous!"] = "";
-App::$strings["Enter your name to join this rendezvous. To begin sharing your location with the other members, tap the GPS control. When your location is discovered, a red dot will appear and others will be able to see you on the map."] = "";
-App::$strings["Let's meet here"] = "";
-App::$strings["Description"] = "Beskrivelse";
-App::$strings["New marker"] = "";
-App::$strings["Edit marker"] = "";
-App::$strings["New identity"] = "";
-App::$strings["Delete marker"] = "";
-App::$strings["Delete member"] = "";
-App::$strings["Edit proximity alert"] = "";
-App::$strings["A proximity alert will be issued when this member is within a certain radius of you.<br><br>Enter a radius in meters (0 to disable):"] = "";
-App::$strings["distance"] = "";
-App::$strings["Proximity alert distance (meters)"] = "";
-App::$strings["A proximity alert will be issued when you are within a certain radius of the marker location.<br><br>Enter a radius in meters (0 to disable):"] = "";
-App::$strings["Marker proximity alert"] = "";
-App::$strings["Reminder note"] = "";
-App::$strings["Enter a note to be displayed when you are within the specified proximity..."] = "";
-App::$strings["Add new rendezvous"] = "";
-App::$strings["Create a new rendezvous and share the access link with those you wish to invite to the group. Those who open the link become members of the rendezvous. They can view other member locations, add markers to the map, or share their own locations with the group."] = "";
-App::$strings["You have no rendezvous. Press the button above to create a rendezvous!"] = "";
-App::$strings["Errors encountered creating database tables."] = "Feil oppstod under opprettelsen av databasetabeller.";
-App::$strings["Page to load after login"] = "";
-App::$strings["Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave blank for default network page (grid)."] = "";
-App::$strings["Startpage"] = "";
-App::$strings["Your channel has been upgraded to \$Projectname version"] = "";
-App::$strings["Please have a look at the"] = "";
-App::$strings["git history"] = "";
-App::$strings["change log"] = "";
-App::$strings["for further info."] = "";
-App::$strings["Upgrade Info"] = "";
-App::$strings["Do not show this again"] = "";
-App::$strings["Twitter settings updated."] = "";
-App::$strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "";
-App::$strings["At this Hubzilla instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "";
-App::$strings["Log in with Twitter"] = "";
-App::$strings["Copy the PIN from Twitter here"] = "";
-App::$strings["<strong>Note:</strong> Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "";
-App::$strings["Twitter post length"] = "";
-App::$strings["Maximum tweet length"] = "";
-App::$strings["Send public postings to Twitter by default"] = "";
-App::$strings["If enabled your public postings will be posted to the associated Twitter account by default"] = "";
-App::$strings["Twitter Crosspost Connector"] = "";
-App::$strings["Post to Twitter"] = "";
-App::$strings["You are now authenticated to pumpio."] = "";
-App::$strings["return to the featured settings page"] = "tilbake til funksjonsinnstillinger";
-App::$strings["Post to Pump.io"] = "";
-App::$strings["Pump.io Settings saved."] = "";
-App::$strings["Pump.io servername"] = "";
-App::$strings["Without \"http://\" or \"https://\""] = "";
-App::$strings["Pump.io username"] = "";
-App::$strings["Without the servername"] = "";
-App::$strings["You are not authenticated to pumpio"] = "";
-App::$strings["(Re-)Authenticate your pump.io connection"] = "";
-App::$strings["Post to pump.io by default"] = "";
-App::$strings["Should posts be public"] = "";
-App::$strings["Mirror all public posts"] = "";
-App::$strings["Pump.io Crosspost Connector"] = "";
-App::$strings["generic profile image"] = "";
-App::$strings["random geometric pattern"] = "";
-App::$strings["monster face"] = "";
-App::$strings["computer generated face"] = "";
-App::$strings["retro arcade style face"] = "";
-App::$strings["Hub default profile photo"] = "";
-App::$strings["Information"] = "";
-App::$strings["Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar."] = "";
-App::$strings["Save Settings"] = "";
-App::$strings["Default avatar image"] = "";
-App::$strings["Select default avatar image if none was found at Gravatar. See README"] = "";
-App::$strings["Rating of images"] = "";
-App::$strings["Select the appropriate avatar rating for your site. See README"] = "";
-App::$strings["Gravatar settings updated."] = "";
-App::$strings["text to include in all outgoing posts from this site"] = "";
-App::$strings["Send your identity to all websites"] = "";
-App::$strings["Send ZID"] = "";
-App::$strings["Price"] = "";
-App::$strings["Error: order mismatch. Please try again."] = "";
-App::$strings["Manual payments are not enabled."] = "";
-App::$strings["Order not found."] = "";
-App::$strings["Finished"] = "";
-App::$strings["Enable Subscription Management Module"] = "";
-App::$strings["Cannot include subscription items with different terms in the same order."] = "";
-App::$strings["Select Subscription to Edit"] = "";
-App::$strings["Edit Subscriptions"] = "";
-App::$strings["Subscription SKU"] = "";
-App::$strings["Catalog Description"] = "";
-App::$strings["Subscription available for purchase."] = "";
-App::$strings["Maximum active subscriptions to this item per account."] = "";
-App::$strings["Subscription price."] = "";
-App::$strings["Quantity"] = "";
-App::$strings["Term"] = "";
-App::$strings["Enable Hubzilla Services Module"] = "";
-App::$strings["New Sku"] = "";
-App::$strings["Cannot save edits to locked item."] = "";
-App::$strings["SKU not found."] = "";
-App::$strings["Invalid Activation Directive."] = "";
-App::$strings["Invalid Deactivation Directive."] = "";
-App::$strings["Add to this privacy group"] = "";
-App::$strings["Set user service class"] = "";
-App::$strings["You must be using a local account to purchase this service."] = "";
-App::$strings["Changes Locked"] = "";
-App::$strings["Item available for purchase."] = "";
-App::$strings["Photo URL"] = "";
-App::$strings["Add buyer to privacy group"] = "";
-App::$strings["Add buyer as connection"] = "";
-App::$strings["Set Service Class"] = "";
-App::$strings["Enable Order/Item Options"] = "";
-App::$strings["Label"] = "";
-App::$strings["Required"] = "Påkrevd";
-App::$strings["Instructions"] = "";
-App::$strings["Enable Paypal Button Module"] = "";
-App::$strings["Use Production Key"] = "";
-App::$strings["Paypal Sandbox Client Key"] = "";
-App::$strings["Paypal Sandbox Secret Key"] = "";
-App::$strings["Paypal Production Client Key"] = "";
-App::$strings["Paypal Production Secret Key"] = "";
-App::$strings["Paypal button payments are not enabled."] = "";
-App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "";
-App::$strings["Enable Paypal Button Module (API-v2)"] = "";
-App::$strings["Enable Manual Cart Module"] = "";
-App::$strings["Access Denied."] = "Ingen tilgang";
-App::$strings["Order Not Found"] = "";
-App::$strings["Access Denied"] = "Ingen tilgang";
-App::$strings["Invalid Item"] = "Ugyldig element.";
-App::$strings["Enable Test Catalog"] = "";
-App::$strings["Enable Manual Payments"] = "";
-App::$strings["Base Merchant Currency"] = "";
-App::$strings["Cart Settings"] = "";
-App::$strings["DB Cleanup Failure"] = "";
-App::$strings["[cart] Item Added"] = "";
-App::$strings["Order already checked out."] = "";
-App::$strings["Drop database tables when uninstalling."] = "";
-App::$strings["Shop"] = "";
-App::$strings["You must be logged into the Grid to shop."] = "";
-App::$strings["Access denied."] = "Ingen tilgang";
-App::$strings["No Order Found"] = "";
-App::$strings["An unknown error has occurred Please start again."] = "";
-App::$strings["Requirements not met."] = "";
-App::$strings["Review your order and complete any needed requirements."] = "";
-App::$strings["Invalid Payment Type. Please start again."] = "";
-App::$strings["Order not found"] = "";
-App::$strings["nofed Settings saved."] = "";
-App::$strings["Federate posts by default"] = "";
-App::$strings["No Federation"] = "";
-App::$strings["Federate"] = "";
-App::$strings["Hide the button and show the smilies directly."] = "";
-App::$strings["Smileybutton Settings"] = "";
-App::$strings["file"] = "";
-App::$strings["Redmatrix File Storage Import"] = "";
-App::$strings["This will import all your Redmatrix cloud files to this channel."] = "";
-App::$strings["Please install the statistics addon to be able to configure a diaspora relay"] = "";
-App::$strings["Diaspora Relay Handle"] = "";
-App::$strings["Address of a diaspora relay. Example: relay@diasporarelay.tld"] = "";
-App::$strings["Diaspora relay could not be imported"] = "";
-App::$strings["No subject"] = "";
-App::$strings["\$projectname"] = "\$projectname";
-App::$strings["No username found in import file."] = "Ingen brukernavn ble funnet i importfilen.";
-App::$strings["Unable to create a unique channel address. Import failed."] = "Klarte ikke å lage en unik kanaladresse. Import mislyktes.";
-App::$strings["Import completed."] = "Import ferdig.";
-App::$strings["Diaspora Protocol Settings updated."] = "";
-App::$strings["The diaspora protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "";
-App::$strings["Prevent your hashtags from being redirected to other sites"] = "";
-App::$strings["Sign and forward posts and comments with no existing Diaspora signature"] = "";
-App::$strings["Followed hashtags (comma separated, do not include the #)"] = "";
-App::$strings["Diaspora Protocol"] = "";
-App::$strings["%1\$s dislikes %2\$s's %3\$s"] = "";
-App::$strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s deltar på %2\$ss %3\$s";
-App::$strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s deltar ikke på %2\$ss %3\$s";
-App::$strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s deltar kanskje på %2\$ss %3\$s";
-App::$strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = "";
-App::$strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = "";
-App::$strings["Piwik Base URL"] = "";
-App::$strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "";
-App::$strings["Site ID"] = "";
-App::$strings["Show opt-out cookie link?"] = "";
-App::$strings["Asynchronous tracking"] = "";
-App::$strings["Enable frontend JavaScript error tracking"] = "";
-App::$strings["This feature requires Piwik >= 2.2.0"] = "";
-App::$strings["Workflow user."] = "";
-App::$strings["This channel"] = "";
-App::$strings["Primary"] = "Primær";
-App::$strings["Create New Workflow Item"] = "";
-App::$strings["Workflow"] = "";
-App::$strings["No Workflows Available"] = "";
-App::$strings["Add item to which workflow"] = "";
-App::$strings["Create Workflow Item"] = "";
-App::$strings["Link"] = "";
-App::$strings["Web link."] = "";
-App::$strings["Title"] = "Tittel";
-App::$strings["Brief description or title"] = "";
-App::$strings["Notes"] = "Merknader";
-App::$strings["Notes and Info"] = "";
-App::$strings["Body"] = "";
-App::$strings["Workflow Settings"] = "";
-App::$strings["Project Servers and Resources"] = "";
-App::$strings["Project Creator and Tech Lead"] = "";
-App::$strings["And the hundreds of other people and organisations who helped make the Hubzilla possible."] = "";
-App::$strings["The Redmatrix/Hubzilla projects are provided primarily by volunteers giving their time and expertise - and often paying out of pocket for services they share with others."] = "";
-App::$strings["There is no corporate funding and no ads, and we do not collect and sell your personal information. (We don't control your personal information - <strong>you do</strong>.)"] = "";
-App::$strings["Help support our ground-breaking work in decentralisation, web identity, and privacy."] = "";
-App::$strings["Your donations keep servers and services running and also helps us to provide innovative new features and continued development."] = "";
-App::$strings["Donate"] = "";
-App::$strings["Choose a project, developer, or public hub to support with a one-time donation"] = "";
-App::$strings["Donate Now"] = "";
-App::$strings["<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"] = "";
-App::$strings["Please indicate if you would like your first name or full name (or nothing) to appear in our sponsor listing"] = "";
-App::$strings["Sponsor"] = "";
-App::$strings["Special thanks to: "] = "";
-App::$strings["Your Webbie:"] = "";
-App::$strings["Fontsize (px):"] = "";
-App::$strings["Link:"] = "";
-App::$strings["Like us on Hubzilla"] = "";
-App::$strings["Embed:"] = "";
-App::$strings["__ctx:opensearch__ Search %1\$s (%2\$s)"] = "Søk %1\$s (%2\$s)";
-App::$strings["__ctx:opensearch__ \$Projectname"] = "\$Projectname";
-App::$strings["\$Projectname"] = "\$Projectname";
-App::$strings["Search \$Projectname"] = "";
-App::$strings["Fuzzloc Settings updated."] = "";
-App::$strings["Minimum offset in meters"] = "";
-App::$strings["Maximum offset in meters"] = "";
-App::$strings["Fuzzy Location"] = "";
-App::$strings["Send email to all members"] = "";
-App::$strings["%s Administrator"] = "%s administrator";
-App::$strings["No recipients found."] = "";
-App::$strings["%1\$d of %2\$d messages sent."] = "";
-App::$strings["Send email to all hub members."] = "";
-App::$strings["Message subject"] = "";
-App::$strings["Sender Email address"] = "";
-App::$strings["Test mode (only send to hub administrator)"] = "";
-App::$strings["Categories"] = "Kategorier";
-App::$strings["Everything"] = "Alt";
-App::$strings["Item not found"] = "Elementet ble ikke funnet.";
-App::$strings["Channel not found."] = "Kanalen ble ikke funnet.";
-App::$strings["Edit Card"] = "";
-App::$strings["Delete"] = "Slett";
-App::$strings["Cards"] = "";
-App::$strings["View Cards"] = "";
-App::$strings["View in context"] = "Vis i sammenheng";
-App::$strings["Add Card"] = "";
-App::$strings["Save"] = "Lagre";
-App::$strings["New registration"] = "";
-App::$strings["%s : Message delivery failed."] = "%s : meldingslevering feilet.";
-App::$strings["Message sent to %s. New account registration: %s"] = "";
-App::$strings["Not allowed."] = "";
-App::$strings["Permissions"] = "Tillatelser";
-App::$strings["Set/edit permissions"] = "Angi/endre tillatelser";
-App::$strings["Item not found."] = "Elementet ble ikke funnet.";
-App::$strings["Post to Libertree"] = "";
-App::$strings["Libertree Crosspost Connector Settings saved."] = "";
-App::$strings["Libertree API token"] = "";
-App::$strings["Libertree site URL"] = "";
-App::$strings["Post to Libertree by default"] = "";
-App::$strings["Libertree Crosspost Connector"] = "";
-App::$strings["You're welcome."] = "";
-App::$strings["Ah shucks..."] = "";
-App::$strings["Don't mention it."] = "";
-App::$strings["&lt;blush&gt;"] = "";
-App::$strings["Report Bug"] = "";
-App::$strings["Logfile archive directory"] = "";
-App::$strings["Directory to store rotated logs"] = "";
-App::$strings["Logfile size in bytes before rotating"] = "";
-App::$strings["Number of logfiles to retain"] = "";
-App::$strings["Your account on %s will expire in a few days."] = "";
-App::$strings["Your test account is about to expire."] = "";
-App::$strings["Hide Aside App"] = "";
-App::$strings["Fade out aside areas after a while when using endless scroll"] = "";
-App::$strings["Some setting"] = "";
-App::$strings["A setting"] = "";
-App::$strings["Skeleton Settings"] = "";
-App::$strings["Network error"] = "";
-App::$strings["API error"] = "";
-App::$strings["Unknown issue"] = "";
-App::$strings["Unable to retrieve email address from remote identity provider"] = "";
-App::$strings["Unable to login using email address "] = "";
-App::$strings["Social Authentication using your social media account"] = "";
-App::$strings["This app enables one or more social provider sign-in buttons on the login page."] = "";
-App::$strings["Add an identity provider"] = "";
-App::$strings["Enable "] = "Skru på";
-App::$strings["Key"] = "";
-App::$strings["Word"] = "";
-App::$strings["Secret"] = "";
-App::$strings["Add a custom provider"] = "";
-App::$strings["Remove an identity provider"] = "";
-App::$strings["Social authentication"] = "";
-App::$strings["Error while saving provider settings"] = "";
-App::$strings["Custom provider already exists"] = "";
-App::$strings["Social authentication settings saved."] = "";
-App::$strings["Possible adult content"] = "";
-App::$strings["%s - view"] = "";
-App::$strings["NSFW Settings saved."] = "";
-App::$strings["This app looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "";
-App::$strings["Comma separated list of keywords to hide"] = "";
-App::$strings["Word, /regular-expression/, lang=xx, lang!=xx"] = "";
-App::$strings["NSFW"] = "";
-App::$strings["Show Upload Limits"] = "";
-App::$strings["Hubzilla configured maximum size: "] = "";
-App::$strings["PHP upload_max_filesize: "] = "";
-App::$strings["PHP post_max_size (must be larger than upload_max_filesize): "] = "";
-App::$strings["Three Dimensional Tic-Tac-Toe"] = "";
-App::$strings["3D Tic-Tac-Toe"] = "";
-App::$strings["New game"] = "";
-App::$strings["New game with handicap"] = "";
-App::$strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "";
-App::$strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "";
-App::$strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "";
-App::$strings["You go first..."] = "";
-App::$strings["I'm going first this time..."] = "";
-App::$strings["You won!"] = "";
-App::$strings["\"Cat\" game!"] = "";
-App::$strings["I won!"] = "";
-App::$strings["Send test email"] = "";
-App::$strings["Mail sent."] = "";
-App::$strings["Sending of mail failed."] = "";
-App::$strings["Mail Test"] = "";
-App::$strings["Livejournal username"] = "";
-App::$strings["Livejournal password"] = "";
-App::$strings["Post to Livejournal by default"] = "";
-App::$strings["Send wall-to-wall posts to Livejournal"] = "";
-App::$strings["Livejournal Crosspost Connector"] = "";
-App::$strings["Post to Livejournal"] = "";
-App::$strings["Posted by"] = "";
-App::$strings["Use markdown for editing posts"] = "";
-App::$strings["Edit Article"] = "";
-App::$strings["Articles"] = "";
-App::$strings["View Articles"] = "";
-App::$strings["Add Article"] = "";
-App::$strings["Hubzilla File Storage Import"] = "";
-App::$strings["This will import all your cloud files from another server."] = "";
-App::$strings["Hubzilla Server base URL"] = "";
-App::$strings["Allow magic authentication only to websites of your immediate connections"] = "";
-App::$strings["Authchoose"] = "";
-App::$strings["pageheader Settings saved."] = "";
-App::$strings["Message to display on every page on this server"] = "";
-App::$strings["Page Header"] = "";
-App::$strings["Popular Channels"] = "";
-App::$strings["Channels to auto connect"] = "";
-App::$strings["Comma separated list"] = "";
-App::$strings["IRC Settings"] = "";
-App::$strings["IRC settings saved."] = "";
-App::$strings["IRC Chatroom"] = "";
-App::$strings["Jabber BOSH host"] = "";
-App::$strings["Use central userbase"] = "";
-App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "";
-App::$strings["XMPP settings updated."] = "";
-App::$strings["XMPP App"] = "";
-App::$strings["Embedded XMPP (Jabber) client"] = "";
-App::$strings["Individual credentials"] = "";
-App::$strings["Jabber BOSH server"] = "";
-App::$strings["XMPP Settings"] = "";
-App::$strings["prev"] = "forrige";
-App::$strings["first"] = "første";
-App::$strings["last"] = "siste";
-App::$strings["next"] = "neste";
-App::$strings["older"] = "eldre";
-App::$strings["newer"] = "nyere";
-App::$strings["Connections"] = "Forbindelser";
-App::$strings["Accepts"] = "";
-App::$strings["Comments"] = "";
-App::$strings["Stream items"] = "";
-App::$strings["Wall posts"] = "";
-App::$strings["Nothing"] = "";
-App::$strings["View all %s connections"] = "Vis alle %s forbindelser";
-App::$strings["Network: %s"] = "";
-App::$strings["Search"] = "Søk";
-App::$strings["poke"] = "prikk";
-App::$strings["poked"] = "prikket";
-App::$strings["ping"] = "varsle";
-App::$strings["pinged"] = "varslet";
-App::$strings["happy"] = "glad";
-App::$strings["sad"] = "trist";
-App::$strings["mellow"] = "dempet";
-App::$strings["tired"] = "trøtt";
-App::$strings["perky"] = "oppkvikket";
-App::$strings["angry"] = "sint";
-App::$strings["stupefied"] = "lamslått";
-App::$strings["puzzled"] = "forundret";
-App::$strings["interested"] = "interessert";
-App::$strings["bitter"] = "bitter";
-App::$strings["cheerful"] = "munter";
-App::$strings["alive"] = "levende";
-App::$strings["annoyed"] = "irritert";
-App::$strings["anxious"] = "nervøs";
-App::$strings["cranky"] = "gretten";
-App::$strings["disturbed"] = "foruroliget";
-App::$strings["frustrated"] = "frustrert";
-App::$strings["depressed"] = "lei seg";
-App::$strings["motivated"] = "motivert";
-App::$strings["relaxed"] = "avslappet";
-App::$strings["surprised"] = "overrasket";
-App::$strings["Monday"] = "mandag";
-App::$strings["Tuesday"] = "tirsdag";
-App::$strings["Wednesday"] = "onsdag";
-App::$strings["Thursday"] = "torsdag";
-App::$strings["Friday"] = "fredag";
-App::$strings["Saturday"] = "lørdag";
-App::$strings["Sunday"] = "søndag";
-App::$strings["January"] = "januar";
-App::$strings["February"] = "februar";
-App::$strings["March"] = "mars";
-App::$strings["April"] = "april";
-App::$strings["May"] = "mai";
-App::$strings["June"] = "juni";
-App::$strings["July"] = "juli";
-App::$strings["August"] = "august";
-App::$strings["September"] = "september";
-App::$strings["October"] = "oktober";
-App::$strings["November"] = "november";
-App::$strings["December"] = "desember";
-App::$strings["Unknown attachment"] = "Ukjent vedlegg";
-App::$strings["Size"] = "Størrelse";
-App::$strings["unknown"] = "ukjent";
-App::$strings["remove category"] = "fjern kategori";
-App::$strings["remove from file"] = "fjern fra fil";
-App::$strings["Download binary/encrypted content"] = "";
-App::$strings["__ctx:noun__ %d Vote"] = array(
- 0 => "",
- 1 => "",
-);
-App::$strings["__ctx:noun__ %d Vote in total"] = array(
- 0 => "",
- 1 => "",
-);
-App::$strings["Poll has ended"] = "Spørreskjema har utløpt";
-App::$strings["Poll ends in %s"] = "Spørreskjema utløper om %s";
-App::$strings["Vote"] = "";
-App::$strings["Link to Source"] = "Lenke til kilde";
-App::$strings["default"] = "standard";
-App::$strings["Page layout"] = "Sidens layout";
-App::$strings["You can create your own with the layouts tool"] = "Du kan lage din egen med layout-verktøyet";
-App::$strings["HTML"] = "";
-App::$strings["Comanche Layout"] = "";
-App::$strings["PHP"] = "";
-App::$strings["Page content type"] = "Sidens innholdstype";
-App::$strings["event"] = "hendelse";
+App::$strings["Image/photo"] = "Bilde/fotografi";
+App::$strings["Encrypted content"] = "Kryptert innhold";
+App::$strings["Install %1\$s element %2\$s"] = "";
+App::$strings["This post contains an installable %s element, however you lack permissions to install it on this site."] = "Dette innlegget inneholder det installerbare elementet %s, men du mangler tillatelse til å installere det på dette nettstedet.";
+App::$strings["webpage"] = "nettside";
+App::$strings["layout"] = "layout";
+App::$strings["block"] = "byggekloss";
+App::$strings["menu"] = "meny";
+App::$strings["card"] = "";
+App::$strings["article"] = "";
App::$strings["post"] = "innlegg";
-App::$strings["comment"] = "kommentar";
-App::$strings["activity"] = "aktivitet";
-App::$strings["poll"] = "spørreskjema";
-App::$strings["a-z, 0-9, -, and _ only"] = "";
-App::$strings["Design Tools"] = "Designverktøy";
-App::$strings["Blocks"] = "Byggeklosser";
-App::$strings["Menus"] = "Menyer";
-App::$strings["Layouts"] = "Layout";
-App::$strings["Pages"] = "Sider";
-App::$strings["Import"] = "Importer";
-App::$strings["Import website..."] = "";
-App::$strings["Select folder to import"] = "";
-App::$strings["Import from a zipped folder:"] = "";
-App::$strings["Import from cloud files:"] = "";
-App::$strings["/cloud/channel/path/to/folder"] = "";
-App::$strings["Enter path to website files"] = "";
-App::$strings["Select folder"] = "";
-App::$strings["Export website..."] = "";
-App::$strings["Export to a zip file"] = "";
-App::$strings["website.zip"] = "";
-App::$strings["Enter a name for the zip file."] = "";
-App::$strings["Export to cloud files"] = "";
-App::$strings["/path/to/export/folder"] = "";
-App::$strings["Enter a path to a cloud files destination."] = "";
-App::$strings["Specify folder"] = "";
-App::$strings["This is the home page of %s."] = "";
-App::$strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A";
-App::$strings["Starts:"] = "Starter:";
-App::$strings["Finishes:"] = "Slutter:";
-App::$strings["Location:"] = "Plassering:";
-App::$strings["l F d, Y"] = "";
-App::$strings["Start:"] = "";
-App::$strings["End:"] = "";
-App::$strings["This event has been added to your calendar."] = "Denne hendelsen er lagt til i din kalender.";
-App::$strings["Not specified"] = "Ikke spesifisert";
-App::$strings["Needs Action"] = "Trenger handling";
-App::$strings["Completed"] = "Ferdig";
-App::$strings["In Process"] = "Igang";
-App::$strings["Cancelled"] = "Avbrutt";
-App::$strings["Mobile"] = "mobil";
-App::$strings["Home"] = "Hjem";
-App::$strings["Home, Voice"] = "";
-App::$strings["Home, Fax"] = "";
-App::$strings["Work"] = "";
-App::$strings["Work, Voice"] = "";
-App::$strings["Work, Fax"] = "";
-App::$strings["Other"] = "Annen";
+App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s skrev følgende %2\$s %3\$s";
+App::$strings["Click to open/close"] = "Klikk for å åpne/lukke";
+App::$strings["spoiler"] = "";
+App::$strings["View article"] = "";
+App::$strings["View summary"] = "";
+App::$strings["Different viewers will see this text differently"] = "Denne teksten vil se forskjellig ut for ulike besøkende";
+App::$strings["$1 wrote:"] = "$1 skrev:";
App::$strings["Off"] = "Av";
App::$strings["On"] = "På";
App::$strings["Calendar"] = "Kalender";
@@ -960,6 +38,7 @@ App::$strings["Tag Cloud"] = "Merkelappsky";
App::$strings["Provide a personal tag cloud on your channel page"] = "Tilby en personlig merkelappsky på din kanalside";
App::$strings["Use blog/list mode"] = "Bruk blogg/listemodus";
App::$strings["Comments will be displayed separately"] = "Kommentarer blir vist separat fra innlegget";
+App::$strings["Connections"] = "Forbindelser";
App::$strings["Connection Filtering"] = "Filtrer forbindelser";
App::$strings["Filter incoming posts from connections based on keywords/content"] = "Filtrer innkommende innlegg fra forbindelser basert på nøkkelord/innhold";
App::$strings["Conversation"] = "";
@@ -1023,113 +102,29 @@ App::$strings["Profile Import/Export"] = "Profil-import/-eksport";
App::$strings["Save and load profile details across sites/channels"] = "Lagre og åpne profildetaljer på tvers av nettsteder/kanaler";
App::$strings["Multiple Profiles"] = "Flere profiler";
App::$strings["Ability to create multiple profiles"] = "Mulig å lage flere profiler";
-App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn.";
-App::$strings["Delete this item?"] = "Slett dette elementet?";
-App::$strings["Item deleted"] = "";
-App::$strings["Comment"] = "Kommentar";
-App::$strings["%s show all"] = "";
-App::$strings["%s show less"] = "";
-App::$strings["%s expand"] = "";
-App::$strings["%s collapse"] = "";
-App::$strings["Password too short"] = "Passordet er for kort";
-App::$strings["Passwords do not match"] = "Passordene er ikke like";
-App::$strings["everybody"] = "alle";
-App::$strings["Secret Passphrase"] = "Hemmelig passordsetning";
-App::$strings["Passphrase hint"] = "Hint om passordsetning";
-App::$strings["Notice: Permissions have changed but have not yet been submitted."] = "Varsel: Tillatelser har blitt endret, men de har ennå ikke blitt sendt inn.";
-App::$strings["close all"] = "lukk alle";
-App::$strings["Nothing new here"] = "Ikke noe nytt her";
-App::$strings["Rate This Channel (this is public)"] = "Vurder denne kanalen (dette er offentlig)";
-App::$strings["Rating"] = "Vurdering";
-App::$strings["Describe (optional)"] = "Beskriv (valgfritt)";
-App::$strings["Please enter a link URL"] = "Vennligst skriv inn en lenke URL";
-App::$strings["Unsaved changes. Are you sure you wish to leave this page?"] = "Endringene er ikke lagret. Er du sikker på at du ønsker å forlate denne siden?";
-App::$strings["Location"] = "Plassering";
-App::$strings["lovely"] = "";
-App::$strings["wonderful"] = "";
-App::$strings["fantastic"] = "";
-App::$strings["great"] = "";
-App::$strings["Your chosen nickname was either already taken or not valid. Please use our suggestion ("] = "";
-App::$strings[") or enter a new one."] = "";
-App::$strings["Thank you, this nickname is valid."] = "";
-App::$strings["A channel name is required."] = "";
-App::$strings["This is a "] = "";
-App::$strings[" channel name"] = "Kanalnavn";
-App::$strings["Back to reply"] = "";
-App::$strings["Pinned"] = "";
-App::$strings["Pin to the top"] = "";
-App::$strings["Unpin from the top"] = "";
-App::$strings["%d minutes"] = array(
- 0 => "%d minutter",
- 1 => "%d minutter",
-);
-App::$strings["about %d hours"] = array(
- 0 => "omtrent %d timer",
- 1 => "omtrent %d timer",
-);
-App::$strings["%d days"] = array(
- 0 => "%d dager",
- 1 => "%d dager",
-);
-App::$strings["%d months"] = array(
- 0 => "%d måneder",
- 1 => "%d måneder",
-);
-App::$strings["%d years"] = array(
- 0 => "%d år",
- 1 => "%d år",
-);
-App::$strings["timeago.prefixAgo"] = "timeago.prefixAgo";
-App::$strings["timeago.prefixFromNow"] = "timeago.prefixFromNow";
-App::$strings["timeago.suffixAgo"] = "siden";
-App::$strings["timeago.suffixFromNow"] = "";
-App::$strings["less than a minute"] = "mindre enn ett minutt";
-App::$strings["about a minute"] = "omtrent et minutt";
-App::$strings["about an hour"] = "omtrent en time";
-App::$strings["a day"] = "en dag";
-App::$strings["about a month"] = "omtrent en måned";
-App::$strings["about a year"] = "omtrent et år";
-App::$strings[" "] = " ";
-App::$strings["timeago.numbers"] = "timeago.numbers";
-App::$strings["__ctx:long__ May"] = "mai";
-App::$strings["Jan"] = "Jan";
-App::$strings["Feb"] = "Feb";
-App::$strings["Mar"] = "Mar";
-App::$strings["Apr"] = "Apr";
-App::$strings["__ctx:short__ May"] = "mai";
-App::$strings["Jun"] = "Jun";
-App::$strings["Jul"] = "Jul";
-App::$strings["Aug"] = "Aug";
-App::$strings["Sep"] = "Sep";
-App::$strings["Oct"] = "Okt";
-App::$strings["Nov"] = "Nov";
-App::$strings["Dec"] = "Des";
-App::$strings["Sun"] = "Søn";
-App::$strings["Mon"] = "Man";
-App::$strings["Tue"] = "Tirs";
-App::$strings["Wed"] = "Ons";
-App::$strings["Thu"] = "Tors";
-App::$strings["Fri"] = "Fre";
-App::$strings["Sat"] = "Lør";
-App::$strings["__ctx:calendar__ today"] = "idag";
-App::$strings["__ctx:calendar__ month"] = "måned";
-App::$strings["__ctx:calendar__ week"] = "uke";
-App::$strings["__ctx:calendar__ day"] = "dag";
-App::$strings["__ctx:calendar__ All day"] = "Hele dagen";
-App::$strings["Please stand by while your download is being prepared."] = "";
-App::$strings["Email address not valid"] = "";
-App::$strings["Help:"] = "Hjelp:";
-App::$strings["Help"] = "Hjelp";
-App::$strings["Not Found"] = "Ikke funnet";
-App::$strings["Image exceeds website size limit of %lu bytes"] = "Bilde overstiger nettstedets størrelsesbegrensning på %lu bytes";
-App::$strings["Image file is empty."] = "Bildefilen er tom.";
-App::$strings["Unable to process image"] = "Kan ikke behandle bildet";
-App::$strings["Photo storage failed."] = "Bildelagring mislyktes.";
-App::$strings["a new photo"] = "et nytt bilde";
-App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s la inn %2\$s til %3\$s";
-App::$strings["Photo Albums"] = "Fotoalbum";
-App::$strings["Recent Photos"] = "Nye bilder";
-App::$strings["Upload New Photos"] = "Last opp nye bilder";
+App::$strings["%1\$s's bookmarks"] = "%1\$s sine bokmerker";
+App::$strings["unknown"] = "ukjent";
+App::$strings["Permission denied."] = "Tillatelse avslått.";
+App::$strings["Item was not found."] = "Elementet ble ikke funnet.";
+App::$strings["Unknown error."] = "";
+App::$strings["No source file."] = "Ingen kildefil.";
+App::$strings["Cannot locate file to replace"] = "Kan ikke finne filen som skal byttes ut";
+App::$strings["Cannot locate file to revise/update"] = "Finner ikke filen som skal revideres/oppdateres";
+App::$strings["File exceeds size limit of %d"] = "Filens størrelse overgår grensen på %d";
+App::$strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes.";
+App::$strings["File upload failed. Possible system limit or action terminated."] = "Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt.";
+App::$strings["Stored file could not be verified. Upload failed."] = "Lagret fil kunne ikke bekreftes. Opplasting mislyktes.";
+App::$strings["Path not available."] = "Stien er ikke tilgjengelig.";
+App::$strings["Empty pathname"] = "Tomt sti-navn";
+App::$strings["duplicate filename or path"] = "duplikat av filnavn eller sti";
+App::$strings["Path not found."] = "Stien ble ikke funnet.";
+App::$strings["mkdir failed."] = "mkdir mislyktes.";
+App::$strings["database storage failed."] = "databaselagring mislyktes.";
+App::$strings["Empty path"] = "Tom sti";
+App::$strings["%s shared an %s with you"] = "Filer: delt med meg";
+App::$strings["%s shared a %s with you"] = "";
+App::$strings["image"] = "Bilde";
+App::$strings["file"] = "";
App::$strings["url: "] = "";
App::$strings["error_code: "] = "";
App::$strings["error_string: "] = "";
@@ -1138,37 +133,20 @@ App::$strings["Friendica"] = "Friendica";
App::$strings["OStatus"] = "OStatus";
App::$strings["GNU-Social"] = "";
App::$strings["RSS/Atom"] = "RSS/Atom";
+App::$strings["ActivityPub"] = "";
+App::$strings["Email"] = "E-post";
App::$strings["Diaspora"] = "Diaspora";
App::$strings["Facebook"] = "Facebook";
App::$strings["Zot"] = "Zot";
App::$strings["LinkedIn"] = "LinkedIn";
App::$strings["XMPP/IM"] = "XMPP/IM";
App::$strings["MySpace"] = "MySpace";
-App::$strings[" and "] = " og ";
-App::$strings["public profile"] = "offentlig profil";
-App::$strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s endret %2\$s til &ldquo;%3\$s&rdquo;";
-App::$strings["Visit %1\$s's %2\$s"] = "Besøk %1\$s sitt %2\$s";
-App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s har oppdatert %2\$s, endret %3\$s.";
-App::$strings["%d invitation available"] = array(
- 0 => "%d invitasjon tilgjengelig",
- 1 => "%d invitasjoner tilgjengelig",
-);
-App::$strings["Advanced"] = "Avansert";
-App::$strings["Find Channels"] = "Finn kanaler";
-App::$strings["Enter name or interest"] = "Skriv navn eller interesse";
-App::$strings["Connect/Follow"] = "Forbindelse/Følg";
-App::$strings["Examples: Robert Morgenstein, Fishing"] = "Eksempler: Ola Nordmann, fisking";
-App::$strings["Find"] = "Finn";
-App::$strings["Channel Suggestions"] = "Kanalforslag";
-App::$strings["Random Profile"] = "Tilfeldig profil";
-App::$strings["Invite Friends"] = "Inviter venner";
-App::$strings["Advanced example: name=fred and country=iceland"] = "Avansert eksempel: navn=fred og land=island";
-App::$strings["Common Connections"] = "";
-App::$strings["View all %d common connections"] = "";
-App::$strings["Select an alternate language"] = "Velg et annet språk";
-App::$strings["Unable to import a removed channel."] = "";
-App::$strings["Cannot create a duplicate channel identifier on this system. Import failed."] = "Kan ikke lage en kopi av kanal-identifikatoren på dette systemet. Import mislyktes.";
-App::$strings["Cloned channel not found. Import failed."] = "Klonet kanal ble ikke funnet. Import mislyktes.";
+App::$strings["Delegation session ended."] = "";
+App::$strings["Logged out."] = "Logget ut.";
+App::$strings["Email validation is incomplete. Please check your email."] = "";
+App::$strings["Failed authentication"] = "Mislykket autentisering";
+App::$strings["Login failed."] = "Innlogging mislyktes.";
+App::$strings["This is the home page of %s."] = "";
App::$strings["Remote authentication"] = "Fjernautentisering";
App::$strings["Click to authenticate to your home hub"] = "Klikk for å godkjennes mot din hjemme-hub";
App::$strings["Channels"] = "Kanaler";
@@ -1177,9 +155,11 @@ App::$strings["Settings"] = "Innstillinger";
App::$strings["Account/Channel Settings"] = "Konto-/kanalinnstillinger";
App::$strings["Logout"] = "Logg ut";
App::$strings["End this session"] = "Avslutt denne økten";
+App::$strings["View Profile"] = "Vis profil";
App::$strings["Your profile page"] = "Din profilside";
-App::$strings["Edit Profiles"] = "Endre profiler";
+App::$strings["Edit Profiles"] = "Rediger profiler";
App::$strings["Manage/Edit profiles"] = "Håndter/endre profiler";
+App::$strings["Edit Profile"] = "Rediger profil";
App::$strings["Edit your profile"] = "Rediger profil";
App::$strings["Login"] = "Logg inn";
App::$strings["Sign in"] = "Logg på";
@@ -1187,7 +167,9 @@ App::$strings["Take me home"] = "";
App::$strings["Log me out of this site"] = "";
App::$strings["Register"] = "Registrer";
App::$strings["Create an account"] = "Lag en konto";
+App::$strings["Help"] = "Hjelp";
App::$strings["Help and documentation"] = "Hjelp og dokumentasjon";
+App::$strings["Search"] = "Søk";
App::$strings["Search site @name, !forum, #tag, ?docs, content"] = "Søk etter @navn, !forum, #emne, ?dokumentasjon eller innhold";
App::$strings["Admin"] = "Administrator";
App::$strings["Site Setup and Configuration"] = "Nettstedsoppsett og -konfigurasjon";
@@ -1203,6 +185,7 @@ App::$strings["Channel"] = "Kanal";
App::$strings["Status Messages and Posts"] = "Statusmeldinger og -innlegg";
App::$strings["About"] = "Om";
App::$strings["Profile Details"] = "Profildetaljer";
+App::$strings["Photo Albums"] = "Fotoalbum";
App::$strings["Files"] = "Filer";
App::$strings["Files and Storage"] = "Filer og lagring";
App::$strings["Chatrooms"] = "Chatrom";
@@ -1210,15 +193,102 @@ App::$strings["Bookmarks"] = "Bokmerker";
App::$strings["Saved Bookmarks"] = "Lagrede bokmerker";
App::$strings["Webpages"] = "Websider";
App::$strings["View Webpages"] = "";
-App::$strings["Wiki"] = "";
-App::$strings["Delegation session ended."] = "";
-App::$strings["Logged out."] = "Logget ut.";
-App::$strings["Email validation is incomplete. Please check your email."] = "";
-App::$strings["Failed authentication"] = "Mislykket autentisering";
+App::$strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A";
+App::$strings["Starts:"] = "Starter:";
+App::$strings["Finishes:"] = "Slutter:";
+App::$strings["Location:"] = "Plassering:";
+App::$strings["l F d, Y"] = "";
+App::$strings["Start:"] = "";
+App::$strings["End:"] = "";
+App::$strings["Timezone"] = "Tidssone";
+App::$strings["This event has been added to your calendar."] = "Denne hendelsen er lagt til i din kalender.";
+App::$strings["event"] = "hendelse";
+App::$strings["Not specified"] = "Ikke spesifisert";
+App::$strings["Needs Action"] = "Trenger handling";
+App::$strings["Completed"] = "Ferdig";
+App::$strings["In Process"] = "Igang";
+App::$strings["Cancelled"] = "Avbrutt";
+App::$strings["Mobile"] = "mobil";
+App::$strings["Home"] = "Hjem";
+App::$strings["Home, Voice"] = "";
+App::$strings["Home, Fax"] = "";
+App::$strings["Work"] = "";
+App::$strings["Work, Voice"] = "";
+App::$strings["Work, Fax"] = "";
+App::$strings["Other"] = "Annen";
+App::$strings["Image exceeds website size limit of %lu bytes"] = "Bilde overstiger nettstedets størrelsesbegrensning på %lu bytes";
+App::$strings["Image file is empty."] = "Bildefilen er tom.";
+App::$strings["Unable to process image"] = "Kan ikke behandle bildet";
+App::$strings["Photo storage failed."] = "Bildelagring mislyktes.";
+App::$strings["a new photo"] = "et nytt bilde";
+App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s la inn %2\$s til %3\$s";
+App::$strings["Recent Photos"] = "Nye bilder";
+App::$strings["Upload New Photos"] = "Last opp nye bilder";
+App::$strings["Permission denied"] = "Tillatelse avvist";
+App::$strings["Visible to anybody on the internet."] = "Synlig for enhver på Internett.";
+App::$strings["Visible to you only."] = "Synlig bare for deg.";
+App::$strings["Visible to anybody in this network."] = "Synlig for enhver i dette nettverket.";
+App::$strings["Visible to anybody authenticated."] = "Synlig for enhver som er autentisert.";
+App::$strings["Visible to anybody on %s."] = "Synlig for alle på %s.";
+App::$strings["Visible to all connections."] = "Synlig for alle forbindelser.";
+App::$strings["Visible to approved connections."] = "Synlig for godkjente forbindelser.";
+App::$strings["Visible to specific connections."] = "Synlig for spesifikke forbindelser.";
+App::$strings["&#x1f501; Repeated %1\$s's %2\$s"] = "";
+App::$strings["Item not found."] = "Elementet ble ikke funnet.";
+App::$strings["Privacy group not found."] = "Personverngruppen ble ikke funnet.";
+App::$strings["Privacy group is empty."] = "Personverngruppen er tom.";
+App::$strings["Privacy group: %s"] = "Personverngruppe: %s";
+App::$strings["Connection: %s"] = "Forbindelse: %s";
+App::$strings["Connection not found."] = "Forbindelsen ble ikke funnet.";
+App::$strings["The provided email address is not valid"] = "";
+App::$strings["The provided email domain is not among those allowed on this site"] = "";
+App::$strings["The provided email address is already registered at this site"] = "";
+App::$strings["There is a pending registration for this address - click \"Register\" to continue verification"] = "";
+App::$strings["An invitation is required."] = "En invitasjon er påkrevd.";
+App::$strings["Invitation could not be verified."] = "Invitasjon kunne ikke bekreftes.";
+App::$strings["Please enter the required information."] = "Vennligst skriv inn nødvendig informasjon.";
+App::$strings["Failed to store account information."] = "Mislyktes med å lagre kontoinformasjon.";
+App::$strings["Registration confirmation for %s"] = "Registreringsbekreftelse for %s";
+App::$strings["Registration request at %s"] = "Registreringsforespørsel hos %s";
+App::$strings["your registration password"] = "ditt registreringspassord";
+App::$strings["Registration details for %s"] = "Registreringsdetaljer for %s";
+App::$strings["Account approved."] = "Konto godkjent.";
+App::$strings["Registration revoked for %s"] = "Registrering trukket tilbake for %s";
+App::$strings["Could not revoke registration for %s"] = "";
+App::$strings["Click here to upgrade."] = "Klikk her for å oppgradere.";
+App::$strings["This action exceeds the limits set by your subscription plan."] = "Denne handlingen går utenfor grensene satt i din abonnementsplan.";
+App::$strings["This action is not available under your subscription plan."] = "Denne handlingen er ikke tilgjengelig i din abonnementsplan.";
+App::$strings["open"] = "";
+App::$strings["closed"] = "";
+App::$strings["Registration is currently"] = "";
+App::$strings["please come back"] = "";
+App::$strings["Profile Photos"] = "Profilbilder";
+App::$strings[" and "] = " og ";
+App::$strings[", "] = " ";
+App::$strings["Profile Photo"] = "Profilbilde";
+App::$strings["Cover Photo"] = "Forsidebilder";
+App::$strings["public profile"] = "offentlig profil";
+App::$strings["%1\$s %2\$s has been updated to %3\$s."] = "%1\$s har oppdatert %2\$s, endret %3\$s.";
+App::$strings["%1\$s updated the %2\$s. Changed %3\$s."] = "%1\$s har oppdatert %2\$s, endret %3\$s.";
+App::$strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe med et annet navn.";
+App::$strings["Add new connections to this privacy group"] = "Legg nye forbindelser i denne personverngruppen";
+App::$strings["edit"] = "endre";
+App::$strings["Privacy Groups"] = "Personverngrupper";
+App::$strings["Edit group"] = "Endre gruppe";
+App::$strings["Manage privacy groups"] = "";
+App::$strings["Channels not in any privacy group"] = "Kanaler uten personverngruppe";
+App::$strings["add"] = "legg til";
+App::$strings["default"] = "standard";
+App::$strings["Select an alternate language"] = "Velg et annet språk";
+App::$strings["Unable to import a removed channel."] = "";
+App::$strings["Cannot create a duplicate channel identifier on this system. Import failed."] = "Kan ikke lage en kopi av kanal-identifikatoren på dette systemet. Import mislyktes.";
+App::$strings["Unable to create a unique channel address. Import failed."] = "Klarte ikke å lage en unik kanaladresse. Import mislyktes.";
+App::$strings["Cloned channel not found. Import failed."] = "Klonet kanal ble ikke funnet. Import mislyktes.";
App::$strings["Miscellaneous"] = "Forskjellig";
App::$strings["Birthday"] = "Fødselsdag:";
App::$strings["Age: "] = "Alder: ";
App::$strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD eller MM-DD";
+App::$strings["Required"] = "Påkrevd";
App::$strings["never"] = "aldri";
App::$strings["less than a second ago"] = "for mindre enn ett sekund siden";
App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s siden";
@@ -1252,29 +322,24 @@ App::$strings["__ctx:relative_date__ second"] = array(
);
App::$strings["%1\$s's birthday"] = "%1\$s sin fødselsdag";
App::$strings["Happy Birthday %1\$s"] = "Gratulerer med dagen, %1\$s";
-App::$strings["INVALID EVENT DISMISSED!"] = "";
-App::$strings["Summary: "] = "Sammendrag";
-App::$strings["Unknown"] = "Ukjent";
-App::$strings["Date: "] = "Dato";
-App::$strings["Reason: "] = "";
-App::$strings["INVALID CARD DISMISSED!"] = "";
-App::$strings["Name: "] = "Navn";
+App::$strings["photo"] = "foto";
App::$strings["channel"] = "kanal";
+App::$strings["comment"] = "kommentar";
+App::$strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s liker %2\$s sin %3\$s";
App::$strings["likes %1\$s's %2\$s"] = "";
+App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s liker ikke %2\$s sin %3\$s";
App::$strings["doesn't like %1\$s's %2\$s"] = "";
-App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s er nå forbundet med %2\$s";
-App::$strings["%1\$s poked %2\$s"] = "%1\$s prikket %2\$s";
-App::$strings["__ctx:mood__ %1\$s is %2\$s"] = "%1\$s er %2\$s";
+App::$strings["%1\$s repeated %2\$s's %3\$s"] = "%1\$s deltar kanskje på %2\$ss %3\$s";
+App::$strings["repeated %1\$s's %2\$s"] = "Besøk %1\$s sitt %2\$s";
App::$strings["This is an unsaved preview"] = "";
App::$strings["__ctx:title__ Likes"] = "Liker";
App::$strings["__ctx:title__ Dislikes"] = "Liker ikke";
-App::$strings["__ctx:title__ Agree"] = "Enig";
-App::$strings["__ctx:title__ Disagree"] = "Uenig";
-App::$strings["__ctx:title__ Abstain"] = "Avstår";
App::$strings["__ctx:title__ Attending"] = "Deltar";
App::$strings["__ctx:title__ Not attending"] = "Deltar ikke";
App::$strings["__ctx:title__ Might attend"] = "Deltar kanskje";
+App::$strings["__ctx:title__ Repeats"] = "";
App::$strings["Select"] = "Velg";
+App::$strings["Delete"] = "Slett";
App::$strings["Toggle Star Status"] = "Skru av og på stjernestatus";
App::$strings["Private Message"] = "Privat melding";
App::$strings["Message signature validated"] = "Innleggets signatur er bekreftet";
@@ -1286,6 +351,7 @@ App::$strings["Filed under:"] = "Sortert under:";
App::$strings["from %s"] = "fra %s";
App::$strings["last edited: %s"] = "sist endret: %s";
App::$strings["Expires: %s"] = "Utløper: %s";
+App::$strings["View in context"] = "Vis i sammenheng";
App::$strings["Please wait"] = "Vennligst vent";
App::$strings["remove"] = "fjern";
App::$strings["Loading..."] = "Laster...";
@@ -1297,7 +363,7 @@ App::$strings["Unfollow Thread"] = "Ikke følg tråd";
App::$strings["Recent Activity"] = "Nylig aktivitet";
App::$strings["Connect"] = "Koble";
App::$strings["Edit Connection"] = "Endre forbindelse";
-App::$strings["Poke"] = "Prikk";
+App::$strings["Unknown"] = "Ukjent";
App::$strings["Approve this item"] = "Fjern denne filen";
App::$strings["Delete this item"] = "Slett dette elementet?";
App::$strings["%s likes this."] = "%s liker dette.";
@@ -1317,6 +383,36 @@ App::$strings[", and %d other people"] = array(
);
App::$strings["%s like this."] = "%s liker dette.";
App::$strings["%s don't like this."] = "%s liker ikke dette.";
+App::$strings["Set your location"] = "Angi din plassering";
+App::$strings["Clear browser location"] = "Fjern nettleserplassering";
+App::$strings["Insert web link"] = "Sett inn web-lenke";
+App::$strings["Embed (existing) photo from your photo albums"] = "Sett inn (eksisterende) bilde fra fotoalbumene dine";
+App::$strings["Please enter a link URL:"] = "Vennligst skriv inn en lenke URL:";
+App::$strings["Tag term:"] = "Merkelapp:";
+App::$strings["Where are you right now?"] = "Hvor er du akkurat nå?";
+App::$strings["Choose images to embed"] = "Velg bilder";
+App::$strings["Choose an album"] = "Velg et album";
+App::$strings["Choose a different album..."] = "Velg et annet album...";
+App::$strings["Error getting album list"] = "";
+App::$strings["Error getting photo link"] = "";
+App::$strings["Error getting album"] = "";
+App::$strings["Comments enabled"] = "";
+App::$strings["Comments disabled"] = "";
+App::$strings["Confirm delete"] = "Profilen er slettet.";
+App::$strings["Preview"] = "Forhåndsvisning";
+App::$strings["Share"] = "Del";
+App::$strings["Page link name"] = "Sidens lenkenavn";
+App::$strings["Post as"] = "Lag innlegg som";
+App::$strings["Bold"] = "Uthevet";
+App::$strings["Italic"] = "Kursiv";
+App::$strings["Underline"] = "Understreket";
+App::$strings["Quote"] = "Sitat";
+App::$strings["Code"] = "Kode";
+App::$strings["Attach/Upload file"] = "Last opp fil/vedlegg";
+App::$strings["Embed an image from your albums"] = "";
+App::$strings["Cancel"] = "Avbryt";
+App::$strings["OK"] = "OK";
+App::$strings["Toggle voting"] = "Skru av eller på stemming";
App::$strings["Toggle poll"] = "Spørreskjema (på/av)";
App::$strings["Option"] = "Valg";
App::$strings["Add option"] = "Legg til valg";
@@ -1324,11 +420,26 @@ App::$strings["Minutes"] = "Minutter";
App::$strings["Hours"] = "timer";
App::$strings["Days"] = "dager";
App::$strings["Allow multiple answers"] = "Tillat flere svar";
+App::$strings["No"] = "Nei";
+App::$strings["Yes"] = "Ja";
+App::$strings["Disable comments"] = "Slå av kommentarer";
+App::$strings["Toggle comments"] = "";
+App::$strings["Title (optional)"] = "Tittel (valgfri)";
App::$strings["Summary (optional)"] = "Sammendrag (valgfritt)";
+App::$strings["Categories (optional, comma-separated list)"] = "Kategorier (valgfri, kommaseparert liste)";
+App::$strings["Permission settings"] = "Tillatelser - innstillinger";
+App::$strings["Other networks and post services"] = "Andre nettverk og innleggstjenester";
+App::$strings["Set expiration date"] = "Angi utløpsdato";
+App::$strings["Set publish date"] = "Angi publiseringsdato";
+App::$strings["Encrypt text"] = "Krypter tekst";
App::$strings["__ctx:noun__ Like"] = array(
0 => "Liker",
1 => "Liker",
);
+App::$strings["__ctx:noun__ Repeat"] = array(
+ 0 => "",
+ 1 => "",
+);
App::$strings["__ctx:noun__ Dislike"] = array(
0 => "Liker ikke",
1 => "Liker ikke",
@@ -1345,183 +456,190 @@ App::$strings["__ctx:noun__ Undecided"] = array(
0 => "Ikke bestemt",
1 => "Ikke bestemt",
);
-App::$strings["__ctx:noun__ Agree"] = array(
- 0 => "Enig",
- 1 => "Enige",
+App::$strings["prev"] = "forrige";
+App::$strings["first"] = "første";
+App::$strings["last"] = "siste";
+App::$strings["next"] = "neste";
+App::$strings["older"] = "eldre";
+App::$strings["newer"] = "nyere";
+App::$strings["Accepts"] = "";
+App::$strings["Comments"] = "";
+App::$strings["Stream items"] = "";
+App::$strings["Wall posts"] = "";
+App::$strings["Nothing"] = "";
+App::$strings["View all %s connections"] = "Vis alle %s forbindelser";
+App::$strings["Network: %s"] = "";
+App::$strings["Save"] = "Lagre";
+App::$strings["Monday"] = "mandag";
+App::$strings["Tuesday"] = "tirsdag";
+App::$strings["Wednesday"] = "onsdag";
+App::$strings["Thursday"] = "torsdag";
+App::$strings["Friday"] = "fredag";
+App::$strings["Saturday"] = "lørdag";
+App::$strings["Sunday"] = "søndag";
+App::$strings["January"] = "januar";
+App::$strings["February"] = "februar";
+App::$strings["March"] = "mars";
+App::$strings["April"] = "april";
+App::$strings["May"] = "mai";
+App::$strings["June"] = "juni";
+App::$strings["July"] = "juli";
+App::$strings["August"] = "august";
+App::$strings["September"] = "september";
+App::$strings["October"] = "oktober";
+App::$strings["November"] = "november";
+App::$strings["December"] = "desember";
+App::$strings["Unknown attachment"] = "Ukjent vedlegg";
+App::$strings["Size"] = "Størrelse";
+App::$strings["remove category"] = "fjern kategori";
+App::$strings["remove from file"] = "fjern fra fil";
+App::$strings["Download binary/encrypted content"] = "";
+App::$strings["__ctx:noun__ %d Vote"] = array(
+ 0 => "",
+ 1 => "",
);
-App::$strings["__ctx:noun__ Disagree"] = array(
- 0 => "Uenig",
- 1 => "Uenige",
+App::$strings["__ctx:noun__ %d Vote in total"] = array(
+ 0 => "",
+ 1 => "",
);
-App::$strings["__ctx:noun__ Abstain"] = array(
- 0 => "Avstår",
- 1 => "Avstår",
+App::$strings["Poll has ended"] = "Spørreskjema har utløpt";
+App::$strings["Poll ends in %s"] = "Spørreskjema utløper om %s";
+App::$strings["Vote"] = "";
+App::$strings["Link to Source"] = "Lenke til kilde";
+App::$strings["Page layout"] = "Sidens layout";
+App::$strings["You can create your own with the layouts tool"] = "Du kan lage din egen med layout-verktøyet";
+App::$strings["BBcode"] = "BBcode";
+App::$strings["HTML"] = "";
+App::$strings["Markdown"] = "Markdown";
+App::$strings["Text"] = "Tekst";
+App::$strings["Comanche Layout"] = "";
+App::$strings["PHP"] = "";
+App::$strings["Page content type"] = "Sidens innholdstype";
+App::$strings["activity"] = "aktivitet";
+App::$strings["poll"] = "spørreskjema";
+App::$strings["a-z, 0-9, -, and _ only"] = "";
+App::$strings["Design Tools"] = "Designverktøy";
+App::$strings["Blocks"] = "Byggeklosser";
+App::$strings["Menus"] = "Menyer";
+App::$strings["Layouts"] = "Layout";
+App::$strings["Pages"] = "Sider";
+App::$strings["Import"] = "Importer";
+App::$strings["Import website..."] = "";
+App::$strings["Select folder to import"] = "";
+App::$strings["Import from a zipped folder:"] = "";
+App::$strings["Import from cloud files:"] = "";
+App::$strings["/cloud/channel/path/to/folder"] = "";
+App::$strings["Enter path to website files"] = "";
+App::$strings["Select folder"] = "";
+App::$strings["Export website..."] = "";
+App::$strings["Export to a zip file"] = "";
+App::$strings["website.zip"] = "";
+App::$strings["Enter a name for the zip file."] = "";
+App::$strings["Export to cloud files"] = "";
+App::$strings["/path/to/export/folder"] = "";
+App::$strings["Enter a path to a cloud files destination."] = "";
+App::$strings["Specify folder"] = "";
+App::$strings["Default"] = "Standard";
+App::$strings["View PDF"] = "";
+App::$strings[" by "] = " av ";
+App::$strings[" on "] = "På";
+App::$strings["Embedded content"] = "Innebygget innhold";
+App::$strings["Embedding disabled"] = "Innbygging avskrudd";
+App::$strings["Delete this item?"] = "Slett dette elementet?";
+App::$strings["Item deleted"] = "";
+App::$strings["Comment"] = "Kommentar";
+App::$strings["show all"] = "Vis alle";
+App::$strings["show less"] = "Vis eldste først";
+App::$strings["expand"] = "";
+App::$strings["collapse"] = "";
+App::$strings["Password too short"] = "Passordet er for kort";
+App::$strings["Passwords do not match"] = "Passordene er ikke like";
+App::$strings["everybody"] = "alle";
+App::$strings["Secret Passphrase"] = "Hemmelig passordsetning";
+App::$strings["Passphrase hint"] = "Hint om passordsetning";
+App::$strings["Notice: Permissions have changed but have not yet been submitted."] = "Varsel: Tillatelser har blitt endret, men de har ennå ikke blitt sendt inn.";
+App::$strings["close all"] = "lukk alle";
+App::$strings["Nothing new here"] = "Ikke noe nytt her";
+App::$strings["Rate This Channel (this is public)"] = "Vurder denne kanalen (dette er offentlig)";
+App::$strings["Rating"] = "Vurdering";
+App::$strings["Describe (optional)"] = "Beskriv (valgfritt)";
+App::$strings["Submit"] = "Lagre";
+App::$strings["Please enter a link URL"] = "Vennligst skriv inn en lenke URL";
+App::$strings["Unsaved changes. Are you sure you wish to leave this page?"] = "Endringene er ikke lagret. Er du sikker på at du ønsker å forlate denne siden?";
+App::$strings["Location"] = "Plassering";
+App::$strings["lovely"] = "";
+App::$strings["wonderful"] = "";
+App::$strings["fantastic"] = "";
+App::$strings["great"] = "";
+App::$strings["Your chosen nickname was either already taken or not valid. Please use our suggestion ("] = "";
+App::$strings[") or enter a new one."] = "";
+App::$strings["Thank you, this nickname is valid."] = "";
+App::$strings["A channel name is required."] = "";
+App::$strings["This is a "] = "";
+App::$strings[" channel name"] = "Kanalnavn";
+App::$strings["Back to reply"] = "";
+App::$strings["Pinned"] = "";
+App::$strings["Pin to the top"] = "";
+App::$strings["Unpin from the top"] = "";
+App::$strings["%d minutes"] = array(
+ 0 => "%d minutter",
+ 1 => "%d minutter",
);
-App::$strings["Select a profile to assign to this contact"] = "";
-App::$strings["Frequently"] = "Ofte";
-App::$strings["Hourly"] = "Hver time";
-App::$strings["Twice daily"] = "To ganger daglig";
-App::$strings["Daily"] = "Daglig";
-App::$strings["Weekly"] = "Ukentlig";
-App::$strings["Monthly"] = "Månedlig";
-App::$strings["Currently Male"] = "For tiden mann";
-App::$strings["Currently Female"] = "For tiden kvinne";
-App::$strings["Mostly Male"] = "For det meste mann";
-App::$strings["Mostly Female"] = "For det meste kvinne";
-App::$strings["Transgender"] = "Transkjønnet";
-App::$strings["Intersex"] = "interkjønnet";
-App::$strings["Transsexual"] = "Transseksuell";
-App::$strings["Hermaphrodite"] = "Hermafroditt";
-App::$strings["Neuter"] = "Intetkjønn";
-App::$strings["Non-specific"] = "Ubestemt";
-App::$strings["Undecided"] = "Ubestemt";
-App::$strings["Males"] = "Menn";
-App::$strings["Females"] = "Kvinner";
-App::$strings["Gay"] = "Homo";
-App::$strings["Lesbian"] = "Lesbisk";
-App::$strings["No Preference"] = "Ingen preferanse";
-App::$strings["Bisexual"] = "Biseksuell";
-App::$strings["Autosexual"] = "Autoseksuell";
-App::$strings["Abstinent"] = "Avholdende";
-App::$strings["Virgin"] = "Jomfru";
-App::$strings["Deviant"] = "Avviker";
-App::$strings["Fetish"] = "Fetisj";
-App::$strings["Oodles"] = "Masse";
-App::$strings["Nonsexual"] = "Ikke-seksuell";
-App::$strings["Single"] = "Enslig";
-App::$strings["Lonely"] = "Ensom";
-App::$strings["Available"] = "Tilgjengelig";
-App::$strings["Unavailable"] = "Ikke tilgjengelig";
-App::$strings["Has crush"] = "Er forelsket";
-App::$strings["Infatuated"] = "Betatt";
-App::$strings["Dating"] = "Sammen med";
-App::$strings["Unfaithful"] = "Utro";
-App::$strings["Sex Addict"] = "Sexavhengig";
-App::$strings["Friends"] = "Venner";
-App::$strings["Friends/Benefits"] = "Venner/Frynsegoder";
-App::$strings["Casual"] = "Tilfeldig";
-App::$strings["Engaged"] = "Forlovet";
-App::$strings["Married"] = "Gift";
-App::$strings["Imaginarily married"] = "Gift i fantasien";
-App::$strings["Partners"] = "Partnere";
-App::$strings["Cohabiting"] = "Samboer";
-App::$strings["Common law"] = "Samboer";
-App::$strings["Happy"] = "Lykkelig";
-App::$strings["Not looking"] = "Ikke på utkikk";
-App::$strings["Swinger"] = "Partnerbytte";
-App::$strings["Betrayed"] = "Bedratt";
-App::$strings["Separated"] = "Separert";
-App::$strings["Unstable"] = "Ustabilt";
-App::$strings["Divorced"] = "Skilt";
-App::$strings["Imaginarily divorced"] = "Skilt i fantasien";
-App::$strings["Widowed"] = "Enke";
-App::$strings["Uncertain"] = "Usikkert";
-App::$strings["It's complicated"] = "Det er komplisert";
-App::$strings["Don't care"] = "Bryr meg ikke";
-App::$strings["Ask me"] = "Spør meg";
-App::$strings["New window"] = "Nytt vindu";
-App::$strings["Open the selected location in a different window or browser tab"] = "Åpne det valgte stedet i et annet vindu eller nettleser-fane";
-App::$strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe med et annet navn.";
-App::$strings["Add new connections to this privacy group"] = "Legg nye forbindelser i denne personverngruppen";
-App::$strings["edit"] = "endre";
-App::$strings["Privacy Groups"] = "Personverngrupper";
-App::$strings["Edit group"] = "Endre gruppe";
-App::$strings["Manage privacy groups"] = "";
-App::$strings["Channels not in any privacy group"] = "Kanaler uten personverngruppe";
-App::$strings["add"] = "legg til";
-App::$strings["Trending"] = "";
-App::$strings["Tags"] = "Merkelapper";
-App::$strings["Keywords"] = "Nøkkelord";
-App::$strings["have"] = "har";
-App::$strings["has"] = "har";
-App::$strings["want"] = "ønsker";
-App::$strings["wants"] = "ønsker";
-App::$strings["like"] = "liker";
-App::$strings["likes"] = "liker";
-App::$strings["dislike"] = "misliker";
-App::$strings["dislikes"] = "misliker";
-App::$strings["Visible to anybody on the internet."] = "Synlig for enhver på Internett.";
-App::$strings["Visible to you only."] = "Synlig bare for deg.";
-App::$strings["Visible to anybody in this network."] = "Synlig for enhver i dette nettverket.";
-App::$strings["Visible to anybody authenticated."] = "Synlig for enhver som er autentisert.";
-App::$strings["Visible to anybody on %s."] = "Synlig for alle på %s.";
-App::$strings["Visible to all connections."] = "Synlig for alle forbindelser.";
-App::$strings["Visible to approved connections."] = "Synlig for godkjente forbindelser.";
-App::$strings["Visible to specific connections."] = "Synlig for spesifikke forbindelser.";
-App::$strings["&#x1f501; Repeated %1\$s's %2\$s"] = "";
-App::$strings["Privacy group not found."] = "Personverngruppen ble ikke funnet.";
-App::$strings["Privacy group is empty."] = "Personverngruppen er tom.";
-App::$strings["Privacy group: %s"] = "Personverngruppe: %s";
-App::$strings["Connection: %s"] = "Forbindelse: %s";
-App::$strings["Connection not found."] = "Forbindelsen ble ikke funnet.";
-App::$strings["female"] = "kvinne";
-App::$strings["%1\$s updated her %2\$s"] = "%1\$s oppdaterte %2\$s sitt";
-App::$strings["male"] = "mann";
-App::$strings["%1\$s updated his %2\$s"] = "%1\$s oppdaterte %2\$s sitt";
-App::$strings["%1\$s updated their %2\$s"] = "%1\$s oppdaterte %2\$s deres";
-App::$strings["profile photo"] = "profilbilde";
-App::$strings["[Edited %s]"] = "";
-App::$strings["__ctx:edit_activity__ Post"] = "Innlegg";
-App::$strings["__ctx:edit_activity__ Comment"] = "Kommentar";
-App::$strings["The provided email address is not valid"] = "";
-App::$strings["The provided email domain is not among those allowed on this site"] = "";
-App::$strings["The provided email address is already registered at this site"] = "";
-App::$strings["There is a pending registration for this address - click \"Register\" to continue verification"] = "";
-App::$strings["An invitation is required."] = "En invitasjon er påkrevd.";
-App::$strings["Invitation could not be verified."] = "Invitasjon kunne ikke bekreftes.";
-App::$strings["Please enter the required information."] = "Vennligst skriv inn nødvendig informasjon.";
-App::$strings["Failed to store account information."] = "Mislyktes med å lagre kontoinformasjon.";
-App::$strings["Registration confirmation for %s"] = "Registreringsbekreftelse for %s";
-App::$strings["Registration request at %s"] = "Registreringsforespørsel hos %s";
-App::$strings["your registration password"] = "ditt registreringspassord";
-App::$strings["Registration details for %s"] = "Registreringsdetaljer for %s";
-App::$strings["Account approved."] = "Konto godkjent.";
-App::$strings["Registration revoked for %s"] = "Registrering trukket tilbake for %s";
-App::$strings["Could not revoke registration for %s"] = "";
-App::$strings["Click here to upgrade."] = "Klikk her for å oppgradere.";
-App::$strings["This action exceeds the limits set by your subscription plan."] = "Denne handlingen går utenfor grensene satt i din abonnementsplan.";
-App::$strings["This action is not available under your subscription plan."] = "Denne handlingen er ikke tilgjengelig i din abonnementsplan.";
-App::$strings["open"] = "";
-App::$strings["closed"] = "";
-App::$strings["Registration is currently"] = "";
-App::$strings["please come back"] = "";
-App::$strings["Profile Photos"] = "Profilbilder";
-App::$strings["Item was not found."] = "Elementet ble ikke funnet.";
-App::$strings["Unknown error."] = "";
-App::$strings["No source file."] = "Ingen kildefil.";
-App::$strings["Cannot locate file to replace"] = "Kan ikke finne filen som skal byttes ut";
-App::$strings["Cannot locate file to revise/update"] = "Finner ikke filen som skal revideres/oppdateres";
-App::$strings["File exceeds size limit of %d"] = "Filens størrelse overgår grensen på %d";
-App::$strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes.";
-App::$strings["File upload failed. Possible system limit or action terminated."] = "Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt.";
-App::$strings["Stored file could not be verified. Upload failed."] = "Lagret fil kunne ikke bekreftes. Opplasting mislyktes.";
-App::$strings["Path not available."] = "Stien er ikke tilgjengelig.";
-App::$strings["Empty pathname"] = "Tomt sti-navn";
-App::$strings["duplicate filename or path"] = "duplikat av filnavn eller sti";
-App::$strings["Path not found."] = "Stien ble ikke funnet.";
-App::$strings["mkdir failed."] = "mkdir mislyktes.";
-App::$strings["database storage failed."] = "databaselagring mislyktes.";
-App::$strings["Empty path"] = "Tom sti";
-App::$strings["%s shared an %s with you"] = "Filer: delt med meg";
-App::$strings["%s shared a %s with you"] = "";
-App::$strings["image"] = "Bilde";
-App::$strings["%1\$s's bookmarks"] = "%1\$s sine bokmerker";
-App::$strings["Image/photo"] = "Bilde/fotografi";
-App::$strings["Encrypted content"] = "Kryptert innhold";
-App::$strings["Install %1\$s element %2\$s"] = "";
-App::$strings["This post contains an installable %s element, however you lack permissions to install it on this site."] = "Dette innlegget inneholder det installerbare elementet %s, men du mangler tillatelse til å installere det på dette nettstedet.";
-App::$strings["webpage"] = "nettside";
-App::$strings["layout"] = "layout";
-App::$strings["block"] = "byggekloss";
-App::$strings["menu"] = "meny";
-App::$strings["card"] = "";
-App::$strings["article"] = "";
-App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s skrev følgende %2\$s %3\$s";
-App::$strings["Click to open/close"] = "Klikk for å åpne/lukke";
-App::$strings["spoiler"] = "";
-App::$strings["View article"] = "";
-App::$strings["View summary"] = "";
-App::$strings["$1 wrote:"] = "$1 skrev:";
+App::$strings["about %d hours"] = array(
+ 0 => "omtrent %d timer",
+ 1 => "omtrent %d timer",
+);
+App::$strings["%d days"] = array(
+ 0 => "%d dager",
+ 1 => "%d dager",
+);
+App::$strings["%d months"] = array(
+ 0 => "%d måneder",
+ 1 => "%d måneder",
+);
+App::$strings["%d years"] = array(
+ 0 => "%d år",
+ 1 => "%d år",
+);
+App::$strings["timeago.prefixAgo"] = "timeago.prefixAgo";
+App::$strings["timeago.prefixFromNow"] = "timeago.prefixFromNow";
+App::$strings["timeago.suffixAgo"] = "siden";
+App::$strings["timeago.suffixFromNow"] = "";
+App::$strings["less than a minute"] = "mindre enn ett minutt";
+App::$strings["about a minute"] = "omtrent et minutt";
+App::$strings["about an hour"] = "omtrent en time";
+App::$strings["a day"] = "en dag";
+App::$strings["about a month"] = "omtrent en måned";
+App::$strings["about a year"] = "omtrent et år";
+App::$strings[" "] = " ";
+App::$strings["timeago.numbers"] = "timeago.numbers";
+App::$strings["__ctx:long__ May"] = "mai";
+App::$strings["Jan"] = "Jan";
+App::$strings["Feb"] = "Feb";
+App::$strings["Mar"] = "Mar";
+App::$strings["Apr"] = "Apr";
+App::$strings["__ctx:short__ May"] = "mai";
+App::$strings["Jun"] = "Jun";
+App::$strings["Jul"] = "Jul";
+App::$strings["Aug"] = "Aug";
+App::$strings["Sep"] = "Sep";
+App::$strings["Oct"] = "Okt";
+App::$strings["Nov"] = "Nov";
+App::$strings["Dec"] = "Des";
+App::$strings["Sun"] = "Søn";
+App::$strings["Mon"] = "Man";
+App::$strings["Tue"] = "Tirs";
+App::$strings["Wed"] = "Ons";
+App::$strings["Thu"] = "Tors";
+App::$strings["Fri"] = "Fre";
+App::$strings["Sat"] = "Lør";
+App::$strings["__ctx:calendar__ today"] = "idag";
+App::$strings["__ctx:calendar__ month"] = "måned";
+App::$strings["__ctx:calendar__ week"] = "uke";
+App::$strings["__ctx:calendar__ day"] = "dag";
+App::$strings["__ctx:calendar__ All day"] = "Hele dagen";
+App::$strings["Please stand by while your download is being prepared."] = "";
+App::$strings["Email address not valid"] = "";
App::$strings["Unable to obtain identity information from database"] = "Klarer ikke å få tak i identitetsinformasjon fra databasen";
App::$strings["Empty name"] = "Mangler navn";
App::$strings["Name too long"] = "Navnet er for langt";
@@ -1531,9 +649,12 @@ App::$strings["Reserved nickname. Please choose another."] = "Reservert kallenav
App::$strings["Nickname has unsupported characters or is already being used on this site."] = "Kallenavnet inneholder tegn som ikke er støttet eller det er allerede i bruk på dette nettstedet.";
App::$strings["Unable to retrieve created identity"] = "Klarer ikke å hente den lagede identiteten";
App::$strings["Default Profile"] = "Standardprofil";
+App::$strings["Friends"] = "Venner";
App::$strings["Unable to retrieve modified identity"] = "";
App::$strings["Requested channel is not available"] = "";
+App::$strings["Requested profile is not available."] = "Forespurt profil er ikke tilgjengelig.";
App::$strings["Change profile photo"] = "Endre profilbilde";
+App::$strings["Edit"] = "Endre";
App::$strings["Create New Profile"] = "Lag ny profil";
App::$strings["Profile Image"] = "Profilbilde";
App::$strings["Visible to everybody"] = "";
@@ -1543,11 +664,14 @@ App::$strings["Status:"] = "Status:";
App::$strings["Homepage:"] = "Hjemmeside:";
App::$strings["Hometown:"] = "Hjemby:";
App::$strings["Online Now"] = "Online nå";
-App::$strings["This channel has not added a profile description yet"] = "";
+App::$strings["This channel has not added a profile description yet"] = "Denne kanalen har ikke lagt til en profilbeskrivelse enda";
App::$strings["Change your profile photo"] = "";
+App::$strings["Female"] = "Kvinnelig";
+App::$strings["Male"] = "Mannlig";
App::$strings["Trans"] = "";
+App::$strings["Neuter"] = "Intetkjønn";
+App::$strings["Non-specific"] = "Ubestemt";
App::$strings["Full Name:"] = "Fullt navn:";
-App::$strings["Like this channel"] = "Lik denne kanalen";
App::$strings["j F, Y"] = "j F, Y";
App::$strings["j F"] = "j F";
App::$strings["Birthday:"] = "Fødselsdag:";
@@ -1578,6 +702,38 @@ App::$strings["Remote Authentication"] = "Fjernautentisering";
App::$strings["Enter your channel address (e.g. channel@example.com)"] = "Skriv din kanaladresse (for eksempel channel@exampel.com)";
App::$strings["Authenticate"] = "Autentiser";
App::$strings["Account '%s' deleted"] = "Kontoen '%s' slettet";
+App::$strings["%d invitation available"] = array(
+ 0 => "%d invitasjon tilgjengelig",
+ 1 => "%d invitasjoner tilgjengelig",
+);
+App::$strings["Advanced"] = "Avansert";
+App::$strings["Find Channels"] = "Finn kanaler";
+App::$strings["Enter name or interest"] = "Skriv navn eller interesse";
+App::$strings["Connect/Follow"] = "Forbindelse/Følg";
+App::$strings["Examples: Robert Morgenstein, Fishing"] = "Eksempler: Ola Nordmann, fisking";
+App::$strings["Find"] = "Finn";
+App::$strings["Channel Suggestions"] = "Kanalforslag";
+App::$strings["Random Profile"] = "Tilfeldig profil";
+App::$strings["Invite Friends"] = "Inviter venner";
+App::$strings["Advanced example: name=fred and country=iceland"] = "Avansert eksempel: navn=fred og land=island";
+App::$strings["Everything"] = "Alt";
+App::$strings["Categories"] = "Kategorier";
+App::$strings["Common Connections"] = "";
+App::$strings["View all %d common connections"] = "";
+App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn.";
+App::$strings["Trending"] = "";
+App::$strings["Tags"] = "Merkelapper";
+App::$strings["Keywords"] = "Nøkkelord";
+App::$strings["have"] = "har";
+App::$strings["has"] = "har";
+App::$strings["want"] = "ønsker";
+App::$strings["wants"] = "ønsker";
+App::$strings["like"] = "liker";
+App::$strings["likes"] = "liker";
+App::$strings["dislike"] = "misliker";
+App::$strings["dislikes"] = "misliker";
+App::$strings["New window"] = "Nytt vindu";
+App::$strings["Open the selected location in a different window or browser tab"] = "Åpne det valgte stedet i et annet vindu eller nettleser-fane";
App::$strings["Visible to your default audience"] = "Synlig for ditt standard publikum";
App::$strings["Profile-Based Privacy Groups"] = "";
App::$strings["Private Forum"] = "";
@@ -1588,218 +744,454 @@ App::$strings["Custom selection"] = "Tilpasset utvalg";
App::$strings["Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and limit the scope of \"Allow\"."] = "";
App::$strings["Allow"] = "";
App::$strings["Don't allow"] = "";
+App::$strings["Permissions"] = "Tillatelser";
App::$strings["Close"] = "Lukk";
App::$strings["Post permissions %s cannot be changed %s after a post is shared.</br />These permissions set who is allowed to view the post."] = "Tillatelsene til innlegget %s kan ikke endres %s etter at innlegget er delt.</br />Disse tillatelsene avgjør hvem som kan se innlegget.";
-App::$strings["View PDF"] = "";
-App::$strings[" by "] = " av ";
-App::$strings[" on "] = "På";
-App::$strings["Embedded content"] = "Innebygget innhold";
-App::$strings["Embedding disabled"] = "Innbygging avskrudd";
+App::$strings["INVALID EVENT DISMISSED!"] = "";
+App::$strings["Summary: "] = "Sammendrag";
+App::$strings["Date: "] = "Dato";
+App::$strings["Reason: "] = "";
+App::$strings["INVALID CARD DISMISSED!"] = "";
+App::$strings["Name: "] = "Navn";
+App::$strings["Select a profile to assign to this contact"] = "Velg en profil for denne kontakten";
+App::$strings["Frequently"] = "Ofte";
+App::$strings["Hourly"] = "Hver time";
+App::$strings["Twice daily"] = "To ganger daglig";
+App::$strings["Daily"] = "Daglig";
+App::$strings["Weekly"] = "Ukentlig";
+App::$strings["Monthly"] = "Månedlig";
+App::$strings["Currently Male"] = "For tiden mann";
+App::$strings["Currently Female"] = "For tiden kvinne";
+App::$strings["Mostly Male"] = "For det meste mann";
+App::$strings["Mostly Female"] = "For det meste kvinne";
+App::$strings["Transgender"] = "Transkjønnet";
+App::$strings["Intersex"] = "interkjønnet";
+App::$strings["Transsexual"] = "Transseksuell";
+App::$strings["Hermaphrodite"] = "Hermafroditt";
+App::$strings["Undecided"] = "Ubestemt";
+App::$strings["Males"] = "Menn";
+App::$strings["Females"] = "Kvinner";
+App::$strings["Gay"] = "Homo";
+App::$strings["Lesbian"] = "Lesbisk";
+App::$strings["No Preference"] = "Ingen preferanse";
+App::$strings["Bisexual"] = "Biseksuell";
+App::$strings["Autosexual"] = "Autoseksuell";
+App::$strings["Abstinent"] = "Avholdende";
+App::$strings["Virgin"] = "Jomfru";
+App::$strings["Deviant"] = "Avviker";
+App::$strings["Fetish"] = "Fetisj";
+App::$strings["Oodles"] = "Masse";
+App::$strings["Nonsexual"] = "Ikke-seksuell";
+App::$strings["Single"] = "Enslig";
+App::$strings["Lonely"] = "Ensom";
+App::$strings["Available"] = "Tilgjengelig";
+App::$strings["Unavailable"] = "Ikke tilgjengelig";
+App::$strings["Has crush"] = "Er forelsket";
+App::$strings["Infatuated"] = "Betatt";
+App::$strings["Dating"] = "Sammen med";
+App::$strings["Unfaithful"] = "Utro";
+App::$strings["Sex Addict"] = "Sexavhengig";
+App::$strings["Friends/Benefits"] = "Venner/Frynsegoder";
+App::$strings["Casual"] = "Tilfeldig";
+App::$strings["Engaged"] = "Forlovet";
+App::$strings["Married"] = "Gift";
+App::$strings["Imaginarily married"] = "Gift i fantasien";
+App::$strings["Partners"] = "Partnere";
+App::$strings["Cohabiting"] = "Samboer";
+App::$strings["Common law"] = "Samboer";
+App::$strings["Happy"] = "Lykkelig";
+App::$strings["Not looking"] = "Ikke på utkikk";
+App::$strings["Swinger"] = "Partnerbytte";
+App::$strings["Betrayed"] = "Bedratt";
+App::$strings["Separated"] = "Separert";
+App::$strings["Unstable"] = "Ustabilt";
+App::$strings["Divorced"] = "Skilt";
+App::$strings["Imaginarily divorced"] = "Skilt i fantasien";
+App::$strings["Widowed"] = "Enke";
+App::$strings["Uncertain"] = "Usikkert";
+App::$strings["It's complicated"] = "Det er komplisert";
+App::$strings["Don't care"] = "Bryr meg ikke";
+App::$strings["Ask me"] = "Spør meg";
App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s ønsker %2\$s velkommen";
-App::$strings["Commented Date"] = "Sist kommentert";
-App::$strings["Order by last commented date"] = "Sorter etter dato for siste kommentar";
-App::$strings["Posted Date"] = "Innleggsdato";
-App::$strings["Order by last posted date"] = "Sorter etter dato innlegg ble postet";
-App::$strings["Date Unthreaded"] = "Utrådet";
-App::$strings["Order unthreaded by date"] = "Sorter innlegg og kommentarer uavhengig av hverandre etter dato";
-App::$strings["Stream Order"] = "Sortering av innlegg";
-App::$strings["Add new guest"] = "";
-App::$strings["Guest access"] = "";
-App::$strings["Archives"] = "Arkiv";
-App::$strings["View Photo"] = "Vis foto";
-App::$strings["Edit Album"] = "Endre album";
-App::$strings["Upload"] = "Last opp";
-App::$strings["Tasks"] = "Oppgaver";
-App::$strings["Chat Members"] = "";
-App::$strings["Welcome"] = "Velkommen";
-App::$strings["No recent activities"] = "Nylig aktivitet";
-App::$strings["__ctx:noun__ new connection"] = array(
- 0 => "ny forbindelse",
- 1 => "nye forbindelser",
-);
-App::$strings["__ctx:noun__ notice"] = array(
- 0 => "varsel",
- 1 => "varsel",
-);
+App::$strings["Focus (Hubzilla default)"] = "Focus (Hubzilla standard)";
+App::$strings["Theme settings"] = "Instillinger for utseende";
+App::$strings["Dark style"] = "";
+App::$strings["Light style"] = "";
+App::$strings["Common settings"] = "";
+App::$strings["Primary theme color"] = "";
+App::$strings["Current color, leave empty for default"] = "La feltet stå tomt for å bruke standard bredde";
+App::$strings["Success theme color"] = "";
+App::$strings["Info theme color"] = "Lenkefarge når musepekeren er over";
+App::$strings["Warning theme color"] = "Lenkefarge når musepekeren er over";
+App::$strings["Danger theme color"] = "Lenkefarge når musepekeren er over";
+App::$strings["Default to dark mode"] = "Standard mappe for opplasting av bilder";
+App::$strings["Always use light icons for navbar"] = "";
+App::$strings["Enable this option if you use a dark navbar color in light mode"] = "";
+App::$strings["Narrow navbar"] = "Smal navigasjonslinje";
+App::$strings["Navigation bar background color"] = "Navigasjonslinjens bakgrunnsfarge";
+App::$strings["Dark navigation bar background color"] = "Navigasjonslinjens bakgrunnsfarge";
+App::$strings["Set the background color"] = "Angi bakgrunnsfargen";
+App::$strings["Set the dark background color"] = "Angi bakgrunnsfargen";
+App::$strings["Set the background image"] = "Angi bakgrunnsbilde";
+App::$strings["Set the dark background image"] = "Angi bakgrunnsbilde";
+App::$strings["Set font-size for the entire application"] = "Angi skriftstørrelsen for hele programmet";
+App::$strings["Examples: 1rem, 100%, 16px"] = "For eksempel: 1rem, 100%, 16px";
+App::$strings["Set radius of corners in rem"] = "Angi hjørneradius";
+App::$strings["Leave empty for default radius"] = "La feltet stå tomt for å bruke standard bredde";
+App::$strings["Set maximum width of content region in rem"] = "Set maksbredde for hovedregionen i rem";
+App::$strings["Leave empty for default width"] = "La feltet stå tomt for å bruke standard bredde";
+App::$strings["Set size of conversation author photo"] = "Angi størrelsen for samtalens forfatterbilde";
+App::$strings["Leave empty for default size"] = "La feltet stå tomt for å bruke standard bredde";
+App::$strings["Set size of followup author photos"] = "Angi størrelsen på forfatterbilder ved oppfølging";
+App::$strings["Show advanced settings"] = "Vis avanserte innstillinger";
+App::$strings["Create an account to access services and applications"] = "";
+App::$strings["Email or nickname"] = "Epost eller brukernavn";
+App::$strings["Nickname"] = "Kallenavn";
+App::$strings["Password"] = "Passord";
+App::$strings["Remember me"] = "Husk meg";
+App::$strings["Forgot your password?"] = "Glemt passordet ditt?";
+App::$strings["Password Reset"] = "Tilbakestill passord";
+App::$strings["[\$Projectname] Website SSL error for %s"] = "";
+App::$strings["Website SSL certificate is not valid. Please correct."] = "Nettstedets SSL-sertifikat er ikke gyldig. Vennligst fiks dette.";
+App::$strings["[\$Projectname] Cron tasks not running on %s"] = "";
+App::$strings["Cron/Scheduled tasks not running."] = "Cron/planlagte oppgaver kjører ikke.";
+App::$strings["0. Beginner/Basic"] = "";
+App::$strings["1. Novice - not skilled but willing to learn"] = "";
+App::$strings["2. Intermediate - somewhat comfortable"] = "";
+App::$strings["3. Advanced - very comfortable"] = "";
+App::$strings["4. Expert - I can write computer code"] = "";
+App::$strings["5. Wizard - I probably know more than you do"] = "";
+App::$strings["Affinity Tool"] = "Nærhetsverktøy";
+App::$strings["Articles"] = "";
+App::$strings["Cards"] = "";
+App::$strings["Site Admin"] = "Nettstedsadministrator";
+App::$strings["Report Bug"] = "";
+App::$strings["Content Filter"] = "";
+App::$strings["Content Import"] = "";
+App::$strings["Remote Diagnostics"] = "";
+App::$strings["Suggest Channels"] = "Foreslå kanaler";
+App::$strings["Channel Manager"] = "Kanalstyring";
+App::$strings["Stream"] = "Tidslinje";
+App::$strings["Wiki"] = "";
+App::$strings["Mail"] = "Melding";
+App::$strings["Chat"] = "Chat";
+App::$strings["Probe"] = "Undersøk";
+App::$strings["Suggest"] = "Forreslå";
+App::$strings["Random Channel"] = "Tilfeldig kanal";
+App::$strings["Invite"] = "Inviter";
+App::$strings["Features"] = "Funksjoner";
+App::$strings["Language"] = "Språk";
+App::$strings["Post"] = "Innlegg";
+App::$strings["Notifications"] = "Varsler";
+App::$strings["Order Apps"] = "";
+App::$strings["CardDAV"] = "";
+App::$strings["Channel Sources"] = "Kanalkilder";
+App::$strings["Guest Access"] = "";
+App::$strings["Notes"] = "Merknader";
+App::$strings["OAuth Apps Manager"] = "";
+App::$strings["OAuth2 Apps Manager"] = "";
+App::$strings["PDL Editor"] = "";
+App::$strings["Contact Roles"] = "";
+App::$strings["Public Stream"] = "";
+App::$strings["My Chatrooms"] = "";
+App::$strings["Channel Export"] = "";
+App::$strings["Update"] = "Oppdater";
+App::$strings["Install"] = "Installer";
+App::$strings["Purchase"] = "Kjøp";
+App::$strings["Undelete"] = "";
+App::$strings["Add to app-tray"] = "Legg til i meny";
+App::$strings["Remove from app-tray"] = "Fjern fra meny";
+App::$strings["Pin to navbar"] = "Fest til navigasjonslinjen";
+App::$strings["Unpin from navbar"] = "Fjern fra navigasjonslinjen";
+App::$strings["Directory Options"] = "Kataloginnstillinger";
+App::$strings["Safe Mode"] = "Trygg modus";
+App::$strings["Public Forums Only"] = "Bare offentlige forum";
+App::$strings["This Website Only"] = "Kun dette nettstedet";
+App::$strings["A deleted privacy group with this name was revived. Existing item permissions <strong>may</strong> apply to this privacy group and any future members. If this is not what you intended, please create another privacy group with a different name."] = "";
+App::$strings["Select a privacy group"] = "";
+App::$strings["Restricted message"] = "Begrenset melding";
+App::$strings["Direct message"] = "Direktemelding";
+App::$strings["Public Policy"] = "";
+App::$strings["Privacy conflict. Discretion advised."] = "";
+App::$strings["Admin Delete"] = "";
+App::$strings["Save to Folder"] = "Lagre i mappe";
App::$strings["I will attend"] = "Jeg vil delta";
App::$strings["I will not attend"] = "Jeg deltar ikke";
App::$strings["I might attend"] = "Jeg vil kanskje delta";
-App::$strings["I agree"] = "Jeg er enig";
-App::$strings["I disagree"] = "Jeg er uenig";
-App::$strings["I abstain"] = "Jeg avstår";
-App::$strings["Share This"] = "Del dette";
+App::$strings["I like this (toggle)"] = "Jeg liker dette (skru av og på)";
+App::$strings["I don't like this (toggle)"] = "Jeg liker ikke dette (skru av og på)";
+App::$strings["Reply to this comment"] = "Slett denne menyen";
+App::$strings["reply"] = "";
+App::$strings["Reply to"] = "";
App::$strings["share"] = "del";
-App::$strings["View %s's profile - %s"] = "Vis %s sin profil - %s";
+App::$strings["Repeat"] = "";
+App::$strings["repeat"] = "";
+App::$strings["Delivery Report"] = "Leveringsrapport";
+App::$strings["%d comment"] = array(
+ 0 => "%d kommentar",
+ 1 => "%d kommentarer",
+);
+App::$strings["%d unseen"] = "%d uleste";
+App::$strings["Forum"] = "";
+App::$strings["to"] = "til";
App::$strings["via"] = "via";
+App::$strings["Wall-to-Wall"] = "Vegg-til-vegg";
+App::$strings["via Wall-To-Wall:"] = "via vegg-til-vegg:";
+App::$strings["Attend"] = "";
App::$strings["Attendance Options"] = "";
App::$strings["Voting Options"] = "";
+App::$strings["Go to previous comment"] = "";
App::$strings["Pinned post"] = "";
-App::$strings["Don't show"] = "Ikke vis";
-App::$strings["__ctx:widget__ Activity"] = "aktivitet";
-App::$strings["Select Channel"] = "";
-App::$strings["Read-write"] = "";
-App::$strings["Read-only"] = "";
-App::$strings["Channel Calendar"] = "";
-App::$strings["CalDAV Calendars"] = "";
-App::$strings["Shared CalDAV Calendars"] = "";
-App::$strings["Share this calendar"] = "";
-App::$strings["Calendar name and color"] = "";
-App::$strings["Create new CalDAV calendar"] = "";
+App::$strings["Save Bookmarks"] = "Lagre bokmerker";
+App::$strings["Add to Calendar"] = "Legg til i kalender";
+App::$strings["Mark all comments seen"] = "Merk alle hendelser som sett";
+App::$strings["Add yours"] = "Legg til bilder";
+App::$strings["Remove yours"] = "Fjern begrep";
+App::$strings["This is you"] = "Dette er deg";
+App::$strings["Image"] = "Bilde";
+App::$strings["Insert Link"] = "Sett inn lenke";
+App::$strings["Video"] = "Video";
+App::$strings["Your full name (required)"] = "";
+App::$strings["Your email address (required)"] = "";
+App::$strings["Your website URL (optional)"] = "";
+App::$strings["Likes %1\$s's %2\$s"] = "";
+App::$strings["Doesn't like %1\$s's %2\$s"] = "";
+App::$strings["Will attend %s's event"] = "";
+App::$strings["Will not attend %s's event"] = "";
+App::$strings["May attend %s's event"] = "";
+App::$strings["May not attend %s's event"] = "";
+App::$strings["Missing room name"] = "Mangler romnavn";
+App::$strings["Duplicate room name"] = "Duplikat romnavn";
+App::$strings["Invalid room specifier."] = "Ugyldig rom-spesifisering.";
+App::$strings["Room not found."] = "Rommet ble ikke funnet.";
+App::$strings["Room is full"] = "Rommet er fullt";
+App::$strings["\$Projectname Notification"] = "\$Projectname varsling";
+App::$strings["\$projectname"] = "\$projectname";
+App::$strings["Thank You,"] = "Tusen takk,";
+App::$strings["%s Administrator"] = "%s administrator";
+App::$strings["This email was sent by %1\$s at %2\$s."] = "";
+App::$strings["\$Projectname"] = "\$Projectname";
+App::$strings["To stop receiving these messages, please adjust your Notification Settings at %s"] = "";
+App::$strings["To stop receiving these messages, please adjust your %s."] = "";
+App::$strings["Notification Settings"] = "Varslingsinnstillinger";
+App::$strings["%s <!item_type!>"] = "%s <!item_type!>";
+App::$strings["[\$Projectname:Notify] New direct message received at %s"] = "[\$Projectname:Notify] Ny direktemelding mottatt kl. %s";
+App::$strings["%1\$s sent you a new direct message at %2\$s"] = "%1\$s sendte deg en ny direktemelding kl. %2\$s";
+App::$strings["%1\$s sent you %2\$s."] = "%1\$s sendte deg %2\$s.";
+App::$strings["a direct message"] = "en direktemelding";
+App::$strings["Please visit %s to view and/or reply to your direct messages."] = "Gå til %s for å vise og/eller svare på dine direktemeldinger.";
+App::$strings["requested to comment on"] = "";
+App::$strings["commented on"] = "";
+App::$strings["requested to like"] = "Dato for forespørsel";
+App::$strings["liked"] = "";
+App::$strings["requested to dislike"] = "";
+App::$strings["disliked"] = "";
+App::$strings["repeated"] = "Laget";
+App::$strings["voted on"] = "";
+App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = "";
+App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "";
+App::$strings["%1\$s %2\$s [zrl=%3\$s]your %4\$s[/zrl]"] = "";
+App::$strings["[\$Projectname:Notify] Moderated Comment to conversation #%1\$d by %2\$s"] = "";
+App::$strings["[\$Projectname:Notify] Comment to conversation #%1\$d by %2\$s"] = "";
+App::$strings["%1\$s commented on an item/conversation you have been following"] = "";
+App::$strings["Please visit %s to view and/or reply to the conversation."] = "Vennligst besøk %s for å se og/eller svare i samtalen.";
+App::$strings["Please visit %s to approve or reject this comment."] = "";
+App::$strings["[\$Projectname:Notify] Like received to conversation #%1\$d by %2\$s"] = "";
+App::$strings["%1\$s liked an item/conversation you created"] = "";
+App::$strings["[\$Projectname:Notify] %s posted to your profile wall"] = "";
+App::$strings["%1\$s posted to your profile wall at %2\$s"] = "";
+App::$strings["%1\$s posted to [zrl=%2\$s]your wall[/zrl]"] = "";
+App::$strings["[\$Projectname:Notify] %s tagged you"] = "";
+App::$strings["%1\$s tagged you at %2\$s"] = "";
+App::$strings["%1\$s [zrl=%2\$s]tagged you[/zrl]."] = "";
+App::$strings["[\$Projectname:Notify] %1\$s poked you"] = "";
+App::$strings["%1\$s poked you at %2\$s"] = "";
+App::$strings["%1\$s [zrl=%2\$s]poked you[/zrl]."] = "";
+App::$strings["[\$Projectname:Notify] %s tagged your post"] = "";
+App::$strings["%1\$s tagged your post at %2\$s"] = "";
+App::$strings["%1\$s tagged [zrl=%2\$s]your post[/zrl]"] = "";
+App::$strings["[\$Projectname:Notify] Introduction received"] = "";
+App::$strings["You've received an new connection request from '%1\$s' at %2\$s"] = "";
+App::$strings["You've received [zrl=%1\$s]a new connection request[/zrl] from %2\$s."] = "";
+App::$strings["You may visit their profile at %s"] = "Du kan besøke profilen deres på %s";
+App::$strings["Please visit %s to approve or reject the connection request."] = "Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse.";
+App::$strings["[\$Projectname:Notify] Friend suggestion received"] = "";
+App::$strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "";
+App::$strings["You've received [zrl=%1\$s]a friend suggestion[/zrl] for %2\$s from %3\$s."] = "";
+App::$strings["Name:"] = "Navn:";
+App::$strings["Photo:"] = "Bilde:";
+App::$strings["Please visit %s to approve or reject the suggestion."] = "Vennligst besøk %s for å godkjenne eller avslå dette forslaget.";
+App::$strings["[\$Projectname:Notify]"] = "";
+App::$strings["created a new poll"] = "opprettet spørreskjema";
+App::$strings["created a new post"] = "laget et nytt innlegg";
+App::$strings["voted on %s's poll"] = "stemte på %s sitt spørreskjema";
+App::$strings["commented on %s's post"] = "kommenterte på %s sitt innlegg";
+App::$strings["shared a file with you"] = "";
+App::$strings["edited a post dated %s"] = "";
+App::$strings["edited a comment dated %s"] = "";
+App::$strings["added your channel"] = "la til din kanal";
+App::$strings["sent you a direct message"] = "sendte deg en direktemelding";
+App::$strings["g A l F d"] = "g A l F d";
+App::$strings["[today]"] = "[idag]";
+App::$strings["created an event"] = "";
+App::$strings["status verified"] = "";
+App::$strings["Source code of failed update: "] = "";
+App::$strings["Update Error at %s"] = "Oppdateringsfeil ved %s";
+App::$strings["Update %s failed. See error logs."] = "Oppdatering %s mislyktes. Se feilloggen.";
+App::$strings["Channel is blocked on this site."] = "Kanalen er blokkert på dette nettstedet.";
+App::$strings["Channel location missing."] = "Kanalplassering mangler.";
+App::$strings["Remote channel or protocol unavailable."] = "";
+App::$strings["Channel discovery failed."] = "Kanaloppdagelse mislyktes.";
+App::$strings["Protocol disabled."] = "Protokollen er avskrudd.";
+App::$strings["Cannot connect to yourself."] = "Kan ikke lage forbindelse med deg selv.";
+App::$strings["error saving data"] = "";
+App::$strings["Unable to verify channel signature"] = "Ikke i stand til å sjekke kanalsignaturen";
+App::$strings["Public"] = "Offentlig";
+App::$strings["Anybody in the \$Projectname network"] = "";
+App::$strings["Any account on %s"] = "";
+App::$strings["Any of my connections"] = "";
+App::$strings["Only connections I specifically allow"] = "";
+App::$strings["Anybody authenticated (could include visitors from other networks)"] = "";
+App::$strings["Any connections including those who haven't yet been approved"] = "";
+App::$strings["This is your default setting for the audience of your normal stream, and posts."] = "";
+App::$strings["This is your default setting for who can view your default channel profile"] = "";
+App::$strings["This is your default setting for who can view your connections"] = "";
+App::$strings["This is your default setting for who can view your file storage and photos"] = "";
+App::$strings["This is your default setting for the audience of your webpages"] = "";
+App::$strings["Unable to verify site signature for %s"] = "Ikke i stand til å bekrefte signaturen til %s";
+App::$strings["__ctx:permcat__ Default"] = "Standard";
+App::$strings["Social Networking"] = "Sosialt nettverk";
+App::$strings["Social - Federation"] = "";
+App::$strings["Social - Mostly Public"] = "Sosial - ganske offentlig";
+App::$strings["Social - Restricted"] = "Sosial - begrenset";
+App::$strings["Social - Private"] = "Sosial - privat";
+App::$strings["Community Forum"] = "Forum for fellesskap";
+App::$strings["Forum - Mostly Public"] = "Forum - ganske offentlig";
+App::$strings["Forum - Restricted"] = "Forum - begrenset";
+App::$strings["Forum - Private"] = "Forum - privat";
+App::$strings["Feed Republish"] = "Republisering av strømmet innhold";
+App::$strings["Feed - Mostly Public"] = "Strøm - ganske offentlig";
+App::$strings["Feed - Restricted"] = "Strøm - begrenset";
+App::$strings["Special Purpose"] = "Spesiell bruk";
+App::$strings["Special - Celebrity/Soapbox"] = "Spesiell - kjendis/talerstol";
+App::$strings["Special - Group Repository"] = "Spesiell - gruppelager";
+App::$strings["Custom/Expert Mode"] = "Tilpasset/Ekspertmodus";
+App::$strings["Personal"] = "Personlig";
+App::$strings["Community forum"] = "Forum for fellesskap";
+App::$strings["Custom"] = "";
+App::$strings["Can view my channel stream and posts"] = "";
+App::$strings["Can send me their channel stream and posts"] = "Kan sende meg deres kanalstrøm og innlegg";
+App::$strings["Can view my default channel profile"] = "Kan se min standard kanalprofil";
+App::$strings["Can view my connections"] = "Kan se mine forbindelser";
+App::$strings["Can view my file storage and photos"] = "Kan se mine filer og bilder";
+App::$strings["Can upload/modify my file storage and photos"] = "";
+App::$strings["Can view my channel webpages"] = "";
+App::$strings["Can view my wiki pages"] = "";
+App::$strings["Can create/edit my channel webpages"] = "";
+App::$strings["Can write to my wiki pages"] = "";
+App::$strings["Can post on my channel (wall) page"] = "";
+App::$strings["Can comment on or like my posts"] = "Kan kommentere på eller like mine innlegg";
+App::$strings["Can send me direct messages"] = "Kan sende meg direktemeldinger";
+App::$strings["Can like/dislike profiles and profile things"] = "";
+App::$strings["Can chat with me"] = "";
+App::$strings["Can source/mirror my public posts in derived channels"] = "";
+App::$strings["Can administer my channel"] = "";
+App::$strings["Page not found."] = "Siden ikke funnet.";
+App::$strings["Change filename to"] = "";
+App::$strings["Select a target location"] = "";
+App::$strings["Copy to target location"] = "";
+App::$strings["Set permissions for all files and sub folders"] = "";
+App::$strings["Notify your contacts about this file"] = "Varsle dine kontakter om denne filen";
+App::$strings["File category"] = "";
+App::$strings["Total"] = "Totalt";
+App::$strings["Shared"] = "Delt";
App::$strings["Create"] = "Lag";
-App::$strings["Calendar Name"] = "";
-App::$strings["Calendar Tools"] = "";
-App::$strings["Channel Calendars"] = "";
-App::$strings["Import calendar"] = "";
-App::$strings["Select a calendar to import to"] = "";
-App::$strings["Addressbooks"] = "";
-App::$strings["Addressbook name"] = "";
-App::$strings["Create new addressbook"] = "";
-App::$strings["Addressbook Name"] = "";
-App::$strings["Addressbook Tools"] = "";
-App::$strings["Import addressbook"] = "";
-App::$strings["Select an addressbook to import to"] = "";
-App::$strings["Remove term"] = "Fjern begrep";
-App::$strings["Suggested Chatrooms"] = "Foreslåtte chatrom";
-App::$strings["Account settings"] = "Kontoinnstillinger";
-App::$strings["Channel settings"] = "Kanalinnstillinger";
-App::$strings["Privacy settings"] = "Personverninnstillinger";
-App::$strings["Display settings"] = "Visningsinnstillinger";
-App::$strings["Manage locations"] = "";
-App::$strings["Overview"] = "";
-App::$strings["Ignore/Hide"] = "Ignorer/Skjul";
-App::$strings["Suggestions"] = "Forslag";
-App::$strings["See more..."] = "Se mer...";
-App::$strings["Bookmarked Chatrooms"] = "Bokmerkede chatrom";
-App::$strings["App Categories"] = "Appkategorier";
-App::$strings["Toggle post editor"] = "Vis redigering av innlegg";
-App::$strings["Toggle personal notes"] = "";
-App::$strings["Channel activities"] = "";
-App::$strings["Add new role"] = "";
-App::$strings["Contact roles"] = "";
-App::$strings["Role members"] = "";
-App::$strings["photo/image"] = "foto/bilde";
-App::$strings["Site"] = "Nettsted";
-App::$strings["Accounts"] = "Kontoer";
-App::$strings["Member registrations waiting for confirmation"] = "";
-App::$strings["Security"] = "Sikkerhet";
-App::$strings["Features"] = "Funksjoner";
-App::$strings["Addons"] = "Tillegg";
-App::$strings["Themes"] = "Utseende";
-App::$strings["Inspect queue"] = "Inspiser kø";
-App::$strings["Queueworker"] = "";
-App::$strings["Profile Fields"] = "Profilfelter";
-App::$strings["DB updates"] = "Databaseoppdateringer";
-App::$strings["Logs"] = "Logger";
-App::$strings["Addon Features"] = "";
-App::$strings["Direct Messages"] = "Direktemeldinger";
-App::$strings["Show direct (private) messages"] = "Vis direktemeldinger (private meldinger)";
-App::$strings["Events"] = "Hendelser";
-App::$strings["Show posts that include events"] = "";
-App::$strings["Polls"] = "Spørreskjema";
-App::$strings["Show posts that include polls"] = "Vis innlegg som inneholder spørreskjema";
-App::$strings["Show posts related to the %s privacy group"] = "";
-App::$strings["Show my privacy groups"] = "";
-App::$strings["Show posts to this forum"] = "";
-App::$strings["Show forums"] = "";
-App::$strings["Starred Posts"] = "";
-App::$strings["Show posts that I have starred"] = "";
-App::$strings["Personal Posts"] = "";
-App::$strings["Show posts that mention or involve me"] = "";
-App::$strings["Show posts that I have filed to %s"] = "";
-App::$strings["Show filed post categories"] = "";
-App::$strings["Panel search"] = "";
-App::$strings["Filter by name"] = "Filtrer etter navn";
-App::$strings["Remove active filter"] = "";
-App::$strings["Stream Filters"] = "Filtere for tidslinjen";
-App::$strings["App Collections"] = "Appsamlinger";
-App::$strings["Installed apps"] = "Installerte apper";
-App::$strings["Available Apps"] = "Tilgjengelige apper";
-App::$strings["Add new group"] = "";
-App::$strings["Privacy groups"] = "Personverngrupper";
-App::$strings["Rating Tools"] = "Vurderingsverktøy";
-App::$strings["Rate Me"] = "Vurder meg";
-App::$strings["View Ratings"] = "Vis vurderinger";
-App::$strings["Click to show more"] = "";
-App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Du har %1$.0f av %2$.0f tillate forbindelser.";
-App::$strings["Add New Connection"] = "Legg til ny forbindelse";
-App::$strings["Enter channel address"] = "Skriv kanaladressen";
-App::$strings["Examples: bob@example.com, https://example.com/barbara"] = "Eksempel: ola@eksempel.no, https://eksempel.no/kari";
-App::$strings["Public and restricted messages"] = "";
-App::$strings["Direct messages"] = "Direktemeldinger";
-App::$strings["Starred messages"] = "";
-App::$strings["Notices"] = "Varsel";
-App::$strings["No messages"] = "Ingen meldinger";
-App::$strings["Unseen"] = "";
-App::$strings["Filter by name or address"] = "Filtrer etter navn eller adresse";
-App::$strings["Profile Creation"] = "Oppretting av profil";
-App::$strings["Upload profile photo"] = "Last opp profilbilde";
-App::$strings["Upload cover photo"] = "Last opp bannerbilde";
-App::$strings["Find and Connect with others"] = "Finn andre";
-App::$strings["View the directory"] = "Se i katalogen";
-App::$strings["View friend suggestions"] = "Vis venneforslag";
-App::$strings["Manage your connections"] = "Behandle forbindelser";
-App::$strings["Communicate"] = "Kommuniser";
-App::$strings["View your channel homepage"] = "Vis kanalens hjemmeside";
-App::$strings["View your network stream"] = "Vis nettverksstrømmen";
-App::$strings["Documentation"] = "Dokumentasjon";
-App::$strings["Missing Features?"] = "Noe som mangler?";
-App::$strings["Pin apps to navigation bar"] = "Fest apper til navigasjonslinjen";
-App::$strings["Install more apps"] = "Legg til flere apper";
-App::$strings["View public stream"] = "";
-App::$strings["New Member Links"] = "Lenker for nye medlemmer";
-App::$strings["Read mode"] = "";
-App::$strings["Edit mode"] = "";
-App::$strings["Editing"] = "";
-App::$strings["Saving"] = "";
-App::$strings["Saved"] = "";
-App::$strings["Me"] = "Meg";
-App::$strings["Family"] = "Familie";
-App::$strings["Acquaintances"] = "Bekjente";
-App::$strings["All"] = "Alle";
-App::$strings["Refresh"] = "Forny";
-App::$strings["New network activity notifications"] = "";
-App::$strings["Network stream"] = "";
-App::$strings["Mark all notifications read"] = "";
-App::$strings["Show new posts only"] = "";
-App::$strings["New home activity notifications"] = "";
-App::$strings["Home stream"] = "";
-App::$strings["Mark all notifications seen"] = "";
-App::$strings["New direct messages notifications"] = "Varsel om nye direktemeldinger";
-App::$strings["Direct messages stream"] = "Strøm for direktemeldinger";
-App::$strings["New events notifications"] = "";
-App::$strings["View events"] = "";
-App::$strings["Mark all events seen"] = "Merk alle hendelser som sett";
-App::$strings["New Connections"] = "Nye forbindelser";
-App::$strings["New connections notifications"] = "";
-App::$strings["View all connections"] = "";
-App::$strings["New files notifications"] = "";
-App::$strings["View all notices"] = "";
-App::$strings["Mark all notices seen"] = "";
-App::$strings["Registrations"] = "";
-App::$strings["New registrations notifications"] = "";
-App::$strings["Public Stream"] = "";
-App::$strings["New public stream notifications"] = "";
-App::$strings["Public stream"] = "";
-App::$strings["Sorry, you have got no notifications at the moment"] = "";
-App::$strings["This channel is limited to %d tokens"] = "";
-App::$strings["Name and Password are required."] = "";
-App::$strings["Token saved."] = "";
-App::$strings["Use this form to create temporary access identifiers to share things with non-members. These identities may be used in privacy groups and visitors may login using these credentials to access private content."] = "";
-App::$strings["Please select a role for this guest!"] = "";
-App::$strings["Select a role for this guest"] = "";
-App::$strings["Guest Access"] = "";
-App::$strings["Login Name"] = "";
-App::$strings["Login Password"] = "";
-App::$strings["Expires (yyyy-mm-dd)"] = "";
-App::$strings["File not found."] = "Filen ble ikke funnet.";
-App::$strings["Can not copy folder into itself."] = "";
-App::$strings["Can not move folder \"%s\" into itself."] = "";
-App::$strings["No such group"] = "Gruppen finnes ikke";
-App::$strings["No such channel"] = "Ingen slik kanal";
+App::$strings["Add Files"] = "";
+App::$strings["Name"] = "Navn";
+App::$strings["Type"] = "Type";
+App::$strings["Last Modified"] = "Sist endret";
+App::$strings["parent"] = "opp et nivå";
+App::$strings["Copy/paste this code to attach file to a post"] = "Kopier og lim inn denne koden for å legge til filen i et innlegg";
+App::$strings["Copy/paste this URL to link file from a web page"] = "Kopier og lim inn denne URL-en for å lenke til filen fra en webside";
+App::$strings["Select All"] = "velg alle";
+App::$strings["Bulk Actions"] = "";
+App::$strings["Adjust Permissions"] = "";
+App::$strings["Move or Copy"] = "";
+App::$strings["Download"] = "";
+App::$strings["Info"] = "";
+App::$strings["Rename"] = "";
+App::$strings["Attachment BBcode"] = "";
+App::$strings["Embed BBcode"] = "";
+App::$strings["Link BBcode"] = "";
+App::$strings["You are using %1\$s of your available file storage."] = "Du bruker %1\$s av din tilgjengelige lagringsplass.";
+App::$strings["You are using %1\$s of %2\$s available file storage. (%3\$s&#37;)"] = "Du bruker %1\$s av %2\$s tilgjengelig lagringsplass (%3\$s&#37;)";
+App::$strings["WARNING:"] = "ADVARSEL:";
+App::$strings["Create new folder"] = "Lag ny mappe";
+App::$strings["Upload file"] = "Last opp fil";
+App::$strings["Upload"] = "Last opp";
+App::$strings["Drop files here to immediately upload"] = "";
+App::$strings["Show in your contacts shared folder"] = "";
+App::$strings["You can select files via the upload button or drop them right here or into an existing folder."] = "";
+App::$strings["Unable to update menu."] = "Ikke i stand til å oppdatere meny.";
+App::$strings["Unable to create menu."] = "Ikke i stand til å lage meny.";
+App::$strings["Menu Name"] = "Menynavn";
+App::$strings["Unique name (not visible on webpage) - required"] = "Unikt navn (ikke synlig på websiden) - påkrevet";
+App::$strings["Menu Title"] = "Menytittel";
+App::$strings["Visible on webpage - leave empty for no title"] = "Synlig på websiden - la stå tomt for ingen tittel";
+App::$strings["Allow Bookmarks"] = "Tillat bokmerker";
+App::$strings["Menu may be used to store saved bookmarks"] = "Menyen kan brukes til å lagre lagrede bokmerker";
+App::$strings["Submit and proceed"] = "Send inn og fortsett";
+App::$strings["Drop"] = "Slett";
+App::$strings["Created"] = "Laget";
+App::$strings["Edited"] = "Endret";
+App::$strings["New"] = "Nye";
+App::$strings["Bookmarks allowed"] = "Bokmerker tillatt";
+App::$strings["Delete this menu"] = "Slett denne menyen";
+App::$strings["Edit menu contents"] = "Endre menyinnholdet";
+App::$strings["Edit this menu"] = "Endre denne menyen";
+App::$strings["Menu could not be deleted."] = "Menyen kunne ikke bli slettet.";
+App::$strings["Menu not found."] = "Menyen ble ikke funnet.";
+App::$strings["Edit Menu"] = "Endre meny";
+App::$strings["Add or remove entries to this menu"] = "Legg til eller fjern punkter i denne menyen";
+App::$strings["Menu name"] = "Menynavn";
+App::$strings["Must be unique, only seen by you"] = "Må være unik, ses bare av deg";
+App::$strings["Menu title"] = "Menytittel";
+App::$strings["Menu title as seen by others"] = "Menytittelen andre ser";
+App::$strings["Allow bookmarks"] = "Tillat bokmerker";
+App::$strings["Not found."] = "Ikke funnet.";
+App::$strings["Documentation Search"] = "Søk i dokumentasjon";
+App::$strings["Not Found"] = "Ikke funnet";
+App::$strings["\$Projectname Documentation"] = "\$Projectname dokumentasjon";
+App::$strings["Contents"] = "";
+App::$strings["Members"] = "Medlemmer";
+App::$strings["Administrators"] = "";
+App::$strings["Developers"] = "";
+App::$strings["Tutorials"] = "";
+App::$strings["Help:"] = "Hjelp:";
+App::$strings["Item not found"] = "Elementet ble ikke funnet.";
+App::$strings["Block Name"] = "Byggeklossens navn";
+App::$strings["Edit Block"] = "Endre byggekloss";
+App::$strings["Posts and comments"] = "Innlegg og kommentarer";
+App::$strings["Only posts"] = "Kun innlegg";
+App::$strings["Malformed message id."] = "";
+App::$strings["Insufficient permissions. Request redirected to profile page."] = "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden.";
App::$strings["Search Results For:"] = "Søkeresultat for:";
App::$strings["Reset form"] = "Nullstill skjema";
-App::$strings["Privacy group is empty"] = "Personverngruppen er tom";
-App::$strings["Privacy group: "] = "Personverngruppe: ";
+App::$strings["You must enable javascript for your browser to be able to view this content."] = "";
+App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = "Du har laget %1$.0f av %2$.0f tillatte kanaler.";
+App::$strings["Your real name is recommended."] = "";
+App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Eksempel: \"Ola Nordmann\", \"Lisa og hestene hennes\", \"Fotball\", \"Sykkelgruppa\"";
+App::$strings["This will be used to create a unique network address (like an email address)."] = "";
+App::$strings["Allowed characters are a-z 0-9, - and _"] = "";
+App::$strings["Channel name"] = "Kanalnavn";
+App::$strings["Choose a short nickname"] = "Velg et kort kallenavn";
+App::$strings["Channel role"] = "Kanalrolle";
+App::$strings["Create a Channel"] = "";
+App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "";
+App::$strings["or <a href=\"import\">import an existing channel</a> from another location."] = "eller <a href=\"import\">importer en eksisterende kanal</a> fra et annet sted.";
+App::$strings["Validate"] = "";
+App::$strings["Unable to find your hub."] = "Ikke i stand til å finne hubben din.";
+App::$strings["Post successful."] = "Innlegg vellykket.";
App::$strings["Not a zip file or zip file corrupted."] = "";
App::$strings["Import Items"] = "Importer elementer";
App::$strings["Use this form to import existing posts and content from an export file."] = "Bruk dette skjemaet for å importere eksisterende innlegg og innhold fra en eksportfil.";
@@ -1812,66 +1204,14 @@ App::$strings["Channel calendar import 2/2 completed"] = "";
App::$strings["Menu import completed"] = "";
App::$strings["Wiki import completed"] = "";
App::$strings["Webpages import completed"] = "";
-App::$strings["Nothing to import."] = "Ingenting å importere.";
-App::$strings["Unable to download data from old server"] = "Ikke i stand til å laste ned data fra gammel tjener";
-App::$strings["Your service plan only allows %d channels."] = "Din tjenesteplan tillater bare %d kanaler.";
-App::$strings["No channel. Import failed."] = "Ingen kanal. Import mislyktes.";
-App::$strings["Automatic content and files import was not possible due to API version incompatiblity. Please import content and files manually!"] = "";
-App::$strings["You must be logged in to use this feature."] = "Du må være innlogget for å bruke denne funksjonen.";
-App::$strings["Channel Import"] = "";
-App::$strings["Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file."] = "Bruk dette skjemaet for å importere en eksisterende kanal fra en annen tjener/hub. Du kan hente inn kanalidentiteten fra den gamle tjeneren/huben via nettverket eller ved å bruke en eksportfil.";
-App::$strings["Or provide the old server/hub details"] = "Eller oppgi detaljene fra den gamle tjeneren/hub-en";
-App::$strings["Your old identity address (xyz@example.com)"] = "Din gamle identitetsadresse (xyz@example.com)";
-App::$strings["Your old login email address"] = "Din gamle innloggings e-postadresse";
-App::$strings["Your old login password"] = "Ditt gamle innloggingspassord";
-App::$strings["Import your items and files (limited by available memory)"] = "";
-App::$strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = "Enten du tar det ene eller det andre valget, vennligst angi om du vil at denne hubben skal være din nye primære adresse, eller om din gamle plassering skal fortsette å ha denne rollen. Du kan lage innlegg fra den ene eller den andre plasseringen, men bare en av dem kan markeres som den primære plasseringen for filer, bilder og media.";
-App::$strings["Make this hub my primary location"] = "Gjør dette nettstedet til min primære plassering";
-App::$strings["Move this channel (disable all previous locations)"] = "";
-App::$strings["Use this channel nickname instead of the one provided"] = "";
-App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "";
-App::$strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Denne prosessen kan ta flere minutter å fullføre. Vennligst send inn dette skjemaet bare en gang og la siden være åpen inntil den er ferdig.";
-App::$strings["You must be logged in to see this page."] = "Du må være innloegget for å se denne siden.";
-App::$strings["Update to Hubzilla 5.0 step 2"] = "";
-App::$strings["To complete the update please run"] = "";
-App::$strings["php util/z6convert.php"] = "";
-App::$strings["from the terminal."] = "";
-App::$strings["Email address required"] = "";
-App::$strings["No password provided"] = "";
-App::$strings["Terms of Service not accepted"] = "";
-App::$strings["Invitation code succesfully applied"] = "";
-App::$strings["Invitation not in time or too late"] = "";
-App::$strings["Invitation email failed"] = "";
-App::$strings["Invitation code failed"] = "";
-App::$strings["Invitations are not available"] = "";
-App::$strings["Registration on this hub is by invitation only"] = "";
-App::$strings["New register request"] = "";
-App::$strings["Error creating dId A"] = "";
-App::$strings["Registration on this hub is disabled."] = "Registrering ved dette nettstedet er skrudd av.";
-App::$strings["Registration on this hub is by approval only."] = "Registrering ved dette nettstedet skjer på godkjenning.";
-App::$strings["Register at another affiliated hub in case when prefered"] = "";
-App::$strings["Registration on this hub is by invitation only."] = "";
-App::$strings["Register at another affiliated hub"] = "";
-App::$strings["Terms of Service"] = "Tjenesteavtale";
-App::$strings["I accept the %s for this website"] = "Jeg godtar %s for dette nettstedet";
-App::$strings["I am over %s years of age and accept the %s for this website"] = "";
-App::$strings["Your email address"] = "Din e-postadresse";
-App::$strings["Optional"] = "Valgfritt";
-App::$strings["Choose a password"] = "Velg et passord";
-App::$strings["Please re-enter your password"] = "Vennligst skriv ditt passord en gang til";
-App::$strings["Please enter your invitation code"] = "Vennligst skriv din invitasjonskode";
-App::$strings["Your name"] = "";
-App::$strings["Real name is preferred"] = "";
-App::$strings["Choose a short nickname"] = "Velg et kort kallenavn";
-App::$strings["Your nickname will be used to create an easy to remember channel address"] = "";
-App::$strings["Why do you want to join this hub?"] = "";
-App::$strings["This will help to review your registration"] = "";
-App::$strings["Registration"] = "Registrering";
-App::$strings["I have an invite code"] = "";
-App::$strings["This site has exceeded the number of allowed daily account registrations."] = "";
-App::$strings["Public access denied."] = "Offentlig tilgang avvist.";
-App::$strings["Items tagged with: %s"] = "Elementer merket med: %s";
-App::$strings["Search results for: %s"] = "Søkeresultater for: %s";
+App::$strings["Edit post"] = "Endre innlegg";
+App::$strings["Invalid item."] = "Ugyldig element.";
+App::$strings["Channel not found."] = "Kanalen ble ikke funnet.";
+App::$strings["Language App"] = "";
+App::$strings["Not Installed"] = "";
+App::$strings["Token verification failed."] = "";
+App::$strings["Email verification resent"] = "";
+App::$strings["Unable to resend email verification message."] = "";
App::$strings["\$Projectname Server - Setup"] = "\$Projectname-tjener - oppsett";
App::$strings["Could not connect to database."] = "Fikk ikke kontakt med databasen.";
App::$strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = "Fikk ikke kontakt med det angitte nettstedets URL. Problemet kan muligens skyldes SSL-sertifikatet eller DNS.";
@@ -1918,6 +1258,10 @@ App::$strings["PHP upload limits"] = "PHP opplastingsgrenser";
App::$strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Feil: \"openssl_pkey_new\"-funksjonen på dette systemet er ikke i stand til å lage krypteringsnøkler";
App::$strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Ved kjøring på Windows, vennligst se \"http://www.php.net/manual/en/openssl.installation.php\".";
App::$strings["Generate encryption keys"] = "Lag krypteringsnøkler";
+App::$strings["Error: the sodium encryption library is not installed."] = "";
+App::$strings["Generate ed25519 encryption keys"] = "Lag krypteringsnøkler";
+App::$strings["Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are required."] = "";
+App::$strings["Bigmath library (either bcmath or gmp)"] = "";
App::$strings["libCurl PHP module"] = "libCurl PHP-modul";
App::$strings["GD graphics PHP module"] = "GD graphics PHP-modul";
App::$strings["OpenSSL PHP module"] = "OpenSSL PHP-modul";
@@ -1925,6 +1269,7 @@ App::$strings["PDO database PHP module"] = "";
App::$strings["mb_string PHP module"] = "mb_string PHP-modul";
App::$strings["xml PHP module"] = "xml PHP modul";
App::$strings["zip PHP module"] = "";
+App::$strings["intl PHP module"] = "xml PHP modul";
App::$strings["Apache mod_rewrite module"] = "Apache mod_rewrite-modul";
App::$strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Feil: Apache web-tjenerens mod-rewrite-modul er påkrevd, men ikke installert.";
App::$strings["exec"] = "";
@@ -1939,6 +1284,7 @@ App::$strings["Error: PDO database PHP module required but not installed."] = ""
App::$strings["Error: mb_string PHP module required but not installed."] = "Feil: mb_string PHP-modul er påkrevd, men er ikke installert.";
App::$strings["Error: xml PHP module required for DAV but not installed."] = "Feil: XML PHP modul er påkrevet for DAV, men den er ikke installert.";
App::$strings["Error: zip PHP module required but not installed."] = "";
+App::$strings["Error: intl PHP module required but not installed."] = "Feil: openssl PHP-modul er påkrevd, men er ikke installert.";
App::$strings[".htconfig.php is writable"] = ".htconfig.php kan skrives til";
App::$strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "Web-installasjonen må kunne lage en fil kalt \".htconfig.php\" i toppkatalogen til web-tjeneren din, men dette får den ikke til.";
App::$strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Dette er oftest tillatelsesinnstilling, ettersom webtjeneren kanskje kan skrive til filer i din mappe - selv om du kan.";
@@ -1961,30 +1307,271 @@ App::$strings["SSL certificate validation"] = "SSL sertifikat-kontroll";
App::$strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = "URL omskriving (rewrite) i .htaccess virker ikke. Sjekk konfigurasjonen til tjeneren din. Test: ";
App::$strings["Url rewrite is working"] = "URL rewrite virker";
App::$strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Databasekonfigurasjonsfilen \".htconfig.php\" kunne ikke skrives. Vennligst bruk den medfølgende teksten for å lage en konfigurasjonsfil i toppkatalogen av din web-tjener.";
+App::$strings["Errors encountered creating database tables."] = "Feil oppstod under opprettelsen av databasetabeller.";
App::$strings["<h1>What next?</h1>"] = "";
App::$strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "VIKTIG: Du må [manuelt] sette opp en automatisert tidfestet oppgave til bakgrunnshenteren.";
+App::$strings["Bookmark added"] = "Bokmerke lagt til";
+App::$strings["My Connections Bookmarks"] = "Mine forbindelsers bokmerker";
+App::$strings["Update to Hubzilla 5.0 step 2"] = "";
+App::$strings["To complete the update please run"] = "";
+App::$strings["php util/z6convert.php"] = "";
+App::$strings["from the terminal."] = "";
+App::$strings["Email resent"] = "";
+App::$strings["Email resend failed"] = "";
+App::$strings["Verification successful"] = "";
+App::$strings["Account successfull created"] = "";
+App::$strings["Channel successfull created"] = "";
+App::$strings["Automatic channel creation failed. Please create a channel."] = "";
+App::$strings["Account creation error"] = "";
+App::$strings["Verify failed"] = "";
+App::$strings["Token verification failed"] = "";
+App::$strings["Request not inside time frame"] = "";
+App::$strings["Identity unknown"] = "";
+App::$strings["dId2 mistaken"] = "";
+App::$strings["Your Registration ID"] = "";
+App::$strings["Registration verification"] = "";
+App::$strings["Hold on, you can start verification in"] = "";
+App::$strings["Please remember your verification token for ID"] = "";
+App::$strings["Token validity"] = "";
+App::$strings["Resend email"] = "";
+App::$strings["Registration status"] = "";
+App::$strings["Verification successful!"] = "";
+App::$strings["Your login ID is"] = "";
+App::$strings["After your account has been approved by our administrator you will be able to login with your login ID and your provided password."] = "";
+App::$strings["Registration request revoked"] = "";
+App::$strings["Sorry for any inconvience. Thank you for your response."] = "";
+App::$strings["Please enter your verification token for ID"] = "";
+App::$strings["Please check your email!"] = "";
+App::$strings["Verification token"] = "";
+App::$strings["ID expired"] = "";
+App::$strings["You will require the verification token for ID"] = "";
+App::$strings["Unknown or expired ID"] = "";
+App::$strings["dId2 malformed"] = "";
+App::$strings["Authorize application connection"] = "Tillat programforbindelse";
+App::$strings["Return to your app and insert this Security Code:"] = "";
+App::$strings["Please login to continue."] = "Vennligst logg inn for å fortsette.";
+App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, og/eller lage nye innlegg for deg?";
+App::$strings["Event can not end before it has started."] = "Hendelsen kan ikke slutte før den starter.";
+App::$strings["Unable to generate preview."] = "Klarer ikke å lage forhåndsvisning.";
+App::$strings["Event title and start time are required."] = "Hendelsestittel og starttidspunkt er påkrevd.";
+App::$strings["Event not found."] = "Hendelsen ble ikke funnet.";
+App::$strings["Edit event"] = "Endre hendelse";
+App::$strings["Delete event"] = "Slett hendelse";
+App::$strings["Link to source"] = "Lenke til kilde";
+App::$strings["calendar"] = "kalender";
+App::$strings["Failed to remove event"] = "Mislyktes med å slette hendelse";
+App::$strings["Remote privacy information not available"] = "";
+App::$strings["__ctx:acl__ Profile"] = "Profil";
+App::$strings["Privacy group"] = "Personverngruppe:";
+App::$strings["Item"] = "";
+App::$strings["Click to copy link to this ressource for guest %s to clipboard"] = "";
+App::$strings["Link copied"] = "";
+App::$strings["Access"] = "Tilgang";
+App::$strings["Guest access"] = "";
+App::$strings["OCAP access"] = "";
+App::$strings["Layout Name"] = "Layout-navn";
+App::$strings["Layout Description (Optional)"] = "Layoutens beskrivelse (valgfritt)";
+App::$strings["Edit Layout"] = "Endre layout";
+App::$strings["Album not found."] = "Albumet ble ikke funnet.";
+App::$strings["Delete Album"] = "Slett album";
+App::$strings["Delete Photo"] = "Slett bilde";
+App::$strings["Public access denied."] = "Offentlig tilgang avvist.";
+App::$strings["No photos selected"] = "Ingen bilder valgt";
+App::$strings["Access to this item is restricted."] = "Tilgang til dette elementet er begrenset.";
+App::$strings["%1$.2f MB photo storage used."] = "%1$.2f MB lagringsplass til bilder er brukt.";
+App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt.";
+App::$strings["Upload Photos"] = "Last opp bilder";
+App::$strings["Enter an album name"] = "Skriv et albumnavn";
+App::$strings["or select an existing album (doubleclick)"] = "eller velg et eksisterende album (dobbeltklikk)";
+App::$strings["Create a status post for this upload"] = "Lag et statusinnlegg for denne opplastingen";
+App::$strings["Description (optional)"] = "Beskrivelse (valgritt)";
+App::$strings["Show Newest First"] = "Vis nyeste først";
+App::$strings["Show Oldest First"] = "Vis eldste først";
+App::$strings["View Photo"] = "Vis foto";
+App::$strings["Edit Album"] = "Endre album";
+App::$strings["Add Photos"] = "Legg til bilder";
+App::$strings["Permission denied. Access to this item may be restricted."] = "Tillatelse avvist. Tilgang til dette elementet kan være begrenset.";
+App::$strings["Photo not available"] = "Bilde er utilgjengelig";
+App::$strings["Use as profile photo"] = "Bruk som profilbilde";
+App::$strings["Use as cover photo"] = "Bruk som omslagsbilde";
+App::$strings["Private Photo"] = "Privat bilde";
+App::$strings["Previous"] = "Forrige";
+App::$strings["View Full Size"] = "Vis i full størrelse";
+App::$strings["Remove"] = "Fjern";
+App::$strings["Edit photo"] = "Endre bilde";
+App::$strings["Rotate CW (right)"] = "Roter med klokka (mot høyre)";
+App::$strings["Rotate CCW (left)"] = "Roter mot klokka (venstre)";
+App::$strings["Move photo to album"] = "";
+App::$strings["Enter a new album name"] = "Skriv et nytt albumnavn";
+App::$strings["or select an existing one (doubleclick)"] = "eller velg et eksisterende album (dobbeltklikk)";
+App::$strings["Add a Tag"] = "Legg til merkelapp";
+App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Eksempel: @bob, @Barbara_Jensen, @jim@example.com";
+App::$strings["Flag as adult in album view"] = "Flag som voksent i albumvisning";
+App::$strings["View all"] = "Vis alle";
+App::$strings["Photo Tools"] = "Fotoverktøy";
+App::$strings["In This Photo:"] = "I dette bildet:";
+App::$strings["Map"] = "Kart";
+App::$strings["__ctx:noun__ Likes"] = "Liker";
+App::$strings["__ctx:noun__ Dislikes"] = "Liker ikke";
+App::$strings["Name is required"] = "Navn er påkrevd";
+App::$strings["Key and Secret are required"] = "Nøkkel og hemmelighet er påkrevd";
+App::$strings["Add application"] = "Legg til program";
+App::$strings["Name of application"] = "Navn på program";
+App::$strings["Consumer Key"] = "Consumer Key";
+App::$strings["Automatically generated - change if desired. Max length 20"] = "Automatisk laget - kan endres om du vil. Største lengde 20";
+App::$strings["Consumer Secret"] = "Consumer Secret";
+App::$strings["Redirect"] = "Omdirigering";
+App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = "Omdirigerings-URI - la stå tomt hvis ikke ditt program spesifikt krever dette";
+App::$strings["Icon url"] = "Ikon-URL";
+App::$strings["Optional"] = "Valgfritt";
+App::$strings["Application not found."] = "Programmet ble ikke funnet.";
+App::$strings["Connected OAuth Apps"] = "";
+App::$strings["Client key starts with"] = "Klientnøkkel starter med";
+App::$strings["No name"] = "Ikke noe navn";
+App::$strings["Remove authorization"] = "Fjern tillatelse";
+App::$strings["Available Apps"] = "Tilgjengelige apper";
+App::$strings["Installed Apps"] = "Installerte apper";
+App::$strings["Manage Apps"] = "Behandle apper";
+App::$strings["Create Custom App"] = "";
App::$strings["No connections."] = "Ingen forbindelser.";
App::$strings["Visit %s's profile [%s]"] = "Besøk %s sin profil [%s]";
App::$strings["View Connections"] = "Vis forbindelser";
-App::$strings["Public Hubs"] = "Offentlige huber";
-App::$strings["The listed hubs allow public registration for the \$Projectname network. All hubs in the network are interlinked so membership on any of them conveys membership in the network as a whole. Some hubs may require subscription or provide tiered service plans. The hub itself <strong>may</strong> provide additional details."] = "Nettstedene på listen tillater offentlig registrering i \$Projectname-nettverket. Alle nettsteder i nettverket er forbundet så medlemskap på enhver av dem formidler medlemskap i nettverket som helhet. Noen nettsteder kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Nettstedene selv <strong>kan</strong> gi tilleggsopplysninger.";
-App::$strings["Hub URL"] = "Nettstedets URL";
-App::$strings["Access Type"] = "Tilgangstype";
-App::$strings["Registration Policy"] = "Retningslinjer for registrering";
-App::$strings["Stats"] = "Statistikk";
-App::$strings["Software"] = "Programvare";
-App::$strings["Ratings"] = "Vurderinger";
-App::$strings["Rate"] = "Vurder";
-App::$strings["Posts and comments"] = "Innlegg og kommentarer";
-App::$strings["Only posts"] = "Kun innlegg";
-App::$strings["Malformed message id."] = "";
-App::$strings["Insufficient permissions. Request redirected to profile page."] = "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden.";
-App::$strings["You must enable javascript for your browser to be able to view this content."] = "";
-App::$strings["Invalid profile identifier."] = "Ugyldig profil-identifikator.";
-App::$strings["Profile Visibility Editor"] = "Endre profilsynlighet";
-App::$strings["Click on a contact to add or remove."] = "Klikk på en kontakt for å legge til eller fjerne.";
-App::$strings["Visible To"] = "Synlig for";
-App::$strings["All Connections"] = "Alle forbindelser";
+App::$strings["toggle full screen mode"] = "";
+App::$strings["Item is not editable"] = "Elementet kan ikke endres";
+App::$strings["Post not found."] = "";
+App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s merket %3\$s til %2\$s med %4\$s";
+App::$strings["No channel."] = "Ingen kanal.";
+App::$strings["No connections in common."] = "Ingen forbindelser felles.";
+App::$strings["View Common Connections"] = "";
+App::$strings["Profile not found."] = "Profilen ble ikke funnet.";
+App::$strings["Profile deleted."] = "Profilen er slettet.";
+App::$strings["Profile-"] = "Profil-";
+App::$strings["New profile created."] = "Ny profil opprettet.";
+App::$strings["Profile unavailable to clone."] = "Profilen er utilgjengelig for klonen.";
+App::$strings["Profile unavailable to export."] = "Profilen er utilgjengelig for eksport.";
+App::$strings["Profile Name is required."] = "Profilnavn er påkrevd.";
+App::$strings["Marital Status"] = "Sivilstand";
+App::$strings["Romantic Partner"] = "Romantisk partner";
+App::$strings["Likes"] = "Liker";
+App::$strings["Dislikes"] = "Liker ikke";
+App::$strings["Work/Employment"] = "Arbeid/sysselsetting";
+App::$strings["Religion"] = "Religion";
+App::$strings["Political Views"] = "Politiske synspunkter";
+App::$strings["Gender"] = "Kjønn";
+App::$strings["Sexual Preference"] = "Seksuelle preferanser";
+App::$strings["Homepage"] = "Hjemmeside";
+App::$strings["Interests"] = "Interesser";
+App::$strings["Address"] = "Adresse";
+App::$strings["Profile updated."] = "Profilen er oppdatert.";
+App::$strings["Hide my connections from viewers of this profile"] = "Skjul mine forbindelser fra besøkende som ser denne profilen";
+App::$strings["Publish my default profile in the network directory"] = "La standardprofilen min vises i nettverkskatalonen";
+App::$strings["Suggest me as a potential contact to new members"] = "Foreslå meg som mulig kontakt til nye medlemmer";
+App::$strings["Reveal my online status"] = "La andre se om jeg er pålogget eller ikke";
+App::$strings["Edit Profile Details"] = "Endre profildetaljer";
+App::$strings["View this profile"] = "Vis denne profilen";
+App::$strings["Profile Tools"] = "Profilverktøy";
+App::$strings["Change cover photo"] = "Endre omslagsbilde";
+App::$strings["Create a new profile using these settings"] = "Lag en ny profil ved å bruke disse innstillingene";
+App::$strings["Clone this profile"] = "Klon denne profilen";
+App::$strings["Delete this profile"] = "Slett denne profilen";
+App::$strings["Add profile things"] = "Legg til profilting";
+App::$strings["Basic"] = "Grunnleggende";
+App::$strings["Relationship"] = "Forhold";
+App::$strings["Import profile from file"] = "Importer profil fra fil";
+App::$strings["Export profile to file"] = "Eksporter profil til fil";
+App::$strings["Your gender"] = "Kjønn";
+App::$strings["Marital status"] = "Sivilstatus";
+App::$strings["Sexual preference"] = "Legning";
+App::$strings["Profile name"] = "Profilnavn";
+App::$strings["This is your default profile."] = "Dette er din standardprofil.";
+App::$strings["Your full name"] = "Fullt navn";
+App::$strings["Short title/description"] = "Kort tittel/beskrivelse";
+App::$strings["Maximal 190 characters"] = "Maksimum 190 tegn";
+App::$strings["Street address"] = "Gateadresse";
+App::$strings["Locality/City"] = "Sted/by";
+App::$strings["Region/State"] = "Region";
+App::$strings["Postal/Zip code"] = "Postnummer";
+App::$strings["Country"] = "Land";
+App::$strings["Who (if applicable)"] = "Hvem (om relevant)";
+App::$strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Eksempler: kari123, Kari Villiamsen, kari@example.com";
+App::$strings["Since (date)"] = "Fra (dato)";
+App::$strings["Tell us about yourself"] = "Fortell oss om deg selv";
+App::$strings["Homepage URL"] = "Hjemmeside URL";
+App::$strings["Hometown"] = "Hjemsted";
+App::$strings["Political views"] = "Politiske holdninger";
+App::$strings["Religious views"] = "Religiøse holdninger";
+App::$strings["Keywords used in directory listings"] = "Nøkkelord for bruk i katalogoppføringen";
+App::$strings["Example: fishing photography software"] = "Eksempel: fisking fotografering programvare";
+App::$strings["Musical interests"] = "Musikkinteresser";
+App::$strings["Books, literature"] = "Bøker, litteratur";
+App::$strings["Television"] = "TV/fjernsyn";
+App::$strings["Film/Dance/Culture/Entertainment"] = "Film/dans/kultur/underholdning";
+App::$strings["Hobbies/Interests"] = "Hobbier/Interesser";
+App::$strings["Love/Romance"] = "Kjærlighet/romantikk";
+App::$strings["School/Education"] = "Skolle/utdanning";
+App::$strings["Contact information and social networks"] = "Kontaktinformasjon og andre sosiale nettverk";
+App::$strings["My other channels"] = "Mine andre kanaler";
+App::$strings["Create New"] = "Lag ny profil";
+App::$strings["No such group"] = "Gruppen finnes ikke";
+App::$strings["No such channel"] = "Ingen slik kanal";
+App::$strings["Privacy group is empty"] = "Personverngruppen er tom";
+App::$strings["Privacy group: "] = "Personverngruppe: ";
+App::$strings["Invalid channel."] = "Ugyldig kanal";
+App::$strings["Invite App"] = "";
+App::$strings["Register is closed"] = "";
+App::$strings["Note, the invitation code is valid up to"] = "";
+App::$strings["Too many recipients for one invitation (max %d)"] = "";
+App::$strings["No recipients for this invitation"] = "";
+App::$strings["(%s) : Not a real email address"] = "(%s): Ikke en virkelig epostadresse";
+App::$strings["(%s) : Not allowed email address"] = "(%s): Ikke en tillatt epostadresse";
+App::$strings["(%s) : email address already in use"] = "(%s): epostadressen er allerede i bruk";
+App::$strings["(%s) : Accepted email address"] = "(%s): Godkjent epostadresse";
+App::$strings["%s : Message delivery failed."] = "%s : meldingslevering feilet.";
+App::$strings["To %s : Message delivery success."] = "";
+App::$strings["%1\$d mail(s) sent, %2\$d mail error(s)"] = "";
+App::$strings["Invites not proposed by configuration"] = "";
+App::$strings["Contact the site admin"] = "";
+App::$strings["Invites by users not enabled"] = "";
+App::$strings["You have no more invitations available"] = "Du har ikke flere invitasjoner tilgjengelig";
+App::$strings["Not on xchan"] = "";
+App::$strings["All users invitation limit exceeded."] = "";
+App::$strings["Minute(s)"] = "";
+App::$strings["Hour(s)"] = "";
+App::$strings["Day(s)"] = "";
+App::$strings["Invitation expires after"] = "";
+App::$strings["duration up from now"] = "";
+App::$strings["Invitation"] = "";
+App::$strings["Send invitations"] = "Send invitasjoner";
+App::$strings["Invitations I am using"] = "Invitasjoner jeg bruker";
+App::$strings["Invitations we are using"] = "";
+App::$strings["§ Note, the email(s) sent will be recorded in the system logs"] = "";
+App::$strings["Enter email addresses, one per line:"] = "Skriv e-postadresser, en per linje:";
+App::$strings["Your message:"] = "Din melding:";
+App::$strings["Invite template"] = "";
+App::$strings["Subject:"] = "Emne:";
+App::$strings["Here you may enter personal notes to the recipient(s)"] = "";
+App::$strings["Failed to create source. No channel selected."] = "Mislyktes med å lage kilde. Ingen kanal er valgt.";
+App::$strings["Source created."] = "Kilden er laget.";
+App::$strings["Source updated."] = "Kilden er oppdatert.";
+App::$strings["*"] = "*";
+App::$strings["Manage remote sources of content for your channel."] = "Håndtere eksterne innholdskilder til din kanal.";
+App::$strings["New Source"] = "Ny kilde";
+App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne kanalen og distribuer det i henhold til dine egne kanalinnstillinger.";
+App::$strings["Only import content with these words (one per line)"] = "Bare importer innhold med disse ordene (ett ord per linje)";
+App::$strings["Leave blank to import all public content"] = "La stå tomt for å importere alt offentlig innhold";
+App::$strings["Channel Name"] = "Kanalnavn";
+App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "";
+App::$strings["Resend posts with this channel as author"] = "";
+App::$strings["Copyrights may apply"] = "";
+App::$strings["Source not found."] = "Kilden ble ikke funnet.";
+App::$strings["Edit Source"] = "Endre kilde";
+App::$strings["Delete Source"] = "Slett kilde";
+App::$strings["Source removed"] = "Kilden er fjernet";
+App::$strings["Unable to remove source."] = "Ikke i stand til å fjerne kilde.";
+App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv igjen om 24 timer.";
+App::$strings["Ignore/Hide"] = "Ignorer/Skjul";
+App::$strings["%s element installed"] = "%s element installert";
+App::$strings["%s element installation failed"] = "Installasjon av %s-element mislyktes";
App::$strings["Privacy group created."] = "Personverngruppen er opprettet.";
App::$strings["Could not create privacy group."] = "Kunne ikke opprette personverngruppen.";
App::$strings["Privacy group updated."] = "Personverngruppen er oppdatert.";
@@ -1999,43 +1586,41 @@ App::$strings["Privacy group name: "] = "Personverngruppens navn: ";
App::$strings["Group members"] = "";
App::$strings["Not in this group"] = "";
App::$strings["Click a channel to toggle membership"] = "";
-App::$strings["This page is available only to site members"] = "";
-App::$strings["What would you like to do?"] = "";
-App::$strings["Please bookmark this page if you would like to return to it in the future"] = "";
-App::$strings["Upload a profile photo"] = "";
-App::$strings["Upload a cover photo"] = "";
-App::$strings["Edit your default profile"] = "";
-App::$strings["View the channel directory"] = "";
-App::$strings["View/edit your channel settings"] = "";
-App::$strings["View the site or project documentation"] = "";
-App::$strings["Visit your channel homepage"] = "";
-App::$strings["View your connections and/or add somebody whose address you already know"] = "";
-App::$strings["View your personal stream (this may be empty until you add some connections)"] = "";
-App::$strings["View the public stream. Warning: this content is not moderated"] = "";
-App::$strings["Name is required"] = "Navn er påkrevd";
-App::$strings["Key and Secret are required"] = "Nøkkel og hemmelighet er påkrevd";
-App::$strings["Update"] = "Oppdater";
-App::$strings["Add application"] = "Legg til program";
-App::$strings["Name of application"] = "Navn på program";
-App::$strings["Automatically generated - change if desired. Max length 20"] = "Automatisk laget - kan endres om du vil. Største lengde 20";
-App::$strings["Redirect"] = "Omdirigering";
-App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = "Omdirigerings-URI - la stå tomt hvis ikke ditt program spesifikt krever dette";
-App::$strings["Icon url"] = "Ikon-URL";
-App::$strings["Application not found."] = "Programmet ble ikke funnet.";
-App::$strings["Connected OAuth Apps"] = "";
-App::$strings["Client key starts with"] = "Klientnøkkel starter med";
-App::$strings["No name"] = "Ikke noe navn";
-App::$strings["Remove authorization"] = "Fjern tillatelse";
-App::$strings["Page link"] = "Sidelenke";
-App::$strings["Edit Webpage"] = "Endre webside";
-App::$strings["This site is not a directory server"] = "Dette nettstedet er ikke en katalogtjener";
-App::$strings["This directory server requires an access token"] = "Denne katalogtjeneren krever en tilgangsnøkkel (access token)";
-App::$strings["Unable to locate original post."] = "Ikke i stand til å finne opprinnelig innlegg.";
+App::$strings["Comanche page description language help"] = "Hjelp med Comanche sidebeskrivelsesspråk";
+App::$strings["Layout Description"] = "Layout-beskrivelse";
+App::$strings["Download PDL file"] = "Last ned PDL-fil";
+App::$strings["View"] = "Vis";
+App::$strings["Name and Secret are required"] = "";
+App::$strings["Add OAuth2 application"] = "";
+App::$strings["Grant Types"] = "";
+App::$strings["leave blank unless your application sepcifically requires this"] = "";
+App::$strings["Authorization scope"] = "";
+App::$strings["OAuth2 Application not found."] = "";
+App::$strings["leave blank unless your application specifically requires this"] = "";
+App::$strings["Connected OAuth2 Apps"] = "";
+App::$strings["item"] = "";
+App::$strings["Image uploaded but image cropping failed."] = "Bildet ble lastet opp, men beskjæring av bildet mislyktes.";
+App::$strings["Cover Photos"] = "Forsidebilder";
+App::$strings["Image resize failed."] = "Endring av bildestørrelse mislyktes.";
+App::$strings["Image upload failed."] = "Opplasting av bildet mislyktes.";
+App::$strings["Unable to process image."] = "Kan ikke behandle bildet.";
+App::$strings["Photo not available."] = "Bildet er ikke tilgjengelig.";
+App::$strings["Your cover photo may be visible to anybody on the internet"] = "Omslagsbildet ditt vil være synlig for enhver på internett";
+App::$strings["Upload File:"] = "Last opp fil:";
+App::$strings["Select a profile:"] = "Velg en profil:";
+App::$strings["Change Cover Photo"] = "Endre omslagsbilde";
+App::$strings["Use a photo from your albums"] = "";
+App::$strings["Choose a different album"] = "Velg et annet album";
+App::$strings["Select existing photo"] = "Velg eksisterende bilde";
+App::$strings["Crop Image"] = "Beskjær bildet";
+App::$strings["Please adjust the image cropping for optimum viewing."] = "Vennligst juster bildebeskjæringen for optimal visning.";
+App::$strings["Done Editing"] = "Lagre endringer";
+App::$strings["You must be logged in to see this page."] = "Du må være innloegget for å se denne siden.";
App::$strings["Room not found"] = "Rommet ble ikke funnet";
App::$strings["Leave Room"] = "Forlat rom";
App::$strings["Delete Room"] = "Slett rom";
App::$strings["I am away right now"] = "Jeg er borte akkurat nå";
-App::$strings["I am online"] = "Jeg er online";
+App::$strings["I am online"] = "Jeg er pålogget";
App::$strings["Bookmark this room"] = "Bokmerk dette rommet";
App::$strings["New Chatroom"] = "Nytt chatrom";
App::$strings["Chatroom name"] = "Romnavn";
@@ -2045,60 +1630,145 @@ App::$strings["No chatrooms available"] = "Ingen rom tilgjengelige";
App::$strings["Add Room"] = "";
App::$strings["Expiration"] = "Utløp";
App::$strings["min"] = "min";
-App::$strings["Event can not end before it has started."] = "Hendelsen kan ikke slutte før den starter.";
-App::$strings["Unable to generate preview."] = "Klarer ikke å lage forhåndsvisning.";
-App::$strings["Event title and start time are required."] = "Hendelsestittel og starttidspunkt er påkrevd.";
-App::$strings["Event not found."] = "Hendelsen ble ikke funnet.";
-App::$strings["Edit event"] = "Endre hendelse";
-App::$strings["Delete event"] = "Slett hendelse";
-App::$strings["Link to source"] = "Lenke til kilde";
-App::$strings["calendar"] = "kalender";
-App::$strings["Failed to remove event"] = "Mislyktes med å slette hendelse";
-App::$strings["Account not found."] = "Kontoen ble ikke funnet";
-App::$strings["Multifactor Verification"] = "";
-App::$strings["Please enter the verification key from your authenticator app"] = "";
-App::$strings["Like/Dislike"] = "Liker/Liker ikke";
-App::$strings["This action is restricted to members."] = "Denne handlingen er begrenset til medlemmer.";
-App::$strings["Please <a href=\"rmagic\">login with your \$Projectname ID</a> or <a href=\"register\">register as a new \$Projectname member</a> to continue."] = "Vennligst <a href=\"rmagic\">logg inn med din \$Projectname ID</a> eller <a href=\"register\">registrer deg som et nytt \$Projectname-medlem</a> for å fortsette.";
-App::$strings["Invalid request."] = "Ugyldig forespørsel.";
-App::$strings["thing"] = "ting";
-App::$strings["Channel unavailable."] = "Kanalen er utilgjengelig.";
-App::$strings["Previous action reversed."] = "Forrige handling er omgjort.";
-App::$strings["%1\$s agrees with %2\$s's %3\$s"] = "%1\$s er enig med %2\$s sin %3\$s";
-App::$strings["%1\$s doesn't agree with %2\$s's %3\$s"] = "%1\$s er ikke enig med %2\$s sin %3\$s";
-App::$strings["%1\$s abstains from a decision on %2\$s's %3\$s"] = "%1\$s avstår fra å mene noe om %2\$s sin %3\$s";
-App::$strings["Action completed."] = "Handling ferdig.";
-App::$strings["Thank you."] = "Tusen takk.";
-App::$strings["Poke somebody"] = "Dult noen";
-App::$strings["Poke or ping somebody"] = "Dult noen";
-App::$strings["Recipient"] = "Mottaker";
-App::$strings["Choose action"] = "Forbindelser";
-App::$strings["Make this post private"] = "Gjør dette innlegget privat";
-App::$strings["Calendar entries imported."] = "Kalenderhendelsene er importert.";
-App::$strings["No calendar entries found."] = "Ingen kalenderhendelser funnet.";
-App::$strings["Event title"] = "Tittel på hendelse";
-App::$strings["Start date and time"] = "Startdato og tidspunkt";
-App::$strings["End date and time"] = "";
-App::$strings["Timezone:"] = "Tidssone";
-App::$strings["Previous"] = "Forrige";
-App::$strings["Today"] = "Idag";
-App::$strings["Month"] = "måned";
-App::$strings["Week"] = "uke";
-App::$strings["Day"] = "dag";
-App::$strings["List month"] = "";
-App::$strings["List week"] = "";
-App::$strings["List day"] = "";
-App::$strings["More"] = "";
-App::$strings["Less"] = "";
-App::$strings["Select calendar"] = "";
-App::$strings["Delete all"] = "";
-App::$strings["Sorry! Editing of recurrent events is not yet implemented."] = "";
-App::$strings["Could not fetch calendar resource. The selected calendar might be disabled."] = "";
+App::$strings["Invalid message"] = "Ugyldig melding";
+App::$strings["no results"] = "ingen resultater";
+App::$strings["channel sync processed"] = "kanalsynkronisering er behandlet";
+App::$strings["queued"] = "lagt i kø";
+App::$strings["posted"] = "lagt inn";
+App::$strings["accepted for delivery"] = "akseptert for levering";
+App::$strings["updated"] = "oppdatert";
+App::$strings["update ignored"] = "oppdatering ignorert";
+App::$strings["permission denied"] = "tillatelse avvist";
+App::$strings["recipient not found"] = "mottaker ble ikke funnet";
+App::$strings["Delivery report for %1\$s"] = "Leveringsrapport for %1\$s";
+App::$strings["Options"] = "Valg";
+App::$strings["Redeliver"] = "";
+App::$strings["Select a bookmark folder"] = "Velg en bokmerkemappe";
+App::$strings["Save Bookmark"] = "Lagre bokmerke";
+App::$strings["URL of bookmark"] = "URL-en til bokmerket";
+App::$strings["Description"] = "Beskrivelse";
+App::$strings["Or enter new bookmark folder name"] = "Eller skriv nytt navn på bokmerkemappe";
+App::$strings["Some blurb about what to do when you're new here"] = "En standardtekst om hva du bør gjøre som ny her";
+App::$strings["Private forum"] = "";
+App::$strings["Public forum"] = "Offentlig forum:";
+App::$strings["App installed."] = "App installert.";
+App::$strings["Malformed app."] = "Feil oppsett for app-en.";
+App::$strings["Embed code"] = "Innbyggingskode";
+App::$strings["Edit App"] = "Endre app";
+App::$strings["Create App"] = "Lag app";
+App::$strings["Name of app"] = "Navn på app";
+App::$strings["Location (URL) of app"] = "Plassering (URL) til app";
+App::$strings["Photo icon URL"] = "Bildeikon URL";
+App::$strings["80 x 80 pixels - optional"] = "80 x80 pixler - valgfritt";
+App::$strings["Categories (optional, comma separated list)"] = "Kategorier (valgfri, kommaseparert liste)";
+App::$strings["Version ID"] = "Versjons-ID";
+App::$strings["Price of app"] = "Pris på app";
+App::$strings["Location (URL) to purchase app"] = "Plassering (URL) for å kjøpe app";
+App::$strings["No default suggestions were found."] = "";
+App::$strings["Gender: "] = "Kjønn: ";
+App::$strings["Status: "] = "Status: ";
+App::$strings["Homepage: "] = "Hjemmeside: ";
+App::$strings["Description:"] = "Beskrivelse:";
+App::$strings["Unsafe"] = "";
+App::$strings["Spam"] = "";
+App::$strings["Public Forum:"] = "Offentlig forum:";
+App::$strings["Keywords: "] = "Nøkkelord: ";
+App::$strings["Don't suggest"] = "Ikke foreslå";
+App::$strings["Common connections (estimated):"] = "";
+App::$strings["Global Directory"] = "Global katalog";
+App::$strings["Local Directory"] = "Lokal katalog";
+App::$strings["Finding:"] = "Finner:";
+App::$strings["next page"] = "neste side";
+App::$strings["previous page"] = "forrige side";
+App::$strings["Sort options"] = "Sorteringsvalg";
+App::$strings["Alphabetic"] = "Alfabetisk";
+App::$strings["Reverse Alphabetic"] = "Omvendt alfabetisk";
+App::$strings["Newest to Oldest"] = "Nyest til eldst";
+App::$strings["Oldest to Newest"] = "Eldst til nyest";
+App::$strings["No entries (some entries may be hidden)."] = "Ingen oppføringer (noen oppføringer kan være skjult).";
+App::$strings["No service class restrictions found."] = "Ingen restriksjoner er funnet i tjenesteklasse.";
+App::$strings["Tag removed"] = "Merkelapp fjernet";
+App::$strings["Remove Item Tag"] = "Fjern merkelapp fra element";
+App::$strings["Select a tag to remove: "] = "Velg merkelapp å fjerne: ";
+App::$strings["Could not access contact record."] = "Fikk ikke tilgang til kontaktinformasjonen.";
+App::$strings["Could not locate selected profile."] = "Fant ikke valgt profil.";
+App::$strings["Connection updated."] = "Forbindelsen er oppdatert.";
+App::$strings["Failed to update connection record."] = "Mislyktes med å oppdatere forbindelsesinformasjonen.";
+App::$strings["is now connected to"] = "er nå forbundet til";
+App::$strings["Could not access address book record."] = "Fikk ikke tilgang til informasjonen i adresseboken.";
+App::$strings["Refresh failed - channel is currently unavailable."] = "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig.";
+App::$strings["Unable to set address book parameters."] = "Ikke i stand til å angi parametre for adresseboken.";
+App::$strings["Connection has been removed."] = "Forbindelsen har blitt fjernet.";
+App::$strings["View %s's profile"] = "Vis %s sin profil";
+App::$strings["Refresh Permissions"] = "Oppfrisk tillatelser";
+App::$strings["Fetch updated permissions"] = "Hent oppdaterte tillatelser";
+App::$strings["Refresh Photo"] = "";
+App::$strings["Fetch updated photo"] = "";
+App::$strings["View recent posts and comments"] = "Vis nylige innlegg og kommentarer";
+App::$strings["Unblock"] = "Ikke blokker lenger";
+App::$strings["Block"] = "Blokker";
+App::$strings["Block (or Unblock) all communications with this connection"] = "Blokker eller fjern blokkering av all kommunikasjon med denne forbindelsen";
+App::$strings["This connection is blocked!"] = "Denne forbindelsen er blokkert!";
+App::$strings["Unignore"] = "Ikke ignorer lenger";
+App::$strings["Ignore"] = "Ignorer";
+App::$strings["Ignore (or Unignore) all inbound communications from this connection"] = "Ignorer eller fjern ignorering av all inngående kommunikasjon fra denne forbindelsen";
+App::$strings["This connection is ignored!"] = "Denne forbindelsen er ignorert!";
+App::$strings["Unarchive"] = "Ikke arkiver lenger";
+App::$strings["Archive"] = "Arkiver";
+App::$strings["Archive (or Unarchive) this connection - mark channel dead but keep content"] = "Arkiver eller fjern arkivering av denne forbindelsen - marker kanal som død, men behold innhold";
+App::$strings["This connection is archived!"] = "Denne forbindelsen er arkivert!";
+App::$strings["Unhide"] = "Ikke skjul lenger";
+App::$strings["Hide"] = "Skjul";
+App::$strings["Hide or Unhide this connection from your other connections"] = "Skjul eller fjern skjuling av denne forbindelsen fra dine andre forbindelser";
+App::$strings["This connection is hidden!"] = "Denne forbindelsen er skjult!";
+App::$strings["Delete this connection"] = "Slett denne forbindelsen";
+App::$strings["Fetch Vcard"] = "";
+App::$strings["Fetch electronic calling card for this connection"] = "";
+App::$strings["Affinity"] = "";
+App::$strings["Open Set Affinity section by default"] = "";
+App::$strings["Me"] = "Meg";
+App::$strings["Family"] = "Familie";
+App::$strings["Acquaintances"] = "Bekjente";
+App::$strings["All"] = "Alle";
+App::$strings["Filter"] = "";
+App::$strings["Open Custom Filter section by default"] = "";
+App::$strings["Approve this contact"] = "";
+App::$strings["Accept contact to allow communication"] = "";
+App::$strings["Set Affinity"] = "Angi nærhet";
+App::$strings["Set Profile"] = "Angi profil";
+App::$strings["Set Affinity & Profile"] = "Angi nærhet og profil";
+App::$strings["Please select a role for this contact!"] = "";
+App::$strings["This contact is unreachable from this location."] = "";
+App::$strings["This contact may be unreachable from other channel locations."] = "";
+App::$strings["Location independence is not supported by their network."] = "";
+App::$strings["Contact: %s"] = "";
+App::$strings["Contact role"] = "";
+App::$strings["Manage contact roles"] = "";
+App::$strings["This contacts's primary address is"] = "";
+App::$strings["Available locations:"] = "Tilgjengelige plasseringer:";
+App::$strings["The permissions indicated on this page will be applied to all new connections."] = "Tillatelsene angitt på denne siden gjøres gjeldende for alle nye forbindelser.";
+App::$strings["Contact Tools"] = "";
+App::$strings["Slide to adjust your degree of friendship"] = "Flytt for å justere din grad av vennskap";
+App::$strings["Custom Filter"] = "Tilpasset filter";
+App::$strings["Only import posts with this text"] = "Bare importer innlegg med disse ordene";
+App::$strings["words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts"] = "ord per linje eller #merkelapper eller /mønster/ eller språk lang=xx, la stå blankt for å importere alle innlegg";
+App::$strings["Do not import posts with this text"] = "Ikke importer innlegg med denne teksten";
+App::$strings["Contact Pending Approval"] = "";
+App::$strings["inherited"] = "arvet";
+App::$strings["Approve contact"] = "";
+App::$strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Vennligst velg profilen du ønsker å vise %s når profilen din ses på en sikret måte.";
+App::$strings["Their"] = "";
+App::$strings["My"] = "";
+App::$strings["Individual Permissions"] = "Individuelle tillatelser";
+App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can <strong>not</strong> change those settings here."] = "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har høyere prioritet enn individuelle innstillinger. Du kan <strong>ikke</strong> endre arvede innstillingene her.";
+App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har høyere prioritet enn individuelle innstillinger. Du kan endre disse innstillingene her, men de vil ikke få noen effekt før de arvede innstillingene endres.";
+App::$strings["Last update:"] = "Siste oppdatering:";
+App::$strings["Details"] = "";
App::$strings["Organisation"] = "";
+App::$strings["Title"] = "Tittel";
App::$strings["Phone"] = "";
App::$strings["Instant messenger"] = "";
App::$strings["Website"] = "";
-App::$strings["Address"] = "Adresse";
App::$strings["Note"] = "";
App::$strings["Add Contact"] = "";
App::$strings["Add Field"] = "";
@@ -2108,68 +1778,151 @@ App::$strings["Street"] = "";
App::$strings["Locality"] = "";
App::$strings["Region"] = "";
App::$strings["ZIP Code"] = "";
-App::$strings["Country"] = "Land";
-App::$strings["Default Calendar"] = "";
-App::$strings["Default Addressbook"] = "";
-App::$strings["Remote privacy information not available"] = "";
-App::$strings["__ctx:acl__ Profile"] = "Profil";
-App::$strings["Privacy group"] = "Personverngruppe:";
-App::$strings["Item"] = "";
-App::$strings["Click to copy link to this ressource for guest %s to clipboard"] = "";
-App::$strings["Link copied"] = "";
-App::$strings["Access"] = "Tilgang";
-App::$strings["OCAP access"] = "";
-App::$strings["Empty post discarded."] = "Tomt innlegg forkastet.";
-App::$strings["Duplicate post suppressed."] = "Duplikat av innlegg forhindret.";
-App::$strings["System error. Post not saved."] = "Systemfeil. Innlegg ble ikke lagret.";
-App::$strings["Your comment is awaiting approval."] = "";
-App::$strings["Unable to obtain post information from database."] = "Ikke i stand til å få tak i informasjon om innlegg fra databasen.";
-App::$strings["You have reached your limit of %1$.0f top level posts."] = "Du har nådd din grense på %1$.0f startinnlegg.";
-App::$strings["You have reached your limit of %1$.0f webpages."] = "Du har nådd din grense på %1$.0f websider.";
-App::$strings["Menu not found."] = "Menyen ble ikke funnet.";
-App::$strings["Unable to create element."] = "Klarer ikke å lage element.";
-App::$strings["Unable to update menu element."] = "Ikke i stand til å oppdatere menyelement.";
-App::$strings["Unable to add menu element."] = "Ikke i stand til å legge til menyelement.";
-App::$strings["Not found."] = "Ikke funnet.";
-App::$strings["Menu Item Permissions"] = "Menyelement Tillatelser";
-App::$strings["(click to open/close)"] = "(klikk for å åpne/lukke)";
-App::$strings["Link Name"] = "Lenkenavn";
-App::$strings["Link or Submenu Target"] = "Lenke- eller undermeny-mål";
-App::$strings["Enter URL of the link or select a menu name to create a submenu"] = "Skriv URL-en til lenken eller velg et menynavn for å lage en undermeny";
-App::$strings["Use magic-auth if available"] = "Bruk magic-autent hvis mulig";
-App::$strings["Open link in new window"] = "Åpne lenke i nytt vindu";
-App::$strings["Order in list"] = "Ordne i liste";
-App::$strings["Higher numbers will sink to bottom of listing"] = "Høyere tall vil synke mot bunnen av listen";
-App::$strings["Submit and finish"] = "Send inn og avslutt";
-App::$strings["Submit and continue"] = "Send inn og fortsett";
-App::$strings["Menu:"] = "Meny:";
-App::$strings["Link Target"] = "Lenkemål";
-App::$strings["Edit menu"] = "Endre meny";
-App::$strings["Edit element"] = "Endre element";
-App::$strings["Drop element"] = "Slett element";
-App::$strings["New element"] = "Nytt element";
-App::$strings["Edit this menu container"] = "Endre denne menybeholderen";
-App::$strings["Add menu element"] = "Legg til menyelement";
-App::$strings["Delete this menu item"] = "Slett dette menyelementet";
-App::$strings["Edit this menu item"] = "Endre dette menyelementet";
-App::$strings["Menu item not found."] = "Menyelement ble ikke funnet.";
-App::$strings["Menu item deleted."] = "Menyelement slettet.";
-App::$strings["Menu item could not be deleted."] = "Menyelement kunne ikke bli slettet.";
-App::$strings["Edit Menu Element"] = "Endre menyelement";
-App::$strings["Link text"] = "Lenketekst";
-App::$strings["vcard"] = "";
-App::$strings["Files: shared with me"] = "Filer: delt med meg";
-App::$strings["NEW"] = "NY";
-App::$strings["Last Modified"] = "Sist endret";
-App::$strings["Remove all files"] = "Fjern alle filer";
-App::$strings["Remove this file"] = "Fjern denne filen";
-App::$strings["Documentation Search"] = "Søk i dokumentasjon";
-App::$strings["Members"] = "Medlemmer";
-App::$strings["Administrators"] = "";
-App::$strings["Developers"] = "";
-App::$strings["Tutorials"] = "";
-App::$strings["\$Projectname Documentation"] = "\$Projectname dokumentasjon";
-App::$strings["Contents"] = "";
+App::$strings["Nothing to import."] = "Ingenting å importere.";
+App::$strings["Unable to download data from old server"] = "Ikke i stand til å laste ned data fra gammel tjener";
+App::$strings["Your service plan only allows %d channels."] = "Din tjenesteplan tillater bare %d kanaler.";
+App::$strings["No channel. Import failed."] = "Ingen kanal. Import mislyktes.";
+App::$strings["Channel exists but has been marked removed on this hub. Import failed."] = "";
+App::$strings["Automatic content and files import was not possible due to API version incompatiblity. Please import content and files manually!"] = "";
+App::$strings["You must be logged in to use this feature."] = "Du må være innlogget for å bruke denne funksjonen.";
+App::$strings["Channel Import"] = "";
+App::$strings["Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file."] = "Bruk dette skjemaet for å importere en eksisterende kanal fra en annen tjener/hub. Du kan hente inn kanalidentiteten fra den gamle tjeneren/huben via nettverket eller ved å bruke en eksportfil.";
+App::$strings["Or provide the old server/hub details"] = "Eller oppgi detaljene fra den gamle tjeneren/hub-en";
+App::$strings["Your old identity address (xyz@example.com)"] = "Din gamle identitetsadresse (xyz@example.com)";
+App::$strings["Your old login email address"] = "Din gamle innloggings e-postadresse";
+App::$strings["Your old login password"] = "Ditt gamle innloggingspassord";
+App::$strings["Import your items and files (limited by available memory)"] = "";
+App::$strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = "Enten du tar det ene eller det andre valget, vennligst angi om du vil at denne hubben skal være din nye primære adresse, eller om din gamle plassering skal fortsette å ha denne rollen. Du kan lage innlegg fra den ene eller den andre plasseringen, men bare en av dem kan markeres som den primære plasseringen for filer, bilder og media.";
+App::$strings["Make this hub my primary location"] = "Gjør dette nettstedet til min primære plassering";
+App::$strings["Move this channel (disable all previous locations)"] = "";
+App::$strings["Use this channel nickname instead of the one provided"] = "";
+App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "";
+App::$strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Denne prosessen kan ta flere minutter å fullføre. Vennligst send inn dette skjemaet bare en gang og la siden være åpen inntil den er ferdig.";
+App::$strings["Page link"] = "Sidelenke";
+App::$strings["Edit Webpage"] = "Endre webside";
+App::$strings["Enter a folder name"] = "";
+App::$strings["or select an existing folder (doubleclick)"] = "";
+App::$strings["Invalid profile identifier."] = "Ugyldig profil-identifikator.";
+App::$strings["Profile Visibility Editor"] = "Endre profilsynlighet";
+App::$strings["Click on a contact to add or remove."] = "Klikk på en kontakt for å legge til eller fjerne.";
+App::$strings["Visible To"] = "Synlig for";
+App::$strings["All Connections"] = "Alle forbindelser";
+App::$strings["Permissions denied."] = "Tillatelse avvist.";
+App::$strings["Today"] = "Idag";
+App::$strings["Entry censored"] = "";
+App::$strings["Entry OK"] = "";
+App::$strings["network"] = "nettverk";
+App::$strings["This setting requires special processing and editing has been blocked."] = "Denne innstillingen krever spesiell behandling og redigering har blitt blokkert.";
+App::$strings["Configuration Editor"] = "Konfigurasjonsbehandler";
+App::$strings["Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature."] = "Advarsel: kanalen din kan slutte å virke ved endring av enkelte innstillinger. Vennligst forlat denne siden med mindre du er komfortabel med dette og vet hvordan du bruker denne funksjonen riktig.";
+App::$strings["Xchan Lookup"] = "Xchan oppslag";
+App::$strings["Lookup xchan beginning with (or webbie): "] = "Slå opp xchan som begynner med (eller webbie): ";
+App::$strings["Email address required"] = "";
+App::$strings["No password provided"] = "";
+App::$strings["Terms of Service not accepted"] = "";
+App::$strings["Invitation code succesfully applied"] = "";
+App::$strings["Invitation not in time or too late"] = "";
+App::$strings["Invitation email failed"] = "";
+App::$strings["Invitation code failed"] = "";
+App::$strings["Invitations are not available"] = "";
+App::$strings["Registration on this hub is by invitation only"] = "";
+App::$strings["New register request"] = "";
+App::$strings["Error creating dId A"] = "";
+App::$strings["Registration on this hub is disabled."] = "Registrering ved dette nettstedet er skrudd av.";
+App::$strings["Why do you want to join this hub?"] = "";
+App::$strings["This will help to review your registration"] = "";
+App::$strings["Registration on this hub is by approval only."] = "Registrering ved dette nettstedet skjer på godkjenning.";
+App::$strings["Register at another affiliated hub in case when prefered"] = "";
+App::$strings["Registration on this hub is by invitation only."] = "";
+App::$strings["Register at another affiliated hub"] = "";
+App::$strings["Terms of Service"] = "Tjenesteavtale";
+App::$strings["I accept the %s for this website"] = "Jeg godtar %s for dette nettstedet";
+App::$strings["I am over %s years of age and accept the %s for this website"] = "Jeg er mer enn %s år gammel, og godtar %s for dette nettstedet";
+App::$strings["Your email address"] = "Din e-postadresse";
+App::$strings["Choose a password"] = "Velg et passord";
+App::$strings["Please re-enter your password"] = "Vennligst skriv ditt passord en gang til";
+App::$strings["Please enter your invitation code"] = "Vennligst skriv din invitasjonskode";
+App::$strings["Your name"] = "Navn";
+App::$strings["Real name is preferred"] = "";
+App::$strings["Your nickname will be used to create an easy to remember channel address"] = "";
+App::$strings["Registration"] = "Registrering";
+App::$strings["I have an invite code"] = "";
+App::$strings["This site has exceeded the number of allowed daily account registrations."] = "";
+App::$strings["Public Hubs"] = "Offentlige huber";
+App::$strings["The listed hubs allow public registration for the \$Projectname network. All hubs in the network are interlinked so membership on any of them conveys membership in the network as a whole. Some hubs may require subscription or provide tiered service plans. The hub itself <strong>may</strong> provide additional details."] = "Nettstedene på listen tillater offentlig registrering i \$Projectname-nettverket. Alle nettsteder i nettverket er forbundet så medlemskap på enhver av dem formidler medlemskap i nettverket som helhet. Noen nettsteder kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Nettstedene selv <strong>kan</strong> gi tilleggsopplysninger.";
+App::$strings["Hub URL"] = "Nettstedets URL";
+App::$strings["Access Type"] = "Tilgangstype";
+App::$strings["Registration Policy"] = "Retningslinjer for registrering";
+App::$strings["Stats"] = "Statistikk";
+App::$strings["Software"] = "Programvare";
+App::$strings["Ratings"] = "Vurderinger";
+App::$strings["Rate"] = "Vurder";
+App::$strings["Thing updated"] = "Tingen er oppdatert";
+App::$strings["Object store: failed"] = "Objektlagring: mislyktes";
+App::$strings["Thing added"] = "Ting lagt til";
+App::$strings["OBJ: %1\$s %2\$s %3\$s"] = "OBJ: %1\$s %2\$s %3\$s";
+App::$strings["item not found."] = "element ble ikke funnet.";
+App::$strings["Edit Thing"] = "Endre ting";
+App::$strings["Select a profile"] = "Velg en profil";
+App::$strings["Post an activity"] = "Legg inn en aktivitet";
+App::$strings["Only sends to viewers of the applicable profile"] = "Sender bare til seere av den aktuelle profilen";
+App::$strings["Name of thing e.g. something"] = "Navn på ting for eksempel noe";
+App::$strings["URL of thing (optional)"] = "URL til ting (valgfritt)";
+App::$strings["URL for photo of thing (optional)"] = "URL til bilde av ting (valgfritt)";
+App::$strings["Add Thing to your Profile"] = "Legg til ting i din profil";
+App::$strings["Welcome to %s"] = "Velkommen til %s";
+App::$strings["Block Title"] = "Byggeklossens tittel";
+App::$strings["Settings updated."] = "Innstillinger oppdatert.";
+App::$strings["Connection Default Permissions"] = "Forbindelsens standard tillatelser";
+App::$strings["Apply these permissions automatically"] = "Bruk disse tillatelsene automatisk";
+App::$strings["If enabled, connection requests will be approved without your interaction"] = "";
+App::$strings["Permission role"] = "";
+App::$strings["Add permission role"] = "";
+App::$strings["Automatic approval settings"] = "";
+App::$strings["My Settings"] = "Mine innstillinger";
+App::$strings["Some individual permissions may have been preset or locked based on your channel type and privacy settings."] = "";
+App::$strings["No valid account found."] = "Ingen gyldig konto funnet.";
+App::$strings["Password reset request issued. Check your email."] = "Forespørsel om å tilbakestille passord er mottatt. Sjekk e-posten din.";
+App::$strings["Site Member (%s)"] = "Nettstedsmedlem (%s)";
+App::$strings["Password reset requested at %s"] = "Forespurt om å tilbakestille passord hos %s";
+App::$strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Forespørsel kunne ikke bekreftes. (Du kan ha sendt den inn tidligere.) Tilbakestilling av passord mislyktes.";
+App::$strings["Your password has been reset as requested."] = "Ditt passord har blitt tilbakestilt som forespurt.";
+App::$strings["Your new password is"] = "Ditt nye passord er";
+App::$strings["Save or copy your new password - and then"] = "Lagre eller kopier ditt nye passord, og deretter kan du";
+App::$strings["click here to login"] = "klikke her for å logge inn";
+App::$strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Ditt passord kan endres på siden <em>Innstillinger</em> etter vellykket innlogging.";
+App::$strings["Your password has changed at %s"] = "Ditt passord er endret hos %s";
+App::$strings["Forgot your Password?"] = "Glemt passord ditt?";
+App::$strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Skriv e-postadressen din og send inn for å tilbakestille passordet ditt. Sjekk deretter din e-post for videre instruksjoner.";
+App::$strings["Email Address"] = "E-postadresse";
+App::$strings["Reset"] = "Tilbakestill";
+App::$strings["Location not found."] = "Plassering er ikke funnet.";
+App::$strings["Location lookup failed."] = "Oppslag på plassering mislyktes.";
+App::$strings["Please select another location to become primary before removing the primary location."] = "Vennligst velg en annen plassering som primær før du sletter gjeldende primære plassering.";
+App::$strings["Syncing locations"] = "Synkroniserer plasseringer";
+App::$strings["No locations found."] = "Ingen plasseringer ble funnet.";
+App::$strings["Manage Channel Locations"] = "Håndter kanalplasseringer";
+App::$strings["Primary"] = "Primær";
+App::$strings["Sync Now"] = "Synkroniser nå";
+App::$strings["Please wait several minutes between consecutive operations."] = "Vennligst vent flere minutter mellom hver etterfølgende operasjon.";
+App::$strings["When possible, drop a location by logging into that website/hub and removing your channel."] = "Når mulig, fjern en plassering ved å logge inn på det nettstedet eller den hub-en og fjern din kanal.";
+App::$strings["Use this form to drop the location if the hub is no longer operating."] = "Bruk dette skjemaet for å fjerne plasseringen hvis huben ikke er i drift lenger.";
+App::$strings["Account not found."] = "Kontoen ble ikke funnet";
+App::$strings["Multifactor Verification"] = "";
+App::$strings["Please enter the verification key from your authenticator app"] = "";
+App::$strings["Verify"] = "";
+App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+App::$strings["Poll not found."] = "Fant ikke spørreskjema.";
+App::$strings["Invalid response."] = "";
+App::$strings["Response submitted. Updates may not appear instantly."] = "";
+App::$strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Hold nede Shift-knappen og last siden på nytt eller tøm nettleserens mellomlager hvis det nye bildet ikke vises umiddelbart.";
+App::$strings["This profile photo will be visible to anybody on the internet and may be distributed to other websites."] = "Dette profilbildet vil være synlig for enhver besøkende, og kan bli gjort tilgjengelig på andre nettsteder.";
+App::$strings["This profile photo will be visible only to channels with permission to view this profile."] = "";
+App::$strings["Use Photo for Profile"] = "";
+App::$strings["Change Profile Photo"] = "Endre profilbilde";
+App::$strings["Reset to default"] = "Sett tilbake til standard";
+App::$strings["Select existing"] = "Velg eksisterende bilde";
+App::$strings["Done editing"] = "Lagre endringer";
App::$strings["Import Webpage Elements"] = "";
App::$strings["Import selected"] = "";
App::$strings["Export Webpage Elements"] = "";
@@ -2177,26 +1930,43 @@ App::$strings["Export selected"] = "";
App::$strings["Actions"] = "Handlinger";
App::$strings["Page Link"] = "Sidelenke";
App::$strings["Page Title"] = "Sidetittel";
-App::$strings["Created"] = "Laget";
-App::$strings["Edited"] = "Endret";
App::$strings["Invalid file type."] = "";
App::$strings["Error opening zip file"] = "";
App::$strings["Invalid folder path."] = "";
App::$strings["No webpage elements detected."] = "";
App::$strings["Import complete."] = "";
-App::$strings["Deprecated!"] = "";
-App::$strings["Permission Denied."] = "Tillatelse avvist.";
-App::$strings["Edit file permissions"] = "Endre filtillatelser";
-App::$strings["Include all files and sub folders"] = "Inkluder alle filer og undermapper";
-App::$strings["Return to file list"] = "Gå tilbake til filoversikten";
-App::$strings["Copy/paste this code to attach file to a post"] = "Kopier og lim inn denne koden for å legge til filen i et innlegg";
-App::$strings["Copy/paste this URL to link file from a web page"] = "Kopier og lim inn denne URL-en for å lenke til filen fra en webside";
-App::$strings["Share this file"] = "Del denne filen";
-App::$strings["Show URL to this file"] = "Vis URLen til denne filen";
-App::$strings["Show in your contacts shared folder"] = "";
-App::$strings["Tag removed"] = "Merkelapp fjernet";
-App::$strings["Remove Item Tag"] = "Fjern merkelapp fra element";
-App::$strings["Select a tag to remove: "] = "Velg merkelapp å fjerne: ";
+App::$strings["Active"] = "Aktiv";
+App::$strings["Blocked"] = "Blokkert";
+App::$strings["Ignored"] = "Ignorert";
+App::$strings["Hidden"] = "Skjult";
+App::$strings["Archived/Unreachable"] = "Arkivert/utilgjengelig";
+App::$strings["Active Connections"] = "Aktive forbindelser";
+App::$strings["Show active connections"] = "";
+App::$strings["New Connections"] = "Nye forbindelser";
+App::$strings["Show pending (new) connections"] = "Vis ventende (nye) forbindelser";
+App::$strings["Only show blocked connections"] = "Vis bare forbindelser som er blokkert";
+App::$strings["Only show ignored connections"] = "Vis bare ignorerte forbindelser";
+App::$strings["Only show archived/unreachable connections"] = "";
+App::$strings["Only show hidden connections"] = "Vis bare skjulte forbindelser";
+App::$strings["Show all connections"] = "Vis alle forbindelser";
+App::$strings["Pending approval"] = "Venter på godkjenning";
+App::$strings["Archived"] = "Arkivert";
+App::$strings["Not connected at this location"] = "";
+App::$strings["%1\$s [%2\$s]"] = "%1\$s [%2\$s]";
+App::$strings["Edit connection"] = "Endre forbindelse";
+App::$strings["Delete connection"] = "Slett forbindelse";
+App::$strings["Channel address"] = "Kanaladresse";
+App::$strings["Call"] = "";
+App::$strings["Status"] = "Status";
+App::$strings["Connected"] = "Forbundet";
+App::$strings["Approve connection"] = "Godkjenn forbindelse";
+App::$strings["Ignore connection"] = "Ignorer forbindelse";
+App::$strings["Recent activity"] = "Nylig aktivitet";
+App::$strings["Connect at this location"] = "";
+App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Du har %1$.0f av %2$.0f tillate forbindelser.";
+App::$strings["Search your connections"] = "Søk blant dine forbindelser";
+App::$strings["Contact search"] = "";
+App::$strings["This is a group/forum channel"] = "";
App::$strings["Continue"] = "Fortsett";
App::$strings["Premium Channel Setup"] = "Premiumkanal-oppsett";
App::$strings["Enable premium channel connection restrictions"] = "Slå på restriksjoner for forbindelse med premiumkanal";
@@ -2206,112 +1976,71 @@ App::$strings["Potential connections will then see the following text before pro
App::$strings["By continuing, I certify that I have complied with any instructions provided on this page."] = "Ved å fortsette bekrefter jeg at jeg har oppfylt alle instruksjoner gitt på denne siden.";
App::$strings["(No specific instructions have been provided by the channel owner.)"] = "(Ingen spesifikke instruksjoner er gitt av kanaleieren.)";
App::$strings["Restricted or Premium Channel"] = "Begrenset kanal eller premiumkanal";
-App::$strings["Post repeated"] = "";
-App::$strings["network"] = "nettverk";
-App::$strings["Item is not editable"] = "Elementet kan ikke endres";
-App::$strings["Edit post"] = "Endre innlegg";
-App::$strings["Post not found."] = "";
-App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s merket %3\$s til %2\$s med %4\$s";
-App::$strings["Unknown App"] = "";
-App::$strings["Authorize"] = "";
-App::$strings["Do you authorize the app %s to access your channel data?"] = "";
-App::$strings["Deny"] = "Avslå";
-App::$strings["Max queueworker threads"] = "";
-App::$strings["Minimum 4, default 4"] = "";
-App::$strings["Assume workers dead after"] = "";
-App::$strings["Minimum 120, default 300 seconds"] = "";
-App::$strings["Pause before starting next task"] = "";
-App::$strings["Minimum 100, default 100 microseconds"] = "";
-App::$strings["Automatically adjust pause before starting next task"] = "";
-App::$strings["Queueworker Settings"] = "";
-App::$strings["Queue Statistics"] = "Køstatistikk";
-App::$strings["Total Entries"] = "Totalt antall oppføringer";
-App::$strings["Priority"] = "Prioritet";
-App::$strings["Destination URL"] = "Mål-URL";
-App::$strings["Mark hub permanently offline"] = "Merk hub som permanent offline";
-App::$strings["Retry delivery to this hub"] = "";
-App::$strings["Empty queue for this hub"] = "Tøm køen for denne hubben";
-App::$strings["Last known contact"] = "Siste kjente kontakt";
-App::$strings["Theme settings updated."] = "Temainnstillinger er oppdatert.";
-App::$strings["No themes found."] = "Ingen temaer er funnet.";
-App::$strings["Disable"] = "Skru av";
-App::$strings["Enable"] = "Skru på";
-App::$strings["Screenshot"] = "Skjermbilde";
-App::$strings["Administration"] = "Administrasjon";
-App::$strings["Toggle"] = "Skru av og på";
-App::$strings["Author: "] = "Forfatter: ";
-App::$strings["Maintainer: "] = "Vedlikeholder: ";
-App::$strings["[Experimental]"] = "[Eksperimentelt]";
-App::$strings["[Unsupported]"] = "[Ingen støtte]";
-App::$strings["Lock feature %s"] = "Lås funksjon %s";
-App::$strings["Manage Additional Features"] = "Håndter tilleggsfunksjoner";
-App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "Ufiltrert HTML er i utgangspunktet tillatt i innebygde media. Dette er en sikkerhetsrisiko.";
-App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "Det anbefales at man kun tillater ufiltrert HTML fra følgende nettsteder:";
-App::$strings["https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />"] = "https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />";
-App::$strings["All other embedded content will be filtered, <strong>unless</strong> embedded content from that site is explicitly blocked."] = "Alt annet innebygget innhold vil bli filtrert, <strong>med mindre</strong> innebygget innhold fra den aktuelle siden eksplisitt er blokkert.";
-App::$strings["Block public"] = "Blokker offentlig tilgang";
-App::$strings["Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated."] = "Kryss av for å blokkere tilgang til alle personlige sider som ellers ville vært offentlig tilgjengelige på dette nettstedet med mindre du er logget inn.";
-App::$strings["Provide a cloud root directory"] = "";
-App::$strings["The cloud root directory lists all channel names which provide public files"] = "";
-App::$strings["Show total disk space available to cloud uploads"] = "";
-App::$strings["Set \"Transport Security\" HTTP header"] = "Slå på \"Transport Security\" i HTTP meldingshodet";
-App::$strings["Set \"Content Security Policy\" HTTP header"] = "Sett \"Content Security Policy\" i HTTP meldingshodet";
-App::$strings["Allowed email domains"] = "Tillate e-postdomener";
-App::$strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Kommaseparert liste med domener som er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt";
-App::$strings["Not allowed email domains"] = "Ikke tillatte e-postdomener";
-App::$strings["Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined."] = "Kommaseparert liste med domener som ikke er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt, med mindre tillate domener er blitt definert.";
-App::$strings["Allow communications only from these sites"] = "Tillat kommunikasjon med bare disse nettstedene";
-App::$strings["One site per line. Leave empty to allow communication from anywhere by default"] = "Et nettsted per linje. La det stå tomt for å tillate kommunikasjon med ethvert nettsted som standard";
-App::$strings["Block communications from these sites"] = "Blokker kommunikasjon fra disse nettstedene";
-App::$strings["Allow communications only from these channels"] = "Tillat kommunikasjon med bare disse kanalene";
-App::$strings["One channel (hash) per line. Leave empty to allow from any channel by default"] = "En kanal (hash) per linje. La det stå tomt for å tillate enhver kanal som standard";
-App::$strings["Block communications from these channels"] = "Blokker kommunikasjon fra disse kanalene";
-App::$strings["Only allow embeds from secure (SSL) websites and links."] = "Kun tillat innebygget innhold fra sikre (HTTPS) nettsteder og lenker.";
-App::$strings["Allow unfiltered embedded HTML content only from these domains"] = "Kun tillat ufiltrert innebygget innhold fra disse domenene";
-App::$strings["One site per line. By default embedded content is filtered."] = "Ett nettsted pr. linje. Innebygget innhold er filtrert i utgangsounktet.";
-App::$strings["Block embedded HTML from these domains"] = "Blokker innbygget HTML fra disse domenene";
-App::$strings["Allow SVG thumbnails in file browser"] = "";
-App::$strings["WARNING: SVG images may contain malicious code."] = "";
-App::$strings["Allow embedded (inline) PDF files"] = "";
-App::$strings["Additional trusted directory server URLs"] = "Standard katalogtjener";
-App::$strings["Accept directory flags (spam, nsfw) from those servers. One per line like https://example.tld"] = "";
-App::$strings["%s account blocked/unblocked"] = array(
- 0 => "%s konto blokkert/ikke blokkert lenger",
- 1 => "%s kontoer blokkert/ikke blokkert lenger",
-);
-App::$strings["%s account deleted"] = array(
- 0 => "%s konto slettet",
- 1 => "%s kontoer slettet",
-);
-App::$strings["Account not found"] = "Kontoen ble ikke funnet";
-App::$strings["Account '%s' blocked"] = "Kontoen '%s' blokkert";
-App::$strings["Account '%s' unblocked"] = "Kontoen '%s' er ikke blokkert lenger";
-App::$strings["Unverified"] = "";
-App::$strings["Expired"] = "";
-App::$strings["Show verified registrations"] = "";
-App::$strings["Show all registrations"] = "";
-App::$strings["Select toggle"] = "";
-App::$strings["Deny selected"] = "";
-App::$strings["Approve selected"] = "";
-App::$strings["All registrations"] = "";
-App::$strings["Verified registrations waiting for approval"] = "";
-App::$strings["Request date"] = "Dato for forespørsel";
-App::$strings["Requests"] = "";
-App::$strings["No registrations available"] = "";
-App::$strings["No verified registrations available"] = "";
-App::$strings["Block"] = "Blokker";
-App::$strings["Unblock"] = "Ikke blokker lenger";
-App::$strings["Verified"] = "";
-App::$strings["Not yet verified"] = "";
-App::$strings["ID"] = "ID";
-App::$strings["All channels"] = "";
-App::$strings["Register date"] = "Registreringsdato";
-App::$strings["Last login"] = "Siste innlogging";
-App::$strings["Expires"] = "Utløper";
-App::$strings["Service class"] = "";
-App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Valgte kontoer vil bli slettet!\\n\\nAlt disse kontoene har lagt inn på dette nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil slette disse valgte kontoene?";
-App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Kontoen {0} vl bli slettet!\\n\\nAlt denne kontoen har lagt inn på dette nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil slette denne kontoen?";
-App::$strings["Message"] = "Melding";
+App::$strings["Affinity Tool settings updated."] = "";
+App::$strings["The numbers below represent the minimum and maximum slider default positions for your network/stream page as a percentage."] = "";
+App::$strings["Default maximum affinity level"] = "";
+App::$strings["0-99 default 99"] = "Standard";
+App::$strings["Default minimum affinity level"] = "";
+App::$strings["0-99 - default 0"] = "Standard";
+App::$strings["Persistent affinity levels"] = "";
+App::$strings["If disabled the max and min levels will be reset to default after page reload"] = "";
+App::$strings["Affinity Tool Settings"] = "";
+App::$strings["About this site"] = "Om dette nettstedet ";
+App::$strings["Site Name"] = "Nettstedets navn";
+App::$strings["Site Information"] = "Nettstedsinformasjon";
+App::$strings["Administrator"] = "Administrator";
+App::$strings["Software and Project information"] = "Program- og prosjektinformasjon";
+App::$strings["This site is powered by \$Projectname"] = "Dette nettstedet drives av \$Projectname";
+App::$strings["Federated and decentralised networking and identity services provided by"] = "Fødererte og desentraliserte nettverks- og identitetstjenester via Zot";
+App::$strings["Additional federated transport protocols:"] = "Øvrige fødererte transportprotokoller:";
+App::$strings["Version %s"] = "Versjon %s";
+App::$strings["Project homepage"] = "Prosjektets hjemmeside";
+App::$strings["Developer homepage"] = "Utviklers hjemmeside";
+App::$strings["Active addons"] = "Aktive tillegg";
+App::$strings["Blocked sites"] = "Byggeklossens tittel";
+App::$strings["Item sync completed!"] = "";
+App::$strings["Import host does not seem to be online or compatible"] = "";
+App::$strings["Item sync completed but no items were found!"] = "";
+App::$strings["File sync completed!"] = "";
+App::$strings["File sync completed but no files were found!"] = "";
+App::$strings["Channel clone status"] = "";
+App::$strings["Item sync status"] = "";
+App::$strings["File sync status"] = "";
+App::$strings["Channel cloning completed!"] = "";
+App::$strings["Resume"] = "";
+App::$strings["Only resume if sync stalled!"] = "";
+App::$strings["This site is not a directory server"] = "Dette nettstedet er ikke en katalogtjener";
+App::$strings["This directory server requires an access token"] = "Denne katalogtjeneren krever en tilgangsnøkkel (access token)";
+App::$strings["Deprecated!"] = "";
+App::$strings["File not found."] = "Filen ble ikke funnet.";
+App::$strings["Permission Denied."] = "Tillatelse avvist.";
+App::$strings["Edit file permissions"] = "Endre filtillatelser";
+App::$strings["Set/edit permissions"] = "Angi/endre tillatelser";
+App::$strings["Include all files and sub folders"] = "Inkluder alle filer og undermapper";
+App::$strings["Return to file list"] = "Gå tilbake til filoversikten";
+App::$strings["Share this file"] = "Del denne filen";
+App::$strings["Show URL to this file"] = "Vis URLen til denne filen";
+App::$strings["Layout not found"] = "Layouten ble ikke funnet.";
+App::$strings["This template does not support pdledi_gui (no content regions defined)"] = "";
+App::$strings["Main page content"] = "";
+App::$strings["The main page content can not be edited!"] = "";
+App::$strings["Layout updated."] = "Layout er oppdatert.";
+App::$strings["Edit System Page Description"] = "Endre beskrivelsen av systemsiden";
+App::$strings["(modified)"] = "(endret)";
+App::$strings["Layout not found."] = "Layouten ble ikke funnet.";
+App::$strings["Module Name:"] = "Modulnavn:";
+App::$strings["Layout Help"] = "Layout-hjelp";
+App::$strings["Edit another layout"] = "";
+App::$strings["System layout"] = "";
+App::$strings["Item approved"] = "Konto godkjent.";
+App::$strings["Account removals are not allowed within 48 hours of changing the account password."] = "Sletting av kontoer er ikke tillatt innen 48 timer etter endring av kontopassordet.";
+App::$strings["Remove This Account"] = "Slett denne kontoen";
+App::$strings["WARNING: "] = "ADVARSEL: ";
+App::$strings["This account and all its channels will be completely removed from the network. "] = "Denne kontoen og alle dens kanaler vil bli fullstendig fjernet fra nettverket. ";
+App::$strings["This action is permanent and can not be undone!"] = "Denne handlingen er permanent og kan ikke angres!";
+App::$strings["Please enter your password for verification:"] = "Vennligst skriv ditt passord for å få bekreftelse:";
+App::$strings["Remove Account"] = "Slett konto";
+App::$strings["Please login."] = "Vennligst logg inn.";
App::$strings["Invalid input"] = "";
App::$strings["Errors"] = "";
App::$strings["Site settings updated."] = "Nettstedsinnstillinger er oppdatert.";
@@ -2326,24 +2055,22 @@ App::$strings["My site has free access only"] = "Mitt nettsted har kun gratis ti
App::$strings["My site offers free accounts with optional paid upgrades"] = "Mitt nettsted tilbyr gratis konto med valgfri oppgradering til betalt tjeneste";
App::$strings["Default permission role for new accounts"] = "";
App::$strings["This role will be used for the first channel created after registration."] = "";
-App::$strings["Minute(s)"] = "";
-App::$strings["Hour(s)"] = "";
-App::$strings["Day(s)"] = "";
App::$strings["Week(s)"] = "";
App::$strings["Month(s)"] = "";
App::$strings["Year(s)"] = "";
App::$strings["Register verification delay"] = "";
App::$strings["Time to wait before a registration can be verified"] = "";
-App::$strings["duration up from now"] = "";
App::$strings["Register verification expiration time"] = "";
App::$strings["Time before an unverified registration will expire"] = "";
+App::$strings["Administration"] = "Administrasjon";
+App::$strings["Site"] = "Nettsted";
App::$strings["File upload"] = "Last opp fil";
App::$strings["Policies"] = "Retningslinjer";
+App::$strings["Site name"] = "Nettstedets navn";
App::$strings["Banner/Logo"] = "Banner/Logo";
App::$strings["Unfiltered HTML/CSS/JS is allowed"] = "";
App::$strings["Administrator Information"] = "Administratorinformasjon";
App::$strings["Contact information for site administrators. Displayed on siteinfo page. BBCode can be used here"] = "Kontaktinformasjon til nettstedsadministratorer. Vises på siteinfo-siden. BBCode kan brukes her";
-App::$strings["Site Information"] = "Nettstedsinformasjon";
App::$strings["Publicly visible description of this site. Displayed on siteinfo page. BBCode can be used here"] = "";
App::$strings["System theme"] = "Systemtema";
App::$strings["Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"] = "Standard systemtema - kan overstyres av brukerprofiler - <a href='#' id='cnftheme'>endre temainnstillinger</a>";
@@ -2393,7 +2120,6 @@ App::$strings["Restrict the public stream to content originating at this site"]
App::$strings["Allow anybody on the internet to access the public streams"] = "";
App::$strings["Disable to require authentication before viewing"] = "";
App::$strings["Only import Public stream posts with this text"] = "";
-App::$strings["words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts"] = "ord per linje eller #merkelapper eller /mønster/ eller språk lang=xx, la stå blankt for å importere alle innlegg";
App::$strings["Do not import Public stream posts with this text"] = "";
App::$strings["Login on Homepage"] = "Logg inn på hjemmesiden";
App::$strings["Present a login box to visitors on the home page if no other content has been configured."] = "Presenter en innloggingsboks til besøkende på hjemmesiden hvis ikke noe annet innhold har blitt konfigurert.";
@@ -2430,12 +2156,102 @@ App::$strings["Default: profiles"] = "";
App::$strings["Optional: site location"] = "";
App::$strings["Region or country"] = "";
App::$strings["Invalid 24h time value (hhmm/hmm)"] = "";
-App::$strings["Log settings updated."] = "Logginnstillinger er oppdatert.";
-App::$strings["Clear"] = "Tøm";
-App::$strings["Debugging"] = "Feilsøking";
-App::$strings["Log file"] = "Loggfil";
-App::$strings["Must be writable by web server. Relative to your top-level webserver directory."] = "";
-App::$strings["Log level"] = "Loggnivå";
+App::$strings["Update has been marked successful"] = "Oppdateringen har blitt merket som en suksess";
+App::$strings["Verification of update %s failed. Check system logs."] = "";
+App::$strings["Update %s was successfully applied."] = "Oppdatering %s ble gjennomført med suksess.";
+App::$strings["Verifying update %s did not return a status. Unknown if it succeeded."] = "";
+App::$strings["Update %s does not contain a verification function."] = "";
+App::$strings["Update function %s could not be found."] = "Oppdatering av funksjon %s kunne ikke finnes.";
+App::$strings["Executing update procedure %s failed. Check system logs."] = "";
+App::$strings["Update %s did not return a status. It cannot be determined if it was successful."] = "";
+App::$strings["Failed Updates"] = "Mislykkede oppdateringer";
+App::$strings["Mark success (if update was manually applied)"] = "Marker suksess (hvis oppdateringen ble gjennomført manuelt)";
+App::$strings["Attempt to verify this update if a verification procedure exists"] = "";
+App::$strings["Attempt to execute this update step automatically"] = "Prøv å gjennomføre dette oppdateringstrinnet automatisk";
+App::$strings["No failed updates."] = "Ingen mislykkede oppdateringer.";
+App::$strings["%s account blocked/unblocked"] = array(
+ 0 => "%s konto blokkert/ikke blokkert lenger",
+ 1 => "%s kontoer blokkert/ikke blokkert lenger",
+);
+App::$strings["%s account deleted"] = array(
+ 0 => "%s konto slettet",
+ 1 => "%s kontoer slettet",
+);
+App::$strings["Account not found"] = "Kontoen ble ikke funnet";
+App::$strings["Account '%s' blocked"] = "Kontoen '%s' blokkert";
+App::$strings["Account '%s' unblocked"] = "Kontoen '%s' er ikke blokkert lenger";
+App::$strings["Unverified"] = "";
+App::$strings["Expired"] = "";
+App::$strings["Accounts"] = "Kontoer";
+App::$strings["Show verified registrations"] = "";
+App::$strings["Show all registrations"] = "";
+App::$strings["Select toggle"] = "";
+App::$strings["Deny selected"] = "";
+App::$strings["Approve selected"] = "";
+App::$strings["All registrations"] = "";
+App::$strings["Verified registrations waiting for approval"] = "";
+App::$strings["Request date"] = "Dato for forespørsel";
+App::$strings["Requests"] = "";
+App::$strings["No registrations available"] = "";
+App::$strings["No verified registrations available"] = "";
+App::$strings["Deny"] = "Avslå";
+App::$strings["Verified"] = "";
+App::$strings["Not yet verified"] = "";
+App::$strings["ID"] = "ID";
+App::$strings["All channels"] = "";
+App::$strings["Register date"] = "Registreringsdato";
+App::$strings["Last login"] = "Siste innlogging";
+App::$strings["Expires"] = "Utløper";
+App::$strings["Service class"] = "";
+App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Valgte kontoer vil bli slettet!\\n\\nAlt disse kontoene har lagt inn på dette nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil slette disse valgte kontoene?";
+App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Kontoen {0} vl bli slettet!\\n\\nAlt denne kontoen har lagt inn på dette nettstedet vil bli slettet permanent!\\n\\nEr du sikker på at du vil slette denne kontoen?";
+App::$strings["Message"] = "Melding";
+App::$strings["Max queueworker threads"] = "";
+App::$strings["Minimum 4, default 4"] = "";
+App::$strings["Assume workers dead after"] = "";
+App::$strings["Minimum 120, default 300 seconds"] = "";
+App::$strings["Pause before starting next task"] = "";
+App::$strings["Minimum 100, default 100 microseconds"] = "";
+App::$strings["Automatically adjust pause before starting next task"] = "";
+App::$strings["Queueworker Settings"] = "";
+App::$strings["Password changed for account %d."] = "";
+App::$strings["Account settings updated."] = "";
+App::$strings["Account Edit"] = "";
+App::$strings["New Password"] = "";
+App::$strings["New Password again"] = "";
+App::$strings["Account language (for emails)"] = "";
+App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "Ufiltrert HTML er i utgangspunktet tillatt i innebygde media. Dette er en sikkerhetsrisiko.";
+App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "Det anbefales at man kun tillater ufiltrert HTML fra følgende nettsteder:";
+App::$strings["https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />"] = "https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />";
+App::$strings["All other embedded content will be filtered, <strong>unless</strong> embedded content from that site is explicitly blocked."] = "Alt annet innebygget innhold vil bli filtrert, <strong>med mindre</strong> innebygget innhold fra den aktuelle siden eksplisitt er blokkert.";
+App::$strings["Security"] = "Sikkerhet";
+App::$strings["Block public"] = "Blokker offentlig tilgang";
+App::$strings["Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated."] = "Kryss av for å blokkere tilgang til alle personlige sider som ellers ville vært offentlig tilgjengelige på dette nettstedet med mindre du er logget inn.";
+App::$strings["Provide a cloud root directory"] = "";
+App::$strings["The cloud root directory lists all channel names which provide public files"] = "";
+App::$strings["Show total disk space available to cloud uploads"] = "";
+App::$strings["Set \"Transport Security\" HTTP header"] = "Slå på \"Transport Security\" i HTTP meldingshodet";
+App::$strings["Set \"Content Security Policy\" HTTP header"] = "Sett \"Content Security Policy\" i HTTP meldingshodet";
+App::$strings["Allowed email domains"] = "Tillate e-postdomener";
+App::$strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Kommaseparert liste med domener som er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt";
+App::$strings["Not allowed email domains"] = "Ikke tillatte e-postdomener";
+App::$strings["Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined."] = "Kommaseparert liste med domener som ikke er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt, med mindre tillate domener er blitt definert.";
+App::$strings["Allow communications only from these sites"] = "Tillat kommunikasjon med bare disse nettstedene";
+App::$strings["One site per line. Leave empty to allow communication from anywhere by default"] = "Et nettsted per linje. La det stå tomt for å tillate kommunikasjon med ethvert nettsted som standard";
+App::$strings["Block communications from these sites"] = "Blokker kommunikasjon fra disse nettstedene";
+App::$strings["Allow communications only from these channels"] = "Tillat kommunikasjon med bare disse kanalene";
+App::$strings["One channel (hash) per line. Leave empty to allow from any channel by default"] = "En kanal (hash) per linje. La det stå tomt for å tillate enhver kanal som standard";
+App::$strings["Block communications from these channels"] = "Blokker kommunikasjon fra disse kanalene";
+App::$strings["Only allow embeds from secure (SSL) websites and links."] = "Kun tillat innebygget innhold fra sikre (HTTPS) nettsteder og lenker.";
+App::$strings["Allow unfiltered embedded HTML content only from these domains"] = "Kun tillat ufiltrert innebygget innhold fra disse domenene";
+App::$strings["One site per line. By default embedded content is filtered."] = "Ett nettsted pr. linje. Innebygget innhold er filtrert i utgangsounktet.";
+App::$strings["Block embedded HTML from these domains"] = "Blokker innbygget HTML fra disse domenene";
+App::$strings["Allow SVG thumbnails in file browser"] = "";
+App::$strings["WARNING: SVG images may contain malicious code."] = "";
+App::$strings["Allow embedded (inline) PDF files"] = "";
+App::$strings["Additional trusted directory server URLs"] = "Standard katalogtjener";
+App::$strings["Accept directory flags (spam, nsfw) from those servers. One per line like https://example.tld"] = "";
+App::$strings["Channel not found"] = "Kanalen ble ikke funnet";
App::$strings["%s channel censored/uncensored"] = array(
0 => "%s kanal er sensurert/ikke sensurert lenger",
1 => "%s kanaler er sensurert/ikke sensurert lenger",
@@ -2448,7 +2264,6 @@ App::$strings["%s channel deleted"] = array(
0 => "%s kanal slettet",
1 => "%s kanaler slettet",
);
-App::$strings["Channel not found"] = "Kanalen ble ikke funnet";
App::$strings["Channel '%s' deleted"] = "Kanalen '%s' er slettet";
App::$strings["Channel '%s' censored"] = "Kanalen '%s' er sensurert";
App::$strings["Channel '%s' uncensored"] = "Kanalen '%s' er ikke sensurert lenger";
@@ -2462,43 +2277,16 @@ App::$strings["Disallow Code"] = "Ikke tillat kode";
App::$strings["UID"] = "UID";
App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Valgte kanaler vil bli slettet!\\n\\nAlt innhold som er lagt inn i disse kanalene på dette nettstedet vil bli slettet for alltid!\\n\\nEr du sikker på at du vil slette disse kanalene med alt innhold?";
App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "Kanalen {0} vil bli slettet!\\n\\nAlt innhold som er lagt inn i denne kanalen på dettet nettstedet vil bli slettet for alltid!\\n\\nEr du sikker på at du vil slette denne kanalen med alt innhold?";
-App::$strings["Password changed for account %d."] = "";
-App::$strings["Account settings updated."] = "";
-App::$strings["Account Edit"] = "";
-App::$strings["New Password"] = "";
-App::$strings["New Password again"] = "";
-App::$strings["Account language (for emails)"] = "";
-App::$strings["New Profile Field"] = "Nytt profilfelt";
-App::$strings["Field nickname"] = "Feltets kallenavn";
-App::$strings["System name of field"] = "Systemnavnet til feltet";
-App::$strings["Input type"] = "Inndata-type";
-App::$strings["Field Name"] = "Feltnavn";
-App::$strings["Label on profile pages"] = "Merkelapp på profilsider";
-App::$strings["Help text"] = "Hjelpetekst";
-App::$strings["Additional info (optional)"] = "Tilleggsinformasjon (valgfritt)";
-App::$strings["Field definition not found"] = "Feltdefinisjonen ble ikke funnet";
-App::$strings["Edit Profile Field"] = "Endre profilfelt";
-App::$strings["Basic Profile Fields"] = "Grunnleggende profilfelter";
-App::$strings["Advanced Profile Fields"] = "Utvidede profilfelter";
-App::$strings["(In addition to basic fields)"] = "(I tillegg til grunnleggende felt)";
-App::$strings["All available fields"] = "Alle tilgjengelige felt";
-App::$strings["Custom Fields"] = "";
-App::$strings["Create Custom Field"] = "Legg til egendefinert felt";
-App::$strings["Update has been marked successful"] = "Oppdateringen har blitt merket som en suksess";
-App::$strings["Verification of update %s failed. Check system logs."] = "";
-App::$strings["Update %s was successfully applied."] = "Oppdatering %s ble gjennomført med suksess.";
-App::$strings["Verifying update %s did not return a status. Unknown if it succeeded."] = "";
-App::$strings["Update %s does not contain a verification function."] = "";
-App::$strings["Update function %s could not be found."] = "Oppdatering av funksjon %s kunne ikke finnes.";
-App::$strings["Executing update procedure %s failed. Check system logs."] = "";
-App::$strings["Update %s did not return a status. It cannot be determined if it was successful."] = "";
-App::$strings["Failed Updates"] = "Mislykkede oppdateringer";
-App::$strings["Mark success (if update was manually applied)"] = "Marker suksess (hvis oppdateringen ble gjennomført manuelt)";
-App::$strings["Attempt to verify this update if a verification procedure exists"] = "";
-App::$strings["Attempt to execute this update step automatically"] = "Prøv å gjennomføre dette oppdateringstrinnet automatisk";
-App::$strings["No failed updates."] = "Ingen mislykkede oppdateringer.";
+App::$strings["Lock feature %s"] = "Lås funksjon %s";
+App::$strings["Manage Additional Features"] = "Håndter tilleggsfunksjoner";
App::$strings["Plugin %s disabled."] = "Tilleggsfunksjonen %s er avskrudd.";
App::$strings["Plugin %s enabled."] = "Tilleggsfunksjonen %s er påskrudd.";
+App::$strings["Disable"] = "Skru av";
+App::$strings["Enable"] = "Skru på";
+App::$strings["Addons"] = "Tillegg";
+App::$strings["Toggle"] = "Skru av og på";
+App::$strings["Author: "] = "Forfatter: ";
+App::$strings["Maintainer: "] = "Vedlikeholder: ";
App::$strings["Minimum project version: "] = "Minimum prosjektversjon: ";
App::$strings["Maximum project version: "] = "Maksimum prosjektversjon: ";
App::$strings["Minimum PHP version: "] = "Minimum PHP-versjon: ";
@@ -2511,100 +2299,102 @@ App::$strings["Custom repo name"] = "";
App::$strings["(optional)"] = "Valgfritt";
App::$strings["Download Addon Repo"] = "";
App::$strings["Install new repo"] = "";
-App::$strings["Install"] = "Installer";
App::$strings["Manage Repos"] = "";
App::$strings["Installed Addon Repositories"] = "";
App::$strings["Install a New Addon Repository"] = "";
App::$strings["Switch branch"] = "";
-App::$strings["Installed Apps"] = "Installerte apper";
-App::$strings["Manage Apps"] = "Behandle apper";
-App::$strings["Create Custom App"] = "";
-App::$strings["Some blurb about what to do when you're new here"] = "En standardtekst om hva du bør gjøre som ny her";
+App::$strings["Queue Statistics"] = "Køstatistikk";
+App::$strings["Total Entries"] = "Totalt antall oppføringer";
+App::$strings["Priority"] = "Prioritet";
+App::$strings["Destination URL"] = "Mål-URL";
+App::$strings["Mark hub permanently offline"] = "Merk hub som permanent offline";
+App::$strings["Retry delivery to this hub"] = "";
+App::$strings["Empty queue for this hub"] = "Tøm køen for denne hubben";
+App::$strings["Last known contact"] = "Siste kjente kontakt";
+App::$strings["New Profile Field"] = "Nytt profilfelt";
+App::$strings["Field nickname"] = "Feltets kallenavn";
+App::$strings["System name of field"] = "Systemnavnet til feltet";
+App::$strings["Input type"] = "Inndata-type";
+App::$strings["Field Name"] = "Feltnavn";
+App::$strings["Label on profile pages"] = "Merkelapp på profilsider";
+App::$strings["Help text"] = "Hjelpetekst";
+App::$strings["Additional info (optional)"] = "Tilleggsinformasjon (valgfritt)";
+App::$strings["Field definition not found"] = "Feltdefinisjonen ble ikke funnet";
+App::$strings["Edit Profile Field"] = "Endre profilfelt";
+App::$strings["Profile Fields"] = "Profilfelter";
+App::$strings["Basic Profile Fields"] = "Grunnleggende profilfelter";
+App::$strings["Advanced Profile Fields"] = "Utvidede profilfelter";
+App::$strings["(In addition to basic fields)"] = "(I tillegg til grunnleggende felt)";
+App::$strings["All available fields"] = "Alle tilgjengelige felt";
+App::$strings["Custom Fields"] = "";
+App::$strings["Create Custom Field"] = "Legg til egendefinert felt";
+App::$strings["Theme settings updated."] = "Temainnstillinger er oppdatert.";
+App::$strings["No themes found."] = "Ingen temaer er funnet.";
+App::$strings["Screenshot"] = "Skjermbilde";
+App::$strings["Themes"] = "Utseende";
+App::$strings["[Experimental]"] = "[Eksperimentelt]";
+App::$strings["[Unsupported]"] = "[Ingen støtte]";
+App::$strings["Log settings updated."] = "Logginnstillinger er oppdatert.";
+App::$strings["Logs"] = "Logger";
+App::$strings["Clear"] = "Tøm";
+App::$strings["Debugging"] = "Feilsøking";
+App::$strings["Log file"] = "Loggfil";
+App::$strings["Must be writable by web server. Relative to your top-level webserver directory."] = "";
+App::$strings["Log level"] = "Loggnivå";
+App::$strings["Can not copy folder into itself."] = "";
+App::$strings["Can not move folder \"%s\" into itself."] = "";
+App::$strings["Unable to locate original post."] = "Ikke i stand til å finne opprinnelig innlegg.";
+App::$strings["status"] = "status";
+App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s følger %2\$s sin %3\$s";
+App::$strings["%1\$s stopped following %2\$s's %3\$s"] = "%1\$s stopped å følge %2\$s sin %3\$s";
+App::$strings["Item not available."] = "Elementet er ikke tilgjengelig.";
App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "Fjerning av kanaler er ikke tillatt innen 48 timer etter endring av kontopassordet.";
App::$strings["Remove Channel"] = "Fjern kanal";
-App::$strings["WARNING: "] = "ADVARSEL: ";
App::$strings["This channel will be permanently removed. "] = "";
App::$strings["This action can not be undone!"] = "";
-App::$strings["Please enter your password for verification:"] = "Vennligst skriv ditt passord for å få bekreftelse:";
-App::$strings["Email resent"] = "";
-App::$strings["Email resend failed"] = "";
-App::$strings["Verification successful"] = "";
-App::$strings["Account successfull created"] = "";
-App::$strings["Channel successfull created"] = "";
-App::$strings["Automatic channel creation failed. Please create a channel."] = "";
-App::$strings["Account creation error"] = "";
-App::$strings["Verify failed"] = "";
-App::$strings["Token verification failed"] = "";
-App::$strings["Request not inside time frame"] = "";
-App::$strings["Identity unknown"] = "";
-App::$strings["dId2 mistaken"] = "";
-App::$strings["Your Registration ID"] = "";
-App::$strings["Registration verification"] = "";
-App::$strings["Hold on, you can start verification in"] = "";
-App::$strings["Please remember your verification token for ID"] = "";
-App::$strings["Token validity"] = "";
-App::$strings["Resend email"] = "";
-App::$strings["Registration status"] = "";
-App::$strings["Verification successful!"] = "";
-App::$strings["Your login ID is"] = "";
-App::$strings["After your account has been approved by our administrator you will be able to login with your login ID and your provided password."] = "";
-App::$strings["Registration request revoked"] = "";
-App::$strings["Sorry for any inconvience. Thank you for your response."] = "";
-App::$strings["Please enter your verification token for ID"] = "";
-App::$strings["Please check your email!"] = "";
-App::$strings["Verification token"] = "";
-App::$strings["ID expired"] = "";
-App::$strings["You will require the verification token for ID"] = "";
-App::$strings["Unknown or expired ID"] = "";
-App::$strings["dId2 malformed"] = "";
-App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = "Du har laget %1$.0f av %2$.0f tillatte kanaler.";
-App::$strings["Create a new channel"] = "Lag en ny kanal";
-App::$strings["Current Channel"] = "Gjeldende kanal";
-App::$strings["Switch to one of your channels by selecting it."] = "Bytt til en av dine kanaler ved å velge den.";
-App::$strings["Default Channel"] = "Standardkanal";
-App::$strings["Make Default"] = "Gjør til standard";
-App::$strings["%d new introductions"] = "%d nye introduksjoner";
-App::$strings["Delegated Channel"] = "Delegert kanal";
-App::$strings["Layout not found"] = "Layouten ble ikke funnet.";
-App::$strings["This template does not support pdledi_gui (no content regions defined)"] = "";
-App::$strings["Main page content"] = "";
-App::$strings["The main page content can not be edited!"] = "";
-App::$strings["toggle full screen mode"] = "";
-App::$strings["Away"] = "Borte";
-App::$strings["Online"] = "Online";
-App::$strings["Contact role deleted."] = "";
-App::$strings["Permission category name is required."] = "";
-App::$strings["Contact role saved."] = "";
-App::$strings["Role to assign affected contacts and default role to"] = "";
-App::$strings["Role to assign affected contacts to"] = "";
-App::$strings["Assign this role to"] = "";
-App::$strings["All my contacts"] = "";
-App::$strings["Automatically assign this role to new contacts"] = "";
-App::$strings["Contact Roles"] = "";
-App::$strings["Role name"] = "";
-App::$strings["System role - not editable"] = "";
-App::$strings["Deleting"] = "";
-App::$strings["inherited"] = "arvet";
-App::$strings["Role Permissions"] = "";
-App::$strings["Some permissions may be inherited from your <a href=\"settings\">channel role</a>, which have higher priority than contact role settings."] = "";
-App::$strings["Token verification failed."] = "";
-App::$strings["Email verification resent"] = "";
-App::$strings["Unable to resend email verification message."] = "";
-App::$strings["Permissions denied."] = "Tillatelse avvist.";
-App::$strings["item"] = "";
-App::$strings["Change Order of Pinned Navbar Apps"] = "";
-App::$strings["Change Order of App Tray Apps"] = "";
-App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "";
-App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "";
-App::$strings["Unable to find your hub."] = "Ikke i stand til å finne hubben din.";
-App::$strings["Post successful."] = "Innlegg vellykket.";
-App::$strings["Item approved"] = "Konto godkjent.";
-App::$strings["Account removals are not allowed within 48 hours of changing the account password."] = "Sletting av kontoer er ikke tillatt innen 48 timer etter endring av kontopassordet.";
-App::$strings["Remove This Account"] = "Slett denne kontoen";
-App::$strings["This account and all its channels will be completely removed from the network. "] = "Denne kontoen og alle dens kanaler vil bli fullstendig fjernet fra nettverket. ";
-App::$strings["This action is permanent and can not be undone!"] = "Denne handlingen er permanent og kan ikke angres!";
-App::$strings["Remove Account"] = "Slett konto";
-App::$strings["Language App"] = "";
+App::$strings["Authentication failed."] = "Autentisering mislyktes.";
+App::$strings["Empty post discarded."] = "Tomt innlegg forkastet.";
+App::$strings["Duplicate post suppressed."] = "Duplikat av innlegg forhindret.";
+App::$strings["System error. Post not saved."] = "Systemfeil. Innlegg ble ikke lagret.";
+App::$strings["Your comment is awaiting approval."] = "";
+App::$strings["Unable to obtain post information from database."] = "Ikke i stand til å få tak i informasjon om innlegg fra databasen.";
+App::$strings["You have reached your limit of %1$.0f top level posts."] = "Du har nådd din grense på %1$.0f startinnlegg.";
+App::$strings["You have reached your limit of %1$.0f webpages."] = "Du har nådd din grense på %1$.0f websider.";
+App::$strings["Article"] = "";
+App::$strings["Item has been removed."] = "";
+App::$strings["Unable to create element."] = "Klarer ikke å lage element.";
+App::$strings["Unable to update menu element."] = "Ikke i stand til å oppdatere menyelement.";
+App::$strings["Unable to add menu element."] = "Ikke i stand til å legge til menyelement.";
+App::$strings["Menu Item Permissions"] = "Menyelement Tillatelser";
+App::$strings["(click to open/close)"] = "(klikk for å åpne/lukke)";
+App::$strings["Link Name"] = "Lenkenavn";
+App::$strings["Link or Submenu Target"] = "Lenke- eller undermeny-mål";
+App::$strings["Enter URL of the link or select a menu name to create a submenu"] = "Skriv URL-en til lenken eller velg et menynavn for å lage en undermeny";
+App::$strings["Use magic-auth if available"] = "Bruk magic-autent hvis mulig";
+App::$strings["Open link in new window"] = "Åpne lenke i nytt vindu";
+App::$strings["Order in list"] = "Ordne i liste";
+App::$strings["Higher numbers will sink to bottom of listing"] = "Høyere tall vil synke mot bunnen av listen";
+App::$strings["Submit and finish"] = "Send inn og avslutt";
+App::$strings["Submit and continue"] = "Send inn og fortsett";
+App::$strings["Menu:"] = "Meny:";
+App::$strings["Link Target"] = "Lenkemål";
+App::$strings["Edit menu"] = "Endre meny";
+App::$strings["Edit element"] = "Endre element";
+App::$strings["Drop element"] = "Slett element";
+App::$strings["New element"] = "Nytt element";
+App::$strings["Edit this menu container"] = "Endre denne menybeholderen";
+App::$strings["Add menu element"] = "Legg til menyelement";
+App::$strings["Delete this menu item"] = "Slett dette menyelementet";
+App::$strings["Edit this menu item"] = "Endre dette menyelementet";
+App::$strings["Menu item not found."] = "Menyelement ble ikke funnet.";
+App::$strings["Menu item deleted."] = "Menyelement slettet.";
+App::$strings["Menu item could not be deleted."] = "Menyelement kunne ikke bli slettet.";
+App::$strings["Edit Menu Element"] = "Endre menyelement";
+App::$strings["Link text"] = "Lenketekst";
+App::$strings["Email Verification Required"] = "";
+App::$strings["A verification token was sent to your email address [%s]. Enter that token here to complete the account verification step. Please allow a few minutes for delivery, and check your spam folder if you do not see the message."] = "En verifikasjonskode ble sendt til epostadressen din [%s]. Skriv inn koden du mottok her for å fullføre kontoverifikasjonen. Det kan ta noen minutter før du mottar koden. Sjekk også at eposten ikke har havnet i mappen for søppelpost om du ikke ser den etter en stund.";
+App::$strings["Resend Email"] = "";
+App::$strings["Validation token"] = "";
App::$strings["No content available for year"] = "";
App::$strings["Export Channel"] = "Eksporter kanal";
App::$strings["Export channel"] = "Eksporter kanal";
@@ -2620,396 +2410,35 @@ App::$strings["This will export your channel calendar events and associated item
App::$strings["Export chatrooms"] = "";
App::$strings["This will export your chatrooms. Chat history is dismissed."] = "";
App::$strings["This export can be imported or restored by visiting <a href=\"%1\$s\">%2\$s</a> on any site containing your channel."] = "";
-App::$strings["Article"] = "";
-App::$strings["Item has been removed."] = "";
-App::$strings["No channel."] = "Ingen kanal.";
-App::$strings["No connections in common."] = "Ingen forbindelser felles.";
-App::$strings["View Common Connections"] = "";
-App::$strings["%s element installed"] = "%s element installert";
-App::$strings["%s element installation failed"] = "Installasjon av %s-element mislyktes";
-App::$strings["Your real name is recommended."] = "";
-App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Eksempel: \"Ola Nordmann\", \"Lisa og hestene hennes\", \"Fotball\", \"Sykkelgruppa\"";
-App::$strings["This will be used to create a unique network address (like an email address)."] = "";
-App::$strings["Allowed characters are a-z 0-9, - and _"] = "";
-App::$strings["Channel name"] = "Kanalnavn";
-App::$strings["Channel role"] = "Kanalrolle";
-App::$strings["Create a Channel"] = "";
-App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "";
-App::$strings["or <a href=\"import\">import an existing channel</a> from another location."] = "eller <a href=\"import\">importer en eksisterende kanal</a> fra et annet sted.";
-App::$strings["Validate"] = "";
-App::$strings["Entry censored"] = "";
-App::$strings["Entry OK"] = "";
-App::$strings["No service class restrictions found."] = "Ingen restriksjoner er funnet i tjenesteklasse.";
-App::$strings["Mood"] = "Stemning";
-App::$strings["Set your current mood and tell your friends"] = "Angi ditt nåværende humør og fortell dine venner";
-App::$strings["About this site"] = "Om dette nettstedet ";
-App::$strings["Site Name"] = "Nettstedets navn";
-App::$strings["Administrator"] = "Administrator";
-App::$strings["Software and Project information"] = "Program- og prosjektinformasjon";
-App::$strings["This site is powered by \$Projectname"] = "Dette nettstedet drives av \$Projectname";
-App::$strings["Federated and decentralised networking and identity services provided by Zot"] = "Fødererte og desentraliserte nettverks- og identitetstjenester via Zot";
-App::$strings["Additional federated transport protocols:"] = "Øvrige fødererte transportprotokoller:";
-App::$strings["Version %s"] = "Versjon %s";
-App::$strings["Project homepage"] = "Prosjektets hjemmeside";
-App::$strings["Developer homepage"] = "Utviklers hjemmeside";
-App::$strings["App installed."] = "App installert.";
-App::$strings["Malformed app."] = "Feil oppsett for app-en.";
-App::$strings["Embed code"] = "Innbyggingskode";
-App::$strings["Edit App"] = "Endre app";
-App::$strings["Create App"] = "Lag app";
-App::$strings["Name of app"] = "Navn på app";
-App::$strings["Location (URL) of app"] = "Plassering (URL) til app";
-App::$strings["Photo icon URL"] = "Bildeikon URL";
-App::$strings["80 x 80 pixels - optional"] = "80 x80 pixler - valgfritt";
-App::$strings["Categories (optional, comma separated list)"] = "Kategorier (valgfri, kommaseparert liste)";
-App::$strings["Version ID"] = "Versjons-ID";
-App::$strings["Price of app"] = "Pris på app";
-App::$strings["Location (URL) to purchase app"] = "Plassering (URL) for å kjøpe app";
-App::$strings["Blocked accounts"] = "";
-App::$strings["Expired accounts"] = "";
-App::$strings["Expiring accounts"] = "";
-App::$strings["Message queues"] = "Meldingskøer";
-App::$strings["Your software should be updated"] = "Programvaren bør oppdateres";
-App::$strings["Summary"] = "Sammendrag";
-App::$strings["Registered accounts"] = "Registrerte kontoer";
-App::$strings["Pending registrations"] = "Ventende registreringer";
-App::$strings["Registered channels"] = "Registrerte kanaler";
-App::$strings["Active addons"] = "Aktive tillegg";
-App::$strings["Version"] = "Versjon";
-App::$strings["Repository version (master)"] = "";
-App::$strings["Repository version (dev)"] = "";
-App::$strings["Invalid abook_id"] = "";
-App::$strings["Could not access contact record."] = "Fikk ikke tilgang til kontaktinformasjonen.";
-App::$strings["Could not locate selected profile."] = "Fant ikke valgt profil.";
-App::$strings["is now connected to"] = "er nå forbundet til";
-App::$strings["Contact Tools"] = "";
-App::$strings["Approve this contact"] = "";
-App::$strings["Accept contact to allow communication"] = "";
-App::$strings["Please select a role for this contact!"] = "";
-App::$strings["This contact is unreachable from this location."] = "";
-App::$strings["This contact may be unreachable from other channel locations."] = "";
-App::$strings["Location independence is not supported by their network."] = "";
-App::$strings["View profile"] = "Vis profil";
-App::$strings["This is a group/forum channel"] = "";
-App::$strings["Select a role for this contact"] = "";
-App::$strings["Slide to adjust your degree of friendship"] = "Flytt for å justere din grad av vennskap";
-App::$strings["Custom Filter"] = "Tilpasset filter";
-App::$strings["Only import posts with this text"] = "Bare importer innlegg med disse ordene";
-App::$strings["Do not import posts with this text"] = "Ikke importer innlegg med denne teksten";
-App::$strings["Approve contact"] = "";
-App::$strings["Their"] = "";
-App::$strings["My"] = "";
-App::$strings["Roles"] = "";
-App::$strings["Compare permissions"] = "";
-App::$strings["Permission"] = "";
-App::$strings["Affinity"] = "";
-App::$strings["Content filter"] = "";
-App::$strings["Contact updated"] = "";
-App::$strings["Contact update failed"] = "";
-App::$strings["Approve connection"] = "Godkjenn forbindelse";
-App::$strings["Refresh succeeded"] = "";
-App::$strings["Refresh failed - channel is currently unavailable"] = "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig.";
-App::$strings["Block status updated"] = "";
-App::$strings["Block failed"] = "";
-App::$strings["Ignore status updated"] = "";
-App::$strings["Ignore failed"] = "";
-App::$strings["Archive status updated"] = "";
-App::$strings["Archive failed"] = "";
-App::$strings["Hide status updated"] = "";
-App::$strings["Hide failed"] = "";
-App::$strings["Contact removed"] = "";
-App::$strings["Delete failed"] = "";
-App::$strings["Refresh Permissions"] = "Oppfrisk tillatelser";
-App::$strings["Fetch updated permissions"] = "Hent oppdaterte tillatelser";
-App::$strings["Refresh Photo"] = "";
-App::$strings["Fetch updated photo"] = "";
-App::$strings["Block (or Unblock) all communications with this connection"] = "Blokker eller fjern blokkering av all kommunikasjon med denne forbindelsen";
-App::$strings["This connection is blocked!"] = "Denne forbindelsen er blokkert!";
-App::$strings["Unignore"] = "Ikke ignorer lenger";
-App::$strings["Ignore"] = "Ignorer";
-App::$strings["Ignore (or Unignore) all inbound communications from this connection"] = "Ignorer eller fjern ignorering av all inngående kommunikasjon fra denne forbindelsen";
-App::$strings["This connection is ignored!"] = "Denne forbindelsen er ignorert!";
-App::$strings["Unarchive"] = "Ikke arkiver lenger";
-App::$strings["Archive"] = "Arkiver";
-App::$strings["Archive (or Unarchive) this connection - mark channel dead but keep content"] = "Arkiver eller fjern arkivering av denne forbindelsen - marker kanal som død, men behold innhold";
-App::$strings["This connection is archived!"] = "Denne forbindelsen er arkivert!";
-App::$strings["Unhide"] = "Ikke skjul lenger";
-App::$strings["Hide"] = "Skjul";
-App::$strings["Hide or Unhide this connection from your other connections"] = "Skjul eller fjern skjuling av denne forbindelsen fra dine andre forbindelser";
-App::$strings["This connection is hidden!"] = "Denne forbindelsen er skjult!";
-App::$strings["Delete this connection"] = "Slett denne forbindelsen";
-App::$strings["No default suggestions were found."] = "";
-App::$strings["Gender: "] = "Kjønn: ";
-App::$strings["Status: "] = "Status: ";
-App::$strings["Homepage: "] = "Hjemmeside: ";
-App::$strings["Description:"] = "Beskrivelse:";
-App::$strings["Unsafe"] = "";
-App::$strings["Spam"] = "";
-App::$strings["Public Forum:"] = "Offentlig forum:";
-App::$strings["Keywords: "] = "Nøkkelord: ";
-App::$strings["Don't suggest"] = "Ikke foreslå";
-App::$strings["Common connections (estimated):"] = "";
-App::$strings["Global Directory"] = "Global katalog";
-App::$strings["Local Directory"] = "Lokal katalog";
-App::$strings["Finding:"] = "Finner:";
-App::$strings["next page"] = "neste side";
-App::$strings["previous page"] = "forrige side";
-App::$strings["Sort options"] = "Sorteringsvalg";
-App::$strings["Alphabetic"] = "Alfabetisk";
-App::$strings["Reverse Alphabetic"] = "Omvendt alfabetisk";
-App::$strings["Newest to Oldest"] = "Nyest til eldst";
-App::$strings["Oldest to Newest"] = "Eldst til nyest";
-App::$strings["No entries (some entries may be hidden)."] = "Ingen oppføringer (noen oppføringer kan være skjult).";
-App::$strings["Authorize application connection"] = "Tillat programforbindelse";
-App::$strings["Return to your app and insert this Security Code:"] = "";
-App::$strings["Please login to continue."] = "Vennligst logg inn for å fortsette.";
-App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, og/eller lage nye innlegg for deg?";
-App::$strings["Please login."] = "Vennligst logg inn.";
-App::$strings["Block Name"] = "Byggeklossens navn";
-App::$strings["Block Title"] = "Byggeklossens tittel";
-App::$strings["Email Verification Required"] = "";
-App::$strings["A verification token was sent to your email address [%s]. Enter that token here to complete the account verification step. Please allow a few minutes for delivery, and check your spam folder if you do not see the message."] = "En verifikasjonskode ble sendt til epostadressen din [%s]. Skriv inn koden du mottok her for å fullføre kontoverifikasjonen. Det kan ta noen minutter før du mottar koden. Sjekk også at eposten ikke har havnet i mappen for søppelpost om du ikke ser den etter en stund.";
-App::$strings["Resend Email"] = "";
-App::$strings["Validation token"] = "";
-App::$strings["Item not available."] = "Elementet er ikke tilgjengelig.";
-App::$strings["Poll not found."] = "Fant ikke spørreskjema.";
-App::$strings["Invalid response."] = "";
-App::$strings["Response submitted. Updates may not appear instantly."] = "";
-App::$strings["Image uploaded but image cropping failed."] = "Bildet ble lastet opp, men beskjæring av bildet mislyktes.";
-App::$strings["Image resize failed."] = "Endring av bildestørrelse mislyktes.";
-App::$strings["Image upload failed."] = "Opplasting av bildet mislyktes.";
-App::$strings["Unable to process image."] = "Kan ikke behandle bildet.";
-App::$strings["Photo not available."] = "Bildet er ikke tilgjengelig.";
-App::$strings["This profile photo will be visible to anybody on the internet and may be distributed to other websites."] = "";
-App::$strings["This profile photo will be visible only to channels with permission to view this profile."] = "";
-App::$strings["Use Photo for Profile"] = "";
-App::$strings["Change Profile Photo"] = "Endre profilbilde";
-App::$strings["Reset to default"] = "";
-App::$strings["Use a photo from your albums"] = "";
-App::$strings["Select existing"] = "";
-App::$strings["Crop Image"] = "Beskjær bildet";
-App::$strings["Please adjust the image cropping for optimum viewing."] = "Vennligst juster bildebeskjæringen for optimal visning.";
-App::$strings["Done editing"] = "Avslutt redigering";
-App::$strings["Edit Block"] = "Endre byggekloss";
-App::$strings["Enter a folder name"] = "";
-App::$strings["or select an existing folder (doubleclick)"] = "";
-App::$strings["Save to Folder"] = "Lagre i mappe";
-App::$strings["Layout Name"] = "Layout-navn";
-App::$strings["Layout Description (Optional)"] = "Layoutens beskrivelse (valgfritt)";
-App::$strings["Edit Layout"] = "Endre layout";
-App::$strings["Active"] = "";
-App::$strings["Blocked"] = "Blokkert";
-App::$strings["Ignored"] = "Ignorert";
-App::$strings["Hidden"] = "Skjult";
-App::$strings["Archived/Unreachable"] = "";
-App::$strings["New"] = "Nye";
-App::$strings["Active Connections"] = "";
-App::$strings["Show active connections"] = "";
-App::$strings["Show pending (new) connections"] = "Vis ventende (nye) forbindelser";
-App::$strings["Only show blocked connections"] = "Vis bare forbindelser som er blokkert";
-App::$strings["Only show ignored connections"] = "Vis bare ignorerte forbindelser";
-App::$strings["Only show archived/unreachable connections"] = "";
-App::$strings["Only show hidden connections"] = "Vis bare skjulte forbindelser";
-App::$strings["Show all connections"] = "Vis alle forbindelser";
-App::$strings["Pending approval"] = "Venter på godkjenning";
-App::$strings["Archived"] = "Arkivert";
-App::$strings["Not connected at this location"] = "";
-App::$strings["%1\$s [%2\$s]"] = "%1\$s [%2\$s]";
-App::$strings["Edit connection"] = "Endre forbindelse";
-App::$strings["Delete connection"] = "Slett forbindelse";
-App::$strings["Channel address"] = "Kanaladresse";
-App::$strings["Call"] = "";
-App::$strings["Status"] = "Status";
-App::$strings["Connected"] = "Forbundet";
-App::$strings["Ignore connection"] = "Ignorer forbindelse";
-App::$strings["Recent activity"] = "Nylig aktivitet";
-App::$strings["Connect at this location"] = "";
-App::$strings["Contact role"] = "";
-App::$strings["Search your connections"] = "Søk blant dine forbindelser";
-App::$strings["Contact search"] = "";
-App::$strings["Cover Photos"] = "Forsidebilder";
-App::$strings["Your cover photo may be visible to anybody on the internet"] = "";
-App::$strings["Upload File:"] = "Last opp fil:";
-App::$strings["Select a profile:"] = "Velg en profil:";
-App::$strings["Change Cover Photo"] = "Endre omslagsbilde";
-App::$strings["Select existing photo"] = "";
-App::$strings["Done Editing"] = "Avslutt redigering";
-App::$strings["Album not found."] = "Albumet ble ikke funnet.";
-App::$strings["Delete Album"] = "Slett album";
-App::$strings["Delete Photo"] = "Slett bilde";
-App::$strings["No photos selected"] = "Ingen bilder valgt";
-App::$strings["Access to this item is restricted."] = "Tilgang til dette elementet er begrenset.";
-App::$strings["%1$.2f MB photo storage used."] = "%1$.2f MB lagringsplass til bilder er brukt.";
-App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt.";
-App::$strings["Upload Photos"] = "Last opp bilder";
-App::$strings["Enter an album name"] = "Skriv et albumnavn";
-App::$strings["or select an existing album (doubleclick)"] = "eller velg et eksisterende album (dobbeltklikk)";
-App::$strings["Create a status post for this upload"] = "Lag et statusinnlegg for denne opplastingen";
-App::$strings["Description (optional)"] = "";
-App::$strings["Show Newest First"] = "Vis nyeste først";
-App::$strings["Show Oldest First"] = "Vis eldste først";
-App::$strings["Add Photos"] = "";
-App::$strings["Permission denied. Access to this item may be restricted."] = "Tillatelse avvist. Tilgang til dette elementet kan være begrenset.";
-App::$strings["Photo not available"] = "Bilde er utilgjengelig";
-App::$strings["Use as profile photo"] = "Bruk som profilbilde";
-App::$strings["Use as cover photo"] = "Bruk som omslagsbilde";
-App::$strings["Private Photo"] = "Privat bilde";
-App::$strings["View Full Size"] = "Vis i full størrelse";
-App::$strings["Edit photo"] = "Endre bilde";
-App::$strings["Rotate CW (right)"] = "Roter med klokka (mot høyre)";
-App::$strings["Rotate CCW (left)"] = "Roter mot klokka (venstre)";
-App::$strings["Move photo to album"] = "";
-App::$strings["Enter a new album name"] = "Skriv et nytt albumnavn";
-App::$strings["or select an existing one (doubleclick)"] = "eller velg et eksisterende album (dobbeltklikk)";
-App::$strings["Add a Tag"] = "Legg til merkelapp";
-App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Eksempel: @bob, @Barbara_Jensen, @jim@example.com";
-App::$strings["Flag as adult in album view"] = "Flag som voksent i albumvisning";
-App::$strings["I like this (toggle)"] = "Jeg liker dette (skru av og på)";
-App::$strings["I don't like this (toggle)"] = "Jeg liker ikke dette (skru av og på)";
-App::$strings["This is you"] = "Dette er deg";
-App::$strings["View all"] = "Vis alle";
-App::$strings["Photo Tools"] = "Fotoverktøy";
-App::$strings["In This Photo:"] = "I dette bildet:";
-App::$strings["Map"] = "Kart";
-App::$strings["__ctx:noun__ Likes"] = "Liker";
-App::$strings["__ctx:noun__ Dislikes"] = "Liker ikke";
-App::$strings["No valid account found."] = "Ingen gyldig konto funnet.";
-App::$strings["Password reset request issued. Check your email."] = "Forespørsel om å tilbakestille passord er mottatt. Sjekk e-posten din.";
-App::$strings["Site Member (%s)"] = "Nettstedsmedlem (%s)";
-App::$strings["Password reset requested at %s"] = "Forespurt om å tilbakestille passord hos %s";
-App::$strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Forespørsel kunne ikke bekreftes. (Du kan ha sendt den inn tidligere.) Tilbakestilling av passord mislyktes.";
-App::$strings["Password Reset"] = "Tilbakestill passord";
-App::$strings["Your password has been reset as requested."] = "Ditt passord har blitt tilbakestilt som forespurt.";
-App::$strings["Your new password is"] = "Ditt nye passord er";
-App::$strings["Save or copy your new password - and then"] = "Lagre eller kopier ditt nye passord, og deretter kan du";
-App::$strings["click here to login"] = "klikke her for å logge inn";
-App::$strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Ditt passord kan endres på siden <em>Innstillinger</em> etter vellykket innlogging.";
-App::$strings["Your password has changed at %s"] = "Ditt passord er endret hos %s";
-App::$strings["Forgot your Password?"] = "Glemt passord ditt?";
-App::$strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Skriv e-postadressen din og send inn for å tilbakestille passordet ditt. Sjekk deretter din e-post for videre instruksjoner.";
-App::$strings["Email Address"] = "E-postadresse";
-App::$strings["Reset"] = "Tilbakestill";
-App::$strings["Connection added."] = "";
-App::$strings["Invalid item."] = "Ugyldig element.";
-App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
-App::$strings["Profile not found."] = "Profilen ble ikke funnet.";
-App::$strings["Profile deleted."] = "Profilen er slettet.";
-App::$strings["Profile-"] = "Profil-";
-App::$strings["New profile created."] = "Ny profil opprettet.";
-App::$strings["Profile unavailable to clone."] = "Profilen er utilgjengelig for klonen.";
-App::$strings["Profile unavailable to export."] = "Profilen er utilgjengelig for eksport.";
-App::$strings["Profile Name is required."] = "Profilnavn er påkrevd.";
-App::$strings["Marital Status"] = "Sivilstand";
-App::$strings["Romantic Partner"] = "Romantisk partner";
-App::$strings["Likes"] = "Liker";
-App::$strings["Dislikes"] = "Liker ikke";
-App::$strings["Work/Employment"] = "Arbeid/sysselsetting";
-App::$strings["Religion"] = "Religion";
-App::$strings["Political Views"] = "Politiske synspunkter";
-App::$strings["Sexual Preference"] = "Seksuelle preferanser";
-App::$strings["Homepage"] = "Hjemmeside";
-App::$strings["Interests"] = "Interesser";
-App::$strings["Profile updated."] = "Profilen er oppdatert.";
-App::$strings["Hide my connections from viewers of this profile"] = "";
-App::$strings["Publish my default profile in the network directory"] = "";
-App::$strings["Suggest me as a potential contact to new members"] = "";
-App::$strings["Reveal my online status"] = "";
-App::$strings["Edit Profile Details"] = "Endre profildetaljer";
-App::$strings["View this profile"] = "Vis denne profilen";
-App::$strings["Profile Tools"] = "Profilverktøy";
-App::$strings["Change cover photo"] = "Endre omslagsbilde";
-App::$strings["Create a new profile using these settings"] = "Lag en ny profil ved å bruke disse innstillingene";
-App::$strings["Clone this profile"] = "Klon denne profilen";
-App::$strings["Delete this profile"] = "Slett denne profilen";
-App::$strings["Add profile things"] = "Legg til profilting";
-App::$strings["Basic"] = "";
-App::$strings["Relationship"] = "";
-App::$strings["Import profile from file"] = "Importer profil fra fil";
-App::$strings["Export profile to file"] = "Eksporter profil til fil";
-App::$strings["Your gender"] = "Kjønn";
-App::$strings["Marital status"] = "Sivilstatus";
-App::$strings["Sexual preference"] = "Legning";
-App::$strings["Profile name"] = "Profilnavn";
-App::$strings["This is your default profile."] = "Dette er din standardprofil.";
-App::$strings["Your full name"] = "Fullt navn";
-App::$strings["Short title/description"] = "";
-App::$strings["Maximal 190 characters"] = "";
-App::$strings["Street address"] = "Gateadresse";
-App::$strings["Locality/City"] = "Sted/by";
-App::$strings["Region/State"] = "Region";
-App::$strings["Postal/Zip code"] = "Postnummer";
-App::$strings["Who (if applicable)"] = "Hvem (om relevant)";
-App::$strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Eksempler: kari123, Kari Villiamsen, kari@example.com";
-App::$strings["Since (date)"] = "Fra (dato)";
-App::$strings["Tell us about yourself"] = "Fortell oss om deg selv";
-App::$strings["Hometown"] = "Hjemsted";
-App::$strings["Political views"] = "Politiske holdninger";
-App::$strings["Religious views"] = "Religiøse holdninger";
-App::$strings["Keywords used in directory listings"] = "Nøkkelord for bruk i katalogoppføringen";
-App::$strings["Example: fishing photography software"] = "Eksempel: fisking fotografering programvare";
-App::$strings["Musical interests"] = "Musikkinteresser";
-App::$strings["Books, literature"] = "Bøker, litteratur";
-App::$strings["Television"] = "TV/fjernsyn";
-App::$strings["Film/Dance/Culture/Entertainment"] = "Film/dans/kultur/underholdning";
-App::$strings["Hobbies/Interests"] = "Hobbier/Interesser";
-App::$strings["Love/Romance"] = "Kjærlighet/romantikk";
-App::$strings["School/Education"] = "Skolle/utdanning";
-App::$strings["Contact information and social networks"] = "Kontaktinformasjon og andre sosiale nettverk";
-App::$strings["My other channels"] = "Mine andre kanaler";
-App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s følger %2\$s sin %3\$s";
-App::$strings["%1\$s stopped following %2\$s's %3\$s"] = "%1\$s stopped å følge %2\$s sin %3\$s";
-App::$strings["Bookmark added"] = "Bokmerke lagt til";
-App::$strings["My Connections Bookmarks"] = "Mine forbindelsers bokmerker";
-App::$strings["Channel name changes are not allowed within 48 hours of changing the account password."] = "";
-App::$strings["Change channel nickname/address"] = "";
-App::$strings["Any/all connections on other networks will be lost!"] = "";
-App::$strings["New channel address"] = "";
-App::$strings["Rename Channel"] = "";
-App::$strings["Invite App"] = "";
-App::$strings["Register is closed"] = "";
-App::$strings["Note, the invitation code is valid up to"] = "";
-App::$strings["Too many recipients for one invitation (max %d)"] = "";
-App::$strings["No recipients for this invitation"] = "";
-App::$strings["(%s) : Not a real email address"] = "(%s): Ikke en virkelig epostadresse";
-App::$strings["(%s) : Not allowed email address"] = "(%s): Ikke en tillatt epostadresse";
-App::$strings["(%s) : email address already in use"] = "(%s): epostadressen er allerede i bruk";
-App::$strings["(%s) : Accepted email address"] = "(%s): Godkjent epostadresse";
-App::$strings["To %s : Message delivery success."] = "";
-App::$strings["%1\$d mail(s) sent, %2\$d mail error(s)"] = "";
-App::$strings["Invites not proposed by configuration"] = "";
-App::$strings["Contact the site admin"] = "";
-App::$strings["Invites by users not enabled"] = "";
-App::$strings["You have no more invitations available"] = "Du har ikke flere invitasjoner tilgjengelig";
-App::$strings["Not on xchan"] = "";
-App::$strings["All users invitation limit exceeded."] = "";
-App::$strings["Invitation expires after"] = "";
-App::$strings["Invitation"] = "";
-App::$strings["Send invitations"] = "Send invitasjoner";
-App::$strings["Invitations I am using"] = "";
-App::$strings["Invitations we are using"] = "";
-App::$strings["§ Note, the email(s) sent will be recorded in the system logs"] = "";
-App::$strings["Enter email addresses, one per line:"] = "Skriv e-postadresser, en per linje:";
-App::$strings["Your message:"] = "Din melding:";
-App::$strings["Invite template"] = "";
-App::$strings["Subject:"] = "Emne:";
-App::$strings["Here you may enter personal notes to the recipient(s)"] = "";
-App::$strings["Private forum"] = "";
-App::$strings["Public forum"] = "Offentlig forum:";
-App::$strings["Xchan Lookup"] = "Xchan oppslag";
-App::$strings["Lookup xchan beginning with (or webbie): "] = "Slå opp xchan som begynner med (eller webbie): ";
-App::$strings["Affinity Tool settings updated."] = "";
-App::$strings["The numbers below represent the minimum and maximum slider default positions for your network/stream page as a percentage."] = "";
-App::$strings["Default maximum affinity level"] = "";
-App::$strings["0-99 default 99"] = "Standard";
-App::$strings["Default minimum affinity level"] = "";
-App::$strings["0-99 - default 0"] = "Standard";
-App::$strings["Persistent affinity levels"] = "";
-App::$strings["If disabled the max and min levels will be reset to default after page reload"] = "";
-App::$strings["Affinity Tool Settings"] = "";
-App::$strings["Max height of content (in pixels)"] = "Maks høyde for innhold (i piksler)";
-App::$strings["Click to expand content exceeding this height"] = "Klikk for å vise hele innlegg som overskrider denne grensen";
-App::$strings["Stream Settings"] = "Instillinger for tidslinjen";
-App::$strings["Additional Features"] = "Ekstra funksjoner";
+App::$strings["No more system notifications."] = "Ingen flere systemvarsler.";
+App::$strings["System Notifications"] = "Systemvarsler";
+App::$strings["Mark all seen"] = "Merk alle som sett";
+App::$strings["Files: shared with me"] = "Filer: delt med meg";
+App::$strings["NEW"] = "NY";
+App::$strings["Remove all files"] = "Fjern alle filer";
+App::$strings["Remove this file"] = "Fjern denne filen";
+App::$strings["This channel is limited to %d tokens"] = "";
+App::$strings["Name and Password are required."] = "";
+App::$strings["Token saved."] = "";
+App::$strings["Use this form to create temporary access identifiers to share things with non-members. These identities may be used in privacy groups and visitors may login using these credentials to access private content."] = "";
+App::$strings["Please select a role for this guest!"] = "";
+App::$strings["Select a role for this guest"] = "";
+App::$strings["Login Name"] = "";
+App::$strings["Login Password"] = "";
+App::$strings["Expires (yyyy-mm-dd)"] = "";
+App::$strings["Contact role deleted."] = "";
+App::$strings["Permission category name is required."] = "";
+App::$strings["Contact role saved."] = "";
+App::$strings["Role to assign affected contacts and default role to"] = "";
+App::$strings["Role to assign affected contacts to"] = "";
+App::$strings["Assign this role to"] = "";
+App::$strings["All my contacts"] = "";
+App::$strings["Automatically assign this role to new contacts"] = "";
+App::$strings["Role name"] = "";
+App::$strings["System role - not editable"] = "";
+App::$strings["Deleting"] = "";
+App::$strings["Role Permissions"] = "";
+App::$strings["Some permissions may be inherited from your <a href=\"settings\">channel role</a>, which have higher priority than contact role settings."] = "";
App::$strings["Please select a channel role"] = "Velg en kanalrolle";
App::$strings["Your channel address is"] = "Din kanaladresse er";
App::$strings["Your files/photos are accessible via WebDAV at"] = "Dine filer og foto er tilgjengelig via WebDAV på";
@@ -3018,12 +2447,11 @@ App::$strings["Basic Settings"] = "Grunninnstillinger";
App::$strings["Channel timezone:"] = "Tidssone for kanalen:";
App::$strings["Default post location:"] = "Standard plassering for innlegg:";
App::$strings["Geographical location to display on your posts"] = "Geografisk plassering som vises på dine innlegg";
-App::$strings["Use browser location"] = "";
+App::$strings["Use browser location"] = "Bruk nettleserplassering";
App::$strings["Adult content"] = "Voksent innhold";
App::$strings["This channel frequently or regularly publishes adult content"] = "Denne kanalen vil ofte, eller regelmessig poste innlegg med voksent innhold";
App::$strings["Maximum Friend Requests/Day:"] = "Maksimalt antall venneforespørsler per dag:";
App::$strings["May reduce spam activity"] = "Kan redusere søppelpostaktivitet";
-App::$strings["Notification Settings"] = "Varslingsinnstillinger";
App::$strings["By default post a status message when:"] = "Legg inn en statusmelding når du:";
App::$strings["accepting a friend request"] = "aksepterer en venneforespørsel";
App::$strings["joining a forum/community"] = "blir med i et forum/miljø";
@@ -3039,9 +2467,9 @@ App::$strings["You are tagged in a post"] = "Du merkes i et innlegg";
App::$strings["You are poked/prodded/etc. in a post"] = "Du ble prikket/oppildnet/og så vider i et innlegg";
App::$strings["Someone likes your post/comment"] = "";
App::$strings["Show visual notifications including:"] = "Vis visuelle varslinger om:";
-App::$strings["Unseen stream activity"] = "";
-App::$strings["Unseen channel activity"] = "Usett kanalaktivitet";
-App::$strings["Unseen private messages"] = "Usette private meldinger";
+App::$strings["Unseen stream activity"] = "Ny aktivitet i nettverksstrømmen";
+App::$strings["Unseen channel activity"] = "Ny kanalaktivitet";
+App::$strings["Unseen private messages"] = "Nye private meldinger";
App::$strings["Recommended"] = "Anbefalt";
App::$strings["Upcoming events"] = "Kommende hendelser";
App::$strings["Events today"] = "Hendelser idag";
@@ -3052,17 +2480,17 @@ App::$strings["System info messages"] = "System infomeldinger";
App::$strings["System critical alerts"] = "System kritiske varsel";
App::$strings["New connections"] = "Nye forbindelser";
App::$strings["System Registrations"] = "Systemregistreringer";
-App::$strings["Unseen shared files"] = "";
-App::$strings["Unseen public stream activity"] = "";
-App::$strings["Unseen likes and dislikes"] = "";
-App::$strings["Unseen forum posts"] = "";
-App::$strings["Email notification hub (hostname)"] = "";
-App::$strings["If your channel is mirrored to multiple hubs, set this to your preferred location. This will prevent duplicate email notifications. Example: %s"] = "";
-App::$strings["Show new wall posts, private messages and connections under Notices"] = "";
-App::$strings["Mark all notices of the thread read if a notice is clicked"] = "";
-App::$strings["If no, only the clicked notice will be marked read"] = "";
-App::$strings["Desktop notifications are unavailable because the required browser permission has not been granted"] = "";
-App::$strings["Grant permission"] = "";
+App::$strings["Unseen shared files"] = "Nye delte filer";
+App::$strings["Unseen public stream activity"] = "Ny aktivitet i den offentlige strømmen";
+App::$strings["Unseen likes and dislikes"] = "Nye liker/ikke liker";
+App::$strings["Unseen forum posts"] = "Ny forumpost";
+App::$strings["Email notification hub (hostname)"] = "Hub for epostvarsler (tjenernavn)";
+App::$strings["If your channel is mirrored to multiple hubs, set this to your preferred location. This will prevent duplicate email notifications. Example: %s"] = "Hvis kanalen din er klonet til flere tjenere kan du sette dette til den du vil skal sende deg epostvarsler. Dette vil forhindre duplikate epostvarsler. Eksempel: %s";
+App::$strings["Show new wall posts, private messages and connections under Notices"] = "Vis nye veggposter, private meldinger og forbindelser under varsler";
+App::$strings["Mark all notices of the thread read if a notice is clicked"] = "Merk alle varsler for en tråd som lest når du klikker på ett varsel";
+App::$strings["If no, only the clicked notice will be marked read"] = "Om du velger \"Nei\", blir kun det varslet du klikker på merket som lest";
+App::$strings["Desktop notifications are unavailable because the required browser permission has not been granted"] = "Skriverbordsvarsler er ikke tilgjengelig fordi nettstedet ikke har de nødvendige nettlesertillatelsene";
+App::$strings["Grant permission"] = "Gi tilgang";
App::$strings["Notify me of events this many days in advance"] = "Varsle meg om hendelser dette antall dager på forhånd";
App::$strings["Must be greater than 0"] = "Må være større enn 0";
App::$strings["Default photo upload folder"] = "Standard mappe for opplasting av bilder";
@@ -3075,30 +2503,23 @@ App::$strings["This website expires after %d days."] = "";
App::$strings["This website does not expire imported content."] = "Dette nettstedet sletter ikke importert innhold.";
App::$strings["The website limit takes precedence if lower than your limit."] = "Nettstedets grense vil gjelde dersom den er lavere enn din grense.";
App::$strings["Words one per line or #tags, \$categories, /patterns/, lang=xx, lang!=xx - leave blank to import all posts"] = "Ett ord per linje eller #emneknagger, \$kategorier, /mønster/, lang=xx, lang!=xx - la være tomt for å importere alle innlegg";
-App::$strings["Not valid email."] = "Ikke gyldig e-post.";
-App::$strings["Protected email address. Cannot change to that email."] = "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen.";
-App::$strings["System failure storing new email. Please try again."] = "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen.";
-App::$strings["Password verification failed."] = "Passordbekreftelsen mislyktes.";
-App::$strings["Passwords do not match. Password unchanged."] = "Passordene stemmer ikke overens. Passord uforandret.";
-App::$strings["Empty passwords are not allowed. Password unchanged."] = "Tomme passord er ikke tillatt. Passord uforandret.";
-App::$strings["Password changed."] = "Passord endret.";
-App::$strings["Password update failed. Please try again."] = "Passord oppdatering mislyktes. Vennligst prøv igjen.";
-App::$strings["Account Settings"] = "Kontoinnstillinger";
-App::$strings["Current Password"] = "Nåværende passord";
-App::$strings["Enter New Password"] = "Skriv nytt passord";
-App::$strings["Confirm New Password"] = "Bekreft nytt passord";
-App::$strings["Leave password fields blank unless changing"] = "La passordfeltene stå blanke om det ikke skal endres";
-App::$strings["Multi-Factor Authentication"] = "Flerfaktorautentisering";
-App::$strings["DId2 or Email Address:"] = "DId2 eller epostadresse:";
-App::$strings["Remove this account including all its channels"] = "Slett denne kontoen inkludert alle dens kanaler";
App::$strings["No feature settings configured"] = "Ingen funksjonsinnstillinger er konfigurert";
App::$strings["Addon Settings"] = "Instillinger for tillegg";
App::$strings["Please save/submit changes to any panel before opening another."] = "Husk å lagre endringene i ett panel før du åpner andre.";
-App::$strings["Events Settings"] = "";
-App::$strings["Channel Manager Settings"] = "";
+App::$strings["Editor Settings"] = "Instillinger for redigering";
+App::$strings["Photos Settings"] = "";
+App::$strings["Default profile for new contacts"] = "";
+App::$strings["Profiles Settings"] = "";
+App::$strings["Max height of content (in pixels)"] = "Maks høyde for innhold (i piksler)";
+App::$strings["Click to expand content exceeding this height"] = "Klikk for å vise hele innlegg som overskrider denne grensen";
+App::$strings["Stream Settings"] = "Instillinger for tidslinjen";
+App::$strings["Directory Settings"] = "";
App::$strings["Personal menu to display in your channel pages"] = "Personlig meny som kan vises på dine kanalsider";
App::$strings["Channel Home Settings"] = "";
App::$strings["Calendar Settings"] = "";
+App::$strings["Conversation Settings"] = "";
+App::$strings["Additional Features"] = "Ekstra funksjoner";
+App::$strings["Connections Settings"] = "";
App::$strings["Password is required"] = "Navn er påkrevd";
App::$strings["The provided password is not correct"] = "";
App::$strings["Account Multi-Factor Authentication"] = "Tofaktorautentisering";
@@ -3110,29 +2531,24 @@ App::$strings["Incorrect code"] = "";
App::$strings["Enable Multi-Factor Authentication"] = "Mislykket autentisering";
App::$strings["Logging in will require you to be in possession of your smartphone"] = "";
App::$strings["Your account password"] = "Ditt nye passord er";
-App::$strings["%s - (Experimental)"] = "%s - (Eksperimentelt)";
-App::$strings["Display Settings"] = "Visningsinnstillinger";
-App::$strings["Theme Settings"] = "Temainnstillinger";
-App::$strings["Custom Theme Settings"] = "Tilpassede temainnstillinger";
-App::$strings["Content Settings"] = "Innholdsinnstillinger";
-App::$strings["Display Theme:"] = "Visningstema:";
-App::$strings["Select scheme"] = "Velg skjema";
-App::$strings["Preload images before rendering the page"] = "Last inn bildene før gjengivelsen av siden";
-App::$strings["The subjective page load time will be longer but the page will be ready when displayed"] = "Den personlige opplevelsen av lastetiden vil være lenger, men siden vil være klar når den vises";
-App::$strings["Enable user zoom on mobile devices"] = "Skru på brukerstyrt zoom på mobile enheter";
-App::$strings["Update browser every xx seconds"] = "Oppdater nettleser hvert xx sekunder";
-App::$strings["Minimum of 10 seconds, no maximum"] = "Minimum 10 sekunder, ikke noe maksimum";
-App::$strings["Maximum number of conversations to load at any time:"] = "Maksimalt antall samtaler å laste samtidig:";
-App::$strings["Maximum of 30 items"] = "";
-App::$strings["Show emoticons (smilies) as images"] = "Vis emoticons (smilefjes) som bilder";
-App::$strings["Link post titles to source"] = "Lenk innleggets tittel til kilden";
-App::$strings["Display new member quick links menu"] = "Vis hurtiglenker for nye medlemmer";
-App::$strings["Directory Settings"] = "";
-App::$strings["Editor Settings"] = "Instillinger for redigering";
-App::$strings["Connections Settings"] = "";
-App::$strings["Photos Settings"] = "";
-App::$strings["Default profile for new contacts"] = "";
-App::$strings["Profiles Settings"] = "";
+App::$strings["Test"] = "Sjekk koden";
+App::$strings["Events Settings"] = "";
+App::$strings["Not valid email."] = "Ikke gyldig e-post.";
+App::$strings["Protected email address. Cannot change to that email."] = "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen.";
+App::$strings["System failure storing new email. Please try again."] = "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen.";
+App::$strings["Password verification failed."] = "Passordbekreftelsen mislyktes.";
+App::$strings["Passwords do not match. Password unchanged."] = "Passordene stemmer ikke overens. Passord uforandret.";
+App::$strings["Empty passwords are not allowed. Password unchanged."] = "Tomme passord er ikke tillatt. Passord uforandret.";
+App::$strings["Password changed."] = "Passord endret.";
+App::$strings["Password update failed. Please try again."] = "Passord oppdatering mislyktes. Vennligst prøv igjen.";
+App::$strings["Account Settings"] = "Kontoinnstillinger";
+App::$strings["Current Password"] = "Nåværende passord";
+App::$strings["Enter New Password"] = "Skriv nytt passord";
+App::$strings["Confirm New Password"] = "Bekreft nytt passord";
+App::$strings["Leave password fields blank unless changing"] = "La passordfeltene stå blanke om det ikke skal endres";
+App::$strings["Multi-Factor Authentication"] = "Flerfaktorautentisering";
+App::$strings["DId2 or Email Address:"] = "DId2 eller epostadresse:";
+App::$strings["Remove this account including all its channels"] = "Slett denne kontoen inkludert alle dens kanaler";
App::$strings["Privacy settings updated."] = "Personverninnstillingene ble oppdatert.";
App::$strings["Only those you specifically allow"] = "Bare de du spesifikt tillater";
App::$strings["Approved connections"] = "Godkjente forbindelser";
@@ -3157,403 +2573,863 @@ App::$strings["Accept unsolicited comments for moderation"] = "Godta kommentarer
App::$strings["Otherwise they will be silently dropped"] = "Ellers vil de avvises uten varsel";
App::$strings["Enable OCAP access"] = "Slå på OCAP tilgangskontroll";
App::$strings["Grant limited posts the right to access linked private media"] = "Gi begrensede innlegg tilgang til private media som er lenket fra dem";
-App::$strings["Settings saved."] = "";
-App::$strings["Settings saved. Reload page please."] = "";
-App::$strings["Conversation Settings"] = "";
-App::$strings["Unable to update menu."] = "Ikke i stand til å oppdatere meny.";
-App::$strings["Unable to create menu."] = "Ikke i stand til å lage meny.";
-App::$strings["Menu Name"] = "Menynavn";
-App::$strings["Unique name (not visible on webpage) - required"] = "Unikt navn (ikke synlig på websiden) - påkrevet";
-App::$strings["Menu Title"] = "Menytittel";
-App::$strings["Visible on webpage - leave empty for no title"] = "Synlig på websiden - la stå tomt for ingen tittel";
-App::$strings["Allow Bookmarks"] = "Tillat bokmerker";
-App::$strings["Menu may be used to store saved bookmarks"] = "Menyen kan brukes til å lagre lagrede bokmerker";
-App::$strings["Submit and proceed"] = "Send inn og fortsett";
-App::$strings["Drop"] = "Slett";
-App::$strings["Bookmarks allowed"] = "Bokmerker tillatt";
-App::$strings["Delete this menu"] = "Slett denne menyen";
-App::$strings["Edit menu contents"] = "Endre menyinnholdet";
-App::$strings["Edit this menu"] = "Endre denne menyen";
-App::$strings["Menu could not be deleted."] = "Menyen kunne ikke bli slettet.";
-App::$strings["Edit Menu"] = "Endre meny";
-App::$strings["Add or remove entries to this menu"] = "Legg til eller fjern punkter i denne menyen";
-App::$strings["Menu name"] = "Menynavn";
-App::$strings["Must be unique, only seen by you"] = "Må være unik, ses bare av deg";
-App::$strings["Menu title"] = "Menytittel";
-App::$strings["Menu title as seen by others"] = "Menytittelen andre ser";
-App::$strings["Allow bookmarks"] = "Tillat bokmerker";
-App::$strings["Connection Default Permissions"] = "Forbindelsens standard tillatelser";
-App::$strings["Apply these permissions automatically"] = "Bruk disse tillatelsene automatisk";
-App::$strings["If enabled, connection requests will be approved without your interaction"] = "";
-App::$strings["Permission role"] = "";
-App::$strings["Add permission role"] = "";
-App::$strings["The permissions indicated on this page will be applied to all new connections."] = "Tillatelsene angitt på denne siden gjøres gjeldende for alle nye forbindelser.";
-App::$strings["Automatic approval settings"] = "";
-App::$strings["My Settings"] = "Mine innstillinger";
-App::$strings["Individual Permissions"] = "Individuelle tillatelser";
-App::$strings["Some individual permissions may have been preset or locked based on your channel type and privacy settings."] = "";
-App::$strings["This setting requires special processing and editing has been blocked."] = "Denne innstillingen krever spesiell behandling og redigering har blitt blokkert.";
-App::$strings["Configuration Editor"] = "Konfigurasjonsbehandler";
-App::$strings["Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature."] = "Advarsel: kanalen din kan slutte å virke ved endring av enkelte innstillinger. Vennligst forlat denne siden med mindre du er komfortabel med dette og vet hvordan du bruker denne funksjonen riktig.";
-App::$strings["Name and Secret are required"] = "";
-App::$strings["Add OAuth2 application"] = "";
-App::$strings["Grant Types"] = "";
-App::$strings["leave blank unless your application sepcifically requires this"] = "";
-App::$strings["Authorization scope"] = "";
-App::$strings["OAuth2 Application not found."] = "";
-App::$strings["leave blank unless your application specifically requires this"] = "";
-App::$strings["Connected OAuth2 Apps"] = "";
-App::$strings["Invalid message"] = "Ugyldig melding";
-App::$strings["no results"] = "ingen resultater";
-App::$strings["channel sync processed"] = "kanalsynkronisering er behandlet";
-App::$strings["queued"] = "lagt i kø";
-App::$strings["posted"] = "lagt inn";
-App::$strings["accepted for delivery"] = "akseptert for levering";
-App::$strings["updated"] = "oppdatert";
-App::$strings["update ignored"] = "oppdatering ignorert";
-App::$strings["permission denied"] = "tillatelse avvist";
-App::$strings["recipient not found"] = "mottaker ble ikke funnet";
-App::$strings["Delivery report for %1\$s"] = "Leveringsrapport for %1\$s";
-App::$strings["Redeliver"] = "";
-App::$strings["Thing updated"] = "Tingen er oppdatert";
-App::$strings["Object store: failed"] = "Objektlagring: mislyktes";
-App::$strings["Thing added"] = "Ting lagt til";
-App::$strings["OBJ: %1\$s %2\$s %3\$s"] = "OBJ: %1\$s %2\$s %3\$s";
-App::$strings["Show Thing"] = "Vis ting";
-App::$strings["item not found."] = "element ble ikke funnet.";
-App::$strings["Edit Thing"] = "Endre ting";
-App::$strings["Select a profile"] = "Velg en profil";
-App::$strings["Post an activity"] = "Legg inn en aktivitet";
-App::$strings["Only sends to viewers of the applicable profile"] = "Sender bare til seere av den aktuelle profilen";
-App::$strings["Name of thing e.g. something"] = "Navn på ting for eksempel noe";
-App::$strings["URL of thing (optional)"] = "URL til ting (valgfritt)";
-App::$strings["URL for photo of thing (optional)"] = "URL til bilde av ting (valgfritt)";
-App::$strings["Add Thing to your Profile"] = "Legg til ting i din profil";
-App::$strings["Authentication failed."] = "Autentisering mislyktes.";
-App::$strings["Item sync completed!"] = "";
-App::$strings["Item sync completed but no items were found!"] = "";
-App::$strings["File sync completed!"] = "";
-App::$strings["File sync completed but no files were found!"] = "";
-App::$strings["Channel clone status"] = "";
-App::$strings["Item sync status"] = "";
-App::$strings["File sync status"] = "";
-App::$strings["Channel cloning completed!"] = "";
-App::$strings["Resume"] = "";
-App::$strings["Only resume if sync stalled!"] = "";
-App::$strings["Layout updated."] = "Layout er oppdatert.";
-App::$strings["Edit System Page Description"] = "Endre beskrivelsen av systemsiden";
-App::$strings["(modified)"] = "(endret)";
-App::$strings["Layout not found."] = "Layouten ble ikke funnet.";
-App::$strings["Module Name:"] = "Modulnavn:";
-App::$strings["Layout Help"] = "Layout-hjelp";
-App::$strings["Edit another layout"] = "";
-App::$strings["System layout"] = "";
-App::$strings["Welcome to %s"] = "Velkommen til %s";
-App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv igjen om 24 timer.";
-App::$strings["Connection updated."] = "Forbindelsen er oppdatert.";
-App::$strings["Failed to update connection record."] = "Mislyktes med å oppdatere forbindelsesinformasjonen.";
-App::$strings["Could not access address book record."] = "Fikk ikke tilgang til informasjonen i adresseboken.";
-App::$strings["Refresh failed - channel is currently unavailable."] = "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig.";
-App::$strings["Unable to set address book parameters."] = "Ikke i stand til å angi parametre for adresseboken.";
-App::$strings["Connection has been removed."] = "Forbindelsen har blitt fjernet.";
-App::$strings["View %s's profile"] = "Vis %s sin profil";
-App::$strings["View recent posts and comments"] = "Vis nylige innlegg og kommentarer";
-App::$strings["Fetch Vcard"] = "";
-App::$strings["Fetch electronic calling card for this connection"] = "";
-App::$strings["Open Set Affinity section by default"] = "";
-App::$strings["Filter"] = "";
-App::$strings["Open Custom Filter section by default"] = "";
-App::$strings["Set Affinity"] = "Angi nærhet";
-App::$strings["Set Profile"] = "Angi profil";
-App::$strings["Set Affinity & Profile"] = "Angi nærhet og profil";
-App::$strings["Contact: %s"] = "";
-App::$strings["Manage contact roles"] = "";
-App::$strings["This contacts's primary address is"] = "";
-App::$strings["Available locations:"] = "Tilgjengelige plasseringer:";
-App::$strings["Contact Pending Approval"] = "";
-App::$strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Vennligst velg profilen du ønsker å vise %s når profilen din ses på en sikret måte.";
-App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can <strong>not</strong> change those settings here."] = "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har høyere prioritet enn individuelle innstillinger. Du kan <strong>ikke</strong> endre arvede innstillingene her.";
-App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\"><strong>personverninnstillinger</strong></a>, som har høyere prioritet enn individuelle innstillinger. Du kan endre disse innstillingene her, men de vil ikke få noen effekt før de arvede innstillingene endres.";
-App::$strings["Last update:"] = "Siste oppdatering:";
-App::$strings["Details"] = "";
-App::$strings["No more system notifications."] = "Ingen flere systemvarsler.";
-App::$strings["System Notifications"] = "Systemvarsler";
-App::$strings["Mark all seen"] = "Merk alle som sett";
-App::$strings["Comanche page description language help"] = "Hjelp med Comanche sidebeskrivelsesspråk";
-App::$strings["Layout Description"] = "Layout-beskrivelse";
-App::$strings["Download PDL file"] = "Last ned PDL-fil";
-App::$strings["Location not found."] = "Plassering er ikke funnet.";
-App::$strings["Location lookup failed."] = "Oppslag på plassering mislyktes.";
-App::$strings["Please select another location to become primary before removing the primary location."] = "Vennligst velg en annen plassering som primær før du sletter gjeldende primære plassering.";
-App::$strings["Syncing locations"] = "Synkroniserer plasseringer";
-App::$strings["No locations found."] = "Ingen plasseringer ble funnet.";
-App::$strings["Manage Channel Locations"] = "Håndter kanalplasseringer";
-App::$strings["Sync Now"] = "Synkroniser nå";
-App::$strings["Please wait several minutes between consecutive operations."] = "Vennligst vent flere minutter mellom hver etterfølgende operasjon.";
-App::$strings["When possible, drop a location by logging into that website/hub and removing your channel."] = "Når mulig, fjern en plassering ved å logge inn på det nettstedet eller den hub-en og fjern din kanal.";
-App::$strings["Use this form to drop the location if the hub is no longer operating."] = "Bruk dette skjemaet for å fjerne plasseringen hvis huben ikke er i drift lenger.";
-App::$strings["Failed to create source. No channel selected."] = "Mislyktes med å lage kilde. Ingen kanal er valgt.";
-App::$strings["Source created."] = "Kilden er laget.";
-App::$strings["Source updated."] = "Kilden er oppdatert.";
-App::$strings["*"] = "*";
-App::$strings["Channel Sources"] = "Kanalkilder";
-App::$strings["Manage remote sources of content for your channel."] = "Håndtere eksterne innholdskilder til din kanal.";
-App::$strings["New Source"] = "Ny kilde";
-App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne kanalen og distribuer det i henhold til dine egne kanalinnstillinger.";
-App::$strings["Only import content with these words (one per line)"] = "Bare importer innhold med disse ordene (ett ord per linje)";
-App::$strings["Leave blank to import all public content"] = "La stå tomt for å importere alt offentlig innhold";
-App::$strings["Channel Name"] = "Kanalnavn";
-App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "";
-App::$strings["Resend posts with this channel as author"] = "";
-App::$strings["Copyrights may apply"] = "";
-App::$strings["Source not found."] = "Kilden ble ikke funnet.";
-App::$strings["Edit Source"] = "Endre kilde";
-App::$strings["Delete Source"] = "Slett kilde";
-App::$strings["Source removed"] = "Kilden er fjernet";
-App::$strings["Unable to remove source."] = "Ikke i stand til å fjerne kilde.";
-App::$strings["Select a bookmark folder"] = "Velg en bokmerkemappe";
-App::$strings["Save Bookmark"] = "Lagre bokmerke";
-App::$strings["URL of bookmark"] = "URL-en til bokmerket";
-App::$strings["Or enter new bookmark folder name"] = "Eller skriv nytt navn på bokmerkemappe";
-App::$strings["A deleted privacy group with this name was revived. Existing item permissions <strong>may</strong> apply to this privacy group and any future members. If this is not what you intended, please create another privacy group with a different name."] = "";
-App::$strings["Select a privacy group"] = "";
-App::$strings["__ctx:permcat__ Default"] = "Standard";
-App::$strings["Likes %1\$s's %2\$s"] = "";
-App::$strings["Doesn't like %1\$s's %2\$s"] = "";
-App::$strings["Will attend %s's event"] = "";
-App::$strings["Will not attend %s's event"] = "";
-App::$strings["May attend %s's event"] = "";
-App::$strings["May not attend %s's event"] = "";
-App::$strings["\$Projectname Notification"] = "\$Projectname varsling";
-App::$strings["Thank You,"] = "Tusen takk,";
-App::$strings["This email was sent by %1\$s at %2\$s."] = "";
-App::$strings["To stop receiving these messages, please adjust your Notification Settings at %s"] = "";
-App::$strings["To stop receiving these messages, please adjust your %s."] = "";
-App::$strings["%s <!item_type!>"] = "%s <!item_type!>";
-App::$strings["[\$Projectname:Notify] New direct message received at %s"] = "[\$Projectname:Notify] Ny direktemelding mottatt kl. %s";
-App::$strings["%1\$s sent you a new direct message at %2\$s"] = "%1\$s sendte deg en ny direktemelding kl. %2\$s";
-App::$strings["%1\$s sent you %2\$s."] = "%1\$s sendte deg %2\$s.";
-App::$strings["a direct message"] = "en direktemelding";
-App::$strings["Please visit %s to view and/or reply to your direct messages."] = "Gå til %s for å vise og/eller svare på dine direktemeldinger.";
-App::$strings["requested to comment on"] = "";
-App::$strings["commented on"] = "";
-App::$strings["requested to like"] = "Dato for forespørsel";
-App::$strings["liked"] = "";
-App::$strings["requested to dislike"] = "";
-App::$strings["disliked"] = "";
-App::$strings["voted on"] = "";
-App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = "";
-App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "";
-App::$strings["%1\$s %2\$s [zrl=%3\$s]your %4\$s[/zrl]"] = "";
-App::$strings["[\$Projectname:Notify] Moderated Comment to conversation #%1\$d by %2\$s"] = "";
-App::$strings["[\$Projectname:Notify] Comment to conversation #%1\$d by %2\$s"] = "";
-App::$strings["%1\$s commented on an item/conversation you have been following"] = "";
-App::$strings["Please visit %s to view and/or reply to the conversation."] = "Vennligst besøk %s for å se og/eller svare i samtalen.";
-App::$strings["Please visit %s to approve or reject this comment."] = "";
-App::$strings["[\$Projectname:Notify] Like received to conversation #%1\$d by %2\$s"] = "";
-App::$strings["%1\$s liked an item/conversation you created"] = "";
-App::$strings["[\$Projectname:Notify] %s posted to your profile wall"] = "";
-App::$strings["%1\$s posted to your profile wall at %2\$s"] = "";
-App::$strings["%1\$s posted to [zrl=%2\$s]your wall[/zrl]"] = "";
-App::$strings["[\$Projectname:Notify] %s tagged you"] = "";
-App::$strings["%1\$s tagged you at %2\$s"] = "";
-App::$strings["%1\$s [zrl=%2\$s]tagged you[/zrl]."] = "";
-App::$strings["[\$Projectname:Notify] %1\$s poked you"] = "";
-App::$strings["%1\$s poked you at %2\$s"] = "";
-App::$strings["%1\$s [zrl=%2\$s]poked you[/zrl]."] = "";
-App::$strings["[\$Projectname:Notify] %s tagged your post"] = "";
-App::$strings["%1\$s tagged your post at %2\$s"] = "";
-App::$strings["%1\$s tagged [zrl=%2\$s]your post[/zrl]"] = "";
-App::$strings["[\$Projectname:Notify] Introduction received"] = "";
-App::$strings["You've received an new connection request from '%1\$s' at %2\$s"] = "";
-App::$strings["You've received [zrl=%1\$s]a new connection request[/zrl] from %2\$s."] = "";
-App::$strings["You may visit their profile at %s"] = "Du kan besøke profilen deres på %s";
-App::$strings["Please visit %s to approve or reject the connection request."] = "Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse.";
-App::$strings["[\$Projectname:Notify] Friend suggestion received"] = "";
-App::$strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "";
-App::$strings["You've received [zrl=%1\$s]a friend suggestion[/zrl] for %2\$s from %3\$s."] = "";
-App::$strings["Name:"] = "Navn:";
-App::$strings["Photo:"] = "Bilde:";
-App::$strings["Please visit %s to approve or reject the suggestion."] = "Vennligst besøk %s for å godkjenne eller avslå dette forslaget.";
-App::$strings["[\$Projectname:Notify]"] = "";
-App::$strings["created a new poll"] = "opprettet spørreskjema";
-App::$strings["created a new post"] = "laget et nytt innlegg";
-App::$strings["voted on %s's poll"] = "stemte på %s sitt spørreskjema";
-App::$strings["commented on %s's post"] = "kommenterte på %s sitt innlegg";
-App::$strings["repeated %s's post"] = "";
-App::$strings["liked %s's post"] = "";
-App::$strings["disliked %s's post"] = "";
-App::$strings["shared a file with you"] = "";
-App::$strings["edited a post dated %s"] = "";
-App::$strings["edited a comment dated %s"] = "";
-App::$strings["added your channel"] = "la til din kanal";
-App::$strings["sent you a direct message"] = "sendte deg en direktemelding";
-App::$strings["g A l F d"] = "g A l F d";
-App::$strings["[today]"] = "[idag]";
-App::$strings["created an event"] = "";
-App::$strings["status verified"] = "";
-App::$strings["Channel is blocked on this site."] = "Kanalen er blokkert på dette nettstedet.";
-App::$strings["Channel location missing."] = "Kanalplassering mangler.";
-App::$strings["Remote channel or protocol unavailable."] = "";
-App::$strings["Channel discovery failed."] = "Kanaloppdagelse mislyktes.";
-App::$strings["Protocol disabled."] = "Protokollen er avskrudd.";
-App::$strings["Cannot connect to yourself."] = "Kan ikke lage forbindelse med deg selv.";
-App::$strings["error saving data"] = "";
-App::$strings["Missing room name"] = "Mangler romnavn";
-App::$strings["Duplicate room name"] = "Duplikat romnavn";
-App::$strings["Invalid room specifier."] = "Ugyldig rom-spesifisering.";
-App::$strings["Room not found."] = "Rommet ble ikke funnet.";
-App::$strings["Room is full"] = "Rommet er fullt";
-App::$strings["Affinity Tool"] = "Nærhetsverktøy";
-App::$strings["Site Admin"] = "Nettstedsadministrator";
-App::$strings["Content Filter"] = "";
-App::$strings["Remote Diagnostics"] = "";
-App::$strings["Suggest Channels"] = "Foreslå kanaler";
-App::$strings["Channel Manager"] = "Kanalstyring";
-App::$strings["Stream"] = "Tidslinje";
-App::$strings["Mail"] = "Melding";
-App::$strings["Chat"] = "Chat";
-App::$strings["Probe"] = "Undersøk";
-App::$strings["Suggest"] = "Forreslå";
-App::$strings["Random Channel"] = "Tilfeldig kanal";
-App::$strings["Invite"] = "Inviter";
-App::$strings["Post"] = "Innlegg";
-App::$strings["Notifications"] = "Varsler";
-App::$strings["Order Apps"] = "";
-App::$strings["CardDAV"] = "";
-App::$strings["OAuth Apps Manager"] = "";
-App::$strings["OAuth2 Apps Manager"] = "";
-App::$strings["PDL Editor"] = "";
-App::$strings["My Chatrooms"] = "";
-App::$strings["Channel Export"] = "";
-App::$strings["Purchase"] = "Kjøp";
-App::$strings["Undelete"] = "";
-App::$strings["Add to app-tray"] = "Legg til i meny";
-App::$strings["Remove from app-tray"] = "Fjern fra meny";
-App::$strings["Pin to navbar"] = "Fest til navigasjonslinjen";
-App::$strings["Unpin from navbar"] = "Fjern fra navigasjonslinjen";
-App::$strings["0. Beginner/Basic"] = "";
-App::$strings["1. Novice - not skilled but willing to learn"] = "";
-App::$strings["2. Intermediate - somewhat comfortable"] = "";
-App::$strings["3. Advanced - very comfortable"] = "";
-App::$strings["4. Expert - I can write computer code"] = "";
-App::$strings["5. Wizard - I probably know more than you do"] = "";
-App::$strings["Directory Options"] = "Kataloginnstillinger";
-App::$strings["Safe Mode"] = "Trygt modus";
-App::$strings["Public Forums Only"] = "Bare offentlige forum";
-App::$strings["This Website Only"] = "Kun dette nettstedet";
-App::$strings["Unable to verify channel signature"] = "Ikke i stand til å sjekke kanalsignaturen";
-App::$strings["Restricted message"] = "Begrenset melding";
-App::$strings["Direct message"] = "Direktemelding";
-App::$strings["Public Policy"] = "";
-App::$strings["Privacy conflict. Discretion advised."] = "";
-App::$strings["Admin Delete"] = "";
-App::$strings["Reply on this comment"] = "";
-App::$strings["reply"] = "";
-App::$strings["Reply to"] = "";
-App::$strings["Delivery Report"] = "Leveringsrapport";
-App::$strings["%d Comment"] = array(
- 0 => "%d kommentar",
- 1 => "%d kommentarer",
+App::$strings["%s - (Experimental)"] = "%s - (Eksperimentelt)";
+App::$strings["Display Settings"] = "Visningsinnstillinger";
+App::$strings["Theme Settings"] = "Temainnstillinger";
+App::$strings["Custom Theme Settings"] = "Tilpassede temainnstillinger";
+App::$strings["Content Settings"] = "Innholdsinnstillinger";
+App::$strings["Display Theme:"] = "Visningstema:";
+App::$strings["Select scheme"] = "Velg skjema";
+App::$strings["Preload images before rendering the page"] = "Last inn bildene før gjengivelsen av siden";
+App::$strings["The subjective page load time will be longer but the page will be ready when displayed"] = "Den personlige opplevelsen av lastetiden vil være lenger, men siden vil være klar når den vises";
+App::$strings["Enable user zoom on mobile devices"] = "Skru på brukerstyrt zoom på mobile enheter";
+App::$strings["Update browser every xx seconds"] = "Oppdater nettleser hvert xx sekunder";
+App::$strings["Minimum of 10 seconds, no maximum"] = "Minimum 10 sekunder, ikke noe maksimum";
+App::$strings["Maximum number of conversations to load at any time:"] = "Maksimalt antall samtaler å laste samtidig:";
+App::$strings["Maximum of 30 items"] = "";
+App::$strings["Show emoticons (smilies) as images"] = "Vis emoticons (smilefjes) som bilder";
+App::$strings["Link post titles to source"] = "Lenk innleggets tittel til kilden";
+App::$strings["New Member Links"] = "Lenker for nye medlemmer";
+App::$strings["Display new member quick links menu"] = "Vis hurtiglenker for nye medlemmer";
+App::$strings["Channel Manager Settings"] = "";
+App::$strings["Change Order of Pinned Navbar Apps"] = "";
+App::$strings["Change Order of App Tray Apps"] = "";
+App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "";
+App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "";
+App::$strings["Like/Dislike"] = "Liker/Liker ikke";
+App::$strings["This action is restricted to members."] = "Denne handlingen er begrenset til medlemmer.";
+App::$strings["Please <a href=\"rmagic\">login with your \$Projectname ID</a> or <a href=\"register\">register as a new \$Projectname member</a> to continue."] = "Vennligst <a href=\"rmagic\">logg inn med din \$Projectname ID</a> eller <a href=\"register\">registrer deg som et nytt \$Projectname-medlem</a> for å fortsette.";
+App::$strings["Invalid request."] = "Ugyldig forespørsel.";
+App::$strings["thing"] = "ting";
+App::$strings["Channel unavailable."] = "Kanalen er utilgjengelig.";
+App::$strings["Previous action reversed."] = "Forrige handling er omgjort.";
+App::$strings["profile"] = "Profil";
+App::$strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s deltar på %2\$ss %3\$s";
+App::$strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s deltar ikke på %2\$ss %3\$s";
+App::$strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s deltar kanskje på %2\$ss %3\$s";
+App::$strings["Action completed."] = "Handling ferdig.";
+App::$strings["Thank you."] = "Tusen takk.";
+App::$strings["Connection added."] = "";
+App::$strings["Away"] = "Borte";
+App::$strings["Online"] = "Online";
+App::$strings["Blocked accounts"] = "";
+App::$strings["Expired accounts"] = "";
+App::$strings["Expiring accounts"] = "";
+App::$strings["Message queues"] = "Meldingskøer";
+App::$strings["Your software should be updated"] = "Programvaren bør oppdateres";
+App::$strings["Summary"] = "Sammendrag";
+App::$strings["Registered accounts"] = "Registrerte kontoer";
+App::$strings["Pending registrations"] = "Ventende registreringer";
+App::$strings["Registered channels"] = "Registrerte kanaler";
+App::$strings["Version"] = "Versjon";
+App::$strings["Repository version (master)"] = "";
+App::$strings["Repository version (dev)"] = "";
+App::$strings["Unknown App"] = "";
+App::$strings["Authorize"] = "";
+App::$strings["Do you authorize the app %s to access your channel data?"] = "";
+App::$strings["This page is available only to site members"] = "";
+App::$strings["Welcome"] = "Velkommen";
+App::$strings["What would you like to do?"] = "";
+App::$strings["Please bookmark this page if you would like to return to it in the future"] = "";
+App::$strings["Upload a profile photo"] = "";
+App::$strings["Upload a cover photo"] = "";
+App::$strings["Edit your default profile"] = "";
+App::$strings["View friend suggestions"] = "Vis venneforslag";
+App::$strings["View the channel directory"] = "";
+App::$strings["View/edit your channel settings"] = "";
+App::$strings["View the site or project documentation"] = "";
+App::$strings["Visit your channel homepage"] = "";
+App::$strings["View your connections and/or add somebody whose address you already know"] = "";
+App::$strings["View your personal stream (this may be empty until you add some connections)"] = "";
+App::$strings["View the public stream. Warning: this content is not moderated"] = "";
+App::$strings["Create a new channel"] = "Lag en ny kanal";
+App::$strings["Current Channel"] = "Gjeldende kanal";
+App::$strings["Switch to one of your channels by selecting it."] = "Bytt til en av dine kanaler ved å velge den.";
+App::$strings["Default Channel"] = "Standardkanal";
+App::$strings["Make Default"] = "Gjør til standard";
+App::$strings["%d new introductions"] = "%d nye introduksjoner";
+App::$strings["Delegated Channel"] = "Delegert kanal";
+App::$strings["Items tagged with: %s"] = "Elementer merket med: %s";
+App::$strings["Search results for: %s"] = "Søkeresultater for: %s";
+App::$strings["Channel name changes are not allowed within 48 hours of changing the account password."] = "";
+App::$strings["Change channel nickname/address"] = "";
+App::$strings["Any/all connections on other networks will be lost!"] = "";
+App::$strings["New channel address"] = "";
+App::$strings["Rename Channel"] = "";
+App::$strings["Calendar entries imported."] = "Kalenderhendelsene er importert.";
+App::$strings["No calendar entries found."] = "Ingen kalenderhendelser funnet.";
+App::$strings["Event title"] = "Tittel på hendelse";
+App::$strings["Start date and time"] = "Startdato og tidspunkt";
+App::$strings["End date and time"] = "";
+App::$strings["Timezone:"] = "Tidssone";
+App::$strings["Month"] = "måned";
+App::$strings["Week"] = "uke";
+App::$strings["Day"] = "dag";
+App::$strings["List month"] = "";
+App::$strings["List week"] = "";
+App::$strings["List day"] = "";
+App::$strings["More"] = "";
+App::$strings["Less"] = "";
+App::$strings["Select calendar"] = "";
+App::$strings["Channel Calendars"] = "";
+App::$strings["CalDAV Calendars"] = "";
+App::$strings["Delete all"] = "";
+App::$strings["Sorry! Editing of recurrent events is not yet implemented."] = "";
+App::$strings["Could not fetch calendar resource. The selected calendar might be disabled."] = "";
+App::$strings["Default Calendar"] = "";
+App::$strings["Default Addressbook"] = "";
+App::$strings["Invalid abook_id"] = "";
+App::$strings["View profile"] = "Vis profil";
+App::$strings["Select a role for this contact"] = "";
+App::$strings["Contact roles"] = "";
+App::$strings["Roles"] = "";
+App::$strings["Compare permissions"] = "";
+App::$strings["Permission"] = "";
+App::$strings["Privacy groups"] = "Personverngrupper";
+App::$strings["Content filter"] = "";
+App::$strings["Contact updated"] = "";
+App::$strings["Contact update failed"] = "";
+App::$strings["Refresh succeeded"] = "";
+App::$strings["Refresh failed"] = "Forny";
+App::$strings["Block status updated"] = "";
+App::$strings["Block failed"] = "";
+App::$strings["Ignore status updated"] = "";
+App::$strings["Ignore failed"] = "";
+App::$strings["Archive status updated"] = "";
+App::$strings["Archive failed"] = "";
+App::$strings["Hide status updated"] = "";
+App::$strings["Hide failed"] = "";
+App::$strings["Contact removed"] = "";
+App::$strings["Delete failed"] = "";
+App::$strings["Refresh"] = "Forny";
+App::$strings["Refetch contact info"] = "";
+App::$strings["vcard"] = "";
+App::$strings["Suggestions"] = "Forslag";
+App::$strings["See more..."] = "Se mer...";
+App::$strings["Share This"] = "Del dette";
+App::$strings["View %s's profile - %s"] = "Vis %s sin profil - %s";
+App::$strings["Don't show"] = "Ikke vis";
+App::$strings["Add new group"] = "";
+App::$strings["Remove term"] = "Fjern begrep";
+App::$strings["photo/image"] = "foto/bilde";
+App::$strings["Read mode"] = "";
+App::$strings["Edit mode"] = "";
+App::$strings["Editing"] = "";
+App::$strings["Saving"] = "";
+App::$strings["Saved"] = "";
+App::$strings["Suggested Chatrooms"] = "Foreslåtte chatrom";
+App::$strings["Bookmarked Chatrooms"] = "Bokmerkede chatrom";
+App::$strings["Tasks"] = "Oppgaver";
+App::$strings["Public and restricted messages"] = "";
+App::$strings["Direct messages"] = "Direktemeldinger";
+App::$strings["Starred messages"] = "";
+App::$strings["Notices"] = "Varsel";
+App::$strings["No messages"] = "Ingen meldinger";
+App::$strings["Unseen"] = "Ulest";
+App::$strings["Filter by name or address"] = "Filtrer etter navn eller adresse";
+App::$strings["Click to show more"] = "";
+App::$strings["__ctx:widget__ Activity"] = "aktivitet";
+App::$strings["App Collections"] = "Appsamlinger";
+App::$strings["Installed apps"] = "Installerte apper";
+App::$strings["Toggle post editor"] = "Vis redigering av innlegg";
+App::$strings["Toggle personal notes"] = "";
+App::$strings["Channel activities"] = "";
+App::$strings["Archives"] = "Arkiv";
+App::$strings["No recent activities"] = "Nylig aktivitet";
+App::$strings["__ctx:noun__ new connection"] = array(
+ 0 => "ny forbindelse",
+ 1 => "nye forbindelser",
);
-App::$strings["%d unseen"] = "";
-App::$strings["Forum"] = "";
-App::$strings["to"] = "til";
-App::$strings["Wall-to-Wall"] = "Vegg-til-vegg";
-App::$strings["via Wall-To-Wall:"] = "via vegg-til-vegg:";
-App::$strings["Attend"] = "";
-App::$strings["Go to previous comment"] = "";
-App::$strings["Add to Calendar"] = "Legg til i kalender";
-App::$strings["Image"] = "Bilde";
-App::$strings["Insert Link"] = "Sett inn lenke";
-App::$strings["Video"] = "Video";
-App::$strings["Your full name (required)"] = "";
-App::$strings["Your email address (required)"] = "";
-App::$strings["Your website URL (optional)"] = "";
-App::$strings["Source code of failed update: "] = "";
-App::$strings["Update Error at %s"] = "Oppdateringsfeil ved %s";
-App::$strings["Update %s failed. See error logs."] = "Oppdatering %s mislyktes. Se feilloggen.";
-App::$strings["Public"] = "Offentlig";
-App::$strings["Anybody in the \$Projectname network"] = "";
-App::$strings["Any account on %s"] = "";
-App::$strings["Any of my connections"] = "";
-App::$strings["Only connections I specifically allow"] = "";
-App::$strings["Anybody authenticated (could include visitors from other networks)"] = "";
-App::$strings["Any connections including those who haven't yet been approved"] = "";
-App::$strings["This is your default setting for the audience of your normal stream, and posts."] = "";
-App::$strings["This is your default setting for who can view your default channel profile"] = "";
-App::$strings["This is your default setting for who can view your connections"] = "";
-App::$strings["This is your default setting for who can view your file storage and photos"] = "";
-App::$strings["This is your default setting for the audience of your webpages"] = "";
-App::$strings["Unable to verify site signature for %s"] = "Ikke i stand til å bekrefte signaturen til %s";
-App::$strings["Social Networking"] = "Sosialt nettverk";
-App::$strings["Social - Federation"] = "";
-App::$strings["Social - Mostly Public"] = "Sosial - ganske offentlig";
-App::$strings["Social - Restricted"] = "Sosial - begrenset";
-App::$strings["Social - Private"] = "Sosial - privat";
-App::$strings["Community Forum"] = "Forum for fellesskap";
-App::$strings["Forum - Mostly Public"] = "Forum - ganske offentlig";
-App::$strings["Forum - Restricted"] = "Forum - begrenset";
-App::$strings["Forum - Private"] = "Forum - privat";
-App::$strings["Feed Republish"] = "Republisering av strømmet innhold";
-App::$strings["Feed - Mostly Public"] = "Strøm - ganske offentlig";
-App::$strings["Feed - Restricted"] = "Strøm - begrenset";
-App::$strings["Special Purpose"] = "Spesiell bruk";
-App::$strings["Special - Celebrity/Soapbox"] = "Spesiell - kjendis/talerstol";
-App::$strings["Special - Group Repository"] = "Spesiell - gruppelager";
-App::$strings["Custom/Expert Mode"] = "Tilpasset/Ekspertmodus";
-App::$strings["Personal"] = "Personlig";
-App::$strings["Community forum"] = "Forum for fellesskap";
-App::$strings["Custom"] = "";
-App::$strings["Can view my channel stream and posts"] = "";
-App::$strings["Can send me their channel stream and posts"] = "Kan sende meg deres kanalstrøm og innlegg";
-App::$strings["Can view my default channel profile"] = "Kan se min standard kanalprofil";
-App::$strings["Can view my connections"] = "Kan se mine forbindelser";
-App::$strings["Can view my file storage and photos"] = "Kan se mine filer og bilder";
-App::$strings["Can upload/modify my file storage and photos"] = "";
-App::$strings["Can view my channel webpages"] = "";
-App::$strings["Can view my wiki pages"] = "";
-App::$strings["Can create/edit my channel webpages"] = "";
-App::$strings["Can write to my wiki pages"] = "";
-App::$strings["Can post on my channel (wall) page"] = "";
-App::$strings["Can comment on or like my posts"] = "Kan kommentere på eller like mine innlegg";
-App::$strings["Can send me direct messages"] = "Kan sende meg direktemeldinger";
-App::$strings["Can like/dislike profiles and profile things"] = "";
-App::$strings["Can chat with me"] = "";
-App::$strings["Can source/mirror my public posts in derived channels"] = "";
-App::$strings["Can administer my channel"] = "";
-App::$strings["Change filename to"] = "";
-App::$strings["Select a target location"] = "";
-App::$strings["Copy to target location"] = "";
-App::$strings["Set permissions for all files and sub folders"] = "";
-App::$strings["Notify your contacts about this file"] = "Varsle dine kontakter om denne filen";
-App::$strings["File category"] = "";
-App::$strings["Total"] = "Totalt";
-App::$strings["Shared"] = "Delt";
-App::$strings["Add Files"] = "";
-App::$strings["parent"] = "opp et nivå";
-App::$strings["Select All"] = "velg alle";
-App::$strings["Bulk Actions"] = "";
-App::$strings["Adjust Permissions"] = "";
-App::$strings["Move or Copy"] = "";
-App::$strings["Info"] = "";
-App::$strings["Rename"] = "";
-App::$strings["Attachment BBcode"] = "";
-App::$strings["Embed BBcode"] = "";
-App::$strings["Link BBcode"] = "";
-App::$strings["You are using %1\$s of your available file storage."] = "Du bruker %1\$s av din tilgjengelige lagringsplass.";
-App::$strings["You are using %1\$s of %2\$s available file storage. (%3\$s&#37;)"] = "Du bruker %1\$s av %2\$s tilgjengelig lagringsplass (%3\$s&#37;)";
-App::$strings["WARNING:"] = "ADVARSEL:";
-App::$strings["Create new folder"] = "Lag ny mappe";
-App::$strings["Upload file"] = "Last opp fil";
-App::$strings["Drop files here to immediately upload"] = "";
-App::$strings["You can select files via the upload button or drop them right here or into an existing folder."] = "";
-App::$strings["Create an account to access services and applications"] = "";
-App::$strings["Email or nickname"] = "";
-App::$strings["Password"] = "Passord";
-App::$strings["Remember me"] = "Husk meg";
-App::$strings["Forgot your password?"] = "Glemt passordet ditt?";
-App::$strings["[\$Projectname] Website SSL error for %s"] = "";
-App::$strings["Website SSL certificate is not valid. Please correct."] = "Nettstedets SSL-sertifikat er ikke gyldig. Vennligst fiks dette.";
-App::$strings["[\$Projectname] Cron tasks not running on %s"] = "";
-App::$strings["Cron/Scheduled tasks not running."] = "Cron/planlagte oppgaver kjører ikke.";
+App::$strings["__ctx:noun__ notice"] = array(
+ 0 => "varsel",
+ 1 => "varsel",
+);
+App::$strings["Account settings"] = "Kontoinnstillinger";
+App::$strings["Channel settings"] = "Kanalinnstillinger";
+App::$strings["Privacy settings"] = "Personverninnstillinger";
+App::$strings["Display settings"] = "Visningsinnstillinger";
+App::$strings["Manage locations"] = "";
+App::$strings["Rating Tools"] = "Vurderingsverktøy";
+App::$strings["Rate Me"] = "Vurder meg";
+App::$strings["View Ratings"] = "Vis vurderinger";
+App::$strings["App Categories"] = "Appkategorier";
+App::$strings["Direct Messages"] = "Direktemeldinger";
+App::$strings["Show direct (private) messages"] = "Vis direktemeldinger (private meldinger)";
+App::$strings["Events"] = "Hendelser";
+App::$strings["Show posts that include events"] = "";
+App::$strings["Polls"] = "Spørreskjema";
+App::$strings["Show posts that include polls"] = "Vis innlegg som inneholder spørreskjema";
+App::$strings["Show posts related to the %s privacy group"] = "";
+App::$strings["Show my privacy groups"] = "";
+App::$strings["Show posts to this forum"] = "";
+App::$strings["Show forums"] = "";
+App::$strings["Starred Posts"] = "";
+App::$strings["Show posts that I have starred"] = "";
+App::$strings["Personal Posts"] = "";
+App::$strings["Show posts that mention or involve me"] = "";
+App::$strings["Show posts that I have filed to %s"] = "";
+App::$strings["Show filed post categories"] = "";
+App::$strings["Panel search"] = "";
+App::$strings["Filter by name"] = "Filtrer etter navn";
+App::$strings["Remove active filter"] = "";
+App::$strings["Stream Filters"] = "Filtere for tidslinjen";
+App::$strings["New network activity notifications"] = "";
+App::$strings["Network stream"] = "";
+App::$strings["Mark all notifications read"] = "";
+App::$strings["Show new posts only"] = "";
+App::$strings["New home activity notifications"] = "";
+App::$strings["Home stream"] = "";
+App::$strings["Mark all notifications seen"] = "";
+App::$strings["New direct messages notifications"] = "Varsel om nye direktemeldinger";
+App::$strings["Direct messages stream"] = "Strøm for direktemeldinger";
+App::$strings["New events notifications"] = "";
+App::$strings["View events"] = "";
+App::$strings["Mark all events seen"] = "Merk alle hendelser som sett";
+App::$strings["New connections notifications"] = "";
+App::$strings["View all connections"] = "";
+App::$strings["New files notifications"] = "";
+App::$strings["View all notices"] = "";
+App::$strings["Mark all notices seen"] = "";
+App::$strings["Registrations"] = "";
+App::$strings["New registrations notifications"] = "";
+App::$strings["New public stream notifications"] = "";
+App::$strings["Public stream"] = "";
+App::$strings["Sorry, you have got no notifications at the moment"] = "";
+App::$strings["Add new guest"] = "";
+App::$strings["Add new role"] = "";
+App::$strings["Role members"] = "";
+App::$strings["Profile Creation"] = "Oppretting av profil";
+App::$strings["Upload profile photo"] = "Last opp profilbilde";
+App::$strings["Upload cover photo"] = "Last opp omslagsbilde";
+App::$strings["Find and Connect with others"] = "Finn andre";
+App::$strings["View the directory"] = "Se i katalogen";
+App::$strings["Manage your connections"] = "Behandle forbindelser";
+App::$strings["Communicate"] = "Kommuniser";
+App::$strings["View your channel homepage"] = "Vis kanalens hjemmeside";
+App::$strings["View your network stream"] = "Vis nettverksstrømmen";
+App::$strings["Documentation"] = "Dokumentasjon";
+App::$strings["Missing Features?"] = "Noe som mangler?";
+App::$strings["Pin apps to navigation bar"] = "Fest apper til navigasjonslinjen";
+App::$strings["Install more apps"] = "Legg til flere apper";
+App::$strings["View public stream"] = "";
+App::$strings["Add New Connection"] = "Legg til ny forbindelse";
+App::$strings["Enter channel address"] = "Skriv kanaladressen";
+App::$strings["Examples: bob@example.com, https://example.com/barbara"] = "Eksempel: ola@eksempel.no, https://eksempel.no/kari";
+App::$strings["Member registrations waiting for confirmation"] = "";
+App::$strings["Inspect queue"] = "Inspiser kø";
+App::$strings["Queueworker"] = "";
+App::$strings["DB updates"] = "Databaseoppdateringer";
+App::$strings["Addon Features"] = "";
+App::$strings["Overview"] = "";
+App::$strings["Select Channel"] = "";
+App::$strings["Read-write"] = "";
+App::$strings["Read-only"] = "";
+App::$strings["Channel Calendar"] = "";
+App::$strings["Shared CalDAV Calendars"] = "";
+App::$strings["Share this calendar"] = "";
+App::$strings["Calendar name and color"] = "";
+App::$strings["Create new CalDAV calendar"] = "";
+App::$strings["Calendar Name"] = "";
+App::$strings["Calendar Tools"] = "";
+App::$strings["Import calendar"] = "";
+App::$strings["Select a calendar to import to"] = "";
+App::$strings["Addressbooks"] = "";
+App::$strings["Addressbook name"] = "";
+App::$strings["Create new addressbook"] = "";
+App::$strings["Addressbook Name"] = "";
+App::$strings["Addressbook Tools"] = "";
+App::$strings["Import addressbook"] = "";
+App::$strings["Select an addressbook to import to"] = "";
+App::$strings["Commented Date"] = "Sist kommentert";
+App::$strings["Order by last commented date"] = "Sorter etter dato for siste kommentar";
+App::$strings["Posted Date"] = "Innleggsdato";
+App::$strings["Order by last posted date"] = "Sorter etter dato innlegg ble postet";
+App::$strings["Date Unthreaded"] = "Utrådet";
+App::$strings["Order unthreaded by date"] = "Sorter innlegg og kommentarer uavhengig av hverandre etter dato";
+App::$strings["Stream Order"] = "Sortering av innlegg";
+App::$strings["Chat Members"] = "";
+App::$strings["Source channel not found."] = "Fant ikke kildekanalen.";
+App::$strings["generic profile image"] = "";
+App::$strings["random geometric pattern"] = "";
+App::$strings["monster face"] = "";
+App::$strings["computer generated face"] = "";
+App::$strings["retro arcade style face"] = "";
+App::$strings["Hub default profile photo"] = "";
+App::$strings["Information"] = "";
+App::$strings["Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar."] = "";
+App::$strings["Save Settings"] = "";
+App::$strings["Default avatar image"] = "";
+App::$strings["Select default avatar image if none was found at Gravatar. See README"] = "";
+App::$strings["Rating of images"] = "";
+App::$strings["Select the appropriate avatar rating for your site. See README"] = "";
+App::$strings["Gravatar settings updated."] = "";
+App::$strings["Send your identity to all websites"] = "";
+App::$strings["Send ZID"] = "";
+App::$strings["An account has been created for you."] = "";
+App::$strings["Authentication successful but rejected: account creation is disabled."] = "";
+App::$strings["DB Cleanup Failure"] = "";
+App::$strings["[cart] Item Added"] = "";
+App::$strings["Order already checked out."] = "";
+App::$strings["Drop database tables when uninstalling."] = "";
+App::$strings["Cart Settings"] = "";
+App::$strings["Shop"] = "";
+App::$strings["Profile Unavailable."] = "Profilen er ikke tilgjengelig.";
+App::$strings["Order Not Found"] = "";
+App::$strings["You must be logged into the Grid to shop."] = "";
+App::$strings["Invalid channel"] = "Ugyldig kanal";
+App::$strings["Order not found."] = "";
+App::$strings["Access denied."] = "Ingen tilgang";
+App::$strings["No Order Found"] = "";
+App::$strings["An unknown error has occurred Please start again."] = "";
+App::$strings["Requirements not met."] = "";
+App::$strings["Review your order and complete any needed requirements."] = "";
+App::$strings["Invalid Payment Type. Please start again."] = "";
+App::$strings["Order not found"] = "";
+App::$strings["Enable Order/Item Options"] = "";
+App::$strings["Label"] = "";
+App::$strings["Instructions"] = "";
+App::$strings["Enable Subscription Management Module"] = "";
+App::$strings["Cannot include subscription items with different terms in the same order."] = "";
+App::$strings["Select Subscription to Edit"] = "";
+App::$strings["Edit Subscriptions"] = "";
+App::$strings["Subscription SKU"] = "";
+App::$strings["Catalog Description"] = "";
+App::$strings["Subscription available for purchase."] = "";
+App::$strings["Maximum active subscriptions to this item per account."] = "";
+App::$strings["Subscription price."] = "";
+App::$strings["Quantity"] = "";
+App::$strings["Term"] = "";
+App::$strings["Enable Manual Cart Module"] = "";
+App::$strings["New Sku"] = "";
+App::$strings["Cannot save edits to locked item."] = "";
+App::$strings["Changes Locked"] = "";
+App::$strings["Item available for purchase."] = "";
+App::$strings["Price"] = "";
+App::$strings["Photo URL"] = "";
+App::$strings["Enable Paypal Button Module (API-v2)"] = "";
+App::$strings["Use Production Key"] = "";
+App::$strings["Paypal Sandbox Client Key"] = "";
+App::$strings["Paypal Sandbox Secret Key"] = "";
+App::$strings["Paypal Production Client Key"] = "";
+App::$strings["Paypal Production Secret Key"] = "";
+App::$strings["Paypal button payments are not enabled."] = "";
+App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "";
+App::$strings["Enable Paypal Button Module"] = "";
+App::$strings["Enable Hubzilla Services Module"] = "";
+App::$strings["SKU not found."] = "";
+App::$strings["Invalid Activation Directive."] = "";
+App::$strings["Invalid Deactivation Directive."] = "";
+App::$strings["Add to this privacy group"] = "";
+App::$strings["Set user service class"] = "";
+App::$strings["You must be using a local account to purchase this service."] = "";
+App::$strings["Add buyer to privacy group"] = "";
+App::$strings["Add buyer as connection"] = "";
+App::$strings["Set Service Class"] = "";
+App::$strings["Access Denied."] = "Ingen tilgang";
+App::$strings["Access Denied"] = "Ingen tilgang";
+App::$strings["Invalid Item"] = "Ugyldig element.";
+App::$strings["Error: order mismatch. Please try again."] = "";
+App::$strings["Manual payments are not enabled."] = "";
+App::$strings["Finished"] = "";
+App::$strings["Enable Test Catalog"] = "";
+App::$strings["Enable Manual Payments"] = "";
+App::$strings["Base Merchant Currency"] = "";
+App::$strings["Edit Article"] = "";
+App::$strings["View Articles"] = "";
+App::$strings["Add Article"] = "";
+App::$strings["Hubzilla File Storage Import"] = "";
+App::$strings["This will import all your cloud files from another server."] = "";
+App::$strings["Hubzilla Server base URL"] = "";
+App::$strings["Since modified date yyyy-mm-dd"] = "";
+App::$strings["Until modified date yyyy-mm-dd"] = "";
+App::$strings["View Larger"] = "";
+App::$strings["Tile Server URL"] = "";
+App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">public tile servers</a>"] = "";
+App::$strings["Nominatim (reverse geocoding) Server URL"] = "";
+App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">Nominatim servers</a>"] = "";
+App::$strings["Default zoom"] = "";
+App::$strings["The default zoom level. (1:world, 18:highest, also depends on tile server)"] = "";
+App::$strings["Include marker on map"] = "";
+App::$strings["Include a marker on the map."] = "";
+App::$strings["WYSIWYG status editor"] = "";
+App::$strings["WYSIWYG Status App"] = "";
+App::$strings["WYSIWYG Status"] = "";
+App::$strings["Network error"] = "";
+App::$strings["API error"] = "";
+App::$strings["Unknown issue"] = "";
+App::$strings["Unable to retrieve email address from remote identity provider"] = "";
+App::$strings["Unable to login using email address "] = "";
+App::$strings["Social Authentication using your social media account"] = "";
+App::$strings["This app enables one or more social provider sign-in buttons on the login page."] = "";
+App::$strings["Add an identity provider"] = "";
+App::$strings["Enable "] = "Skru på";
+App::$strings["Key"] = "";
+App::$strings["Word"] = "";
+App::$strings["Secret"] = "";
+App::$strings["Add a custom provider"] = "";
+App::$strings["Remove an identity provider"] = "";
+App::$strings["Social authentication"] = "";
+App::$strings["Error while saving provider settings"] = "";
+App::$strings["Custom provider already exists"] = "";
+App::$strings["Social authentication settings saved."] = "";
+App::$strings["You are now authenticated to pumpio."] = "";
+App::$strings["return to the featured settings page"] = "tilbake til funksjonsinnstillinger";
+App::$strings["Post to Pump.io"] = "";
+App::$strings["Pump.io Settings saved."] = "";
+App::$strings["Pump.io servername"] = "";
+App::$strings["Without \"http://\" or \"https://\""] = "";
+App::$strings["Pump.io username"] = "";
+App::$strings["Without the servername"] = "";
+App::$strings["You are not authenticated to pumpio"] = "";
+App::$strings["(Re-)Authenticate your pump.io connection"] = "";
+App::$strings["Post to pump.io by default"] = "";
+App::$strings["Should posts be public"] = "";
+App::$strings["Mirror all public posts"] = "";
+App::$strings["Pump.io Crosspost Connector"] = "";
+App::$strings["Block Completely"] = "Blokker helt";
+App::$strings["superblock settings updated"] = "innstillingene til superblokk ble oppdatert";
+App::$strings["Currently blocked"] = "Blokkert for øyeblikket";
+App::$strings["No channels currently blocked"] = "Ingen kanaler er blokkert i øyeblikket";
+App::$strings["Gallery"] = "";
+App::$strings["Photo Gallery"] = "";
+App::$strings["You're welcome."] = "";
+App::$strings["Ah shucks..."] = "";
+App::$strings["Don't mention it."] = "";
+App::$strings["&lt;blush&gt;"] = "";
+App::$strings["System defaults:"] = "";
+App::$strings["Preferred Clipart IDs"] = "";
+App::$strings["List of preferred clipart ids. These will be shown first."] = "";
+App::$strings["Default Search Term"] = "Standard søkeord";
+App::$strings["The default search term. These will be shown second."] = "Standard søkeord. Disse vil vises som nummer to.";
+App::$strings["Return After"] = "";
+App::$strings["Page to load after image selection."] = "";
+App::$strings["Profile List"] = "";
+App::$strings["Order of Preferred"] = "";
+App::$strings["Sort order of preferred clipart ids."] = "";
+App::$strings["Newest first"] = "";
+App::$strings["As entered"] = "";
+App::$strings["Order of other"] = "";
+App::$strings["Sort order of other clipart ids."] = "";
+App::$strings["Most downloaded first"] = "";
+App::$strings["Most liked first"] = "";
+App::$strings["Preferred IDs Message"] = "";
+App::$strings["Message to display above preferred results."] = "";
+App::$strings["Uploaded by: "] = "";
+App::$strings["Drawn by: "] = "";
+App::$strings["Use this image"] = "";
+App::$strings["Or select from a free OpenClipart.org image:"] = "";
+App::$strings["Search Term"] = "Søkeord";
+App::$strings["Unknown error. Please try again later."] = "";
+App::$strings["Profile photo updated successfully."] = "";
+App::$strings["Hubzilla Directory Stats"] = "";
+App::$strings["Total Hubs"] = "";
+App::$strings["Hubzilla Hubs"] = "";
+App::$strings["Friendica Hubs"] = "";
+App::$strings["Diaspora Pods"] = "";
+App::$strings["Hubzilla Channels"] = "";
+App::$strings["Friendica Channels"] = "";
+App::$strings["Diaspora Channels"] = "";
+App::$strings["Aged 35 and above"] = "";
+App::$strings["Aged 34 and under"] = "";
+App::$strings["Average Age"] = "";
+App::$strings["Known Chatrooms"] = "";
+App::$strings["Known Tags"] = "";
+App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "";
+App::$strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Den oppgitte URLen for APIet er ikke gyldig. Kontakt serverens administrator.";
+App::$strings["We could not contact the GNU social API with the Path you entered."] = "";
+App::$strings["GNU social settings updated."] = "";
+App::$strings["Globally Available GNU social OAuthKeys"] = "";
+App::$strings["There are preconfigured OAuth key pairs for some GNU social servers available. If you are using one of them, please use these credentials.<br />If not feel free to connect to any other GNU social instance (see below)."] = "";
+App::$strings["Provide your own OAuth Credentials"] = "";
+App::$strings["No consumer key pair for GNU social found. Register your Hubzilla Account as an desktop client on your GNU social account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Hubzilla installation at your favourite GNU social installation."] = "";
+App::$strings["OAuth Consumer Key"] = "";
+App::$strings["OAuth Consumer Secret"] = "";
+App::$strings["Base API Path"] = "";
+App::$strings["Remember the trailing /"] = "";
+App::$strings["GNU social application name"] = "";
+App::$strings["To connect to your GNU social account click the button below to get a security code from GNU social which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to GNU social."] = "";
+App::$strings["Log in with GNU social"] = "";
+App::$strings["Copy the security code from GNU social here"] = "";
+App::$strings["Cancel Connection Process"] = "";
+App::$strings["Current GNU social API is"] = "";
+App::$strings["Cancel GNU social Connection"] = "";
+App::$strings["Currently connected to: "] = "";
+App::$strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to GNU social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "";
+App::$strings["Post to GNU social by default"] = "";
+App::$strings["If enabled your public postings will be posted to the associated GNU-social account by default"] = "";
+App::$strings["Clear OAuth configuration"] = "";
+App::$strings["GNU-Social Crosspost Connector"] = "";
+App::$strings["Post to GNU social"] = "";
+App::$strings["API URL"] = "";
+App::$strings["Application name"] = "";
+App::$strings["Post to Livejournal"] = "";
+App::$strings["Posted by"] = "";
+App::$strings["Source"] = "";
+App::$strings["Livejournal username"] = "";
+App::$strings["Livejournal password"] = "";
+App::$strings["Post to Livejournal by default"] = "";
+App::$strings["Send wall-to-wall posts to Livejournal"] = "";
+App::$strings["Add link to original post"] = "";
+App::$strings["Livejournal Crosspost Connector"] = "";
+App::$strings["pageheader Settings saved."] = "";
+App::$strings["Message to display on every page on this server"] = "";
+App::$strings["Page Header"] = "";
+App::$strings["Rainbow Tag App"] = "";
+App::$strings["Add some colour to tag clouds"] = "";
+App::$strings["Rainbow Tag"] = "";
+App::$strings["Recent Channel/Profile Viewers"] = "";
+App::$strings["No entries."] = "";
+App::$strings["Your account on %s will expire in a few days."] = "";
+App::$strings["Your test account is about to expire."] = "";
+App::$strings["nofed Settings saved."] = "";
+App::$strings["Federate posts by default"] = "";
+App::$strings["No Federation"] = "";
+App::$strings["Federate"] = "";
+App::$strings["Your Webbie:"] = "";
+App::$strings["Fontsize (px):"] = "";
+App::$strings["Link:"] = "";
+App::$strings["Like us on Hubzilla"] = "";
+App::$strings["Embed:"] = "";
+App::$strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = "";
+App::$strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = "";
+App::$strings["Piwik Base URL"] = "";
+App::$strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "";
+App::$strings["Site ID"] = "";
+App::$strings["Show opt-out cookie link?"] = "";
+App::$strings["Asynchronous tracking"] = "";
+App::$strings["Enable frontend JavaScript error tracking"] = "";
+App::$strings["This feature requires Piwik >= 2.2.0"] = "";
+App::$strings["Page to load after login"] = "";
+App::$strings["Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave blank for default network page (grid)."] = "";
+App::$strings["Startpage"] = "";
+App::$strings["Twitter settings updated."] = "";
+App::$strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "";
+App::$strings["At this Hubzilla instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "";
+App::$strings["Log in with Twitter"] = "";
+App::$strings["Copy the PIN from Twitter here"] = "";
+App::$strings["<strong>Note:</strong> Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "";
+App::$strings["Twitter post length"] = "";
+App::$strings["Maximum tweet length"] = "";
+App::$strings["Send public postings to Twitter by default"] = "";
+App::$strings["If enabled your public postings will be posted to the associated Twitter account by default"] = "";
+App::$strings["Twitter Crosspost Connector"] = "";
+App::$strings["Post to Twitter"] = "";
+App::$strings["Submit Settings"] = "";
+App::$strings["Fuzzloc Settings updated."] = "";
+App::$strings["Minimum offset in meters"] = "";
+App::$strings["Maximum offset in meters"] = "";
+App::$strings["Fuzzy Location"] = "";
+App::$strings["No username found in import file."] = "Ingen brukernavn ble funnet i importfilen.";
+App::$strings["Import completed."] = "Import ferdig.";
+App::$strings["%1\$s dislikes %2\$s's %3\$s"] = "";
+App::$strings["Diaspora Protocol Settings updated."] = "";
+App::$strings["The diaspora protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "";
+App::$strings["Prevent your hashtags from being redirected to other sites"] = "";
+App::$strings["Sign and forward posts and comments with no existing Diaspora signature"] = "";
+App::$strings["Followed hashtags (comma separated, do not include the #)"] = "";
+App::$strings["Diaspora Protocol"] = "";
+App::$strings["Please install the statistics addon to be able to configure a diaspora relay"] = "";
+App::$strings["Diaspora Relay Handle"] = "";
+App::$strings["Address of a diaspora relay. Example: relay@diasporarelay.tld"] = "";
+App::$strings["Diaspora relay could not be imported"] = "";
+App::$strings["No subject"] = "";
+App::$strings["Photos imported"] = "";
+App::$strings["Redmatrix Photo Album Import"] = "";
+App::$strings["This will import all your Redmatrix photo albums to this channel."] = "";
+App::$strings["Redmatrix Server base URL"] = "";
+App::$strings["Redmatrix Login Username"] = "";
+App::$strings["Redmatrix Login Password"] = "";
+App::$strings["Import just this album"] = "";
+App::$strings["Leave blank to import all albums"] = "";
+App::$strings["Maximum count to import"] = "";
+App::$strings["0 or blank to import all available"] = "";
+App::$strings["Some setting"] = "";
+App::$strings["A setting"] = "";
+App::$strings["Skeleton Settings"] = "";
+App::$strings["QR code"] = "";
+App::$strings["QR Generator"] = "";
+App::$strings["Enter some text"] = "";
+App::$strings["Dreamwidth Crosspost Connector Settings saved."] = "";
+App::$strings["Dreamwidth username"] = "";
+App::$strings["Dreamwidth password"] = "";
+App::$strings["Post to Dreamwidth by default"] = "";
+App::$strings["Link description (default:"] = "";
+App::$strings["Dreamwidth Crosspost Connector"] = "";
+App::$strings["Post to Dreamwidth"] = "";
+App::$strings["Show Upload Limits"] = "";
+App::$strings["Hubzilla configured maximum size: "] = "";
+App::$strings["PHP upload_max_filesize: "] = "";
+App::$strings["PHP post_max_size (must be larger than upload_max_filesize): "] = "";
+App::$strings["NSA Bait App"] = "";
+App::$strings["Make yourself a political target."] = "";
+App::$strings["No server specified"] = "";
+App::$strings["Posts imported"] = "";
+App::$strings["Files imported"] = "";
+App::$strings["This will import all your conversations and cloud files from a cloned channel on another server. This may take a while if you have lots of posts and or files."] = "";
+App::$strings["Include posts"] = "";
+App::$strings["Conversations, Articles, Cards, and other posted content"] = "";
+App::$strings["Include files"] = "";
+App::$strings["Files, Photos and other cloud storage"] = "";
+App::$strings["Original Server base URL"] = "";
+App::$strings["Friendica Crosspost Connector Settings saved."] = "";
+App::$strings["Send public postings to Friendica by default"] = "";
+App::$strings["Friendica API Path"] = "";
+App::$strings["https://{sitename}/api"] = "";
+App::$strings["Friendica login name"] = "";
+App::$strings["Friendica password"] = "";
+App::$strings["Friendica Crosspost Connector"] = "";
+App::$strings["Post to Friendica"] = "";
+App::$strings["New registration"] = "";
+App::$strings["Message sent to %s. New account registration: %s"] = "";
+App::$strings["Redmatrix File Storage Import"] = "";
+App::$strings["This will import all your Redmatrix cloud files to this channel."] = "";
+App::$strings["Send test email"] = "";
+App::$strings["No recipients found."] = "";
+App::$strings["Mail sent."] = "";
+App::$strings["Sending of mail failed."] = "";
+App::$strings["Mail Test"] = "";
+App::$strings["Message subject"] = "";
+App::$strings["Errors encountered deleting database table "] = "";
+App::$strings["Drop tables when uninstalling?"] = "";
+App::$strings["If checked, the Rendezvous database tables will be deleted when the plugin is uninstalled."] = "";
+App::$strings["Mapbox Access Token"] = "";
+App::$strings["If you enter a Mapbox access token, it will be used to retrieve map tiles from Mapbox instead of the default OpenStreetMap tile server."] = "";
+App::$strings["Rendezvous"] = "";
+App::$strings["This identity has been deleted by another member due to inactivity. Please press the \"New identity\" button or refresh the page to register a new identity. You may use the same name."] = "";
+App::$strings["Welcome to Rendezvous!"] = "";
+App::$strings["Enter your name to join this rendezvous. To begin sharing your location with the other members, tap the GPS control. When your location is discovered, a red dot will appear and others will be able to see you on the map."] = "";
+App::$strings["Let's meet here"] = "";
+App::$strings["New marker"] = "";
+App::$strings["Edit marker"] = "";
+App::$strings["New identity"] = "";
+App::$strings["Delete marker"] = "";
+App::$strings["Delete member"] = "";
+App::$strings["Edit proximity alert"] = "";
+App::$strings["A proximity alert will be issued when this member is within a certain radius of you.<br><br>Enter a radius in meters (0 to disable):"] = "";
+App::$strings["distance"] = "";
+App::$strings["Proximity alert distance (meters)"] = "";
+App::$strings["A proximity alert will be issued when you are within a certain radius of the marker location.<br><br>Enter a radius in meters (0 to disable):"] = "";
+App::$strings["Marker proximity alert"] = "";
+App::$strings["Reminder note"] = "";
+App::$strings["Enter a note to be displayed when you are within the specified proximity..."] = "";
+App::$strings["Add new rendezvous"] = "";
+App::$strings["Create a new rendezvous and share the access link with those you wish to invite to the group. Those who open the link become members of the rendezvous. They can view other member locations, add markers to the map, or share their own locations with the group."] = "";
+App::$strings["You have no rendezvous. Press the button above to create a rendezvous!"] = "";
+App::$strings["Channel is required."] = "";
+App::$strings["Hubzilla Crosspost Connector Settings saved."] = "";
+App::$strings["Send public postings to Hubzilla channel by default"] = "";
+App::$strings["Hubzilla API Path"] = "";
+App::$strings["Hubzilla login name"] = "";
+App::$strings["Hubzilla channel name"] = "";
+App::$strings["Hubzilla password"] = "";
+App::$strings["Hubzilla Crosspost Connector"] = "";
+App::$strings["Post to Hubzilla"] = "";
+App::$strings["Workflow user."] = "";
+App::$strings["This channel"] = "";
+App::$strings["Create New Workflow Item"] = "";
+App::$strings["Workflow"] = "";
+App::$strings["No Workflows Available"] = "";
+App::$strings["Add item to which workflow"] = "";
+App::$strings["Create Workflow Item"] = "";
+App::$strings["Link"] = "";
+App::$strings["Web link."] = "";
+App::$strings["Brief description or title"] = "";
+App::$strings["Notes and Info"] = "";
+App::$strings["Used to order links"] = "";
+App::$strings["Body"] = "";
+App::$strings["Workflow Settings"] = "";
+App::$strings["Workflow settings"] = "Instillinger for redigering";
+App::$strings["Possible adult content"] = "";
+App::$strings["%s - view"] = "";
+App::$strings["NSFW Settings saved."] = "";
+App::$strings["This app looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "";
+App::$strings["Comma separated list of keywords to hide"] = "";
+App::$strings["Word, /regular-expression/, lang=xx, lang!=xx"] = "";
+App::$strings["NSFW"] = "";
+App::$strings["Three Dimensional Tic-Tac-Toe"] = "";
+App::$strings["3D Tic-Tac-Toe"] = "";
+App::$strings["New game"] = "";
+App::$strings["New game with handicap"] = "";
+App::$strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "";
+App::$strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "";
+App::$strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "";
+App::$strings["You go first..."] = "";
+App::$strings["I'm going first this time..."] = "";
+App::$strings["You won!"] = "";
+App::$strings["\"Cat\" game!"] = "";
+App::$strings["I won!"] = "";
+App::$strings["Photo Cache settings saved."] = "";
+App::$strings["Saves a copy of images from external sites locally to increase your anonymity in the web."] = "";
+App::$strings["Minimal photo size for caching"] = "";
+App::$strings["In pixels. From 1 up to 1024, 0 will be replaced with system default."] = "";
+App::$strings["Photo Cache"] = "";
+App::$strings["Logfile archive directory"] = "";
+App::$strings["Directory to store rotated logs"] = "";
+App::$strings["Logfile size in bytes before rotating"] = "";
+App::$strings["Number of logfiles to retain"] = "";
+App::$strings["XMPP settings updated."] = "";
+App::$strings["XMPP App"] = "";
+App::$strings["Embedded XMPP (Jabber) client"] = "";
+App::$strings["Individual credentials"] = "";
+App::$strings["Jabber BOSH server"] = "";
+App::$strings["XMPP Settings"] = "";
+App::$strings["Jabber BOSH host"] = "";
+App::$strings["Use central userbase"] = "";
+App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "";
+App::$strings["(No Title)"] = "(Ingen tittel)";
+App::$strings["Wiki page create failed."] = "Kunne ikke opprette wikiside.";
+App::$strings["Wiki not found."] = "Fant ikke wikien.";
+App::$strings["Destination name already exists"] = "Navnet finnes allerede";
+App::$strings["Page not found"] = "Fant ikke siden";
+App::$strings["Error reading page content"] = "Det oppstod en feil under lesing av innholder på siden";
+App::$strings["Error reading wiki"] = "Det oppstod en feil ved lesing av wikien";
+App::$strings["Page update failed."] = "Oppdatering av siden mislyktes.";
+App::$strings["Nothing deleted"] = "Ingenting ble slettet";
+App::$strings["Compare: object not found."] = "Sammanlign: fant ikke objektet.";
+App::$strings["Page updated"] = "Siden ble oppdatert";
+App::$strings["Wiki resource_id required for git commit"] = "Wiki ressurs_id er nødvendig for å lagre i git";
+App::$strings["__ctx:wiki_history__ Message"] = "Melding";
+App::$strings["Date"] = "Dato";
+App::$strings["Revert"] = "Tilbakestill";
+App::$strings["Compare"] = "Sammenlign";
+App::$strings["Wiki updated successfully"] = "Wikien ble oppdatert";
+App::$strings["Wiki files deleted successfully"] = "Wikifiler ble slettet";
+App::$strings["Error retrieving wiki"] = "Det oppstod en feil ved henting av wikien";
+App::$strings["Error creating zip file export folder"] = "Det oppstod en feil ved eksport av mappe til zip fil";
+App::$strings["Error downloading wiki: "] = "";
+App::$strings["Wikis"] = "Wikier";
+App::$strings["Wiki name"] = "";
+App::$strings["Content type"] = "";
+App::$strings["Any&nbsp;type"] = "";
+App::$strings["Lock content type"] = "";
+App::$strings["Create a status post for this wiki"] = "";
+App::$strings["Edit Wiki Name"] = "";
+App::$strings["Wiki not found"] = "Fant ikke wikien.";
+App::$strings["Rename page"] = "";
+App::$strings["Error retrieving page content"] = "";
+App::$strings["New page"] = "";
+App::$strings["Revision Comparison"] = "";
+App::$strings["Short description of your changes (optional)"] = "";
+App::$strings["New page name"] = "";
+App::$strings["Embed image from photo albums"] = "";
+App::$strings["History"] = "";
+App::$strings["Error creating wiki. Invalid name."] = "";
+App::$strings["A wiki with this name already exists."] = "";
+App::$strings["Wiki created, but error creating Home page."] = "";
+App::$strings["Error creating wiki"] = "";
+App::$strings["Error updating wiki. Invalid name."] = "";
+App::$strings["Error updating wiki"] = "";
+App::$strings["Wiki delete permission denied."] = "";
+App::$strings["Error deleting wiki"] = "";
+App::$strings["New page created"] = "";
+App::$strings["Cannot delete Home"] = "";
+App::$strings["Current Revision"] = "";
+App::$strings["Selected Revision"] = "";
+App::$strings["You must be authenticated."] = "";
+App::$strings["Add new page"] = "Legg til ny side";
+App::$strings["View Cards"] = "";
+App::$strings["Wiki Pages"] = "Wikisider";
+App::$strings["Page name"] = "Sidenavn";
+App::$strings["Who likes me?"] = "";
+App::$strings["Edit Card"] = "";
+App::$strings["Add Card"] = "";
+App::$strings["Libertree Crosspost Connector Settings saved."] = "";
+App::$strings["Libertree API token"] = "";
+App::$strings["Libertree site URL"] = "";
+App::$strings["Post to Libertree by default"] = "";
+App::$strings["Libertree Crosspost Connector"] = "";
+App::$strings["Post to Libertree"] = "";
+App::$strings["Send email to all members"] = "";
+App::$strings["%1\$d of %2\$d messages sent."] = "";
+App::$strings["Send email to all hub members."] = "";
+App::$strings["Sender Email address"] = "";
+App::$strings["Test mode (only send to hub administrator)"] = "";
+App::$strings["Use markdown for editing posts"] = "";
+App::$strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk at ID-en er stavet riktig.";
+App::$strings["The error message was:"] = "Feilmeldingen var:";
+App::$strings["OpenID protocol error. No ID returned."] = "OpenID protokollfeil. Ingen ID ble returnert.";
+App::$strings["Welcome %s. Remote authentication successful."] = "Velkommen %s. Ekstern autentisering er vellykket.";
+App::$strings["First Name"] = "Fornavn";
+App::$strings["Last Name"] = "Etternavn";
+App::$strings["Full Name"] = "Fullt navn";
+App::$strings["Profile Photo 16px"] = "Profilbilde 16px";
+App::$strings["Profile Photo 32px"] = "Profilbilde 32px";
+App::$strings["Profile Photo 48px"] = "Profilbilde 48px";
+App::$strings["Profile Photo 64px"] = "Profilbilde 64px";
+App::$strings["Profile Photo 80px"] = "Profilbilde 80px";
+App::$strings["Profile Photo 128px"] = "Profilbilde 128px";
+App::$strings["Birth Year"] = "Fødselsår";
+App::$strings["Birth Month"] = "Fødselsmåne";
+App::$strings["Birth Day"] = "Fødselsdag";
+App::$strings["Birthdate"] = "Fødselsdato";
+App::$strings["Popular Channels"] = "";
+App::$strings["Channels to auto connect"] = "";
+App::$strings["Comma separated list"] = "";
+App::$strings["IRC Settings"] = "";
+App::$strings["IRC settings saved."] = "";
+App::$strings["IRC Chatroom"] = "";
+App::$strings["__ctx:opensearch__ Search %1\$s (%2\$s)"] = "Søk %1\$s (%2\$s)";
+App::$strings["__ctx:opensearch__ \$Projectname"] = "\$Projectname";
+App::$strings["Search \$Projectname"] = "";
+App::$strings["ActivityPub Protocol Settings updated."] = "";
+App::$strings["The activitypub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "";
+App::$strings["Send activities of type note instead of article"] = "";
+App::$strings["Microblog services such as Mastodon do not properly support articles"] = "";
+App::$strings["Activitypub Protocol"] = "";
+App::$strings["Not allowed."] = "";
+App::$strings["Insane Journal Crosspost Connector Settings saved."] = "";
+App::$strings["Insane Journal Crosspost Connector App"] = "";
+App::$strings["Relay public postings to Insane Journal"] = "";
+App::$strings["InsaneJournal username"] = "";
+App::$strings["InsaneJournal password"] = "";
+App::$strings["Post to InsaneJournal by default"] = "";
+App::$strings["Insane Journal Crosspost Connector"] = "";
+App::$strings["Post to Insane Journal"] = "";
+App::$strings["Random Planet App"] = "";
+App::$strings["Set a random planet from the Star Wars Empire as your location when posting"] = "";
+App::$strings["Project Servers and Resources"] = "";
+App::$strings["Project Creator and Tech Lead"] = "";
+App::$strings["And the hundreds of other people and organisations who helped make the Hubzilla possible."] = "";
+App::$strings["The Redmatrix/Hubzilla projects are provided primarily by volunteers giving their time and expertise - and often paying out of pocket for services they share with others."] = "";
+App::$strings["There is no corporate funding and no ads, and we do not collect and sell your personal information. (We don't control your personal information - <strong>you do</strong>.)"] = "";
+App::$strings["Help support our ground-breaking work in decentralisation, web identity, and privacy."] = "";
+App::$strings["Your donations keep servers and services running and also helps us to provide innovative new features and continued development."] = "";
+App::$strings["Donate"] = "";
+App::$strings["Choose a project, developer, or public hub to support with a one-time donation"] = "";
+App::$strings["Donate Now"] = "";
+App::$strings["<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"] = "";
+App::$strings["Please indicate if you would like your first name or full name (or nothing) to appear in our sponsor listing"] = "";
+App::$strings["Sponsor"] = "";
+App::$strings["Special thanks to: "] = "";
+App::$strings["Fediquest App"] = "Endre app";
+App::$strings["A distributed quest for a given word (game)."] = "";
+App::$strings["To start a game, enter [fediquest]your_word[/fediquest] somewhere in a toplevel post."] = "";
+App::$strings["Your contacts can post their guess in the comments."] = "";
+App::$strings["Your channel will evaluate the guess and automatically post the response."] = "";
+App::$strings["Correct letters"] = "";
+App::$strings["Letters contained in the word but at the wrong spot"] = "";
+App::$strings["Letters not contained in the word"] = "";
+App::$strings["ERROR: word length is not correct!"] = "";
+App::$strings["Post to WordPress"] = "";
+App::$strings["Wordpress Settings saved."] = "";
+App::$strings["WordPress username"] = "";
+App::$strings["WordPress password"] = "";
+App::$strings["WordPress API URL"] = "";
+App::$strings["Typically https://your-blog.tld/xmlrpc.php"] = "";
+App::$strings["WordPress blogid"] = "";
+App::$strings["For multi-user sites such as wordpress.com, otherwise leave blank"] = "";
+App::$strings["Post to WordPress by default"] = "";
+App::$strings["Forward comments (requires hubzilla_wp plugin)"] = "";
+App::$strings["Wordpress Post"] = "";
+App::$strings["Allow magic authentication only to websites of your immediate connections"] = "";
+App::$strings["Authchoose"] = "";
+App::$strings["Your channel has been upgraded to \$Projectname version"] = "";
+App::$strings["Please have a look at the"] = "";
+App::$strings["git history"] = "";
+App::$strings["change log"] = "";
+App::$strings["for further info."] = "";
+App::$strings["\$Projectname Upgrade Info"] = "\$Projectname";
+App::$strings["Do not show this again"] = "";
+App::$strings["Hide Aside App"] = "";
+App::$strings["Fade out aside areas after a while when using endless scroll"] = "";
+App::$strings["text to include in all outgoing posts from this site"] = "";
diff --git a/view/nb-no/lostpass_eml.tpl b/view/nb/lostpass_eml.tpl
index 3b79d2791..3b79d2791 100644
--- a/view/nb-no/lostpass_eml.tpl
+++ b/view/nb/lostpass_eml.tpl
diff --git a/view/nb-no/messages.po b/view/nb/messages.po
index 152120b15..152120b15 100644
--- a/view/nb-no/messages.po
+++ b/view/nb/messages.po
diff --git a/view/nb-no/passchanged_eml.tpl b/view/nb/passchanged_eml.tpl
index 0d94be3c2..0d94be3c2 100644
--- a/view/nb-no/passchanged_eml.tpl
+++ b/view/nb/passchanged_eml.tpl
diff --git a/view/nb-no/register_open_eml.tpl b/view/nb/register_open_eml.tpl
index 4b397201c..4b397201c 100644
--- a/view/nb-no/register_open_eml.tpl
+++ b/view/nb/register_open_eml.tpl
diff --git a/view/nb-no/register_verify_eml.tpl b/view/nb/register_verify_eml.tpl
index 85d9a12d3..85d9a12d3 100644
--- a/view/nb-no/register_verify_eml.tpl
+++ b/view/nb/register_verify_eml.tpl
diff --git a/view/nb-no/strings.php b/view/nb/strings.php
index 01a95a5a3..01a95a5a3 100644
--- a/view/nb-no/strings.php
+++ b/view/nb/strings.php
diff --git a/view/nb-no/update_fail_eml.tpl b/view/nb/update_fail_eml.tpl
index 61f44b1e6..61f44b1e6 100644
--- a/view/nb-no/update_fail_eml.tpl
+++ b/view/nb/update_fail_eml.tpl
diff --git a/view/pdl/mod_rmagic.pdl b/view/pdl/mod_rmagic.pdl
new file mode 100644
index 000000000..3065703de
--- /dev/null
+++ b/view/pdl/mod_rmagic.pdl
@@ -0,0 +1,6 @@
+[region=aside]
+[widget=notifications][var=sys_only]1[/var][/widget]
+[/region]
+[region=content]
+$content
+[/region]
diff --git a/view/php/theme_init.php b/view/php/theme_init.php
index 821e9b46e..e6bd09224 100644
--- a/view/php/theme_init.php
+++ b/view/php/theme_init.php
@@ -2,7 +2,6 @@
require_once('include/plugin.php');
-head_add_css('/library/tiptip/tipTip.css');
head_add_css('/library/jRange/jquery.range.css');
head_add_css('/view/css/conversation.css');
@@ -20,7 +19,6 @@ head_add_js('/library/sprintf.js/dist/sprintf.min.js');
head_add_js('/library/textcomplete/textcomplete.min.js');
head_add_js('autocomplete.js');
-head_add_js('/library/jquery.timeago.js');
head_add_js('/library/readmore.js/readmore.js');
head_add_js('/library/sjcl/sjcl.js');
@@ -36,7 +34,6 @@ head_add_js('/library/colorbox/jquery.colorbox-min.js');
head_add_js('/library/jquery.AreYouSure/jquery.are-you-sure.js');
head_add_js('/library/tableofcontents/jquery.toc.js');
head_add_js('/library/Sortable/Sortable.min.js');
-head_add_js('/vendor/desandro/imagesloaded/imagesloaded.pkgd.min.js');
/**
* Those who require this feature will know what to do with it.
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index 12f5e1bad..97fe40c9c 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -1144,12 +1144,20 @@ a .drop-icons:hover {
.generic-content-wrapper {
background-color: var(--bs-body-bg);
- border: 1px solid var(--bs-border-color);
+ border: 1px solid var(--bs-light-border-subtle);
border-radius: var(--bs-border-radius);
margin-bottom: 1.5rem;
font-size: 1.1rem;
}
+.generic-content-wrapper.is-contained {
+ border: 1px solid var(--bs-primary-border-subtle);
+}
+
+.generic-content-wrapper.is-new {
+ border-top: 2px solid var(--bs-primary);
+}
+
.section-title-wrapper {
padding: 7px 10px;
background-color: var(--bs-tertiary-bg);
@@ -1244,17 +1252,23 @@ a .drop-icons:hover {
}
main.fullscreen {
+ position: fixed;
+ top: 0px;
left: 0px;
- width: 100%;
+ width: 100vw;
height: 100vh;
- max-width: none;
+ z-index: 1020;
+ overflow: auto;
}
main.fullscreen .generic-content-wrapper {
- position: absolute;
- width: 100%;
+ position: fixed;
top: 0px;
left: 0px;
+ width: 100vw;
+ height: 100vh;
+ z-index: 1020;
+ overflow: auto;
border-radius: 0px;
border-width: 0px;
}
diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js
index 76d6c0854..0a2ab7f13 100644
--- a/view/theme/redbasic/js/redbasic.js
+++ b/view/theme/redbasic/js/redbasic.js
@@ -6,239 +6,251 @@ let redbasic_dark_mode = localStorage.getItem('redbasic_dark_mode');
let redbasic_theme_color = localStorage.getItem('redbasic_theme_color');
if (redbasic_dark_mode == 1) {
- $('html').attr('data-bs-theme', 'dark');
+ document.documentElement.setAttribute('data-bs-theme', 'dark');
}
if (redbasic_dark_mode == 0) {
- $('html').attr('data-bs-theme', 'light');
+ document.documentElement.setAttribute('data-bs-theme', 'light');
}
if (redbasic_theme_color) {
- $('meta[name=theme-color]').attr('content', redbasic_theme_color);
+ document.querySelector('meta[name=theme-color]').setAttribute('content', redbasic_theme_color);
}
-$(document).ready(function() {
- // provide a fake progress bar for pwa standalone mode
- if (window.matchMedia('(display-mode: standalone)').matches) {
- $(window).on('beforeunload', function(){
- if ($('.page-loader').length) {
- return;
- }
- $('<div class="bg-primary page-loader"></div>').prependTo('body');
- });
- }
-
- if (redbasic_dark_mode == 1) {
- $('#theme-switch-icon').removeClass('bi-moon').addClass('bi-sun');
- $('[data-bs-theme="light"]').attr('data-bs-theme', 'dark');
- }
- if (redbasic_dark_mode == 0) {
- $('#theme-switch-icon').removeClass('bi-sun').addClass('bi-moon');
- $('[data-bs-theme="dark"]:not(nav)').attr('data-bs-theme', 'light');
- }
-
- if (redbasic_theme_color != $('nav').css('background-color')) {
- $('meta[name=theme-color]').attr('content', $('nav').css('background-color'));
- localStorage.setItem('redbasic_theme_color', $('nav').css('background-color'));
- }
-
- // CSS3 calc() fallback (for unsupported browsers)
- $('body').append('<div id="css3-calc" style="width: 10px; width: calc(10px + 10px); display: none;"></div>');
- if( $('#css3-calc').width() == 10) {
- $(window).resize(function() {
- if($(window).width() < 992) {
- $('main').css('width', $(window).width() + $('aside').outerWidth() );
- } else {
- $('main').css('width', '100%');
- }
- });
- }
- $('#css3-calc').remove(); // Remove the test element
-
- if($(window).width() < 1200) {
- $("#right_aside_wrapper").children().detach().appendTo('#left_aside_wrapper');
- $('#notifications_wrapper').addClass('d-none');
- }
-
-
- if (document.querySelector('#region_1')) {
- stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20);
- }
-
- if (document.querySelector('#region_3')) {
- stickyScroll('.aside_spacer_right', '.aside_spacer_top_right', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20);
- }
-
- $('.usermenu').click(function() {
- if($('#navbar-collapse-1, #navbar-collapse-2').hasClass('show')){
- $('#navbar-collapse-1, #navbar-collapse-2').removeClass('show');
- }
- });
-
- $('#theme-switch').click(function() {
- if ($('html').attr('data-bs-theme') === 'dark') {
- if ($('nav').data('bs-theme') === 'dark') {
- $('[data-bs-theme="dark"]:not(nav)').attr('data-bs-theme', 'light');
- }
- else {
- $('[data-bs-theme="dark"]').attr('data-bs-theme', 'light');
- }
- localStorage.setItem('redbasic_dark_mode', 0);
- $('#theme-switch-icon').removeClass('bi-sun').addClass('bi-moon');
- }
- else {
- $('[data-bs-theme="light"]').attr('data-bs-theme', 'dark');
- localStorage.setItem('redbasic_dark_mode', 1);
- $('#theme-switch-icon').removeClass('bi-moon').addClass('bi-sun');
- }
- $('meta[name=theme-color]').attr('content', $('nav').css('background-color'));
- localStorage.setItem('redbasic_theme_color', $('nav').css('background-color'));
- });
-
-
- $('#menu-btn').click(function() {
- if($('#navbar-collapse-1').hasClass('show')){
- $('#navbar-collapse-1').removeClass('show');
- }
- });
-
- $('.notifications-btn').click(function(e) {
- e.preventDefault();
- e.stopPropagation();
- if($('#navbar-collapse-2').hasClass('show')){
- $('#navbar-collapse-2').removeClass('show');
- }
- });
-
- $("input[data-role=cat-tagsinput]").tagsinput({
- tagClass: 'badge rounded-pill bg-warning text-dark'
- });
-
- $('a.disabled').click(function(e) {
- e.preventDefault();
- e.stopPropagation();
- });
-
- var doctitle = document.title;
- function checkNotify() {
- var notifyUpdateElem = document.getElementById('notify-update');
- if(notifyUpdateElem !== null) {
- if(notifyUpdateElem.innerHTML !== "")
- document.title = "(" + notifyUpdateElem.innerHTML + ") " + doctitle;
- else
- document.title = doctitle;
- }
- }
- setInterval(function () {checkNotify();}, 10 * 1000);
-
- var touch_start = null;
- var touch_max = window.innerWidth / 10;
-
- window.addEventListener('touchstart', function(e) {
- if (e.touches.length === 1){
- //just one finger touched
- touch_start = e.touches.item(0).clientX;
- if (touch_start < touch_max) {
- $('body').css('overflow-y', 'hidden');
- }
- }
- else {
- //a second finger hit the screen, abort the touch
- touch_start = null;
- }
- });
-
- window.addEventListener('touchend', function(e) {
- $('body').css('overflow-y', '');
-
- let touch_offset = 30; //at least 30px are a swipe
- if (touch_start) {
- //the only finger that hit the screen left it
- let touch_end = e.changedTouches.item(0).clientX;
-
- if (touch_end > (touch_start + touch_offset)) {
- //a left -> right swipe
- if (touch_start < touch_max) {
- toggleAside();
- }
- }
- if (touch_end < (touch_start - touch_offset)) {
- //a right -> left swipe
- }
- }
- });
-
+document.addEventListener('DOMContentLoaded', function () {
+ // provide a fake progress bar for pwa standalone mode
+ if (window.matchMedia('(display-mode: standalone)').matches) {
+ window.addEventListener('beforeunload', function () {
+ if (!document.querySelector('.page-loader')) {
+ let loader = document.createElement('div');
+ loader.classList.add('bg-primary', 'page-loader');
+ document.body.prepend(loader);
+ }
+ });
+ }
+
+ if (redbasic_dark_mode == 1) {
+ document.getElementById('theme-switch-icon').classList.remove('bi-moon');
+ document.getElementById('theme-switch-icon').classList.add('bi-sun');
+ document.querySelector('[data-bs-theme="light"]').setAttribute('data-bs-theme', 'dark');
+ }
+ if (redbasic_dark_mode == 0) {
+ document.getElementById('theme-switch-icon').classList.remove('bi-sun');
+ document.getElementById('theme-switch-icon').classList.add('bi-moon');
+ let darkElements = document.querySelectorAll('[data-bs-theme="dark"]:not(nav)');
+ darkElements.forEach(el => el.setAttribute('data-bs-theme', 'light'));
+ }
+
+ let navBackgroundColor = document.querySelector('nav').style.backgroundColor;
+ if (redbasic_theme_color !== navBackgroundColor) {
+ document.querySelector('meta[name=theme-color]').setAttribute('content', navBackgroundColor);
+ localStorage.setItem('redbasic_theme_color', navBackgroundColor);
+ }
+
+ // CSS3 calc() fallback (for unsupported browsers)
+ let testElem = document.createElement('div');
+ testElem.style.width = 'calc(10px + 10px)';
+ testElem.style.display = 'none';
+ testElem.id = 'css3-calc';
+ document.body.appendChild(testElem);
+
+ if (testElem.offsetWidth === 10) {
+ window.addEventListener('resize', function () {
+ if (window.innerWidth < 992) {
+ document.querySelector('main').style.width = `${window.innerWidth + document.querySelector('aside').offsetWidth}px`;
+ } else {
+ document.querySelector('main').style.width = '100%';
+ }
+ });
+ }
+ testElem.remove(); // Remove the test element
+
+ if (window.innerWidth < 1200) {
+ let rightAsideWrapper = document.getElementById("right_aside_wrapper");
+ let leftAsideWrapper = document.getElementById("left_aside_wrapper");
+ leftAsideWrapper.appendChild(...rightAsideWrapper.children);
+ document.getElementById('notifications_wrapper').classList.add('d-none');
+ }
+
+ if (document.getElementById('region_1')) {
+ stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20);
+ }
+
+ if (document.getElementById('region_3')) {
+ stickyScroll('.aside_spacer_right', '.aside_spacer_top_right', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20);
+ }
+
+ document.querySelectorAll('.usermenu').forEach(function (element) {
+ element.addEventListener('click', function () {
+ let navCollapse = document.querySelectorAll('#navbar-collapse-1, #navbar-collapse-2');
+ navCollapse.forEach(function (nav) {
+ if (nav.classList.contains('show')) {
+ nav.classList.remove('show');
+ }
+ });
+ });
+ });
+
+ document.getElementById('theme-switch').addEventListener('click', function () {
+ let html = document.documentElement;
+ if (html.getAttribute('data-bs-theme') === 'dark') {
+ let nav = document.querySelector('nav');
+ if (nav.dataset.bsTheme === 'dark') {
+ document.querySelectorAll('[data-bs-theme="dark"]:not(nav)').forEach(function (el) {
+ el.setAttribute('data-bs-theme', 'light');
+ });
+ } else {
+ document.querySelector('[data-bs-theme="dark"]').setAttribute('data-bs-theme', 'light');
+ }
+ localStorage.setItem('redbasic_dark_mode', 0);
+ document.getElementById('theme-switch-icon').classList.remove('bi-sun');
+ document.getElementById('theme-switch-icon').classList.add('bi-moon');
+ } else {
+ document.querySelectorAll('[data-bs-theme="light"]').forEach(function (el) {
+ el.setAttribute('data-bs-theme', 'dark');
+ });
+ localStorage.setItem('redbasic_dark_mode', 1);
+ document.getElementById('theme-switch-icon').classList.remove('bi-moon');
+ document.getElementById('theme-switch-icon').classList.add('bi-sun');
+ }
+ document.querySelector('meta[name=theme-color]').setAttribute('content', document.querySelector('nav').style.backgroundColor);
+ localStorage.setItem('redbasic_theme_color', document.querySelector('nav').style.backgroundColor);
+ });
+
+ document.getElementById('menu-btn').addEventListener('click', function () {
+ let navCollapse = document.getElementById('navbar-collapse-1');
+ if (navCollapse.classList.contains('show')) {
+ navCollapse.classList.remove('show');
+ }
+ });
+
+ document.querySelectorAll('.notifications-btn').forEach(function (element) {
+ element.addEventListener('click', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ let navCollapse = document.getElementById('navbar-collapse-2');
+ if (navCollapse.classList.contains('show')) {
+ navCollapse.classList.remove('show');
+ }
+ });
+ });
+
+ $("input[data-role=cat-tagsinput]").tagsinput({
+ tagClass: 'badge rounded-pill bg-warning text-dark'
+ });
+
+ document.querySelectorAll('a.disabled').forEach(function (link) {
+ link.addEventListener('click', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ });
+ });
+
+ let doctitle = document.title;
+ function checkNotify() {
+ let notifyUpdateElem = document.getElementById('notify-update');
+ if (notifyUpdateElem && notifyUpdateElem.innerHTML !== '') {
+ document.title = '(' + notifyUpdateElem.innerHTML + ') ' + doctitle;
+ } else {
+ document.title = doctitle;
+ }
+ }
+
+ setInterval(checkNotify, 10 * 1000);
+
+ let touch_start = null;
+ let touch_max = window.innerWidth / 10;
+
+ window.addEventListener('touchstart', function (e) {
+ if (e.touches.length === 1) {
+ touch_start = e.touches[0].clientX;
+ if (touch_start < touch_max) {
+ document.body.style.overflowY = 'hidden';
+ }
+ } else {
+ touch_start = null;
+ }
+ });
+
+ window.addEventListener('touchend', function (e) {
+ document.body.style.overflowY = '';
+ let touch_offset = 30; // at least 30px are a swipe
+ if (touch_start) {
+ let touch_end = e.changedTouches[0].clientX;
+ if (touch_end > (touch_start + touch_offset)) {
+ if (touch_start < touch_max) {
+ toggleAside();
+ }
+ }
+ if (touch_end < (touch_start - touch_offset)) {
+ // a right -> left swipe
+ }
+ }
+ });
});
function setStyle(element, cssProperty) {
- for (var property in cssProperty){
- element.style[property] = cssProperty[property];
- }
+ for (var property in cssProperty) {
+ element.style[property] = cssProperty[property];
+ }
}
function stickyScroll(sticky, stickyTop, container, topOffset, bottomOffset) {
-
- var lastScrollTop = 0;
- var sticky = document.querySelector(sticky);
-
- if (!sticky) {
- return;
- }
-
- var stickyHeight = sticky.getBoundingClientRect().height;
- var stickyTop = document.querySelector(stickyTop);
- var content = document.querySelector(container);
- var diff = window.innerHeight - stickyHeight;
- var h = 0;
- var lasth = 0;
- var st = window.pageYOffset || document.documentElement.scrollTop;
-
- var resizeObserver = new ResizeObserver(function(entries) {
- stickyHeight = sticky.getBoundingClientRect().height;
- st = window.pageYOffset || document.documentElement.scrollTop;
- diff = window.innerHeight - stickyHeight;
- });
-
- resizeObserver.observe(sticky);
- resizeObserver.observe(content);
-
- window.addEventListener('scroll', function() {
- if(window.innerHeight > stickyHeight + topOffset) {
- setStyle(stickyTop, { height: 0 + 'px' });
- setStyle(sticky, { position: 'sticky', top: topOffset + 'px'});
- }
- else {
- st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426"
- if (st > lastScrollTop){
- // downscroll code
- setStyle(stickyTop, { height: lasth + 'px' });
- setStyle(sticky, { position: 'sticky', top: Math.round(diff) - bottomOffset + 'px', bottom: '' });
- } else {
- // upscroll code
- h = sticky.getBoundingClientRect().top - content.getBoundingClientRect().top;
- if(Math.round(stickyTop.getBoundingClientRect().height) === lasth) {
- setStyle(stickyTop, { height: Math.round(h) + 'px' });
- }
- lasth = Math.round(h);
- setStyle(sticky, { position: 'sticky', top: '', bottom: Math.round(diff) - topOffset + 'px' });
- }
- lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
- }
- }, false);
-
+ let lastScrollTop = 0;
+ let stickyElement = document.querySelector(sticky);
+
+ if (!stickyElement) {
+ return;
+ }
+
+ let stickyHeight = stickyElement.getBoundingClientRect().height;
+ let stickyTopElement = document.querySelector(stickyTop);
+ let content = document.querySelector(container);
+ let diff = window.innerHeight - stickyHeight;
+
+ let h = 0;
+ let lasth = 0;
+ let st = window.pageYOffset || document.documentElement.scrollTop;
+
+ let resizeObserver = new ResizeObserver(function () {
+ stickyHeight = stickyElement.getBoundingClientRect().height;
+ st = window.pageYOffset || document.documentElement.scrollTop;
+ diff = window.innerHeight - stickyHeight;
+ });
+
+ resizeObserver.observe(stickyElement);
+ resizeObserver.observe(content);
+
+ window.addEventListener('scroll', function () {
+ if (window.innerHeight > stickyHeight + topOffset) {
+ setStyle(stickyTopElement, { height: '0px' });
+ setStyle(stickyElement, { position: 'sticky', top: `${topOffset}px` });
+ } else {
+ st = window.pageYOffset || document.documentElement.scrollTop;
+ if (st > lastScrollTop) {
+ setStyle(stickyTopElement, { height: `${lasth}px` });
+ setStyle(stickyElement, { position: 'sticky', top: `${Math.round(diff) - bottomOffset}px`, bottom: '' });
+ } else {
+ h = stickyElement.getBoundingClientRect().top - content.getBoundingClientRect().top;
+ if (Math.round(stickyTopElement.getBoundingClientRect().height) === lasth) {
+ setStyle(stickyTopElement, { height: `${Math.round(h)}px` });
+ }
+ lasth = Math.round(h);
+ setStyle(stickyElement, { position: 'sticky', top: '', bottom: `${Math.round(diff) - topOffset}px` });
+ }
+ lastScrollTop = st <= 0 ? 0 : st;
+ }
+ }, false);
}
function makeFullScreen(full) {
- if(typeof full=='undefined' || full == true) {
- $('main').addClass('fullscreen');
- $('header, nav, aside, #fullscreen-btn').attr('style','display:none !important');
- $('#inline-btn').show();
- }
- else {
- $('main').removeClass('fullscreen');
- $('header, nav, aside, #fullscreen-btn').show();
- $('#inline-btn').hide();
- }
+ if (typeof full === 'undefined' || full === true) {
+ document.querySelector('main').classList.add('fullscreen');
+ document.getElementById('fullscreen-btn').style.display = 'none';
+ document.getElementById('inline-btn').style.display = 'inline-block';
+ } else {
+ document.querySelector('main').classList.remove('fullscreen');
+ document.getElementById('fullscreen-btn').style.display = '';
+ document.getElementById('inline-btn').style.display = 'none';
+ }
}
-
-
diff --git a/view/theme/redbasic/php/config.php b/view/theme/redbasic/php/config.php
index 7079cc386..6d2707493 100644
--- a/view/theme/redbasic/php/config.php
+++ b/view/theme/redbasic/php/config.php
@@ -193,11 +193,11 @@ class RedbasicConfig {
'$dark' => t('Dark style'),
'$light' => t('Light style'),
'$common' => t('Common settings'),
- '$primary_color' => array('redbasic_primary_color', t('Primary theme color'), $arr['primary_color'], '<i class="fa fa-circle text-primary"></i> ' . t('Current color, leave empty for default')),
- '$success_color' => array('redbasic_success_color', t('Success theme color'), $arr['success_color'], '<i class="fa fa-circle text-success"></i> ' . t('Current color, leave empty for default')),
- '$info_color' => array('redbasic_info_color', t('Info theme color'), $arr['info_color'], '<i class="fa fa-circle text-info"></i> ' . t('Current color, leave empty for default')),
- '$warning_color' => array('redbasic_warning_color', t('Warning theme color'), $arr['warning_color'], '<i class="fa fa-circle text-warning"></i> ' . t('Current color, leave empty for default')),
- '$danger_color' => array('redbasic_danger_color', t('Danger theme color'), $arr['danger_color'], '<i class="fa fa-circle text-danger"></i> ' . t('Current color, leave empty for default')),
+ '$primary_color' => array('redbasic_primary_color', t('Primary theme color'), $arr['primary_color'], '<i class="bi bi-circle-fill text-primary"></i> ' . t('Current color, leave empty for default')),
+ '$success_color' => array('redbasic_success_color', t('Success theme color'), $arr['success_color'], '<i class="bi bi-circle-fill text-success"></i> ' . t('Current color, leave empty for default')),
+ '$info_color' => array('redbasic_info_color', t('Info theme color'), $arr['info_color'], '<i class="bi bi-circle-fill text-info"></i> ' . t('Current color, leave empty for default')),
+ '$warning_color' => array('redbasic_warning_color', t('Warning theme color'), $arr['warning_color'], '<i class="bi bi-circle-fill text-warning"></i> ' . t('Current color, leave empty for default')),
+ '$danger_color' => array('redbasic_danger_color', t('Danger theme color'), $arr['danger_color'], '<i class="bi bi-circle-fill text-danger"></i> ' . t('Current color, leave empty for default')),
'$dark_mode' => array('redbasic_dark_mode',t('Default to dark mode'),$arr['dark_mode'], '', array(t('No'),t('Yes'))),
'$navbar_dark_mode' => array('redbasic_navbar_dark_mode',t('Always use light icons for navbar'),$arr['navbar_dark_mode'], t('Enable this option if you use a dark navbar color in light mode'), array(t('No'),t('Yes'))),
'$narrow_navbar' => array('redbasic_narrow_navbar',t('Narrow navbar'),$arr['narrow_navbar'], '', array(t('No'),t('Yes'))),
diff --git a/view/theme/redbasic/php/theme.php b/view/theme/redbasic/php/theme.php
index 1f682634e..dcbe8c3da 100644
--- a/view/theme/redbasic/php/theme.php
+++ b/view/theme/redbasic/php/theme.php
@@ -5,7 +5,7 @@
* * Description: Hubzilla standard theme
* * Version: 2.2
* * MinVersion: 8.9
- * * MaxVersion: 10.0
+ * * MaxVersion: 11.0
* * Author: Fabrixxm
* * Maintainer: Mike Macgirvin
* * Maintainer: Mario Vavti
diff --git a/view/theme/redbasic/schema/Focus-Boxy.css b/view/theme/redbasic/schema/Focus-Boxy.css
index df5bf2d75..290518e8e 100644
--- a/view/theme/redbasic/schema/Focus-Boxy.css
+++ b/view/theme/redbasic/schema/Focus-Boxy.css
@@ -1,5 +1,5 @@
.comment .wall-item-body {
- padding-left: 2.8rem;
+ padding-left: 3.4rem;
}
.wall-item-content-wrapper.comment {
diff --git a/view/tpl/admin_account_edit.tpl b/view/tpl/admin_account_edit.tpl
index 1cbb9af0b..6cc8872ba 100644
--- a/view/tpl/admin_account_edit.tpl
+++ b/view/tpl/admin_account_edit.tpl
@@ -5,6 +5,7 @@
<form action="admin/account_edit/{{$account.account_id}}" method="post" >
<input type="hidden" name="aid" value="{{$account.account_id}}" />
+<input type="hidden" name="security" value="{{$security}}">
{{include file="field_password.tpl" field=$pass1}}
{{include file="field_password.tpl" field=$pass2}}
diff --git a/view/tpl/admin_channels.tpl b/view/tpl/admin_channels.tpl
index ca05313ed..6705a74c4 100644
--- a/view/tpl/admin_channels.tpl
+++ b/view/tpl/admin_channels.tpl
@@ -36,7 +36,7 @@
<td class='channel_address'>{{$c.channel_address}}</td>
<td class="checkbox_bulkedit"><input type="checkbox" class="channels_ckbx p-1" id="id_channel_{{$c.channel_id}}" name="channel[]" value="{{$c.channel_id}}"/></td>
<td class="tools">
- <a href="{{$baseurl}}/admin/channels/block/{{$c.channel_id}}?t={{$form_security_token}}" class="p-1 text-reset" title='{{if ($c.blocked)}}{{$unblock}}{{else}}{{$block}}{{/if}}'><i class='bi fa-ban admin-icons {{if ($c.blocked)}}text-danger{{/if}}'></i></a>
+ <a href="{{$baseurl}}/admin/channels/block/{{$c.channel_id}}?t={{$form_security_token}}" class="p-1 text-reset" title='{{if ($c.blocked)}}{{$unblock}}{{else}}{{$block}}{{/if}}'><i class='bi bi-ban admin-icons {{if ($c.blocked)}}text-danger{{/if}}'></i></a>
</td>
<td class="tools">
<a href="{{$baseurl}}/admin/channels/code/{{$c.channel_id}}?t={{$form_security_token}}" class="p-1 text-reset" title='{{if ($c.allowcode)}}{{$uncode}}{{else}}{{$code}}{{/if}}'><i class='bi bi-code admin-icons {{if ($c.allowcode)}}text-danger{{/if}}'></i></a>
diff --git a/view/tpl/admin_plugins.tpl b/view/tpl/admin_plugins.tpl
index f231da2ad..659f87430 100644
--- a/view/tpl/admin_plugins.tpl
+++ b/view/tpl/admin_plugins.tpl
@@ -1,45 +1,8 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- {{if $allowManageRepos}}
- <div class="float-end">
- <button class="btn btn-success btn-sm" onclick="openClose('form');">{{$managerepos}}</button>
- </div>
- {{/if}}
<h2 id="title">{{$title}} - {{$page}}</h2>
<div class="clear"></div>
</div>
- <div id="form" class="section-content-tools-wrapper"{{if !$expandform}} style="display:none;"{{/if}}>
-
- <div class="clear"></div>
- <div class="section-title-wrapper" style="margin-top: 20px;">
- <h2>{{$installedtitle}}</h2>
- <div class="clear"></div>
- </div>
- <div class="table-responsive section-content-tools-wrapper">
- <table class="table table-responsive table-striped table-hover">
- {{foreach $addonrepos as $repo}}
- <tr>
- <td style="width: 70%;">
- <span class="float-start">{{$repo.name}}</span><span id="update-message-{{$repo.name}}" style="margin-left: 20px;"></span>
- </td>
- <td style="width: 15%;">
- <button class="btn btn-sm btn-primary float-end" style="margin-left: 10px; margin-right: 10px;" onclick="updateAddonRepo('{{$repo.name}}'); return false;"><i class='bi fa-download'></i>&nbsp;{{$repoUpdateButton}}</button>
- </td>
- <td style="width: 15%;">
- <button class="btn btn-sm btn-danger float-end" style="margin-left: 10px; margin-right: 0px;" onclick="removeAddonRepo('{{$repo.name}}'); return false;"><i class='bi bi-trash'></i>&nbsp;{{$repoRemoveButton}}</button>
- </td>
- <div class="clear"></div>
- </td></tr>
- {{/foreach}}
- </table>
- </div>
- <div class="clear"></div>
- <div class="section-title-wrapper">
- <h2>{{$addnewrepotitle}}</h2>
- <div class="clear"></div>
- </div>
- {{$form}}
- </div>
<div class="clear"></div>
<div id="chat-rotator" class="spinner-wrapper">
<div class="spinner s"></div>
@@ -47,9 +10,9 @@
<div class="clear"></div>
<div class="section-content-wrapper-np">
{{foreach $plugins as $p}}
- <div class="section-content-tools-wrapper" id="pluginslist">
+ <div class="section-content-tools-wrapper" id="pluginslist">
<div class="contact-info plugin {{$p.1}}">
- {{if ! $p.2.disabled}}
+ {{if ! $p.2.disabled}}
<a class='toggleplugin' href='{{$baseurl}}/admin/{{$function}}/{{$p.0}}?a=t&amp;t={{$form_security_token}}' title="{{if $p.1==on}}Disable{{else}}Enable{{/if}}" ><i class='bi {{if $p.1==on}}bi-check-square{{else}}bi-square{{/if}} admin-icons'></i></a>
{{else}}
<i class='bi fa-stop admin-icons'></i>
@@ -61,130 +24,6 @@
</div>
</div>
{{/foreach}}
-
+
</div>
</div>
-{{$newRepoModal}}
-<script>
-
- // TODO: Implement a simple interface controller that reconfigures the modal dialog
- // for each action in a more organized way
-
- function adminPluginsAddRepo() {
- $("#generic-modal-ok-{{$newRepoModalID}}").removeClass('btn-success');
- $("#generic-modal-ok-{{$newRepoModalID}}").addClass('btn-primary');
- var repoURL = $('#id_repoURL').val();
- var repoName = $('#id_repoName').val();
- $('#chat-rotator').show();
- $.post(
- "/admin/addons/addrepo", {repoURL: repoURL, repoName: repoName},
- function(response) {
- $('#chat-rotator').hide();
- if (response.success) {
- var modalBody = $('#generic-modal-body-{{$newRepoModalID}}');
- modalBody.html('<div>'+response.repo.readme+'</div>');
- modalBody.append('<h2>Repo Info</h2><p>Message: ' + response.message + '</p>');
- modalBody.append('<h4>Branches</h4><p>'+JSON.stringify(response.repo.branches)+'</p>');
- modalBody.append('<h4>Remotes</h4><p>'+JSON.stringify(response.repo.remote)+'</p>');
- $('.modal-dialog').width('80%');
- $("#generic-modal-ok-{{$newRepoModalID}}").off('click');
- $("#generic-modal-ok-{{$newRepoModalID}}").click(function () {
- installAddonRepo();
- });
- $('#generic-modal-{{$newRepoModalID}}').modal();
- } else {
- window.console.log('Error adding repo :' + response['message']);
- }
- return false;
- },
- 'json');
- }
-
- function installAddonRepo() {
- var repoURL = $('#id_repoURL').val();
- var repoName = $('#id_repoName').val();
- $.post(
- "/admin/addons/installrepo", {repoURL: repoURL, repoName: repoName},
- function(response) {
- if (response.success) {
- $('#generic-modal-title-{{$newRepoModalID}}').html('Addon repo installed');
- var modalBody = $('#generic-modal-body-{{$newRepoModalID}}');
- modalBody.html('<h2>Repo Info</h2><p>Message: ' + response.message + '</p>');
- modalBody.append('<h4>Branches</h4><p>'+JSON.stringify(response.repo.branches)+'</p>');
- modalBody.append('<h4>Remotes</h4><p>'+JSON.stringify(response.repo.remote)+'</p>');
- $('.modal-dialog').width('80%');
- //$("#generic-modal-cancel-{{$newRepoModalID}}").hide();
- $("#generic-modal-ok-{{$newRepoModalID}}").html('OK');
- $("#generic-modal-ok-{{$newRepoModalID}}").removeClass('btn-primary');
- $("#generic-modal-ok-{{$newRepoModalID}}").addClass('btn-success');
- $("#generic-modal-ok-{{$newRepoModalID}}").off('click');
- $("#generic-modal-ok-{{$newRepoModalID}}").click(function () {
- $('#generic-modal-{{$newRepoModalID}}').modal('hide');
- if(confirm('Repo installed. Click OK to refresh page.')) {
- location.reload();
- }
- });
- $('#generic-modal-{{$newRepoModalID}}').modal();
-
- } else {
- window.console.log('Error installing repo :' + response['message']);
- alert('Error installing addon repo!');
- }
- return false;
- },
- 'json');
- }
- function updateAddonRepo(repoName) {
- if(confirm('Are you sure you want to update the addon repo ' + repoName + '?')) {
- $.post(
- "/admin/addons/updaterepo", {repoName: repoName},
- function(response) {
- if (response.success) {
- window.console.log('Addon repo '+repoName+' successfully updated :' + response['message']);
- //alert('Addon repo updated.');
- $('#update-message-' + repoName).css('background-color', 'yellow');
- $('#update-message-' + repoName).html('Repo updated!');
- setTimeout(function () {
- $('#update-message-' + repoName).html('');
- }, 60000);
- } else {
- window.console.log('Error updating repo :' + response['message']);
- //alert('Error updating addon repo!');
- $('#update-message-' + repoName).css('background-color', 'red');
- $('#update-message-' + repoName).html('Error updating repo!');
- setTimeout(function () {
- $('#update-message-' + repoName).html('');
- }, 60000);
- }
- return false;
- },
- 'json');
- }
- }
- function switchAddonRepoBranch(repoName) {
- window.console.log('switchAddonRepoBranch: ' + repoName);
- // TODO: Discover the available branches and create an interface to switch between them
- }
-
- function removeAddonRepo(repoName) {
- // TODO: Unlink the addons
- if(confirm('Are you sure you want to remove the addon repo ' + repoName + '?')) {
- $.post(
- "/admin/addons/removerepo", {repoName: repoName},
- function(response) {
- if (response.success) {
- window.console.log('Addon repo '+repoName+' successfully removed :' + response['message']);
- if(confirm('Repo deleted. Click OK to refresh page.')) {
- location.reload();
- }
- } else {
- window.console.log('Error removing repo :' + response['message']);
- alert('Error removing addon repo!');
- }
- return false;
- },
- 'json');
- }
- }
-
-</script>
diff --git a/view/tpl/admin_plugins_addrepo.tpl b/view/tpl/admin_plugins_addrepo.tpl
deleted file mode 100644
index e0e271d5a..000000000
--- a/view/tpl/admin_plugins_addrepo.tpl
+++ /dev/null
@@ -1,9 +0,0 @@
-<form id="add-plugin-repo-form" action="{{$post}}" method="post" >
-
- <p class="descriptive-text">{{$desc}}</p>
- {{include file="field_input.tpl" field=$repoURL}}
- {{include file="field_input.tpl" field=$repoName}}
- <div class="btn-group float-end">
- <button id="add-plugin-repo-submit" class="btn btn-primary" type="submit" name="submit" onclick="adminPluginsAddRepo(); return false;">{{$submit}}</button>
- </div>
-</form>
diff --git a/view/tpl/cal_calendar.tpl b/view/tpl/cal_calendar.tpl
index 437cd8363..f120f9f80 100644
--- a/view/tpl/cal_calendar.tpl
+++ b/view/tpl/cal_calendar.tpl
@@ -1,8 +1,9 @@
<script>
-var calendar;
-
$(document).ready(function() {
- var calendarEl = document.getElementById('calendar');
+ let calendarEl = document.getElementById('calendar');
+ let fragment = window.location.hash.substring(1);
+ let view;
+
calendar = new FullCalendar.Calendar(calendarEl, {
eventSources: [ {{$sources}} ],
@@ -38,6 +39,26 @@ $(document).ready(function() {
calendar.render();
+ if (fragment) {
+ switch (fragment.length) {
+ case 7:
+ view = 'dayGridMonth';
+ break;
+ case 10:
+ view = 'timeGridWeek';
+ break;
+ case 11:
+ if (fragment[0] === '!') {
+ fragment = fragment.substring(1);
+ view = 'timeGridDay';
+ }
+ break;
+ default:
+ view = 'dayGridMonth';
+ }
+ calendar.changeView(view, fragment);
+ }
+
$('#title').text(calendar.view.title);
$('#today-btn').on('click', function() {
diff --git a/view/tpl/cdav_calendar.tpl b/view/tpl/cdav_calendar.tpl
index cd2e45b8c..d046dfc2f 100644
--- a/view/tpl/cdav_calendar.tpl
+++ b/view/tpl/cdav_calendar.tpl
@@ -102,6 +102,8 @@ $(document).ready(function() {
var dtstart = new Date(info.event._instance.range.start);
var dtend = new Date(info.event._instance.range.end);
+ allday = event.allDay;
+
if(event.extendedProps.plink) {
if(! $('#l2s').length)
$('#id_title_wrapper').prepend('<span id="l2s" class="float-end"></span>');
@@ -112,7 +114,7 @@ $(document).ready(function() {
$('#l2s').remove();
}
- if(event.allDay) {
+ if (allday) {
$('#id_dtstart_wrapper, #id_dtend_wrapper, #id_timezone_select_wrapper').hide();
}
else {
@@ -355,9 +357,18 @@ $(document).ready(function() {
event_uri = resource.event_hash;
event_xchan = resource.event_xchan;
+ allday = resource.adjust ? 0 : 1;
+
+ if (allday) {
+ $('#id_dtstart_wrapper, #id_dtend_wrapper, #id_timezone_select_wrapper').hide();
+ }
+
$('#calendar_select').val('channel_calendar').attr('disabled', true);
$('#id_title').val(resource.summary);
+ calendar.changeView('timeGridDay', resource.dtstart);
+ $('#title').text(calendar.view.title);
+
// A hack to match with internal workings of fullcalendar.
// See https://fullcalendar.io/docs/timeZone#UTC-coercion
let start_d = new Date(resource.dtstart);
diff --git a/view/tpl/chat.tpl b/view/tpl/chat.tpl
index 620839ec8..1020399c7 100644
--- a/view/tpl/chat.tpl
+++ b/view/tpl/chat.tpl
@@ -8,8 +8,8 @@
<button class="btn btn-danger btn-sm" type="submit" name="submit" value="{{$drop}}" onclick="return confirmDelete();"><i class="bi bi-trash"></i>&nbsp;{{$drop}}</button>
</form>
{{/if}}
- <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(); adjustFullscreenTopBarHeight();"><i class="bi fa-expand"></i></button>
- <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false); adjustInlineTopBarHeight();"><i class="bi fa-compress"></i></button>
+ <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(); adjustFullscreenTopBarHeight();"><i class="bi bi-arrows-angle-expand"></i></button>
+ <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false); adjustInlineTopBarHeight();"><i class="bi bi-arrows-angle-contract"></i></button>
</div>
<h2>{{$room_name}}</h2>
<div class="clear"></div>
@@ -37,11 +37,11 @@
<a class="dropdown-item" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=away"><i class="bi bi-circle-fill away"></i>&nbsp;{{$away}}</a>
<a class="dropdown-item" href="{{$baseurl}}/chat/{{$nickname}}/{{$room_id}}/leave"><i class="bi bi-circle-fill leave"></i>&nbsp;{{$leave}}</a>
<div class="dropdown-divider"></div>
- <a id="toggle-notifications" class="dropdown-item" href="" onclick="toggleChatNotifications(); return false;"><i id="toggle-notifications-icon" class="bi fa-bell-slash-o"></i>&nbsp;Toggle notifications</a>
- <a id="toggle-notifications-audio" class="dropdown-item disabled" href="" onclick="toggleChatNotificationAudio(); return false;"><i id="toggle-notifications-audio-icon" class="bi fa-volume-off"></i>&nbsp;Toggle sound</a>
+ <a id="toggle-notifications" class="dropdown-item" href="" onclick="toggleChatNotifications(); return false;"><i id="toggle-notifications-icon" class="bi bi-bell-slash-fill"></i>&nbsp;Toggle notifications</a>
+ <a id="toggle-notifications-audio" class="dropdown-item disabled" href="" onclick="toggleChatNotificationAudio(); return false;"><i id="toggle-notifications-audio-icon" class="bi bi-volume-mute-fill"></i>&nbsp;Toggle sound</a>
{{if $bookmark_link}}
<div class="dropdown-divider"></div>
- <a class="dropdown-item" href="{{$bookmark_link}}" target="_blank" ><i class="bi fa-bookmark"></i>&nbsp;{{$bookmark}}</a>
+ <a class="dropdown-item" href="{{$bookmark_link}}" target="_blank" ><i class="bi bi-bookmark-fill"></i>&nbsp;{{$bookmark}}</a>
{{/if}}
</div>
</div>
@@ -206,7 +206,7 @@ function update_chats(chats) {
chat_issue_notification(item.name + ':\n' + item.text, 'Hubzilla Chat');
}
$('#chatLineHolder').append(newNode);
- $(".autotime").timeago();
+ updateRelativeTime('.autotime');
var elem = document.getElementById('chatTopBar');
elem.scrollTop = elem.scrollHeight;
@@ -271,27 +271,27 @@ var chat_issue_notification = function (theBody,theTitle) {
function toggleChatNotificationAudio() {
if(!chat_notify_audio_enabled) {
chat_notify_audio_enabled = true;
- $('#toggle-notifications-audio-icon').removeClass('fa-volume-off');
- $('#toggle-notifications-audio-icon').addClass('fa-volume-up');
+ $('#toggle-notifications-audio-icon').removeClass('bi-volume-mute-fill');
+ $('#toggle-notifications-audio-icon').addClass('bi-volume-up-fill');
}
else {
chat_notify_audio_enabled = false;
- $('#toggle-notifications-audio-icon').removeClass('fa-volume-up');
- $('#toggle-notifications-audio-icon').addClass('fa-volume-off');
+ $('#toggle-notifications-audio-icon').removeClass('bi-volume-up-fill');
+ $('#toggle-notifications-audio-icon').addClass('bi-volume-mute-fill');
}
}
function toggleChatNotifications() {
if(!chat_notify_enabled) {
chat_notify_enabled = true;
- $('#toggle-notifications-icon').addClass('fa-bell');
- $('#toggle-notifications-icon').removeClass('fa-bell-slash-o');
+ $('#toggle-notifications-icon').addClass('bi-bell-fill');
+ $('#toggle-notifications-icon').removeClass('fa-bell-slash-fill');
$('#toggle-notifications-audio').removeClass('disabled');
}
else {
chat_notify_enabled = false;
- $('#toggle-notifications-icon').addClass('fa-bell-slash-o');
- $('#toggle-notifications-icon').removeClass('fa-bell');
+ $('#toggle-notifications-icon').addClass('bi-bell-slash-fill');
+ $('#toggle-notifications-icon').removeClass('bi-bell-fill');
$('#toggle-notifications-audio').addClass('disabled');
}
}
diff --git a/view/tpl/comment_item.tpl b/view/tpl/comment_item.tpl
index 76b756846..1dc7ad88b 100644
--- a/view/tpl/comment_item.tpl
+++ b/view/tpl/comment_item.tpl
@@ -37,6 +37,9 @@
<button class="btn btn-outline-secondary btn-sm border-0" title="{{$edcode}}" onclick="insertbbcomment('{{$comment}}','code', {{$id}}); return false;">
<i class="bi bi-code comment-icon"></i>
</button>
+ <button class="btn btn-outline-secondary btn-sm border-0" title="{{$edhighlighter}}" onclick="insertbbcomment('{{$comment}}','mark', {{$id}}); return false;">
+ <i class="bi bi-highlighter comment-icon"></i>
+ </button>
</div>
<div class="btn-group me-2">
{{if $can_upload}}
diff --git a/view/tpl/contact_edit_header.tpl b/view/tpl/contact_edit_header.tpl
index 8ec6054a3..8fe84a3b7 100644
--- a/view/tpl/contact_edit_header.tpl
+++ b/view/tpl/contact_edit_header.tpl
@@ -4,6 +4,6 @@
</a>
</div>
<div class="m-1">
- <div class="text-truncate h3 m-0"><strong>{{if $is_group}}<i class="bi fa-comments-o" title="{{$group_label}}"></i> {{/if}}{{$name}}</strong></div>
+ <div class="text-truncate h3 m-0"><strong>{{if $is_group}}<i class="bi bi-chat-quote" title="{{$group_label}}"></i> {{/if}}{{$name}}</strong></div>
<div class="text-truncate text-muted">{{$addr}}</div>
</div>
diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl
index 96e30f42d..96e6f57df 100644
--- a/view/tpl/conv_item.tpl
+++ b/view/tpl/conv_item.tpl
@@ -4,7 +4,7 @@
</div>
<div id="collapsed-comments-{{$item.id}}" class="collapsed-comments" style="display: none;">
{{/if}}
- <div id="thread-wrapper-{{$item.id}}" class="thread-wrapper{{if $item.toplevel}} {{$item.toplevel}} generic-content-wrapper h-entry {{else}} u-comment h-cite{{/if}} clearfix" data-b64mids='{{$item.mids}}'>
+ <div id="thread-wrapper-{{$item.id}}" class="thread-wrapper{{if $item.toplevel}} {{$item.toplevel}} generic-content-wrapper h-entry {{else}} u-comment h-cite{{/if}} clearfix{{if $item.is_contained}} is-contained{{/if}}{{if $item.is_new && !$item.event && !$item.photo && !$item.title && !$item.is_comment}} is-new{{/if}}" data-b64mids='{{$item.mids}}'>
<a name="item_{{$item.id}}" ></a>
<div class="wall-item-outside-wrapper{{if $item.is_comment}} comment{{/if}}{{if $item.previewing}} preview{{/if}}" id="wall-item-outside-wrapper-{{$item.id}}" >
<div class="rounded wall-item-content-wrapper{{if $item.is_comment}} comment{{/if}}" id="wall-item-content-wrapper-{{$item.id}}">
@@ -26,24 +26,30 @@
<hr class="m-0">
{{/if}}
{{/if}}
- <div class="p-2 wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}} clearfix">
+ <div class="p-2 wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}} clearfix">
<div class="lh-sm text-end float-end">
<div class="wall-item-ago opacity-75" id="wall-item-ago-{{$item.id}}">
{{if $item.location}}
{{$item.location}}
{{/if}}
- {{if $item.delayed}}
- <i class="bi bi-clock"></i>
- {{/if}}
{{if $item.editedtime}}
- <i class="bi bi-pencil"></i>
+ <i class="bi bi-pencil" title="{{$item.editedtime}}"></i>
{{/if}}
{{if $item.verified}}
<i class="bi bi-shield-check" title="{{$item.verified}}"></i>
{{elseif $item.forged}}
<i class="bi bi-shield-exclamation text-danger" title="{{$item.forged}}"></i>
{{/if}}
- <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
+ {{if $item.no_comment}}
+ <i class="bi bi-ban" title="{{$item.no_comment}}"></i>
+ {{/if}}
+ {{if $item.delayed}}
+ <i class="bi bi-clock" title="{{$item.delayed}}"></i>
+ {{/if}}
+ {{if $item.expiretime}}
+ <i class="bi bi-clock-history" title="{{$item.expiretime}}"></i>
+ {{/if}}
+ <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
</div>
{{if $item.thr_parent_uuid}}
<a href="javascript:doscroll('{{$item.thr_parent_uuid}}',{{$item.parent}});" class="ms-3" title="{{$item.top_hint}}"><i class="bi bi-chevron-double-up"></i></a>
@@ -127,7 +133,7 @@
{{foreach $response.list as $liker}}
{{$liker}}
{{/foreach}}
- </ul>
+ </ul>
</div>
<div class="modal-footer clear">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$item.modal_dismiss}}</button>
@@ -138,9 +144,7 @@
{{else}}
<div class="dropdown-menu">
{{if $item.reactions_allowed && !($verb === 'announce' && $item.my_responses.$verb)}} {{** undo announce is not yet supported **}}
- <div class="dropdown-item">
- <a href="#" class="text-reset" onclick="{{$response.button.onclick}}({{$item.id}},'{{$verb}}'); return false;">{{if $item.my_responses.$verb}}- {{$item.reaction_str.1}}{{else}}+ {{$item.reaction_str.0}}{{/if}}</a>
- </div>
+ <a href="#" class="text-reset dropdown-item" onclick="{{$response.button.onclick}}({{$item.id}},'{{$verb}}'); return false;">{{if $item.my_responses.$verb}}- {{$item.reaction_str.1}}{{else}}+ {{$item.reaction_str.0}}{{/if}}</a>
<div class="dropdown-divider"></div>
{{/if}}
{{foreach $response.list as $liker}}{{$liker}}{{/foreach}}
@@ -257,7 +261,7 @@
{{/foreach}}
{{/if}}
{{if $item.comment}}
- <div id="wall-item-comment-wrapper-{{$item.id}}" class="p-2 wall-item-comment-wrapper{{if $item.children}} wall-item-comment-wrapper-wc{{/if}}" >
+ <div id="wall-item-comment-wrapper-{{$item.id}}" class="p-2 rounded wall-item-comment-wrapper{{if $item.children}} wall-item-comment-wrapper-wc{{/if}}">
{{$item.comment}}
</div>
{{/if}}
diff --git a/view/tpl/conv_list.tpl b/view/tpl/conv_list.tpl
index a54a52369..6143e156e 100644
--- a/view/tpl/conv_list.tpl
+++ b/view/tpl/conv_list.tpl
@@ -1,7 +1,7 @@
- <div id="thread-wrapper-{{$item.id}}" class="thread-wrapper{{if $item.toplevel}} {{$item.toplevel}} generic-content-wrapper h-entry {{else}} u-comment h-cite {{/if}}" data-b64mids='{{$item.mids}}'>
+ <div id="thread-wrapper-{{$item.id}}" class="thread-wrapper{{if $item.toplevel}} {{$item.toplevel}} generic-content-wrapper h-entry {{else}} u-comment h-cite{{/if}} clearfix{{if $item.is_contained}} is-contained{{/if}}{{if $item.is_new && !$item.event && !$item.title && !$item.is_comment}} is-new{{/if}}" data-b64mids='{{$item.mids}}'>
<a name="item_{{$item.id}}" ></a>
<div class="wall-item-outside-wrapper{{if $item.is_comment}} comment{{/if}}{{if $item.previewing}} preview{{/if}}" id="wall-item-outside-wrapper-{{$item.id}}" >
- <div class="clearfix wall-item-content-wrapper{{if $item.is_comment}} comment{{/if}}" id="wall-item-content-wrapper-{{$item.id}}">
+ <div class="rounded clearfix wall-item-content-wrapper{{if $item.is_comment}} comment{{/if}}" id="wall-item-content-wrapper-{{$item.id}}">
{{if $item.photo}}
<div class="wall-photo-item" id="wall-photo-item-{{$item.id}}">
{{$item.photo}}
@@ -26,18 +26,24 @@
{{if $item.location}}
{{$item.location}}
{{/if}}
- {{if $item.delayed}}
- <i class="bi bi-clock"></i>
- {{/if}}
{{if $item.editedtime}}
- <i class="bi bi-pencil"></i>
+ <i class="bi bi-pencil" title="{{$item.editedtime}}"></i>
{{/if}}
{{if $item.verified}}
<i class="bi bi-shield-check" title="{{$item.verified}}"></i>
{{elseif $item.forged}}
<i class="bi bi-shield-exclamation text-danger" title="{{$item.forged}}"></i>
{{/if}}
- <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
+ {{if $item.no_comment}}
+ <i class="bi bi-ban" title="{{$item.no_comment}}"></i>
+ {{/if}}
+ {{if $item.delayed}}
+ <i class="bi bi-clock" title="{{$item.delayed}}"></i>
+ {{/if}}
+ {{if $item.expiretime}}
+ <i class="bi bi-clock-history" title="{{$item.expiretime}}"></i>
+ {{/if}}
+ <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
</div>
{{if $item.pinned}}
<div class="wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="bi bi-pin-fill"></i></div>
diff --git a/view/tpl/cover_photo.tpl b/view/tpl/cover_photo.tpl
index dd0d3dbee..d2069dcf6 100644
--- a/view/tpl/cover_photo.tpl
+++ b/view/tpl/cover_photo.tpl
@@ -90,7 +90,7 @@
<div class="section-content-warning-wrapper">{{$info}}</div>
{{/if}}
{{if $existing}}
- <img class="cover-photo-review" style="max-width: 100%;" src="{{$existing.url}}" alt="{{t('Cover Photo')}}" />
+ <img class="cover-photo-review" style="max-width: 100%;" src="{{$existing.url}}" alt="Cover Photo" />
{{/if}}
<form enctype="multipart/form-data" action="cover_photo" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl
index e7fe1effc..3099c69d1 100644
--- a/view/tpl/cover_photo_widget.tpl
+++ b/view/tpl/cover_photo_widget.tpl
@@ -1,103 +1,124 @@
<script>
- var aside_padding_top;
- var section_padding_top;
- var coverSlid = false;
- var hide_cover = Boolean({{$hide_cover}});
- var cover_height;
-
- $(document).ready(function() {
- if(! $('#cover-photo').length)
- return;
+ let asidePaddingTop;
+ let sectionPaddingTop;
+ let coverSlid = false;
+ const hideCover = Boolean({{$hide_cover}});
+ let coverHeight;
+
+ document.addEventListener('DOMContentLoaded', function() {
+ const coverPhoto = document.getElementById('cover-photo');
+ if (!coverPhoto) return;
- if($(window).width() < 755) {
- $('#cover-photo').remove();
+ // If screen width is smaller than 755px, remove the cover photo
+ if (window.innerWidth < 755) {
+ coverPhoto.remove();
coverSlid = true;
return;
}
- $('#cover-photo').removeClass('d-none');
- cover_height = Math.ceil($(window).width()/2.75862069);
- $('#cover-photo').css('height', cover_height + 'px');
+ // Otherwise, set up the cover photo's size
+ coverPhoto.classList.remove('d-none');
+ coverHeight = Math.round(window.innerWidth / 2.75862069);
+ coverPhoto.style.height = `${coverHeight}px`;
datasrc2src('#cover-photo > img');
- $(document).on('click mouseup keyup', slideUpCover);
+ // Bind events for hiding the cover
+ document.addEventListener('click', slideUpCover);
+ document.addEventListener('mouseup', slideUpCover);
+ document.addEventListener('keyup', slideUpCover);
- if(hide_cover) {
- hideCover();
- }
- else if(!hide_cover && !coverSlid) {
+ // Hide the cover if required
+ if (hideCover) {
+ hideCoverFunction();
+ } else if (!coverSlid) {
coverVisibleActions();
}
- });
-
- $(window).scroll(function () {
- if(! $('#cover-photo').length) {
- return;
- }
- if($(window).scrollTop() >= cover_height) {
- coverHiddenActions();
- coverSlid = true;
- }
- else if ($(window).scrollTop() < cover_height){
- if(coverSlid) {
- $(window).scrollTop(cover_height);
- setTimeout(function(){ coverSlid = false; }, 1000);
+ // Throttle scroll event
+ let lastScrollTop = 0;
+ const scrollThreshold = 100;
+ window.addEventListener('scroll', function() {
+ const scrollTop = window.scrollY;
+ if (Math.abs(scrollTop - lastScrollTop) < scrollThreshold) {
+ return;
}
- else {
- if($(window).scrollTop() < cover_height) {
- coverVisibleActions();
- }
+ lastScrollTop = scrollTop;
+ handleScroll(scrollTop);
+ });
+
+ // Adjust cover photo on resize
+ window.addEventListener('resize', function() {
+ if (!coverPhoto) return;
+
+ coverHeight = Math.round(window.innerWidth / 2.75862069);
+ coverPhoto.style.height = `${coverHeight}px`;
+
+ if (window.innerWidth < 755) {
+ coverPhoto.remove();
+ coverHiddenActions();
+ coverSlid = true;
}
- }
- if($('main').css('opacity') < 1) {
- $('main').css('opacity', ($(window).scrollTop()/cover_height).toFixed(1));
- }
+ });
});
- $(window).resize(function () {
- if(! $('#cover-photo').length) {
- return;
- }
+ // Scroll event handling
+ function handleScroll(scrollTop) {
+ const coverPhoto = document.getElementById('cover-photo');
+ if (!coverPhoto) return;
- cover_height = Math.ceil($(window).width()/2.75862069);
- $('#cover-photo').css('height', cover_height + 'px');
- if($(window).width() < 755) {
- $('#cover-photo').remove();
+ if (scrollTop >= coverHeight) {
coverHiddenActions();
coverSlid = true;
+ } else if (scrollTop < coverHeight) {
+ if (coverSlid) {
+ document.body.style.overflow = 'hidden'; // Disable scrolling
+ window.scrollTo(0, coverHeight);
+ setTimeout(function() {
+ coverSlid = false;
+ document.body.style.overflow = 'auto'; // Enable scrolling
+ }, 500);
+ } else {
+ coverVisibleActions();
+ }
}
- });
+ // Fade effect for main content opacity
+ const mainElement = document.querySelector('main');
+ if (mainElement && parseFloat(getComputedStyle(mainElement).opacity) < 1) {
+ mainElement.style.opacity = (scrollTop / coverHeight).toFixed(1);
+ }
+ }
+ // Functions to handle showing/hiding the cover
function slideUpCover() {
- if(coverSlid) {
- return;
- }
- $('html, body').animate({scrollTop: cover_height + 'px'}, 'fast');
- return;
+ if (coverSlid) return;
+ window.scrollTo({
+ top: coverHeight,
+ behavior: 'smooth'
+ });
}
- function hideCover() {
- if(coverSlid) {
- return;
- }
- window.scrollTo(0, cover_height);
- return;
+ function hideCoverFunction() {
+ if (coverSlid) return;
+ window.scrollTo(0, coverHeight);
}
+ // Actions when the cover is visible
function coverVisibleActions() {
- $('body').css('cursor', 'n-resize');
- $('.navbar').removeClass('fixed-top');
- //$('main').css('margin-top', - $('nav').outerHeight(true) + 'px');
- $('main').css('opacity', 0);
+ document.body.style.cursor = 'n-resize';
+ const navbar = document.getElementById('navbar-top');
+ if (navbar) navbar.classList.remove('fixed-top');
+ const mainElement = document.querySelector('main');
+ if (mainElement) mainElement.style.opacity = 0;
}
+ // Actions when the cover is hidden
function coverHiddenActions() {
- $('body').css('cursor', '');
- $('.navbar').addClass('fixed-top');
- //$('main').css('margin-top', '');
- $('main').css('opacity', 1);
+ document.body.style.cursor = '';
+ const navbar = document.getElementById('navbar-top');
+ if (navbar) navbar.classList.add('fixed-top');
+ const mainElement = document.querySelector('main');
+ if (mainElement) mainElement.style.opacity = 1;
}
</script>
diff --git a/view/tpl/direntry.tpl b/view/tpl/direntry.tpl
index 79d66d3aa..076d2739f 100644
--- a/view/tpl/direntry.tpl
+++ b/view/tpl/direntry.tpl
@@ -14,7 +14,7 @@
<a class="btn btn-success btn-sm" href="{{$entry.connect}}"><i class="bi bi-plus-lg connect-icon"></i> {{$entry.conn_label}}</a>
{{/if}}
</div>
- <h3>{{if $entry.public_forum}}<i class="bi bi-chat-quote" title="{{$entry.forum_label}} @{{$entry.nickname}}+"></i>&nbsp;{{/if}}<a href='{{$entry.profile_link}}' >{{$entry.name}}</a>{{if $entry.online}}&nbsp;<i class="bi fa-asterisk online-now" title="{{$entry.online}}"></i>{{/if}}</h3>
+ <h3>{{if $entry.public_forum}}<i class="bi bi-chat-quote" title="{{$entry.forum_label}} @{{$entry.nickname}}+"></i>&nbsp;{{/if}}<a href='{{$entry.profile_link}}' >{{$entry.name}}</a>{{if $entry.online}}&nbsp;<i class="bi bi-asterisk online-now" title="{{$entry.online}}"></i>{{/if}}</h3>
</div>
<div class="section-content-tools-wrapper directory-collapse">
<div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$entry.hash}}" >
diff --git a/view/tpl/event_form.tpl b/view/tpl/event_form.tpl
index 43c6942e1..c469e9378 100644
--- a/view/tpl/event_form.tpl
+++ b/view/tpl/event_form.tpl
@@ -57,13 +57,13 @@
</div>
<div class='btn-group'>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edimg}}" onclick="insertbbcomment('none','img', 'desc');">
- <i class="bi fa-camera comment-icon"></i>
+ <i class="bi bi-camera comment-icon"></i>
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edurl}}" onclick="insertbbcomment('none','url', 'desc');">
<i class="bi bi-link-45deg comment-icon"></i>
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edvideo}}" onclick="insertbbcomment('none','video', 'desc');">
- <i class="bi fa-video-camera comment-icon"></i>
+ <i class="bi bi-video-camera comment-icon"></i>
</button>
</div>
</div>
@@ -95,13 +95,13 @@
</div>
<div class='btn-group'>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edimg}}" onclick="insertbbcomment('none','img', 'loc');">
- <i class="bi fa-camera comment-icon"></i>
+ <i class="bi bi-camera comment-icon"></i>
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edurl}}" onclick="insertbbcomment('none','url', 'loc');">
<i class="bi bi-link-45deg comment-icon"></i>
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edvideo}}" onclick="insertbbcomment('none','video', 'loc');">
- <i class="bi fa-video-camera comment-icon"></i>
+ <i class="bi bi-camera-video comment-icon"></i>
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$mapper}}" onclick="insertbbcomment('none','map','loc');">
<i class="bi bi-globe comment-icon"></i>
diff --git a/view/tpl/event_item_header.tpl b/view/tpl/event_item_header.tpl
index 1c8fe034c..36c3164d6 100644
--- a/view/tpl/event_item_header.tpl
+++ b/view/tpl/event_item_header.tpl
@@ -1,5 +1,5 @@
<div class="event-item-title">
- <h3><i class="bi fa-calendar"></i>&nbsp;{{$title}}</h3>
+ <h3><i class="bi bi-calendar3"></i>&nbsp;{{$title}}</h3>
</div>
{{if $oneday && $allday}}
<span class="dtstart">{{$dtstart_dt}}</span>
diff --git a/view/tpl/events-js.tpl b/view/tpl/events-js.tpl
index e2c3167f4..8f10d4e06 100644
--- a/view/tpl/events-js.tpl
+++ b/view/tpl/events-js.tpl
@@ -10,12 +10,12 @@
</div>
<button class="btn btn-success btn-sm" onclick="openClose('form');">{{$new_event.1}}</button>
<div class="btn-group">
- <button class="btn btn-outline-secondary btn-sm" onclick="changeView('prev', false);" title="{{$prev}}"><i class="bi fa-backward"></i></button>
- <button id="today-btn" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><div id="events-spinner" class="spinner s"></div><i class="bi fa-bullseye" style="display: none; width: 1rem;"></i></button>
- <button class="btn btn-outline-secondary btn-sm" onclick="changeView('next', false);" title="{{$next}}"><i class="bi fa-forward"></i></button>
+ <button class="btn btn-outline-secondary btn-sm" onclick="changeView('prev', false);" title="{{$prev}}"><i class="bi bi-rewind-fill"></i></button>
+ <button id="today-btn" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><div id="events-spinner" class="spinner s"></div><i class="bi bi-bullseye" style="display: none; width: 1rem;"></i></button>
+ <button class="btn btn-outline-secondary btn-sm" onclick="changeView('next', false);" title="{{$next}}"><i class="bi bi-fast-forward-fill"></i></button>
</div>
- <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen();"><i class="bi fa-expand"></i></button>
- <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false);"><i class="bi fa-compress"></i></button>
+ <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen();"><i class="bi bi-arrows-angle-expand"></i></button>
+ <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false);"><i class="bi bi-arrows-angle-contract"></i></button>
</div>
</div>
<h2 id="title"></h2>
diff --git a/view/tpl/field_input.tpl b/view/tpl/field_input.tpl
index 1b548221f..c22b6fc29 100644
--- a/view/tpl/field_input.tpl
+++ b/view/tpl/field_input.tpl
@@ -1,6 +1,6 @@
<div id="id_{{$field.0}}_wrapper" class="mb-3">
<label for="id_{{$field.0}}" id="label_{{$field.0}}">
- {{$field.1}}{{if $field.4}}<sup class="required zuiqmid"> {{$field.4}}</sup>{{/if}}
+ {{$field.1}}{{if isset($field.4)}}<sup class="required zuiqmid"> {{$field.4}}</sup>{{/if}}
</label>
<input
class="form-control"
@@ -8,7 +8,7 @@
id="id_{{$field.0}}"
type="text"
value="{{$field.2|escape:'html':'UTF-8':FALSE}}"
- {{if $field.5}}{{$field.5}}{{/if}}
+ {{if isset($field.5)}}{{$field.5}}{{/if}}
>
<small id="help_{{$field.0}}" class="form-text text-muted">
{{$field.3}}
diff --git a/view/tpl/field_password.tpl b/view/tpl/field_password.tpl
index 7baad7d48..00cb9f9e1 100644
--- a/view/tpl/field_password.tpl
+++ b/view/tpl/field_password.tpl
@@ -1,5 +1,5 @@
<div class="mb-3">
<label for="id_{{$field.0}}">{{$field.1}}</label>
- <input class="form-control" type="password" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if $field.5}} {{$field.5}}{{/if}}>{{if $field.4}} <span class="required">{{$field.4}}</span> {{/if}}
+ <input class="form-control" type="password" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if isset($field.5)}} {{$field.5}}{{/if}}>{{if isset($field.4)}} <span class="required">{{$field.4}}</span> {{/if}}
<small id="help_{{$field.0}}" class="form-text text-muted">{{$field.3}}</small>
</div>
diff --git a/view/tpl/field_select.tpl b/view/tpl/field_select.tpl
index a98a26799..e1ad18b60 100644
--- a/view/tpl/field_select.tpl
+++ b/view/tpl/field_select.tpl
@@ -1,11 +1,11 @@
<div id="id_{{$field.0}}_wrapper" class="mb-3">
- <label for="id_{{$field.0}}">{{$field.1}}{{if $field.5}}<sup class="required zuiqmid"> {{$field.5}}</sup>{{/if}}</label>
+ <label for="id_{{$field.0}}">{{$field.1}}{{if isset($field.5)}}<sup class="required zuiqmid"> {{$field.5}}</sup>{{/if}}</label>
<select class="form-control" name="{{$field.0}}" id="id_{{$field.0}}">
{{foreach $field.4 as $opt=>$val}}<option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>{{/foreach}}
</select>
<small class="form-text text-muted">{{$field.3}}</small >
</div>
-{{*
+{{*
COMMENTS for this template:
@author hilmar runge, 2020.01
$field array index:
diff --git a/view/tpl/generic_addon_settings.tpl b/view/tpl/generic_addon_settings.tpl
index 685099807..a331dbb5d 100644
--- a/view/tpl/generic_addon_settings.tpl
+++ b/view/tpl/generic_addon_settings.tpl
@@ -5,7 +5,7 @@
{{if $addon.1|substr:0:1 === '<'}}
{{$addon.1}}
{{else}}
- <i class="bi fa-gear"></i> {{$addon.1}}
+ <i class="bi bi-gear"></i> {{$addon.1}}
{{/if}}
</a>
</h3>
diff --git a/view/tpl/head.tpl b/view/tpl/head.tpl
index bf61a7ee4..18941f454 100644
--- a/view/tpl/head.tpl
+++ b/view/tpl/head.tpl
@@ -8,10 +8,11 @@
{{$linkrel}}
{{$plugins}}
<script>
+ var lang = '{{$lang}}';
var updateInterval = {{$update_interval}};
var sse_enabled = {{$sse_enabled}};
var localUser = {{if $local_channel}}{{$local_channel}}{{else}}false{{/if}};
- var zid = {{if $zid}}'{{$zid}}'{{else}}null{{/if}};
+ var zid = {{if $zid}}'{{$zid|escape:url}}'{{else}}null{{/if}};
var justifiedGalleryActive = false;
{{if $channel_hash}}var channelHash = '{{$channel_hash}}';{{/if}}
var channelId = {{if $channel_id}}{{$channel_id}}{{else}}false{{/if}};{{* Used in e.g. autocomplete *}}
diff --git a/view/tpl/install_checks.tpl b/view/tpl/install_checks.tpl
index f9743d02a..f5f4df137 100644
--- a/view/tpl/install_checks.tpl
+++ b/view/tpl/install_checks.tpl
@@ -2,7 +2,7 @@
<div class="jumbotron">
<h1>{{$title}}</h1>
<hr class="my-4">
- <h2><i class="bi fa-heartbeat"></i>&nbsp; {{$pass}}</h2>
+ <h2><i class="bi bi-heart-pulse"></i>&nbsp; {{$pass}}</h2>
</div>
<form action="{{$baseurl}}/index.php?q=setup" method="post">
<table class="table">
@@ -23,7 +23,7 @@
<button class="btn btn-success" type="submit"><i class="bi bi-check-lg"></i> {{$next}}</button>
{{else}}
<input type="hidden" name="pass" value="1">
- <button class="btn btn-warning" type="submit"><i class="bi fa-refresh"></i> {{$reload}}</button>
+ <button class="btn btn-warning" type="submit"><i class="bi bi-arrow-clockwise"></i> {{$reload}}</button>
{{/if}}
</form>
</div>
diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl
index 2c60b7c22..3d93fcde9 100644
--- a/view/tpl/jot-header.tpl
+++ b/view/tpl/jot-header.tpl
@@ -199,6 +199,7 @@ var activeCommentText = '';
$('#created-modal-OKButton').on('click', function() {
reply=$('#created-date').val();
if(reply && reply.length) {
+ $('#jot-delayed').val(1);
$('#jot-created').val(reply);
$('#createdModal').modal('hide');
}
diff --git a/view/tpl/jot.tpl b/view/tpl/jot.tpl
index 294750398..9c9d649aa 100644
--- a/view/tpl/jot.tpl
+++ b/view/tpl/jot.tpl
@@ -13,6 +13,7 @@
{{if $parent}}
<input type="hidden" name="parent" value="{{$parent}}" />
{{/if}}
+ <input type="hidden" id="jot-delayed" name="delayed" value="0" />
<input type="hidden" name="obj_type" value="{{$ptyp}}" />
<input type="hidden" name="profile_uid" value="{{$profile_uid}}" />
<input type="hidden" name="return" value="{{$return_path}}" />
@@ -115,6 +116,9 @@
<button type="button" id="main-editor-code" class="btn btn-outline-secondary btn-sm border-0" title="{{$code}}" onclick="inserteditortag('code', 'profile-jot-text'); return false;">
<i class="bi bi-code jot-icons"></i>
</button>
+ <button type="button" id="main-editor-bold" class="btn btn-outline-secondary btn-sm border-0" title="{{$highlighter}}" onclick="inserteditortag('mark', 'profile-jot-text'); return false;">
+ <i class="bi bi-highlighter jot-icons"></i>
+ </button>
</div>
{{/if}}
{{if $visitor}}
@@ -169,7 +173,7 @@
</button>
{{if $feature_nocomment}}
<button type="button" id="profile-nocomment-wrapper" class="btn btn-outline-secondary btn-sm border-0" title="{{$nocommenttitle}}" onclick="toggleNoComment();return false;">
- <i id="profile-nocomment" class="bi bi-chat-dots jot-icons"></i>
+ <i id="profile-nocomment" class="bi{{if $nocomment}} bi-chat{{else}} bi-chat-dots{{/if}} jot-icons"></i>
</button>
{{/if}}
{{if $custommoretoolsbuttons}}
@@ -210,7 +214,7 @@
{{/if}}
<a class="dropdown-item" href="#" onclick="initPoll(); return false"><i id="profile-poll" class="bi bi-bar-chart jot-icons"></i>&nbsp;{{$poll}}</a>
{{if $feature_nocomment}}
- <a class="dropdown-item" href="#" onclick="toggleNoComment(); return false;"><i id="profile-nocomment-sub" class="bi bi-chat"></i>&nbsp;{{$nocommenttitlesub}}</a>
+ <a class="dropdown-item" href="#" onclick="toggleNoComment(); return false;"><i id="profile-nocomment-sub" class="bi{{if $nocomment}} bi-chat{{else}} bi-chat-dots{{/if}}"></i>&nbsp;{{$nocommenttitlesub}}</a>
{{/if}}
<hr />
{{$custommoretoolsdropdown}}
diff --git a/view/tpl/js_strings.tpl b/view/tpl/js_strings.tpl
index 46536a89a..38168ccfe 100644
--- a/view/tpl/js_strings.tpl
+++ b/view/tpl/js_strings.tpl
@@ -39,26 +39,6 @@
'pin_item' : "{{$pin_item}}",
'unpin_item' : "{{$unpin_item}}",
- 'plural_func' : "{{$plural_func}}",
-
- 't01' : "{{$t01}}",
- 't02' : "{{$t02}}",
- 't03' : "{{$t03}}",
- 't04' : "{{$t04}}",
- 't05' : "{{$t05}}",
- 't06' : "{{$t06}}",
- 't07' : "{{$t07}}",
- 't08' : "{{$t08}}",
- 't09' : "{{$t09}}",
- 't10' : "{{$t10}}",
- 't11' : "{{$t11}}",
- 't12' : "{{$t12}}",
- 't13' : "{{$t13}}",
- 't14' : "{{$t14}}",
- 't15' : "{{$t15}}",
- 't16' : "{{$t16}}",
- 't17' : "{{$t17}}",
-
'monthNames' : [ "{{$January}}","{{$February}}","{{$March}}","{{$April}}","{{$May}}","{{$June}}","{{$July}}","{{$August}}","{{$September}}","{{$October}}","{{$November}}","{{$December}}" ],
'monthNamesShort' : [ "{{$Jan}}","{{$Feb}}","{{$Mar}}","{{$Apr}}","{{$MayShort}}","{{$Jun}}","{{$Jul}}","{{$Aug}}","{{$Sep}}","{{$Oct}}","{{$Nov}}","{{$Dec}}" ],
'dayNames' : ["{{$Sunday}}","{{$Monday}}","{{$Tuesday}}","{{$Wednesday}}","{{$Thursday}}","{{$Friday}}","{{$Saturday}}"],
diff --git a/view/tpl/login.tpl b/view/tpl/login.tpl
index ead524193..46264ca92 100644
--- a/view/tpl/login.tpl
+++ b/view/tpl/login.tpl
@@ -1,17 +1,18 @@
<form action="{{$dest_url}}" id="{{$form_id}}" method="post" >
<input type="hidden" name="auth-params" value="login" />
- <div class="login-wrapper d-grid gap-2">
+ <div>
{{include file="field_input.tpl" field=$lname}}
{{include file="field_password.tpl" field=$lpassword}}
{{include file="field_checkbox.tpl" field=$remember_me}}
<button type="submit" name="submit" class="btn btn-primary">{{$login}}</button>
- {{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" class="register-link float-end">{{$register.desc}}</a>{{/if}}
- {{if $lostlink}}<a href="lostpass" title="{{$lostpass}}" class="lost-pass-link">{{$lostlink}}</a>{{/if}}
+ {{if $lostlink}}<a href="lostpass" title="{{$lostpass}}" class="lost-pass-link float-end">{{$lostlink}}</a>{{/if}}
<hr>
<a href="rmagic" class="btn btn-outline-success">{{$remote_login}}</a>
+ {{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" class="register-link float-end">{{$register.desc}}</a>{{/if}}
+
</div>
{{foreach $hiddens as $k=>$v}}
- <input type="hidden" name="{{$k}}" value="{{$v}}" />
+ <input type="hidden" name="{{$k}}" value="{{$v}}" />
{{/foreach}}
</form>
{{if $login_page}}
diff --git a/view/tpl/messages_widget.tpl b/view/tpl/messages_widget.tpl
index 52a9b96f4..2201095bd 100644
--- a/view/tpl/messages_widget.tpl
+++ b/view/tpl/messages_widget.tpl
@@ -16,6 +16,13 @@
</a>
</li>
{{/if}}
+ {{if $feature_file}}
+ <li class="nav-item">
+ <a class="nav-link messages-type" href="#" title="{{$strings.filed_messages_title}}" data-messages_type="filed">
+ <i class="bi bi-folder generic-icons"></i>
+ </a>
+ </li>
+ {{/if}}
<li class="nav-item">
<a class="nav-link messages-type" href="#" title="{{$strings.notice_messages_title}}" data-messages_type="notification">
<i class="bi bi-exclamation-circle generic-icons"></i>
@@ -33,7 +40,7 @@
{7}
<strong title="{4}">{4}</strong>
</div>
- <small class="messages-timeago opacity-75" title="{1}"></small>
+ <small class="autotime-narrow opacity-75" title="{1}"></small>
</div>
<div class="text-truncate">
<small class="opacity-75" title="{5}">{5}</small>
@@ -53,6 +60,18 @@
<input id="messages-author" type="text" class="form-control form-control-sm" placeholder="{{$strings.filter}}">
<div id="messages-author-input-clear" class="text-muted notifications-textinput-clear d-none"><i class="bi bi-x-lg"></i></div>
</div>
+ {{if $feature_file}}
+ <div id="messages-file-container" class="list-group-item notifications-textinput d-none">
+ <div class="text-muted notifications-textinput-filter"><i class="bi bi-filter"></i></div>
+ <input id="messages-file" type="text" list="data_filetags" class="form-control form-control-sm" placeholder="{{$strings.file_filter}}">
+ <datalist id="data_filetags">
+ {{foreach $file_tags as $opt=>$val}}
+ <option value="{{$val}}">
+ {{/foreach}}
+ </datalist>
+ <div id="messages-file-input-clear" class="text-muted notifications-textinput-clear d-none"><i class="bi bi-x-lg"></i></div>
+ </div>
+ {{/if}}
{{foreach $entries as $e}}
<a href="{{$e.href}}" class="list-group-item list-group-item-action message" data-b64mid="{{$e.b64mid}}">
<div class="mb-2 align-middle">
@@ -63,7 +82,7 @@
{{$e.icon}}
<strong title="{{$e.author_name}}">{{$e.author_name}}</strong>
</div>
- <small class="messages-timeago opacity-75" title="{{$e.created}}"></small>
+ <small class="autotime-narrow opacity-75" title="{{$e.created}}"></small>
</div>
<div class="text-truncate">
<small class="opacity-75" title="{{$e.author_addr}}">{{$e.author_addr}}</small>
@@ -75,7 +94,7 @@
</div>
<small class="opacity-75">{{$e.info}}</small>
{{if $e.unseen_count}}
- <span class="badge bg-transparent border border-{{$e.unseen_class}} text-{{$e.unseen_class}} rounded-pill position-absolute bottom-0 end-0 m-2" title="{{$strings.unseen_count}}">{{$e.unseen_count}}</span>
+ <span class="badge bg-transparent border border-{{$e.unseen_class}} text-{{$e.unseen_class}} rounded-pill position-absolute bottom-0 end-0 m-2 unseen_count" title="{{$strings.unseen_count}}">{{$e.unseen_count}}</span>
{{/if}}
</a>
{{/foreach}}
@@ -94,9 +113,11 @@
let author_hash;
let author_url;
let author;
+ let file;
$(document).ready(function () {
- $('.messages-timeago').timeago();
+ updateRelativeTime('.autotime-narrow');
+
if (bParam_mid) {
$('.message[data-b64mid=\'' + bParam_mid + '\']').addClass('active');
}
@@ -109,6 +130,7 @@
$('#messages-container .message').remove();
$('#messages-author-container').addClass('active sticky-top');
$('#messages-author-input-clear').removeClass('d-none');
+
author_hash = data.xid;
author_url = data.url;
author = messages_type === 'notification' ? author_url : author_hash;
@@ -116,14 +138,35 @@
get_messages_page();
});
- $(document).on('click', '#messages-author-input-clear', function() {
- $('#messages-author').val('');
+ $('#messages-file').on('input', function(e) {
+ file = e.currentTarget.value;
+
+ let datalist = document.getElementById('data_filetags');
+ let options = [...datalist.options].map(option => option.value);
+
+ if (!options.includes(file)) {
+ return;
+ }
+
+ $('#messages-container .message').remove();
+ $('#messages-file-container').addClass('active sticky-top');
+ $('#messages-file-input-clear').removeClass('d-none');
+
+ messages_offset = 0;
+ get_messages_page();
+ });
+
+ $(document).on('click', '#messages-author-input-clear, #messages-file-input-clear', function() {
+ $('#messages-author, #messages-file').val('');
$("#messages-author").attr('placeholder', '{{$strings.filter}}');
+ $("#messages-file").attr('placeholder', '{{$strings.file_filter}}');
$('#messages-author-container').removeClass('active sticky-top');
+ $('#messages-file-container').removeClass('active sticky-top');
$('#messages-author-input-clear').addClass('d-none');
$('#messages-container .message').remove();
author = '';
+ file = '';
author_hash = '';
author_url = '';
messages_offset = 0;
@@ -145,6 +188,16 @@
messages_offset = 0;
messages_type = $(this).data('messages_type');
author = messages_type === 'notification' ? author_url : author_hash;
+
+ if (messages_type === 'filed') {
+ $('#messages-author-container').addClass('d-none');
+ $('#messages-file-container').removeClass('d-none');
+ }
+ else {
+ $('#messages-author-container').removeClass('d-none');
+ $('#messages-file-container').addClass('d-none');
+ }
+
$('#messages-container .message').remove();
get_messages_page();
});
@@ -167,7 +220,8 @@
data: {
offset: messages_offset,
type: messages_type,
- author: author
+ author: author,
+ file: file
}
}).done(function(obj) {
get_messages_page_active = false;
@@ -185,7 +239,7 @@
e.author_addr,
e.href,
e.icon,
- e.unseen_count ? '<span class="badge bg-transparent border border-' + e.unseen_class + ' text-' + e.unseen_class + ' rounded-pill position-absolute bottom-0 end-0 m-2" title="{{$strings.unseen_count}}">' + e.unseen_count + '</span>' : '',
+ e.unseen_count ? '<span class="badge bg-transparent border border-' + e.unseen_class + ' text-' + e.unseen_class + ' rounded-pill position-absolute bottom-0 end-0 m-2 unseen_count" title="{{$strings.unseen_count}}">' + e.unseen_count + '</span>' : '',
e.author_img
);
$('#messages-loading').before(html);
@@ -198,7 +252,7 @@
$('.message[data-b64mid=\'' + bParam_mid + '\']').addClass('active');
}
$('#messages-loading').hide();
- $('.messages-timeago').timeago();
+ updateRelativeTime('.autotime-narrow');
});
diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl
index 97901e052..9f7427a7d 100644
--- a/view/tpl/notifications_widget.tpl
+++ b/view/tpl/notifications_widget.tpl
@@ -7,43 +7,53 @@
var sse_fallback_interval;
var sse_sys_only = {{$sys_only}};
- $(document).ready(function() {
- let notifications_parent;
- if ($('#notifications_wrapper').length) {
- notifications_parent = $('#notifications_wrapper')[0].parentElement.id;
- }
-
- $('.notifications-btn').click(function() {
- $('#notifications_wrapper').removeClass('d-none');
-
- if($('#notifications_wrapper').hasClass('fs')) {
- $('#notifications_wrapper').prependTo('#' + notifications_parent);
- $('#notifications_wrapper').addClass('d-none');
+ document.addEventListener("DOMContentLoaded", function() {
+ let notificationsWrapper = document.getElementById('notifications_wrapper');
+ let notificationsParent = notificationsWrapper ? notificationsWrapper.parentElement.id : null;
+ let notificationsBtn = document.querySelector('.notifications-btn');
+
+ // Event listener for notifications button
+ if (notificationsBtn) {
+ notificationsBtn.addEventListener('click', function() {
+ // Remove the 'd-none' class to show the notifications wrapper
+ notificationsWrapper.classList.remove('d-none');
+
+ // Check if the notifications wrapper has the 'fs' class
+ if (notificationsWrapper.classList.contains('fs')) {
+ // Prepend the notifications wrapper back to its original parent and hide it
+ document.getElementById(notificationsParent).appendChild(notificationsWrapper);
+ notificationsWrapper.classList.add('d-none');
+ } else {
+ // Otherwise, prepend the notifications wrapper to 'main'
+ document.querySelector('main').prepend(notificationsWrapper);
+ }
- }
- else {
- $('#notifications_wrapper').prependTo('main');
- }
+ // Toggle the 'fs' class
+ notificationsWrapper.classList.toggle('fs');
+ });
+ }
- $('#notifications_wrapper').toggleClass('fs');
- if($('#navbar-collapse-2').hasClass('show')){
- $('#navbar-collapse-2').removeClass('show');
- }
- });
+ // Event listener for clicking a notification
+ document.addEventListener('click', function(event) {
+ if (event.target.closest('a') && event.target.closest('a').classList.contains('notification')) {
+ console.log(1)
+ if (notificationsWrapper.classList.contains('fs')) {
+ // Move notifications wrapper back to its original parent and hide it
+ notificationsWrapper.classList.remove('fs');
+ notificationsWrapper.classList.add('d-none');
+ document.getElementById(notificationsParent).appendChild(notificationsWrapper);
- $(document).on('click', '.notification', function() {
- if($('#notifications_wrapper').hasClass('fs')) {
- $('#notifications_wrapper').prependTo('#' + notifications_parent).removeClass('fs').addClass('d-none');
+ }
}
});
if(sse_enabled) {
if(typeof(window.SharedWorker) === 'undefined') {
// notifications with multiple tabs open will not work very well in this scenario
- var evtSource = new EventSource('/sse');
+ let evtSource = new EventSource('/sse');
evtSource.addEventListener('notifications', function(e) {
- var obj = JSON.parse(e.data);
+ let obj = JSON.parse(e.data);
sse_handleNotifications(obj, false, false);
}, false);
@@ -56,7 +66,7 @@
}
else {
- var myWorker = new SharedWorker('/view/js/sse_worker.js', localUser);
+ let myWorker = new SharedWorker('/view/js/sse_worker.js', localUser);
myWorker.port.onmessage = function(e) {
obj = e.data;
@@ -72,8 +82,9 @@
}
}
else {
- if (!document.hidden)
+ if (!document.hidden) {
sse_fallback_interval = setInterval(sse_fallback, updateInterval);
+ }
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
@@ -88,234 +99,341 @@
}, false);
}
- $('.notification-link').on('click', { replace: true, followup: false }, sse_bs_notifications);
+ document.querySelectorAll('.notification-link').forEach(function (element) {
+ element.addEventListener('click', function (element) {
+ sse_bs_notifications(element, true, false);
+ });
+ });
- $('.notification-filter').on('keypress', function(e) {
- if(e.which == 13) { // enter
- this.blur();
- sse_offset = 0;
- $("#nav-" + sse_type + "-menu").html('');
- $("#nav-" + sse_type + "-loading").show();
+ document.querySelectorAll('.notification-filter').forEach(function (element) {
+ element.addEventListener('keypress', function(e) {
+ if (e.which == 13) { // Enter key
+ this.blur();
+ sse_offset = 0;
- var cn_val = $('#cn-' + sse_type + '-input').length ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : '';
+ // Clear the content of the menu
+ document.getElementById("nav-" + sse_type + "-menu").innerHTML = '';
+
+ // Show the loading element
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
+
+ // Get the value from the input element
+ var cn_val = document.getElementById('cn-' + sse_type + '-input') ? document.getElementById('cn-' + sse_type + '-input').value.toString().toLowerCase() : '';
+
+ // Send a GET request using the Fetch API
+ fetch('/sse_bs/' + sse_type + '/' + sse_offset + '?nquery=' + encodeURIComponent(cn_val))
+ .then(response => response.json())
+ .then(obj => {
+ console.log('sse: bootstraping ' + sse_type);
+ console.log(obj);
+
+ sse_bs_active = false;
+ sse_partial_result = true;
+ sse_offset = obj[sse_type].offset;
+ if (sse_offset < 0) {
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
+ }
+
+ sse_handleNotifications(obj, true, false);
+ })
+ .catch(error => {
+ console.error('Error fetching data:', error);
+ });
+ }
+ });
+ });
- $.get('/sse_bs/' + sse_type + '/' + sse_offset + '?nquery=' + encodeURIComponent(cn_val), function(obj) {
- console.log('sse: bootstraping ' + sse_type);
- console.log(obj);
+ document.querySelectorAll('.notifications-textinput-clear').forEach(function (element) {
+ element.addEventListener('click', function(e) {
+ if (!sse_partial_result) return;
- sse_bs_active = false;
- sse_partial_result = true;
- sse_offset = obj[sse_type].offset;
- if(sse_offset < 0)
- $("#nav-" + sse_type + "-loading").hide();
+ // Clear the content of the menu
+ document.getElementById("nav-" + sse_type + "-menu").innerHTML = '';
- sse_handleNotifications(obj, true, false);
+ // Show the loading element
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
- });
- }
+ // Send a GET request using the Fetch API
+ fetch('/sse_bs/' + sse_type)
+ .then(response => response.json())
+ .then(obj => {
+ console.log('sse: bootstraping ' + sse_type);
+ console.log(obj);
+
+ sse_bs_active = false;
+ sse_partial_result = false;
+ sse_offset = obj[sse_type].offset;
+ if (sse_offset < 0) {
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
+ }
+
+ sse_handleNotifications(obj, true, false);
+ })
+ .catch(error => {
+ console.error('Error fetching data:', error);
+ });
+ });
});
- $('.notifications-textinput-clear').on('click', function(e) {
- if(! sse_partial_result)
- return;
+ document.querySelectorAll('.notification-content').forEach(function(element) {
+ element.addEventListener('scroll', function() {
+ if (this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight / 7)) {
+ sse_bs_notifications(sse_type, false, true);
+ }
+ });
+ });
- $("#nav-" + sse_type + "-menu").html('');
- $("#nav-" + sse_type + "-loading").show();
- $.get('/sse_bs/' + sse_type, function(obj) {
- console.log('sse: bootstraping ' + sse_type);
- console.log(obj);
+ {{foreach $notifications as $notification}}
+ {{if $notification.filter}}
+
+ document.querySelectorAll('#tt-{{$notification.type}}-only').forEach(function (element) {
+ element.addEventListener('click', function(e) {
+
+ let element = e.target.closest('div');
+ let menu = document.querySelector('#nav-{{$notification.type}}-menu');
+ let notifications = menu.querySelectorAll('.notification[data-thread_top="false"]');
+
+ // Function to check if an element is visible
+ function isVisible(el) {
+ return el.offsetWidth > 0 && el.offsetHeight > 0;
+ }
- sse_bs_active = false;
- sse_partial_result = false;
- sse_offset = obj[sse_type].offset;
- if(sse_offset < 0)
- $("#nav-" + sse_type + "-loading").hide();
+ if (element.classList.contains('active') && element.classList.contains('sticky-top')) {
+ notifications.forEach(function(notification) {
+ notification.classList.remove('tt-filter-active');
+ });
+ element.classList.remove('active', 'sticky-top');
+ } else {
+ notifications.forEach(function(notification) {
+ notification.classList.add('tt-filter-active');
+ });
+ element.classList.add('active', 'sticky-top');
- sse_handleNotifications(obj, true, false);
+ // Count the visible notifications
+ let visibleNotifications = Array.from(menu.querySelectorAll('.notification')).filter(isVisible).length;
+
+ // Load more notifications if the visible count is low
+ if (sse_type && sse_offset !== -1 && visibleNotifications < 15) {
+ sse_bs_notifications(sse_type, false, true);
+ }
+ }
});
});
- $('.notification-content').on('scroll', function() {
- if(this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight/7)) {
- sse_bs_notifications(sse_type, false, true);
- }
- });
+ document.querySelectorAll('#cn-{{$notification.type}}-input-clear').forEach(function (element) {
+ element.addEventListener('click', function(e) {
+ let input = document.getElementById('cn-{{$notification.type}}-input');
+ input.value = '';
- });
+ // Remove 'active' and 'sticky-top' classes to the 'only' element
+ let onlyElement = document.getElementById('cn-{{$notification.type}}-only');
+ onlyElement.classList.remove('active', 'sticky-top');
- $(document).on('hz:sse_setNotificationsStatus', function(e, data) {
- sse_setNotificationsStatus(data);
- });
+ // Add 'd-none' class from the clear button
+ let clearButton = document.getElementById('cn-{{$notification.type}}-input-clear');
+ clearButton.classList.add('d-none');
- $(document).on('hz:sse_bs_init', function() {
- sse_bs_init();
- });
+ // Remove the 'cn-filter-active' class from all notifications
+ let notifications = document.querySelectorAll("#nav-{{$notification.type}}-menu .notification");
+ notifications.forEach(function(notification) {
+ notification.classList.remove('cn-filter-active');
+ });
+ });
+ });
- $(document).on('hz:sse_bs_counts', function() {
- sse_bs_counts();
- });
+ document.querySelectorAll('#cn-{{$notification.type}}-input').forEach(function (element) {
+ element.addEventListener('input', function(e) {
+ let input = e.target;
+ let val = input.value.toString().toLowerCase();
+
+ // Check if there is input value
+ if (val) {
+ // Remove '%' if it's at the beginning of the input value
+ val = val.indexOf('%') === 0 ? val.substring(1) : val;
+
+ // Add 'active' and 'sticky-top' classes to the 'only' element
+ let onlyElement = document.getElementById('cn-{{$notification.type}}-only');
+ onlyElement.classList.add('active', 'sticky-top');
+
+ // Remove 'd-none' class from the clear button
+ let clearButton = document.getElementById('cn-{{$notification.type}}-input-clear');
+ clearButton.classList.remove('d-none');
+ } else {
+ // Remove 'active' and 'sticky-top' classes from the 'only' element
+ let onlyElement = document.getElementById('cn-{{$notification.type}}-only');
+ onlyElement.classList.remove('active', 'sticky-top');
+
+ // Add 'd-none' class to the clear button
+ let clearButton = document.getElementById('cn-{{$notification.type}}-input-clear');
+ clearButton.classList.add('d-none');
+ }
- {{foreach $notifications as $notification}}
- {{if $notification.filter}}
- $(document).on('click', '#tt-{{$notification.type}}-only', function(e) {
- if($(this).hasClass('active sticky-top')) {
- $('#nav-{{$notification.type}}-menu .notification[data-thread_top=false]').removeClass('tt-filter-active');
- $(this).removeClass('active sticky-top');
- }
- else {
- $('#nav-{{$notification.type}}-menu .notification[data-thread_top=false]').addClass('tt-filter-active');
- $(this).addClass('active sticky-top');
- // load more notifications if visible notifications count is low
- if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children(':visible').length < 15) {
- sse_bs_notifications(sse_type, false, true);
- }
- }
+ // Loop through each notification and apply filter logic
+ let notifications = document.querySelectorAll("#nav-{{$notification.type}}-menu .notification");
+ notifications.forEach(function(el) {
+ let cn = el.dataset.contact_name.toString().toLowerCase();
+ let ca = el.dataset.contact_addr.toString().toLowerCase();
+
+ // Check if the contact name or address matches the input value
+ if (cn.indexOf(val) === -1 && ca.indexOf(val) === -1) {
+ el.classList.add('cn-filter-active');
+ } else {
+ el.classList.remove('cn-filter-active');
+ }
+ });
+ });
+ });
- });
+ {{/if}}
+ {{/foreach}}
- $(document).on('click', '#cn-{{$notification.type}}-input-clear', function(e) {
- $('#cn-{{$notification.type}}-input').val('');
- $('#cn-{{$notification.type}}-only').removeClass('active sticky-top');
- $("#nav-{{$notification.type}}-menu .notification").removeClass('cn-filter-active');
- $('#cn-{{$notification.type}}-input-clear').addClass('d-none');
});
- $(document).on('input', '#cn-{{$notification.type}}-input', function(e) {
- var val = $('#cn-{{$notification.type}}-input').val().toString().toLowerCase();
- if(val) {
- val = val.indexOf('%') == 0 ? val.substring(1) : val;
- $('#cn-{{$notification.type}}-only').addClass('active sticky-top');
- $('#cn-{{$notification.type}}-input-clear').removeClass('d-none');
- }
- else {
- $('#cn-{{$notification.type}}-only').removeClass('active sticky-top');
- $('#cn-{{$notification.type}}-input-clear').addClass('d-none');
- }
+ document.addEventListener('hz:sse_setNotificationsStatus', function(e) {
+ sse_setNotificationsStatus(e.detail);
+ });
- $("#nav-{{$notification.type}}-menu .notification").each(function(i, el){
- var cn = $(el).data('contact_name').toString().toLowerCase();
- var ca = $(el).data('contact_addr').toString().toLowerCase();
+ document.addEventListener('hz:sse_bs_init', function() {
+ sse_bs_init();
+ });
- if(cn.indexOf(val) === -1 && ca.indexOf(val) === -1)
- $(this).addClass('cn-filter-active');
- else
- $(this).removeClass('cn-filter-active');
- });
+ document.addEventListener('hz:sse_bs_counts', function() {
+ sse_bs_counts();
});
- {{/if}}
- {{/foreach}}
+
function sse_bs_init() {
- if(sessionStorage.getItem('notification_open') !== null || typeof sse_type !== 'undefined' ) {
- if(typeof sse_type === 'undefined')
+ // Check if 'notification_open' exists in sessionStorage or if sse_type is defined
+ if (sessionStorage.getItem('notification_open') !== null || typeof sse_type !== 'undefined') {
+ if (typeof sse_type === 'undefined') {
sse_type = sessionStorage.getItem('notification_open');
+ }
+
+ // Add the 'show' class to the appropriate element
+ let subNav = document.getElementById("nav-" + sse_type + "-sub");
+ if (subNav) {
+ subNav.classList.add('show');
+ }
- $("#nav-" + sse_type + "-sub").addClass('show');
+ // Call the sse_bs_notifications function
sse_bs_notifications(sse_type, true, false);
- }
- else {
+ } else {
+ // Call the sse_bs_counts function if conditions are not met
sse_bs_counts();
}
}
function sse_bs_counts() {
- if(sse_bs_active || sse_sys_only) {
+ if (sse_bs_active || sse_sys_only) {
return;
}
sse_bs_active = true;
- $.ajax({
- type: 'post',
- url: '/sse_bs',
- data: { sse_rmids }
- }).done( function(obj) {
+ // Use the fetch API to send the POST request with the data
+ fetch('/sse_bs', {
+ method: 'POST',
+ body: new URLSearchParams({sse_rmids: sse_rmids})
+ })
+ .then(response => response.json()) // Parse the JSON response
+ .then(obj => {
console.log(obj);
sse_bs_active = false;
sse_rmids = [];
sse_handleNotifications(obj, true, false);
+ })
+ .catch(error => {
+ console.error('Error:', error);
+ sse_bs_active = false;
});
}
function sse_bs_notifications(e, replace, followup) {
-
- if(sse_bs_active || sse_sys_only) {
+ if (sse_bs_active || sse_sys_only) {
return;
}
let manual = false;
- if(typeof replace === 'undefined')
+ if (typeof replace === 'undefined') {
replace = e.data.replace;
+ }
- if(typeof followup === 'undefined')
+ if (typeof followup === 'undefined') {
followup = e.data.followup;
+ }
- if(typeof e === 'string') {
+ if (typeof e === 'string') {
sse_type = e;
- }
- else {
+ } else {
manual = true;
sse_offset = 0;
sse_type = e.target.dataset.sse_type;
}
- if(typeof sse_type === 'undefined')
+ if (typeof sse_type === 'undefined') {
return;
+ }
- if(followup || !manual || !$('#notification-link-' + sse_type).hasClass('collapsed')) {
+ if (followup || !manual || !document.getElementById('notification-link-' + sse_type).classList.contains('collapsed')) {
- if(sse_offset >= 0) {
- $("#nav-" + sse_type + "-loading").show();
+ if (sse_offset >= 0) {
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
}
sessionStorage.setItem('notification_open', sse_type);
- if(sse_offset !== -1 || replace) {
- var cn_val = (($('#cn-' + sse_type + '-input').length && sse_partial_result) ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : '');
+ if (sse_offset !== -1 || replace) {
+ let cn_val = (document.getElementById('cn-' + sse_type + '-input') && sse_partial_result)
+ ? document.getElementById('cn-' + sse_type + '-input').value.toString().toLowerCase()
+ : '';
- $("#nav-" + sse_type + "-loading").show();
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
sse_bs_active = true;
- $.ajax({
- type: 'post',
- url: '/sse_bs/' + sse_type + '/' + sse_offset,
- nquery: encodeURIComponent(cn_val),
- data: { sse_rmids }
- }).done(function(obj) {
+ // Send POST request using fetch API
+ fetch('/sse_bs/' + sse_type + '/' + sse_offset, {
+ method: 'POST',
+ body: new URLSearchParams({
+ sse_rmids: sse_rmids,
+ nquery: encodeURIComponent(cn_val)
+ })
+ })
+ .then(response => response.json()) // Parse the JSON response
+ .then(obj => {
console.log('sse: bootstraping ' + sse_type);
console.log(obj);
sse_bs_active = false;
sse_rmids = [];
- $("#nav-" + sse_type + "-loading").hide();
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
sse_offset = obj[sse_type].offset;
sse_handleNotifications(obj, replace, followup);
+ })
+ .catch(error => {
+ console.error('Error:', error);
+ sse_bs_active = false;
});
+ } else {
+ document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
}
- else {
- $("#nav-" + sse_type + "-loading").hide();
- }
- }
- else {
+ } else {
sessionStorage.removeItem('notification_open');
}
}
function sse_handleNotifications(obj, replace, followup) {
-
- // notice and info
-
- if(obj.notice) {
- $(obj.notice.notifications).each(function() {
- toast(this, 'danger');
+ // Notice and info notifications
+ if (obj.notice) {
+ obj.notice.notifications.forEach(notification => {
+ toast(notification, 'danger');
});
}
- if(obj.info) {
- $(obj.info.notifications).each(function(){
- toast(this, 'info');
+ if (obj.info) {
+ obj.info.notifications.forEach(notification => {
+ toast(notification, 'info');
});
}
@@ -325,218 +443,262 @@
let primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files'];
let secondary_notifications = ['network', 'forums', 'all_events', 'pubs'];
- let all_notifications = primary_notifications.concat(secondary_notifications);
+ let all_notifications = [...primary_notifications, ...secondary_notifications];
- all_notifications.forEach(function(type, index) {
- if(typeof obj[type] === typeof undefined)
- return true;
+ all_notifications.forEach(type => {
+ if (typeof obj[type] === 'undefined') {
+ return;
+ }
- var count = Number(obj[type].count);
+ let count = Number(obj[type].count);
- if(obj[type].count) {
- $('.' + type + '-button').fadeIn();
- if(replace || followup) {
- $('.' + type + '-update').html(count >= 100 ? '99+' : count);
- }
- else {
- count = count + Number($('.' + type + '-update').html().replace(/\++$/, ''));
- $('.' + type + '-update').html(count >= 100 ? '99+' : count);
+ // Show notifications and update count
+ let updateElement = document.querySelector('.' + type + '-update');
+ let buttonElement = document.querySelector('.' + type + '-button');
+ let subElement = document.getElementById('nav-' + type + '-sub');
+
+ if (count) {
+ if (buttonElement) buttonElement.style.display = 'block'; // Fade-in effect replaced by display block
+ if (replace || followup) {
+ updateElement.textContent = count >= 100 ? '99+' : count;
+ } else {
+ count = count + Number(updateElement.textContent.replace(/\++$/, ''));
+ updateElement.textContent = count >= 100 ? '99+' : count;
}
- }
- else {
- $('.' + type + '-update').html('0');
- $('#nav-' + type + '-sub').removeClass('show');
- $('.' + type + '-button').fadeOut(function() {
+ } else {
+ if (updateElement) updateElement.textContent = '0';
+ if (subElement) subElement.classList.remove('show');
+ if (buttonElement) {
+ buttonElement.style.display = 'none'; // Fade-out effect replaced by display none
sse_setNotificationsStatus();
- });
+ }
}
- if(obj[type].notifications.length)
+
+ if (obj[type].notifications.length) {
sse_handleNotificationsItems(type, obj[type].notifications, replace, followup);
+ }
});
sse_setNotificationsStatus();
- // load more notifications if visible notifications count becomes low
- if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children(':not(.tt-filter-active)').length < 15) {
- sse_bs_notifications(sse_type, false, true);
+ // Load more notifications if visible notifications count becomes low
+ if (sse_type && sse_offset !== -1) {
+ let menu = document.getElementById('nav-' + sse_type + '-menu');
+ if (menu && menu.children.length < 15) {
+ sse_bs_notifications(sse_type, false, true);
+ }
}
-
-
}
function sse_handleNotificationsItems(notifyType, data, replace, followup) {
- let notifications_tpl = ((notifyType == 'forums') ? decodeURIComponent($("#nav-notifications-forums-template[rel=template]").html().replace('data-src', 'src')) : decodeURIComponent($("#nav-notifications-template[rel=template]").html().replace('data-src', 'src')));
- let notify_menu = $("#nav-" + notifyType + "-menu");
- let notify_loading = $("#nav-" + notifyType + "-loading");
- let notify_count = $("." + notifyType + "-update");
+ // Get the template, adjust based on the notification type
+ let notifications_tpl = (notifyType === 'forums')
+ ? decodeURIComponent(document.querySelector("#nav-notifications-forums-template[rel=template]").innerHTML.replace('data-src', 'src'))
+ : decodeURIComponent(document.querySelector("#nav-notifications-template[rel=template]").innerHTML.replace('data-src', 'src'));
- if(replace && !followup) {
- notify_menu.html('');
- notify_loading.hide();
- }
-
- $(data).each(function() {
+ let notify_menu = document.getElementById("nav-" + notifyType + "-menu");
+ let notify_loading = document.getElementById("nav-" + notifyType + "-loading");
+ let notify_count = document.getElementsByClassName(notifyType + "-update");
- // do not add a notification if it is already present
-
- // TODO: this is questionable because at least in 'notify' notification type an item can have more than one notifications
- // e.g. one for the mention and one for the item itself.
- //if($('#nav-' + notifyType + '-menu .notification[data-b64mid=\'' + this.b64mid + '\']').length)
- // return true;
+ if (replace && !followup) {
+ notify_menu.innerHTML = ''; // Clear menu
+ notify_loading.style.display = 'none'; // Hide loading
+ }
- if(!replace && !followup && (this.thread_top && notifyType === 'network')) {
- $(document).trigger('hz:handleNetworkNotificationsItems', this);
+ data.forEach(notification => {
+ // Special handling for network notifications
+ if (!replace && !followup && notification.thread_top && notifyType === 'network') {
+ document.dispatchEvent(new CustomEvent('hz:handleNetworkNotificationsItems', { detail: notification }));
}
- let html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.addr,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top,this.unseen,this.private_forum, encodeURIComponent(this.mids), this.body);
- notify_menu.append(html);
+ // Prepare HTML using the template
+ let html = notifications_tpl.format(
+ notification.notify_link,
+ notification.photo,
+ notification.name,
+ notification.addr,
+ notification.message,
+ notification.when,
+ notification.hclass,
+ notification.b64mid,
+ notification.notify_id,
+ notification.thread_top,
+ notification.unseen,
+ notification.private_forum,
+ encodeURIComponent(notification.mids),
+ notification.body
+ );
+
+ // Append the new notification HTML to the menu
+ notify_menu.insertAdjacentHTML('beforeend', html);
});
- if(!replace && !followup) {
- $("#nav-" + notifyType + "-menu .notification").sort(function(a,b) {
- a = new Date(a.dataset.when);
- b = new Date(b.dataset.when);
- return a > b ? -1 : a < b ? 1 : 0;
- }).appendTo('#nav-' + notifyType + '-menu');
+ // Sort notifications by date
+ if (!replace && !followup) {
+ let notifications = Array.from(notify_menu.getElementsByClassName('notification'));
+ notifications.sort((a, b) => {
+ let dateA = new Date(a.dataset.when);
+ let dateB = new Date(b.dataset.when);
+ return dateA > dateB ? -1 : dateA < dateB ? 1 : 0;
+ });
+ notifications.forEach(notification => notify_menu.appendChild(notification));
}
- $("#nav-" + notifyType + "-menu .notifications-autotime").timeago();
-
- if($('#tt-' + notifyType + '-only').hasClass('active'))
- $('#nav-' + notifyType + '-menu [data-thread_top=false]').addClass('tt-filter-active');
-
- if($('#cn-' + notifyType + '-input').length) {
- let filter = $('#cn-' + notifyType + '-input').val().toString().toLowerCase();
- if(filter) {
- filter = filter.indexOf('%') == 0 ? filter.substring(1) : filter;
+ // Filter thread_top notifications if the filter is active
+ let filterThreadTop = document.getElementById('tt-' + notifyType + '-only');
+ if (filterThreadTop && filterThreadTop.classList.contains('active')) {
+ let notifications = notify_menu.querySelectorAll('[data-thread_top="false"]');
+ notifications.forEach(notification => notification.classList.add('tt-filter-active'));
+ }
- $('#nav-' + notifyType + '-menu .notification').each(function(i, el) {
- let cn = $(el).data('contact_name').toString().toLowerCase();
- let ca = $(el).data('contact_addr').toString().toLowerCase();
- if(cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1)
- $(el).addClass('cn-filter-active');
- else
- $(el).removeClass('cn-filter-active');
+ // Filter notifications based on the input field
+ let filterInput = document.getElementById('cn-' + notifyType + '-input');
+ if (filterInput) {
+ let filter = filterInput.value.toString().toLowerCase();
+ if (filter) {
+ if (filter.indexOf('%') === 0) filter = filter.substring(1); // Remove the percent if it exists
+ let notifications = notify_menu.querySelectorAll('.notification');
+ notifications.forEach(notification => {
+ let cn = notification.dataset.contact_name.toString().toLowerCase();
+ let ca = notification.dataset.contact_addr.toString().toLowerCase();
+ if (cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1) {
+ notification.classList.add('cn-filter-active');
+ } else {
+ notification.classList.remove('cn-filter-active');
+ }
});
}
}
+
+ // Update relative time for notifications
+ updateRelativeTime('.autotime-narrow');
}
+
function sse_updateNotifications(type, mid) {
- /*
- if(type === 'pubs')
- return true;
- */
- if(type === 'notify' && (mid !== bParam_mid || sse_type !== 'notify'))
+ // Skip processing if the type is 'notify' and the conditions don't match
+ if (type === 'notify' && (mid !== bParam_mid || sse_type !== 'notify')) {
return true;
- /*
- var count = Number($('.' + type + '-update').html());
-
- count--;
-
- if(count < 1) {
- $('.' + type + '-update').html(count);
- $('.' + type + '-button').fadeOut(function() {
- sse_setNotificationsStatus();
- });
- }
- else {
- $('.' + type + '-update').html(count);
}
- */
- $('#nav-' + type + '-menu .notification[data-b64mid=\'' + mid + '\']').fadeOut(function() {
- this.remove();
- });
+ // Find the notification element based on its 'data-b64mid' attribute
+ let notification = document.querySelector(`#nav-${type}-menu .notification[data-b64mid='${mid}']`);
+ if (notification) {
+ notification.remove();
+ }
}
+
function sse_setNotificationsStatus(data) {
- var primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files'];
- var secondary_notifications = ['network', 'forums', 'all_events', 'pubs'];
- var all_notifications = primary_notifications.concat(secondary_notifications);
+ let primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files'];
+ let secondary_notifications = ['network', 'forums', 'all_events', 'pubs'];
+ let all_notifications = primary_notifications.concat(secondary_notifications);
- var primary_available = false;
- var any_available = false;
+ let primary_available = false;
+ let any_available = false;
- all_notifications.forEach(function(type, index) {
- if($('.' + type + '-button').css('display') == 'block') {
+ // Loop through all notifications and check their visibility
+ all_notifications.forEach(function (type) {
+ let button = document.querySelector(`.${type}-button`);
+ if (button && getComputedStyle(button).display === 'block') {
any_available = true;
- if(primary_notifications.indexOf(type) > -1)
+ if (primary_notifications.indexOf(type) > -1) {
primary_available = true;
+ }
}
});
- if(primary_available) {
- $('.notifications-btn-icon').removeClass('bi-exclamation-circle');
- $('.notifications-btn-icon').addClass('bi-exclamation-triangle');
- }
- else {
- $('.notifications-btn-icon').removeClass('bi-exclamation-triangle');
- $('.notifications-btn-icon').addClass('bi-exclamation-circle');
+ // Update notification button icon based on the primary notification availability
+ let notificationIcon = document.querySelector('.notifications-btn-icon');
+ if (primary_available) {
+ notificationIcon.classList.remove('bi-exclamation-circle');
+ notificationIcon.classList.add('bi-exclamation-triangle');
+ } else {
+ notificationIcon.classList.remove('bi-exclamation-triangle');
+ notificationIcon.classList.add('bi-exclamation-circle');
}
- if(any_available) {
- $('.notifications-btn').css('opacity', 1);
- $('#no_notifications').hide();
- $('#notifications').show();
- }
- else {
- $('.notifications-btn').css('opacity', 0.5);
- $('#navbar-collapse-1').removeClass('show');
- $('#no_notifications').show();
- $('#notifications').hide();
+ // Update visibility of notification button and sections
+ let notificationsBtn = document.querySelector('.notifications-btn');
+ let noNotifications = document.querySelector('#no_notifications');
+ let notifications = document.querySelector('#notifications');
+ let navbarCollapse = document.querySelector('#navbar-collapse-1');
+
+ if (any_available) {
+ notificationsBtn.style.opacity = 1;
+ noNotifications.style.display = 'none';
+ notifications.style.display = 'block';
+ } else {
+ notificationsBtn.style.opacity = 0.5;
+ if (navbarCollapse) navbarCollapse.classList.remove('show');
+ noNotifications.style.display = 'block';
+ notifications.style.display = 'none';
}
- if (typeof data !== typeof undefined) {
- data.forEach(function(nmid, index) {
-
+ // Handle specific notifications if 'data' is provided
+ if (typeof data !== 'undefined') {
+ data.forEach(function (nmid) {
sse_rmids.push(nmid);
- if($('.notification[data-b64mid=\'' + nmid + '\']').length) {
- $('.notification[data-b64mid=\'' + nmid + '\']').each(function() {
- var n = this.parentElement.id.split('-');
- return sse_updateNotifications(n[1], nmid);
- });
+ // Handle regular notifications
+ let notification = document.querySelector(`.notification[data-b64mid='${nmid}']`);
+ if (notification) {
+ let parentId = notification.parentElement.id.split('-')[1];
+ sse_updateNotifications(parentId, nmid);
}
- // special handling for forum notifications
- $('.notification-forum').filter(function() {
- var fmids = decodeURIComponent($(this).data('b64mids'));
- var n = this.parentElement.id.split('-');
- if(fmids.indexOf(nmid) > -1) {
- var fcount = Number($('.' + n[1] + '-update').html());
+ // Special handling for forum notifications
+ let forumNotifications = document.querySelectorAll('.notification-forum');
+ forumNotifications.forEach(function (forumNotification) {
+ let fmids = decodeURIComponent(forumNotification.dataset.b64mids);
+ let parentId = forumNotification.parentElement.id.split('-')[1];
+
+ if (fmids.indexOf(nmid) > -1) {
+ let updateElem = document.querySelector(`.${parentId}-update`);
+ let fcount = Number(updateElem.innerText);
fcount--;
- $('.' + n[1] + '-update').html(fcount);
- if(fcount < 1) {
- $('.' + n[1] + '-button').fadeOut();
- $('#nav-' + n[1] + '-sub').removeClass('show');
+ updateElem.innerText = fcount;
+
+ if (fcount < 1) {
+ let button = document.querySelector(`.${parentId}-button`);
+ button.style.display = 'none';
+ let subMenu = document.querySelector(`#nav-${parentId}-sub`);
+ if (subMenu) subMenu.classList.remove('show');
}
- var count = Number($(this).find('.bg-secondary').html());
+
+ let countElem = forumNotification.querySelector('.bg-secondary');
+ let count = Number(countElem.innerText);
count--;
- $(this).find('.bg-secondary').html(count);
- if(count < 1)
- $(this).remove();
+ countElem.innerText = count;
+
+ if (count < 1) {
+ forumNotification.remove();
+ }
}
});
});
}
-
}
function sse_fallback() {
- $.get('/sse', function(obj) {
- if(! obj)
- return;
+ fetch('/sse')
+ .then(response => response.json())
+ .then(obj => {
+ if (!obj) return;
- console.log('sse fallback');
- console.log(obj);
+ console.log('sse fallback');
+ console.log(obj);
- sse_handleNotifications(obj, false, false);
- });
+ sse_handleNotifications(obj, false, false);
+ })
+ .catch(error => {
+ console.error('Error fetching SSE data:', error);
+ });
}
+
</script>
{{if !$sys_only}}
@@ -552,7 +714,7 @@
<div class="text-truncate pe-1">
<strong title="{2} - {3}">{2}</strong>
</div>
- <small class="notifications-autotime opacity-75" title="{5}"></small>
+ <small class="autotime-narrow opacity-75" title="{5}"></small>
</div>
<div class="text-truncate">{4}</div>
</div>
diff --git a/view/tpl/pinned_item.tpl b/view/tpl/pinned_item.tpl
index 90905a145..aa5b94664 100644
--- a/view/tpl/pinned_item.tpl
+++ b/view/tpl/pinned_item.tpl
@@ -214,5 +214,5 @@
</script>
{{/if}}
<script>
- $(".pinned-item .autotime").timeago();
+ updateRelativeTime('.autotime');
</script>
diff --git a/view/tpl/register.tpl b/view/tpl/register.tpl
index cc2b8e47b..98cf84845 100644
--- a/view/tpl/register.tpl
+++ b/view/tpl/register.tpl
@@ -39,7 +39,7 @@
{{include file="field_input.tpl" field=$name}}
</div>
<div class="position-relative">
- <div id="nick-hub" class="position-absolute" style="top: 2.3rem; right: 0.75rem;"><span class="text-muted">{{$nickhub}}</span></div>
+ <div id="nick-hub" class="position-absolute" style="top: 2rem; right: 0.75rem;"><span class="text-muted">{{$nickhub}}</span></div>
<div id="nick-spinner" class="spinner-wrapper position-absolute" style="top: 2.5rem; right: 0.75rem;"><div class="spinner s"></div></div>
{{include file="field_input.tpl" field=$nickname}}
</div>
diff --git a/view/tpl/rmagic.tpl b/view/tpl/rmagic.tpl
index bc181c323..e852223e0 100644
--- a/view/tpl/rmagic.tpl
+++ b/view/tpl/rmagic.tpl
@@ -1,9 +1,11 @@
-<div class="generic-content-wrapper-styled">
- <h3>{{$title}}</h3>
- <form action="rmagic" method="post" >
- <div class="mb-3">
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+ <form action="rmagic" method="post" >
{{include file="field_input.tpl" field=$address}}
<input class="btn btn-primary" type="submit" name="submit" id="rmagic-submit-button" value="{{$submit}}" />
- </div>
- </form>
+ </form>
+ </div>
</div>
diff --git a/view/tpl/search_item.tpl b/view/tpl/search_item.tpl
index 709e40a13..d693c4d37 100644
--- a/view/tpl/search_item.tpl
+++ b/view/tpl/search_item.tpl
@@ -26,18 +26,24 @@
{{if $item.location}}
{{$item.location}}
{{/if}}
- {{if $item.delayed}}
- <i class="bi bi-clock"></i>
- {{/if}}
{{if $item.editedtime}}
- <i class="bi bi-pencil"></i>
+ <i class="bi bi-pencil" title="{{$item.editedtime}}"></i>
{{/if}}
{{if $item.verified}}
<i class="bi bi-shield-check" title="{{$item.verified}}"></i>
{{elseif $item.forged}}
<i class="bi bi-shield-exclamation text-danger" title="{{$item.forged}}"></i>
{{/if}}
- <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
+ {{if $item.no_comment}}
+ <i class="bi bi-ban" title="{{$item.no_comment}}"></i>
+ {{/if}}
+ {{if $item.delayed}}
+ <i class="bi bi-clock" title="{{$item.delayed}}"></i>
+ {{/if}}
+ {{if $item.expiretime}}
+ <i class="bi bi-clock-history" title="{{$item.expiretime}}"></i>
+ {{/if}}
+ <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
</div>
{{if $item.pinned}}
<div class="wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="bi bi-pin-fill"></i></div>
diff --git a/view/tpl/uexport.tpl b/view/tpl/uexport.tpl
index 099a574e8..ca529f8f7 100644
--- a/view/tpl/uexport.tpl
+++ b/view/tpl/uexport.tpl
@@ -8,7 +8,7 @@
<p>
{{$channel_info}}
</p>
- <a href="uexport/channel" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$channel_title}}</a>
+ <a href="uexport/channel" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$channel_title}}</a>
</p>
<p class="mb-3">
<h3>{{$content_title}}</h3>
@@ -17,7 +17,7 @@
{{$items_extra_info}}
</p>
{{foreach $years as $year}}
- <a href="uexport/{{$year}}" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$year}}</a>
+ <a href="uexport/{{$year}}" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$year}}</a>
{{/foreach}}
</p>
<p class="mb-3">
@@ -26,7 +26,7 @@
{{$wikis_info}}
{{$items_extra_info}}
</p>
- <a href="uexport/wikis" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$wikis_title}}</a>
+ <a href="uexport/wikis" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$wikis_title}}</a>
</p>
<p class="mb-3">
<h3>{{$webpages_title}}</h3>
@@ -34,7 +34,7 @@
{{$webpages_info}}
{{$items_extra_info}}
</p>
- <a href="uexport/webpages" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$webpages_title}}</a>
+ <a href="uexport/webpages" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$webpages_title}}</a>
</p>
<p class="mb-3">
<h3>{{$events_title}}</h3>
@@ -42,7 +42,7 @@
{{$events_info}}
{{$items_extra_info}}
</p>
- <a href="uexport/events" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$events_title}}</a>
+ <a href="uexport/events" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$events_title}}</a>
</p>
<p class="mb-3">
<h3>{{$chatrooms_title}}</h3>
@@ -50,7 +50,7 @@
{{$chatrooms_info}}
{{$items_extra_info}}
</p>
- <a href="uexport/chatrooms" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$chatrooms_title}}</a>
+ <a href="uexport/chatrooms" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$chatrooms_title}}</a>
</p>
</div>
</div>